From 91e9079b81963334fe73c2a771ba8a22901a08df Mon Sep 17 00:00:00 2001 From: Jake Wang Date: Thu, 12 Mar 2026 16:26:43 -0700 Subject: [PATCH 1/4] Refactor data collection pipelines, added runner, prices added to Kroger output --- .DS_Store | Bin 8196 -> 0 bytes .env | 31 +- .eslintrc.json | 2 +- .gitignore | 7 +- .husky/pre-commit | 3 +- KrogerPipeline/kroger_catalogue.js | 1269 +- KrogerPipeline/kroger_stores.js | 976 +- Walmart.sql | 4058 ---- .../TaxonomyBrowsing/generateTaxonomy.js | 137 +- WalmartPipeline/classify_ingredients.py | 739 +- WalmartPipeline/fetchProducts.js | 682 +- node_modules/.bin/acorn | 1 - node_modules/.bin/eslint | 1 - .../.bin/eslint-config-prettier-check | 1 - node_modules/.bin/esparse | 1 - node_modules/.bin/esvalidate | 1 - node_modules/.bin/husky | 1 - node_modules/.bin/js-yaml | 1 - node_modules/.bin/mkdirp | 1 - node_modules/.bin/node-lint | 1 - node_modules/.bin/prettier | 1 - node_modules/.bin/rimraf | 1 - node_modules/.bin/semver | 1 - node_modules/.bin/uuid | 1 - node_modules/.bin/which | 1 - node_modules/.package-lock.json | 1716 -- node_modules/acorn-jsx/LICENSE | 19 - node_modules/acorn-jsx/README.md | 64 - node_modules/acorn-jsx/index.js | 3 - node_modules/acorn-jsx/inject.js | 433 - .../acorn-jsx/node_modules/.bin/acorn | 1 - .../node_modules/acorn/.editorconfig | 7 - .../node_modules/acorn/.gitattributes | 1 - .../acorn-jsx/node_modules/acorn/.npmignore | 3 - .../node_modules/acorn/.tern-project | 6 - .../acorn-jsx/node_modules/acorn/.travis.yml | 7 - .../acorn-jsx/node_modules/acorn/AUTHORS | 59 - .../acorn-jsx/node_modules/acorn/CHANGELOG.md | 159 - .../acorn-jsx/node_modules/acorn/LICENSE | 19 - .../acorn-jsx/node_modules/acorn/README.md | 407 - .../acorn-jsx/node_modules/acorn/bin/acorn | 65 - .../acorn/bin/generate-identifier-regex.js | 55 - .../node_modules/acorn/bin/update_authors.sh | 6 - .../acorn-jsx/node_modules/acorn/dist/.keep | 0 .../node_modules/acorn/dist/acorn.es.js | 3112 --- .../node_modules/acorn/dist/acorn.js | 3142 --- .../node_modules/acorn/dist/acorn_loose.es.js | 1261 -- .../node_modules/acorn/dist/acorn_loose.js | 1273 -- .../node_modules/acorn/dist/walk.es.js | 342 - .../acorn-jsx/node_modules/acorn/dist/walk.js | 360 - .../acorn-jsx/node_modules/acorn/package.json | 46 - .../node_modules/acorn/rollup/config.bin.js | 15 - .../node_modules/acorn/rollup/config.loose.js | 20 - .../node_modules/acorn/rollup/config.main.js | 11 - .../node_modules/acorn/rollup/config.walk.js | 11 - .../node_modules/acorn/src/bin/acorn.js | 58 - .../node_modules/acorn/src/expression.js | 701 - .../node_modules/acorn/src/identifier.js | 82 - .../acorn-jsx/node_modules/acorn/src/index.js | 67 - .../node_modules/acorn/src/location.js | 26 - .../node_modules/acorn/src/locutil.js | 42 - .../acorn/src/loose/expression.js | 514 - .../node_modules/acorn/src/loose/index.js | 50 - .../node_modules/acorn/src/loose/parseutil.js | 1 - .../node_modules/acorn/src/loose/state.js | 160 - .../node_modules/acorn/src/loose/statement.js | 425 - .../node_modules/acorn/src/loose/tokenize.js | 108 - .../acorn-jsx/node_modules/acorn/src/lval.js | 216 - .../acorn-jsx/node_modules/acorn/src/node.js | 50 - .../node_modules/acorn/src/options.js | 121 - .../node_modules/acorn/src/parseutil.js | 109 - .../acorn-jsx/node_modules/acorn/src/state.js | 104 - .../node_modules/acorn/src/statement.js | 654 - .../node_modules/acorn/src/tokencontext.js | 110 - .../node_modules/acorn/src/tokenize.js | 696 - .../node_modules/acorn/src/tokentype.js | 147 - .../acorn-jsx/node_modules/acorn/src/util.js | 9 - .../node_modules/acorn/src/walk/index.js | 342 - .../node_modules/acorn/src/whitespace.js | 13 - node_modules/acorn-jsx/package.json | 28 - node_modules/acorn/AUTHORS | 79 - node_modules/acorn/CHANGELOG.md | 508 - node_modules/acorn/LICENSE | 19 - node_modules/acorn/README.md | 467 - .../acorn/acorn-loose/dist/acorn-loose.js | 1372 -- .../acorn/acorn-loose/dist/acorn-loose.js.map | 1 - .../acorn/acorn-loose/dist/acorn-loose.mjs | 1363 -- .../acorn-loose/dist/acorn-loose.mjs.map | 1 - node_modules/acorn/acorn-walk/dist/walk.js | 461 - .../acorn/acorn-walk/dist/walk.js.map | 1 - node_modules/acorn/acorn-walk/dist/walk.mjs | 441 - .../acorn/acorn-walk/dist/walk.mjs.map | 1 - node_modules/acorn/acorn/dist/acorn.js | 4992 ----- node_modules/acorn/acorn/dist/acorn.js.map | 1 - node_modules/acorn/acorn/dist/acorn.mjs | 4961 ----- node_modules/acorn/acorn/dist/acorn.mjs.map | 1 - node_modules/acorn/acorn/dist/bin.js | 64 - node_modules/acorn/bin/_acorn.js | 69 - node_modules/acorn/bin/acorn | 4 - node_modules/acorn/bin/run_test262.js | 21 - node_modules/acorn/bin/test262.whitelist | 404 - node_modules/acorn/dist/.keep | 0 node_modules/acorn/dist/acorn.es.js | 5316 ----- node_modules/acorn/dist/acorn.js | 5347 ----- node_modules/acorn/dist/acorn_loose.es.js | 1424 -- node_modules/acorn/dist/acorn_loose.js | 1434 -- node_modules/acorn/dist/walk.es.js | 423 - node_modules/acorn/dist/walk.js | 443 - node_modules/acorn/package.json | 60 - node_modules/ajv-keywords/LICENSE | 21 - node_modules/ajv-keywords/README.md | 656 - node_modules/ajv-keywords/index.js | 35 - .../ajv-keywords/keywords/_formatLimit.js | 90 - node_modules/ajv-keywords/keywords/_util.js | 15 - .../ajv-keywords/keywords/deepProperties.js | 54 - .../ajv-keywords/keywords/deepRequired.js | 57 - .../keywords/dot/_formatLimit.jst | 116 - .../keywords/dot/patternRequired.jst | 33 - .../ajv-keywords/keywords/dot/switch.jst | 73 - .../ajv-keywords/keywords/dotjs/README.md | 3 - .../keywords/dotjs/_formatLimit.js | 176 - .../keywords/dotjs/patternRequired.js | 58 - .../ajv-keywords/keywords/dotjs/switch.js | 128 - .../ajv-keywords/keywords/dynamicDefaults.js | 68 - .../ajv-keywords/keywords/formatMaximum.js | 3 - .../ajv-keywords/keywords/formatMinimum.js | 3 - node_modules/ajv-keywords/keywords/if.js | 21 - node_modules/ajv-keywords/keywords/index.js | 19 - .../ajv-keywords/keywords/instanceof.js | 54 - .../ajv-keywords/keywords/patternRequired.js | 21 - .../ajv-keywords/keywords/prohibited.js | 25 - node_modules/ajv-keywords/keywords/range.js | 36 - node_modules/ajv-keywords/keywords/regexp.js | 36 - node_modules/ajv-keywords/keywords/select.js | 79 - node_modules/ajv-keywords/keywords/switch.js | 38 - node_modules/ajv-keywords/keywords/typeof.js | 32 - .../keywords/uniqueItemProperties.js | 32 - node_modules/ajv-keywords/package.json | 51 - node_modules/ajv/LICENSE | 22 - node_modules/ajv/README.md | 1327 -- node_modules/ajv/dist/ajv.bundle.js | 7345 ------- node_modules/ajv/dist/ajv.min.js | 3 - node_modules/ajv/dist/ajv.min.js.map | 1 - node_modules/ajv/dist/nodent.min.js | 2 - node_modules/ajv/dist/regenerator.min.js | 2 - node_modules/ajv/lib/$data.js | 49 - node_modules/ajv/lib/ajv.d.ts | 358 - node_modules/ajv/lib/ajv.js | 502 - node_modules/ajv/lib/compile/_rules.js | 31 - node_modules/ajv/lib/compile/equal.js | 3 - node_modules/ajv/lib/compile/formats.js | 135 - node_modules/ajv/lib/compile/index.js | 380 - node_modules/ajv/lib/compile/resolve.js | 271 - node_modules/ajv/lib/compile/rules.js | 58 - node_modules/ajv/lib/compile/util.js | 267 - node_modules/ajv/lib/dot/_limit.jst | 96 - node_modules/ajv/lib/dot/_limitItems.jst | 10 - node_modules/ajv/lib/dot/_limitLength.jst | 10 - node_modules/ajv/lib/dot/_limitProperties.jst | 10 - node_modules/ajv/lib/dot/allOf.jst | 34 - node_modules/ajv/lib/dot/anyOf.jst | 48 - node_modules/ajv/lib/dot/coerce.def | 61 - node_modules/ajv/lib/dot/contains.jst | 57 - node_modules/ajv/lib/dot/custom.jst | 191 - node_modules/ajv/lib/dot/defaults.def | 32 - node_modules/ajv/lib/dot/definitions.def | 199 - node_modules/ajv/lib/dot/dependencies.jst | 80 - node_modules/ajv/lib/dot/errors.def | 194 - node_modules/ajv/lib/dot/format.jst | 106 - node_modules/ajv/lib/dot/items.jst | 100 - node_modules/ajv/lib/dot/multipleOf.jst | 20 - node_modules/ajv/lib/dot/oneOf.jst | 44 - node_modules/ajv/lib/dot/properties.jst | 327 - node_modules/ajv/lib/dot/propertyNames.jst | 54 - node_modules/ajv/lib/dot/ref.jst | 85 - node_modules/ajv/lib/dot/uniqueItems.jst | 38 - node_modules/ajv/lib/dot/validate.jst | 272 - node_modules/ajv/lib/dotjs/_limit.js | 149 - node_modules/ajv/lib/dotjs/_limitItems.js | 76 - node_modules/ajv/lib/dotjs/_limitLength.js | 81 - .../ajv/lib/dotjs/_limitProperties.js | 76 - node_modules/ajv/lib/dotjs/allOf.js | 43 - node_modules/ajv/lib/dotjs/anyOf.js | 73 - node_modules/ajv/lib/dotjs/const.js | 55 - node_modules/ajv/lib/dotjs/contains.js | 81 - node_modules/ajv/lib/dotjs/custom.js | 226 - node_modules/ajv/lib/dotjs/dependencies.js | 167 - node_modules/ajv/lib/dotjs/enum.js | 65 - node_modules/ajv/lib/dotjs/format.js | 149 - node_modules/ajv/lib/dotjs/items.js | 140 - node_modules/ajv/lib/dotjs/multipleOf.js | 76 - node_modules/ajv/lib/dotjs/not.js | 83 - node_modules/ajv/lib/dotjs/oneOf.js | 70 - node_modules/ajv/lib/dotjs/pattern.js | 74 - node_modules/ajv/lib/dotjs/properties.js | 468 - node_modules/ajv/lib/dotjs/propertyNames.js | 81 - node_modules/ajv/lib/dotjs/ref.js | 123 - node_modules/ajv/lib/dotjs/required.js | 268 - node_modules/ajv/lib/dotjs/uniqueItems.js | 71 - node_modules/ajv/lib/dotjs/validate.js | 458 - node_modules/ajv/lib/keyword.js | 135 - node_modules/ajv/lib/patternGroups.js | 36 - node_modules/ajv/lib/refs/$data.json | 17 - .../ajv/lib/refs/json-schema-draft-04.json | 150 - node_modules/ajv/lib/refs/json-schema-v5.json | 250 - node_modules/ajv/package.json | 103 - node_modules/ajv/scripts/info | 10 - node_modules/ajv/scripts/prepare-tests | 9 - node_modules/ajv/scripts/travis-gh-pages | 23 - node_modules/ansi-escapes/index.js | 131 - node_modules/ansi-escapes/license | 9 - node_modules/ansi-escapes/package.json | 50 - node_modules/ansi-escapes/readme.md | 184 - node_modules/ansi-regex/index.js | 4 - node_modules/ansi-regex/license | 21 - node_modules/ansi-regex/package.json | 64 - node_modules/ansi-regex/readme.md | 39 - node_modules/ansi-styles/index.js | 65 - node_modules/ansi-styles/license | 21 - node_modules/ansi-styles/package.json | 50 - node_modules/ansi-styles/readme.md | 86 - node_modules/argparse/CHANGELOG.md | 185 - node_modules/argparse/LICENSE | 21 - node_modules/argparse/README.md | 257 - node_modules/argparse/index.js | 3 - node_modules/argparse/lib/action.js | 146 - node_modules/argparse/lib/action/append.js | 53 - .../argparse/lib/action/append/constant.js | 47 - node_modules/argparse/lib/action/count.js | 40 - node_modules/argparse/lib/action/help.js | 47 - node_modules/argparse/lib/action/store.js | 50 - .../argparse/lib/action/store/constant.js | 43 - .../argparse/lib/action/store/false.js | 27 - .../argparse/lib/action/store/true.js | 26 - .../argparse/lib/action/subparsers.js | 149 - node_modules/argparse/lib/action/version.js | 47 - node_modules/argparse/lib/action_container.js | 482 - node_modules/argparse/lib/argparse.js | 14 - node_modules/argparse/lib/argument/error.js | 50 - .../argparse/lib/argument/exclusive.js | 54 - node_modules/argparse/lib/argument/group.js | 75 - node_modules/argparse/lib/argument_parser.js | 1161 -- node_modules/argparse/lib/const.js | 21 - .../argparse/lib/help/added_formatters.js | 87 - node_modules/argparse/lib/help/formatter.js | 795 - node_modules/argparse/lib/namespace.js | 76 - node_modules/argparse/lib/utils.js | 57 - node_modules/argparse/package.json | 34 - node_modules/babel-code-frame/.npmignore | 3 - node_modules/babel-code-frame/README.md | 60 - node_modules/babel-code-frame/lib/index.js | 141 - .../babel-code-frame/package-lock.json | 66 - node_modules/babel-code-frame/package.json | 15 - node_modules/buffer-from/LICENSE | 21 - node_modules/buffer-from/index.js | 72 - node_modules/buffer-from/package.json | 19 - node_modules/buffer-from/readme.md | 69 - node_modules/caller-path/index.js | 6 - node_modules/caller-path/package.json | 41 - node_modules/caller-path/readme.md | 36 - node_modules/callsites/index.js | 8 - node_modules/callsites/package.json | 36 - node_modules/callsites/readme.md | 47 - node_modules/chalk/index.js | 116 - node_modules/chalk/license | 21 - node_modules/chalk/package.json | 70 - node_modules/chalk/readme.md | 213 - node_modules/chardet/.npmignore | 2 - node_modules/chardet/.travis.yml | 5 - node_modules/chardet/LICENSE | 19 - node_modules/chardet/README.md | 66 - node_modules/chardet/encoding/iso2022.js | 141 - node_modules/chardet/encoding/mbcs.js | 502 - node_modules/chardet/encoding/sbcs.js | 907 - node_modules/chardet/encoding/unicode.js | 112 - node_modules/chardet/encoding/utf8.js | 84 - node_modules/chardet/index.js | 117 - node_modules/chardet/match.js | 6 - node_modules/chardet/package.json | 43 - node_modules/chardet/yarn.lock | 364 - node_modules/circular-json/.npmignore | 9 - node_modules/circular-json/LICENSE.txt | 19 - node_modules/circular-json/README.md | 135 - .../circular-json/build/circular-json.js | 2 - .../circular-json/build/circular-json.max.js | 189 - .../circular-json/build/circular-json.node.js | 185 - node_modules/circular-json/package.json | 37 - .../circular-json/template/license.after | 2 - .../circular-json/template/license.before | 1 - node_modules/cli-cursor/index.js | 39 - node_modules/cli-cursor/license | 21 - node_modules/cli-cursor/package.json | 46 - node_modules/cli-cursor/readme.md | 45 - .../00ef1b3d-3687-482b-8d03-de2f76b58f54.json | 1 - .../00ef1b3d-3687-482b-8d03-de2f76b58f54.json | 1 - .../.nyc_output/processinfo/index.json | 1 - node_modules/cli-width/.travis.yml | 14 - node_modules/cli-width/CHANGELOG.md | 25 - node_modules/cli-width/LICENSE | 13 - node_modules/cli-width/README.md | 72 - node_modules/cli-width/index.js | 49 - node_modules/cli-width/package.json | 29 - node_modules/co/History.md | 172 - node_modules/co/LICENSE | 22 - node_modules/co/Readme.md | 212 - node_modules/co/index.js | 237 - node_modules/co/package.json | 34 - node_modules/color-convert/conversions.js | 868 - node_modules/color-convert/index.js | 78 - node_modules/color-convert/package.json | 46 - node_modules/color-convert/route.js | 97 - node_modules/color-name/.eslintrc.json | 43 - node_modules/color-name/.npmignore | 107 - node_modules/color-name/LICENSE | 8 - node_modules/color-name/README.md | 11 - node_modules/color-name/index.js | 152 - node_modules/color-name/package.json | 25 - node_modules/color-name/test.js | 7 - node_modules/concat-stream/LICENSE | 24 - node_modules/concat-stream/index.js | 144 - node_modules/concat-stream/package.json | 55 - node_modules/concat-stream/readme.md | 102 - node_modules/core-util-is/LICENSE | 19 - node_modules/core-util-is/README.md | 3 - node_modules/core-util-is/lib/util.js | 107 - node_modules/core-util-is/package.json | 38 - node_modules/cross-spawn/CHANGELOG.md | 6 - node_modules/cross-spawn/LICENSE | 19 - node_modules/cross-spawn/README.md | 85 - node_modules/cross-spawn/index.js | 59 - node_modules/cross-spawn/lib/enoent.js | 73 - node_modules/cross-spawn/lib/parse.js | 113 - .../cross-spawn/lib/util/escapeArgument.js | 30 - .../cross-spawn/lib/util/escapeCommand.js | 12 - .../lib/util/hasEmptyArgumentBug.js | 18 - .../cross-spawn/lib/util/readShebang.js | 37 - .../cross-spawn/lib/util/resolveCommand.js | 31 - node_modules/cross-spawn/package.json | 53 - node_modules/debug/CHANGELOG.md | 395 - node_modules/debug/LICENSE | 19 - node_modules/debug/README.md | 437 - node_modules/debug/node.js | 1 - node_modules/debug/package.json | 51 - node_modules/debug/src/browser.js | 180 - node_modules/debug/src/common.js | 249 - node_modules/debug/src/index.js | 12 - node_modules/debug/src/node.js | 177 - node_modules/doctrine/CHANGELOG.md | 94 - node_modules/doctrine/LICENSE | 177 - .../doctrine/LICENSE.closure-compiler | 202 - node_modules/doctrine/LICENSE.esprima | 19 - node_modules/doctrine/README.md | 165 - node_modules/doctrine/lib/doctrine.js | 899 - node_modules/doctrine/lib/typed.js | 1305 -- node_modules/doctrine/lib/utility.js | 35 - node_modules/doctrine/package.json | 57 - node_modules/dotenv/CHANGELOG.md | 621 - node_modules/dotenv/README-es.md | 774 - node_modules/dotenv/README.md | 774 - node_modules/dotenv/lib/main.d.ts | 179 - node_modules/dotenv/lib/main.js | 431 - node_modules/dotenv/package.json | 62 - node_modules/escape-string-regexp/index.js | 11 - node_modules/escape-string-regexp/license | 21 - .../escape-string-regexp/package.json | 41 - node_modules/escape-string-regexp/readme.md | 27 - .../@typescript-eslint.js | 21 - .../eslint-config-prettier/CHANGELOG.md | 360 - node_modules/eslint-config-prettier/LICENSE | 21 - node_modules/eslint-config-prettier/README.md | 794 - node_modules/eslint-config-prettier/babel.js | 10 - .../eslint-config-prettier/bin/cli.js | 207 - .../eslint-config-prettier/bin/validators.js | 54 - .../eslint-config-prettier/flowtype.js | 15 - node_modules/eslint-config-prettier/index.js | 103 - .../eslint-config-prettier/package.json | 67 - node_modules/eslint-config-prettier/react.js | 29 - .../eslint-config-prettier/standard.js | 9 - .../eslint-config-prettier/unicorn.js | 8 - node_modules/eslint-config-prettier/vue.js | 43 - node_modules/eslint-scope/CHANGELOG.md | 25 - node_modules/eslint-scope/LICENSE | 23 - node_modules/eslint-scope/README.md | 54 - node_modules/eslint-scope/lib/definition.js | 86 - node_modules/eslint-scope/lib/index.js | 165 - .../eslint-scope/lib/pattern-visitor.js | 152 - node_modules/eslint-scope/lib/reference.js | 167 - node_modules/eslint-scope/lib/referencer.js | 638 - .../eslint-scope/lib/scope-manager.js | 255 - node_modules/eslint-scope/lib/scope.js | 722 - node_modules/eslint-scope/lib/variable.js | 89 - .../node_modules/estraverse/.jshintrc | 16 - .../node_modules/estraverse/LICENSE.BSD | 19 - .../node_modules/estraverse/README.md | 153 - .../node_modules/estraverse/estraverse.js | 782 - .../node_modules/estraverse/gulpfile.js | 70 - .../node_modules/estraverse/package.json | 40 - node_modules/eslint-scope/package.json | 46 - node_modules/eslint-visitor-keys/CHANGELOG.md | 25 - node_modules/eslint-visitor-keys/README.md | 98 - node_modules/eslint-visitor-keys/lib/index.js | 81 - .../eslint-visitor-keys/lib/visitor-keys.json | 284 - node_modules/eslint-visitor-keys/package.json | 40 - node_modules/eslint/CHANGELOG.md | 4598 ---- node_modules/eslint/LICENSE | 19 - node_modules/eslint/README.md | 254 - node_modules/eslint/bin/eslint.js | 75 - node_modules/eslint/conf/blank-script.json | 21 - node_modules/eslint/conf/category-list.json | 40 - node_modules/eslint/conf/config-schema.js | 70 - .../eslint/conf/default-cli-options.js | 30 - node_modules/eslint/conf/environments.js | 233 - node_modules/eslint/conf/eslint-all.js | 31 - .../eslint/conf/eslint-recommended.js | 271 - node_modules/eslint/conf/replacements.json | 22 - node_modules/eslint/lib/api.js | 16 - node_modules/eslint/lib/ast-utils.js | 1346 -- node_modules/eslint/lib/cli-engine.js | 720 - node_modules/eslint/lib/cli.js | 219 - .../code-path-analysis/code-path-analyzer.js | 659 - .../code-path-analysis/code-path-segment.js | 245 - .../lib/code-path-analysis/code-path-state.js | 1440 -- .../lib/code-path-analysis/code-path.js | 239 - .../lib/code-path-analysis/debug-helpers.js | 200 - .../lib/code-path-analysis/fork-context.js | 260 - .../lib/code-path-analysis/id-generator.js | 46 - node_modules/eslint/lib/config.js | 364 - node_modules/eslint/lib/config/autoconfig.js | 359 - .../eslint/lib/config/config-cache.js | 130 - node_modules/eslint/lib/config/config-file.js | 604 - .../eslint/lib/config/config-initializer.js | 605 - node_modules/eslint/lib/config/config-ops.js | 381 - node_modules/eslint/lib/config/config-rule.js | 321 - .../eslint/lib/config/config-validator.js | 251 - .../eslint/lib/config/environments.js | 84 - node_modules/eslint/lib/config/plugins.js | 170 - node_modules/eslint/lib/file-finder.js | 144 - .../eslint/lib/formatters/checkstyle.js | 60 - .../eslint/lib/formatters/codeframe.js | 138 - node_modules/eslint/lib/formatters/compact.js | 60 - .../lib/formatters/html-template-message.html | 8 - .../lib/formatters/html-template-page.html | 115 - .../lib/formatters/html-template-result.html | 6 - node_modules/eslint/lib/formatters/html.js | 127 - .../eslint/lib/formatters/jslint-xml.js | 41 - node_modules/eslint/lib/formatters/json.js | 13 - node_modules/eslint/lib/formatters/junit.js | 70 - node_modules/eslint/lib/formatters/stylish.js | 100 - node_modules/eslint/lib/formatters/table.js | 150 - node_modules/eslint/lib/formatters/tap.js | 92 - node_modules/eslint/lib/formatters/unix.js | 58 - .../eslint/lib/formatters/visualstudio.js | 63 - node_modules/eslint/lib/ignored-paths.js | 289 - node_modules/eslint/lib/linter.js | 1176 -- node_modules/eslint/lib/load-rules.js | 49 - node_modules/eslint/lib/logging.js | 28 - node_modules/eslint/lib/options.js | 241 - node_modules/eslint/lib/report-translator.js | 286 - node_modules/eslint/lib/rules.js | 140 - node_modules/eslint/lib/rules/.eslintrc.yml | 4 - .../eslint/lib/rules/accessor-pairs.js | 161 - .../eslint/lib/rules/array-bracket-newline.js | 256 - .../eslint/lib/rules/array-bracket-spacing.js | 236 - .../eslint/lib/rules/array-callback-return.js | 255 - .../eslint/lib/rules/array-element-newline.js | 236 - .../eslint/lib/rules/arrow-body-style.js | 236 - node_modules/eslint/lib/rules/arrow-parens.js | 161 - .../eslint/lib/rules/arrow-spacing.js | 158 - .../eslint/lib/rules/block-scoped-var.js | 120 - .../eslint/lib/rules/block-spacing.js | 145 - node_modules/eslint/lib/rules/brace-style.js | 185 - .../eslint/lib/rules/callback-return.js | 180 - node_modules/eslint/lib/rules/camelcase.js | 159 - .../eslint/lib/rules/capitalized-comments.js | 307 - .../lib/rules/class-methods-use-this.js | 115 - node_modules/eslint/lib/rules/comma-dangle.js | 341 - .../eslint/lib/rules/comma-spacing.js | 187 - node_modules/eslint/lib/rules/comma-style.js | 311 - node_modules/eslint/lib/rules/complexity.js | 159 - .../lib/rules/computed-property-spacing.js | 185 - .../eslint/lib/rules/consistent-return.js | 194 - .../eslint/lib/rules/consistent-this.js | 149 - .../eslint/lib/rules/constructor-super.js | 395 - node_modules/eslint/lib/rules/curly.js | 380 - node_modules/eslint/lib/rules/default-case.js | 95 - node_modules/eslint/lib/rules/dot-location.js | 94 - node_modules/eslint/lib/rules/dot-notation.js | 165 - node_modules/eslint/lib/rules/eol-last.js | 107 - node_modules/eslint/lib/rules/eqeqeq.js | 185 - .../eslint/lib/rules/for-direction.js | 106 - .../eslint/lib/rules/func-call-spacing.js | 160 - .../eslint/lib/rules/func-name-matching.js | 194 - node_modules/eslint/lib/rules/func-names.js | 115 - node_modules/eslint/lib/rules/func-style.js | 90 - .../lib/rules/function-paren-newline.js | 222 - .../lib/rules/generator-star-spacing.js | 199 - .../eslint/lib/rules/getter-return.js | 178 - .../eslint/lib/rules/global-require.js | 76 - node_modules/eslint/lib/rules/guard-for-in.js | 71 - .../eslint/lib/rules/handle-callback-err.js | 90 - node_modules/eslint/lib/rules/id-blacklist.js | 122 - node_modules/eslint/lib/rules/id-length.js | 117 - node_modules/eslint/lib/rules/id-match.js | 145 - .../lib/rules/implicit-arrow-linebreak.js | 87 - .../eslint/lib/rules/indent-legacy.js | 1135 - node_modules/eslint/lib/rules/indent.js | 1555 -- .../eslint/lib/rules/init-declarations.js | 138 - node_modules/eslint/lib/rules/jsx-quotes.js | 90 - node_modules/eslint/lib/rules/key-spacing.js | 643 - .../eslint/lib/rules/keyword-spacing.js | 578 - .../eslint/lib/rules/line-comment-position.js | 116 - .../eslint/lib/rules/linebreak-style.js | 97 - .../eslint/lib/rules/lines-around-comment.js | 398 - .../lib/rules/lines-around-directive.js | 194 - .../lib/rules/lines-between-class-members.js | 140 - node_modules/eslint/lib/rules/max-depth.js | 149 - node_modules/eslint/lib/rules/max-len.js | 373 - node_modules/eslint/lib/rules/max-lines.js | 145 - .../eslint/lib/rules/max-nested-callbacks.js | 113 - node_modules/eslint/lib/rules/max-params.js | 97 - .../lib/rules/max-statements-per-line.js | 195 - .../eslint/lib/rules/max-statements.js | 171 - .../lib/rules/multiline-comment-style.js | 295 - .../eslint/lib/rules/multiline-ternary.js | 90 - node_modules/eslint/lib/rules/new-cap.js | 273 - node_modules/eslint/lib/rules/new-parens.js | 59 - .../eslint/lib/rules/newline-after-var.js | 255 - .../eslint/lib/rules/newline-before-return.js | 211 - .../lib/rules/newline-per-chained-call.js | 104 - node_modules/eslint/lib/rules/no-alert.js | 125 - .../eslint/lib/rules/no-array-constructor.js | 52 - .../eslint/lib/rules/no-await-in-loop.js | 102 - node_modules/eslint/lib/rules/no-bitwise.js | 116 - .../eslint/lib/rules/no-buffer-constructor.js | 41 - node_modules/eslint/lib/rules/no-caller.js | 44 - .../eslint/lib/rules/no-case-declarations.js | 62 - .../eslint/lib/rules/no-catch-shadow.js | 74 - .../eslint/lib/rules/no-class-assign.js | 59 - .../eslint/lib/rules/no-compare-neg-zero.js | 57 - .../eslint/lib/rules/no-cond-assign.js | 146 - .../eslint/lib/rules/no-confusing-arrow.js | 81 - node_modules/eslint/lib/rules/no-console.js | 136 - .../eslint/lib/rules/no-const-assign.js | 52 - .../eslint/lib/rules/no-constant-condition.js | 214 - node_modules/eslint/lib/rules/no-continue.js | 37 - .../eslint/lib/rules/no-control-regex.js | 111 - node_modules/eslint/lib/rules/no-debugger.js | 47 - .../eslint/lib/rules/no-delete-var.js | 40 - node_modules/eslint/lib/rules/no-div-regex.js | 43 - node_modules/eslint/lib/rules/no-dupe-args.js | 78 - .../eslint/lib/rules/no-dupe-class-members.js | 114 - node_modules/eslint/lib/rules/no-dupe-keys.js | 140 - .../eslint/lib/rules/no-duplicate-case.js | 48 - .../eslint/lib/rules/no-duplicate-imports.js | 138 - .../eslint/lib/rules/no-else-return.js | 283 - .../lib/rules/no-empty-character-class.js | 62 - .../eslint/lib/rules/no-empty-function.js | 165 - .../eslint/lib/rules/no-empty-pattern.js | 41 - node_modules/eslint/lib/rules/no-empty.js | 83 - node_modules/eslint/lib/rules/no-eq-null.js | 44 - node_modules/eslint/lib/rules/no-eval.js | 312 - node_modules/eslint/lib/rules/no-ex-assign.js | 50 - .../eslint/lib/rules/no-extend-native.js | 179 - .../eslint/lib/rules/no-extra-bind.js | 150 - .../eslint/lib/rules/no-extra-boolean-cast.js | 128 - .../eslint/lib/rules/no-extra-label.js | 145 - .../eslint/lib/rules/no-extra-parens.js | 751 - .../eslint/lib/rules/no-extra-semi.js | 125 - .../eslint/lib/rules/no-fallthrough.js | 136 - .../eslint/lib/rules/no-floating-decimal.js | 65 - .../eslint/lib/rules/no-func-assign.js | 64 - .../eslint/lib/rules/no-global-assign.js | 86 - .../eslint/lib/rules/no-implicit-coercion.js | 290 - .../eslint/lib/rules/no-implicit-globals.js | 56 - .../eslint/lib/rules/no-implied-eval.js | 162 - .../eslint/lib/rules/no-inline-comments.js | 66 - .../eslint/lib/rules/no-inner-declarations.js | 90 - .../eslint/lib/rules/no-invalid-regexp.js | 124 - .../eslint/lib/rules/no-invalid-this.js | 124 - .../lib/rules/no-irregular-whitespace.js | 237 - node_modules/eslint/lib/rules/no-iterator.js | 39 - node_modules/eslint/lib/rules/no-label-var.js | 70 - node_modules/eslint/lib/rules/no-labels.js | 142 - .../eslint/lib/rules/no-lone-blocks.js | 113 - node_modules/eslint/lib/rules/no-lonely-if.js | 84 - node_modules/eslint/lib/rules/no-loop-func.js | 200 - .../eslint/lib/rules/no-magic-numbers.js | 157 - .../eslint/lib/rules/no-mixed-operators.js | 210 - .../eslint/lib/rules/no-mixed-requires.js | 221 - .../lib/rules/no-mixed-spaces-and-tabs.js | 144 - .../eslint/lib/rules/no-multi-assign.js | 42 - .../eslint/lib/rules/no-multi-spaces.js | 131 - node_modules/eslint/lib/rules/no-multi-str.js | 56 - .../lib/rules/no-multiple-empty-lines.js | 137 - .../eslint/lib/rules/no-native-reassign.js | 90 - .../eslint/lib/rules/no-negated-condition.js | 83 - .../eslint/lib/rules/no-negated-in-lhs.js | 39 - .../eslint/lib/rules/no-nested-ternary.js | 35 - node_modules/eslint/lib/rules/no-new-func.js | 46 - .../eslint/lib/rules/no-new-object.js | 36 - .../eslint/lib/rules/no-new-require.js | 36 - .../eslint/lib/rules/no-new-symbol.js | 44 - .../eslint/lib/rules/no-new-wrappers.js | 38 - node_modules/eslint/lib/rules/no-new.js | 34 - node_modules/eslint/lib/rules/no-obj-calls.js | 40 - .../eslint/lib/rules/no-octal-escape.js | 48 - node_modules/eslint/lib/rules/no-octal.js | 36 - .../eslint/lib/rules/no-param-reassign.js | 174 - .../eslint/lib/rules/no-path-concat.js | 50 - node_modules/eslint/lib/rules/no-plusplus.js | 62 - .../eslint/lib/rules/no-process-env.js | 40 - .../eslint/lib/rules/no-process-exit.js | 36 - node_modules/eslint/lib/rules/no-proto.js | 39 - .../eslint/lib/rules/no-prototype-builtins.js | 55 - node_modules/eslint/lib/rules/no-redeclare.js | 102 - .../eslint/lib/rules/no-regex-spaces.js | 115 - .../eslint/lib/rules/no-restricted-globals.js | 121 - .../eslint/lib/rules/no-restricted-imports.js | 264 - .../eslint/lib/rules/no-restricted-modules.js | 178 - .../lib/rules/no-restricted-properties.js | 174 - .../eslint/lib/rules/no-restricted-syntax.js | 63 - .../eslint/lib/rules/no-return-assign.js | 73 - .../eslint/lib/rules/no-return-await.js | 98 - .../eslint/lib/rules/no-script-url.js | 42 - .../eslint/lib/rules/no-self-assign.js | 217 - .../eslint/lib/rules/no-self-compare.js | 54 - node_modules/eslint/lib/rules/no-sequences.js | 113 - .../lib/rules/no-shadow-restricted-names.js | 70 - node_modules/eslint/lib/rules/no-shadow.js | 189 - .../eslint/lib/rules/no-spaced-func.js | 76 - .../eslint/lib/rules/no-sparse-arrays.js | 44 - node_modules/eslint/lib/rules/no-sync.js | 54 - node_modules/eslint/lib/rules/no-tabs.js | 48 - .../lib/rules/no-template-curly-in-string.js | 38 - node_modules/eslint/lib/rules/no-ternary.js | 35 - .../eslint/lib/rules/no-this-before-super.js | 300 - .../eslint/lib/rules/no-throw-literal.js | 44 - .../eslint/lib/rules/no-trailing-spaces.js | 170 - .../eslint/lib/rules/no-undef-init.js | 64 - node_modules/eslint/lib/rules/no-undef.js | 72 - node_modules/eslint/lib/rules/no-undefined.js | 78 - .../eslint/lib/rules/no-underscore-dangle.js | 204 - .../lib/rules/no-unexpected-multiline.js | 99 - .../lib/rules/no-unmodified-loop-condition.js | 368 - .../eslint/lib/rules/no-unneeded-ternary.js | 156 - .../eslint/lib/rules/no-unreachable.js | 213 - .../eslint/lib/rules/no-unsafe-finally.js | 108 - .../eslint/lib/rules/no-unsafe-negation.js | 81 - .../eslint/lib/rules/no-unused-expressions.js | 127 - .../eslint/lib/rules/no-unused-labels.js | 107 - .../eslint/lib/rules/no-unused-vars.js | 643 - .../eslint/lib/rules/no-use-before-define.js | 267 - .../eslint/lib/rules/no-useless-call.js | 81 - .../lib/rules/no-useless-computed-key.js | 76 - .../eslint/lib/rules/no-useless-concat.js | 109 - .../lib/rules/no-useless-constructor.js | 183 - .../eslint/lib/rules/no-useless-escape.js | 224 - .../eslint/lib/rules/no-useless-rename.js | 148 - .../eslint/lib/rules/no-useless-return.js | 306 - node_modules/eslint/lib/rules/no-var.js | 329 - node_modules/eslint/lib/rules/no-void.js | 38 - .../eslint/lib/rules/no-warning-comments.js | 140 - .../rules/no-whitespace-before-property.js | 95 - node_modules/eslint/lib/rules/no-with.js | 33 - .../rules/nonblock-statement-body-position.js | 115 - .../eslint/lib/rules/object-curly-newline.js | 299 - .../eslint/lib/rules/object-curly-spacing.js | 300 - .../lib/rules/object-property-newline.js | 91 - .../eslint/lib/rules/object-shorthand.js | 457 - .../lib/rules/one-var-declaration-per-line.js | 87 - node_modules/eslint/lib/rules/one-var.js | 444 - .../eslint/lib/rules/operator-assignment.js | 207 - .../eslint/lib/rules/operator-linebreak.js | 253 - .../eslint/lib/rules/padded-blocks.js | 257 - .../rules/padding-line-between-statements.js | 598 - .../eslint/lib/rules/prefer-arrow-callback.js | 306 - node_modules/eslint/lib/rules/prefer-const.js | 322 - .../eslint/lib/rules/prefer-destructuring.js | 220 - .../lib/rules/prefer-numeric-literals.js | 113 - .../lib/rules/prefer-promise-reject-errors.js | 125 - .../eslint/lib/rules/prefer-reflect.js | 120 - .../eslint/lib/rules/prefer-rest-params.js | 112 - .../eslint/lib/rules/prefer-spread.js | 97 - .../eslint/lib/rules/prefer-template.js | 235 - node_modules/eslint/lib/rules/quote-props.js | 299 - node_modules/eslint/lib/rules/quotes.js | 297 - node_modules/eslint/lib/rules/radix.js | 172 - .../eslint/lib/rules/require-await.js | 101 - .../eslint/lib/rules/require-jsdoc.js | 106 - .../eslint/lib/rules/require-yield.js | 72 - .../eslint/lib/rules/rest-spread-spacing.js | 114 - node_modules/eslint/lib/rules/semi-spacing.js | 212 - node_modules/eslint/lib/rules/semi-style.js | 144 - node_modules/eslint/lib/rules/semi.js | 326 - node_modules/eslint/lib/rules/sort-imports.js | 197 - node_modules/eslint/lib/rules/sort-keys.js | 158 - node_modules/eslint/lib/rules/sort-vars.js | 97 - .../eslint/lib/rules/space-before-blocks.js | 149 - .../lib/rules/space-before-function-paren.js | 143 - .../eslint/lib/rules/space-in-parens.js | 275 - .../eslint/lib/rules/space-infix-ops.js | 168 - .../eslint/lib/rules/space-unary-ops.js | 309 - .../eslint/lib/rules/spaced-comment.js | 372 - node_modules/eslint/lib/rules/strict.js | 278 - .../eslint/lib/rules/switch-colon-spacing.js | 134 - .../eslint/lib/rules/symbol-description.js | 67 - .../lib/rules/template-curly-spacing.js | 122 - .../eslint/lib/rules/template-tag-spacing.js | 78 - node_modules/eslint/lib/rules/unicode-bom.js | 67 - node_modules/eslint/lib/rules/use-isnan.js | 35 - node_modules/eslint/lib/rules/valid-jsdoc.js | 485 - node_modules/eslint/lib/rules/valid-typeof.js | 78 - node_modules/eslint/lib/rules/vars-on-top.js | 140 - node_modules/eslint/lib/rules/wrap-iife.js | 152 - node_modules/eslint/lib/rules/wrap-regex.js | 53 - .../eslint/lib/rules/yield-star-spacing.js | 118 - node_modules/eslint/lib/rules/yoda.js | 311 - .../eslint/lib/testers/rule-tester.js | 591 - node_modules/eslint/lib/timing.js | 139 - .../backward-token-comment-cursor.js | 57 - .../lib/token-store/backward-token-cursor.js | 58 - node_modules/eslint/lib/token-store/cursor.js | 76 - .../eslint/lib/token-store/cursors.js | 92 - .../lib/token-store/decorative-cursor.js | 39 - .../eslint/lib/token-store/filter-cursor.js | 43 - .../forward-token-comment-cursor.js | 57 - .../lib/token-store/forward-token-cursor.js | 63 - node_modules/eslint/lib/token-store/index.js | 633 - .../eslint/lib/token-store/limit-cursor.js | 40 - .../lib/token-store/padded-token-cursor.js | 38 - .../eslint/lib/token-store/skip-cursor.js | 42 - node_modules/eslint/lib/token-store/utils.js | 104 - node_modules/eslint/lib/util/ajv.js | 29 - .../lib/util/apply-disable-directives.js | 160 - node_modules/eslint/lib/util/fix-tracker.js | 120 - node_modules/eslint/lib/util/glob-util.js | 195 - node_modules/eslint/lib/util/glob.js | 63 - node_modules/eslint/lib/util/hash.js | 35 - node_modules/eslint/lib/util/interpolate.js | 28 - node_modules/eslint/lib/util/keywords.js | 67 - .../eslint/lib/util/module-resolver.js | 85 - node_modules/eslint/lib/util/naming.js | 113 - .../eslint/lib/util/node-event-generator.js | 308 - node_modules/eslint/lib/util/npm-util.js | 177 - node_modules/eslint/lib/util/path-util.js | 72 - .../eslint/lib/util/patterns/letters.js | 36 - node_modules/eslint/lib/util/rule-fixer.js | 140 - node_modules/eslint/lib/util/safe-emitter.js | 54 - .../eslint/lib/util/source-code-fixer.js | 152 - .../eslint/lib/util/source-code-util.js | 106 - node_modules/eslint/lib/util/source-code.js | 508 - node_modules/eslint/lib/util/traverser.js | 193 - node_modules/eslint/lib/util/xml-escape.js | 34 - .../eslint/messages/extend-config-missing.txt | 3 - .../eslint/messages/no-config-found.txt | 7 - .../eslint/messages/plugin-missing.txt | 9 - .../eslint/messages/whitespace-found.txt | 3 - .../eslint/node_modules/ansi-regex/index.js | 10 - .../eslint/node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 53 - .../eslint/node_modules/ansi-regex/readme.md | 46 - .../eslint/node_modules/ansi-styles/index.js | 165 - .../eslint/node_modules/ansi-styles/license | 9 - .../node_modules/ansi-styles/package.json | 56 - .../eslint/node_modules/ansi-styles/readme.md | 147 - .../eslint/node_modules/chalk/index.js | 228 - .../eslint/node_modules/chalk/index.js.flow | 93 - .../eslint/node_modules/chalk/license | 9 - .../eslint/node_modules/chalk/package.json | 71 - .../eslint/node_modules/chalk/readme.md | 314 - .../eslint/node_modules/chalk/templates.js | 128 - .../node_modules/chalk/types/index.d.ts | 97 - .../eslint/node_modules/globals/globals.json | 1563 -- .../eslint/node_modules/globals/index.js | 2 - .../eslint/node_modules/globals/license | 9 - .../eslint/node_modules/globals/package.json | 41 - .../eslint/node_modules/globals/readme.md | 41 - .../eslint/node_modules/strip-ansi/index.js | 4 - .../eslint/node_modules/strip-ansi/license | 9 - .../node_modules/strip-ansi/package.json | 52 - .../eslint/node_modules/strip-ansi/readme.md | 39 - .../node_modules/supports-color/browser.js | 5 - .../node_modules/supports-color/index.js | 131 - .../node_modules/supports-color/license | 9 - .../node_modules/supports-color/package.json | 53 - .../node_modules/supports-color/readme.md | 66 - node_modules/eslint/package.json | 127 - node_modules/espree/CHANGELOG.md | 404 - node_modules/espree/LICENSE | 22 - node_modules/espree/README.md | 157 - node_modules/espree/espree.js | 800 - node_modules/espree/lib/ast-node-types.js | 98 - node_modules/espree/lib/comment-attachment.js | 175 - node_modules/espree/lib/features.js | 32 - node_modules/espree/lib/token-translator.js | 258 - node_modules/espree/lib/visitor-keys.js | 127 - node_modules/espree/package.json | 60 - node_modules/esprima/ChangeLog | 235 - node_modules/esprima/LICENSE.BSD | 21 - node_modules/esprima/README.md | 46 - node_modules/esprima/bin/esparse.js | 139 - node_modules/esprima/bin/esvalidate.js | 236 - node_modules/esprima/dist/esprima.js | 6709 ------ node_modules/esprima/package.json | 112 - node_modules/esrecurse/package.json | 52 - node_modules/external-editor/LICENSE | 21 - node_modules/external-editor/README.md | 151 - node_modules/external-editor/example_async.js | 40 - node_modules/external-editor/example_sync.js | 38 - .../main/errors/CreateFileError.js | 29 - .../main/errors/LaunchEditorError.js | 29 - .../main/errors/ReadFileError.js | 29 - .../main/errors/RemoveFileError.js | 29 - node_modules/external-editor/main/index.js | 229 - node_modules/external-editor/package.json | 47 - node_modules/fast-deep-equal/README.md | 55 - node_modules/fast-deep-equal/index.js | 55 - node_modules/fast-deep-equal/package.json | 58 - node_modules/figures/index.js | 147 - node_modules/figures/license | 21 - node_modules/figures/package.json | 47 - node_modules/figures/readme.md | 120 - node_modules/file-entry-cache/LICENSE | 22 - node_modules/file-entry-cache/README.md | 107 - node_modules/file-entry-cache/cache.js | 216 - node_modules/file-entry-cache/changelog.md | 74 - node_modules/file-entry-cache/package.json | 84 - node_modules/flat-cache/LICENSE | 22 - node_modules/flat-cache/README.md | 73 - node_modules/flat-cache/cache.js | 197 - node_modules/flat-cache/changelog.md | 265 - node_modules/flat-cache/del.js | 13 - node_modules/flat-cache/package.json | 88 - node_modules/flat-cache/utils.js | 39 - node_modules/fs.realpath/LICENSE | 43 - node_modules/fs.realpath/README.md | 33 - node_modules/fs.realpath/index.js | 66 - node_modules/fs.realpath/old.js | 303 - node_modules/fs.realpath/package.json | 26 - .../functional-red-black-tree/.npmignore | 16 - .../functional-red-black-tree/LICENSE | 22 - .../functional-red-black-tree/README.md | 237 - .../functional-red-black-tree/bench/test.js | 11 - .../functional-red-black-tree/package.json | 40 - .../functional-red-black-tree/rbtree.js | 996 - .../functional-red-black-tree/test/test.js | 479 - node_modules/get-stdin/index.js | 52 - node_modules/get-stdin/license | 9 - node_modules/get-stdin/package.json | 35 - node_modules/get-stdin/readme.md | 55 - node_modules/glob/LICENSE | 21 - node_modules/glob/README.md | 378 - node_modules/glob/common.js | 238 - node_modules/glob/glob.js | 790 - node_modules/glob/package.json | 55 - node_modules/glob/sync.js | 486 - node_modules/graceful-fs/LICENSE | 15 - node_modules/graceful-fs/README.md | 143 - node_modules/graceful-fs/clone.js | 23 - node_modules/graceful-fs/graceful-fs.js | 448 - node_modules/graceful-fs/legacy-streams.js | 118 - node_modules/graceful-fs/package.json | 53 - node_modules/graceful-fs/polyfills.js | 355 - node_modules/has-ansi/index.js | 4 - node_modules/has-ansi/license | 21 - node_modules/has-ansi/package.json | 55 - node_modules/has-ansi/readme.md | 36 - node_modules/has-flag/index.js | 8 - node_modules/has-flag/package.json | 44 - node_modules/has-flag/readme.md | 70 - node_modules/husky/bin.js | 26 - node_modules/iconv-lite/Changelog.md | 162 - node_modules/iconv-lite/LICENSE | 21 - node_modules/iconv-lite/README.md | 156 - .../iconv-lite/encodings/dbcs-codec.js | 555 - .../iconv-lite/encodings/dbcs-data.js | 176 - node_modules/iconv-lite/encodings/index.js | 22 - node_modules/iconv-lite/encodings/internal.js | 188 - .../iconv-lite/encodings/sbcs-codec.js | 72 - .../encodings/sbcs-data-generated.js | 451 - .../iconv-lite/encodings/sbcs-data.js | 174 - .../encodings/tables/big5-added.json | 122 - .../iconv-lite/encodings/tables/cp936.json | 264 - .../iconv-lite/encodings/tables/cp949.json | 273 - .../iconv-lite/encodings/tables/cp950.json | 177 - .../iconv-lite/encodings/tables/eucjp.json | 182 - .../encodings/tables/gb18030-ranges.json | 1 - .../encodings/tables/gbk-added.json | 55 - .../iconv-lite/encodings/tables/shiftjis.json | 125 - node_modules/iconv-lite/encodings/utf16.js | 177 - node_modules/iconv-lite/encodings/utf7.js | 290 - node_modules/iconv-lite/lib/bom-handling.js | 52 - node_modules/iconv-lite/lib/extend-node.js | 217 - node_modules/iconv-lite/lib/index.d.ts | 24 - node_modules/iconv-lite/lib/index.js | 153 - node_modules/iconv-lite/lib/streams.js | 121 - node_modules/iconv-lite/package.json | 46 - node_modules/ignore/README.md | 262 - node_modules/ignore/ignore.js | 425 - node_modules/ignore/index.d.ts | 41 - node_modules/ignore/package.json | 56 - node_modules/inflight/LICENSE | 15 - node_modules/inflight/README.md | 37 - node_modules/inflight/inflight.js | 54 - node_modules/inflight/package.json | 29 - node_modules/inherits/LICENSE | 16 - node_modules/inherits/README.md | 42 - node_modules/inherits/inherits.js | 9 - node_modules/inherits/inherits_browser.js | 27 - node_modules/inherits/package.json | 29 - node_modules/inquirer/README.md | 386 - node_modules/inquirer/lib/inquirer.js | 84 - node_modules/inquirer/lib/objects/choice.js | 35 - node_modules/inquirer/lib/objects/choices.js | 112 - .../inquirer/lib/objects/separator.js | 34 - node_modules/inquirer/lib/prompts/base.js | 139 - node_modules/inquirer/lib/prompts/checkbox.js | 236 - node_modules/inquirer/lib/prompts/confirm.js | 106 - node_modules/inquirer/lib/prompts/editor.js | 111 - node_modules/inquirer/lib/prompts/expand.js | 260 - node_modules/inquirer/lib/prompts/input.js | 104 - node_modules/inquirer/lib/prompts/list.js | 184 - node_modules/inquirer/lib/prompts/password.js | 115 - node_modules/inquirer/lib/prompts/rawlist.js | 179 - node_modules/inquirer/lib/ui/baseUI.js | 75 - node_modules/inquirer/lib/ui/bottom-bar.js | 106 - node_modules/inquirer/lib/ui/prompt.js | 115 - node_modules/inquirer/lib/utils/events.js | 45 - node_modules/inquirer/lib/utils/paginator.js | 38 - node_modules/inquirer/lib/utils/readline.js | 51 - .../inquirer/lib/utils/screen-manager.js | 135 - node_modules/inquirer/lib/utils/utils.js | 26 - .../inquirer/node_modules/ansi-regex/index.js | 10 - .../inquirer/node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 53 - .../node_modules/ansi-regex/readme.md | 46 - .../node_modules/ansi-styles/index.js | 165 - .../inquirer/node_modules/ansi-styles/license | 9 - .../node_modules/ansi-styles/package.json | 56 - .../node_modules/ansi-styles/readme.md | 147 - .../inquirer/node_modules/chalk/index.js | 228 - .../inquirer/node_modules/chalk/index.js.flow | 93 - .../inquirer/node_modules/chalk/license | 9 - .../inquirer/node_modules/chalk/package.json | 71 - .../inquirer/node_modules/chalk/readme.md | 314 - .../inquirer/node_modules/chalk/templates.js | 128 - .../node_modules/chalk/types/index.d.ts | 97 - .../inquirer/node_modules/strip-ansi/index.js | 4 - .../inquirer/node_modules/strip-ansi/license | 9 - .../node_modules/strip-ansi/package.json | 52 - .../node_modules/strip-ansi/readme.md | 39 - .../node_modules/supports-color/browser.js | 5 - .../node_modules/supports-color/index.js | 131 - .../node_modules/supports-color/license | 9 - .../node_modules/supports-color/package.json | 53 - .../node_modules/supports-color/readme.md | 66 - node_modules/inquirer/package.json | 59 - node_modules/is-fullwidth-code-point/index.js | 46 - node_modules/is-fullwidth-code-point/license | 21 - .../is-fullwidth-code-point/package.json | 45 - .../is-fullwidth-code-point/readme.md | 39 - node_modules/is-resolvable/LICENSE | 6 - node_modules/is-resolvable/README.md | 73 - node_modules/is-resolvable/index.js | 16 - node_modules/is-resolvable/package.json | 37 - node_modules/js-tokens/CHANGELOG.md | 134 - node_modules/js-tokens/LICENSE | 21 - node_modules/js-tokens/README.md | 222 - node_modules/js-tokens/index.js | 23 - node_modules/js-tokens/package.json | 30 - node_modules/js-yaml/README.md | 299 - node_modules/js-yaml/bin/js-yaml.js | 132 - node_modules/js-yaml/dist/js-yaml.js | 4005 ---- node_modules/js-yaml/dist/js-yaml.min.js | 1 - node_modules/js-yaml/index.js | 7 - node_modules/js-yaml/lib/js-yaml.js | 39 - node_modules/js-yaml/lib/js-yaml/common.js | 59 - node_modules/js-yaml/lib/js-yaml/dumper.js | 850 - node_modules/js-yaml/lib/js-yaml/exception.js | 43 - node_modules/js-yaml/lib/js-yaml/loader.js | 1660 -- node_modules/js-yaml/lib/js-yaml/mark.js | 76 - node_modules/js-yaml/lib/js-yaml/schema.js | 108 - .../js-yaml/lib/js-yaml/schema/core.js | 18 - .../lib/js-yaml/schema/default_full.js | 25 - .../lib/js-yaml/schema/default_safe.js | 28 - .../js-yaml/lib/js-yaml/schema/failsafe.js | 17 - .../js-yaml/lib/js-yaml/schema/json.js | 25 - node_modules/js-yaml/lib/js-yaml/type.js | 61 - .../js-yaml/lib/js-yaml/type/binary.js | 138 - node_modules/js-yaml/lib/js-yaml/type/bool.js | 35 - .../js-yaml/lib/js-yaml/type/float.js | 116 - node_modules/js-yaml/lib/js-yaml/type/int.js | 173 - .../js-yaml/lib/js-yaml/type/js/function.js | 93 - .../js-yaml/lib/js-yaml/type/js/regexp.js | 60 - .../js-yaml/lib/js-yaml/type/js/undefined.js | 28 - node_modules/js-yaml/lib/js-yaml/type/map.js | 8 - .../js-yaml/lib/js-yaml/type/merge.js | 12 - node_modules/js-yaml/lib/js-yaml/type/null.js | 34 - node_modules/js-yaml/lib/js-yaml/type/omap.js | 44 - .../js-yaml/lib/js-yaml/type/pairs.js | 53 - node_modules/js-yaml/lib/js-yaml/type/seq.js | 8 - node_modules/js-yaml/lib/js-yaml/type/set.js | 29 - node_modules/js-yaml/lib/js-yaml/type/str.js | 8 - .../js-yaml/lib/js-yaml/type/timestamp.js | 88 - node_modules/js-yaml/package.json | 49 - node_modules/json-schema-traverse/.npmignore | 60 - node_modules/json-schema-traverse/README.md | 69 - node_modules/json-schema-traverse/index.js | 81 - .../json-schema-traverse/package.json | 43 - .../json-schema-traverse/spec/index.spec.js | 102 - node_modules/levn/README.md | 196 - node_modules/levn/lib/cast.js | 298 - node_modules/levn/lib/coerce.js | 285 - node_modules/levn/lib/index.js | 22 - node_modules/levn/lib/parse-string.js | 113 - node_modules/levn/lib/parse.js | 102 - node_modules/levn/package.json | 47 - node_modules/lint/.buildpath | 6 - .../lint/.externalToolBuilders/Vows.launch | 9 - node_modules/lint/.npmignore | 5 - node_modules/lint/.project | 33 - node_modules/lint/.settings/.jsdtscope | 6 - .../org.eclipse.core.resources.prefs | 3 - .../.settings/org.eclipse.core.runtime.prefs | 3 - ...rg.eclipse.wst.jsdt.ui.superType.container | 1 - .../org.eclipse.wst.jsdt.ui.superType.name | 1 - node_modules/lint/LICENSE | 21 - node_modules/lint/Makefile | 57 - node_modules/lint/README.md | 171 - node_modules/lint/bin/node-lint | 124 - node_modules/lint/doc/node-lint.md | 163 - node_modules/lint/etc/config.json | 50 - .../lint/examples/emacs/flymake-nodelint.el | 52 - node_modules/lint/index.js | 1 - node_modules/lint/lib/assert/extension.js | 31 - node_modules/lint/lib/lint/formatter.js | 336 - .../lint/lib/lint/formatter/callback.js | 70 - node_modules/lint/lib/lint/formatter/cli.js | 365 - node_modules/lint/lib/lint/formatter/json.js | 36 - .../lint/lib/lint/formatter/textmate.js | 220 - node_modules/lint/lib/lint/formatter/vim.js | 47 - node_modules/lint/lib/lint/formatter/xml.js | 114 - node_modules/lint/lib/lint/index.js | 18 - node_modules/lint/lib/lint/jslint.js | 5724 ----- node_modules/lint/lib/lint/launcher.js | 531 - node_modules/lint/lib/lint/parser.js | 238 - node_modules/lint/lib/lint/vows.js | 81 - node_modules/lint/man1/node-lint.1 | 365 - node_modules/lint/package.json | 48 - .../lint/resource/fixture/invalid-test.js | 3 - .../lint/resource/fixture/valid-test.js | 3 - .../lint/test/assert/extension-test.js | 61 - node_modules/lint/test/lint/formatter-test.js | 64 - .../lint/test/lint/formatter/callback-test.js | 75 - .../lint/test/lint/formatter/cli-test.js | 86 - .../lint/test/lint/formatter/json-test.js | 57 - .../lint/test/lint/formatter/textmate-test.js | 57 - .../lint/test/lint/formatter/vim-test.js | 57 - .../lint/test/lint/formatter/xml-test.js | 94 - node_modules/lint/test/lint/launcher-test.js | 0 node_modules/lint/test/lint/parser-test.js | 181 - node_modules/lodash/LICENSE | 47 - node_modules/lodash/README.md | 39 - node_modules/lodash/_DataView.js | 7 - node_modules/lodash/_Hash.js | 32 - node_modules/lodash/_LazyWrapper.js | 28 - node_modules/lodash/_ListCache.js | 32 - node_modules/lodash/_LodashWrapper.js | 22 - node_modules/lodash/_Map.js | 7 - node_modules/lodash/_MapCache.js | 32 - node_modules/lodash/_Promise.js | 7 - node_modules/lodash/_Set.js | 7 - node_modules/lodash/_SetCache.js | 27 - node_modules/lodash/_Stack.js | 27 - node_modules/lodash/_Symbol.js | 6 - node_modules/lodash/_Uint8Array.js | 6 - node_modules/lodash/_WeakMap.js | 7 - node_modules/lodash/_apply.js | 21 - node_modules/lodash/_arrayAggregator.js | 22 - node_modules/lodash/_arrayEach.js | 22 - node_modules/lodash/_arrayEachRight.js | 21 - node_modules/lodash/_arrayEvery.js | 23 - node_modules/lodash/_arrayFilter.js | 25 - node_modules/lodash/_arrayIncludes.js | 17 - node_modules/lodash/_arrayIncludesWith.js | 22 - node_modules/lodash/_arrayLikeKeys.js | 49 - node_modules/lodash/_arrayMap.js | 21 - node_modules/lodash/_arrayPush.js | 20 - node_modules/lodash/_arrayReduce.js | 26 - node_modules/lodash/_arrayReduceRight.js | 24 - node_modules/lodash/_arraySample.js | 15 - node_modules/lodash/_arraySampleSize.js | 17 - node_modules/lodash/_arrayShuffle.js | 15 - node_modules/lodash/_arraySome.js | 23 - node_modules/lodash/_asciiSize.js | 12 - node_modules/lodash/_asciiToArray.js | 12 - node_modules/lodash/_asciiWords.js | 15 - node_modules/lodash/_assignMergeValue.js | 20 - node_modules/lodash/_assignValue.js | 28 - node_modules/lodash/_assocIndexOf.js | 21 - node_modules/lodash/_baseAggregator.js | 21 - node_modules/lodash/_baseAssign.js | 17 - node_modules/lodash/_baseAssignIn.js | 17 - node_modules/lodash/_baseAssignValue.js | 25 - node_modules/lodash/_baseAt.js | 23 - node_modules/lodash/_baseClamp.js | 22 - node_modules/lodash/_baseClone.js | 166 - node_modules/lodash/_baseConforms.js | 18 - node_modules/lodash/_baseConformsTo.js | 27 - node_modules/lodash/_baseCreate.js | 30 - node_modules/lodash/_baseDelay.js | 21 - node_modules/lodash/_baseDifference.js | 67 - node_modules/lodash/_baseEach.js | 14 - node_modules/lodash/_baseEachRight.js | 14 - node_modules/lodash/_baseEvery.js | 21 - node_modules/lodash/_baseExtremum.js | 32 - node_modules/lodash/_baseFill.js | 32 - node_modules/lodash/_baseFilter.js | 21 - node_modules/lodash/_baseFindIndex.js | 24 - node_modules/lodash/_baseFindKey.js | 23 - node_modules/lodash/_baseFlatten.js | 38 - node_modules/lodash/_baseFor.js | 16 - node_modules/lodash/_baseForOwn.js | 16 - node_modules/lodash/_baseForOwnRight.js | 16 - node_modules/lodash/_baseForRight.js | 15 - node_modules/lodash/_baseFunctions.js | 19 - node_modules/lodash/_baseGet.js | 24 - node_modules/lodash/_baseGetAllKeys.js | 20 - node_modules/lodash/_baseGetTag.js | 28 - node_modules/lodash/_baseGt.js | 14 - node_modules/lodash/_baseHas.js | 19 - node_modules/lodash/_baseHasIn.js | 13 - node_modules/lodash/_baseInRange.js | 18 - node_modules/lodash/_baseIndexOf.js | 20 - node_modules/lodash/_baseIndexOfWith.js | 23 - node_modules/lodash/_baseIntersection.js | 74 - node_modules/lodash/_baseInverter.js | 21 - node_modules/lodash/_baseInvoke.js | 24 - node_modules/lodash/_baseIsArguments.js | 18 - node_modules/lodash/_baseIsArrayBuffer.js | 17 - node_modules/lodash/_baseIsDate.js | 18 - node_modules/lodash/_baseIsEqual.js | 28 - node_modules/lodash/_baseIsEqualDeep.js | 83 - node_modules/lodash/_baseIsMap.js | 18 - node_modules/lodash/_baseIsMatch.js | 62 - node_modules/lodash/_baseIsNaN.js | 12 - node_modules/lodash/_baseIsNative.js | 47 - node_modules/lodash/_baseIsRegExp.js | 18 - node_modules/lodash/_baseIsSet.js | 18 - node_modules/lodash/_baseIsTypedArray.js | 60 - node_modules/lodash/_baseIteratee.js | 31 - node_modules/lodash/_baseKeys.js | 30 - node_modules/lodash/_baseKeysIn.js | 33 - node_modules/lodash/_baseLodash.js | 10 - node_modules/lodash/_baseLt.js | 14 - node_modules/lodash/_baseMap.js | 22 - node_modules/lodash/_baseMatches.js | 22 - node_modules/lodash/_baseMatchesProperty.js | 33 - node_modules/lodash/_baseMean.js | 20 - node_modules/lodash/_baseMerge.js | 42 - node_modules/lodash/_baseMergeDeep.js | 94 - node_modules/lodash/_baseNth.js | 20 - node_modules/lodash/_baseOrderBy.js | 49 - node_modules/lodash/_basePick.js | 19 - node_modules/lodash/_basePickBy.js | 30 - node_modules/lodash/_baseProperty.js | 14 - node_modules/lodash/_basePropertyDeep.js | 16 - node_modules/lodash/_basePropertyOf.js | 14 - node_modules/lodash/_basePullAll.js | 51 - node_modules/lodash/_basePullAt.js | 37 - node_modules/lodash/_baseRandom.js | 18 - node_modules/lodash/_baseRange.js | 28 - node_modules/lodash/_baseReduce.js | 23 - node_modules/lodash/_baseRepeat.js | 35 - node_modules/lodash/_baseRest.js | 17 - node_modules/lodash/_baseSample.js | 15 - node_modules/lodash/_baseSampleSize.js | 18 - node_modules/lodash/_baseSet.js | 51 - node_modules/lodash/_baseSetData.js | 17 - node_modules/lodash/_baseSetToString.js | 22 - node_modules/lodash/_baseShuffle.js | 15 - node_modules/lodash/_baseSlice.js | 31 - node_modules/lodash/_baseSome.js | 22 - node_modules/lodash/_baseSortBy.js | 21 - node_modules/lodash/_baseSortedIndex.js | 42 - node_modules/lodash/_baseSortedIndexBy.js | 67 - node_modules/lodash/_baseSortedUniq.js | 30 - node_modules/lodash/_baseSum.js | 24 - node_modules/lodash/_baseTimes.js | 20 - node_modules/lodash/_baseToNumber.js | 24 - node_modules/lodash/_baseToPairs.js | 18 - node_modules/lodash/_baseToString.js | 37 - node_modules/lodash/_baseTrim.js | 19 - node_modules/lodash/_baseUnary.js | 14 - node_modules/lodash/_baseUniq.js | 72 - node_modules/lodash/_baseUnset.js | 65 - node_modules/lodash/_baseUpdate.js | 18 - node_modules/lodash/_baseValues.js | 19 - node_modules/lodash/_baseWhile.js | 26 - node_modules/lodash/_baseWrapperValue.js | 25 - node_modules/lodash/_baseXor.js | 36 - node_modules/lodash/_baseZipObject.js | 23 - node_modules/lodash/_cacheHas.js | 13 - node_modules/lodash/_castArrayLikeObject.js | 14 - node_modules/lodash/_castFunction.js | 14 - node_modules/lodash/_castPath.js | 21 - node_modules/lodash/_castRest.js | 14 - node_modules/lodash/_castSlice.js | 18 - node_modules/lodash/_charsEndIndex.js | 19 - node_modules/lodash/_charsStartIndex.js | 20 - node_modules/lodash/_cloneArrayBuffer.js | 16 - node_modules/lodash/_cloneBuffer.js | 35 - node_modules/lodash/_cloneDataView.js | 16 - node_modules/lodash/_cloneRegExp.js | 17 - node_modules/lodash/_cloneSymbol.js | 18 - node_modules/lodash/_cloneTypedArray.js | 16 - node_modules/lodash/_compareAscending.js | 41 - node_modules/lodash/_compareMultiple.js | 44 - node_modules/lodash/_composeArgs.js | 39 - node_modules/lodash/_composeArgsRight.js | 41 - node_modules/lodash/_copyArray.js | 20 - node_modules/lodash/_copyObject.js | 40 - node_modules/lodash/_copySymbols.js | 16 - node_modules/lodash/_copySymbolsIn.js | 16 - node_modules/lodash/_coreJsData.js | 6 - node_modules/lodash/_countHolders.js | 21 - node_modules/lodash/_createAggregator.js | 23 - node_modules/lodash/_createAssigner.js | 37 - node_modules/lodash/_createBaseEach.js | 32 - node_modules/lodash/_createBaseFor.js | 25 - node_modules/lodash/_createBind.js | 28 - node_modules/lodash/_createCaseFirst.js | 33 - node_modules/lodash/_createCompounder.js | 24 - node_modules/lodash/_createCtor.js | 37 - node_modules/lodash/_createCurry.js | 46 - node_modules/lodash/_createFind.js | 25 - node_modules/lodash/_createFlow.js | 78 - node_modules/lodash/_createHybrid.js | 92 - node_modules/lodash/_createInverter.js | 17 - node_modules/lodash/_createMathOperation.js | 38 - node_modules/lodash/_createOver.js | 27 - node_modules/lodash/_createPadding.js | 33 - node_modules/lodash/_createPartial.js | 43 - node_modules/lodash/_createRange.js | 30 - node_modules/lodash/_createRecurry.js | 56 - .../lodash/_createRelationalOperation.js | 20 - node_modules/lodash/_createRound.js | 35 - node_modules/lodash/_createSet.js | 19 - node_modules/lodash/_createToPairs.js | 30 - node_modules/lodash/_createWrap.js | 106 - .../lodash/_customDefaultsAssignIn.js | 29 - node_modules/lodash/_customDefaultsMerge.js | 28 - node_modules/lodash/_customOmitClone.js | 16 - node_modules/lodash/_deburrLetter.js | 71 - node_modules/lodash/_defineProperty.js | 11 - node_modules/lodash/_equalArrays.js | 84 - node_modules/lodash/_equalByTag.js | 112 - node_modules/lodash/_equalObjects.js | 90 - node_modules/lodash/_escapeHtmlChar.js | 21 - node_modules/lodash/_escapeStringChar.js | 22 - node_modules/lodash/_flatRest.js | 16 - node_modules/lodash/_freeGlobal.js | 4 - node_modules/lodash/_getAllKeys.js | 16 - node_modules/lodash/_getAllKeysIn.js | 17 - node_modules/lodash/_getData.js | 15 - node_modules/lodash/_getFuncName.js | 31 - node_modules/lodash/_getHolder.js | 13 - node_modules/lodash/_getMapData.js | 18 - node_modules/lodash/_getMatchData.js | 24 - node_modules/lodash/_getNative.js | 17 - node_modules/lodash/_getPrototype.js | 6 - node_modules/lodash/_getRawTag.js | 46 - node_modules/lodash/_getSymbols.js | 30 - node_modules/lodash/_getSymbolsIn.js | 25 - node_modules/lodash/_getTag.js | 58 - node_modules/lodash/_getValue.js | 13 - node_modules/lodash/_getView.js | 33 - node_modules/lodash/_getWrapDetails.js | 17 - node_modules/lodash/_hasPath.js | 39 - node_modules/lodash/_hasUnicode.js | 26 - node_modules/lodash/_hasUnicodeWord.js | 15 - node_modules/lodash/_hashClear.js | 15 - node_modules/lodash/_hashDelete.js | 17 - node_modules/lodash/_hashGet.js | 30 - node_modules/lodash/_hashHas.js | 23 - node_modules/lodash/_hashSet.js | 23 - node_modules/lodash/_initCloneArray.js | 26 - node_modules/lodash/_initCloneByTag.js | 77 - node_modules/lodash/_initCloneObject.js | 18 - node_modules/lodash/_insertWrapDetails.js | 23 - node_modules/lodash/_isFlattenable.js | 20 - node_modules/lodash/_isIndex.js | 25 - node_modules/lodash/_isIterateeCall.js | 30 - node_modules/lodash/_isKey.js | 29 - node_modules/lodash/_isKeyable.js | 15 - node_modules/lodash/_isLaziable.js | 28 - node_modules/lodash/_isMaskable.js | 14 - node_modules/lodash/_isMasked.js | 20 - node_modules/lodash/_isPrototype.js | 18 - node_modules/lodash/_isStrictComparable.js | 15 - node_modules/lodash/_iteratorToArray.js | 18 - node_modules/lodash/_lazyClone.js | 23 - node_modules/lodash/_lazyReverse.js | 23 - node_modules/lodash/_lazyValue.js | 69 - node_modules/lodash/_listCacheClear.js | 13 - node_modules/lodash/_listCacheDelete.js | 35 - node_modules/lodash/_listCacheGet.js | 19 - node_modules/lodash/_listCacheHas.js | 16 - node_modules/lodash/_listCacheSet.js | 26 - node_modules/lodash/_mapCacheClear.js | 21 - node_modules/lodash/_mapCacheDelete.js | 18 - node_modules/lodash/_mapCacheGet.js | 16 - node_modules/lodash/_mapCacheHas.js | 16 - node_modules/lodash/_mapCacheSet.js | 22 - node_modules/lodash/_mapToArray.js | 18 - .../lodash/_matchesStrictComparable.js | 20 - node_modules/lodash/_memoizeCapped.js | 26 - node_modules/lodash/_mergeData.js | 90 - node_modules/lodash/_metaMap.js | 6 - node_modules/lodash/_nativeCreate.js | 6 - node_modules/lodash/_nativeKeys.js | 6 - node_modules/lodash/_nativeKeysIn.js | 20 - node_modules/lodash/_nodeUtil.js | 30 - node_modules/lodash/_objectToString.js | 22 - node_modules/lodash/_overArg.js | 15 - node_modules/lodash/_overRest.js | 36 - node_modules/lodash/_parent.js | 16 - node_modules/lodash/_reEscape.js | 4 - node_modules/lodash/_reEvaluate.js | 4 - node_modules/lodash/_reInterpolate.js | 4 - node_modules/lodash/_realNames.js | 4 - node_modules/lodash/_reorder.js | 29 - node_modules/lodash/_replaceHolders.js | 29 - node_modules/lodash/_root.js | 9 - node_modules/lodash/_safeGet.js | 21 - node_modules/lodash/_setCacheAdd.js | 19 - node_modules/lodash/_setCacheHas.js | 14 - node_modules/lodash/_setData.js | 20 - node_modules/lodash/_setToArray.js | 18 - node_modules/lodash/_setToPairs.js | 18 - node_modules/lodash/_setToString.js | 14 - node_modules/lodash/_setWrapToString.js | 21 - node_modules/lodash/_shortOut.js | 37 - node_modules/lodash/_shuffleSelf.js | 28 - node_modules/lodash/_stackClear.js | 15 - node_modules/lodash/_stackDelete.js | 18 - node_modules/lodash/_stackGet.js | 14 - node_modules/lodash/_stackHas.js | 14 - node_modules/lodash/_stackSet.js | 34 - node_modules/lodash/_strictIndexOf.js | 23 - node_modules/lodash/_strictLastIndexOf.js | 21 - node_modules/lodash/_stringSize.js | 18 - node_modules/lodash/_stringToArray.js | 18 - node_modules/lodash/_stringToPath.js | 27 - node_modules/lodash/_toKey.js | 21 - node_modules/lodash/_toSource.js | 26 - node_modules/lodash/_trimmedEndIndex.js | 19 - node_modules/lodash/_unescapeHtmlChar.js | 21 - node_modules/lodash/_unicodeSize.js | 44 - node_modules/lodash/_unicodeToArray.js | 40 - node_modules/lodash/_unicodeWords.js | 69 - node_modules/lodash/_updateWrapDetails.js | 46 - node_modules/lodash/_wrapperClone.js | 23 - node_modules/lodash/add.js | 22 - node_modules/lodash/after.js | 42 - node_modules/lodash/array.js | 67 - node_modules/lodash/ary.js | 29 - node_modules/lodash/assign.js | 58 - node_modules/lodash/assignIn.js | 40 - node_modules/lodash/assignInWith.js | 38 - node_modules/lodash/assignWith.js | 37 - node_modules/lodash/at.js | 23 - node_modules/lodash/attempt.js | 35 - node_modules/lodash/before.js | 40 - node_modules/lodash/bind.js | 57 - node_modules/lodash/bindAll.js | 41 - node_modules/lodash/bindKey.js | 68 - node_modules/lodash/camelCase.js | 29 - node_modules/lodash/capitalize.js | 23 - node_modules/lodash/castArray.js | 44 - node_modules/lodash/ceil.js | 26 - node_modules/lodash/chain.js | 38 - node_modules/lodash/chunk.js | 50 - node_modules/lodash/clamp.js | 39 - node_modules/lodash/clone.js | 36 - node_modules/lodash/cloneDeep.js | 29 - node_modules/lodash/cloneDeepWith.js | 40 - node_modules/lodash/cloneWith.js | 42 - node_modules/lodash/collection.js | 30 - node_modules/lodash/commit.js | 33 - node_modules/lodash/compact.js | 31 - node_modules/lodash/concat.js | 43 - node_modules/lodash/cond.js | 60 - node_modules/lodash/conforms.js | 35 - node_modules/lodash/conformsTo.js | 32 - node_modules/lodash/constant.js | 26 - node_modules/lodash/core.js | 3877 ---- node_modules/lodash/core.min.js | 29 - node_modules/lodash/countBy.js | 40 - node_modules/lodash/create.js | 43 - node_modules/lodash/curry.js | 57 - node_modules/lodash/curryRight.js | 54 - node_modules/lodash/date.js | 3 - node_modules/lodash/debounce.js | 191 - node_modules/lodash/deburr.js | 45 - node_modules/lodash/defaultTo.js | 25 - node_modules/lodash/defaults.js | 64 - node_modules/lodash/defaultsDeep.js | 30 - node_modules/lodash/defer.js | 26 - node_modules/lodash/delay.js | 28 - node_modules/lodash/difference.js | 33 - node_modules/lodash/differenceBy.js | 44 - node_modules/lodash/differenceWith.js | 40 - node_modules/lodash/divide.js | 22 - node_modules/lodash/drop.js | 38 - node_modules/lodash/dropRight.js | 39 - node_modules/lodash/dropRightWhile.js | 45 - node_modules/lodash/dropWhile.js | 45 - node_modules/lodash/each.js | 1 - node_modules/lodash/eachRight.js | 1 - node_modules/lodash/endsWith.js | 43 - node_modules/lodash/entries.js | 1 - node_modules/lodash/entriesIn.js | 1 - node_modules/lodash/eq.js | 37 - node_modules/lodash/escape.js | 43 - node_modules/lodash/escapeRegExp.js | 32 - node_modules/lodash/every.js | 56 - node_modules/lodash/extend.js | 1 - node_modules/lodash/extendWith.js | 1 - node_modules/lodash/fill.js | 45 - node_modules/lodash/filter.js | 52 - node_modules/lodash/find.js | 42 - node_modules/lodash/findIndex.js | 55 - node_modules/lodash/findKey.js | 44 - node_modules/lodash/findLast.js | 25 - node_modules/lodash/findLastIndex.js | 59 - node_modules/lodash/findLastKey.js | 44 - node_modules/lodash/first.js | 1 - node_modules/lodash/flatMap.js | 29 - node_modules/lodash/flatMapDeep.js | 31 - node_modules/lodash/flatMapDepth.js | 31 - node_modules/lodash/flatten.js | 22 - node_modules/lodash/flattenDeep.js | 25 - node_modules/lodash/flattenDepth.js | 33 - node_modules/lodash/flip.js | 28 - node_modules/lodash/floor.js | 26 - node_modules/lodash/flow.js | 27 - node_modules/lodash/flowRight.js | 26 - node_modules/lodash/forEach.js | 41 - node_modules/lodash/forEachRight.js | 31 - node_modules/lodash/forIn.js | 39 - node_modules/lodash/forInRight.js | 37 - node_modules/lodash/forOwn.js | 36 - node_modules/lodash/forOwnRight.js | 34 - node_modules/lodash/fp.js | 2 - node_modules/lodash/fp/F.js | 1 - node_modules/lodash/fp/T.js | 1 - node_modules/lodash/fp/__.js | 1 - node_modules/lodash/fp/_baseConvert.js | 569 - node_modules/lodash/fp/_convertBrowser.js | 18 - node_modules/lodash/fp/_falseOptions.js | 7 - node_modules/lodash/fp/_mapping.js | 358 - node_modules/lodash/fp/_util.js | 16 - node_modules/lodash/fp/add.js | 5 - node_modules/lodash/fp/after.js | 5 - node_modules/lodash/fp/all.js | 1 - node_modules/lodash/fp/allPass.js | 1 - node_modules/lodash/fp/always.js | 1 - node_modules/lodash/fp/any.js | 1 - node_modules/lodash/fp/anyPass.js | 1 - node_modules/lodash/fp/apply.js | 1 - node_modules/lodash/fp/array.js | 2 - node_modules/lodash/fp/ary.js | 5 - node_modules/lodash/fp/assign.js | 5 - node_modules/lodash/fp/assignAll.js | 5 - node_modules/lodash/fp/assignAllWith.js | 5 - node_modules/lodash/fp/assignIn.js | 5 - node_modules/lodash/fp/assignInAll.js | 5 - node_modules/lodash/fp/assignInAllWith.js | 5 - node_modules/lodash/fp/assignInWith.js | 5 - node_modules/lodash/fp/assignWith.js | 5 - node_modules/lodash/fp/assoc.js | 1 - node_modules/lodash/fp/assocPath.js | 1 - node_modules/lodash/fp/at.js | 5 - node_modules/lodash/fp/attempt.js | 5 - node_modules/lodash/fp/before.js | 5 - node_modules/lodash/fp/bind.js | 5 - node_modules/lodash/fp/bindAll.js | 5 - node_modules/lodash/fp/bindKey.js | 5 - node_modules/lodash/fp/camelCase.js | 5 - node_modules/lodash/fp/capitalize.js | 5 - node_modules/lodash/fp/castArray.js | 5 - node_modules/lodash/fp/ceil.js | 5 - node_modules/lodash/fp/chain.js | 5 - node_modules/lodash/fp/chunk.js | 5 - node_modules/lodash/fp/clamp.js | 5 - node_modules/lodash/fp/clone.js | 5 - node_modules/lodash/fp/cloneDeep.js | 5 - node_modules/lodash/fp/cloneDeepWith.js | 5 - node_modules/lodash/fp/cloneWith.js | 5 - node_modules/lodash/fp/collection.js | 2 - node_modules/lodash/fp/commit.js | 5 - node_modules/lodash/fp/compact.js | 5 - node_modules/lodash/fp/complement.js | 1 - node_modules/lodash/fp/compose.js | 1 - node_modules/lodash/fp/concat.js | 5 - node_modules/lodash/fp/cond.js | 5 - node_modules/lodash/fp/conforms.js | 1 - node_modules/lodash/fp/conformsTo.js | 5 - node_modules/lodash/fp/constant.js | 5 - node_modules/lodash/fp/contains.js | 1 - node_modules/lodash/fp/convert.js | 18 - node_modules/lodash/fp/countBy.js | 5 - node_modules/lodash/fp/create.js | 5 - node_modules/lodash/fp/curry.js | 5 - node_modules/lodash/fp/curryN.js | 5 - node_modules/lodash/fp/curryRight.js | 5 - node_modules/lodash/fp/curryRightN.js | 5 - node_modules/lodash/fp/date.js | 2 - node_modules/lodash/fp/debounce.js | 5 - node_modules/lodash/fp/deburr.js | 5 - node_modules/lodash/fp/defaultTo.js | 5 - node_modules/lodash/fp/defaults.js | 5 - node_modules/lodash/fp/defaultsAll.js | 5 - node_modules/lodash/fp/defaultsDeep.js | 5 - node_modules/lodash/fp/defaultsDeepAll.js | 5 - node_modules/lodash/fp/defer.js | 5 - node_modules/lodash/fp/delay.js | 5 - node_modules/lodash/fp/difference.js | 5 - node_modules/lodash/fp/differenceBy.js | 5 - node_modules/lodash/fp/differenceWith.js | 5 - node_modules/lodash/fp/dissoc.js | 1 - node_modules/lodash/fp/dissocPath.js | 1 - node_modules/lodash/fp/divide.js | 5 - node_modules/lodash/fp/drop.js | 5 - node_modules/lodash/fp/dropLast.js | 1 - node_modules/lodash/fp/dropLastWhile.js | 1 - node_modules/lodash/fp/dropRight.js | 5 - node_modules/lodash/fp/dropRightWhile.js | 5 - node_modules/lodash/fp/dropWhile.js | 5 - node_modules/lodash/fp/each.js | 1 - node_modules/lodash/fp/eachRight.js | 1 - node_modules/lodash/fp/endsWith.js | 5 - node_modules/lodash/fp/entries.js | 1 - node_modules/lodash/fp/entriesIn.js | 1 - node_modules/lodash/fp/eq.js | 5 - node_modules/lodash/fp/equals.js | 1 - node_modules/lodash/fp/escape.js | 5 - node_modules/lodash/fp/escapeRegExp.js | 5 - node_modules/lodash/fp/every.js | 5 - node_modules/lodash/fp/extend.js | 1 - node_modules/lodash/fp/extendAll.js | 1 - node_modules/lodash/fp/extendAllWith.js | 1 - node_modules/lodash/fp/extendWith.js | 1 - node_modules/lodash/fp/fill.js | 5 - node_modules/lodash/fp/filter.js | 5 - node_modules/lodash/fp/find.js | 5 - node_modules/lodash/fp/findFrom.js | 5 - node_modules/lodash/fp/findIndex.js | 5 - node_modules/lodash/fp/findIndexFrom.js | 5 - node_modules/lodash/fp/findKey.js | 5 - node_modules/lodash/fp/findLast.js | 5 - node_modules/lodash/fp/findLastFrom.js | 5 - node_modules/lodash/fp/findLastIndex.js | 5 - node_modules/lodash/fp/findLastIndexFrom.js | 5 - node_modules/lodash/fp/findLastKey.js | 5 - node_modules/lodash/fp/first.js | 1 - node_modules/lodash/fp/flatMap.js | 5 - node_modules/lodash/fp/flatMapDeep.js | 5 - node_modules/lodash/fp/flatMapDepth.js | 5 - node_modules/lodash/fp/flatten.js | 5 - node_modules/lodash/fp/flattenDeep.js | 5 - node_modules/lodash/fp/flattenDepth.js | 5 - node_modules/lodash/fp/flip.js | 5 - node_modules/lodash/fp/floor.js | 5 - node_modules/lodash/fp/flow.js | 5 - node_modules/lodash/fp/flowRight.js | 5 - node_modules/lodash/fp/forEach.js | 5 - node_modules/lodash/fp/forEachRight.js | 5 - node_modules/lodash/fp/forIn.js | 5 - node_modules/lodash/fp/forInRight.js | 5 - node_modules/lodash/fp/forOwn.js | 5 - node_modules/lodash/fp/forOwnRight.js | 5 - node_modules/lodash/fp/fromPairs.js | 5 - node_modules/lodash/fp/function.js | 2 - node_modules/lodash/fp/functions.js | 5 - node_modules/lodash/fp/functionsIn.js | 5 - node_modules/lodash/fp/get.js | 5 - node_modules/lodash/fp/getOr.js | 5 - node_modules/lodash/fp/groupBy.js | 5 - node_modules/lodash/fp/gt.js | 5 - node_modules/lodash/fp/gte.js | 5 - node_modules/lodash/fp/has.js | 5 - node_modules/lodash/fp/hasIn.js | 5 - node_modules/lodash/fp/head.js | 5 - node_modules/lodash/fp/identical.js | 1 - node_modules/lodash/fp/identity.js | 5 - node_modules/lodash/fp/inRange.js | 5 - node_modules/lodash/fp/includes.js | 5 - node_modules/lodash/fp/includesFrom.js | 5 - node_modules/lodash/fp/indexBy.js | 1 - node_modules/lodash/fp/indexOf.js | 5 - node_modules/lodash/fp/indexOfFrom.js | 5 - node_modules/lodash/fp/init.js | 1 - node_modules/lodash/fp/initial.js | 5 - node_modules/lodash/fp/intersection.js | 5 - node_modules/lodash/fp/intersectionBy.js | 5 - node_modules/lodash/fp/intersectionWith.js | 5 - node_modules/lodash/fp/invert.js | 5 - node_modules/lodash/fp/invertBy.js | 5 - node_modules/lodash/fp/invertObj.js | 1 - node_modules/lodash/fp/invoke.js | 5 - node_modules/lodash/fp/invokeArgs.js | 5 - node_modules/lodash/fp/invokeArgsMap.js | 5 - node_modules/lodash/fp/invokeMap.js | 5 - node_modules/lodash/fp/isArguments.js | 5 - node_modules/lodash/fp/isArray.js | 5 - node_modules/lodash/fp/isArrayBuffer.js | 5 - node_modules/lodash/fp/isArrayLike.js | 5 - node_modules/lodash/fp/isArrayLikeObject.js | 5 - node_modules/lodash/fp/isBoolean.js | 5 - node_modules/lodash/fp/isBuffer.js | 5 - node_modules/lodash/fp/isDate.js | 5 - node_modules/lodash/fp/isElement.js | 5 - node_modules/lodash/fp/isEmpty.js | 5 - node_modules/lodash/fp/isEqual.js | 5 - node_modules/lodash/fp/isEqualWith.js | 5 - node_modules/lodash/fp/isError.js | 5 - node_modules/lodash/fp/isFinite.js | 5 - node_modules/lodash/fp/isFunction.js | 5 - node_modules/lodash/fp/isInteger.js | 5 - node_modules/lodash/fp/isLength.js | 5 - node_modules/lodash/fp/isMap.js | 5 - node_modules/lodash/fp/isMatch.js | 5 - node_modules/lodash/fp/isMatchWith.js | 5 - node_modules/lodash/fp/isNaN.js | 5 - node_modules/lodash/fp/isNative.js | 5 - node_modules/lodash/fp/isNil.js | 5 - node_modules/lodash/fp/isNull.js | 5 - node_modules/lodash/fp/isNumber.js | 5 - node_modules/lodash/fp/isObject.js | 5 - node_modules/lodash/fp/isObjectLike.js | 5 - node_modules/lodash/fp/isPlainObject.js | 5 - node_modules/lodash/fp/isRegExp.js | 5 - node_modules/lodash/fp/isSafeInteger.js | 5 - node_modules/lodash/fp/isSet.js | 5 - node_modules/lodash/fp/isString.js | 5 - node_modules/lodash/fp/isSymbol.js | 5 - node_modules/lodash/fp/isTypedArray.js | 5 - node_modules/lodash/fp/isUndefined.js | 5 - node_modules/lodash/fp/isWeakMap.js | 5 - node_modules/lodash/fp/isWeakSet.js | 5 - node_modules/lodash/fp/iteratee.js | 5 - node_modules/lodash/fp/join.js | 5 - node_modules/lodash/fp/juxt.js | 1 - node_modules/lodash/fp/kebabCase.js | 5 - node_modules/lodash/fp/keyBy.js | 5 - node_modules/lodash/fp/keys.js | 5 - node_modules/lodash/fp/keysIn.js | 5 - node_modules/lodash/fp/lang.js | 2 - node_modules/lodash/fp/last.js | 5 - node_modules/lodash/fp/lastIndexOf.js | 5 - node_modules/lodash/fp/lastIndexOfFrom.js | 5 - node_modules/lodash/fp/lowerCase.js | 5 - node_modules/lodash/fp/lowerFirst.js | 5 - node_modules/lodash/fp/lt.js | 5 - node_modules/lodash/fp/lte.js | 5 - node_modules/lodash/fp/map.js | 5 - node_modules/lodash/fp/mapKeys.js | 5 - node_modules/lodash/fp/mapValues.js | 5 - node_modules/lodash/fp/matches.js | 1 - node_modules/lodash/fp/matchesProperty.js | 5 - node_modules/lodash/fp/math.js | 2 - node_modules/lodash/fp/max.js | 5 - node_modules/lodash/fp/maxBy.js | 5 - node_modules/lodash/fp/mean.js | 5 - node_modules/lodash/fp/meanBy.js | 5 - node_modules/lodash/fp/memoize.js | 5 - node_modules/lodash/fp/merge.js | 5 - node_modules/lodash/fp/mergeAll.js | 5 - node_modules/lodash/fp/mergeAllWith.js | 5 - node_modules/lodash/fp/mergeWith.js | 5 - node_modules/lodash/fp/method.js | 5 - node_modules/lodash/fp/methodOf.js | 5 - node_modules/lodash/fp/min.js | 5 - node_modules/lodash/fp/minBy.js | 5 - node_modules/lodash/fp/mixin.js | 5 - node_modules/lodash/fp/multiply.js | 5 - node_modules/lodash/fp/nAry.js | 1 - node_modules/lodash/fp/negate.js | 5 - node_modules/lodash/fp/next.js | 5 - node_modules/lodash/fp/noop.js | 5 - node_modules/lodash/fp/now.js | 5 - node_modules/lodash/fp/nth.js | 5 - node_modules/lodash/fp/nthArg.js | 5 - node_modules/lodash/fp/number.js | 2 - node_modules/lodash/fp/object.js | 2 - node_modules/lodash/fp/omit.js | 5 - node_modules/lodash/fp/omitAll.js | 1 - node_modules/lodash/fp/omitBy.js | 5 - node_modules/lodash/fp/once.js | 5 - node_modules/lodash/fp/orderBy.js | 5 - node_modules/lodash/fp/over.js | 5 - node_modules/lodash/fp/overArgs.js | 5 - node_modules/lodash/fp/overEvery.js | 5 - node_modules/lodash/fp/overSome.js | 5 - node_modules/lodash/fp/pad.js | 5 - node_modules/lodash/fp/padChars.js | 5 - node_modules/lodash/fp/padCharsEnd.js | 5 - node_modules/lodash/fp/padCharsStart.js | 5 - node_modules/lodash/fp/padEnd.js | 5 - node_modules/lodash/fp/padStart.js | 5 - node_modules/lodash/fp/parseInt.js | 5 - node_modules/lodash/fp/partial.js | 5 - node_modules/lodash/fp/partialRight.js | 5 - node_modules/lodash/fp/partition.js | 5 - node_modules/lodash/fp/path.js | 1 - node_modules/lodash/fp/pathEq.js | 1 - node_modules/lodash/fp/pathOr.js | 1 - node_modules/lodash/fp/paths.js | 1 - node_modules/lodash/fp/pick.js | 5 - node_modules/lodash/fp/pickAll.js | 1 - node_modules/lodash/fp/pickBy.js | 5 - node_modules/lodash/fp/pipe.js | 1 - node_modules/lodash/fp/placeholder.js | 6 - node_modules/lodash/fp/plant.js | 5 - node_modules/lodash/fp/pluck.js | 1 - node_modules/lodash/fp/prop.js | 1 - node_modules/lodash/fp/propEq.js | 1 - node_modules/lodash/fp/propOr.js | 1 - node_modules/lodash/fp/property.js | 1 - node_modules/lodash/fp/propertyOf.js | 5 - node_modules/lodash/fp/props.js | 1 - node_modules/lodash/fp/pull.js | 5 - node_modules/lodash/fp/pullAll.js | 5 - node_modules/lodash/fp/pullAllBy.js | 5 - node_modules/lodash/fp/pullAllWith.js | 5 - node_modules/lodash/fp/pullAt.js | 5 - node_modules/lodash/fp/random.js | 5 - node_modules/lodash/fp/range.js | 5 - node_modules/lodash/fp/rangeRight.js | 5 - node_modules/lodash/fp/rangeStep.js | 5 - node_modules/lodash/fp/rangeStepRight.js | 5 - node_modules/lodash/fp/rearg.js | 5 - node_modules/lodash/fp/reduce.js | 5 - node_modules/lodash/fp/reduceRight.js | 5 - node_modules/lodash/fp/reject.js | 5 - node_modules/lodash/fp/remove.js | 5 - node_modules/lodash/fp/repeat.js | 5 - node_modules/lodash/fp/replace.js | 5 - node_modules/lodash/fp/rest.js | 5 - node_modules/lodash/fp/restFrom.js | 5 - node_modules/lodash/fp/result.js | 5 - node_modules/lodash/fp/reverse.js | 5 - node_modules/lodash/fp/round.js | 5 - node_modules/lodash/fp/sample.js | 5 - node_modules/lodash/fp/sampleSize.js | 5 - node_modules/lodash/fp/seq.js | 2 - node_modules/lodash/fp/set.js | 5 - node_modules/lodash/fp/setWith.js | 5 - node_modules/lodash/fp/shuffle.js | 5 - node_modules/lodash/fp/size.js | 5 - node_modules/lodash/fp/slice.js | 5 - node_modules/lodash/fp/snakeCase.js | 5 - node_modules/lodash/fp/some.js | 5 - node_modules/lodash/fp/sortBy.js | 5 - node_modules/lodash/fp/sortedIndex.js | 5 - node_modules/lodash/fp/sortedIndexBy.js | 5 - node_modules/lodash/fp/sortedIndexOf.js | 5 - node_modules/lodash/fp/sortedLastIndex.js | 5 - node_modules/lodash/fp/sortedLastIndexBy.js | 5 - node_modules/lodash/fp/sortedLastIndexOf.js | 5 - node_modules/lodash/fp/sortedUniq.js | 5 - node_modules/lodash/fp/sortedUniqBy.js | 5 - node_modules/lodash/fp/split.js | 5 - node_modules/lodash/fp/spread.js | 5 - node_modules/lodash/fp/spreadFrom.js | 5 - node_modules/lodash/fp/startCase.js | 5 - node_modules/lodash/fp/startsWith.js | 5 - node_modules/lodash/fp/string.js | 2 - node_modules/lodash/fp/stubArray.js | 5 - node_modules/lodash/fp/stubFalse.js | 5 - node_modules/lodash/fp/stubObject.js | 5 - node_modules/lodash/fp/stubString.js | 5 - node_modules/lodash/fp/stubTrue.js | 5 - node_modules/lodash/fp/subtract.js | 5 - node_modules/lodash/fp/sum.js | 5 - node_modules/lodash/fp/sumBy.js | 5 - node_modules/lodash/fp/symmetricDifference.js | 1 - .../lodash/fp/symmetricDifferenceBy.js | 1 - .../lodash/fp/symmetricDifferenceWith.js | 1 - node_modules/lodash/fp/tail.js | 5 - node_modules/lodash/fp/take.js | 5 - node_modules/lodash/fp/takeLast.js | 1 - node_modules/lodash/fp/takeLastWhile.js | 1 - node_modules/lodash/fp/takeRight.js | 5 - node_modules/lodash/fp/takeRightWhile.js | 5 - node_modules/lodash/fp/takeWhile.js | 5 - node_modules/lodash/fp/tap.js | 5 - node_modules/lodash/fp/template.js | 5 - node_modules/lodash/fp/templateSettings.js | 5 - node_modules/lodash/fp/throttle.js | 5 - node_modules/lodash/fp/thru.js | 5 - node_modules/lodash/fp/times.js | 5 - node_modules/lodash/fp/toArray.js | 5 - node_modules/lodash/fp/toFinite.js | 5 - node_modules/lodash/fp/toInteger.js | 5 - node_modules/lodash/fp/toIterator.js | 5 - node_modules/lodash/fp/toJSON.js | 5 - node_modules/lodash/fp/toLength.js | 5 - node_modules/lodash/fp/toLower.js | 5 - node_modules/lodash/fp/toNumber.js | 5 - node_modules/lodash/fp/toPairs.js | 5 - node_modules/lodash/fp/toPairsIn.js | 5 - node_modules/lodash/fp/toPath.js | 5 - node_modules/lodash/fp/toPlainObject.js | 5 - node_modules/lodash/fp/toSafeInteger.js | 5 - node_modules/lodash/fp/toString.js | 5 - node_modules/lodash/fp/toUpper.js | 5 - node_modules/lodash/fp/transform.js | 5 - node_modules/lodash/fp/trim.js | 5 - node_modules/lodash/fp/trimChars.js | 5 - node_modules/lodash/fp/trimCharsEnd.js | 5 - node_modules/lodash/fp/trimCharsStart.js | 5 - node_modules/lodash/fp/trimEnd.js | 5 - node_modules/lodash/fp/trimStart.js | 5 - node_modules/lodash/fp/truncate.js | 5 - node_modules/lodash/fp/unapply.js | 1 - node_modules/lodash/fp/unary.js | 5 - node_modules/lodash/fp/unescape.js | 5 - node_modules/lodash/fp/union.js | 5 - node_modules/lodash/fp/unionBy.js | 5 - node_modules/lodash/fp/unionWith.js | 5 - node_modules/lodash/fp/uniq.js | 5 - node_modules/lodash/fp/uniqBy.js | 5 - node_modules/lodash/fp/uniqWith.js | 5 - node_modules/lodash/fp/uniqueId.js | 5 - node_modules/lodash/fp/unnest.js | 1 - node_modules/lodash/fp/unset.js | 5 - node_modules/lodash/fp/unzip.js | 5 - node_modules/lodash/fp/unzipWith.js | 5 - node_modules/lodash/fp/update.js | 5 - node_modules/lodash/fp/updateWith.js | 5 - node_modules/lodash/fp/upperCase.js | 5 - node_modules/lodash/fp/upperFirst.js | 5 - node_modules/lodash/fp/useWith.js | 1 - node_modules/lodash/fp/util.js | 2 - node_modules/lodash/fp/value.js | 5 - node_modules/lodash/fp/valueOf.js | 5 - node_modules/lodash/fp/values.js | 5 - node_modules/lodash/fp/valuesIn.js | 5 - node_modules/lodash/fp/where.js | 1 - node_modules/lodash/fp/whereEq.js | 1 - node_modules/lodash/fp/without.js | 5 - node_modules/lodash/fp/words.js | 5 - node_modules/lodash/fp/wrap.js | 5 - node_modules/lodash/fp/wrapperAt.js | 5 - node_modules/lodash/fp/wrapperChain.js | 5 - node_modules/lodash/fp/wrapperLodash.js | 5 - node_modules/lodash/fp/wrapperReverse.js | 5 - node_modules/lodash/fp/wrapperValue.js | 5 - node_modules/lodash/fp/xor.js | 5 - node_modules/lodash/fp/xorBy.js | 5 - node_modules/lodash/fp/xorWith.js | 5 - node_modules/lodash/fp/zip.js | 5 - node_modules/lodash/fp/zipAll.js | 5 - node_modules/lodash/fp/zipObj.js | 1 - node_modules/lodash/fp/zipObject.js | 5 - node_modules/lodash/fp/zipObjectDeep.js | 5 - node_modules/lodash/fp/zipWith.js | 5 - node_modules/lodash/fromPairs.js | 28 - node_modules/lodash/function.js | 25 - node_modules/lodash/functions.js | 31 - node_modules/lodash/functionsIn.js | 31 - node_modules/lodash/get.js | 33 - node_modules/lodash/groupBy.js | 41 - node_modules/lodash/gt.js | 29 - node_modules/lodash/gte.js | 30 - node_modules/lodash/has.js | 35 - node_modules/lodash/hasIn.js | 34 - node_modules/lodash/head.js | 23 - node_modules/lodash/identity.js | 21 - node_modules/lodash/inRange.js | 55 - node_modules/lodash/includes.js | 53 - node_modules/lodash/index.js | 1 - node_modules/lodash/indexOf.js | 42 - node_modules/lodash/initial.js | 22 - node_modules/lodash/intersection.js | 30 - node_modules/lodash/intersectionBy.js | 45 - node_modules/lodash/intersectionWith.js | 41 - node_modules/lodash/invert.js | 42 - node_modules/lodash/invertBy.js | 56 - node_modules/lodash/invoke.js | 24 - node_modules/lodash/invokeMap.js | 41 - node_modules/lodash/isArguments.js | 36 - node_modules/lodash/isArray.js | 26 - node_modules/lodash/isArrayBuffer.js | 27 - node_modules/lodash/isArrayLike.js | 33 - node_modules/lodash/isArrayLikeObject.js | 33 - node_modules/lodash/isBoolean.js | 29 - node_modules/lodash/isBuffer.js | 38 - node_modules/lodash/isDate.js | 27 - node_modules/lodash/isElement.js | 25 - node_modules/lodash/isEmpty.js | 77 - node_modules/lodash/isEqual.js | 35 - node_modules/lodash/isEqualWith.js | 41 - node_modules/lodash/isError.js | 36 - node_modules/lodash/isFinite.js | 36 - node_modules/lodash/isFunction.js | 37 - node_modules/lodash/isInteger.js | 33 - node_modules/lodash/isLength.js | 35 - node_modules/lodash/isMap.js | 27 - node_modules/lodash/isMatch.js | 36 - node_modules/lodash/isMatchWith.js | 41 - node_modules/lodash/isNaN.js | 38 - node_modules/lodash/isNative.js | 40 - node_modules/lodash/isNil.js | 25 - node_modules/lodash/isNull.js | 22 - node_modules/lodash/isNumber.js | 38 - node_modules/lodash/isObject.js | 31 - node_modules/lodash/isObjectLike.js | 29 - node_modules/lodash/isPlainObject.js | 62 - node_modules/lodash/isRegExp.js | 27 - node_modules/lodash/isSafeInteger.js | 37 - node_modules/lodash/isSet.js | 27 - node_modules/lodash/isString.js | 30 - node_modules/lodash/isSymbol.js | 29 - node_modules/lodash/isTypedArray.js | 27 - node_modules/lodash/isUndefined.js | 22 - node_modules/lodash/isWeakMap.js | 28 - node_modules/lodash/isWeakSet.js | 28 - node_modules/lodash/iteratee.js | 53 - node_modules/lodash/join.js | 26 - node_modules/lodash/kebabCase.js | 28 - node_modules/lodash/keyBy.js | 36 - node_modules/lodash/keys.js | 37 - node_modules/lodash/keysIn.js | 32 - node_modules/lodash/lang.js | 58 - node_modules/lodash/last.js | 20 - node_modules/lodash/lastIndexOf.js | 46 - node_modules/lodash/lodash.js | 17248 ---------------- node_modules/lodash/lodash.min.js | 140 - node_modules/lodash/lowerCase.js | 27 - node_modules/lodash/lowerFirst.js | 22 - node_modules/lodash/lt.js | 29 - node_modules/lodash/lte.js | 30 - node_modules/lodash/map.js | 53 - node_modules/lodash/mapKeys.js | 36 - node_modules/lodash/mapValues.js | 43 - node_modules/lodash/matches.js | 46 - node_modules/lodash/matchesProperty.js | 44 - node_modules/lodash/math.js | 17 - node_modules/lodash/max.js | 29 - node_modules/lodash/maxBy.js | 34 - node_modules/lodash/mean.js | 22 - node_modules/lodash/meanBy.js | 31 - node_modules/lodash/memoize.js | 73 - node_modules/lodash/merge.js | 39 - node_modules/lodash/mergeWith.js | 39 - node_modules/lodash/method.js | 34 - node_modules/lodash/methodOf.js | 33 - node_modules/lodash/min.js | 29 - node_modules/lodash/minBy.js | 34 - node_modules/lodash/mixin.js | 74 - node_modules/lodash/multiply.js | 22 - node_modules/lodash/negate.js | 40 - node_modules/lodash/next.js | 35 - node_modules/lodash/noop.js | 17 - node_modules/lodash/now.js | 23 - node_modules/lodash/nth.js | 29 - node_modules/lodash/nthArg.js | 32 - node_modules/lodash/number.js | 5 - node_modules/lodash/object.js | 49 - node_modules/lodash/omit.js | 57 - node_modules/lodash/omitBy.js | 29 - node_modules/lodash/once.js | 25 - node_modules/lodash/orderBy.js | 47 - node_modules/lodash/over.js | 24 - node_modules/lodash/overArgs.js | 61 - node_modules/lodash/overEvery.js | 34 - node_modules/lodash/overSome.js | 37 - node_modules/lodash/package.json | 17 - node_modules/lodash/pad.js | 49 - node_modules/lodash/padEnd.js | 39 - node_modules/lodash/padStart.js | 39 - node_modules/lodash/parseInt.js | 43 - node_modules/lodash/partial.js | 50 - node_modules/lodash/partialRight.js | 49 - node_modules/lodash/partition.js | 43 - node_modules/lodash/pick.js | 25 - node_modules/lodash/pickBy.js | 37 - node_modules/lodash/plant.js | 48 - node_modules/lodash/property.js | 32 - node_modules/lodash/propertyOf.js | 30 - node_modules/lodash/pull.js | 29 - node_modules/lodash/pullAll.js | 29 - node_modules/lodash/pullAllBy.js | 33 - node_modules/lodash/pullAllWith.js | 32 - node_modules/lodash/pullAt.js | 43 - node_modules/lodash/random.js | 82 - node_modules/lodash/range.js | 46 - node_modules/lodash/rangeRight.js | 41 - node_modules/lodash/rearg.js | 33 - node_modules/lodash/reduce.js | 51 - node_modules/lodash/reduceRight.js | 36 - node_modules/lodash/reject.js | 46 - node_modules/lodash/remove.js | 53 - node_modules/lodash/repeat.js | 37 - node_modules/lodash/replace.js | 29 - node_modules/lodash/rest.js | 40 - node_modules/lodash/result.js | 56 - node_modules/lodash/reverse.js | 34 - node_modules/lodash/round.js | 26 - node_modules/lodash/sample.js | 24 - node_modules/lodash/sampleSize.js | 37 - node_modules/lodash/seq.js | 16 - node_modules/lodash/set.js | 35 - node_modules/lodash/setWith.js | 32 - node_modules/lodash/shuffle.js | 25 - node_modules/lodash/size.js | 46 - node_modules/lodash/slice.js | 37 - node_modules/lodash/snakeCase.js | 28 - node_modules/lodash/some.js | 51 - node_modules/lodash/sortBy.js | 48 - node_modules/lodash/sortedIndex.js | 24 - node_modules/lodash/sortedIndexBy.js | 33 - node_modules/lodash/sortedIndexOf.js | 31 - node_modules/lodash/sortedLastIndex.js | 25 - node_modules/lodash/sortedLastIndexBy.js | 33 - node_modules/lodash/sortedLastIndexOf.js | 31 - node_modules/lodash/sortedUniq.js | 24 - node_modules/lodash/sortedUniqBy.js | 26 - node_modules/lodash/split.js | 52 - node_modules/lodash/spread.js | 63 - node_modules/lodash/startCase.js | 29 - node_modules/lodash/startsWith.js | 39 - node_modules/lodash/string.js | 33 - node_modules/lodash/stubArray.js | 23 - node_modules/lodash/stubFalse.js | 18 - node_modules/lodash/stubObject.js | 23 - node_modules/lodash/stubString.js | 18 - node_modules/lodash/stubTrue.js | 18 - node_modules/lodash/subtract.js | 22 - node_modules/lodash/sum.js | 24 - node_modules/lodash/sumBy.js | 33 - node_modules/lodash/tail.js | 22 - node_modules/lodash/take.js | 37 - node_modules/lodash/takeRight.js | 39 - node_modules/lodash/takeRightWhile.js | 45 - node_modules/lodash/takeWhile.js | 45 - node_modules/lodash/tap.js | 29 - node_modules/lodash/template.js | 272 - node_modules/lodash/templateSettings.js | 67 - node_modules/lodash/throttle.js | 69 - node_modules/lodash/thru.js | 28 - node_modules/lodash/times.js | 51 - node_modules/lodash/toArray.js | 58 - node_modules/lodash/toFinite.js | 42 - node_modules/lodash/toInteger.js | 36 - node_modules/lodash/toIterator.js | 23 - node_modules/lodash/toJSON.js | 1 - node_modules/lodash/toLength.js | 38 - node_modules/lodash/toLower.js | 28 - node_modules/lodash/toNumber.js | 64 - node_modules/lodash/toPairs.js | 30 - node_modules/lodash/toPairsIn.js | 30 - node_modules/lodash/toPath.js | 33 - node_modules/lodash/toPlainObject.js | 32 - node_modules/lodash/toSafeInteger.js | 37 - node_modules/lodash/toString.js | 28 - node_modules/lodash/toUpper.js | 28 - node_modules/lodash/transform.js | 65 - node_modules/lodash/trim.js | 47 - node_modules/lodash/trimEnd.js | 41 - node_modules/lodash/trimStart.js | 43 - node_modules/lodash/truncate.js | 111 - node_modules/lodash/unary.js | 22 - node_modules/lodash/unescape.js | 34 - node_modules/lodash/union.js | 26 - node_modules/lodash/unionBy.js | 39 - node_modules/lodash/unionWith.js | 34 - node_modules/lodash/uniq.js | 25 - node_modules/lodash/uniqBy.js | 31 - node_modules/lodash/uniqWith.js | 28 - node_modules/lodash/uniqueId.js | 28 - node_modules/lodash/unset.js | 34 - node_modules/lodash/unzip.js | 45 - node_modules/lodash/unzipWith.js | 39 - node_modules/lodash/update.js | 35 - node_modules/lodash/updateWith.js | 33 - node_modules/lodash/upperCase.js | 27 - node_modules/lodash/upperFirst.js | 22 - node_modules/lodash/util.js | 34 - node_modules/lodash/value.js | 1 - node_modules/lodash/valueOf.js | 1 - node_modules/lodash/values.js | 34 - node_modules/lodash/valuesIn.js | 32 - node_modules/lodash/without.js | 31 - node_modules/lodash/words.js | 35 - node_modules/lodash/wrap.js | 30 - node_modules/lodash/wrapperAt.js | 48 - node_modules/lodash/wrapperChain.js | 34 - node_modules/lodash/wrapperLodash.js | 147 - node_modules/lodash/wrapperReverse.js | 44 - node_modules/lodash/wrapperValue.js | 21 - node_modules/lodash/xor.js | 28 - node_modules/lodash/xorBy.js | 39 - node_modules/lodash/xorWith.js | 34 - node_modules/lodash/zip.js | 22 - node_modules/lodash/zipObject.js | 24 - node_modules/lodash/zipObjectDeep.js | 23 - node_modules/lodash/zipWith.js | 32 - node_modules/lru-cache/LICENSE | 15 - node_modules/lru-cache/README.md | 158 - node_modules/lru-cache/index.js | 468 - node_modules/lru-cache/package.json | 36 - node_modules/mimic-fn/index.js | 9 - node_modules/mimic-fn/license | 9 - node_modules/mimic-fn/package.json | 40 - node_modules/mimic-fn/readme.md | 68 - node_modules/minimatch/README.md | 267 - node_modules/minimatch/minimatch.js | 1005 - node_modules/minimatch/package.json | 33 - node_modules/minimist/.eslintrc | 29 - node_modules/minimist/.github/FUNDING.yml | 12 - node_modules/minimist/.nycrc | 14 - node_modules/minimist/CHANGELOG.md | 298 - node_modules/minimist/LICENSE | 18 - node_modules/minimist/README.md | 121 - node_modules/minimist/example/parse.js | 4 - node_modules/minimist/index.js | 263 - node_modules/minimist/package.json | 75 - node_modules/minimist/test/all_bool.js | 34 - node_modules/minimist/test/bool.js | 177 - node_modules/minimist/test/dash.js | 43 - node_modules/minimist/test/default_bool.js | 37 - node_modules/minimist/test/dotted.js | 24 - node_modules/minimist/test/kv_short.js | 32 - node_modules/minimist/test/long.js | 33 - node_modules/minimist/test/num.js | 38 - node_modules/minimist/test/parse.js | 209 - node_modules/minimist/test/parse_modified.js | 11 - node_modules/minimist/test/proto.js | 64 - node_modules/minimist/test/short.js | 69 - node_modules/minimist/test/stop_early.js | 17 - node_modules/minimist/test/unknown.js | 104 - node_modules/minimist/test/whitespace.js | 10 - node_modules/mkdirp/LICENSE | 21 - node_modules/mkdirp/bin/cmd.js | 33 - node_modules/mkdirp/bin/usage.txt | 12 - node_modules/mkdirp/index.js | 102 - node_modules/mkdirp/package.json | 33 - node_modules/mkdirp/readme.markdown | 100 - .../mute-stream/.nyc_output/33508.json | 1 - .../mute-stream/.nyc_output/33510.json | 1 - node_modules/mute-stream/.travis.yml | 9 - node_modules/mute-stream/LICENSE | 15 - node_modules/mute-stream/README.md | 68 - .../coverage/lcov-report/__root__/index.html | 93 - .../lcov-report/__root__/mute.js.html | 500 - .../mute-stream/coverage/lcov-report/base.css | 212 - .../coverage/lcov-report/index.html | 93 - .../coverage/lcov-report/prettify.css | 1 - .../coverage/lcov-report/prettify.js | 1 - .../lcov-report/sort-arrow-sprite.png | Bin 209 -> 0 bytes .../coverage/lcov-report/sorter.js | 158 - node_modules/mute-stream/coverage/lcov.info | 155 - node_modules/mute-stream/mute.js | 145 - node_modules/mute-stream/package.json | 26 - node_modules/mute-stream/test/basic.js | 207 - node_modules/node-fetch/LICENSE.md | 22 - node_modules/node-fetch/README.md | 634 - node_modules/node-fetch/browser.js | 25 - node_modules/node-fetch/lib/index.es.js | 1777 -- node_modules/node-fetch/lib/index.js | 1787 -- node_modules/node-fetch/lib/index.mjs | 1775 -- node_modules/node-fetch/package.json | 89 - node_modules/node-rsa/gruntfile.js | 33 - .../src/encryptEngines/encryptEngines.js | 17 - .../node-rsa/src/encryptEngines/js.js | 34 - .../node-rsa/src/formats/components.js | 71 - node_modules/node-rsa/src/libs/jsbn.js | 1540 -- node_modules/node-rsa/src/schemes/pss.js | 183 - node_modules/node-rsa/src/schemes/schemes.js | 23 - node_modules/object-assign/index.js | 90 - node_modules/object-assign/license | 21 - node_modules/object-assign/package.json | 42 - node_modules/object-assign/readme.md | 61 - node_modules/once/LICENSE | 15 - node_modules/once/README.md | 79 - node_modules/once/once.js | 42 - node_modules/once/package.json | 33 - node_modules/onetime/index.js | 39 - node_modules/onetime/license | 21 - node_modules/onetime/package.json | 40 - node_modules/onetime/readme.md | 65 - node_modules/optionator/CHANGELOG.md | 56 - node_modules/optionator/README.md | 238 - node_modules/optionator/lib/index.js | 465 - node_modules/optionator/package.json | 44 - node_modules/os-tmpdir/index.js | 25 - node_modules/os-tmpdir/license | 21 - node_modules/os-tmpdir/package.json | 41 - node_modules/os-tmpdir/readme.md | 32 - node_modules/path-is-absolute/index.js | 20 - node_modules/path-is-absolute/license | 21 - node_modules/path-is-absolute/package.json | 43 - node_modules/path-is-absolute/readme.md | 59 - node_modules/path-is-inside/LICENSE.txt | 47 - .../path-is-inside/lib/path-is-inside.js | 28 - node_modules/path-is-inside/package.json | 21 - node_modules/pluralize/LICENSE | 21 - node_modules/pluralize/Readme.md | 89 - node_modules/pluralize/package.json | 40 - node_modules/pluralize/pluralize.js | 490 - node_modules/prelude-ls/CHANGELOG.md | 99 - node_modules/prelude-ls/lib/Func.js | 65 - node_modules/prelude-ls/lib/List.js | 686 - node_modules/prelude-ls/lib/Num.js | 130 - node_modules/prelude-ls/lib/Obj.js | 154 - node_modules/prelude-ls/lib/Str.js | 92 - node_modules/prelude-ls/lib/index.js | 178 - node_modules/prelude-ls/package.json | 52 - node_modules/prettier/THIRD-PARTY-NOTICES.md | 5844 ------ node_modules/prettier/bin/prettier.cjs | 80 - node_modules/process-nextick-args/index.js | 45 - node_modules/process-nextick-args/license.md | 19 - .../process-nextick-args/package.json | 25 - node_modules/process-nextick-args/readme.md | 18 - node_modules/progress/CHANGELOG.md | 115 - node_modules/progress/LICENSE | 22 - node_modules/progress/Makefile | 8 - node_modules/progress/Readme.md | 146 - node_modules/progress/index.js | 1 - node_modules/progress/lib/node-progress.js | 236 - node_modules/progress/package.json | 26 - node_modules/pseudomap/LICENSE | 15 - node_modules/pseudomap/README.md | 60 - node_modules/pseudomap/map.js | 9 - node_modules/pseudomap/package.json | 25 - node_modules/pseudomap/pseudomap.js | 113 - node_modules/pseudomap/test/basic.js | 86 - node_modules/readable-stream/.travis.yml | 34 - node_modules/readable-stream/CONTRIBUTING.md | 38 - node_modules/readable-stream/GOVERNANCE.md | 136 - node_modules/readable-stream/LICENSE | 47 - node_modules/readable-stream/README.md | 58 - .../doc/wg-meetings/2015-01-30.md | 60 - .../readable-stream/duplex-browser.js | 1 - node_modules/readable-stream/duplex.js | 1 - .../readable-stream/lib/_stream_duplex.js | 131 - .../lib/_stream_passthrough.js | 47 - .../readable-stream/lib/_stream_readable.js | 1019 - .../readable-stream/lib/_stream_transform.js | 214 - .../readable-stream/lib/_stream_writable.js | 685 - .../lib/internal/streams/BufferList.js | 78 - .../lib/internal/streams/destroy.js | 84 - .../lib/internal/streams/stream-browser.js | 1 - .../lib/internal/streams/stream.js | 1 - .../node_modules/isarray/.npmignore | 1 - .../node_modules/isarray/.travis.yml | 4 - .../node_modules/isarray/Makefile | 6 - .../node_modules/isarray/README.md | 60 - .../node_modules/isarray/component.json | 19 - .../node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 45 - .../node_modules/isarray/test.js | 20 - node_modules/readable-stream/package.json | 52 - node_modules/readable-stream/passthrough.js | 1 - .../readable-stream/readable-browser.js | 7 - node_modules/readable-stream/readable.js | 19 - node_modules/readable-stream/transform.js | 1 - .../readable-stream/writable-browser.js | 1 - node_modules/readable-stream/writable.js | 8 - node_modules/regexpp/LICENSE | 21 - node_modules/regexpp/README.md | 149 - node_modules/regexpp/index.d.ts | 202 - node_modules/regexpp/index.js | 4264 ---- node_modules/regexpp/index.js.map | 1 - node_modules/regexpp/index.mjs | 6785 ------ node_modules/regexpp/index.mjs.map | 1 - node_modules/regexpp/package.json | 85 - node_modules/require-uncached/index.js | 29 - node_modules/require-uncached/license | 21 - node_modules/require-uncached/package.json | 45 - node_modules/require-uncached/readme.md | 47 - node_modules/resolve-from/index.js | 19 - node_modules/resolve-from/license | 21 - node_modules/resolve-from/package.json | 34 - node_modules/resolve-from/readme.md | 56 - node_modules/restore-cursor/index.js | 9 - node_modules/restore-cursor/license | 21 - node_modules/restore-cursor/package.json | 44 - node_modules/restore-cursor/readme.md | 25 - node_modules/rimraf/LICENSE | 15 - node_modules/rimraf/README.md | 101 - node_modules/rimraf/bin.js | 50 - node_modules/rimraf/package.json | 29 - node_modules/rimraf/rimraf.js | 364 - node_modules/run-async/LICENSE | 21 - node_modules/run-async/README.md | 79 - node_modules/run-async/index.js | 98 - node_modules/run-async/package.json | 27 - node_modules/rx-lite-aggregates/package.json | 40 - node_modules/rx-lite-aggregates/readme.md | 85 - .../rx-lite-aggregates/rx.lite.aggregates.js | 1365 -- .../rx-lite-aggregates/rx.lite.aggregates.map | 1 - .../rx.lite.aggregates.min.js | 3 - node_modules/rx-lite/package.json | 38 - node_modules/rx-lite/readme.md | 173 - node_modules/rx-lite/rx.lite.js | 7054 ------- node_modules/rx-lite/rx.lite.map | 1 - node_modules/rx-lite/rx.lite.min.js | 5 - node_modules/safe-buffer/LICENSE | 21 - node_modules/safe-buffer/README.md | 584 - node_modules/safe-buffer/index.d.ts | 187 - node_modules/safe-buffer/index.js | 62 - node_modules/safe-buffer/package.json | 37 - node_modules/semver/LICENSE | 15 - node_modules/semver/README.md | 412 - node_modules/semver/bin/semver | 160 - node_modules/semver/package.json | 38 - node_modules/semver/range.bnf | 16 - node_modules/semver/semver.js | 1525 -- node_modules/shebang-command/index.js | 19 - node_modules/shebang-command/license | 21 - node_modules/shebang-command/package.json | 39 - node_modules/shebang-command/readme.md | 39 - node_modules/shebang-regex/index.js | 2 - node_modules/shebang-regex/license | 21 - node_modules/shebang-regex/package.json | 32 - node_modules/shebang-regex/readme.md | 29 - node_modules/signal-exit/LICENSE.txt | 16 - node_modules/signal-exit/README.md | 39 - node_modules/signal-exit/index.js | 202 - node_modules/signal-exit/package.json | 38 - node_modules/signal-exit/signals.js | 53 - node_modules/slice-ansi/index.js | 88 - node_modules/slice-ansi/license | 9 - node_modules/slice-ansi/package.json | 53 - node_modules/slice-ansi/readme.md | 64 - node_modules/sprintf-js/.npmignore | 1 - node_modules/sprintf-js/LICENSE | 24 - node_modules/sprintf-js/README.md | 88 - node_modules/sprintf-js/bower.json | 14 - node_modules/sprintf-js/demo/angular.html | 20 - .../sprintf-js/dist/angular-sprintf.min.js | 4 - .../dist/angular-sprintf.min.js.map | 1 - .../sprintf-js/dist/angular-sprintf.min.map | 1 - node_modules/sprintf-js/dist/sprintf.min.js | 4 - .../sprintf-js/dist/sprintf.min.js.map | 1 - node_modules/sprintf-js/dist/sprintf.min.map | 1 - node_modules/sprintf-js/gruntfile.js | 36 - node_modules/sprintf-js/package.json | 22 - .../sprintf-js/src/angular-sprintf.js | 18 - node_modules/sprintf-js/src/sprintf.js | 208 - node_modules/sprintf-js/test/test.js | 82 - node_modules/string-width/index.js | 36 - node_modules/string-width/license | 9 - .../node_modules/ansi-regex/index.js | 10 - .../node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 53 - .../node_modules/ansi-regex/readme.md | 46 - .../node_modules/strip-ansi/index.js | 4 - .../node_modules/strip-ansi/license | 9 - .../node_modules/strip-ansi/package.json | 52 - .../node_modules/strip-ansi/readme.md | 39 - node_modules/string-width/package.json | 55 - node_modules/string-width/readme.md | 42 - node_modules/string_decoder/.travis.yml | 50 - node_modules/string_decoder/LICENSE | 48 - node_modules/string_decoder/README.md | 47 - .../string_decoder/lib/string_decoder.js | 296 - node_modules/string_decoder/package.json | 31 - node_modules/strip-ansi/index.js | 6 - node_modules/strip-ansi/license | 21 - node_modules/strip-ansi/package.json | 57 - node_modules/strip-ansi/readme.md | 33 - node_modules/strip-json-comments/index.js | 70 - node_modules/strip-json-comments/license | 21 - node_modules/strip-json-comments/package.json | 42 - node_modules/strip-json-comments/readme.md | 64 - node_modules/supports-color/index.js | 50 - node_modules/supports-color/license | 21 - node_modules/supports-color/package.json | 49 - node_modules/supports-color/readme.md | 36 - node_modules/table/LICENSE | 24 - node_modules/table/README.md | 671 - node_modules/table/dist/alignString.js | 106 - node_modules/table/dist/alignTableData.js | 34 - .../table/dist/calculateCellHeight.js | 47 - .../table/dist/calculateCellWidthIndex.js | 23 - .../dist/calculateMaximumColumnWidthIndex.js | 41 - .../table/dist/calculateRowHeightIndex.js | 48 - node_modules/table/dist/createStream.js | 157 - node_modules/table/dist/drawBorder.js | 104 - node_modules/table/dist/drawRow.js | 21 - node_modules/table/dist/drawTable.js | 63 - .../table/dist/getBorderCharacters.js | 126 - node_modules/table/dist/index.js | 24 - node_modules/table/dist/makeConfig.js | 99 - node_modules/table/dist/makeStreamConfig.js | 107 - .../table/dist/mapDataUsingRowHeightIndex.js | 57 - node_modules/table/dist/padTableData.js | 26 - node_modules/table/dist/schemas/config.json | 114 - .../table/dist/schemas/streamConfig.json | 114 - node_modules/table/dist/stringifyTableData.js | 17 - node_modules/table/dist/table.js | 133 - node_modules/table/dist/truncateTableData.js | 27 - node_modules/table/dist/validateConfig.js | 753 - .../table/dist/validateStreamConfig.js | 740 - node_modules/table/dist/validateTableData.js | 51 - node_modules/table/dist/wrapString.js | 46 - node_modules/table/dist/wrapWord.js | 56 - .../table/node_modules/ansi-styles/index.js | 165 - .../table/node_modules/ansi-styles/license | 9 - .../node_modules/ansi-styles/package.json | 56 - .../table/node_modules/ansi-styles/readme.md | 147 - .../table/node_modules/chalk/index.js | 228 - .../table/node_modules/chalk/index.js.flow | 93 - node_modules/table/node_modules/chalk/license | 9 - .../table/node_modules/chalk/package.json | 71 - .../table/node_modules/chalk/readme.md | 314 - .../table/node_modules/chalk/templates.js | 128 - .../table/node_modules/chalk/types/index.d.ts | 97 - .../node_modules/supports-color/browser.js | 5 - .../node_modules/supports-color/index.js | 131 - .../table/node_modules/supports-color/license | 9 - .../node_modules/supports-color/package.json | 53 - .../node_modules/supports-color/readme.md | 66 - node_modules/table/package.json | 68 - node_modules/text-table/.travis.yml | 4 - node_modules/text-table/LICENSE | 18 - node_modules/text-table/example/align.js | 8 - node_modules/text-table/example/center.js | 8 - node_modules/text-table/example/dotalign.js | 9 - node_modules/text-table/example/doubledot.js | 11 - node_modules/text-table/example/table.js | 6 - node_modules/text-table/index.js | 86 - node_modules/text-table/package.json | 44 - node_modules/text-table/readme.markdown | 134 - node_modules/text-table/test/align.js | 18 - node_modules/text-table/test/ansi-colors.js | 32 - node_modules/text-table/test/center.js | 18 - node_modules/text-table/test/dotalign.js | 20 - node_modules/text-table/test/doubledot.js | 24 - node_modules/text-table/test/table.js | 14 - node_modules/through/.travis.yml | 5 - node_modules/through/LICENSE.APACHE2 | 15 - node_modules/through/LICENSE.MIT | 24 - node_modules/through/index.js | 108 - node_modules/through/package.json | 36 - node_modules/through/readme.markdown | 64 - node_modules/through/test/async.js | 28 - node_modules/through/test/auto-destroy.js | 30 - node_modules/through/test/buffering.js | 71 - node_modules/through/test/end.js | 45 - node_modules/through/test/index.js | 133 - node_modules/tmp/LICENSE | 21 - node_modules/tmp/README.md | 314 - node_modules/tmp/lib/tmp.js | 611 - node_modules/tmp/package.json | 38 - node_modules/tr46/.npmignore | 4 - node_modules/tr46/index.js | 193 - node_modules/tr46/lib/.gitkeep | 0 node_modules/tr46/lib/mappingTable.json | 1 - node_modules/tr46/package.json | 31 - node_modules/type-check/README.md | 210 - node_modules/type-check/lib/check.js | 126 - node_modules/type-check/lib/index.js | 16 - node_modules/type-check/lib/parse-type.js | 196 - node_modules/type-check/package.json | 40 - node_modules/typedarray/.travis.yml | 4 - node_modules/typedarray/LICENSE | 35 - node_modules/typedarray/example/tarray.js | 4 - node_modules/typedarray/index.js | 630 - node_modules/typedarray/package.json | 55 - node_modules/typedarray/readme.markdown | 61 - .../typedarray/test/server/undef_globals.js | 19 - node_modules/typedarray/test/tarray.js | 10 - node_modules/util-deprecate/History.md | 16 - node_modules/util-deprecate/LICENSE | 24 - node_modules/util-deprecate/README.md | 53 - node_modules/util-deprecate/browser.js | 67 - node_modules/util-deprecate/node.js | 6 - node_modules/util-deprecate/package.json | 27 - node_modules/uuid/dist-node/bin/uuid | 2 - node_modules/webidl-conversions/LICENSE.md | 12 - node_modules/webidl-conversions/README.md | 53 - node_modules/webidl-conversions/lib/index.js | 189 - node_modules/webidl-conversions/package.json | 23 - node_modules/whatwg-url/LICENSE.txt | 21 - node_modules/whatwg-url/README.md | 67 - node_modules/whatwg-url/lib/URL-impl.js | 200 - node_modules/whatwg-url/lib/URL.js | 196 - node_modules/whatwg-url/lib/public-api.js | 11 - .../whatwg-url/lib/url-state-machine.js | 1297 -- node_modules/whatwg-url/lib/utils.js | 20 - node_modules/whatwg-url/package.json | 32 - node_modules/which/CHANGELOG.md | 152 - node_modules/which/README.md | 51 - node_modules/which/bin/which | 52 - node_modules/which/package.json | 30 - node_modules/which/which.js | 135 - node_modules/wrappy/LICENSE | 15 - node_modules/wrappy/README.md | 36 - node_modules/wrappy/package.json | 29 - node_modules/wrappy/wrappy.js | 33 - node_modules/write/LICENSE | 21 - node_modules/write/README.md | 101 - node_modules/write/index.js | 93 - node_modules/write/package.json | 43 - node_modules/yallist/LICENSE | 15 - node_modules/yallist/README.md | 204 - node_modules/yallist/iterator.js | 7 - node_modules/yallist/package.json | 29 - node_modules/yallist/yallist.js | 370 - runner.js | 286 + 2518 files changed, 2719 insertions(+), 324495 deletions(-) delete mode 100644 .DS_Store delete mode 100644 Walmart.sql delete mode 120000 node_modules/.bin/acorn delete mode 120000 node_modules/.bin/eslint delete mode 120000 node_modules/.bin/eslint-config-prettier-check delete mode 120000 node_modules/.bin/esparse delete mode 120000 node_modules/.bin/esvalidate delete mode 120000 node_modules/.bin/husky delete mode 120000 node_modules/.bin/js-yaml delete mode 120000 node_modules/.bin/mkdirp delete mode 120000 node_modules/.bin/node-lint delete mode 120000 node_modules/.bin/prettier delete mode 120000 node_modules/.bin/rimraf delete mode 120000 node_modules/.bin/semver delete mode 120000 node_modules/.bin/uuid delete mode 120000 node_modules/.bin/which delete mode 100644 node_modules/.package-lock.json delete mode 100644 node_modules/acorn-jsx/LICENSE delete mode 100644 node_modules/acorn-jsx/README.md delete mode 100644 node_modules/acorn-jsx/index.js delete mode 100644 node_modules/acorn-jsx/inject.js delete mode 120000 node_modules/acorn-jsx/node_modules/.bin/acorn delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/.editorconfig delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/.gitattributes delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/.npmignore delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/.tern-project delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/.travis.yml delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/AUTHORS delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/CHANGELOG.md delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/LICENSE delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/README.md delete mode 100755 node_modules/acorn-jsx/node_modules/acorn/bin/acorn delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/bin/generate-identifier-regex.js delete mode 100755 node_modules/acorn-jsx/node_modules/acorn/bin/update_authors.sh delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/dist/.keep delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/dist/acorn.es.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/dist/acorn.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/dist/acorn_loose.es.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/dist/acorn_loose.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/dist/walk.es.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/dist/walk.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/package.json delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/rollup/config.bin.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/rollup/config.loose.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/rollup/config.main.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/rollup/config.walk.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/bin/acorn.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/expression.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/identifier.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/index.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/location.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/locutil.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/loose/expression.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/loose/index.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/loose/parseutil.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/loose/state.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/loose/statement.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/loose/tokenize.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/lval.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/node.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/options.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/parseutil.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/state.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/statement.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/tokencontext.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/tokenize.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/tokentype.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/util.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/walk/index.js delete mode 100644 node_modules/acorn-jsx/node_modules/acorn/src/whitespace.js delete mode 100644 node_modules/acorn-jsx/package.json delete mode 100644 node_modules/acorn/AUTHORS delete mode 100644 node_modules/acorn/CHANGELOG.md delete mode 100644 node_modules/acorn/LICENSE delete mode 100644 node_modules/acorn/README.md delete mode 100644 node_modules/acorn/acorn-loose/dist/acorn-loose.js delete mode 100644 node_modules/acorn/acorn-loose/dist/acorn-loose.js.map delete mode 100644 node_modules/acorn/acorn-loose/dist/acorn-loose.mjs delete mode 100644 node_modules/acorn/acorn-loose/dist/acorn-loose.mjs.map delete mode 100644 node_modules/acorn/acorn-walk/dist/walk.js delete mode 100644 node_modules/acorn/acorn-walk/dist/walk.js.map delete mode 100644 node_modules/acorn/acorn-walk/dist/walk.mjs delete mode 100644 node_modules/acorn/acorn-walk/dist/walk.mjs.map delete mode 100644 node_modules/acorn/acorn/dist/acorn.js delete mode 100644 node_modules/acorn/acorn/dist/acorn.js.map delete mode 100644 node_modules/acorn/acorn/dist/acorn.mjs delete mode 100644 node_modules/acorn/acorn/dist/acorn.mjs.map delete mode 100644 node_modules/acorn/acorn/dist/bin.js delete mode 100644 node_modules/acorn/bin/_acorn.js delete mode 100755 node_modules/acorn/bin/acorn delete mode 100644 node_modules/acorn/bin/run_test262.js delete mode 100644 node_modules/acorn/bin/test262.whitelist delete mode 100644 node_modules/acorn/dist/.keep delete mode 100644 node_modules/acorn/dist/acorn.es.js delete mode 100644 node_modules/acorn/dist/acorn.js delete mode 100644 node_modules/acorn/dist/acorn_loose.es.js delete mode 100644 node_modules/acorn/dist/acorn_loose.js delete mode 100644 node_modules/acorn/dist/walk.es.js delete mode 100644 node_modules/acorn/dist/walk.js delete mode 100644 node_modules/acorn/package.json delete mode 100644 node_modules/ajv-keywords/LICENSE delete mode 100644 node_modules/ajv-keywords/README.md delete mode 100644 node_modules/ajv-keywords/index.js delete mode 100644 node_modules/ajv-keywords/keywords/_formatLimit.js delete mode 100644 node_modules/ajv-keywords/keywords/_util.js delete mode 100644 node_modules/ajv-keywords/keywords/deepProperties.js delete mode 100644 node_modules/ajv-keywords/keywords/deepRequired.js delete mode 100644 node_modules/ajv-keywords/keywords/dot/_formatLimit.jst delete mode 100644 node_modules/ajv-keywords/keywords/dot/patternRequired.jst delete mode 100644 node_modules/ajv-keywords/keywords/dot/switch.jst delete mode 100644 node_modules/ajv-keywords/keywords/dotjs/README.md delete mode 100644 node_modules/ajv-keywords/keywords/dotjs/_formatLimit.js delete mode 100644 node_modules/ajv-keywords/keywords/dotjs/patternRequired.js delete mode 100644 node_modules/ajv-keywords/keywords/dotjs/switch.js delete mode 100644 node_modules/ajv-keywords/keywords/dynamicDefaults.js delete mode 100644 node_modules/ajv-keywords/keywords/formatMaximum.js delete mode 100644 node_modules/ajv-keywords/keywords/formatMinimum.js delete mode 100644 node_modules/ajv-keywords/keywords/if.js delete mode 100644 node_modules/ajv-keywords/keywords/index.js delete mode 100644 node_modules/ajv-keywords/keywords/instanceof.js delete mode 100644 node_modules/ajv-keywords/keywords/patternRequired.js delete mode 100644 node_modules/ajv-keywords/keywords/prohibited.js delete mode 100644 node_modules/ajv-keywords/keywords/range.js delete mode 100644 node_modules/ajv-keywords/keywords/regexp.js delete mode 100644 node_modules/ajv-keywords/keywords/select.js delete mode 100644 node_modules/ajv-keywords/keywords/switch.js delete mode 100644 node_modules/ajv-keywords/keywords/typeof.js delete mode 100644 node_modules/ajv-keywords/keywords/uniqueItemProperties.js delete mode 100644 node_modules/ajv-keywords/package.json delete mode 100644 node_modules/ajv/LICENSE delete mode 100644 node_modules/ajv/README.md delete mode 100644 node_modules/ajv/dist/ajv.bundle.js delete mode 100644 node_modules/ajv/dist/ajv.min.js delete mode 100644 node_modules/ajv/dist/ajv.min.js.map delete mode 100644 node_modules/ajv/dist/nodent.min.js delete mode 100644 node_modules/ajv/dist/regenerator.min.js delete mode 100644 node_modules/ajv/lib/$data.js delete mode 100644 node_modules/ajv/lib/ajv.d.ts delete mode 100644 node_modules/ajv/lib/ajv.js delete mode 100644 node_modules/ajv/lib/compile/_rules.js delete mode 100644 node_modules/ajv/lib/compile/equal.js delete mode 100644 node_modules/ajv/lib/compile/formats.js delete mode 100644 node_modules/ajv/lib/compile/index.js delete mode 100644 node_modules/ajv/lib/compile/resolve.js delete mode 100644 node_modules/ajv/lib/compile/rules.js delete mode 100644 node_modules/ajv/lib/compile/util.js delete mode 100644 node_modules/ajv/lib/dot/_limit.jst delete mode 100644 node_modules/ajv/lib/dot/_limitItems.jst delete mode 100644 node_modules/ajv/lib/dot/_limitLength.jst delete mode 100644 node_modules/ajv/lib/dot/_limitProperties.jst delete mode 100644 node_modules/ajv/lib/dot/allOf.jst delete mode 100644 node_modules/ajv/lib/dot/anyOf.jst delete mode 100644 node_modules/ajv/lib/dot/coerce.def delete mode 100644 node_modules/ajv/lib/dot/contains.jst delete mode 100644 node_modules/ajv/lib/dot/custom.jst delete mode 100644 node_modules/ajv/lib/dot/defaults.def delete mode 100644 node_modules/ajv/lib/dot/definitions.def delete mode 100644 node_modules/ajv/lib/dot/dependencies.jst delete mode 100644 node_modules/ajv/lib/dot/errors.def delete mode 100644 node_modules/ajv/lib/dot/format.jst delete mode 100644 node_modules/ajv/lib/dot/items.jst delete mode 100644 node_modules/ajv/lib/dot/multipleOf.jst delete mode 100644 node_modules/ajv/lib/dot/oneOf.jst delete mode 100644 node_modules/ajv/lib/dot/properties.jst delete mode 100644 node_modules/ajv/lib/dot/propertyNames.jst delete mode 100644 node_modules/ajv/lib/dot/ref.jst delete mode 100644 node_modules/ajv/lib/dot/uniqueItems.jst delete mode 100644 node_modules/ajv/lib/dot/validate.jst delete mode 100644 node_modules/ajv/lib/dotjs/_limit.js delete mode 100644 node_modules/ajv/lib/dotjs/_limitItems.js delete mode 100644 node_modules/ajv/lib/dotjs/_limitLength.js delete mode 100644 node_modules/ajv/lib/dotjs/_limitProperties.js delete mode 100644 node_modules/ajv/lib/dotjs/allOf.js delete mode 100644 node_modules/ajv/lib/dotjs/anyOf.js delete mode 100644 node_modules/ajv/lib/dotjs/const.js delete mode 100644 node_modules/ajv/lib/dotjs/contains.js delete mode 100644 node_modules/ajv/lib/dotjs/custom.js delete mode 100644 node_modules/ajv/lib/dotjs/dependencies.js delete mode 100644 node_modules/ajv/lib/dotjs/enum.js delete mode 100644 node_modules/ajv/lib/dotjs/format.js delete mode 100644 node_modules/ajv/lib/dotjs/items.js delete mode 100644 node_modules/ajv/lib/dotjs/multipleOf.js delete mode 100644 node_modules/ajv/lib/dotjs/not.js delete mode 100644 node_modules/ajv/lib/dotjs/oneOf.js delete mode 100644 node_modules/ajv/lib/dotjs/pattern.js delete mode 100644 node_modules/ajv/lib/dotjs/properties.js delete mode 100644 node_modules/ajv/lib/dotjs/propertyNames.js delete mode 100644 node_modules/ajv/lib/dotjs/ref.js delete mode 100644 node_modules/ajv/lib/dotjs/required.js delete mode 100644 node_modules/ajv/lib/dotjs/uniqueItems.js delete mode 100644 node_modules/ajv/lib/dotjs/validate.js delete mode 100644 node_modules/ajv/lib/keyword.js delete mode 100644 node_modules/ajv/lib/patternGroups.js delete mode 100644 node_modules/ajv/lib/refs/$data.json delete mode 100644 node_modules/ajv/lib/refs/json-schema-draft-04.json delete mode 100644 node_modules/ajv/lib/refs/json-schema-v5.json delete mode 100644 node_modules/ajv/package.json delete mode 100755 node_modules/ajv/scripts/info delete mode 100755 node_modules/ajv/scripts/prepare-tests delete mode 100755 node_modules/ajv/scripts/travis-gh-pages delete mode 100644 node_modules/ansi-escapes/index.js delete mode 100644 node_modules/ansi-escapes/license delete mode 100644 node_modules/ansi-escapes/package.json delete mode 100644 node_modules/ansi-escapes/readme.md delete mode 100644 node_modules/ansi-regex/index.js delete mode 100644 node_modules/ansi-regex/license delete mode 100644 node_modules/ansi-regex/package.json delete mode 100644 node_modules/ansi-regex/readme.md delete mode 100644 node_modules/ansi-styles/index.js delete mode 100644 node_modules/ansi-styles/license delete mode 100644 node_modules/ansi-styles/package.json delete mode 100644 node_modules/ansi-styles/readme.md delete mode 100644 node_modules/argparse/CHANGELOG.md delete mode 100644 node_modules/argparse/LICENSE delete mode 100644 node_modules/argparse/README.md delete mode 100644 node_modules/argparse/index.js delete mode 100644 node_modules/argparse/lib/action.js delete mode 100644 node_modules/argparse/lib/action/append.js delete mode 100644 node_modules/argparse/lib/action/append/constant.js delete mode 100644 node_modules/argparse/lib/action/count.js delete mode 100644 node_modules/argparse/lib/action/help.js delete mode 100644 node_modules/argparse/lib/action/store.js delete mode 100644 node_modules/argparse/lib/action/store/constant.js delete mode 100644 node_modules/argparse/lib/action/store/false.js delete mode 100644 node_modules/argparse/lib/action/store/true.js delete mode 100644 node_modules/argparse/lib/action/subparsers.js delete mode 100644 node_modules/argparse/lib/action/version.js delete mode 100644 node_modules/argparse/lib/action_container.js delete mode 100644 node_modules/argparse/lib/argparse.js delete mode 100644 node_modules/argparse/lib/argument/error.js delete mode 100644 node_modules/argparse/lib/argument/exclusive.js delete mode 100644 node_modules/argparse/lib/argument/group.js delete mode 100644 node_modules/argparse/lib/argument_parser.js delete mode 100644 node_modules/argparse/lib/const.js delete mode 100644 node_modules/argparse/lib/help/added_formatters.js delete mode 100644 node_modules/argparse/lib/help/formatter.js delete mode 100644 node_modules/argparse/lib/namespace.js delete mode 100644 node_modules/argparse/lib/utils.js delete mode 100644 node_modules/argparse/package.json delete mode 100644 node_modules/babel-code-frame/.npmignore delete mode 100644 node_modules/babel-code-frame/README.md delete mode 100644 node_modules/babel-code-frame/lib/index.js delete mode 100644 node_modules/babel-code-frame/package-lock.json delete mode 100644 node_modules/babel-code-frame/package.json delete mode 100644 node_modules/buffer-from/LICENSE delete mode 100644 node_modules/buffer-from/index.js delete mode 100644 node_modules/buffer-from/package.json delete mode 100644 node_modules/buffer-from/readme.md delete mode 100644 node_modules/caller-path/index.js delete mode 100644 node_modules/caller-path/package.json delete mode 100644 node_modules/caller-path/readme.md delete mode 100644 node_modules/callsites/index.js delete mode 100644 node_modules/callsites/package.json delete mode 100644 node_modules/callsites/readme.md delete mode 100644 node_modules/chalk/index.js delete mode 100644 node_modules/chalk/license delete mode 100644 node_modules/chalk/package.json delete mode 100644 node_modules/chalk/readme.md delete mode 100644 node_modules/chardet/.npmignore delete mode 100644 node_modules/chardet/.travis.yml delete mode 100644 node_modules/chardet/LICENSE delete mode 100644 node_modules/chardet/README.md delete mode 100644 node_modules/chardet/encoding/iso2022.js delete mode 100644 node_modules/chardet/encoding/mbcs.js delete mode 100644 node_modules/chardet/encoding/sbcs.js delete mode 100644 node_modules/chardet/encoding/unicode.js delete mode 100644 node_modules/chardet/encoding/utf8.js delete mode 100644 node_modules/chardet/index.js delete mode 100644 node_modules/chardet/match.js delete mode 100644 node_modules/chardet/package.json delete mode 100644 node_modules/chardet/yarn.lock delete mode 100644 node_modules/circular-json/.npmignore delete mode 100644 node_modules/circular-json/LICENSE.txt delete mode 100644 node_modules/circular-json/README.md delete mode 100644 node_modules/circular-json/build/circular-json.js delete mode 100644 node_modules/circular-json/build/circular-json.max.js delete mode 100644 node_modules/circular-json/build/circular-json.node.js delete mode 100644 node_modules/circular-json/package.json delete mode 100644 node_modules/circular-json/template/license.after delete mode 100644 node_modules/circular-json/template/license.before delete mode 100644 node_modules/cli-cursor/index.js delete mode 100644 node_modules/cli-cursor/license delete mode 100644 node_modules/cli-cursor/package.json delete mode 100644 node_modules/cli-cursor/readme.md delete mode 100644 node_modules/cli-width/.nyc_output/00ef1b3d-3687-482b-8d03-de2f76b58f54.json delete mode 100644 node_modules/cli-width/.nyc_output/processinfo/00ef1b3d-3687-482b-8d03-de2f76b58f54.json delete mode 100644 node_modules/cli-width/.nyc_output/processinfo/index.json delete mode 100644 node_modules/cli-width/.travis.yml delete mode 100644 node_modules/cli-width/CHANGELOG.md delete mode 100644 node_modules/cli-width/LICENSE delete mode 100644 node_modules/cli-width/README.md delete mode 100644 node_modules/cli-width/index.js delete mode 100644 node_modules/cli-width/package.json delete mode 100644 node_modules/co/History.md delete mode 100644 node_modules/co/LICENSE delete mode 100644 node_modules/co/Readme.md delete mode 100644 node_modules/co/index.js delete mode 100644 node_modules/co/package.json delete mode 100644 node_modules/color-convert/conversions.js delete mode 100644 node_modules/color-convert/index.js delete mode 100644 node_modules/color-convert/package.json delete mode 100644 node_modules/color-convert/route.js delete mode 100644 node_modules/color-name/.eslintrc.json delete mode 100644 node_modules/color-name/.npmignore delete mode 100644 node_modules/color-name/LICENSE delete mode 100644 node_modules/color-name/README.md delete mode 100644 node_modules/color-name/index.js delete mode 100644 node_modules/color-name/package.json delete mode 100644 node_modules/color-name/test.js delete mode 100644 node_modules/concat-stream/LICENSE delete mode 100644 node_modules/concat-stream/index.js delete mode 100644 node_modules/concat-stream/package.json delete mode 100644 node_modules/concat-stream/readme.md delete mode 100644 node_modules/core-util-is/LICENSE delete mode 100644 node_modules/core-util-is/README.md delete mode 100644 node_modules/core-util-is/lib/util.js delete mode 100644 node_modules/core-util-is/package.json delete mode 100644 node_modules/cross-spawn/CHANGELOG.md delete mode 100644 node_modules/cross-spawn/LICENSE delete mode 100644 node_modules/cross-spawn/README.md delete mode 100644 node_modules/cross-spawn/index.js delete mode 100644 node_modules/cross-spawn/lib/enoent.js delete mode 100644 node_modules/cross-spawn/lib/parse.js delete mode 100644 node_modules/cross-spawn/lib/util/escapeArgument.js delete mode 100644 node_modules/cross-spawn/lib/util/escapeCommand.js delete mode 100644 node_modules/cross-spawn/lib/util/hasEmptyArgumentBug.js delete mode 100644 node_modules/cross-spawn/lib/util/readShebang.js delete mode 100644 node_modules/cross-spawn/lib/util/resolveCommand.js delete mode 100644 node_modules/cross-spawn/package.json delete mode 100644 node_modules/debug/CHANGELOG.md delete mode 100644 node_modules/debug/LICENSE delete mode 100644 node_modules/debug/README.md delete mode 100644 node_modules/debug/node.js delete mode 100644 node_modules/debug/package.json delete mode 100644 node_modules/debug/src/browser.js delete mode 100644 node_modules/debug/src/common.js delete mode 100644 node_modules/debug/src/index.js delete mode 100644 node_modules/debug/src/node.js delete mode 100644 node_modules/doctrine/CHANGELOG.md delete mode 100644 node_modules/doctrine/LICENSE delete mode 100644 node_modules/doctrine/LICENSE.closure-compiler delete mode 100644 node_modules/doctrine/LICENSE.esprima delete mode 100644 node_modules/doctrine/README.md delete mode 100644 node_modules/doctrine/lib/doctrine.js delete mode 100644 node_modules/doctrine/lib/typed.js delete mode 100644 node_modules/doctrine/lib/utility.js delete mode 100644 node_modules/doctrine/package.json delete mode 100644 node_modules/dotenv/CHANGELOG.md delete mode 100644 node_modules/dotenv/README-es.md delete mode 100644 node_modules/dotenv/README.md delete mode 100644 node_modules/dotenv/lib/main.d.ts delete mode 100644 node_modules/dotenv/lib/main.js delete mode 100644 node_modules/dotenv/package.json delete mode 100644 node_modules/escape-string-regexp/index.js delete mode 100644 node_modules/escape-string-regexp/license delete mode 100644 node_modules/escape-string-regexp/package.json delete mode 100644 node_modules/escape-string-regexp/readme.md delete mode 100644 node_modules/eslint-config-prettier/@typescript-eslint.js delete mode 100644 node_modules/eslint-config-prettier/CHANGELOG.md delete mode 100644 node_modules/eslint-config-prettier/LICENSE delete mode 100644 node_modules/eslint-config-prettier/README.md delete mode 100644 node_modules/eslint-config-prettier/babel.js delete mode 100755 node_modules/eslint-config-prettier/bin/cli.js delete mode 100644 node_modules/eslint-config-prettier/bin/validators.js delete mode 100644 node_modules/eslint-config-prettier/flowtype.js delete mode 100644 node_modules/eslint-config-prettier/index.js delete mode 100644 node_modules/eslint-config-prettier/package.json delete mode 100644 node_modules/eslint-config-prettier/react.js delete mode 100644 node_modules/eslint-config-prettier/standard.js delete mode 100644 node_modules/eslint-config-prettier/unicorn.js delete mode 100644 node_modules/eslint-config-prettier/vue.js delete mode 100644 node_modules/eslint-scope/CHANGELOG.md delete mode 100644 node_modules/eslint-scope/LICENSE delete mode 100644 node_modules/eslint-scope/README.md delete mode 100644 node_modules/eslint-scope/lib/definition.js delete mode 100644 node_modules/eslint-scope/lib/index.js delete mode 100644 node_modules/eslint-scope/lib/pattern-visitor.js delete mode 100644 node_modules/eslint-scope/lib/reference.js delete mode 100644 node_modules/eslint-scope/lib/referencer.js delete mode 100644 node_modules/eslint-scope/lib/scope-manager.js delete mode 100644 node_modules/eslint-scope/lib/scope.js delete mode 100644 node_modules/eslint-scope/lib/variable.js delete mode 100644 node_modules/eslint-scope/node_modules/estraverse/.jshintrc delete mode 100644 node_modules/eslint-scope/node_modules/estraverse/LICENSE.BSD delete mode 100644 node_modules/eslint-scope/node_modules/estraverse/README.md delete mode 100644 node_modules/eslint-scope/node_modules/estraverse/estraverse.js delete mode 100644 node_modules/eslint-scope/node_modules/estraverse/gulpfile.js delete mode 100644 node_modules/eslint-scope/node_modules/estraverse/package.json delete mode 100644 node_modules/eslint-scope/package.json delete mode 100644 node_modules/eslint-visitor-keys/CHANGELOG.md delete mode 100644 node_modules/eslint-visitor-keys/README.md delete mode 100644 node_modules/eslint-visitor-keys/lib/index.js delete mode 100644 node_modules/eslint-visitor-keys/lib/visitor-keys.json delete mode 100644 node_modules/eslint-visitor-keys/package.json delete mode 100644 node_modules/eslint/CHANGELOG.md delete mode 100644 node_modules/eslint/LICENSE delete mode 100644 node_modules/eslint/README.md delete mode 100755 node_modules/eslint/bin/eslint.js delete mode 100644 node_modules/eslint/conf/blank-script.json delete mode 100644 node_modules/eslint/conf/category-list.json delete mode 100644 node_modules/eslint/conf/config-schema.js delete mode 100644 node_modules/eslint/conf/default-cli-options.js delete mode 100644 node_modules/eslint/conf/environments.js delete mode 100644 node_modules/eslint/conf/eslint-all.js delete mode 100644 node_modules/eslint/conf/eslint-recommended.js delete mode 100644 node_modules/eslint/conf/replacements.json delete mode 100644 node_modules/eslint/lib/api.js delete mode 100644 node_modules/eslint/lib/ast-utils.js delete mode 100644 node_modules/eslint/lib/cli-engine.js delete mode 100644 node_modules/eslint/lib/cli.js delete mode 100644 node_modules/eslint/lib/code-path-analysis/code-path-analyzer.js delete mode 100644 node_modules/eslint/lib/code-path-analysis/code-path-segment.js delete mode 100644 node_modules/eslint/lib/code-path-analysis/code-path-state.js delete mode 100644 node_modules/eslint/lib/code-path-analysis/code-path.js delete mode 100644 node_modules/eslint/lib/code-path-analysis/debug-helpers.js delete mode 100644 node_modules/eslint/lib/code-path-analysis/fork-context.js delete mode 100644 node_modules/eslint/lib/code-path-analysis/id-generator.js delete mode 100644 node_modules/eslint/lib/config.js delete mode 100644 node_modules/eslint/lib/config/autoconfig.js delete mode 100644 node_modules/eslint/lib/config/config-cache.js delete mode 100644 node_modules/eslint/lib/config/config-file.js delete mode 100644 node_modules/eslint/lib/config/config-initializer.js delete mode 100644 node_modules/eslint/lib/config/config-ops.js delete mode 100644 node_modules/eslint/lib/config/config-rule.js delete mode 100644 node_modules/eslint/lib/config/config-validator.js delete mode 100644 node_modules/eslint/lib/config/environments.js delete mode 100644 node_modules/eslint/lib/config/plugins.js delete mode 100644 node_modules/eslint/lib/file-finder.js delete mode 100644 node_modules/eslint/lib/formatters/checkstyle.js delete mode 100644 node_modules/eslint/lib/formatters/codeframe.js delete mode 100644 node_modules/eslint/lib/formatters/compact.js delete mode 100644 node_modules/eslint/lib/formatters/html-template-message.html delete mode 100644 node_modules/eslint/lib/formatters/html-template-page.html delete mode 100644 node_modules/eslint/lib/formatters/html-template-result.html delete mode 100644 node_modules/eslint/lib/formatters/html.js delete mode 100644 node_modules/eslint/lib/formatters/jslint-xml.js delete mode 100644 node_modules/eslint/lib/formatters/json.js delete mode 100644 node_modules/eslint/lib/formatters/junit.js delete mode 100644 node_modules/eslint/lib/formatters/stylish.js delete mode 100644 node_modules/eslint/lib/formatters/table.js delete mode 100644 node_modules/eslint/lib/formatters/tap.js delete mode 100644 node_modules/eslint/lib/formatters/unix.js delete mode 100644 node_modules/eslint/lib/formatters/visualstudio.js delete mode 100644 node_modules/eslint/lib/ignored-paths.js delete mode 100644 node_modules/eslint/lib/linter.js delete mode 100644 node_modules/eslint/lib/load-rules.js delete mode 100644 node_modules/eslint/lib/logging.js delete mode 100644 node_modules/eslint/lib/options.js delete mode 100644 node_modules/eslint/lib/report-translator.js delete mode 100644 node_modules/eslint/lib/rules.js delete mode 100644 node_modules/eslint/lib/rules/.eslintrc.yml delete mode 100644 node_modules/eslint/lib/rules/accessor-pairs.js delete mode 100644 node_modules/eslint/lib/rules/array-bracket-newline.js delete mode 100644 node_modules/eslint/lib/rules/array-bracket-spacing.js delete mode 100644 node_modules/eslint/lib/rules/array-callback-return.js delete mode 100644 node_modules/eslint/lib/rules/array-element-newline.js delete mode 100644 node_modules/eslint/lib/rules/arrow-body-style.js delete mode 100644 node_modules/eslint/lib/rules/arrow-parens.js delete mode 100644 node_modules/eslint/lib/rules/arrow-spacing.js delete mode 100644 node_modules/eslint/lib/rules/block-scoped-var.js delete mode 100644 node_modules/eslint/lib/rules/block-spacing.js delete mode 100644 node_modules/eslint/lib/rules/brace-style.js delete mode 100644 node_modules/eslint/lib/rules/callback-return.js delete mode 100644 node_modules/eslint/lib/rules/camelcase.js delete mode 100644 node_modules/eslint/lib/rules/capitalized-comments.js delete mode 100644 node_modules/eslint/lib/rules/class-methods-use-this.js delete mode 100644 node_modules/eslint/lib/rules/comma-dangle.js delete mode 100644 node_modules/eslint/lib/rules/comma-spacing.js delete mode 100644 node_modules/eslint/lib/rules/comma-style.js delete mode 100644 node_modules/eslint/lib/rules/complexity.js delete mode 100644 node_modules/eslint/lib/rules/computed-property-spacing.js delete mode 100644 node_modules/eslint/lib/rules/consistent-return.js delete mode 100644 node_modules/eslint/lib/rules/consistent-this.js delete mode 100644 node_modules/eslint/lib/rules/constructor-super.js delete mode 100644 node_modules/eslint/lib/rules/curly.js delete mode 100644 node_modules/eslint/lib/rules/default-case.js delete mode 100644 node_modules/eslint/lib/rules/dot-location.js delete mode 100644 node_modules/eslint/lib/rules/dot-notation.js delete mode 100644 node_modules/eslint/lib/rules/eol-last.js delete mode 100644 node_modules/eslint/lib/rules/eqeqeq.js delete mode 100644 node_modules/eslint/lib/rules/for-direction.js delete mode 100644 node_modules/eslint/lib/rules/func-call-spacing.js delete mode 100644 node_modules/eslint/lib/rules/func-name-matching.js delete mode 100644 node_modules/eslint/lib/rules/func-names.js delete mode 100644 node_modules/eslint/lib/rules/func-style.js delete mode 100644 node_modules/eslint/lib/rules/function-paren-newline.js delete mode 100644 node_modules/eslint/lib/rules/generator-star-spacing.js delete mode 100644 node_modules/eslint/lib/rules/getter-return.js delete mode 100644 node_modules/eslint/lib/rules/global-require.js delete mode 100644 node_modules/eslint/lib/rules/guard-for-in.js delete mode 100644 node_modules/eslint/lib/rules/handle-callback-err.js delete mode 100644 node_modules/eslint/lib/rules/id-blacklist.js delete mode 100644 node_modules/eslint/lib/rules/id-length.js delete mode 100644 node_modules/eslint/lib/rules/id-match.js delete mode 100644 node_modules/eslint/lib/rules/implicit-arrow-linebreak.js delete mode 100644 node_modules/eslint/lib/rules/indent-legacy.js delete mode 100644 node_modules/eslint/lib/rules/indent.js delete mode 100644 node_modules/eslint/lib/rules/init-declarations.js delete mode 100644 node_modules/eslint/lib/rules/jsx-quotes.js delete mode 100644 node_modules/eslint/lib/rules/key-spacing.js delete mode 100644 node_modules/eslint/lib/rules/keyword-spacing.js delete mode 100644 node_modules/eslint/lib/rules/line-comment-position.js delete mode 100644 node_modules/eslint/lib/rules/linebreak-style.js delete mode 100644 node_modules/eslint/lib/rules/lines-around-comment.js delete mode 100644 node_modules/eslint/lib/rules/lines-around-directive.js delete mode 100644 node_modules/eslint/lib/rules/lines-between-class-members.js delete mode 100644 node_modules/eslint/lib/rules/max-depth.js delete mode 100644 node_modules/eslint/lib/rules/max-len.js delete mode 100644 node_modules/eslint/lib/rules/max-lines.js delete mode 100644 node_modules/eslint/lib/rules/max-nested-callbacks.js delete mode 100644 node_modules/eslint/lib/rules/max-params.js delete mode 100644 node_modules/eslint/lib/rules/max-statements-per-line.js delete mode 100644 node_modules/eslint/lib/rules/max-statements.js delete mode 100644 node_modules/eslint/lib/rules/multiline-comment-style.js delete mode 100644 node_modules/eslint/lib/rules/multiline-ternary.js delete mode 100644 node_modules/eslint/lib/rules/new-cap.js delete mode 100644 node_modules/eslint/lib/rules/new-parens.js delete mode 100644 node_modules/eslint/lib/rules/newline-after-var.js delete mode 100644 node_modules/eslint/lib/rules/newline-before-return.js delete mode 100644 node_modules/eslint/lib/rules/newline-per-chained-call.js delete mode 100644 node_modules/eslint/lib/rules/no-alert.js delete mode 100644 node_modules/eslint/lib/rules/no-array-constructor.js delete mode 100644 node_modules/eslint/lib/rules/no-await-in-loop.js delete mode 100644 node_modules/eslint/lib/rules/no-bitwise.js delete mode 100644 node_modules/eslint/lib/rules/no-buffer-constructor.js delete mode 100644 node_modules/eslint/lib/rules/no-caller.js delete mode 100644 node_modules/eslint/lib/rules/no-case-declarations.js delete mode 100644 node_modules/eslint/lib/rules/no-catch-shadow.js delete mode 100644 node_modules/eslint/lib/rules/no-class-assign.js delete mode 100644 node_modules/eslint/lib/rules/no-compare-neg-zero.js delete mode 100644 node_modules/eslint/lib/rules/no-cond-assign.js delete mode 100644 node_modules/eslint/lib/rules/no-confusing-arrow.js delete mode 100644 node_modules/eslint/lib/rules/no-console.js delete mode 100644 node_modules/eslint/lib/rules/no-const-assign.js delete mode 100644 node_modules/eslint/lib/rules/no-constant-condition.js delete mode 100644 node_modules/eslint/lib/rules/no-continue.js delete mode 100644 node_modules/eslint/lib/rules/no-control-regex.js delete mode 100644 node_modules/eslint/lib/rules/no-debugger.js delete mode 100644 node_modules/eslint/lib/rules/no-delete-var.js delete mode 100644 node_modules/eslint/lib/rules/no-div-regex.js delete mode 100644 node_modules/eslint/lib/rules/no-dupe-args.js delete mode 100644 node_modules/eslint/lib/rules/no-dupe-class-members.js delete mode 100644 node_modules/eslint/lib/rules/no-dupe-keys.js delete mode 100644 node_modules/eslint/lib/rules/no-duplicate-case.js delete mode 100644 node_modules/eslint/lib/rules/no-duplicate-imports.js delete mode 100644 node_modules/eslint/lib/rules/no-else-return.js delete mode 100644 node_modules/eslint/lib/rules/no-empty-character-class.js delete mode 100644 node_modules/eslint/lib/rules/no-empty-function.js delete mode 100644 node_modules/eslint/lib/rules/no-empty-pattern.js delete mode 100644 node_modules/eslint/lib/rules/no-empty.js delete mode 100644 node_modules/eslint/lib/rules/no-eq-null.js delete mode 100644 node_modules/eslint/lib/rules/no-eval.js delete mode 100644 node_modules/eslint/lib/rules/no-ex-assign.js delete mode 100644 node_modules/eslint/lib/rules/no-extend-native.js delete mode 100644 node_modules/eslint/lib/rules/no-extra-bind.js delete mode 100644 node_modules/eslint/lib/rules/no-extra-boolean-cast.js delete mode 100644 node_modules/eslint/lib/rules/no-extra-label.js delete mode 100644 node_modules/eslint/lib/rules/no-extra-parens.js delete mode 100644 node_modules/eslint/lib/rules/no-extra-semi.js delete mode 100644 node_modules/eslint/lib/rules/no-fallthrough.js delete mode 100644 node_modules/eslint/lib/rules/no-floating-decimal.js delete mode 100644 node_modules/eslint/lib/rules/no-func-assign.js delete mode 100644 node_modules/eslint/lib/rules/no-global-assign.js delete mode 100644 node_modules/eslint/lib/rules/no-implicit-coercion.js delete mode 100644 node_modules/eslint/lib/rules/no-implicit-globals.js delete mode 100644 node_modules/eslint/lib/rules/no-implied-eval.js delete mode 100644 node_modules/eslint/lib/rules/no-inline-comments.js delete mode 100644 node_modules/eslint/lib/rules/no-inner-declarations.js delete mode 100644 node_modules/eslint/lib/rules/no-invalid-regexp.js delete mode 100644 node_modules/eslint/lib/rules/no-invalid-this.js delete mode 100644 node_modules/eslint/lib/rules/no-irregular-whitespace.js delete mode 100644 node_modules/eslint/lib/rules/no-iterator.js delete mode 100644 node_modules/eslint/lib/rules/no-label-var.js delete mode 100644 node_modules/eslint/lib/rules/no-labels.js delete mode 100644 node_modules/eslint/lib/rules/no-lone-blocks.js delete mode 100644 node_modules/eslint/lib/rules/no-lonely-if.js delete mode 100644 node_modules/eslint/lib/rules/no-loop-func.js delete mode 100644 node_modules/eslint/lib/rules/no-magic-numbers.js delete mode 100644 node_modules/eslint/lib/rules/no-mixed-operators.js delete mode 100644 node_modules/eslint/lib/rules/no-mixed-requires.js delete mode 100644 node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js delete mode 100644 node_modules/eslint/lib/rules/no-multi-assign.js delete mode 100644 node_modules/eslint/lib/rules/no-multi-spaces.js delete mode 100644 node_modules/eslint/lib/rules/no-multi-str.js delete mode 100644 node_modules/eslint/lib/rules/no-multiple-empty-lines.js delete mode 100644 node_modules/eslint/lib/rules/no-native-reassign.js delete mode 100644 node_modules/eslint/lib/rules/no-negated-condition.js delete mode 100644 node_modules/eslint/lib/rules/no-negated-in-lhs.js delete mode 100644 node_modules/eslint/lib/rules/no-nested-ternary.js delete mode 100644 node_modules/eslint/lib/rules/no-new-func.js delete mode 100644 node_modules/eslint/lib/rules/no-new-object.js delete mode 100644 node_modules/eslint/lib/rules/no-new-require.js delete mode 100644 node_modules/eslint/lib/rules/no-new-symbol.js delete mode 100644 node_modules/eslint/lib/rules/no-new-wrappers.js delete mode 100644 node_modules/eslint/lib/rules/no-new.js delete mode 100644 node_modules/eslint/lib/rules/no-obj-calls.js delete mode 100644 node_modules/eslint/lib/rules/no-octal-escape.js delete mode 100644 node_modules/eslint/lib/rules/no-octal.js delete mode 100644 node_modules/eslint/lib/rules/no-param-reassign.js delete mode 100644 node_modules/eslint/lib/rules/no-path-concat.js delete mode 100644 node_modules/eslint/lib/rules/no-plusplus.js delete mode 100644 node_modules/eslint/lib/rules/no-process-env.js delete mode 100644 node_modules/eslint/lib/rules/no-process-exit.js delete mode 100644 node_modules/eslint/lib/rules/no-proto.js delete mode 100644 node_modules/eslint/lib/rules/no-prototype-builtins.js delete mode 100644 node_modules/eslint/lib/rules/no-redeclare.js delete mode 100644 node_modules/eslint/lib/rules/no-regex-spaces.js delete mode 100644 node_modules/eslint/lib/rules/no-restricted-globals.js delete mode 100644 node_modules/eslint/lib/rules/no-restricted-imports.js delete mode 100644 node_modules/eslint/lib/rules/no-restricted-modules.js delete mode 100644 node_modules/eslint/lib/rules/no-restricted-properties.js delete mode 100644 node_modules/eslint/lib/rules/no-restricted-syntax.js delete mode 100644 node_modules/eslint/lib/rules/no-return-assign.js delete mode 100644 node_modules/eslint/lib/rules/no-return-await.js delete mode 100644 node_modules/eslint/lib/rules/no-script-url.js delete mode 100644 node_modules/eslint/lib/rules/no-self-assign.js delete mode 100644 node_modules/eslint/lib/rules/no-self-compare.js delete mode 100644 node_modules/eslint/lib/rules/no-sequences.js delete mode 100644 node_modules/eslint/lib/rules/no-shadow-restricted-names.js delete mode 100644 node_modules/eslint/lib/rules/no-shadow.js delete mode 100644 node_modules/eslint/lib/rules/no-spaced-func.js delete mode 100644 node_modules/eslint/lib/rules/no-sparse-arrays.js delete mode 100644 node_modules/eslint/lib/rules/no-sync.js delete mode 100644 node_modules/eslint/lib/rules/no-tabs.js delete mode 100644 node_modules/eslint/lib/rules/no-template-curly-in-string.js delete mode 100644 node_modules/eslint/lib/rules/no-ternary.js delete mode 100644 node_modules/eslint/lib/rules/no-this-before-super.js delete mode 100644 node_modules/eslint/lib/rules/no-throw-literal.js delete mode 100644 node_modules/eslint/lib/rules/no-trailing-spaces.js delete mode 100644 node_modules/eslint/lib/rules/no-undef-init.js delete mode 100644 node_modules/eslint/lib/rules/no-undef.js delete mode 100644 node_modules/eslint/lib/rules/no-undefined.js delete mode 100644 node_modules/eslint/lib/rules/no-underscore-dangle.js delete mode 100644 node_modules/eslint/lib/rules/no-unexpected-multiline.js delete mode 100644 node_modules/eslint/lib/rules/no-unmodified-loop-condition.js delete mode 100644 node_modules/eslint/lib/rules/no-unneeded-ternary.js delete mode 100644 node_modules/eslint/lib/rules/no-unreachable.js delete mode 100644 node_modules/eslint/lib/rules/no-unsafe-finally.js delete mode 100644 node_modules/eslint/lib/rules/no-unsafe-negation.js delete mode 100644 node_modules/eslint/lib/rules/no-unused-expressions.js delete mode 100644 node_modules/eslint/lib/rules/no-unused-labels.js delete mode 100644 node_modules/eslint/lib/rules/no-unused-vars.js delete mode 100644 node_modules/eslint/lib/rules/no-use-before-define.js delete mode 100644 node_modules/eslint/lib/rules/no-useless-call.js delete mode 100644 node_modules/eslint/lib/rules/no-useless-computed-key.js delete mode 100644 node_modules/eslint/lib/rules/no-useless-concat.js delete mode 100644 node_modules/eslint/lib/rules/no-useless-constructor.js delete mode 100644 node_modules/eslint/lib/rules/no-useless-escape.js delete mode 100644 node_modules/eslint/lib/rules/no-useless-rename.js delete mode 100644 node_modules/eslint/lib/rules/no-useless-return.js delete mode 100644 node_modules/eslint/lib/rules/no-var.js delete mode 100644 node_modules/eslint/lib/rules/no-void.js delete mode 100644 node_modules/eslint/lib/rules/no-warning-comments.js delete mode 100644 node_modules/eslint/lib/rules/no-whitespace-before-property.js delete mode 100644 node_modules/eslint/lib/rules/no-with.js delete mode 100644 node_modules/eslint/lib/rules/nonblock-statement-body-position.js delete mode 100644 node_modules/eslint/lib/rules/object-curly-newline.js delete mode 100644 node_modules/eslint/lib/rules/object-curly-spacing.js delete mode 100644 node_modules/eslint/lib/rules/object-property-newline.js delete mode 100644 node_modules/eslint/lib/rules/object-shorthand.js delete mode 100644 node_modules/eslint/lib/rules/one-var-declaration-per-line.js delete mode 100644 node_modules/eslint/lib/rules/one-var.js delete mode 100644 node_modules/eslint/lib/rules/operator-assignment.js delete mode 100644 node_modules/eslint/lib/rules/operator-linebreak.js delete mode 100644 node_modules/eslint/lib/rules/padded-blocks.js delete mode 100644 node_modules/eslint/lib/rules/padding-line-between-statements.js delete mode 100644 node_modules/eslint/lib/rules/prefer-arrow-callback.js delete mode 100644 node_modules/eslint/lib/rules/prefer-const.js delete mode 100644 node_modules/eslint/lib/rules/prefer-destructuring.js delete mode 100644 node_modules/eslint/lib/rules/prefer-numeric-literals.js delete mode 100644 node_modules/eslint/lib/rules/prefer-promise-reject-errors.js delete mode 100644 node_modules/eslint/lib/rules/prefer-reflect.js delete mode 100644 node_modules/eslint/lib/rules/prefer-rest-params.js delete mode 100644 node_modules/eslint/lib/rules/prefer-spread.js delete mode 100644 node_modules/eslint/lib/rules/prefer-template.js delete mode 100644 node_modules/eslint/lib/rules/quote-props.js delete mode 100644 node_modules/eslint/lib/rules/quotes.js delete mode 100644 node_modules/eslint/lib/rules/radix.js delete mode 100644 node_modules/eslint/lib/rules/require-await.js delete mode 100644 node_modules/eslint/lib/rules/require-jsdoc.js delete mode 100644 node_modules/eslint/lib/rules/require-yield.js delete mode 100644 node_modules/eslint/lib/rules/rest-spread-spacing.js delete mode 100644 node_modules/eslint/lib/rules/semi-spacing.js delete mode 100644 node_modules/eslint/lib/rules/semi-style.js delete mode 100644 node_modules/eslint/lib/rules/semi.js delete mode 100644 node_modules/eslint/lib/rules/sort-imports.js delete mode 100644 node_modules/eslint/lib/rules/sort-keys.js delete mode 100644 node_modules/eslint/lib/rules/sort-vars.js delete mode 100644 node_modules/eslint/lib/rules/space-before-blocks.js delete mode 100644 node_modules/eslint/lib/rules/space-before-function-paren.js delete mode 100644 node_modules/eslint/lib/rules/space-in-parens.js delete mode 100644 node_modules/eslint/lib/rules/space-infix-ops.js delete mode 100644 node_modules/eslint/lib/rules/space-unary-ops.js delete mode 100644 node_modules/eslint/lib/rules/spaced-comment.js delete mode 100644 node_modules/eslint/lib/rules/strict.js delete mode 100644 node_modules/eslint/lib/rules/switch-colon-spacing.js delete mode 100644 node_modules/eslint/lib/rules/symbol-description.js delete mode 100644 node_modules/eslint/lib/rules/template-curly-spacing.js delete mode 100644 node_modules/eslint/lib/rules/template-tag-spacing.js delete mode 100644 node_modules/eslint/lib/rules/unicode-bom.js delete mode 100644 node_modules/eslint/lib/rules/use-isnan.js delete mode 100644 node_modules/eslint/lib/rules/valid-jsdoc.js delete mode 100644 node_modules/eslint/lib/rules/valid-typeof.js delete mode 100644 node_modules/eslint/lib/rules/vars-on-top.js delete mode 100644 node_modules/eslint/lib/rules/wrap-iife.js delete mode 100644 node_modules/eslint/lib/rules/wrap-regex.js delete mode 100644 node_modules/eslint/lib/rules/yield-star-spacing.js delete mode 100644 node_modules/eslint/lib/rules/yoda.js delete mode 100644 node_modules/eslint/lib/testers/rule-tester.js delete mode 100644 node_modules/eslint/lib/timing.js delete mode 100644 node_modules/eslint/lib/token-store/backward-token-comment-cursor.js delete mode 100644 node_modules/eslint/lib/token-store/backward-token-cursor.js delete mode 100644 node_modules/eslint/lib/token-store/cursor.js delete mode 100644 node_modules/eslint/lib/token-store/cursors.js delete mode 100644 node_modules/eslint/lib/token-store/decorative-cursor.js delete mode 100644 node_modules/eslint/lib/token-store/filter-cursor.js delete mode 100644 node_modules/eslint/lib/token-store/forward-token-comment-cursor.js delete mode 100644 node_modules/eslint/lib/token-store/forward-token-cursor.js delete mode 100644 node_modules/eslint/lib/token-store/index.js delete mode 100644 node_modules/eslint/lib/token-store/limit-cursor.js delete mode 100644 node_modules/eslint/lib/token-store/padded-token-cursor.js delete mode 100644 node_modules/eslint/lib/token-store/skip-cursor.js delete mode 100644 node_modules/eslint/lib/token-store/utils.js delete mode 100644 node_modules/eslint/lib/util/ajv.js delete mode 100644 node_modules/eslint/lib/util/apply-disable-directives.js delete mode 100644 node_modules/eslint/lib/util/fix-tracker.js delete mode 100644 node_modules/eslint/lib/util/glob-util.js delete mode 100644 node_modules/eslint/lib/util/glob.js delete mode 100644 node_modules/eslint/lib/util/hash.js delete mode 100644 node_modules/eslint/lib/util/interpolate.js delete mode 100644 node_modules/eslint/lib/util/keywords.js delete mode 100644 node_modules/eslint/lib/util/module-resolver.js delete mode 100644 node_modules/eslint/lib/util/naming.js delete mode 100644 node_modules/eslint/lib/util/node-event-generator.js delete mode 100644 node_modules/eslint/lib/util/npm-util.js delete mode 100644 node_modules/eslint/lib/util/path-util.js delete mode 100644 node_modules/eslint/lib/util/patterns/letters.js delete mode 100644 node_modules/eslint/lib/util/rule-fixer.js delete mode 100644 node_modules/eslint/lib/util/safe-emitter.js delete mode 100644 node_modules/eslint/lib/util/source-code-fixer.js delete mode 100644 node_modules/eslint/lib/util/source-code-util.js delete mode 100644 node_modules/eslint/lib/util/source-code.js delete mode 100644 node_modules/eslint/lib/util/traverser.js delete mode 100644 node_modules/eslint/lib/util/xml-escape.js delete mode 100644 node_modules/eslint/messages/extend-config-missing.txt delete mode 100644 node_modules/eslint/messages/no-config-found.txt delete mode 100644 node_modules/eslint/messages/plugin-missing.txt delete mode 100644 node_modules/eslint/messages/whitespace-found.txt delete mode 100644 node_modules/eslint/node_modules/ansi-regex/index.js delete mode 100644 node_modules/eslint/node_modules/ansi-regex/license delete mode 100644 node_modules/eslint/node_modules/ansi-regex/package.json delete mode 100644 node_modules/eslint/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/eslint/node_modules/ansi-styles/index.js delete mode 100644 node_modules/eslint/node_modules/ansi-styles/license delete mode 100644 node_modules/eslint/node_modules/ansi-styles/package.json delete mode 100644 node_modules/eslint/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/eslint/node_modules/chalk/index.js delete mode 100644 node_modules/eslint/node_modules/chalk/index.js.flow delete mode 100644 node_modules/eslint/node_modules/chalk/license delete mode 100644 node_modules/eslint/node_modules/chalk/package.json delete mode 100644 node_modules/eslint/node_modules/chalk/readme.md delete mode 100644 node_modules/eslint/node_modules/chalk/templates.js delete mode 100644 node_modules/eslint/node_modules/chalk/types/index.d.ts delete mode 100644 node_modules/eslint/node_modules/globals/globals.json delete mode 100644 node_modules/eslint/node_modules/globals/index.js delete mode 100644 node_modules/eslint/node_modules/globals/license delete mode 100644 node_modules/eslint/node_modules/globals/package.json delete mode 100644 node_modules/eslint/node_modules/globals/readme.md delete mode 100644 node_modules/eslint/node_modules/strip-ansi/index.js delete mode 100644 node_modules/eslint/node_modules/strip-ansi/license delete mode 100644 node_modules/eslint/node_modules/strip-ansi/package.json delete mode 100644 node_modules/eslint/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/eslint/node_modules/supports-color/browser.js delete mode 100644 node_modules/eslint/node_modules/supports-color/index.js delete mode 100644 node_modules/eslint/node_modules/supports-color/license delete mode 100644 node_modules/eslint/node_modules/supports-color/package.json delete mode 100644 node_modules/eslint/node_modules/supports-color/readme.md delete mode 100644 node_modules/eslint/package.json delete mode 100644 node_modules/espree/CHANGELOG.md delete mode 100644 node_modules/espree/LICENSE delete mode 100644 node_modules/espree/README.md delete mode 100644 node_modules/espree/espree.js delete mode 100644 node_modules/espree/lib/ast-node-types.js delete mode 100644 node_modules/espree/lib/comment-attachment.js delete mode 100644 node_modules/espree/lib/features.js delete mode 100644 node_modules/espree/lib/token-translator.js delete mode 100644 node_modules/espree/lib/visitor-keys.js delete mode 100644 node_modules/espree/package.json delete mode 100644 node_modules/esprima/ChangeLog delete mode 100644 node_modules/esprima/LICENSE.BSD delete mode 100644 node_modules/esprima/README.md delete mode 100755 node_modules/esprima/bin/esparse.js delete mode 100755 node_modules/esprima/bin/esvalidate.js delete mode 100644 node_modules/esprima/dist/esprima.js delete mode 100644 node_modules/esprima/package.json delete mode 100755 node_modules/esrecurse/package.json delete mode 100644 node_modules/external-editor/LICENSE delete mode 100644 node_modules/external-editor/README.md delete mode 100644 node_modules/external-editor/example_async.js delete mode 100644 node_modules/external-editor/example_sync.js delete mode 100644 node_modules/external-editor/main/errors/CreateFileError.js delete mode 100644 node_modules/external-editor/main/errors/LaunchEditorError.js delete mode 100644 node_modules/external-editor/main/errors/ReadFileError.js delete mode 100644 node_modules/external-editor/main/errors/RemoveFileError.js delete mode 100644 node_modules/external-editor/main/index.js delete mode 100644 node_modules/external-editor/package.json delete mode 100644 node_modules/fast-deep-equal/README.md delete mode 100644 node_modules/fast-deep-equal/index.js delete mode 100644 node_modules/fast-deep-equal/package.json delete mode 100644 node_modules/figures/index.js delete mode 100644 node_modules/figures/license delete mode 100644 node_modules/figures/package.json delete mode 100644 node_modules/figures/readme.md delete mode 100644 node_modules/file-entry-cache/LICENSE delete mode 100644 node_modules/file-entry-cache/README.md delete mode 100644 node_modules/file-entry-cache/cache.js delete mode 100644 node_modules/file-entry-cache/changelog.md delete mode 100644 node_modules/file-entry-cache/package.json delete mode 100644 node_modules/flat-cache/LICENSE delete mode 100644 node_modules/flat-cache/README.md delete mode 100644 node_modules/flat-cache/cache.js delete mode 100644 node_modules/flat-cache/changelog.md delete mode 100644 node_modules/flat-cache/del.js delete mode 100644 node_modules/flat-cache/package.json delete mode 100644 node_modules/flat-cache/utils.js delete mode 100644 node_modules/fs.realpath/LICENSE delete mode 100644 node_modules/fs.realpath/README.md delete mode 100644 node_modules/fs.realpath/index.js delete mode 100644 node_modules/fs.realpath/old.js delete mode 100644 node_modules/fs.realpath/package.json delete mode 100644 node_modules/functional-red-black-tree/.npmignore delete mode 100644 node_modules/functional-red-black-tree/LICENSE delete mode 100644 node_modules/functional-red-black-tree/README.md delete mode 100644 node_modules/functional-red-black-tree/bench/test.js delete mode 100644 node_modules/functional-red-black-tree/package.json delete mode 100644 node_modules/functional-red-black-tree/rbtree.js delete mode 100644 node_modules/functional-red-black-tree/test/test.js delete mode 100644 node_modules/get-stdin/index.js delete mode 100644 node_modules/get-stdin/license delete mode 100644 node_modules/get-stdin/package.json delete mode 100644 node_modules/get-stdin/readme.md delete mode 100644 node_modules/glob/LICENSE delete mode 100644 node_modules/glob/README.md delete mode 100644 node_modules/glob/common.js delete mode 100644 node_modules/glob/glob.js delete mode 100644 node_modules/glob/package.json delete mode 100644 node_modules/glob/sync.js delete mode 100644 node_modules/graceful-fs/LICENSE delete mode 100644 node_modules/graceful-fs/README.md delete mode 100644 node_modules/graceful-fs/clone.js delete mode 100644 node_modules/graceful-fs/graceful-fs.js delete mode 100644 node_modules/graceful-fs/legacy-streams.js delete mode 100644 node_modules/graceful-fs/package.json delete mode 100644 node_modules/graceful-fs/polyfills.js delete mode 100644 node_modules/has-ansi/index.js delete mode 100644 node_modules/has-ansi/license delete mode 100644 node_modules/has-ansi/package.json delete mode 100644 node_modules/has-ansi/readme.md delete mode 100644 node_modules/has-flag/index.js delete mode 100644 node_modules/has-flag/package.json delete mode 100644 node_modules/has-flag/readme.md delete mode 100755 node_modules/husky/bin.js delete mode 100644 node_modules/iconv-lite/Changelog.md delete mode 100644 node_modules/iconv-lite/LICENSE delete mode 100644 node_modules/iconv-lite/README.md delete mode 100644 node_modules/iconv-lite/encodings/dbcs-codec.js delete mode 100644 node_modules/iconv-lite/encodings/dbcs-data.js delete mode 100644 node_modules/iconv-lite/encodings/index.js delete mode 100644 node_modules/iconv-lite/encodings/internal.js delete mode 100644 node_modules/iconv-lite/encodings/sbcs-codec.js delete mode 100644 node_modules/iconv-lite/encodings/sbcs-data-generated.js delete mode 100644 node_modules/iconv-lite/encodings/sbcs-data.js delete mode 100644 node_modules/iconv-lite/encodings/tables/big5-added.json delete mode 100644 node_modules/iconv-lite/encodings/tables/cp936.json delete mode 100644 node_modules/iconv-lite/encodings/tables/cp949.json delete mode 100644 node_modules/iconv-lite/encodings/tables/cp950.json delete mode 100644 node_modules/iconv-lite/encodings/tables/eucjp.json delete mode 100644 node_modules/iconv-lite/encodings/tables/gb18030-ranges.json delete mode 100644 node_modules/iconv-lite/encodings/tables/gbk-added.json delete mode 100644 node_modules/iconv-lite/encodings/tables/shiftjis.json delete mode 100644 node_modules/iconv-lite/encodings/utf16.js delete mode 100644 node_modules/iconv-lite/encodings/utf7.js delete mode 100644 node_modules/iconv-lite/lib/bom-handling.js delete mode 100644 node_modules/iconv-lite/lib/extend-node.js delete mode 100644 node_modules/iconv-lite/lib/index.d.ts delete mode 100644 node_modules/iconv-lite/lib/index.js delete mode 100644 node_modules/iconv-lite/lib/streams.js delete mode 100644 node_modules/iconv-lite/package.json delete mode 100755 node_modules/ignore/README.md delete mode 100644 node_modules/ignore/ignore.js delete mode 100644 node_modules/ignore/index.d.ts delete mode 100644 node_modules/ignore/package.json delete mode 100644 node_modules/inflight/LICENSE delete mode 100644 node_modules/inflight/README.md delete mode 100644 node_modules/inflight/inflight.js delete mode 100644 node_modules/inflight/package.json delete mode 100644 node_modules/inherits/LICENSE delete mode 100644 node_modules/inherits/README.md delete mode 100644 node_modules/inherits/inherits.js delete mode 100644 node_modules/inherits/inherits_browser.js delete mode 100644 node_modules/inherits/package.json delete mode 100644 node_modules/inquirer/README.md delete mode 100644 node_modules/inquirer/lib/inquirer.js delete mode 100644 node_modules/inquirer/lib/objects/choice.js delete mode 100644 node_modules/inquirer/lib/objects/choices.js delete mode 100644 node_modules/inquirer/lib/objects/separator.js delete mode 100644 node_modules/inquirer/lib/prompts/base.js delete mode 100644 node_modules/inquirer/lib/prompts/checkbox.js delete mode 100644 node_modules/inquirer/lib/prompts/confirm.js delete mode 100644 node_modules/inquirer/lib/prompts/editor.js delete mode 100644 node_modules/inquirer/lib/prompts/expand.js delete mode 100644 node_modules/inquirer/lib/prompts/input.js delete mode 100644 node_modules/inquirer/lib/prompts/list.js delete mode 100644 node_modules/inquirer/lib/prompts/password.js delete mode 100644 node_modules/inquirer/lib/prompts/rawlist.js delete mode 100644 node_modules/inquirer/lib/ui/baseUI.js delete mode 100644 node_modules/inquirer/lib/ui/bottom-bar.js delete mode 100644 node_modules/inquirer/lib/ui/prompt.js delete mode 100644 node_modules/inquirer/lib/utils/events.js delete mode 100644 node_modules/inquirer/lib/utils/paginator.js delete mode 100644 node_modules/inquirer/lib/utils/readline.js delete mode 100644 node_modules/inquirer/lib/utils/screen-manager.js delete mode 100644 node_modules/inquirer/lib/utils/utils.js delete mode 100644 node_modules/inquirer/node_modules/ansi-regex/index.js delete mode 100644 node_modules/inquirer/node_modules/ansi-regex/license delete mode 100644 node_modules/inquirer/node_modules/ansi-regex/package.json delete mode 100644 node_modules/inquirer/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/inquirer/node_modules/ansi-styles/index.js delete mode 100644 node_modules/inquirer/node_modules/ansi-styles/license delete mode 100644 node_modules/inquirer/node_modules/ansi-styles/package.json delete mode 100644 node_modules/inquirer/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/inquirer/node_modules/chalk/index.js delete mode 100644 node_modules/inquirer/node_modules/chalk/index.js.flow delete mode 100644 node_modules/inquirer/node_modules/chalk/license delete mode 100644 node_modules/inquirer/node_modules/chalk/package.json delete mode 100644 node_modules/inquirer/node_modules/chalk/readme.md delete mode 100644 node_modules/inquirer/node_modules/chalk/templates.js delete mode 100644 node_modules/inquirer/node_modules/chalk/types/index.d.ts delete mode 100644 node_modules/inquirer/node_modules/strip-ansi/index.js delete mode 100644 node_modules/inquirer/node_modules/strip-ansi/license delete mode 100644 node_modules/inquirer/node_modules/strip-ansi/package.json delete mode 100644 node_modules/inquirer/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/inquirer/node_modules/supports-color/browser.js delete mode 100644 node_modules/inquirer/node_modules/supports-color/index.js delete mode 100644 node_modules/inquirer/node_modules/supports-color/license delete mode 100644 node_modules/inquirer/node_modules/supports-color/package.json delete mode 100644 node_modules/inquirer/node_modules/supports-color/readme.md delete mode 100644 node_modules/inquirer/package.json delete mode 100644 node_modules/is-fullwidth-code-point/index.js delete mode 100644 node_modules/is-fullwidth-code-point/license delete mode 100644 node_modules/is-fullwidth-code-point/package.json delete mode 100644 node_modules/is-fullwidth-code-point/readme.md delete mode 100644 node_modules/is-resolvable/LICENSE delete mode 100644 node_modules/is-resolvable/README.md delete mode 100644 node_modules/is-resolvable/index.js delete mode 100644 node_modules/is-resolvable/package.json delete mode 100644 node_modules/js-tokens/CHANGELOG.md delete mode 100644 node_modules/js-tokens/LICENSE delete mode 100644 node_modules/js-tokens/README.md delete mode 100644 node_modules/js-tokens/index.js delete mode 100644 node_modules/js-tokens/package.json delete mode 100644 node_modules/js-yaml/README.md delete mode 100755 node_modules/js-yaml/bin/js-yaml.js delete mode 100644 node_modules/js-yaml/dist/js-yaml.js delete mode 100644 node_modules/js-yaml/dist/js-yaml.min.js delete mode 100644 node_modules/js-yaml/index.js delete mode 100644 node_modules/js-yaml/lib/js-yaml.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/common.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/dumper.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/exception.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/loader.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/mark.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/schema.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/schema/core.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/schema/default_full.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/schema/default_safe.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/schema/failsafe.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/schema/json.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/binary.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/bool.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/float.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/int.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/js/function.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/js/regexp.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/js/undefined.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/map.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/merge.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/null.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/omap.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/pairs.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/seq.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/set.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/str.js delete mode 100644 node_modules/js-yaml/lib/js-yaml/type/timestamp.js delete mode 100644 node_modules/js-yaml/package.json delete mode 100644 node_modules/json-schema-traverse/.npmignore delete mode 100644 node_modules/json-schema-traverse/README.md delete mode 100644 node_modules/json-schema-traverse/index.js delete mode 100644 node_modules/json-schema-traverse/package.json delete mode 100644 node_modules/json-schema-traverse/spec/index.spec.js delete mode 100644 node_modules/levn/README.md delete mode 100644 node_modules/levn/lib/cast.js delete mode 100644 node_modules/levn/lib/coerce.js delete mode 100644 node_modules/levn/lib/index.js delete mode 100644 node_modules/levn/lib/parse-string.js delete mode 100644 node_modules/levn/lib/parse.js delete mode 100644 node_modules/levn/package.json delete mode 100644 node_modules/lint/.buildpath delete mode 100644 node_modules/lint/.externalToolBuilders/Vows.launch delete mode 100644 node_modules/lint/.npmignore delete mode 100644 node_modules/lint/.project delete mode 100644 node_modules/lint/.settings/.jsdtscope delete mode 100644 node_modules/lint/.settings/org.eclipse.core.resources.prefs delete mode 100644 node_modules/lint/.settings/org.eclipse.core.runtime.prefs delete mode 100644 node_modules/lint/.settings/org.eclipse.wst.jsdt.ui.superType.container delete mode 100644 node_modules/lint/.settings/org.eclipse.wst.jsdt.ui.superType.name delete mode 100644 node_modules/lint/LICENSE delete mode 100644 node_modules/lint/Makefile delete mode 100644 node_modules/lint/README.md delete mode 100755 node_modules/lint/bin/node-lint delete mode 100644 node_modules/lint/doc/node-lint.md delete mode 100644 node_modules/lint/etc/config.json delete mode 100644 node_modules/lint/examples/emacs/flymake-nodelint.el delete mode 100644 node_modules/lint/index.js delete mode 100644 node_modules/lint/lib/assert/extension.js delete mode 100644 node_modules/lint/lib/lint/formatter.js delete mode 100644 node_modules/lint/lib/lint/formatter/callback.js delete mode 100644 node_modules/lint/lib/lint/formatter/cli.js delete mode 100644 node_modules/lint/lib/lint/formatter/json.js delete mode 100644 node_modules/lint/lib/lint/formatter/textmate.js delete mode 100644 node_modules/lint/lib/lint/formatter/vim.js delete mode 100644 node_modules/lint/lib/lint/formatter/xml.js delete mode 100644 node_modules/lint/lib/lint/index.js delete mode 100644 node_modules/lint/lib/lint/jslint.js delete mode 100644 node_modules/lint/lib/lint/launcher.js delete mode 100644 node_modules/lint/lib/lint/parser.js delete mode 100644 node_modules/lint/lib/lint/vows.js delete mode 100644 node_modules/lint/man1/node-lint.1 delete mode 100644 node_modules/lint/package.json delete mode 100644 node_modules/lint/resource/fixture/invalid-test.js delete mode 100644 node_modules/lint/resource/fixture/valid-test.js delete mode 100644 node_modules/lint/test/assert/extension-test.js delete mode 100644 node_modules/lint/test/lint/formatter-test.js delete mode 100644 node_modules/lint/test/lint/formatter/callback-test.js delete mode 100644 node_modules/lint/test/lint/formatter/cli-test.js delete mode 100644 node_modules/lint/test/lint/formatter/json-test.js delete mode 100644 node_modules/lint/test/lint/formatter/textmate-test.js delete mode 100644 node_modules/lint/test/lint/formatter/vim-test.js delete mode 100644 node_modules/lint/test/lint/formatter/xml-test.js delete mode 100644 node_modules/lint/test/lint/launcher-test.js delete mode 100644 node_modules/lint/test/lint/parser-test.js delete mode 100644 node_modules/lodash/LICENSE delete mode 100644 node_modules/lodash/README.md delete mode 100644 node_modules/lodash/_DataView.js delete mode 100644 node_modules/lodash/_Hash.js delete mode 100644 node_modules/lodash/_LazyWrapper.js delete mode 100644 node_modules/lodash/_ListCache.js delete mode 100644 node_modules/lodash/_LodashWrapper.js delete mode 100644 node_modules/lodash/_Map.js delete mode 100644 node_modules/lodash/_MapCache.js delete mode 100644 node_modules/lodash/_Promise.js delete mode 100644 node_modules/lodash/_Set.js delete mode 100644 node_modules/lodash/_SetCache.js delete mode 100644 node_modules/lodash/_Stack.js delete mode 100644 node_modules/lodash/_Symbol.js delete mode 100644 node_modules/lodash/_Uint8Array.js delete mode 100644 node_modules/lodash/_WeakMap.js delete mode 100644 node_modules/lodash/_apply.js delete mode 100644 node_modules/lodash/_arrayAggregator.js delete mode 100644 node_modules/lodash/_arrayEach.js delete mode 100644 node_modules/lodash/_arrayEachRight.js delete mode 100644 node_modules/lodash/_arrayEvery.js delete mode 100644 node_modules/lodash/_arrayFilter.js delete mode 100644 node_modules/lodash/_arrayIncludes.js delete mode 100644 node_modules/lodash/_arrayIncludesWith.js delete mode 100644 node_modules/lodash/_arrayLikeKeys.js delete mode 100644 node_modules/lodash/_arrayMap.js delete mode 100644 node_modules/lodash/_arrayPush.js delete mode 100644 node_modules/lodash/_arrayReduce.js delete mode 100644 node_modules/lodash/_arrayReduceRight.js delete mode 100644 node_modules/lodash/_arraySample.js delete mode 100644 node_modules/lodash/_arraySampleSize.js delete mode 100644 node_modules/lodash/_arrayShuffle.js delete mode 100644 node_modules/lodash/_arraySome.js delete mode 100644 node_modules/lodash/_asciiSize.js delete mode 100644 node_modules/lodash/_asciiToArray.js delete mode 100644 node_modules/lodash/_asciiWords.js delete mode 100644 node_modules/lodash/_assignMergeValue.js delete mode 100644 node_modules/lodash/_assignValue.js delete mode 100644 node_modules/lodash/_assocIndexOf.js delete mode 100644 node_modules/lodash/_baseAggregator.js delete mode 100644 node_modules/lodash/_baseAssign.js delete mode 100644 node_modules/lodash/_baseAssignIn.js delete mode 100644 node_modules/lodash/_baseAssignValue.js delete mode 100644 node_modules/lodash/_baseAt.js delete mode 100644 node_modules/lodash/_baseClamp.js delete mode 100644 node_modules/lodash/_baseClone.js delete mode 100644 node_modules/lodash/_baseConforms.js delete mode 100644 node_modules/lodash/_baseConformsTo.js delete mode 100644 node_modules/lodash/_baseCreate.js delete mode 100644 node_modules/lodash/_baseDelay.js delete mode 100644 node_modules/lodash/_baseDifference.js delete mode 100644 node_modules/lodash/_baseEach.js delete mode 100644 node_modules/lodash/_baseEachRight.js delete mode 100644 node_modules/lodash/_baseEvery.js delete mode 100644 node_modules/lodash/_baseExtremum.js delete mode 100644 node_modules/lodash/_baseFill.js delete mode 100644 node_modules/lodash/_baseFilter.js delete mode 100644 node_modules/lodash/_baseFindIndex.js delete mode 100644 node_modules/lodash/_baseFindKey.js delete mode 100644 node_modules/lodash/_baseFlatten.js delete mode 100644 node_modules/lodash/_baseFor.js delete mode 100644 node_modules/lodash/_baseForOwn.js delete mode 100644 node_modules/lodash/_baseForOwnRight.js delete mode 100644 node_modules/lodash/_baseForRight.js delete mode 100644 node_modules/lodash/_baseFunctions.js delete mode 100644 node_modules/lodash/_baseGet.js delete mode 100644 node_modules/lodash/_baseGetAllKeys.js delete mode 100644 node_modules/lodash/_baseGetTag.js delete mode 100644 node_modules/lodash/_baseGt.js delete mode 100644 node_modules/lodash/_baseHas.js delete mode 100644 node_modules/lodash/_baseHasIn.js delete mode 100644 node_modules/lodash/_baseInRange.js delete mode 100644 node_modules/lodash/_baseIndexOf.js delete mode 100644 node_modules/lodash/_baseIndexOfWith.js delete mode 100644 node_modules/lodash/_baseIntersection.js delete mode 100644 node_modules/lodash/_baseInverter.js delete mode 100644 node_modules/lodash/_baseInvoke.js delete mode 100644 node_modules/lodash/_baseIsArguments.js delete mode 100644 node_modules/lodash/_baseIsArrayBuffer.js delete mode 100644 node_modules/lodash/_baseIsDate.js delete mode 100644 node_modules/lodash/_baseIsEqual.js delete mode 100644 node_modules/lodash/_baseIsEqualDeep.js delete mode 100644 node_modules/lodash/_baseIsMap.js delete mode 100644 node_modules/lodash/_baseIsMatch.js delete mode 100644 node_modules/lodash/_baseIsNaN.js delete mode 100644 node_modules/lodash/_baseIsNative.js delete mode 100644 node_modules/lodash/_baseIsRegExp.js delete mode 100644 node_modules/lodash/_baseIsSet.js delete mode 100644 node_modules/lodash/_baseIsTypedArray.js delete mode 100644 node_modules/lodash/_baseIteratee.js delete mode 100644 node_modules/lodash/_baseKeys.js delete mode 100644 node_modules/lodash/_baseKeysIn.js delete mode 100644 node_modules/lodash/_baseLodash.js delete mode 100644 node_modules/lodash/_baseLt.js delete mode 100644 node_modules/lodash/_baseMap.js delete mode 100644 node_modules/lodash/_baseMatches.js delete mode 100644 node_modules/lodash/_baseMatchesProperty.js delete mode 100644 node_modules/lodash/_baseMean.js delete mode 100644 node_modules/lodash/_baseMerge.js delete mode 100644 node_modules/lodash/_baseMergeDeep.js delete mode 100644 node_modules/lodash/_baseNth.js delete mode 100644 node_modules/lodash/_baseOrderBy.js delete mode 100644 node_modules/lodash/_basePick.js delete mode 100644 node_modules/lodash/_basePickBy.js delete mode 100644 node_modules/lodash/_baseProperty.js delete mode 100644 node_modules/lodash/_basePropertyDeep.js delete mode 100644 node_modules/lodash/_basePropertyOf.js delete mode 100644 node_modules/lodash/_basePullAll.js delete mode 100644 node_modules/lodash/_basePullAt.js delete mode 100644 node_modules/lodash/_baseRandom.js delete mode 100644 node_modules/lodash/_baseRange.js delete mode 100644 node_modules/lodash/_baseReduce.js delete mode 100644 node_modules/lodash/_baseRepeat.js delete mode 100644 node_modules/lodash/_baseRest.js delete mode 100644 node_modules/lodash/_baseSample.js delete mode 100644 node_modules/lodash/_baseSampleSize.js delete mode 100644 node_modules/lodash/_baseSet.js delete mode 100644 node_modules/lodash/_baseSetData.js delete mode 100644 node_modules/lodash/_baseSetToString.js delete mode 100644 node_modules/lodash/_baseShuffle.js delete mode 100644 node_modules/lodash/_baseSlice.js delete mode 100644 node_modules/lodash/_baseSome.js delete mode 100644 node_modules/lodash/_baseSortBy.js delete mode 100644 node_modules/lodash/_baseSortedIndex.js delete mode 100644 node_modules/lodash/_baseSortedIndexBy.js delete mode 100644 node_modules/lodash/_baseSortedUniq.js delete mode 100644 node_modules/lodash/_baseSum.js delete mode 100644 node_modules/lodash/_baseTimes.js delete mode 100644 node_modules/lodash/_baseToNumber.js delete mode 100644 node_modules/lodash/_baseToPairs.js delete mode 100644 node_modules/lodash/_baseToString.js delete mode 100644 node_modules/lodash/_baseTrim.js delete mode 100644 node_modules/lodash/_baseUnary.js delete mode 100644 node_modules/lodash/_baseUniq.js delete mode 100644 node_modules/lodash/_baseUnset.js delete mode 100644 node_modules/lodash/_baseUpdate.js delete mode 100644 node_modules/lodash/_baseValues.js delete mode 100644 node_modules/lodash/_baseWhile.js delete mode 100644 node_modules/lodash/_baseWrapperValue.js delete mode 100644 node_modules/lodash/_baseXor.js delete mode 100644 node_modules/lodash/_baseZipObject.js delete mode 100644 node_modules/lodash/_cacheHas.js delete mode 100644 node_modules/lodash/_castArrayLikeObject.js delete mode 100644 node_modules/lodash/_castFunction.js delete mode 100644 node_modules/lodash/_castPath.js delete mode 100644 node_modules/lodash/_castRest.js delete mode 100644 node_modules/lodash/_castSlice.js delete mode 100644 node_modules/lodash/_charsEndIndex.js delete mode 100644 node_modules/lodash/_charsStartIndex.js delete mode 100644 node_modules/lodash/_cloneArrayBuffer.js delete mode 100644 node_modules/lodash/_cloneBuffer.js delete mode 100644 node_modules/lodash/_cloneDataView.js delete mode 100644 node_modules/lodash/_cloneRegExp.js delete mode 100644 node_modules/lodash/_cloneSymbol.js delete mode 100644 node_modules/lodash/_cloneTypedArray.js delete mode 100644 node_modules/lodash/_compareAscending.js delete mode 100644 node_modules/lodash/_compareMultiple.js delete mode 100644 node_modules/lodash/_composeArgs.js delete mode 100644 node_modules/lodash/_composeArgsRight.js delete mode 100644 node_modules/lodash/_copyArray.js delete mode 100644 node_modules/lodash/_copyObject.js delete mode 100644 node_modules/lodash/_copySymbols.js delete mode 100644 node_modules/lodash/_copySymbolsIn.js delete mode 100644 node_modules/lodash/_coreJsData.js delete mode 100644 node_modules/lodash/_countHolders.js delete mode 100644 node_modules/lodash/_createAggregator.js delete mode 100644 node_modules/lodash/_createAssigner.js delete mode 100644 node_modules/lodash/_createBaseEach.js delete mode 100644 node_modules/lodash/_createBaseFor.js delete mode 100644 node_modules/lodash/_createBind.js delete mode 100644 node_modules/lodash/_createCaseFirst.js delete mode 100644 node_modules/lodash/_createCompounder.js delete mode 100644 node_modules/lodash/_createCtor.js delete mode 100644 node_modules/lodash/_createCurry.js delete mode 100644 node_modules/lodash/_createFind.js delete mode 100644 node_modules/lodash/_createFlow.js delete mode 100644 node_modules/lodash/_createHybrid.js delete mode 100644 node_modules/lodash/_createInverter.js delete mode 100644 node_modules/lodash/_createMathOperation.js delete mode 100644 node_modules/lodash/_createOver.js delete mode 100644 node_modules/lodash/_createPadding.js delete mode 100644 node_modules/lodash/_createPartial.js delete mode 100644 node_modules/lodash/_createRange.js delete mode 100644 node_modules/lodash/_createRecurry.js delete mode 100644 node_modules/lodash/_createRelationalOperation.js delete mode 100644 node_modules/lodash/_createRound.js delete mode 100644 node_modules/lodash/_createSet.js delete mode 100644 node_modules/lodash/_createToPairs.js delete mode 100644 node_modules/lodash/_createWrap.js delete mode 100644 node_modules/lodash/_customDefaultsAssignIn.js delete mode 100644 node_modules/lodash/_customDefaultsMerge.js delete mode 100644 node_modules/lodash/_customOmitClone.js delete mode 100644 node_modules/lodash/_deburrLetter.js delete mode 100644 node_modules/lodash/_defineProperty.js delete mode 100644 node_modules/lodash/_equalArrays.js delete mode 100644 node_modules/lodash/_equalByTag.js delete mode 100644 node_modules/lodash/_equalObjects.js delete mode 100644 node_modules/lodash/_escapeHtmlChar.js delete mode 100644 node_modules/lodash/_escapeStringChar.js delete mode 100644 node_modules/lodash/_flatRest.js delete mode 100644 node_modules/lodash/_freeGlobal.js delete mode 100644 node_modules/lodash/_getAllKeys.js delete mode 100644 node_modules/lodash/_getAllKeysIn.js delete mode 100644 node_modules/lodash/_getData.js delete mode 100644 node_modules/lodash/_getFuncName.js delete mode 100644 node_modules/lodash/_getHolder.js delete mode 100644 node_modules/lodash/_getMapData.js delete mode 100644 node_modules/lodash/_getMatchData.js delete mode 100644 node_modules/lodash/_getNative.js delete mode 100644 node_modules/lodash/_getPrototype.js delete mode 100644 node_modules/lodash/_getRawTag.js delete mode 100644 node_modules/lodash/_getSymbols.js delete mode 100644 node_modules/lodash/_getSymbolsIn.js delete mode 100644 node_modules/lodash/_getTag.js delete mode 100644 node_modules/lodash/_getValue.js delete mode 100644 node_modules/lodash/_getView.js delete mode 100644 node_modules/lodash/_getWrapDetails.js delete mode 100644 node_modules/lodash/_hasPath.js delete mode 100644 node_modules/lodash/_hasUnicode.js delete mode 100644 node_modules/lodash/_hasUnicodeWord.js delete mode 100644 node_modules/lodash/_hashClear.js delete mode 100644 node_modules/lodash/_hashDelete.js delete mode 100644 node_modules/lodash/_hashGet.js delete mode 100644 node_modules/lodash/_hashHas.js delete mode 100644 node_modules/lodash/_hashSet.js delete mode 100644 node_modules/lodash/_initCloneArray.js delete mode 100644 node_modules/lodash/_initCloneByTag.js delete mode 100644 node_modules/lodash/_initCloneObject.js delete mode 100644 node_modules/lodash/_insertWrapDetails.js delete mode 100644 node_modules/lodash/_isFlattenable.js delete mode 100644 node_modules/lodash/_isIndex.js delete mode 100644 node_modules/lodash/_isIterateeCall.js delete mode 100644 node_modules/lodash/_isKey.js delete mode 100644 node_modules/lodash/_isKeyable.js delete mode 100644 node_modules/lodash/_isLaziable.js delete mode 100644 node_modules/lodash/_isMaskable.js delete mode 100644 node_modules/lodash/_isMasked.js delete mode 100644 node_modules/lodash/_isPrototype.js delete mode 100644 node_modules/lodash/_isStrictComparable.js delete mode 100644 node_modules/lodash/_iteratorToArray.js delete mode 100644 node_modules/lodash/_lazyClone.js delete mode 100644 node_modules/lodash/_lazyReverse.js delete mode 100644 node_modules/lodash/_lazyValue.js delete mode 100644 node_modules/lodash/_listCacheClear.js delete mode 100644 node_modules/lodash/_listCacheDelete.js delete mode 100644 node_modules/lodash/_listCacheGet.js delete mode 100644 node_modules/lodash/_listCacheHas.js delete mode 100644 node_modules/lodash/_listCacheSet.js delete mode 100644 node_modules/lodash/_mapCacheClear.js delete mode 100644 node_modules/lodash/_mapCacheDelete.js delete mode 100644 node_modules/lodash/_mapCacheGet.js delete mode 100644 node_modules/lodash/_mapCacheHas.js delete mode 100644 node_modules/lodash/_mapCacheSet.js delete mode 100644 node_modules/lodash/_mapToArray.js delete mode 100644 node_modules/lodash/_matchesStrictComparable.js delete mode 100644 node_modules/lodash/_memoizeCapped.js delete mode 100644 node_modules/lodash/_mergeData.js delete mode 100644 node_modules/lodash/_metaMap.js delete mode 100644 node_modules/lodash/_nativeCreate.js delete mode 100644 node_modules/lodash/_nativeKeys.js delete mode 100644 node_modules/lodash/_nativeKeysIn.js delete mode 100644 node_modules/lodash/_nodeUtil.js delete mode 100644 node_modules/lodash/_objectToString.js delete mode 100644 node_modules/lodash/_overArg.js delete mode 100644 node_modules/lodash/_overRest.js delete mode 100644 node_modules/lodash/_parent.js delete mode 100644 node_modules/lodash/_reEscape.js delete mode 100644 node_modules/lodash/_reEvaluate.js delete mode 100644 node_modules/lodash/_reInterpolate.js delete mode 100644 node_modules/lodash/_realNames.js delete mode 100644 node_modules/lodash/_reorder.js delete mode 100644 node_modules/lodash/_replaceHolders.js delete mode 100644 node_modules/lodash/_root.js delete mode 100644 node_modules/lodash/_safeGet.js delete mode 100644 node_modules/lodash/_setCacheAdd.js delete mode 100644 node_modules/lodash/_setCacheHas.js delete mode 100644 node_modules/lodash/_setData.js delete mode 100644 node_modules/lodash/_setToArray.js delete mode 100644 node_modules/lodash/_setToPairs.js delete mode 100644 node_modules/lodash/_setToString.js delete mode 100644 node_modules/lodash/_setWrapToString.js delete mode 100644 node_modules/lodash/_shortOut.js delete mode 100644 node_modules/lodash/_shuffleSelf.js delete mode 100644 node_modules/lodash/_stackClear.js delete mode 100644 node_modules/lodash/_stackDelete.js delete mode 100644 node_modules/lodash/_stackGet.js delete mode 100644 node_modules/lodash/_stackHas.js delete mode 100644 node_modules/lodash/_stackSet.js delete mode 100644 node_modules/lodash/_strictIndexOf.js delete mode 100644 node_modules/lodash/_strictLastIndexOf.js delete mode 100644 node_modules/lodash/_stringSize.js delete mode 100644 node_modules/lodash/_stringToArray.js delete mode 100644 node_modules/lodash/_stringToPath.js delete mode 100644 node_modules/lodash/_toKey.js delete mode 100644 node_modules/lodash/_toSource.js delete mode 100644 node_modules/lodash/_trimmedEndIndex.js delete mode 100644 node_modules/lodash/_unescapeHtmlChar.js delete mode 100644 node_modules/lodash/_unicodeSize.js delete mode 100644 node_modules/lodash/_unicodeToArray.js delete mode 100644 node_modules/lodash/_unicodeWords.js delete mode 100644 node_modules/lodash/_updateWrapDetails.js delete mode 100644 node_modules/lodash/_wrapperClone.js delete mode 100644 node_modules/lodash/add.js delete mode 100644 node_modules/lodash/after.js delete mode 100644 node_modules/lodash/array.js delete mode 100644 node_modules/lodash/ary.js delete mode 100644 node_modules/lodash/assign.js delete mode 100644 node_modules/lodash/assignIn.js delete mode 100644 node_modules/lodash/assignInWith.js delete mode 100644 node_modules/lodash/assignWith.js delete mode 100644 node_modules/lodash/at.js delete mode 100644 node_modules/lodash/attempt.js delete mode 100644 node_modules/lodash/before.js delete mode 100644 node_modules/lodash/bind.js delete mode 100644 node_modules/lodash/bindAll.js delete mode 100644 node_modules/lodash/bindKey.js delete mode 100644 node_modules/lodash/camelCase.js delete mode 100644 node_modules/lodash/capitalize.js delete mode 100644 node_modules/lodash/castArray.js delete mode 100644 node_modules/lodash/ceil.js delete mode 100644 node_modules/lodash/chain.js delete mode 100644 node_modules/lodash/chunk.js delete mode 100644 node_modules/lodash/clamp.js delete mode 100644 node_modules/lodash/clone.js delete mode 100644 node_modules/lodash/cloneDeep.js delete mode 100644 node_modules/lodash/cloneDeepWith.js delete mode 100644 node_modules/lodash/cloneWith.js delete mode 100644 node_modules/lodash/collection.js delete mode 100644 node_modules/lodash/commit.js delete mode 100644 node_modules/lodash/compact.js delete mode 100644 node_modules/lodash/concat.js delete mode 100644 node_modules/lodash/cond.js delete mode 100644 node_modules/lodash/conforms.js delete mode 100644 node_modules/lodash/conformsTo.js delete mode 100644 node_modules/lodash/constant.js delete mode 100644 node_modules/lodash/core.js delete mode 100644 node_modules/lodash/core.min.js delete mode 100644 node_modules/lodash/countBy.js delete mode 100644 node_modules/lodash/create.js delete mode 100644 node_modules/lodash/curry.js delete mode 100644 node_modules/lodash/curryRight.js delete mode 100644 node_modules/lodash/date.js delete mode 100644 node_modules/lodash/debounce.js delete mode 100644 node_modules/lodash/deburr.js delete mode 100644 node_modules/lodash/defaultTo.js delete mode 100644 node_modules/lodash/defaults.js delete mode 100644 node_modules/lodash/defaultsDeep.js delete mode 100644 node_modules/lodash/defer.js delete mode 100644 node_modules/lodash/delay.js delete mode 100644 node_modules/lodash/difference.js delete mode 100644 node_modules/lodash/differenceBy.js delete mode 100644 node_modules/lodash/differenceWith.js delete mode 100644 node_modules/lodash/divide.js delete mode 100644 node_modules/lodash/drop.js delete mode 100644 node_modules/lodash/dropRight.js delete mode 100644 node_modules/lodash/dropRightWhile.js delete mode 100644 node_modules/lodash/dropWhile.js delete mode 100644 node_modules/lodash/each.js delete mode 100644 node_modules/lodash/eachRight.js delete mode 100644 node_modules/lodash/endsWith.js delete mode 100644 node_modules/lodash/entries.js delete mode 100644 node_modules/lodash/entriesIn.js delete mode 100644 node_modules/lodash/eq.js delete mode 100644 node_modules/lodash/escape.js delete mode 100644 node_modules/lodash/escapeRegExp.js delete mode 100644 node_modules/lodash/every.js delete mode 100644 node_modules/lodash/extend.js delete mode 100644 node_modules/lodash/extendWith.js delete mode 100644 node_modules/lodash/fill.js delete mode 100644 node_modules/lodash/filter.js delete mode 100644 node_modules/lodash/find.js delete mode 100644 node_modules/lodash/findIndex.js delete mode 100644 node_modules/lodash/findKey.js delete mode 100644 node_modules/lodash/findLast.js delete mode 100644 node_modules/lodash/findLastIndex.js delete mode 100644 node_modules/lodash/findLastKey.js delete mode 100644 node_modules/lodash/first.js delete mode 100644 node_modules/lodash/flatMap.js delete mode 100644 node_modules/lodash/flatMapDeep.js delete mode 100644 node_modules/lodash/flatMapDepth.js delete mode 100644 node_modules/lodash/flatten.js delete mode 100644 node_modules/lodash/flattenDeep.js delete mode 100644 node_modules/lodash/flattenDepth.js delete mode 100644 node_modules/lodash/flip.js delete mode 100644 node_modules/lodash/floor.js delete mode 100644 node_modules/lodash/flow.js delete mode 100644 node_modules/lodash/flowRight.js delete mode 100644 node_modules/lodash/forEach.js delete mode 100644 node_modules/lodash/forEachRight.js delete mode 100644 node_modules/lodash/forIn.js delete mode 100644 node_modules/lodash/forInRight.js delete mode 100644 node_modules/lodash/forOwn.js delete mode 100644 node_modules/lodash/forOwnRight.js delete mode 100644 node_modules/lodash/fp.js delete mode 100644 node_modules/lodash/fp/F.js delete mode 100644 node_modules/lodash/fp/T.js delete mode 100644 node_modules/lodash/fp/__.js delete mode 100644 node_modules/lodash/fp/_baseConvert.js delete mode 100644 node_modules/lodash/fp/_convertBrowser.js delete mode 100644 node_modules/lodash/fp/_falseOptions.js delete mode 100644 node_modules/lodash/fp/_mapping.js delete mode 100644 node_modules/lodash/fp/_util.js delete mode 100644 node_modules/lodash/fp/add.js delete mode 100644 node_modules/lodash/fp/after.js delete mode 100644 node_modules/lodash/fp/all.js delete mode 100644 node_modules/lodash/fp/allPass.js delete mode 100644 node_modules/lodash/fp/always.js delete mode 100644 node_modules/lodash/fp/any.js delete mode 100644 node_modules/lodash/fp/anyPass.js delete mode 100644 node_modules/lodash/fp/apply.js delete mode 100644 node_modules/lodash/fp/array.js delete mode 100644 node_modules/lodash/fp/ary.js delete mode 100644 node_modules/lodash/fp/assign.js delete mode 100644 node_modules/lodash/fp/assignAll.js delete mode 100644 node_modules/lodash/fp/assignAllWith.js delete mode 100644 node_modules/lodash/fp/assignIn.js delete mode 100644 node_modules/lodash/fp/assignInAll.js delete mode 100644 node_modules/lodash/fp/assignInAllWith.js delete mode 100644 node_modules/lodash/fp/assignInWith.js delete mode 100644 node_modules/lodash/fp/assignWith.js delete mode 100644 node_modules/lodash/fp/assoc.js delete mode 100644 node_modules/lodash/fp/assocPath.js delete mode 100644 node_modules/lodash/fp/at.js delete mode 100644 node_modules/lodash/fp/attempt.js delete mode 100644 node_modules/lodash/fp/before.js delete mode 100644 node_modules/lodash/fp/bind.js delete mode 100644 node_modules/lodash/fp/bindAll.js delete mode 100644 node_modules/lodash/fp/bindKey.js delete mode 100644 node_modules/lodash/fp/camelCase.js delete mode 100644 node_modules/lodash/fp/capitalize.js delete mode 100644 node_modules/lodash/fp/castArray.js delete mode 100644 node_modules/lodash/fp/ceil.js delete mode 100644 node_modules/lodash/fp/chain.js delete mode 100644 node_modules/lodash/fp/chunk.js delete mode 100644 node_modules/lodash/fp/clamp.js delete mode 100644 node_modules/lodash/fp/clone.js delete mode 100644 node_modules/lodash/fp/cloneDeep.js delete mode 100644 node_modules/lodash/fp/cloneDeepWith.js delete mode 100644 node_modules/lodash/fp/cloneWith.js delete mode 100644 node_modules/lodash/fp/collection.js delete mode 100644 node_modules/lodash/fp/commit.js delete mode 100644 node_modules/lodash/fp/compact.js delete mode 100644 node_modules/lodash/fp/complement.js delete mode 100644 node_modules/lodash/fp/compose.js delete mode 100644 node_modules/lodash/fp/concat.js delete mode 100644 node_modules/lodash/fp/cond.js delete mode 100644 node_modules/lodash/fp/conforms.js delete mode 100644 node_modules/lodash/fp/conformsTo.js delete mode 100644 node_modules/lodash/fp/constant.js delete mode 100644 node_modules/lodash/fp/contains.js delete mode 100644 node_modules/lodash/fp/convert.js delete mode 100644 node_modules/lodash/fp/countBy.js delete mode 100644 node_modules/lodash/fp/create.js delete mode 100644 node_modules/lodash/fp/curry.js delete mode 100644 node_modules/lodash/fp/curryN.js delete mode 100644 node_modules/lodash/fp/curryRight.js delete mode 100644 node_modules/lodash/fp/curryRightN.js delete mode 100644 node_modules/lodash/fp/date.js delete mode 100644 node_modules/lodash/fp/debounce.js delete mode 100644 node_modules/lodash/fp/deburr.js delete mode 100644 node_modules/lodash/fp/defaultTo.js delete mode 100644 node_modules/lodash/fp/defaults.js delete mode 100644 node_modules/lodash/fp/defaultsAll.js delete mode 100644 node_modules/lodash/fp/defaultsDeep.js delete mode 100644 node_modules/lodash/fp/defaultsDeepAll.js delete mode 100644 node_modules/lodash/fp/defer.js delete mode 100644 node_modules/lodash/fp/delay.js delete mode 100644 node_modules/lodash/fp/difference.js delete mode 100644 node_modules/lodash/fp/differenceBy.js delete mode 100644 node_modules/lodash/fp/differenceWith.js delete mode 100644 node_modules/lodash/fp/dissoc.js delete mode 100644 node_modules/lodash/fp/dissocPath.js delete mode 100644 node_modules/lodash/fp/divide.js delete mode 100644 node_modules/lodash/fp/drop.js delete mode 100644 node_modules/lodash/fp/dropLast.js delete mode 100644 node_modules/lodash/fp/dropLastWhile.js delete mode 100644 node_modules/lodash/fp/dropRight.js delete mode 100644 node_modules/lodash/fp/dropRightWhile.js delete mode 100644 node_modules/lodash/fp/dropWhile.js delete mode 100644 node_modules/lodash/fp/each.js delete mode 100644 node_modules/lodash/fp/eachRight.js delete mode 100644 node_modules/lodash/fp/endsWith.js delete mode 100644 node_modules/lodash/fp/entries.js delete mode 100644 node_modules/lodash/fp/entriesIn.js delete mode 100644 node_modules/lodash/fp/eq.js delete mode 100644 node_modules/lodash/fp/equals.js delete mode 100644 node_modules/lodash/fp/escape.js delete mode 100644 node_modules/lodash/fp/escapeRegExp.js delete mode 100644 node_modules/lodash/fp/every.js delete mode 100644 node_modules/lodash/fp/extend.js delete mode 100644 node_modules/lodash/fp/extendAll.js delete mode 100644 node_modules/lodash/fp/extendAllWith.js delete mode 100644 node_modules/lodash/fp/extendWith.js delete mode 100644 node_modules/lodash/fp/fill.js delete mode 100644 node_modules/lodash/fp/filter.js delete mode 100644 node_modules/lodash/fp/find.js delete mode 100644 node_modules/lodash/fp/findFrom.js delete mode 100644 node_modules/lodash/fp/findIndex.js delete mode 100644 node_modules/lodash/fp/findIndexFrom.js delete mode 100644 node_modules/lodash/fp/findKey.js delete mode 100644 node_modules/lodash/fp/findLast.js delete mode 100644 node_modules/lodash/fp/findLastFrom.js delete mode 100644 node_modules/lodash/fp/findLastIndex.js delete mode 100644 node_modules/lodash/fp/findLastIndexFrom.js delete mode 100644 node_modules/lodash/fp/findLastKey.js delete mode 100644 node_modules/lodash/fp/first.js delete mode 100644 node_modules/lodash/fp/flatMap.js delete mode 100644 node_modules/lodash/fp/flatMapDeep.js delete mode 100644 node_modules/lodash/fp/flatMapDepth.js delete mode 100644 node_modules/lodash/fp/flatten.js delete mode 100644 node_modules/lodash/fp/flattenDeep.js delete mode 100644 node_modules/lodash/fp/flattenDepth.js delete mode 100644 node_modules/lodash/fp/flip.js delete mode 100644 node_modules/lodash/fp/floor.js delete mode 100644 node_modules/lodash/fp/flow.js delete mode 100644 node_modules/lodash/fp/flowRight.js delete mode 100644 node_modules/lodash/fp/forEach.js delete mode 100644 node_modules/lodash/fp/forEachRight.js delete mode 100644 node_modules/lodash/fp/forIn.js delete mode 100644 node_modules/lodash/fp/forInRight.js delete mode 100644 node_modules/lodash/fp/forOwn.js delete mode 100644 node_modules/lodash/fp/forOwnRight.js delete mode 100644 node_modules/lodash/fp/fromPairs.js delete mode 100644 node_modules/lodash/fp/function.js delete mode 100644 node_modules/lodash/fp/functions.js delete mode 100644 node_modules/lodash/fp/functionsIn.js delete mode 100644 node_modules/lodash/fp/get.js delete mode 100644 node_modules/lodash/fp/getOr.js delete mode 100644 node_modules/lodash/fp/groupBy.js delete mode 100644 node_modules/lodash/fp/gt.js delete mode 100644 node_modules/lodash/fp/gte.js delete mode 100644 node_modules/lodash/fp/has.js delete mode 100644 node_modules/lodash/fp/hasIn.js delete mode 100644 node_modules/lodash/fp/head.js delete mode 100644 node_modules/lodash/fp/identical.js delete mode 100644 node_modules/lodash/fp/identity.js delete mode 100644 node_modules/lodash/fp/inRange.js delete mode 100644 node_modules/lodash/fp/includes.js delete mode 100644 node_modules/lodash/fp/includesFrom.js delete mode 100644 node_modules/lodash/fp/indexBy.js delete mode 100644 node_modules/lodash/fp/indexOf.js delete mode 100644 node_modules/lodash/fp/indexOfFrom.js delete mode 100644 node_modules/lodash/fp/init.js delete mode 100644 node_modules/lodash/fp/initial.js delete mode 100644 node_modules/lodash/fp/intersection.js delete mode 100644 node_modules/lodash/fp/intersectionBy.js delete mode 100644 node_modules/lodash/fp/intersectionWith.js delete mode 100644 node_modules/lodash/fp/invert.js delete mode 100644 node_modules/lodash/fp/invertBy.js delete mode 100644 node_modules/lodash/fp/invertObj.js delete mode 100644 node_modules/lodash/fp/invoke.js delete mode 100644 node_modules/lodash/fp/invokeArgs.js delete mode 100644 node_modules/lodash/fp/invokeArgsMap.js delete mode 100644 node_modules/lodash/fp/invokeMap.js delete mode 100644 node_modules/lodash/fp/isArguments.js delete mode 100644 node_modules/lodash/fp/isArray.js delete mode 100644 node_modules/lodash/fp/isArrayBuffer.js delete mode 100644 node_modules/lodash/fp/isArrayLike.js delete mode 100644 node_modules/lodash/fp/isArrayLikeObject.js delete mode 100644 node_modules/lodash/fp/isBoolean.js delete mode 100644 node_modules/lodash/fp/isBuffer.js delete mode 100644 node_modules/lodash/fp/isDate.js delete mode 100644 node_modules/lodash/fp/isElement.js delete mode 100644 node_modules/lodash/fp/isEmpty.js delete mode 100644 node_modules/lodash/fp/isEqual.js delete mode 100644 node_modules/lodash/fp/isEqualWith.js delete mode 100644 node_modules/lodash/fp/isError.js delete mode 100644 node_modules/lodash/fp/isFinite.js delete mode 100644 node_modules/lodash/fp/isFunction.js delete mode 100644 node_modules/lodash/fp/isInteger.js delete mode 100644 node_modules/lodash/fp/isLength.js delete mode 100644 node_modules/lodash/fp/isMap.js delete mode 100644 node_modules/lodash/fp/isMatch.js delete mode 100644 node_modules/lodash/fp/isMatchWith.js delete mode 100644 node_modules/lodash/fp/isNaN.js delete mode 100644 node_modules/lodash/fp/isNative.js delete mode 100644 node_modules/lodash/fp/isNil.js delete mode 100644 node_modules/lodash/fp/isNull.js delete mode 100644 node_modules/lodash/fp/isNumber.js delete mode 100644 node_modules/lodash/fp/isObject.js delete mode 100644 node_modules/lodash/fp/isObjectLike.js delete mode 100644 node_modules/lodash/fp/isPlainObject.js delete mode 100644 node_modules/lodash/fp/isRegExp.js delete mode 100644 node_modules/lodash/fp/isSafeInteger.js delete mode 100644 node_modules/lodash/fp/isSet.js delete mode 100644 node_modules/lodash/fp/isString.js delete mode 100644 node_modules/lodash/fp/isSymbol.js delete mode 100644 node_modules/lodash/fp/isTypedArray.js delete mode 100644 node_modules/lodash/fp/isUndefined.js delete mode 100644 node_modules/lodash/fp/isWeakMap.js delete mode 100644 node_modules/lodash/fp/isWeakSet.js delete mode 100644 node_modules/lodash/fp/iteratee.js delete mode 100644 node_modules/lodash/fp/join.js delete mode 100644 node_modules/lodash/fp/juxt.js delete mode 100644 node_modules/lodash/fp/kebabCase.js delete mode 100644 node_modules/lodash/fp/keyBy.js delete mode 100644 node_modules/lodash/fp/keys.js delete mode 100644 node_modules/lodash/fp/keysIn.js delete mode 100644 node_modules/lodash/fp/lang.js delete mode 100644 node_modules/lodash/fp/last.js delete mode 100644 node_modules/lodash/fp/lastIndexOf.js delete mode 100644 node_modules/lodash/fp/lastIndexOfFrom.js delete mode 100644 node_modules/lodash/fp/lowerCase.js delete mode 100644 node_modules/lodash/fp/lowerFirst.js delete mode 100644 node_modules/lodash/fp/lt.js delete mode 100644 node_modules/lodash/fp/lte.js delete mode 100644 node_modules/lodash/fp/map.js delete mode 100644 node_modules/lodash/fp/mapKeys.js delete mode 100644 node_modules/lodash/fp/mapValues.js delete mode 100644 node_modules/lodash/fp/matches.js delete mode 100644 node_modules/lodash/fp/matchesProperty.js delete mode 100644 node_modules/lodash/fp/math.js delete mode 100644 node_modules/lodash/fp/max.js delete mode 100644 node_modules/lodash/fp/maxBy.js delete mode 100644 node_modules/lodash/fp/mean.js delete mode 100644 node_modules/lodash/fp/meanBy.js delete mode 100644 node_modules/lodash/fp/memoize.js delete mode 100644 node_modules/lodash/fp/merge.js delete mode 100644 node_modules/lodash/fp/mergeAll.js delete mode 100644 node_modules/lodash/fp/mergeAllWith.js delete mode 100644 node_modules/lodash/fp/mergeWith.js delete mode 100644 node_modules/lodash/fp/method.js delete mode 100644 node_modules/lodash/fp/methodOf.js delete mode 100644 node_modules/lodash/fp/min.js delete mode 100644 node_modules/lodash/fp/minBy.js delete mode 100644 node_modules/lodash/fp/mixin.js delete mode 100644 node_modules/lodash/fp/multiply.js delete mode 100644 node_modules/lodash/fp/nAry.js delete mode 100644 node_modules/lodash/fp/negate.js delete mode 100644 node_modules/lodash/fp/next.js delete mode 100644 node_modules/lodash/fp/noop.js delete mode 100644 node_modules/lodash/fp/now.js delete mode 100644 node_modules/lodash/fp/nth.js delete mode 100644 node_modules/lodash/fp/nthArg.js delete mode 100644 node_modules/lodash/fp/number.js delete mode 100644 node_modules/lodash/fp/object.js delete mode 100644 node_modules/lodash/fp/omit.js delete mode 100644 node_modules/lodash/fp/omitAll.js delete mode 100644 node_modules/lodash/fp/omitBy.js delete mode 100644 node_modules/lodash/fp/once.js delete mode 100644 node_modules/lodash/fp/orderBy.js delete mode 100644 node_modules/lodash/fp/over.js delete mode 100644 node_modules/lodash/fp/overArgs.js delete mode 100644 node_modules/lodash/fp/overEvery.js delete mode 100644 node_modules/lodash/fp/overSome.js delete mode 100644 node_modules/lodash/fp/pad.js delete mode 100644 node_modules/lodash/fp/padChars.js delete mode 100644 node_modules/lodash/fp/padCharsEnd.js delete mode 100644 node_modules/lodash/fp/padCharsStart.js delete mode 100644 node_modules/lodash/fp/padEnd.js delete mode 100644 node_modules/lodash/fp/padStart.js delete mode 100644 node_modules/lodash/fp/parseInt.js delete mode 100644 node_modules/lodash/fp/partial.js delete mode 100644 node_modules/lodash/fp/partialRight.js delete mode 100644 node_modules/lodash/fp/partition.js delete mode 100644 node_modules/lodash/fp/path.js delete mode 100644 node_modules/lodash/fp/pathEq.js delete mode 100644 node_modules/lodash/fp/pathOr.js delete mode 100644 node_modules/lodash/fp/paths.js delete mode 100644 node_modules/lodash/fp/pick.js delete mode 100644 node_modules/lodash/fp/pickAll.js delete mode 100644 node_modules/lodash/fp/pickBy.js delete mode 100644 node_modules/lodash/fp/pipe.js delete mode 100644 node_modules/lodash/fp/placeholder.js delete mode 100644 node_modules/lodash/fp/plant.js delete mode 100644 node_modules/lodash/fp/pluck.js delete mode 100644 node_modules/lodash/fp/prop.js delete mode 100644 node_modules/lodash/fp/propEq.js delete mode 100644 node_modules/lodash/fp/propOr.js delete mode 100644 node_modules/lodash/fp/property.js delete mode 100644 node_modules/lodash/fp/propertyOf.js delete mode 100644 node_modules/lodash/fp/props.js delete mode 100644 node_modules/lodash/fp/pull.js delete mode 100644 node_modules/lodash/fp/pullAll.js delete mode 100644 node_modules/lodash/fp/pullAllBy.js delete mode 100644 node_modules/lodash/fp/pullAllWith.js delete mode 100644 node_modules/lodash/fp/pullAt.js delete mode 100644 node_modules/lodash/fp/random.js delete mode 100644 node_modules/lodash/fp/range.js delete mode 100644 node_modules/lodash/fp/rangeRight.js delete mode 100644 node_modules/lodash/fp/rangeStep.js delete mode 100644 node_modules/lodash/fp/rangeStepRight.js delete mode 100644 node_modules/lodash/fp/rearg.js delete mode 100644 node_modules/lodash/fp/reduce.js delete mode 100644 node_modules/lodash/fp/reduceRight.js delete mode 100644 node_modules/lodash/fp/reject.js delete mode 100644 node_modules/lodash/fp/remove.js delete mode 100644 node_modules/lodash/fp/repeat.js delete mode 100644 node_modules/lodash/fp/replace.js delete mode 100644 node_modules/lodash/fp/rest.js delete mode 100644 node_modules/lodash/fp/restFrom.js delete mode 100644 node_modules/lodash/fp/result.js delete mode 100644 node_modules/lodash/fp/reverse.js delete mode 100644 node_modules/lodash/fp/round.js delete mode 100644 node_modules/lodash/fp/sample.js delete mode 100644 node_modules/lodash/fp/sampleSize.js delete mode 100644 node_modules/lodash/fp/seq.js delete mode 100644 node_modules/lodash/fp/set.js delete mode 100644 node_modules/lodash/fp/setWith.js delete mode 100644 node_modules/lodash/fp/shuffle.js delete mode 100644 node_modules/lodash/fp/size.js delete mode 100644 node_modules/lodash/fp/slice.js delete mode 100644 node_modules/lodash/fp/snakeCase.js delete mode 100644 node_modules/lodash/fp/some.js delete mode 100644 node_modules/lodash/fp/sortBy.js delete mode 100644 node_modules/lodash/fp/sortedIndex.js delete mode 100644 node_modules/lodash/fp/sortedIndexBy.js delete mode 100644 node_modules/lodash/fp/sortedIndexOf.js delete mode 100644 node_modules/lodash/fp/sortedLastIndex.js delete mode 100644 node_modules/lodash/fp/sortedLastIndexBy.js delete mode 100644 node_modules/lodash/fp/sortedLastIndexOf.js delete mode 100644 node_modules/lodash/fp/sortedUniq.js delete mode 100644 node_modules/lodash/fp/sortedUniqBy.js delete mode 100644 node_modules/lodash/fp/split.js delete mode 100644 node_modules/lodash/fp/spread.js delete mode 100644 node_modules/lodash/fp/spreadFrom.js delete mode 100644 node_modules/lodash/fp/startCase.js delete mode 100644 node_modules/lodash/fp/startsWith.js delete mode 100644 node_modules/lodash/fp/string.js delete mode 100644 node_modules/lodash/fp/stubArray.js delete mode 100644 node_modules/lodash/fp/stubFalse.js delete mode 100644 node_modules/lodash/fp/stubObject.js delete mode 100644 node_modules/lodash/fp/stubString.js delete mode 100644 node_modules/lodash/fp/stubTrue.js delete mode 100644 node_modules/lodash/fp/subtract.js delete mode 100644 node_modules/lodash/fp/sum.js delete mode 100644 node_modules/lodash/fp/sumBy.js delete mode 100644 node_modules/lodash/fp/symmetricDifference.js delete mode 100644 node_modules/lodash/fp/symmetricDifferenceBy.js delete mode 100644 node_modules/lodash/fp/symmetricDifferenceWith.js delete mode 100644 node_modules/lodash/fp/tail.js delete mode 100644 node_modules/lodash/fp/take.js delete mode 100644 node_modules/lodash/fp/takeLast.js delete mode 100644 node_modules/lodash/fp/takeLastWhile.js delete mode 100644 node_modules/lodash/fp/takeRight.js delete mode 100644 node_modules/lodash/fp/takeRightWhile.js delete mode 100644 node_modules/lodash/fp/takeWhile.js delete mode 100644 node_modules/lodash/fp/tap.js delete mode 100644 node_modules/lodash/fp/template.js delete mode 100644 node_modules/lodash/fp/templateSettings.js delete mode 100644 node_modules/lodash/fp/throttle.js delete mode 100644 node_modules/lodash/fp/thru.js delete mode 100644 node_modules/lodash/fp/times.js delete mode 100644 node_modules/lodash/fp/toArray.js delete mode 100644 node_modules/lodash/fp/toFinite.js delete mode 100644 node_modules/lodash/fp/toInteger.js delete mode 100644 node_modules/lodash/fp/toIterator.js delete mode 100644 node_modules/lodash/fp/toJSON.js delete mode 100644 node_modules/lodash/fp/toLength.js delete mode 100644 node_modules/lodash/fp/toLower.js delete mode 100644 node_modules/lodash/fp/toNumber.js delete mode 100644 node_modules/lodash/fp/toPairs.js delete mode 100644 node_modules/lodash/fp/toPairsIn.js delete mode 100644 node_modules/lodash/fp/toPath.js delete mode 100644 node_modules/lodash/fp/toPlainObject.js delete mode 100644 node_modules/lodash/fp/toSafeInteger.js delete mode 100644 node_modules/lodash/fp/toString.js delete mode 100644 node_modules/lodash/fp/toUpper.js delete mode 100644 node_modules/lodash/fp/transform.js delete mode 100644 node_modules/lodash/fp/trim.js delete mode 100644 node_modules/lodash/fp/trimChars.js delete mode 100644 node_modules/lodash/fp/trimCharsEnd.js delete mode 100644 node_modules/lodash/fp/trimCharsStart.js delete mode 100644 node_modules/lodash/fp/trimEnd.js delete mode 100644 node_modules/lodash/fp/trimStart.js delete mode 100644 node_modules/lodash/fp/truncate.js delete mode 100644 node_modules/lodash/fp/unapply.js delete mode 100644 node_modules/lodash/fp/unary.js delete mode 100644 node_modules/lodash/fp/unescape.js delete mode 100644 node_modules/lodash/fp/union.js delete mode 100644 node_modules/lodash/fp/unionBy.js delete mode 100644 node_modules/lodash/fp/unionWith.js delete mode 100644 node_modules/lodash/fp/uniq.js delete mode 100644 node_modules/lodash/fp/uniqBy.js delete mode 100644 node_modules/lodash/fp/uniqWith.js delete mode 100644 node_modules/lodash/fp/uniqueId.js delete mode 100644 node_modules/lodash/fp/unnest.js delete mode 100644 node_modules/lodash/fp/unset.js delete mode 100644 node_modules/lodash/fp/unzip.js delete mode 100644 node_modules/lodash/fp/unzipWith.js delete mode 100644 node_modules/lodash/fp/update.js delete mode 100644 node_modules/lodash/fp/updateWith.js delete mode 100644 node_modules/lodash/fp/upperCase.js delete mode 100644 node_modules/lodash/fp/upperFirst.js delete mode 100644 node_modules/lodash/fp/useWith.js delete mode 100644 node_modules/lodash/fp/util.js delete mode 100644 node_modules/lodash/fp/value.js delete mode 100644 node_modules/lodash/fp/valueOf.js delete mode 100644 node_modules/lodash/fp/values.js delete mode 100644 node_modules/lodash/fp/valuesIn.js delete mode 100644 node_modules/lodash/fp/where.js delete mode 100644 node_modules/lodash/fp/whereEq.js delete mode 100644 node_modules/lodash/fp/without.js delete mode 100644 node_modules/lodash/fp/words.js delete mode 100644 node_modules/lodash/fp/wrap.js delete mode 100644 node_modules/lodash/fp/wrapperAt.js delete mode 100644 node_modules/lodash/fp/wrapperChain.js delete mode 100644 node_modules/lodash/fp/wrapperLodash.js delete mode 100644 node_modules/lodash/fp/wrapperReverse.js delete mode 100644 node_modules/lodash/fp/wrapperValue.js delete mode 100644 node_modules/lodash/fp/xor.js delete mode 100644 node_modules/lodash/fp/xorBy.js delete mode 100644 node_modules/lodash/fp/xorWith.js delete mode 100644 node_modules/lodash/fp/zip.js delete mode 100644 node_modules/lodash/fp/zipAll.js delete mode 100644 node_modules/lodash/fp/zipObj.js delete mode 100644 node_modules/lodash/fp/zipObject.js delete mode 100644 node_modules/lodash/fp/zipObjectDeep.js delete mode 100644 node_modules/lodash/fp/zipWith.js delete mode 100644 node_modules/lodash/fromPairs.js delete mode 100644 node_modules/lodash/function.js delete mode 100644 node_modules/lodash/functions.js delete mode 100644 node_modules/lodash/functionsIn.js delete mode 100644 node_modules/lodash/get.js delete mode 100644 node_modules/lodash/groupBy.js delete mode 100644 node_modules/lodash/gt.js delete mode 100644 node_modules/lodash/gte.js delete mode 100644 node_modules/lodash/has.js delete mode 100644 node_modules/lodash/hasIn.js delete mode 100644 node_modules/lodash/head.js delete mode 100644 node_modules/lodash/identity.js delete mode 100644 node_modules/lodash/inRange.js delete mode 100644 node_modules/lodash/includes.js delete mode 100644 node_modules/lodash/index.js delete mode 100644 node_modules/lodash/indexOf.js delete mode 100644 node_modules/lodash/initial.js delete mode 100644 node_modules/lodash/intersection.js delete mode 100644 node_modules/lodash/intersectionBy.js delete mode 100644 node_modules/lodash/intersectionWith.js delete mode 100644 node_modules/lodash/invert.js delete mode 100644 node_modules/lodash/invertBy.js delete mode 100644 node_modules/lodash/invoke.js delete mode 100644 node_modules/lodash/invokeMap.js delete mode 100644 node_modules/lodash/isArguments.js delete mode 100644 node_modules/lodash/isArray.js delete mode 100644 node_modules/lodash/isArrayBuffer.js delete mode 100644 node_modules/lodash/isArrayLike.js delete mode 100644 node_modules/lodash/isArrayLikeObject.js delete mode 100644 node_modules/lodash/isBoolean.js delete mode 100644 node_modules/lodash/isBuffer.js delete mode 100644 node_modules/lodash/isDate.js delete mode 100644 node_modules/lodash/isElement.js delete mode 100644 node_modules/lodash/isEmpty.js delete mode 100644 node_modules/lodash/isEqual.js delete mode 100644 node_modules/lodash/isEqualWith.js delete mode 100644 node_modules/lodash/isError.js delete mode 100644 node_modules/lodash/isFinite.js delete mode 100644 node_modules/lodash/isFunction.js delete mode 100644 node_modules/lodash/isInteger.js delete mode 100644 node_modules/lodash/isLength.js delete mode 100644 node_modules/lodash/isMap.js delete mode 100644 node_modules/lodash/isMatch.js delete mode 100644 node_modules/lodash/isMatchWith.js delete mode 100644 node_modules/lodash/isNaN.js delete mode 100644 node_modules/lodash/isNative.js delete mode 100644 node_modules/lodash/isNil.js delete mode 100644 node_modules/lodash/isNull.js delete mode 100644 node_modules/lodash/isNumber.js delete mode 100644 node_modules/lodash/isObject.js delete mode 100644 node_modules/lodash/isObjectLike.js delete mode 100644 node_modules/lodash/isPlainObject.js delete mode 100644 node_modules/lodash/isRegExp.js delete mode 100644 node_modules/lodash/isSafeInteger.js delete mode 100644 node_modules/lodash/isSet.js delete mode 100644 node_modules/lodash/isString.js delete mode 100644 node_modules/lodash/isSymbol.js delete mode 100644 node_modules/lodash/isTypedArray.js delete mode 100644 node_modules/lodash/isUndefined.js delete mode 100644 node_modules/lodash/isWeakMap.js delete mode 100644 node_modules/lodash/isWeakSet.js delete mode 100644 node_modules/lodash/iteratee.js delete mode 100644 node_modules/lodash/join.js delete mode 100644 node_modules/lodash/kebabCase.js delete mode 100644 node_modules/lodash/keyBy.js delete mode 100644 node_modules/lodash/keys.js delete mode 100644 node_modules/lodash/keysIn.js delete mode 100644 node_modules/lodash/lang.js delete mode 100644 node_modules/lodash/last.js delete mode 100644 node_modules/lodash/lastIndexOf.js delete mode 100644 node_modules/lodash/lodash.js delete mode 100644 node_modules/lodash/lodash.min.js delete mode 100644 node_modules/lodash/lowerCase.js delete mode 100644 node_modules/lodash/lowerFirst.js delete mode 100644 node_modules/lodash/lt.js delete mode 100644 node_modules/lodash/lte.js delete mode 100644 node_modules/lodash/map.js delete mode 100644 node_modules/lodash/mapKeys.js delete mode 100644 node_modules/lodash/mapValues.js delete mode 100644 node_modules/lodash/matches.js delete mode 100644 node_modules/lodash/matchesProperty.js delete mode 100644 node_modules/lodash/math.js delete mode 100644 node_modules/lodash/max.js delete mode 100644 node_modules/lodash/maxBy.js delete mode 100644 node_modules/lodash/mean.js delete mode 100644 node_modules/lodash/meanBy.js delete mode 100644 node_modules/lodash/memoize.js delete mode 100644 node_modules/lodash/merge.js delete mode 100644 node_modules/lodash/mergeWith.js delete mode 100644 node_modules/lodash/method.js delete mode 100644 node_modules/lodash/methodOf.js delete mode 100644 node_modules/lodash/min.js delete mode 100644 node_modules/lodash/minBy.js delete mode 100644 node_modules/lodash/mixin.js delete mode 100644 node_modules/lodash/multiply.js delete mode 100644 node_modules/lodash/negate.js delete mode 100644 node_modules/lodash/next.js delete mode 100644 node_modules/lodash/noop.js delete mode 100644 node_modules/lodash/now.js delete mode 100644 node_modules/lodash/nth.js delete mode 100644 node_modules/lodash/nthArg.js delete mode 100644 node_modules/lodash/number.js delete mode 100644 node_modules/lodash/object.js delete mode 100644 node_modules/lodash/omit.js delete mode 100644 node_modules/lodash/omitBy.js delete mode 100644 node_modules/lodash/once.js delete mode 100644 node_modules/lodash/orderBy.js delete mode 100644 node_modules/lodash/over.js delete mode 100644 node_modules/lodash/overArgs.js delete mode 100644 node_modules/lodash/overEvery.js delete mode 100644 node_modules/lodash/overSome.js delete mode 100644 node_modules/lodash/package.json delete mode 100644 node_modules/lodash/pad.js delete mode 100644 node_modules/lodash/padEnd.js delete mode 100644 node_modules/lodash/padStart.js delete mode 100644 node_modules/lodash/parseInt.js delete mode 100644 node_modules/lodash/partial.js delete mode 100644 node_modules/lodash/partialRight.js delete mode 100644 node_modules/lodash/partition.js delete mode 100644 node_modules/lodash/pick.js delete mode 100644 node_modules/lodash/pickBy.js delete mode 100644 node_modules/lodash/plant.js delete mode 100644 node_modules/lodash/property.js delete mode 100644 node_modules/lodash/propertyOf.js delete mode 100644 node_modules/lodash/pull.js delete mode 100644 node_modules/lodash/pullAll.js delete mode 100644 node_modules/lodash/pullAllBy.js delete mode 100644 node_modules/lodash/pullAllWith.js delete mode 100644 node_modules/lodash/pullAt.js delete mode 100644 node_modules/lodash/random.js delete mode 100644 node_modules/lodash/range.js delete mode 100644 node_modules/lodash/rangeRight.js delete mode 100644 node_modules/lodash/rearg.js delete mode 100644 node_modules/lodash/reduce.js delete mode 100644 node_modules/lodash/reduceRight.js delete mode 100644 node_modules/lodash/reject.js delete mode 100644 node_modules/lodash/remove.js delete mode 100644 node_modules/lodash/repeat.js delete mode 100644 node_modules/lodash/replace.js delete mode 100644 node_modules/lodash/rest.js delete mode 100644 node_modules/lodash/result.js delete mode 100644 node_modules/lodash/reverse.js delete mode 100644 node_modules/lodash/round.js delete mode 100644 node_modules/lodash/sample.js delete mode 100644 node_modules/lodash/sampleSize.js delete mode 100644 node_modules/lodash/seq.js delete mode 100644 node_modules/lodash/set.js delete mode 100644 node_modules/lodash/setWith.js delete mode 100644 node_modules/lodash/shuffle.js delete mode 100644 node_modules/lodash/size.js delete mode 100644 node_modules/lodash/slice.js delete mode 100644 node_modules/lodash/snakeCase.js delete mode 100644 node_modules/lodash/some.js delete mode 100644 node_modules/lodash/sortBy.js delete mode 100644 node_modules/lodash/sortedIndex.js delete mode 100644 node_modules/lodash/sortedIndexBy.js delete mode 100644 node_modules/lodash/sortedIndexOf.js delete mode 100644 node_modules/lodash/sortedLastIndex.js delete mode 100644 node_modules/lodash/sortedLastIndexBy.js delete mode 100644 node_modules/lodash/sortedLastIndexOf.js delete mode 100644 node_modules/lodash/sortedUniq.js delete mode 100644 node_modules/lodash/sortedUniqBy.js delete mode 100644 node_modules/lodash/split.js delete mode 100644 node_modules/lodash/spread.js delete mode 100644 node_modules/lodash/startCase.js delete mode 100644 node_modules/lodash/startsWith.js delete mode 100644 node_modules/lodash/string.js delete mode 100644 node_modules/lodash/stubArray.js delete mode 100644 node_modules/lodash/stubFalse.js delete mode 100644 node_modules/lodash/stubObject.js delete mode 100644 node_modules/lodash/stubString.js delete mode 100644 node_modules/lodash/stubTrue.js delete mode 100644 node_modules/lodash/subtract.js delete mode 100644 node_modules/lodash/sum.js delete mode 100644 node_modules/lodash/sumBy.js delete mode 100644 node_modules/lodash/tail.js delete mode 100644 node_modules/lodash/take.js delete mode 100644 node_modules/lodash/takeRight.js delete mode 100644 node_modules/lodash/takeRightWhile.js delete mode 100644 node_modules/lodash/takeWhile.js delete mode 100644 node_modules/lodash/tap.js delete mode 100644 node_modules/lodash/template.js delete mode 100644 node_modules/lodash/templateSettings.js delete mode 100644 node_modules/lodash/throttle.js delete mode 100644 node_modules/lodash/thru.js delete mode 100644 node_modules/lodash/times.js delete mode 100644 node_modules/lodash/toArray.js delete mode 100644 node_modules/lodash/toFinite.js delete mode 100644 node_modules/lodash/toInteger.js delete mode 100644 node_modules/lodash/toIterator.js delete mode 100644 node_modules/lodash/toJSON.js delete mode 100644 node_modules/lodash/toLength.js delete mode 100644 node_modules/lodash/toLower.js delete mode 100644 node_modules/lodash/toNumber.js delete mode 100644 node_modules/lodash/toPairs.js delete mode 100644 node_modules/lodash/toPairsIn.js delete mode 100644 node_modules/lodash/toPath.js delete mode 100644 node_modules/lodash/toPlainObject.js delete mode 100644 node_modules/lodash/toSafeInteger.js delete mode 100644 node_modules/lodash/toString.js delete mode 100644 node_modules/lodash/toUpper.js delete mode 100644 node_modules/lodash/transform.js delete mode 100644 node_modules/lodash/trim.js delete mode 100644 node_modules/lodash/trimEnd.js delete mode 100644 node_modules/lodash/trimStart.js delete mode 100644 node_modules/lodash/truncate.js delete mode 100644 node_modules/lodash/unary.js delete mode 100644 node_modules/lodash/unescape.js delete mode 100644 node_modules/lodash/union.js delete mode 100644 node_modules/lodash/unionBy.js delete mode 100644 node_modules/lodash/unionWith.js delete mode 100644 node_modules/lodash/uniq.js delete mode 100644 node_modules/lodash/uniqBy.js delete mode 100644 node_modules/lodash/uniqWith.js delete mode 100644 node_modules/lodash/uniqueId.js delete mode 100644 node_modules/lodash/unset.js delete mode 100644 node_modules/lodash/unzip.js delete mode 100644 node_modules/lodash/unzipWith.js delete mode 100644 node_modules/lodash/update.js delete mode 100644 node_modules/lodash/updateWith.js delete mode 100644 node_modules/lodash/upperCase.js delete mode 100644 node_modules/lodash/upperFirst.js delete mode 100644 node_modules/lodash/util.js delete mode 100644 node_modules/lodash/value.js delete mode 100644 node_modules/lodash/valueOf.js delete mode 100644 node_modules/lodash/values.js delete mode 100644 node_modules/lodash/valuesIn.js delete mode 100644 node_modules/lodash/without.js delete mode 100644 node_modules/lodash/words.js delete mode 100644 node_modules/lodash/wrap.js delete mode 100644 node_modules/lodash/wrapperAt.js delete mode 100644 node_modules/lodash/wrapperChain.js delete mode 100644 node_modules/lodash/wrapperLodash.js delete mode 100644 node_modules/lodash/wrapperReverse.js delete mode 100644 node_modules/lodash/wrapperValue.js delete mode 100644 node_modules/lodash/xor.js delete mode 100644 node_modules/lodash/xorBy.js delete mode 100644 node_modules/lodash/xorWith.js delete mode 100644 node_modules/lodash/zip.js delete mode 100644 node_modules/lodash/zipObject.js delete mode 100644 node_modules/lodash/zipObjectDeep.js delete mode 100644 node_modules/lodash/zipWith.js delete mode 100644 node_modules/lru-cache/LICENSE delete mode 100644 node_modules/lru-cache/README.md delete mode 100644 node_modules/lru-cache/index.js delete mode 100644 node_modules/lru-cache/package.json delete mode 100644 node_modules/mimic-fn/index.js delete mode 100644 node_modules/mimic-fn/license delete mode 100644 node_modules/mimic-fn/package.json delete mode 100644 node_modules/mimic-fn/readme.md delete mode 100644 node_modules/minimatch/README.md delete mode 100644 node_modules/minimatch/minimatch.js delete mode 100644 node_modules/minimatch/package.json delete mode 100644 node_modules/minimist/.eslintrc delete mode 100644 node_modules/minimist/.github/FUNDING.yml delete mode 100644 node_modules/minimist/.nycrc delete mode 100644 node_modules/minimist/CHANGELOG.md delete mode 100644 node_modules/minimist/LICENSE delete mode 100644 node_modules/minimist/README.md delete mode 100644 node_modules/minimist/example/parse.js delete mode 100644 node_modules/minimist/index.js delete mode 100644 node_modules/minimist/package.json delete mode 100644 node_modules/minimist/test/all_bool.js delete mode 100644 node_modules/minimist/test/bool.js delete mode 100644 node_modules/minimist/test/dash.js delete mode 100644 node_modules/minimist/test/default_bool.js delete mode 100644 node_modules/minimist/test/dotted.js delete mode 100644 node_modules/minimist/test/kv_short.js delete mode 100644 node_modules/minimist/test/long.js delete mode 100644 node_modules/minimist/test/num.js delete mode 100644 node_modules/minimist/test/parse.js delete mode 100644 node_modules/minimist/test/parse_modified.js delete mode 100644 node_modules/minimist/test/proto.js delete mode 100644 node_modules/minimist/test/short.js delete mode 100644 node_modules/minimist/test/stop_early.js delete mode 100644 node_modules/minimist/test/unknown.js delete mode 100644 node_modules/minimist/test/whitespace.js delete mode 100644 node_modules/mkdirp/LICENSE delete mode 100755 node_modules/mkdirp/bin/cmd.js delete mode 100644 node_modules/mkdirp/bin/usage.txt delete mode 100644 node_modules/mkdirp/index.js delete mode 100644 node_modules/mkdirp/package.json delete mode 100644 node_modules/mkdirp/readme.markdown delete mode 100644 node_modules/mute-stream/.nyc_output/33508.json delete mode 100644 node_modules/mute-stream/.nyc_output/33510.json delete mode 100644 node_modules/mute-stream/.travis.yml delete mode 100644 node_modules/mute-stream/LICENSE delete mode 100644 node_modules/mute-stream/README.md delete mode 100644 node_modules/mute-stream/coverage/lcov-report/__root__/index.html delete mode 100644 node_modules/mute-stream/coverage/lcov-report/__root__/mute.js.html delete mode 100644 node_modules/mute-stream/coverage/lcov-report/base.css delete mode 100644 node_modules/mute-stream/coverage/lcov-report/index.html delete mode 100644 node_modules/mute-stream/coverage/lcov-report/prettify.css delete mode 100644 node_modules/mute-stream/coverage/lcov-report/prettify.js delete mode 100644 node_modules/mute-stream/coverage/lcov-report/sort-arrow-sprite.png delete mode 100644 node_modules/mute-stream/coverage/lcov-report/sorter.js delete mode 100644 node_modules/mute-stream/coverage/lcov.info delete mode 100644 node_modules/mute-stream/mute.js delete mode 100644 node_modules/mute-stream/package.json delete mode 100644 node_modules/mute-stream/test/basic.js delete mode 100644 node_modules/node-fetch/LICENSE.md delete mode 100644 node_modules/node-fetch/README.md delete mode 100644 node_modules/node-fetch/browser.js delete mode 100644 node_modules/node-fetch/lib/index.es.js delete mode 100644 node_modules/node-fetch/lib/index.js delete mode 100644 node_modules/node-fetch/lib/index.mjs delete mode 100644 node_modules/node-fetch/package.json delete mode 100644 node_modules/node-rsa/gruntfile.js delete mode 100644 node_modules/node-rsa/src/encryptEngines/encryptEngines.js delete mode 100644 node_modules/node-rsa/src/encryptEngines/js.js delete mode 100644 node_modules/node-rsa/src/formats/components.js delete mode 100644 node_modules/node-rsa/src/libs/jsbn.js delete mode 100644 node_modules/node-rsa/src/schemes/pss.js delete mode 100644 node_modules/node-rsa/src/schemes/schemes.js delete mode 100644 node_modules/object-assign/index.js delete mode 100644 node_modules/object-assign/license delete mode 100644 node_modules/object-assign/package.json delete mode 100644 node_modules/object-assign/readme.md delete mode 100644 node_modules/once/LICENSE delete mode 100644 node_modules/once/README.md delete mode 100644 node_modules/once/once.js delete mode 100644 node_modules/once/package.json delete mode 100644 node_modules/onetime/index.js delete mode 100644 node_modules/onetime/license delete mode 100644 node_modules/onetime/package.json delete mode 100644 node_modules/onetime/readme.md delete mode 100644 node_modules/optionator/CHANGELOG.md delete mode 100644 node_modules/optionator/README.md delete mode 100644 node_modules/optionator/lib/index.js delete mode 100644 node_modules/optionator/package.json delete mode 100644 node_modules/os-tmpdir/index.js delete mode 100644 node_modules/os-tmpdir/license delete mode 100644 node_modules/os-tmpdir/package.json delete mode 100644 node_modules/os-tmpdir/readme.md delete mode 100644 node_modules/path-is-absolute/index.js delete mode 100644 node_modules/path-is-absolute/license delete mode 100644 node_modules/path-is-absolute/package.json delete mode 100644 node_modules/path-is-absolute/readme.md delete mode 100644 node_modules/path-is-inside/LICENSE.txt delete mode 100644 node_modules/path-is-inside/lib/path-is-inside.js delete mode 100644 node_modules/path-is-inside/package.json delete mode 100644 node_modules/pluralize/LICENSE delete mode 100644 node_modules/pluralize/Readme.md delete mode 100644 node_modules/pluralize/package.json delete mode 100644 node_modules/pluralize/pluralize.js delete mode 100644 node_modules/prelude-ls/CHANGELOG.md delete mode 100644 node_modules/prelude-ls/lib/Func.js delete mode 100644 node_modules/prelude-ls/lib/List.js delete mode 100644 node_modules/prelude-ls/lib/Num.js delete mode 100644 node_modules/prelude-ls/lib/Obj.js delete mode 100644 node_modules/prelude-ls/lib/Str.js delete mode 100644 node_modules/prelude-ls/lib/index.js delete mode 100644 node_modules/prelude-ls/package.json delete mode 100644 node_modules/prettier/THIRD-PARTY-NOTICES.md delete mode 100755 node_modules/prettier/bin/prettier.cjs delete mode 100644 node_modules/process-nextick-args/index.js delete mode 100644 node_modules/process-nextick-args/license.md delete mode 100644 node_modules/process-nextick-args/package.json delete mode 100644 node_modules/process-nextick-args/readme.md delete mode 100644 node_modules/progress/CHANGELOG.md delete mode 100644 node_modules/progress/LICENSE delete mode 100644 node_modules/progress/Makefile delete mode 100644 node_modules/progress/Readme.md delete mode 100644 node_modules/progress/index.js delete mode 100644 node_modules/progress/lib/node-progress.js delete mode 100644 node_modules/progress/package.json delete mode 100644 node_modules/pseudomap/LICENSE delete mode 100644 node_modules/pseudomap/README.md delete mode 100644 node_modules/pseudomap/map.js delete mode 100644 node_modules/pseudomap/package.json delete mode 100644 node_modules/pseudomap/pseudomap.js delete mode 100644 node_modules/pseudomap/test/basic.js delete mode 100644 node_modules/readable-stream/.travis.yml delete mode 100644 node_modules/readable-stream/CONTRIBUTING.md delete mode 100644 node_modules/readable-stream/GOVERNANCE.md delete mode 100644 node_modules/readable-stream/LICENSE delete mode 100644 node_modules/readable-stream/README.md delete mode 100644 node_modules/readable-stream/doc/wg-meetings/2015-01-30.md delete mode 100644 node_modules/readable-stream/duplex-browser.js delete mode 100644 node_modules/readable-stream/duplex.js delete mode 100644 node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/readable-stream/lib/internal/streams/BufferList.js delete mode 100644 node_modules/readable-stream/lib/internal/streams/destroy.js delete mode 100644 node_modules/readable-stream/lib/internal/streams/stream-browser.js delete mode 100644 node_modules/readable-stream/lib/internal/streams/stream.js delete mode 100644 node_modules/readable-stream/node_modules/isarray/.npmignore delete mode 100644 node_modules/readable-stream/node_modules/isarray/.travis.yml delete mode 100644 node_modules/readable-stream/node_modules/isarray/Makefile delete mode 100644 node_modules/readable-stream/node_modules/isarray/README.md delete mode 100644 node_modules/readable-stream/node_modules/isarray/component.json delete mode 100644 node_modules/readable-stream/node_modules/isarray/index.js delete mode 100644 node_modules/readable-stream/node_modules/isarray/package.json delete mode 100644 node_modules/readable-stream/node_modules/isarray/test.js delete mode 100644 node_modules/readable-stream/package.json delete mode 100644 node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/readable-stream/readable-browser.js delete mode 100644 node_modules/readable-stream/readable.js delete mode 100644 node_modules/readable-stream/transform.js delete mode 100644 node_modules/readable-stream/writable-browser.js delete mode 100644 node_modules/readable-stream/writable.js delete mode 100644 node_modules/regexpp/LICENSE delete mode 100644 node_modules/regexpp/README.md delete mode 100644 node_modules/regexpp/index.d.ts delete mode 100644 node_modules/regexpp/index.js delete mode 100644 node_modules/regexpp/index.js.map delete mode 100644 node_modules/regexpp/index.mjs delete mode 100644 node_modules/regexpp/index.mjs.map delete mode 100644 node_modules/regexpp/package.json delete mode 100644 node_modules/require-uncached/index.js delete mode 100644 node_modules/require-uncached/license delete mode 100644 node_modules/require-uncached/package.json delete mode 100644 node_modules/require-uncached/readme.md delete mode 100644 node_modules/resolve-from/index.js delete mode 100644 node_modules/resolve-from/license delete mode 100644 node_modules/resolve-from/package.json delete mode 100644 node_modules/resolve-from/readme.md delete mode 100644 node_modules/restore-cursor/index.js delete mode 100644 node_modules/restore-cursor/license delete mode 100644 node_modules/restore-cursor/package.json delete mode 100644 node_modules/restore-cursor/readme.md delete mode 100644 node_modules/rimraf/LICENSE delete mode 100644 node_modules/rimraf/README.md delete mode 100755 node_modules/rimraf/bin.js delete mode 100644 node_modules/rimraf/package.json delete mode 100644 node_modules/rimraf/rimraf.js delete mode 100644 node_modules/run-async/LICENSE delete mode 100644 node_modules/run-async/README.md delete mode 100644 node_modules/run-async/index.js delete mode 100644 node_modules/run-async/package.json delete mode 100644 node_modules/rx-lite-aggregates/package.json delete mode 100644 node_modules/rx-lite-aggregates/readme.md delete mode 100644 node_modules/rx-lite-aggregates/rx.lite.aggregates.js delete mode 100644 node_modules/rx-lite-aggregates/rx.lite.aggregates.map delete mode 100644 node_modules/rx-lite-aggregates/rx.lite.aggregates.min.js delete mode 100644 node_modules/rx-lite/package.json delete mode 100644 node_modules/rx-lite/readme.md delete mode 100644 node_modules/rx-lite/rx.lite.js delete mode 100644 node_modules/rx-lite/rx.lite.map delete mode 100644 node_modules/rx-lite/rx.lite.min.js delete mode 100644 node_modules/safe-buffer/LICENSE delete mode 100644 node_modules/safe-buffer/README.md delete mode 100644 node_modules/safe-buffer/index.d.ts delete mode 100644 node_modules/safe-buffer/index.js delete mode 100644 node_modules/safe-buffer/package.json delete mode 100644 node_modules/semver/LICENSE delete mode 100644 node_modules/semver/README.md delete mode 100755 node_modules/semver/bin/semver delete mode 100644 node_modules/semver/package.json delete mode 100644 node_modules/semver/range.bnf delete mode 100644 node_modules/semver/semver.js delete mode 100644 node_modules/shebang-command/index.js delete mode 100644 node_modules/shebang-command/license delete mode 100644 node_modules/shebang-command/package.json delete mode 100644 node_modules/shebang-command/readme.md delete mode 100644 node_modules/shebang-regex/index.js delete mode 100644 node_modules/shebang-regex/license delete mode 100644 node_modules/shebang-regex/package.json delete mode 100644 node_modules/shebang-regex/readme.md delete mode 100644 node_modules/signal-exit/LICENSE.txt delete mode 100644 node_modules/signal-exit/README.md delete mode 100644 node_modules/signal-exit/index.js delete mode 100644 node_modules/signal-exit/package.json delete mode 100644 node_modules/signal-exit/signals.js delete mode 100755 node_modules/slice-ansi/index.js delete mode 100644 node_modules/slice-ansi/license delete mode 100644 node_modules/slice-ansi/package.json delete mode 100755 node_modules/slice-ansi/readme.md delete mode 100644 node_modules/sprintf-js/.npmignore delete mode 100644 node_modules/sprintf-js/LICENSE delete mode 100644 node_modules/sprintf-js/README.md delete mode 100644 node_modules/sprintf-js/bower.json delete mode 100644 node_modules/sprintf-js/demo/angular.html delete mode 100644 node_modules/sprintf-js/dist/angular-sprintf.min.js delete mode 100644 node_modules/sprintf-js/dist/angular-sprintf.min.js.map delete mode 100644 node_modules/sprintf-js/dist/angular-sprintf.min.map delete mode 100644 node_modules/sprintf-js/dist/sprintf.min.js delete mode 100644 node_modules/sprintf-js/dist/sprintf.min.js.map delete mode 100644 node_modules/sprintf-js/dist/sprintf.min.map delete mode 100644 node_modules/sprintf-js/gruntfile.js delete mode 100644 node_modules/sprintf-js/package.json delete mode 100644 node_modules/sprintf-js/src/angular-sprintf.js delete mode 100644 node_modules/sprintf-js/src/sprintf.js delete mode 100644 node_modules/sprintf-js/test/test.js delete mode 100644 node_modules/string-width/index.js delete mode 100644 node_modules/string-width/license delete mode 100644 node_modules/string-width/node_modules/ansi-regex/index.js delete mode 100644 node_modules/string-width/node_modules/ansi-regex/license delete mode 100644 node_modules/string-width/node_modules/ansi-regex/package.json delete mode 100644 node_modules/string-width/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/string-width/node_modules/strip-ansi/index.js delete mode 100644 node_modules/string-width/node_modules/strip-ansi/license delete mode 100644 node_modules/string-width/node_modules/strip-ansi/package.json delete mode 100644 node_modules/string-width/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/string-width/package.json delete mode 100644 node_modules/string-width/readme.md delete mode 100644 node_modules/string_decoder/.travis.yml delete mode 100644 node_modules/string_decoder/LICENSE delete mode 100644 node_modules/string_decoder/README.md delete mode 100644 node_modules/string_decoder/lib/string_decoder.js delete mode 100644 node_modules/string_decoder/package.json delete mode 100644 node_modules/strip-ansi/index.js delete mode 100644 node_modules/strip-ansi/license delete mode 100644 node_modules/strip-ansi/package.json delete mode 100644 node_modules/strip-ansi/readme.md delete mode 100644 node_modules/strip-json-comments/index.js delete mode 100644 node_modules/strip-json-comments/license delete mode 100644 node_modules/strip-json-comments/package.json delete mode 100644 node_modules/strip-json-comments/readme.md delete mode 100644 node_modules/supports-color/index.js delete mode 100644 node_modules/supports-color/license delete mode 100644 node_modules/supports-color/package.json delete mode 100644 node_modules/supports-color/readme.md delete mode 100644 node_modules/table/LICENSE delete mode 100644 node_modules/table/README.md delete mode 100644 node_modules/table/dist/alignString.js delete mode 100644 node_modules/table/dist/alignTableData.js delete mode 100644 node_modules/table/dist/calculateCellHeight.js delete mode 100644 node_modules/table/dist/calculateCellWidthIndex.js delete mode 100644 node_modules/table/dist/calculateMaximumColumnWidthIndex.js delete mode 100644 node_modules/table/dist/calculateRowHeightIndex.js delete mode 100644 node_modules/table/dist/createStream.js delete mode 100644 node_modules/table/dist/drawBorder.js delete mode 100644 node_modules/table/dist/drawRow.js delete mode 100644 node_modules/table/dist/drawTable.js delete mode 100644 node_modules/table/dist/getBorderCharacters.js delete mode 100644 node_modules/table/dist/index.js delete mode 100644 node_modules/table/dist/makeConfig.js delete mode 100644 node_modules/table/dist/makeStreamConfig.js delete mode 100644 node_modules/table/dist/mapDataUsingRowHeightIndex.js delete mode 100644 node_modules/table/dist/padTableData.js delete mode 100644 node_modules/table/dist/schemas/config.json delete mode 100644 node_modules/table/dist/schemas/streamConfig.json delete mode 100644 node_modules/table/dist/stringifyTableData.js delete mode 100644 node_modules/table/dist/table.js delete mode 100644 node_modules/table/dist/truncateTableData.js delete mode 100644 node_modules/table/dist/validateConfig.js delete mode 100644 node_modules/table/dist/validateStreamConfig.js delete mode 100644 node_modules/table/dist/validateTableData.js delete mode 100644 node_modules/table/dist/wrapString.js delete mode 100644 node_modules/table/dist/wrapWord.js delete mode 100644 node_modules/table/node_modules/ansi-styles/index.js delete mode 100644 node_modules/table/node_modules/ansi-styles/license delete mode 100644 node_modules/table/node_modules/ansi-styles/package.json delete mode 100644 node_modules/table/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/table/node_modules/chalk/index.js delete mode 100644 node_modules/table/node_modules/chalk/index.js.flow delete mode 100644 node_modules/table/node_modules/chalk/license delete mode 100644 node_modules/table/node_modules/chalk/package.json delete mode 100644 node_modules/table/node_modules/chalk/readme.md delete mode 100644 node_modules/table/node_modules/chalk/templates.js delete mode 100644 node_modules/table/node_modules/chalk/types/index.d.ts delete mode 100644 node_modules/table/node_modules/supports-color/browser.js delete mode 100644 node_modules/table/node_modules/supports-color/index.js delete mode 100644 node_modules/table/node_modules/supports-color/license delete mode 100644 node_modules/table/node_modules/supports-color/package.json delete mode 100644 node_modules/table/node_modules/supports-color/readme.md delete mode 100644 node_modules/table/package.json delete mode 100644 node_modules/text-table/.travis.yml delete mode 100644 node_modules/text-table/LICENSE delete mode 100644 node_modules/text-table/example/align.js delete mode 100644 node_modules/text-table/example/center.js delete mode 100644 node_modules/text-table/example/dotalign.js delete mode 100644 node_modules/text-table/example/doubledot.js delete mode 100644 node_modules/text-table/example/table.js delete mode 100644 node_modules/text-table/index.js delete mode 100644 node_modules/text-table/package.json delete mode 100644 node_modules/text-table/readme.markdown delete mode 100644 node_modules/text-table/test/align.js delete mode 100644 node_modules/text-table/test/ansi-colors.js delete mode 100644 node_modules/text-table/test/center.js delete mode 100644 node_modules/text-table/test/dotalign.js delete mode 100644 node_modules/text-table/test/doubledot.js delete mode 100644 node_modules/text-table/test/table.js delete mode 100644 node_modules/through/.travis.yml delete mode 100644 node_modules/through/LICENSE.APACHE2 delete mode 100644 node_modules/through/LICENSE.MIT delete mode 100644 node_modules/through/index.js delete mode 100644 node_modules/through/package.json delete mode 100644 node_modules/through/readme.markdown delete mode 100644 node_modules/through/test/async.js delete mode 100644 node_modules/through/test/auto-destroy.js delete mode 100644 node_modules/through/test/buffering.js delete mode 100644 node_modules/through/test/end.js delete mode 100644 node_modules/through/test/index.js delete mode 100644 node_modules/tmp/LICENSE delete mode 100644 node_modules/tmp/README.md delete mode 100644 node_modules/tmp/lib/tmp.js delete mode 100644 node_modules/tmp/package.json delete mode 100644 node_modules/tr46/.npmignore delete mode 100644 node_modules/tr46/index.js delete mode 100644 node_modules/tr46/lib/.gitkeep delete mode 100644 node_modules/tr46/lib/mappingTable.json delete mode 100644 node_modules/tr46/package.json delete mode 100644 node_modules/type-check/README.md delete mode 100644 node_modules/type-check/lib/check.js delete mode 100644 node_modules/type-check/lib/index.js delete mode 100644 node_modules/type-check/lib/parse-type.js delete mode 100644 node_modules/type-check/package.json delete mode 100644 node_modules/typedarray/.travis.yml delete mode 100644 node_modules/typedarray/LICENSE delete mode 100644 node_modules/typedarray/example/tarray.js delete mode 100644 node_modules/typedarray/index.js delete mode 100644 node_modules/typedarray/package.json delete mode 100644 node_modules/typedarray/readme.markdown delete mode 100644 node_modules/typedarray/test/server/undef_globals.js delete mode 100644 node_modules/typedarray/test/tarray.js delete mode 100644 node_modules/util-deprecate/History.md delete mode 100644 node_modules/util-deprecate/LICENSE delete mode 100644 node_modules/util-deprecate/README.md delete mode 100644 node_modules/util-deprecate/browser.js delete mode 100644 node_modules/util-deprecate/node.js delete mode 100644 node_modules/util-deprecate/package.json delete mode 100755 node_modules/uuid/dist-node/bin/uuid delete mode 100644 node_modules/webidl-conversions/LICENSE.md delete mode 100644 node_modules/webidl-conversions/README.md delete mode 100644 node_modules/webidl-conversions/lib/index.js delete mode 100644 node_modules/webidl-conversions/package.json delete mode 100644 node_modules/whatwg-url/LICENSE.txt delete mode 100644 node_modules/whatwg-url/README.md delete mode 100644 node_modules/whatwg-url/lib/URL-impl.js delete mode 100644 node_modules/whatwg-url/lib/URL.js delete mode 100644 node_modules/whatwg-url/lib/public-api.js delete mode 100644 node_modules/whatwg-url/lib/url-state-machine.js delete mode 100644 node_modules/whatwg-url/lib/utils.js delete mode 100644 node_modules/whatwg-url/package.json delete mode 100644 node_modules/which/CHANGELOG.md delete mode 100644 node_modules/which/README.md delete mode 100755 node_modules/which/bin/which delete mode 100644 node_modules/which/package.json delete mode 100644 node_modules/which/which.js delete mode 100644 node_modules/wrappy/LICENSE delete mode 100644 node_modules/wrappy/README.md delete mode 100644 node_modules/wrappy/package.json delete mode 100644 node_modules/wrappy/wrappy.js delete mode 100644 node_modules/write/LICENSE delete mode 100644 node_modules/write/README.md delete mode 100644 node_modules/write/index.js delete mode 100644 node_modules/write/package.json delete mode 100644 node_modules/yallist/LICENSE delete mode 100644 node_modules/yallist/README.md delete mode 100644 node_modules/yallist/iterator.js delete mode 100644 node_modules/yallist/package.json delete mode 100644 node_modules/yallist/yallist.js create mode 100644 runner.js diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 32e5b6d93ade143f572818390b3a3b72625486f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMOKclO82-m`>osY~rcK&VKw8xYDm5*M8vzkQb=~kV4<+h`G@&hKU$M7Y?<~9P zm|z8&6XGEbJ#t0j$bkzzazPvrR}Ng@io}5vSNLaVHs1B4o-dtTDcw<qExKQbKP$FndN!qN_laAUg<8E7v`0vD^Kn37p2+K zlh59$?>H@&euP#6dll=Rj{TR6snc2p!$c+3DXZEu!$GH_Bnmlpx;VF6g)amJ& z>Dk%YGiT=>Id|@{x_nyKjGczhV!lot>Q|k%wP_pFRqc1J&Cq%$WK3N?HK2FHGT-cX zt?zlLGt=*ge7)#fmV2w=+ve)_c3_2@34W_CPX&fg9cPUOc4$*~>vn)}*FvjRbGIpu zxQkG)dQ22-Sbl(X$Yyg(^L@>2Sk=8dj;34As#~RDNLx&kdBa53e2aOC##TMeu-!)K z>hB!TQe`b>E^tPM5@+!6oryU?N$DG-7xC*Zb**BtRCz^+B)ACI;ALE-P3XX<@ELpo z_u*Uk34Vh=NS>S_=gCE~M4ls8$xEb0-XI2P5}VxR_PKbv9~b@vAptTYrh8ZQU5C02 zlrqaH+!`8g#TK?cZjLoPz&zZZ{9v;Z%l_+lam35MP$*0mj%L{xvDD?W-R|PjyizVd z-Cy;~<$+cIArqbL{>9{P^Ghk2HqNd4@oS zz`u(C$*-s@?2pL!ydMlFhaC#mx3IFp^m?2|CfG0))*n5`kskcR5P3z&DuVVnMG2OF Q{D*+-{?G3J?EZ(p05yb(U;qFB diff --git a/.env b/.env index 51bc43a..e9ec4b5 100644 --- a/.env +++ b/.env @@ -1,6 +1,33 @@ WM_CONSUMER_ID=39d025f8-e575-48cf-aa4e-22f89da4c16f -WM_KEY_VERSION=3 -WM_PRIVATE_KEY_PATH=C:\Users\jakew\OneDrive\Desktop\walmart-io-demo\public_key.pem +WM_KEY_VERSION=5 +WM_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC1hpiZMh1pyN6k +oDO95qK3L+/uY3M+sUpcnQkuNdFPBChh3jxEjn3zQLm88rdBTKQVqDD8E7g2KBHX +wYaSiKqqXcBkMkPfEEyTE/I//BjDF5dS+sgR6uIJmfsNVIVkY7laxo0STFCO3G+V +gkHTp8u/lJ5Aa8NSxu4BYlR0wBpze40aHYBeQw/+QuPvZzNeUf5YNC3rs5eId2f5 +N0rA2mZfY1myzE6UarW+5+WrWbkR0Bwrvs+8B/S8Jh4QFmh2EDaucisx96MXSH5S +3BuzBxqE9Txo4TKGu0y/aDmRU1Ij5WP88VnURU3vna1UF5n/pPw6InzvcQkeGS1o +thpyvCvtAgMBAAECggEABFOmXm5twvqOQpRa0/Gxo9YX/0iJoZPPdcPhLdF5N/lU +bqdUGeyojxoD41rkHviDXpXH9x9YxwevQp7QcrygjsU6Xv2YuekC3j69ycjcHKqf +UlygHdc3O2r/tHOr1G2RFhITIIbHEqSpqqY9ke7paxtaOQKojqpL/F1jdr8WduM9 +WQqbpgk+Hc6PIYVdUeALMX+IGNWbZiX6zqm85IKUdAA4/V0RCMl/j9ySBP6TsT06 +5IXK63urXl+AOJh1tHV79GP/waETEc6rQ8Ntn9p3HsUtsx6qiLSky7E2m2L3rdVd +LOzM2vVQDKr0SMGfx4/ZA79OJbLvJnwon9l4WdxmeQKBgQDb4L7sI4FnnD7uAaV5 +NTxt6ELJIpgxalTXbGiD6BoGN7LPbRfLJmKP4pGbNkfxtLZKsrTXOE1z5bTurRzY +dsH9pEmhBf7SdYtNrnPZCfOwpZaK/PyVdIggnaAiVYD6Q5urNcTltOA9SLdxGJyE +Ny8GpdB/ItmRCUkru4uk8L3KFQKBgQDTWOaBQRPvrL7sl4nVrTlfaxDTYulFgqSx +j3ag+RBhCwvFVNxb710moIEtThpDnaLNJCc6JQ+QebrsDP7Q49eOxqKbbbLOHGrt +akkeMROg6+MaL7HMAMsjCj7hBnpSjCg94ldHuJ0d8/PB60amIES/TTOyTsssxIlD +HcoX4JsIeQKBgDVHF/wP/mMksPrq2zWreKEJDmW+RDJ1GWm5kvmjW+r1xBYO0R0g +h/FlbPK3DGe86g7fjoI32kyi9FyBBeRNomPbUxv5X+2PHdoM03Vbu/ippvi2pF1y +hymgCBVJsp7xkt7BgJxIX6152TlGRWakGHj75LFpuF40ac52+zdUPiihAoGASmQU +XpKljctkOKruXUPn2eo5te4u5cSia81vmCGS3lWhAwhnuAR86Ue9sFC5detajpKX +LCQ3Ykc2wDeiyawpB5xrSAJI2buu93pd2j60BgSBn4oCLyhoWCEXGOXK0Jt83qt4 +xUn6I7zmo+9Iotjg2eU2uSB663sSRYmKxPTOHSECgYEAr9GDqLgORkKWwXhMAe3h +R0tYdGzWqpOiVNi1hcNMGfNwQekfIAM9NVarIib5JYPkSQQQWJZVXcTlR2YZbf9/ +P5VgNbNkV23Nq7j926cpbSlgb+UsZOCC5zTaJ0L6oePnK5R38v54y2XC9ccqW6FP +sVP5T4Vx30thw2cpbOY227Q= +-----END RSA PRIVATE KEY-----" KROGER_CLIENT_ID=shopwisestudentproject-bbcc01wh KROGER_CLIENT_SECRET=6VxuG2-h4NquxCbO_BNFNt3N8jfpwN56ALx8phl1 KROGER_LOCATION_ID= \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index 1662f1c..98ce4f2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -10,4 +10,4 @@ "sourceType": "module" }, "rules": {} -} \ No newline at end of file +} diff --git a/.gitignore b/.gitignore index 1d75794..d2f464c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,12 @@ -.DS_Store +/WalmartPipeline/walmart_CSVs /WalmartPipeline/__pycache__ /.vscode +/WalmartPipeline/TaxonomyBrowsing/taxonomy.json RecipesDataset.csv openapi_key.py .env /__pycache__ classified_ingredients.csv -/kroger_output \ No newline at end of file +/kroger_output +.DS_Store +node_modules/ \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit index 0dd9f79..b7807b0 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,2 +1 @@ -npm run format -npm run lint \ No newline at end of file +npm run format \ No newline at end of file diff --git a/KrogerPipeline/kroger_catalogue.js b/KrogerPipeline/kroger_catalogue.js index 54d3fae..ccd28ac 100644 --- a/KrogerPipeline/kroger_catalogue.js +++ b/KrogerPipeline/kroger_catalogue.js @@ -1,441 +1,815 @@ /** * kroger_catalogue.js * - * A single self-contained program with two modes: + * Finds Kroger stores near a zip code, searches all food categories at + * each store, and writes the results to food_catalogue.csv. * - * ── MODE 1: Build / refresh the full food catalogue ─────────────────────────── - * - * node kroger_catalogue.js - * - * Searches all food categories across all search terms (no location filter) - * and writes every unique product to: - * kroger_output/catalogue/food_catalogue.csv - * - * Includes a `store_ids` column (empty initially) that gets populated in - * mode 2. Safe to re-run — new products are merged in, existing rows - * (including any accumulated store_ids) are preserved. - * - * ── MODE 2: Enrich catalogue with store availability ───────────────────────── + * Each product gets a price column (semicolon-separated) that matches the + * store_ids column order - so price[0] is the price at store_ids[0], etc. * + * Usage: * node kroger_catalogue.js --zipcode=90210 * node kroger_catalogue.js --zipcode=90210 --stores=5 - * node kroger_catalogue.js --zipcode=90210 --stores=all - * - * 1. Looks up Kroger stores near the zip code (default: up to 10). - * 2. For each store, re-runs every food search term WITH that store's - * locationId — this gets store-specific results in one pass. - * 3. Any product returned that already exists in the catalogue gets that - * store's locationId appended to its `store_ids` column. - * 4. Any brand-new product found (not in catalogue yet) is added as a new row. - * 5. Writes the updated catalogue back to food_catalogue.csv. + * node kroger_catalogue.js --zipcode=90210 --dry-run * - * Call cost: ~220 terms × N stores = ~2,200 calls for 10 stores (well within - * the 10,000/day limit). You can safely run several zip codes per day. - * - * FLAGS: - * --zipcode=XXXXX 5-digit US zip code for store enrichment mode - * --stores=10 Max stores to query near the zip (default: 10, or "all") - * --radius=25 Search radius in miles for store lookup (default: 25) - * --out=./kroger_output Output root directory (default: ./kroger_output) - * --categories=a,b Comma-separated category subset (default: all) - * --dry-run Only process first 3 terms per category - * --status Print catalogue stats and exit - * - * EXAMPLES: - * node kroger_catalogue.js # build catalogue - * node kroger_catalogue.js --zipcode=30301 # enrich: Atlanta - * node kroger_catalogue.js --zipcode=10001 --stores=5 # enrich: 5 NYC stores - * node kroger_catalogue.js --zipcode=90210 --stores=all # enrich: all stores near Beverly Hills - * node kroger_catalogue.js --status # stats only + * Flags: + * --zipcode=XXXXX (required) zip code to find stores near + * --stores=10 max stores to query (default: 10, or "all") + * --radius=25 search radius in miles (default: 25) + * --dry-run only do 3 terms per category, good for testing + * --status print catalogue stats and exit */ -import "dotenv/config"; -import fetch from "node-fetch"; -import fs from "fs"; -import path from "path"; -import readline from "readline"; -import { fileURLToPath } from "url"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -// ─── Configuration ───────────────────────────────────────────────────────────── - -const BASE_URL = "https://api.kroger.com/v1"; -const TOKEN_URL = `${BASE_URL}/connect/oauth2/token`; -const PRODUCTS_URL = `${BASE_URL}/products`; +import dotenv from 'dotenv'; +dotenv.config(); +import fetch from 'node-fetch'; +import fs from 'fs'; +import path from 'path'; +import readline from 'readline'; + +// --- Configuration --- +const BASE_URL = 'https://api.kroger.com/v1'; +const TOKEN_URL = `${BASE_URL}/connect/oauth2/token`; +const PRODUCTS_URL = `${BASE_URL}/products`; const LOCATIONS_URL = `${BASE_URL}/locations`; -const PAGE_LIMIT = 50; -const MAX_PAGES = 20; +const PAGE_LIMIT = 50; +const MAX_PAGES = 20; const REQUEST_DELAY_MS = 350; -const MAX_RETRIES = 3; -const RETRY_DELAY_MS = 2000; - -// ─── CLI Args ────────────────────────────────────────────────────────────────── +const MAX_RETRIES = 3; +const RETRY_DELAY_MS = 2000; +// --- CLI Args --- const args = process.argv.slice(2); function getArg(prefix) { - return (args.find((a) => a.startsWith(prefix)) ?? "").replace(prefix, "") || ""; + return ( + (args.find((a) => a.startsWith(prefix)) ?? '').replace(prefix, '') || '' + ); } -const outRoot = getArg("--out=") || "./kroger_output"; -const zipcodeArg = getArg("--zipcode="); -const storesArg = getArg("--stores="); // number or "all" -const radiusArg = parseInt(getArg("--radius=") || "25", 10); -const categoryFilter = getArg("--categories="); -const isDryRun = args.includes("--dry-run"); -const statusOnly = args.includes("--status"); - -const catalogueDir = path.join(outRoot, "catalogue"); -const catalogueFile = path.join(catalogueDir, "food_catalogue.csv"); +const outRoot = getArg('--out=') || './kroger_output'; +const zipcodeArg = getArg('--zipcode='); +const storesArg = getArg('--stores='); // number or "all" +const radiusArg = parseInt(getArg('--radius=') || '25', 10); +const categoryFilter = getArg('--categories='); +const isDryRun = args.includes('--dry-run'); +const statusOnly = args.includes('--status'); -const isEnrichMode = !!zipcodeArg; -const maxStores = storesArg === "all" ? Infinity : parseInt(storesArg || "10", 10); +const catalogueDir = path.join(outRoot, 'catalogue'); +const catalogueFile = path.join(catalogueDir, 'food_catalogue.csv'); -// ─── Food Categories ─────────────────────────────────────────────────────────── +const maxStores = + storesArg === 'all' ? Infinity : parseInt(storesArg || '10', 10); -// ─── Search Terms — aligned with Walmart pipeline classifier tags ───────────── +// --- Food Categories --- +// --- Search Terms - aligned with Walmart pipeline classifier tags --- // Keys ARE the classifier tags written to the CSV `classifier` column. // Terms are drawn directly from the INGREDIENT_RULES keyword sets in the // Walmart classifier, pruned to terms broad enough to return Kroger results. const FOOD_CATEGORIES = { - PRODUCE: [ - "fresh vegetable", "fresh fruit", "organic vegetable", "organic fruit", - "broccoli", "cauliflower", "spinach", "kale", "romaine", "mixed greens", - "brussels sprout", "cabbage", "carrot", "celery", "cucumber", "zucchini", - "bell pepper", "jalapeño", "cherry tomato", "roma tomato", - "red onion", "yellow onion", "shallot", "scallion", "leek", - "garlic bulb", "portobello", "shiitake", "cremini mushroom", - "asparagus", "artichoke", "beet", "turnip", "parsnip", - "sweet potato", "russet potato", "red potato", "yukon gold", - "corn on cob", "green bean", "snap pea", "snow pea", "eggplant", - "fennel", "radish", "apple", "pear", "orange", "lemon", "lime", - "banana", "mango", "pineapple", "papaya", "kiwi", - "strawberry", "blueberry", "raspberry", "blackberry", - "watermelon", "cantaloupe", "peach", "nectarine", "plum", "cherry", - "avocado", "pomegranate", + 'fresh vegetable', + 'fresh fruit', + 'organic vegetable', + 'organic fruit', + 'broccoli', + 'cauliflower', + 'spinach', + 'kale', + 'romaine', + 'mixed greens', + 'brussels sprout', + 'cabbage', + 'carrot', + 'celery', + 'cucumber', + 'zucchini', + 'bell pepper', + 'jalapeño', + 'cherry tomato', + 'roma tomato', + 'red onion', + 'yellow onion', + 'shallot', + 'scallion', + 'leek', + 'garlic bulb', + 'portobello', + 'shiitake', + 'cremini mushroom', + 'asparagus', + 'artichoke', + 'beet', + 'turnip', + 'parsnip', + 'sweet potato', + 'russet potato', + 'red potato', + 'yukon gold', + 'corn on cob', + 'green bean', + 'snap pea', + 'snow pea', + 'eggplant', + 'fennel', + 'radish', + 'apple', + 'pear', + 'orange', + 'lemon', + 'lime', + 'banana', + 'mango', + 'pineapple', + 'papaya', + 'kiwi', + 'strawberry', + 'blueberry', + 'raspberry', + 'blackberry', + 'watermelon', + 'cantaloupe', + 'peach', + 'nectarine', + 'plum', + 'cherry', + 'avocado', + 'pomegranate', ], FRESH_HERB: [ - "fresh basil", "fresh parsley", "fresh cilantro", "fresh thyme", - "fresh rosemary", "fresh mint", "fresh dill", "fresh chives", - "fresh tarragon", "fresh oregano", "fresh sage", - "fresh lemongrass", "fresh ginger root", + 'fresh basil', + 'fresh parsley', + 'fresh cilantro', + 'fresh thyme', + 'fresh rosemary', + 'fresh mint', + 'fresh dill', + 'fresh chives', + 'fresh tarragon', + 'fresh oregano', + 'fresh sage', + 'fresh lemongrass', + 'fresh ginger root', ], PROTEIN: [ - "chicken breast", "chicken thigh", "chicken wing", "chicken drumstick", - "ground chicken", "whole chicken", "ground turkey", "turkey breast", - "ground beef", "beef chuck", "beef brisket", "ribeye", "sirloin", - "flank steak", "skirt steak", "beef roast", "beef short rib", - "pork chop", "pork loin", "pork belly", "pork shoulder", - "pork tenderloin", "baby back rib", "spiral ham", "ham steak", - "lamb chop", "lamb leg", "ground lamb", - "salmon fillet", "tuna fillet", "tilapia", "cod fillet", "halibut", - "mahi mahi", "sea bass", "trout", "catfish", - "shrimp", "scallop", "lobster tail", "crab leg", "crab meat", - "clam", "mussel", "oyster", - "bacon", "pancetta", "prosciutto", "salami", "pepperoni", - "chorizo", "andouille", "bratwurst", "italian sausage", - "breakfast sausage", - "deli turkey", "deli ham", "deli roast beef", "deli chicken", - "lunch meat", - "extra firm tofu", "silken tofu", "tempeh", "seitan", "edamame", - "black bean", "pinto bean", "kidney bean", "chickpea", "lentil", - "split pea", "navy bean", "cannellini bean", - "large eggs", "cage free egg", "organic egg", "egg whites", + 'chicken breast', + 'chicken thigh', + 'chicken wing', + 'chicken drumstick', + 'ground chicken', + 'whole chicken', + 'ground turkey', + 'turkey breast', + 'ground beef', + 'beef chuck', + 'beef brisket', + 'ribeye', + 'sirloin', + 'flank steak', + 'skirt steak', + 'beef roast', + 'beef short rib', + 'pork chop', + 'pork loin', + 'pork belly', + 'pork shoulder', + 'pork tenderloin', + 'baby back rib', + 'spiral ham', + 'ham steak', + 'lamb chop', + 'lamb leg', + 'ground lamb', + 'salmon fillet', + 'tuna fillet', + 'tilapia', + 'cod fillet', + 'halibut', + 'mahi mahi', + 'sea bass', + 'trout', + 'catfish', + 'shrimp', + 'scallop', + 'lobster tail', + 'crab leg', + 'crab meat', + 'clam', + 'mussel', + 'oyster', + 'bacon', + 'pancetta', + 'prosciutto', + 'salami', + 'pepperoni', + 'chorizo', + 'andouille', + 'bratwurst', + 'italian sausage', + 'breakfast sausage', + 'deli turkey', + 'deli ham', + 'deli roast beef', + 'deli chicken', + 'lunch meat', + 'extra firm tofu', + 'silken tofu', + 'tempeh', + 'seitan', + 'edamame', + 'black bean', + 'pinto bean', + 'kidney bean', + 'chickpea', + 'lentil', + 'split pea', + 'navy bean', + 'cannellini bean', + 'large eggs', + 'cage free egg', + 'organic egg', + 'egg whites', ], DAIRY: [ - "whole milk", "skim milk", "2% milk", "lactose free milk", "organic milk", - "buttermilk", "evaporated milk", "condensed milk", "powdered milk", - "heavy cream", "heavy whipping cream", "half and half", "light cream", - "sour cream", "creme fraiche", - "cream cheese", "mascarpone", "ricotta", "cottage cheese", - "fresh mozzarella", "burrata", - "cheddar cheese", "parmesan", "romano cheese", "asiago", - "gruyere", "swiss cheese", "gouda", "havarti", "fontina", "provolone", - "brie", "camembert", "gorgonzola", "blue cheese", - "feta cheese", "queso fresco", "monterey jack", "pepper jack", - "unsalted butter", "salted butter", "european butter", "ghee", - "greek yogurt", "plain yogurt", "whole milk yogurt", "skyr", "kefir", + 'whole milk', + 'skim milk', + '2% milk', + 'lactose free milk', + 'organic milk', + 'buttermilk', + 'evaporated milk', + 'condensed milk', + 'powdered milk', + 'heavy cream', + 'heavy whipping cream', + 'half and half', + 'light cream', + 'sour cream', + 'creme fraiche', + 'cream cheese', + 'mascarpone', + 'ricotta', + 'cottage cheese', + 'fresh mozzarella', + 'burrata', + 'cheddar cheese', + 'parmesan', + 'romano cheese', + 'asiago', + 'gruyere', + 'swiss cheese', + 'gouda', + 'havarti', + 'fontina', + 'provolone', + 'brie', + 'camembert', + 'gorgonzola', + 'blue cheese', + 'feta cheese', + 'queso fresco', + 'monterey jack', + 'pepper jack', + 'unsalted butter', + 'salted butter', + 'european butter', + 'ghee', + 'greek yogurt', + 'plain yogurt', + 'whole milk yogurt', + 'skyr', + 'kefir', ], GRAIN: [ - "all purpose flour", "bread flour", "whole wheat flour", - "cake flour", "almond flour", "coconut flour", "oat flour", "rye flour", - "chickpea flour", "rice flour", "cassava flour", - "white rice", "brown rice", "jasmine rice", "basmati rice", - "arborio rice", "wild rice", - "spaghetti", "penne", "rigatoni", "fusilli", "farfalle", - "linguine", "fettuccine", "angel hair", "orzo", "macaroni", - "lasagna noodle", "egg noodle", "ramen noodle", "soba noodle", - "udon noodle", "rice noodle", - "rolled oats", "quick oats", "steel cut oats", - "cornmeal", "polenta", "grits", "semolina", - "panko", "plain breadcrumb", - "sandwich bread", "whole wheat bread", "sourdough bread", - "french bread", "pita bread", "naan", "flatbread", - "flour tortilla", "corn tortilla", - "quinoa", "farro", "bulgur", "couscous", "barley", "millet", + 'all purpose flour', + 'bread flour', + 'whole wheat flour', + 'cake flour', + 'almond flour', + 'coconut flour', + 'oat flour', + 'rye flour', + 'chickpea flour', + 'rice flour', + 'cassava flour', + 'white rice', + 'brown rice', + 'jasmine rice', + 'basmati rice', + 'arborio rice', + 'wild rice', + 'spaghetti', + 'penne', + 'rigatoni', + 'fusilli', + 'farfalle', + 'linguine', + 'fettuccine', + 'angel hair', + 'orzo', + 'macaroni', + 'lasagna noodle', + 'egg noodle', + 'ramen noodle', + 'soba noodle', + 'udon noodle', + 'rice noodle', + 'rolled oats', + 'quick oats', + 'steel cut oats', + 'cornmeal', + 'polenta', + 'grits', + 'semolina', + 'panko', + 'plain breadcrumb', + 'sandwich bread', + 'whole wheat bread', + 'sourdough bread', + 'french bread', + 'pita bread', + 'naan', + 'flatbread', + 'flour tortilla', + 'corn tortilla', + 'quinoa', + 'farro', + 'bulgur', + 'couscous', + 'barley', + 'millet', ], BAKING: [ - "baking soda", "baking powder", "cream of tartar", - "active dry yeast", "instant yeast", - "vanilla extract", "almond extract", "peppermint extract", - "cocoa powder", "dutch process cocoa", - "chocolate chips", "white chocolate chips", "baking chocolate", - "powdered sugar", "granulated sugar", "cane sugar", - "brown sugar", "turbinado sugar", "demerara sugar", - "corn syrup", "molasses", - "cake mix", "brownie mix", "pancake mix", "waffle mix", "muffin mix", + 'baking soda', + 'baking powder', + 'cream of tartar', + 'active dry yeast', + 'instant yeast', + 'vanilla extract', + 'almond extract', + 'peppermint extract', + 'cocoa powder', + 'dutch process cocoa', + 'chocolate chips', + 'white chocolate chips', + 'baking chocolate', + 'powdered sugar', + 'granulated sugar', + 'cane sugar', + 'brown sugar', + 'turbinado sugar', + 'demerara sugar', + 'corn syrup', + 'molasses', + 'cake mix', + 'brownie mix', + 'pancake mix', + 'waffle mix', + 'muffin mix', ], SPICE: [ - "black pepper", "white pepper", "peppercorn", - "sea salt", "kosher salt", "himalayan salt", "garlic salt", - "garlic powder", "onion powder", - "cumin", "paprika", "smoked paprika", "chili powder", - "cayenne", "red pepper flake", - "cinnamon", "nutmeg", "oregano", "thyme", "rosemary", - "basil dried", "bay leaf", "turmeric", "coriander", - "fennel seed", "cardamom", "clove", "allspice", - "ground ginger", "mustard seed", "ground mustard", "fenugreek", - "sumac", "za'atar", "herbs de provence", "italian seasoning", - "cajun seasoning", "taco seasoning", - "curry powder", "garam masala", "ras el hanout", "five spice", - "lemon pepper", "steak seasoning", "bbq rub", - "vanilla bean", "saffron", "dill weed", "marjoram", + 'black pepper', + 'white pepper', + 'peppercorn', + 'sea salt', + 'kosher salt', + 'himalayan salt', + 'garlic salt', + 'garlic powder', + 'onion powder', + 'cumin', + 'paprika', + 'smoked paprika', + 'chili powder', + 'cayenne', + 'red pepper flake', + 'cinnamon', + 'nutmeg', + 'oregano', + 'thyme', + 'rosemary', + 'basil dried', + 'bay leaf', + 'turmeric', + 'coriander', + 'fennel seed', + 'cardamom', + 'clove', + 'allspice', + 'ground ginger', + 'mustard seed', + 'ground mustard', + 'fenugreek', + 'sumac', + "za'atar", + 'herbs de provence', + 'italian seasoning', + 'cajun seasoning', + 'taco seasoning', + 'curry powder', + 'garam masala', + 'ras el hanout', + 'five spice', + 'lemon pepper', + 'steak seasoning', + 'bbq rub', + 'vanilla bean', + 'saffron', + 'dill weed', + 'marjoram', ], OIL_FAT: [ - "olive oil", "extra virgin olive oil", - "vegetable oil", "canola oil", "sunflower oil", "safflower oil", - "corn oil", "soybean oil", "peanut oil", "grapeseed oil", - "avocado oil", "coconut oil", "sesame oil", "toasted sesame oil", - "walnut oil", "flaxseed oil", "truffle oil", - "cooking spray", "nonstick spray", - "shortening", "lard", "duck fat", "beef tallow", - "vegan butter", + 'olive oil', + 'extra virgin olive oil', + 'vegetable oil', + 'canola oil', + 'sunflower oil', + 'safflower oil', + 'corn oil', + 'soybean oil', + 'peanut oil', + 'grapeseed oil', + 'avocado oil', + 'coconut oil', + 'sesame oil', + 'toasted sesame oil', + 'walnut oil', + 'flaxseed oil', + 'truffle oil', + 'cooking spray', + 'nonstick spray', + 'shortening', + 'lard', + 'duck fat', + 'beef tallow', + 'vegan butter', ], CONDIMENT: [ - "soy sauce", "tamari", "liquid aminos", "coconut aminos", - "fish sauce", "oyster sauce", "hoisin sauce", "worcestershire sauce", - "hot sauce", "sriracha", "tabasco", "cholula", "sambal oelek", "gochujang", - "apple cider vinegar", "white vinegar", "red wine vinegar", - "white wine vinegar", "balsamic vinegar", "rice vinegar", "malt vinegar", - "dijon mustard", "whole grain mustard", "yellow mustard", - "ketchup", "mayonnaise", "relish", - "bbq sauce", "barbecue sauce", "steak sauce", "buffalo sauce", - "teriyaki sauce", "ponzu sauce", "sweet chili sauce", "stir fry sauce", - "tahini", "miso paste", - "tomato paste", "marinara sauce", "pasta sauce", "alfredo sauce", "pesto", - "enchilada sauce", "salsa verde", "salsa jar", - "pickle", "dill pickle", "pickled jalapeno", "giardiniera", - "capers", "sun dried tomato", "roasted red pepper", - "horseradish", "wasabi paste", + 'soy sauce', + 'tamari', + 'liquid aminos', + 'coconut aminos', + 'fish sauce', + 'oyster sauce', + 'hoisin sauce', + 'worcestershire sauce', + 'hot sauce', + 'sriracha', + 'tabasco', + 'cholula', + 'sambal oelek', + 'gochujang', + 'apple cider vinegar', + 'white vinegar', + 'red wine vinegar', + 'white wine vinegar', + 'balsamic vinegar', + 'rice vinegar', + 'malt vinegar', + 'dijon mustard', + 'whole grain mustard', + 'yellow mustard', + 'ketchup', + 'mayonnaise', + 'relish', + 'bbq sauce', + 'barbecue sauce', + 'steak sauce', + 'buffalo sauce', + 'teriyaki sauce', + 'ponzu sauce', + 'sweet chili sauce', + 'stir fry sauce', + 'tahini', + 'miso paste', + 'tomato paste', + 'marinara sauce', + 'pasta sauce', + 'alfredo sauce', + 'pesto', + 'enchilada sauce', + 'salsa verde', + 'salsa jar', + 'pickle', + 'dill pickle', + 'pickled jalapeno', + 'giardiniera', + 'capers', + 'sun dried tomato', + 'roasted red pepper', + 'horseradish', + 'wasabi paste', ], CANNED_GOOD: [ - "canned tomato", "diced tomato", "crushed tomato", "whole peeled tomato", - "san marzano", "fire roasted tomato", - "canned black bean", "canned chickpea", "canned kidney bean", - "canned pinto bean", "canned navy bean", "canned cannellini", - "canned corn", "canned pumpkin", "canned artichoke", "canned mushroom", - "canned water chestnut", "canned green bean", - "coconut milk can", "coconut cream", - "chicken broth", "beef broth", "vegetable broth", - "chicken stock", "beef stock", "bone broth", - "canned tuna", "canned salmon", "canned sardine", "canned anchovy", - "canned crab", "canned clam", - "chipotle in adobo", "green chili can", + 'canned tomato', + 'diced tomato', + 'crushed tomato', + 'whole peeled tomato', + 'san marzano', + 'fire roasted tomato', + 'canned black bean', + 'canned chickpea', + 'canned kidney bean', + 'canned pinto bean', + 'canned navy bean', + 'canned cannellini', + 'canned corn', + 'canned pumpkin', + 'canned artichoke', + 'canned mushroom', + 'canned water chestnut', + 'canned green bean', + 'coconut milk can', + 'coconut cream', + 'chicken broth', + 'beef broth', + 'vegetable broth', + 'chicken stock', + 'beef stock', + 'bone broth', + 'canned tuna', + 'canned salmon', + 'canned sardine', + 'canned anchovy', + 'canned crab', + 'canned clam', + 'chipotle in adobo', + 'green chili can', ], SWEETENER: [ - "honey", "raw honey", "manuka honey", - "maple syrup", "pure maple syrup", - "agave nectar", "date syrup", - "stevia", "monk fruit sweetener", "erythritol", + 'honey', + 'raw honey', + 'manuka honey', + 'maple syrup', + 'pure maple syrup', + 'agave nectar', + 'date syrup', + 'stevia', + 'monk fruit sweetener', + 'erythritol', ], NUT_SEED: [ - "raw almonds", "sliced almonds", "slivered almonds", - "walnut halves", "pecans", "cashews", "pistachios", - "pine nuts", "hazelnuts", "macadamia nut", "brazil nut", - "peanut butter", "almond butter", "cashew butter", - "sunflower seed", "pumpkin seed", "pepita", - "sesame seed", "chia seed", "flaxseed", "hemp seed", "poppy seed", + 'raw almonds', + 'sliced almonds', + 'slivered almonds', + 'walnut halves', + 'pecans', + 'cashews', + 'pistachios', + 'pine nuts', + 'hazelnuts', + 'macadamia nut', + 'brazil nut', + 'peanut butter', + 'almond butter', + 'cashew butter', + 'sunflower seed', + 'pumpkin seed', + 'pepita', + 'sesame seed', + 'chia seed', + 'flaxseed', + 'hemp seed', + 'poppy seed', ], THICKENER: [ - "cornstarch", "arrowroot powder", "tapioca starch", - "unflavored gelatin", "agar agar", "xanthan gum", "guar gum", "pectin", + 'cornstarch', + 'arrowroot powder', + 'tapioca starch', + 'unflavored gelatin', + 'agar agar', + 'xanthan gum', + 'guar gum', + 'pectin', ], ALCOHOL: [ - "cooking wine", "dry sherry", "mirin", "sake", "rice wine", "shaoxing wine", + 'cooking wine', + 'dry sherry', + 'mirin', + 'sake', + 'rice wine', + 'shaoxing wine', ], OTHER_INGR: [ - "nutritional yeast", "dried mushroom", "nori sheet", "kombu", "wakame", - "dashi", "bonito flake", "matcha powder", - "rose water", "liquid smoke", - "raisins", "dried cranberry", "dried apricot", "dried fig", - "dried mango", "dried date", - "canned peach", "canned pear", "canned pineapple", - "lemon juice", "lime juice", - "jam", "jelly", "fruit preserves", "marmalade", "chutney", - "caramel sauce", "sweetened condensed milk", - "cream of mushroom soup", "cream of chicken soup", - "harissa", "red curry paste", "green curry paste", "yellow curry paste", - "coconut butter", "cacao nibs", "vital wheat gluten", "citric acid", + 'nutritional yeast', + 'dried mushroom', + 'nori sheet', + 'kombu', + 'wakame', + 'dashi', + 'bonito flake', + 'matcha powder', + 'rose water', + 'liquid smoke', + 'raisins', + 'dried cranberry', + 'dried apricot', + 'dried fig', + 'dried mango', + 'dried date', + 'canned peach', + 'canned pear', + 'canned pineapple', + 'lemon juice', + 'lime juice', + 'jam', + 'jelly', + 'fruit preserves', + 'marmalade', + 'chutney', + 'caramel sauce', + 'sweetened condensed milk', + 'cream of mushroom soup', + 'cream of chicken soup', + 'harissa', + 'red curry paste', + 'green curry paste', + 'yellow curry paste', + 'coconut butter', + 'cacao nibs', + 'vital wheat gluten', + 'citric acid', ], - }; -// ─── CSV Schema ──────────────────────────────────────────────────────────────── - +// --- CSV Schema --- const CSV_HEADERS = [ - "productId", - "upc", - "brand", - "description", - "categories", - "size", - "soldBy", - "temperature", - "soldInStore", - "countryOrigin", - "aisleLocations", - "itemsFacets", - "image_url", - "classifier", // ← Walmart classifier tag (PRODUCE, PROTEIN, DAIRY, etc.) - "search_keyword", // ← the specific term that first found this product - "store_ids", // ← semicolon-separated list of locationIds where found + 'productId', + 'upc', + 'brand', + 'description', + 'categories', + 'size', + 'soldBy', + 'temperature', + 'soldInStore', + 'countryOrigin', + 'aisleLocations', + 'itemsFacets', + 'image_url', + 'classifier', // ← Walmart classifier tag (PRODUCE, PROTEIN, DAIRY, etc.) + 'search_keyword', // ← the specific term that first found this product + 'store_ids', // ← semicolon-separated locationIds (in order found) + 'price', // ← semicolon-separated prices matching store_ids order ]; -// ─── Token Manager ───────────────────────────────────────────────────────────── - +// --- Token Manager --- class TokenManager { constructor(clientId, clientSecret) { - if (!clientId || !clientSecret) throw new Error( - "Missing KROGER_CLIENT_ID or KROGER_CLIENT_SECRET in .env" + if (!clientId || !clientSecret) + throw new Error( + 'Missing KROGER_CLIENT_ID or KROGER_CLIENT_SECRET in .env', + ); + this.credentials = Buffer.from(`${clientId}:${clientSecret}`).toString( + 'base64', ); - this.credentials = Buffer.from(`${clientId}:${clientSecret}`).toString("base64"); this.accessToken = null; - this.expiresAt = 0; + this.expiresAt = 0; } async getToken() { - if (this.accessToken && Date.now() < this.expiresAt - 60_000) return this.accessToken; - process.stdout.write(" Refreshing token... "); + if (this.accessToken && Date.now() < this.expiresAt - 60_000) + return this.accessToken; + process.stdout.write(' Refreshing token... '); const res = await fetch(TOKEN_URL, { - method: "POST", + method: 'POST', headers: { - "Content-Type": "application/x-www-form-urlencoded", + 'Content-Type': 'application/x-www-form-urlencoded', Authorization: `Basic ${this.credentials}`, }, - body: "grant_type=client_credentials&scope=product.compact", + body: 'grant_type=client_credentials&scope=product.compact', }); - if (!res.ok) throw new Error(`Token failed (${res.status}): ${await res.text()}`); + if (!res.ok) + throw new Error(`Token failed (${res.status}): ${await res.text()}`); const data = await res.json(); this.accessToken = data.access_token; - this.expiresAt = Date.now() + data.expires_in * 1000; + this.expiresAt = Date.now() + data.expires_in * 1000; console.log(`OK (${Math.round(data.expires_in / 60)} min)`); return this.accessToken; } } -// ─── Helpers ─────────────────────────────────────────────────────────────────── - -function sleep(ms) { return new Promise((r) => setTimeout(r, ms)); } +// --- Helpers --- +function sleep(ms) { + return new Promise((r) => setTimeout(r, ms)); +} function esc(v) { - if (v === null || v === undefined) return ""; + if (v === null || v === undefined) return ''; const s = String(v); - return (s.includes(",") || s.includes('"') || s.includes("\n")) - ? `"${s.replace(/"/g, '""')}"` : s; + return s.includes(',') || s.includes('"') || s.includes('\n') + ? `"${s.replace(/"/g, '""')}"` + : s; } function parseCsvLine(line) { const cols = []; - let cur = "", inQ = false; + let cur = '', + inQ = false; for (let i = 0; i < line.length; i++) { const ch = line[i]; if (ch === '"') { - if (inQ && line[i+1] === '"') { cur += '"'; i++; } - else inQ = !inQ; - } else if (ch === "," && !inQ) { cols.push(cur); cur = ""; } - else cur += ch; + if (inQ && line[i + 1] === '"') { + cur += '"'; + i++; + } else inQ = !inQ; + } else if (ch === ',' && !inQ) { + cols.push(cur); + cur = ''; + } else cur += ch; } cols.push(cur); return cols; } async function* streamCsvRows(filePath) { - const rl = readline.createInterface({ input: fs.createReadStream(filePath), crlfDelay: Infinity }); + const rl = readline.createInterface({ + input: fs.createReadStream(filePath), + crlfDelay: Infinity, + }); let headers = null; for await (const line of rl) { if (!line.trim()) continue; const cols = parseCsvLine(line); - if (!headers) { headers = cols; continue; } + if (!headers) { + headers = cols; + continue; + } const row = {}; - headers.forEach((h, i) => { row[h] = cols[i] ?? ""; }); + headers.forEach((h, i) => { + row[h] = cols[i] ?? ''; + }); yield row; } } -function productToFields(p, classifier = "", searchKeyword = "") { +function productToFields(p, classifier = '', searchKeyword = '') { const items = p.items?.[0] ?? {}; - const frontImg = (p.images ?? []).find((img) => img.perspective === "front" && img.featured); + const frontImg = (p.images ?? []).find( + (img) => img.perspective === 'front' && img.featured, + ); const imgUrl = frontImg - ? ((frontImg.sizes ?? []).find((s) => s.id === "large")?.url ?? frontImg.sizes?.[0]?.url ?? "") - : ""; + ? ((frontImg.sizes ?? []).find((s) => s.id === 'large')?.url ?? + frontImg.sizes?.[0]?.url ?? + '') + : ''; return { - productId: p.productId ?? "", - upc: p.upc ?? "", - brand: p.brand ?? "", - description: p.description ?? "", - categories: (p.categories ?? []).join("; "), - size: items.size ?? "", - soldBy: items.soldBy ?? "", - temperature: items.temperature?.indicator ?? "", - soldInStore: items.soldInStore ?? "", - countryOrigin: p.countryOrigin ?? "", - aisleLocations: (p.aisleLocations ?? []).map((a) => a.description).join("; "), - itemsFacets: (p.itemsFacets ?? []).join("; "), - image_url: imgUrl, - classifier: classifier, // e.g. PRODUCE, PROTEIN, DAIRY … - search_keyword: searchKeyword, // e.g. "chicken breast", "raw almonds" … - store_ids: "", // filled in during enrich mode + productId: p.productId ?? '', + upc: p.upc ?? '', + brand: p.brand ?? '', + description: p.description ?? '', + categories: (p.categories ?? []).join('; '), + size: items.size ?? '', + soldBy: items.soldBy ?? '', + temperature: items.temperature?.indicator ?? '', + soldInStore: items.soldInStore ?? '', + countryOrigin: p.countryOrigin ?? '', + aisleLocations: (p.aisleLocations ?? []) + .map((a) => a.description) + .join('; '), + itemsFacets: (p.itemsFacets ?? []).join('; '), + image_url: imgUrl, + classifier: classifier, // e.g. PRODUCE, PROTEIN, DAIRY … + search_keyword: searchKeyword, // e.g. "chicken breast", "raw almonds" … + store_ids: '', // filled in per store during collection + price: '', // filled in per store during collection }; } function rowToCsv(row) { - return CSV_HEADERS.map((h) => esc(row[h])).join(","); + return CSV_HEADERS.map((h) => esc(row[h])).join(','); } -// ─── API: Fetch products for a single search term ───────────────────────────── - +// --- API: Fetch products for a single search term --- async function fetchProductsForTerm(term, locationId, tokenMgr, dryRun) { const products = []; const maxPages = dryRun ? 1 : MAX_PAGES; for (let page = 0; page < maxPages; page++) { const params = new URLSearchParams({ - "filter.term": term, - "filter.limit": PAGE_LIMIT, + 'filter.term': term, + 'filter.limit': PAGE_LIMIT, }); - // Only send filter.start for pages after the first — some Kroger + // Only send filter.start for pages after the first - some Kroger // endpoints reject start=1 even though it should be a valid value - if (page > 0) params.set("filter.start", page * PAGE_LIMIT + 1); - if (locationId) params.set("filter.locationId", locationId); + if (page > 0) params.set('filter.start', page * PAGE_LIMIT + 1); + if (locationId) params.set('filter.locationId', locationId); let token = await tokenMgr.getToken(); let data; @@ -445,20 +819,28 @@ async function fetchProductsForTerm(term, locationId, tokenMgr, dryRun) { let res; try { res = await fetch(`${PRODUCTS_URL}?${params}`, { - headers: { Authorization: `Bearer ${token}`, Accept: "application/json" }, + headers: { + Authorization: `Bearer ${token}`, + Accept: 'application/json', + }, }); } catch (networkErr) { - if (attempt < MAX_RETRIES) { await sleep(RETRY_DELAY_MS * attempt); continue; } + if (attempt < MAX_RETRIES) { + await sleep(RETRY_DELAY_MS * attempt); + continue; + } throw networkErr; } if (res.status === 400) { - // Bad request — Kroger rejects certain terms or parameter combos. + // Bad request - Kroger rejects certain terms or parameter combos. // Not retryable; skip this term entirely. - const body = await res.text().catch(() => ""); + const body = await res.text().catch(() => ''); throw Object.assign( - new Error(`Skipped (400 Bad Request)${body ? ": " + body.slice(0, 120) : ""}`), - { code: "BAD_REQUEST" } + new Error( + `Skipped (400 Bad Request)${body ? ': ' + body.slice(0, 120) : ''}`, + ), + { code: 'BAD_REQUEST' }, ); } @@ -470,22 +852,27 @@ async function fetchProductsForTerm(term, locationId, tokenMgr, dryRun) { if (res.status === 429) { const wait = RETRY_DELAY_MS * attempt; - process.stdout.write(`[rate-limited, waiting ${wait/1000}s] `); + process.stdout.write(`[rate-limited, waiting ${wait / 1000}s] `); await sleep(wait); continue; } if (res.status === 500 || res.status === 503) { - if (attempt < MAX_RETRIES) { await sleep(RETRY_DELAY_MS * attempt); continue; } - throw new Error(`Server error ${res.status} after ${MAX_RETRIES} retries`); + if (attempt < MAX_RETRIES) { + await sleep(RETRY_DELAY_MS * attempt); + continue; + } + throw new Error( + `Server error ${res.status} after ${MAX_RETRIES} retries`, + ); } if (!res.ok) { - const body = await res.text().catch(() => ""); + const body = await res.text().catch(() => ''); throw new Error(`HTTP ${res.status}: ${body.slice(0, 120)}`); } - data = await res.json(); + data = await res.json(); pageOk = true; break; } @@ -501,8 +888,7 @@ async function fetchProductsForTerm(term, locationId, tokenMgr, dryRun) { return products; } -// ─── API: Look up stores near a zip code ────────────────────────────────────── - +// --- API: Look up stores near a zip code --- async function fetchStoresNearZip(zip, tokenMgr) { // Validate zip if (!/^\d{5}$/.test(zip)) { @@ -510,37 +896,43 @@ async function fetchStoresNearZip(zip, tokenMgr) { } const params = new URLSearchParams({ - "filter.zipCode.near": zip, - "filter.radiusInMiles": Math.min(radiusArg, 100), - "filter.limit": 200, + 'filter.zipCode.near': zip, + 'filter.radiusInMiles': Math.min(radiusArg, 100), + 'filter.limit': 200, }); const token = await tokenMgr.getToken(); const res = await fetch(`${LOCATIONS_URL}?${params}`, { - headers: { Authorization: `Bearer ${token}`, Accept: "application/json" }, + headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' }, }); - if (!res.ok) throw new Error(`Location lookup failed (${res.status}): ${await res.text()}`); + if (!res.ok) + throw new Error( + `Location lookup failed (${res.status}): ${await res.text()}`, + ); - const data = await res.json(); - const stores = (data?.data ?? []).slice(0, maxStores === Infinity ? undefined : maxStores); + const data = await res.json(); + const stores = (data?.data ?? []).slice( + 0, + maxStores === Infinity ? undefined : maxStores, + ); if (stores.length === 0) { throw new Error( - `No stores found within ${radiusArg} miles of ${zip}. Try --radius=50` + `No stores found within ${radiusArg} miles of ${zip}. Try --radius=50`, ); } return stores.map((s) => ({ locationId: s.locationId, - name: s.name ?? "", - chain: s.chain ?? "", - address: `${s.address?.addressLine1 ?? ""}, ${s.address?.city ?? ""}, ${s.address?.state ?? ""} ${s.address?.zipCode ?? ""}`.trim(), + name: s.name ?? '', + chain: s.chain ?? '', + address: + `${s.address?.addressLine1 ?? ''}, ${s.address?.city ?? ''}, ${s.address?.state ?? ''} ${s.address?.zipCode ?? ''}`.trim(), })); } -// ─── Catalogue I/O ──────────────────────────────────────────────────────────── - -/** Load existing catalogue CSV into a Map: productId → row object */ +// --- Catalogue I/O --- +/** Load existing catalogue CSV into a Map: productId -> row object */ async function loadCatalogue() { const catalogue = new Map(); if (!fs.existsSync(catalogueFile)) return catalogue; @@ -553,19 +945,21 @@ async function loadCatalogue() { /** Write the full catalogue Map to disk */ function saveCatalogue(catalogue) { - const header = CSV_HEADERS.join(","); - const rows = Array.from(catalogue.values()).map(rowToCsv); - fs.writeFileSync(catalogueFile, [header, ...rows].join("\n"), "utf8"); + const header = CSV_HEADERS.join(','); + const rows = Array.from(catalogue.values()).map(rowToCsv); + fs.writeFileSync(catalogueFile, [header, ...rows].join('\n'), 'utf8'); } -// ─── Core: Run search terms and collect results ─────────────────────────────── - +// --- Core: Run search terms and collect results --- async function runSearchTerms(locationId, tokenMgr) { const categoryKeys = categoryFilter - ? categoryFilter.split(",").map((s) => s.trim()).filter((k) => FOOD_CATEGORIES[k]) + ? categoryFilter + .split(',') + .map((s) => s.trim()) + .filter((k) => FOOD_CATEGORIES[k]) : Object.keys(FOOD_CATEGORIES); - // productId → { product, classifier, search_keyword } + // productId -> { product, classifier, search_keyword } const results = new Map(); for (const classifier of categoryKeys) { @@ -577,19 +971,28 @@ async function runSearchTerms(locationId, tokenMgr) { for (const term of terms) { process.stdout.write(` "${term}" ... `); try { - const products = await fetchProductsForTerm(term, locationId, tokenMgr, isDryRun); + const products = await fetchProductsForTerm( + term, + locationId, + tokenMgr, + isDryRun, + ); let newCount = 0; for (const p of products) { if (p.productId && !results.has(p.productId)) { // Tag with the classifier and exact term that first found this product - results.set(p.productId, { product: p, classifier, search_keyword: term }); + results.set(p.productId, { + product: p, + classifier, + search_keyword: term, + }); newCount++; } } process.stdout.write(`${products.length} fetched, ${newCount} new\n`); await sleep(REQUEST_DELAY_MS); } catch (err) { - if (err.code === "BAD_REQUEST") { + if (err.code === 'BAD_REQUEST') { process.stdout.write(`skipped (400)\n`); } else { process.stdout.write(`ERROR: ${err.message}\n`); @@ -602,22 +1005,27 @@ async function runSearchTerms(locationId, tokenMgr) { return results; } -// ─── Status ─────────────────────────────────────────────────────────────────── - +// --- Status --- async function printStatus() { if (!fs.existsSync(catalogueFile)) { - console.log("\n No catalogue found. Run without --zipcode to build it first.\n"); + console.log( + '\n No catalogue found yet. Run with --zipcode to build one.\n', + ); return; } - const catalogue = await loadCatalogue(); + const catalogue = await loadCatalogue(); const storeIdSet = new Set(); - let withStores = 0; + let withStores = 0; for (const row of catalogue.values()) { if (row.store_ids) { withStores++; - row.store_ids.split(";").map((s) => s.trim()).filter(Boolean).forEach((id) => storeIdSet.add(id)); + row.store_ids + .split(';') + .map((s) => s.trim()) + .filter(Boolean) + .forEach((id) => storeIdSet.add(id)); } } @@ -625,160 +1033,137 @@ async function printStatus() { console.log(` File : ${catalogueFile}`); console.log(` Total products : ${catalogue.size.toLocaleString()}`); console.log(` With store data : ${withStores.toLocaleString()} products`); - console.log(` Stores indexed : ${storeIdSet.size.toLocaleString()} unique store IDs`); - console.log(` Coverage : ${catalogue.size ? Math.round((withStores / catalogue.size) * 100) : 0}% of products have at least 1 store\n`); + console.log( + ` Stores indexed : ${storeIdSet.size.toLocaleString()} unique store IDs`, + ); + console.log( + ` Coverage : ${catalogue.size ? Math.round((withStores / catalogue.size) * 100) : 0}% of products have at least 1 store\n`, + ); } -// ─── Mode 1: Build / refresh catalogue ─────────────────────────────────────── - +// finds stores near a zip, queries each one, and compiles the results into food_catalogue.csv +// price[i] corresponds to store_ids[i] - they're kept in the same order async function buildCatalogue(tokenMgr) { - console.log("\n── Build Mode: Full Food Catalogue ────────────────────────────────────────"); - console.log(` Output: ${catalogueFile}`); - console.log(` Dry run: ${isDryRun}\n`); - - // Load any existing catalogue so we don't lose accumulated store_ids - console.log(" Loading existing catalogue (if any)..."); - const catalogue = await loadCatalogue(); - const before = catalogue.size; - console.log(` ${before > 0 ? `Found ${before.toLocaleString()} existing products — will merge` : "No existing catalogue — creating fresh"}\n`); - - const freshProducts = await runSearchTerms(null, tokenMgr); - - // Merge: add new products, update metadata on existing ones (preserve store_ids) - let added = 0, updated = 0; - for (const [productId, { product: p, classifier, search_keyword }] of freshProducts) { - const fields = productToFields(p, classifier, search_keyword); - if (catalogue.has(productId)) { - const existing = catalogue.get(productId); - // Update product fields; preserve accumulated store_ids from previous runs - catalogue.set(productId, { ...fields, store_ids: existing.store_ids ?? "" }); - updated++; - } else { - catalogue.set(productId, fields); - added++; - } - } - - saveCatalogue(catalogue); - - console.log(`\n── Done ───────────────────────────────────────────────────────────────────`); - console.log(` Products added : ${added.toLocaleString()}`); - console.log(` Products updated : ${updated.toLocaleString()}`); - console.log(` Total in catalogue: ${catalogue.size.toLocaleString()}`); - console.log(` Saved to: ${catalogueFile}\n`); -} - -// ─── Mode 2: Enrich with store availability ─────────────────────────────────── - -async function enrichWithStores(tokenMgr) { const zip = zipcodeArg; - console.log(`\n── Enrich Mode: Store Availability near ${zip} ────────────────────────────`); - - if (!fs.existsSync(catalogueFile)) { - console.error(`\n ERROR: No catalogue found at ${catalogueFile}`); - console.error(` Run without --zipcode first to build the catalogue.\n`); - process.exit(1); - } + console.log(`\nBuilding food catalogue for stores near ${zip}`); + console.log(` Output: ${catalogueFile}`); + if (isDryRun) console.log(` Dry run: 3 terms per category only\n`); // 1. Find stores near zip console.log(`\n Finding stores within ${radiusArg} miles of ${zip}...`); const stores = await fetchStoresNearZip(zip, tokenMgr); - const storeLimit = maxStores === Infinity ? stores.length : Math.min(maxStores, stores.length); - console.log(`\n Found ${stores.length} store(s) — querying ${storeLimit}:\n`); + const storeLimit = + maxStores === Infinity ? stores.length : Math.min(maxStores, stores.length); + console.log( + `\n Found ${stores.length} store(s) - querying ${storeLimit}:\n`, + ); stores.slice(0, storeLimit).forEach((s, i) => { - console.log(` ${String(i+1).padStart(2)}. [${s.locationId}] ${s.name} (${s.chain})`); + console.log( + ` ${String(i + 1).padStart(2)}. [${s.locationId}] ${s.name} (${s.chain})`, + ); console.log(` ${s.address}`); }); - // 2. Load catalogue into memory - console.log(`\n Loading catalogue...`); + // 2. Load any existing catalogue so a crashed run can be resumed const catalogue = await loadCatalogue(); - console.log(` ${catalogue.size.toLocaleString()} products loaded.\n`); + if (catalogue.size > 0) { + console.log( + `\n Resuming from existing catalogue (${catalogue.size.toLocaleString()} products already saved).`, + ); + } - let totalMatched = 0, totalNew = 0, totalApiCalls = 0; + let totalNew = 0, + totalUpdated = 0; - // 3. For each store, run all search terms and match against catalogue + // 3. Query each store and record price + store_id together for (let i = 0; i < storeLimit; i++) { const store = stores[i]; - console.log(`\n [${i+1}/${storeLimit}] Searching store [${store.locationId}] ${store.name}...`); + console.log( + `\n [${i + 1}/${storeLimit}] Searching store [${store.locationId}] ${store.name}...`, + ); const storeProducts = await runSearchTerms(store.locationId, tokenMgr); - totalApiCalls += storeProducts.size; // rough approximation - let matchedThisStore = 0, newThisStore = 0; + let newThisStore = 0, + updatedThisStore = 0; + + for (const [ + productId, + { product: p, classifier, search_keyword }, + ] of storeProducts) { + const price = String(p.items?.[0]?.price?.regular ?? ''); - for (const [productId, { product: p, classifier, search_keyword }] of storeProducts) { if (catalogue.has(productId)) { - // Product already in catalogue — append this store's ID + // already seen from an earlier store - append this store's id and price const row = catalogue.get(productId); - const existing = row.store_ids - ? row.store_ids.split(";").map((s) => s.trim()).filter(Boolean) + const existingStores = row.store_ids + ? row.store_ids.split(';').filter(Boolean) : []; - if (!existing.includes(store.locationId)) { - existing.push(store.locationId); - row.store_ids = existing.join(";"); + if (!existingStores.includes(store.locationId)) { + row.store_ids = [...existingStores, store.locationId].join(';'); + row.price = row.price ? `${row.price};${price}` : price; } - matchedThisStore++; + updatedThisStore++; } else { - // New product found at this store — add to catalogue with store ID + // first time we've seen this product const fields = productToFields(p, classifier, search_keyword); fields.store_ids = store.locationId; + fields.price = price; catalogue.set(productId, fields); newThisStore++; } } - totalMatched += matchedThisStore; - totalNew += newThisStore; + totalNew += newThisStore; + totalUpdated += updatedThisStore; - console.log(`\n Store [${store.locationId}] done: ${storeProducts.size.toLocaleString()} products found, ${matchedThisStore.toLocaleString()} matched in catalogue, ${newThisStore.toLocaleString()} new`); + console.log( + `\n Store [${store.locationId}] done: ${storeProducts.size.toLocaleString()} products, ${newThisStore.toLocaleString()} new, ${updatedThisStore.toLocaleString()} updated`, + ); - // Save after every store so progress is never lost + // save after every store so we don't lose progress if something crashes saveCatalogue(catalogue); - console.log(` Catalogue saved (${catalogue.size.toLocaleString()} total products)`); + console.log( + ` Catalogue saved (${catalogue.size.toLocaleString()} total products)`, + ); } - // 4. Final summary - console.log(`\n── Done ───────────────────────────────────────────────────────────────────`); - console.log(` Stores searched : ${storeLimit}`); - console.log(` Catalogue matches: ${totalMatched.toLocaleString()}`); - console.log(` New products added: ${totalNew.toLocaleString()}`); + console.log( + `\n-- Done -------------------------------------------------------------------`, + ); + console.log(` Stores searched : ${storeLimit}`); + console.log(` New products : ${totalNew.toLocaleString()}`); + console.log(` Updated products : ${totalUpdated.toLocaleString()}`); console.log(` Total in catalogue: ${catalogue.size.toLocaleString()}`); - - // Show which products now have the most store coverage - let maxStoreCount = 0; - for (const row of catalogue.values()) { - const count = row.store_ids ? row.store_ids.split(";").filter(Boolean).length : 0; - if (count > maxStoreCount) maxStoreCount = count; - } - console.log(` Max stores for 1 product: ${maxStoreCount}`); console.log(` Saved to: ${catalogueFile}\n`); } -// ─── Main ────────────────────────────────────────────────────────────────────── - +// --- Main --- async function main() { - if (!fs.existsSync(catalogueDir)) fs.mkdirSync(catalogueDir, { recursive: true }); + if (!fs.existsSync(catalogueDir)) + fs.mkdirSync(catalogueDir, { recursive: true }); if (statusOnly) { await printStatus(); return; } + if (!zipcodeArg) { + console.error('\n Error: --zipcode=XXXXX is required.\n'); + console.error(' Example: node kroger_catalogue.js --zipcode=90210\n'); + process.exit(1); + } + const tokenMgr = new TokenManager( process.env.KROGER_CLIENT_ID, - process.env.KROGER_CLIENT_SECRET + process.env.KROGER_CLIENT_SECRET, ); - if (isEnrichMode) { - await enrichWithStores(tokenMgr); - } else { - await buildCatalogue(tokenMgr); - } + await buildCatalogue(tokenMgr); } main().catch((err) => { console.error(`\nFatal error: ${err.message}`); process.exit(1); -}); \ No newline at end of file +}); diff --git a/KrogerPipeline/kroger_stores.js b/KrogerPipeline/kroger_stores.js index dd34a60..983708d 100644 --- a/KrogerPipeline/kroger_stores.js +++ b/KrogerPipeline/kroger_stores.js @@ -32,38 +32,40 @@ * node kroger_stores.js --dry-run */ -import "dotenv/config"; -import fetch from "node-fetch"; -import fs from "fs"; -import path from "path"; -import { fileURLToPath } from "url"; +import 'dotenv/config'; +import fetch from 'node-fetch'; +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = path.dirname(__filename); // ─── Config ──────────────────────────────────────────────────────────────────── -const BASE_URL = "https://api.kroger.com/v1"; -const TOKEN_URL = `${BASE_URL}/connect/oauth2/token`; +const BASE_URL = 'https://api.kroger.com/v1'; +const TOKEN_URL = `${BASE_URL}/connect/oauth2/token`; const LOCATIONS_URL = `${BASE_URL}/locations`; -const MAX_LIMIT = 200; // Kroger API hard cap per request +const MAX_LIMIT = 200; // Kroger API hard cap per request const RETRY_DELAY_MS = 2000; -const MAX_RETRIES = 4; +const MAX_RETRIES = 4; // ─── CLI Args ────────────────────────────────────────────────────────────────── const args = process.argv.slice(2); function getArg(prefix) { - return (args.find((a) => a.startsWith(prefix)) ?? "").replace(prefix, "") || ""; + return ( + (args.find((a) => a.startsWith(prefix)) ?? '').replace(prefix, '') || '' + ); } -const isDryRun = args.includes("--dry-run"); -const outDir = getArg("--out=") || "./kroger_output"; -const storesDir = path.join(outDir, "stores"); -const chainArg = getArg("--chain=").toUpperCase(); -const radius = Math.min(parseInt(getArg("--radius=") || "100", 10), 100); -const concurrency = Math.min(parseInt(getArg("--concurrency=") || "5", 10), 10); +const isDryRun = args.includes('--dry-run'); +const outDir = getArg('--out=') || './kroger_output'; +const storesDir = path.join(outDir, 'stores'); +const chainArg = getArg('--chain=').toUpperCase(); +const radius = Math.min(parseInt(getArg('--radius=') || '100', 10), 100); +const concurrency = Math.min(parseInt(getArg('--concurrency=') || '5', 10), 10); // ─── US ZIP CODE GRID ────────────────────────────────────────────────────────── // ~280 zip codes chosen to give contiguous coverage of the entire continental @@ -74,104 +76,669 @@ const concurrency = Math.min(parseInt(getArg("--concurrency=") || "5", 10), 10); const GRID_ZIPS = [ // ── Pacific Northwest ────────────────────────────────────────────────────── - "98101","98201","98801","99201","99301","99401","97201","97401","97501","97701", - "97801","97901", + '98101', + '98201', + '98801', + '99201', + '99301', + '99401', + '97201', + '97401', + '97501', + '97701', + '97801', + '97901', // ── California ──────────────────────────────────────────────────────────── - "96001","95901","95501","94102","94601","95008","93401","93101","92101","91101", - "90001","90401","92501","92701","93301","93601","94201","94901","95201","95301", - "95701","96101", + '96001', + '95901', + '95501', + '94102', + '94601', + '95008', + '93401', + '93101', + '92101', + '91101', + '90001', + '90401', + '92501', + '92701', + '93301', + '93601', + '94201', + '94901', + '95201', + '95301', + '95701', + '96101', // ── Nevada / Arizona ────────────────────────────────────────────────────── - "89101","89301","89501","89701","89801","85001","85201","85301","85501","85701", - "86001","86301","86401","86501", + '89101', + '89301', + '89501', + '89701', + '89801', + '85001', + '85201', + '85301', + '85501', + '85701', + '86001', + '86301', + '86401', + '86501', // ── Alaska ──────────────────────────────────────────────────────────────── - "99501","99701","99901", + '99501', + '99701', + '99901', // ── Hawaii ──────────────────────────────────────────────────────────────── - "96801","96720","96740","96761", + '96801', + '96720', + '96740', + '96761', // ── Mountain West ───────────────────────────────────────────────────────── - "83201","83401","83701","84101","84301","84501","84601","84701","84901", - "85901","86001", + '83201', + '83401', + '83701', + '84101', + '84301', + '84501', + '84601', + '84701', + '84901', + '85901', + '86001', // ── Colorado / Wyoming / Montana / Idaho ────────────────────────────────── - "80202","80401","80501","80631","80901","81001","81201","81301","81401","81501", - "82001","82301","82601","82901","83001","83201","59001","59401","59601","59801", - "59901","82801","82901","83001", + '80202', + '80401', + '80501', + '80631', + '80901', + '81001', + '81201', + '81301', + '81401', + '81501', + '82001', + '82301', + '82601', + '82901', + '83001', + '83201', + '59001', + '59401', + '59601', + '59801', + '59901', + '82801', + '82901', + '83001', // ── New Mexico ──────────────────────────────────────────────────────────── - "87101","87401","87501","87701","87901","88001","88201","88401","88601", + '87101', + '87401', + '87501', + '87701', + '87901', + '88001', + '88201', + '88401', + '88601', // ── North / South Dakota / Nebraska / Kansas ────────────────────────────── - "57001","57201","57401","57601","57701","57901","58001","58201","58401","58601", - "58801","68001","68101","68401","68501","68801","69001","66101","66201","66401", - "66601","66801","67001","67201","67401","67601","67801","67901", + '57001', + '57201', + '57401', + '57601', + '57701', + '57901', + '58001', + '58201', + '58401', + '58601', + '58801', + '68001', + '68101', + '68401', + '68501', + '68801', + '69001', + '66101', + '66201', + '66401', + '66601', + '66801', + '67001', + '67201', + '67401', + '67601', + '67801', + '67901', // ── Oklahoma / Texas ────────────────────────────────────────────────────── - "73101","73401","73601","73801","74101","74401","74601","74801","75001","75201", - "75401","75601","75801","76001","76201","76401","76601","76801","77001","77201", - "77401","77601","77801","78101","78201","78401","78501","78701","78801","79101", - "79201","79401","79601","79701","79901", + '73101', + '73401', + '73601', + '73801', + '74101', + '74401', + '74601', + '74801', + '75001', + '75201', + '75401', + '75601', + '75801', + '76001', + '76201', + '76401', + '76601', + '76801', + '77001', + '77201', + '77401', + '77601', + '77801', + '78101', + '78201', + '78401', + '78501', + '78701', + '78801', + '79101', + '79201', + '79401', + '79601', + '79701', + '79901', // ── Minnesota / Wisconsin / Iowa ────────────────────────────────────────── - "55101","55301","55401","55601","55701","55801","56001","56201","56301","56401", - "56501","56601","56701","56801","57001","54101","54201","54401","54501","54601", - "54701","54901","52001","52101","52201","52301","52401","52501","52601","52701", - "52801", + '55101', + '55301', + '55401', + '55601', + '55701', + '55801', + '56001', + '56201', + '56301', + '56401', + '56501', + '56601', + '56701', + '56801', + '57001', + '54101', + '54201', + '54401', + '54501', + '54601', + '54701', + '54901', + '52001', + '52101', + '52201', + '52301', + '52401', + '52501', + '52601', + '52701', + '52801', // ── Illinois / Missouri ─────────────────────────────────────────────────── - "60601","60901","61101","61201","61401","61601","61701","61801","61901","62001", - "62201","62401","62601","62701","62801","62901","63101","63301","63401","63501", - "63601","63701","63801","63901","64101","64501","64701","64801","65101","65201", - "65401","65601","65701","65801","65901", + '60601', + '60901', + '61101', + '61201', + '61401', + '61601', + '61701', + '61801', + '61901', + '62001', + '62201', + '62401', + '62601', + '62701', + '62801', + '62901', + '63101', + '63301', + '63401', + '63501', + '63601', + '63701', + '63801', + '63901', + '64101', + '64501', + '64701', + '64801', + '65101', + '65201', + '65401', + '65601', + '65701', + '65801', + '65901', // ── Michigan ────────────────────────────────────────────────────────────── - "48101","48201","48401","48601","48701","48801","48901","49001","49101","49201", - "49301","49401","49501","49601","49701","49801","49901", + '48101', + '48201', + '48401', + '48601', + '48701', + '48801', + '48901', + '49001', + '49101', + '49201', + '49301', + '49401', + '49501', + '49601', + '49701', + '49801', + '49901', // ── Indiana / Ohio ──────────────────────────────────────────────────────── - "46201","46401","46501","46601","46701","46801","47201","47401","47601","47701", - "47901","43101","43201","43401","43501","43601","43701","43801","43901","44101", - "44201","44301","44401","44501","44601","44701","44801","44901","45101","45201", - "45301","45401","45501","45601","45701","45801","45901", + '46201', + '46401', + '46501', + '46601', + '46701', + '46801', + '47201', + '47401', + '47601', + '47701', + '47901', + '43101', + '43201', + '43401', + '43501', + '43601', + '43701', + '43801', + '43901', + '44101', + '44201', + '44301', + '44401', + '44501', + '44601', + '44701', + '44801', + '44901', + '45101', + '45201', + '45301', + '45401', + '45501', + '45601', + '45701', + '45801', + '45901', // ── Kentucky / Tennessee ────────────────────────────────────────────────── - "40201","40601","41001","41101","41201","41301","41401","41501","41601","41701", - "42001","42101","42201","42301","42401","42501","42601","42701","37011","37101", - "37201","37301","37401","37501","37601","37701","37801","37901","38001","38101", - "38201","38301","38401","38501","38601","38701","38801","38901", + '40201', + '40601', + '41001', + '41101', + '41201', + '41301', + '41401', + '41501', + '41601', + '41701', + '42001', + '42101', + '42201', + '42301', + '42401', + '42501', + '42601', + '42701', + '37011', + '37101', + '37201', + '37301', + '37401', + '37501', + '37601', + '37701', + '37801', + '37901', + '38001', + '38101', + '38201', + '38301', + '38401', + '38501', + '38601', + '38701', + '38801', + '38901', // ── Virginia / West Virginia / North Carolina ───────────────────────────── - "22201","22301","22601","22901","23101","23201","23401","23601","23801","24101", - "24201","24301","24401","24501","24601","24701","24801","24901","25101","25301", - "25501","25701","25801","25901","26101","26201","26301","26401","26501","26601", - "27101","27201","27301","27401","27501","27601","27701","27801","27901","28001", - "28101","28201","28301","28401","28501","28601","28701","28801","28901", + '22201', + '22301', + '22601', + '22901', + '23101', + '23201', + '23401', + '23601', + '23801', + '24101', + '24201', + '24301', + '24401', + '24501', + '24601', + '24701', + '24801', + '24901', + '25101', + '25301', + '25501', + '25701', + '25801', + '25901', + '26101', + '26201', + '26301', + '26401', + '26501', + '26601', + '27101', + '27201', + '27301', + '27401', + '27501', + '27601', + '27701', + '27801', + '27901', + '28001', + '28101', + '28201', + '28301', + '28401', + '28501', + '28601', + '28701', + '28801', + '28901', // ── South Carolina / Georgia ────────────────────────────────────────────── - "29101","29201","29301","29401","29501","29601","29701","29801","29901","30001", - "30101","30201","30301","30401","30501","30601","30701","30801","30901","31001", - "31101","31201","31301","31401","31501","31601","31701","31801","31901", + '29101', + '29201', + '29301', + '29401', + '29501', + '29601', + '29701', + '29801', + '29901', + '30001', + '30101', + '30201', + '30301', + '30401', + '30501', + '30601', + '30701', + '30801', + '30901', + '31001', + '31101', + '31201', + '31301', + '31401', + '31501', + '31601', + '31701', + '31801', + '31901', // ── Florida ─────────────────────────────────────────────────────────────── - "32004","32101","32201","32301","32401","32501","32601","32701","32801","32901", - "33101","33301","33401","33501","33601","33701","33801","33901","34101","34201", - "34401","34601","34701","34801","34901", + '32004', + '32101', + '32201', + '32301', + '32401', + '32501', + '32601', + '32701', + '32801', + '32901', + '33101', + '33301', + '33401', + '33501', + '33601', + '33701', + '33801', + '33901', + '34101', + '34201', + '34401', + '34601', + '34701', + '34801', + '34901', // ── Alabama / Mississippi ───────────────────────────────────────────────── - "35004","35101","35201","35401","35501","35601","35701","35801","35901","36001", - "36101","36201","36301","36401","36501","36601","36701","36801","36901","39001", - "39101","39201","39301","39401","39501", + '35004', + '35101', + '35201', + '35401', + '35501', + '35601', + '35701', + '35801', + '35901', + '36001', + '36101', + '36201', + '36301', + '36401', + '36501', + '36601', + '36701', + '36801', + '36901', + '39001', + '39101', + '39201', + '39301', + '39401', + '39501', // ── Louisiana / Arkansas ────────────────────────────────────────────────── - "70001","70101","70301","70401","70501","70601","70701","70801","70901","71001", - "71101","71201","71301","71601","71701","71801","71901","72001","72101","72201", - "72301","72401","72601","72701","72801","72901", + '70001', + '70101', + '70301', + '70401', + '70501', + '70601', + '70701', + '70801', + '70901', + '71001', + '71101', + '71201', + '71301', + '71601', + '71701', + '71801', + '71901', + '72001', + '72101', + '72201', + '72301', + '72401', + '72601', + '72701', + '72801', + '72901', // ── Great Lakes / Northeast ─────────────────────────────────────────────── - "53001","53201","53401","53501","53601","53701","53901","14001","14101","14201", - "14301","14601","14701","14801","14901","13201","13301","13401","12001","12101", - "12201","12301","12401","12501","12601","10001","10301","11001","07001","07101", - "07201","07301","07401","07501","07601","07701","07801","07901","08001","08101", - "08201","08301","08401","08501","08601","08701","08801","08901", + '53001', + '53201', + '53401', + '53501', + '53601', + '53701', + '53901', + '14001', + '14101', + '14201', + '14301', + '14601', + '14701', + '14801', + '14901', + '13201', + '13301', + '13401', + '12001', + '12101', + '12201', + '12301', + '12401', + '12501', + '12601', + '10001', + '10301', + '11001', + '07001', + '07101', + '07201', + '07301', + '07401', + '07501', + '07601', + '07701', + '07801', + '07901', + '08001', + '08101', + '08201', + '08301', + '08401', + '08501', + '08601', + '08701', + '08801', + '08901', // ── Pennsylvania ────────────────────────────────────────────────────────── - "15001","15101","15201","15301","15401","15501","15601","15701","15801","15901", - "16001","16101","16201","16301","16401","16501","16601","16701","16801","16901", - "17001","17101","17201","17301","17401","17501","17601","17701","17801","17901", - "18001","18101","18201","18301","18401","18501","18601","18701","18801","18901", - "19001","19101","19201","19301","19401", + '15001', + '15101', + '15201', + '15301', + '15401', + '15501', + '15601', + '15701', + '15801', + '15901', + '16001', + '16101', + '16201', + '16301', + '16401', + '16501', + '16601', + '16701', + '16801', + '16901', + '17001', + '17101', + '17201', + '17301', + '17401', + '17501', + '17601', + '17701', + '17801', + '17901', + '18001', + '18101', + '18201', + '18301', + '18401', + '18501', + '18601', + '18701', + '18801', + '18901', + '19001', + '19101', + '19201', + '19301', + '19401', // ── Maryland / Delaware / DC ────────────────────────────────────────────── - "20001","20601","20701","20801","20901","21001","21101","21201","21301","21401", - "21501","21601","21701","21801","21901","19701","19801","19901", + '20001', + '20601', + '20701', + '20801', + '20901', + '21001', + '21101', + '21201', + '21301', + '21401', + '21501', + '21601', + '21701', + '21801', + '21901', + '19701', + '19801', + '19901', // ── New England ─────────────────────────────────────────────────────────── - "06001","06101","06201","06301","06401","06501","06601","06701","06801","06901", - "01001","01101","01201","01301","01401","01501","01601","01701","01801","01901", - "02101","02201","02301","02401","02501","02601","02701","02801","02901","03001", - "03101","03201","03301","03401","03501","03601","03701","03801","03901","04001", - "04101","04201","04401","04601","04901","05001","05101","05201","05301","05401", - "05501","05601","05701","05801","05901", + '06001', + '06101', + '06201', + '06301', + '06401', + '06501', + '06601', + '06701', + '06801', + '06901', + '01001', + '01101', + '01201', + '01301', + '01401', + '01501', + '01601', + '01701', + '01801', + '01901', + '02101', + '02201', + '02301', + '02401', + '02501', + '02601', + '02701', + '02801', + '02901', + '03001', + '03101', + '03201', + '03301', + '03401', + '03501', + '03601', + '03701', + '03801', + '03901', + '04001', + '04101', + '04201', + '04401', + '04601', + '04901', + '05001', + '05101', + '05201', + '05301', + '05401', + '05501', + '05601', + '05701', + '05801', + '05901', ]; // ─── Token Manager ───────────────────────────────────────────────────────────── @@ -180,30 +747,36 @@ class TokenManager { constructor(clientId, clientSecret) { if (!clientId || !clientSecret) { throw new Error( - "Missing KROGER_CLIENT_ID or KROGER_CLIENT_SECRET.\n" + - "Set them in a .env file or as environment variables." + 'Missing KROGER_CLIENT_ID or KROGER_CLIENT_SECRET.\n' + + 'Set them in a .env file or as environment variables.', ); } - this.credentials = Buffer.from(`${clientId}:${clientSecret}`).toString("base64"); + this.credentials = Buffer.from(`${clientId}:${clientSecret}`).toString( + 'base64', + ); this.accessToken = null; - this.expiresAt = 0; + this.expiresAt = 0; } async getToken() { - if (this.accessToken && Date.now() < this.expiresAt - 60_000) return this.accessToken; - process.stdout.write(" Refreshing OAuth2 token... "); + if (this.accessToken && Date.now() < this.expiresAt - 60_000) + return this.accessToken; + process.stdout.write(' Refreshing OAuth2 token... '); const res = await fetch(TOKEN_URL, { - method: "POST", + method: 'POST', headers: { - "Content-Type": "application/x-www-form-urlencoded", + 'Content-Type': 'application/x-www-form-urlencoded', Authorization: `Basic ${this.credentials}`, }, - body: "grant_type=client_credentials&scope=product.compact", + body: 'grant_type=client_credentials&scope=product.compact', }); - if (!res.ok) throw new Error(`Token request failed (${res.status}): ${await res.text()}`); + if (!res.ok) + throw new Error( + `Token request failed (${res.status}): ${await res.text()}`, + ); const data = await res.json(); this.accessToken = data.access_token; - this.expiresAt = Date.now() + data.expires_in * 1000; + this.expiresAt = Date.now() + data.expires_in * 1000; console.log(`OK (valid ${Math.round(data.expires_in / 60)} min)`); return this.accessToken; } @@ -211,27 +784,29 @@ class TokenManager { // ─── Helpers ─────────────────────────────────────────────────────────────────── -function sleep(ms) { return new Promise((r) => setTimeout(r, ms)); } +function sleep(ms) { + return new Promise((r) => setTimeout(r, ms)); +} async function fetchLocationsForZip(zip, tokenMgr) { const params = new URLSearchParams({ - "filter.zipCode.near": zip, - "filter.radiusInMiles": radius, - "filter.limit": MAX_LIMIT, + 'filter.zipCode.near': zip, + 'filter.radiusInMiles': radius, + 'filter.limit': MAX_LIMIT, }); - if (chainArg) params.set("filter.chain", chainArg); + if (chainArg) params.set('filter.chain', chainArg); const url = `${LOCATIONS_URL}?${params}`; for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) { const token = await tokenMgr.getToken(); const res = await fetch(url, { - headers: { Authorization: `Bearer ${token}`, Accept: "application/json" }, + headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' }, }); if (res.status === 429) { const wait = RETRY_DELAY_MS * attempt; - process.stdout.write(`[429 wait ${wait/1000}s] `); + process.stdout.write(`[429 wait ${wait / 1000}s] `); await sleep(wait); continue; } @@ -240,7 +815,10 @@ async function fetchLocationsForZip(zip, tokenMgr) { continue; } if (!res.ok) { - if (attempt < MAX_RETRIES) { await sleep(RETRY_DELAY_MS); continue; } + if (attempt < MAX_RETRIES) { + await sleep(RETRY_DELAY_MS); + continue; + } throw new Error(`HTTP ${res.status} for zip ${zip}`); } @@ -263,7 +841,7 @@ async function processInBatches(zips, tokenMgr, allStores) { console.error(`\n Error for zip ${zip}: ${err.message}`); return []; } - }) + }), ); let newInBatch = 0; @@ -278,63 +856,114 @@ async function processInBatches(zips, tokenMgr, allStores) { done += batch.length; // Progress bar - const pct = Math.round((done / zips.length) * 100); - const bar = "█".repeat(Math.floor(pct / 5)) + "░".repeat(20 - Math.floor(pct / 5)); + const pct = Math.round((done / zips.length) * 100); + const bar = + '█'.repeat(Math.floor(pct / 5)) + '░'.repeat(20 - Math.floor(pct / 5)); process.stdout.write( - `\r [${bar}] ${pct}% | ${done}/${zips.length} zips | ${allStores.size} unique stores found` + `\r [${bar}] ${pct}% | ${done}/${zips.length} zips | ${allStores.size} unique stores found`, ); } - process.stdout.write("\n"); + process.stdout.write('\n'); } // ─── CSV ─────────────────────────────────────────────────────────────────────── function esc(v) { - if (v === null || v === undefined) return ""; + if (v === null || v === undefined) return ''; const s = String(v); - return s.includes(",") || s.includes('"') || s.includes("\n") - ? `"${s.replace(/"/g, '""')}"` : s; + return s.includes(',') || s.includes('"') || s.includes('\n') + ? `"${s.replace(/"/g, '""')}"` + : s; } const HEADERS = [ - "locationId","name","chain","phone", - "address_line1","address_line2","address_city","address_state","address_zipCode","address_county", - "geo_latitude","geo_longitude", - "hours_timezone","hours_gmtOffset","hours_open24", - "hours_monday_open","hours_monday_close","hours_monday_open24", - "hours_tuesday_open","hours_tuesday_close","hours_tuesday_open24", - "hours_wednesday_open","hours_wednesday_close","hours_wednesday_open24", - "hours_thursday_open","hours_thursday_close","hours_thursday_open24", - "hours_friday_open","hours_friday_close","hours_friday_open24", - "hours_saturday_open","hours_saturday_close","hours_saturday_open24", - "hours_sunday_open","hours_sunday_close","hours_sunday_open24", - "departments_count","departments_names","departments_ids","departments_json", + 'locationId', + 'name', + 'chain', + 'phone', + 'address_line1', + 'address_line2', + 'address_city', + 'address_state', + 'address_zipCode', + 'address_county', + 'geo_latitude', + 'geo_longitude', + 'hours_timezone', + 'hours_gmtOffset', + 'hours_open24', + 'hours_monday_open', + 'hours_monday_close', + 'hours_monday_open24', + 'hours_tuesday_open', + 'hours_tuesday_close', + 'hours_tuesday_open24', + 'hours_wednesday_open', + 'hours_wednesday_close', + 'hours_wednesday_open24', + 'hours_thursday_open', + 'hours_thursday_close', + 'hours_thursday_open24', + 'hours_friday_open', + 'hours_friday_close', + 'hours_friday_open24', + 'hours_saturday_open', + 'hours_saturday_close', + 'hours_saturday_open24', + 'hours_sunday_open', + 'hours_sunday_close', + 'hours_sunday_open24', + 'departments_count', + 'departments_names', + 'departments_ids', + 'departments_json', ]; -const DAYS = ["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]; +const DAYS = [ + 'monday', + 'tuesday', + 'wednesday', + 'thursday', + 'friday', + 'saturday', + 'sunday', +]; function storeToRow(s) { - const addr = s.address ?? {}; - const geo = s.geolocation ?? {}; - const hrs = s.hours ?? {}; + const addr = s.address ?? {}; + const geo = s.geolocation ?? {}; + const hrs = s.hours ?? {}; const deps = s.departments ?? []; const dayFields = DAYS.flatMap((day) => { const d = hrs[day] ?? {}; - return [d.open ?? "", d.close ?? "", d.open24 ?? ""]; + return [d.open ?? '', d.close ?? '', d.open24 ?? '']; }); return [ - s.locationId, s.name, s.chain, s.phone, - addr.addressLine1, addr.addressLine2, addr.city, addr.state, addr.zipCode, addr.county, - geo.latitude, geo.longitude, - hrs.timezone, hrs.gmtOffset, hrs.open24, + s.locationId, + s.name, + s.chain, + s.phone, + addr.addressLine1, + addr.addressLine2, + addr.city, + addr.state, + addr.zipCode, + addr.county, + geo.latitude, + geo.longitude, + hrs.timezone, + hrs.gmtOffset, + hrs.open24, ...dayFields, deps.length, - deps.map((d) => d.name).join("; "), - deps.map((d) => d.departmentId).join("; "), + deps.map((d) => d.name).join('; '), + deps.map((d) => d.departmentId).join('; '), JSON.stringify(deps), - ].map(esc).join(","); + ] + .map(esc) + .join(','); } // ─── Main ────────────────────────────────────────────────────────────────────── @@ -342,7 +971,7 @@ function storeToRow(s) { async function main() { const tokenMgr = new TokenManager( process.env.KROGER_CLIENT_ID, - process.env.KROGER_CLIENT_SECRET + process.env.KROGER_CLIENT_SECRET, ); if (!fs.existsSync(storesDir)) fs.mkdirSync(storesDir, { recursive: true }); @@ -351,63 +980,86 @@ async function main() { const zips = [...new Set(GRID_ZIPS)]; const queryZips = isDryRun ? zips.slice(0, 10) : zips; - console.log("\nKroger Store Scraper"); - console.log(` Strategy : zip-code grid sweep (${queryZips.length} zip codes × ${radius}-mile radius)`); + console.log('\nKroger Store Scraper'); + console.log( + ` Strategy : zip-code grid sweep (${queryZips.length} zip codes × ${radius}-mile radius)`, + ); console.log(` Concurrency: ${concurrency} parallel requests`); - console.log(` Chain filter: ${chainArg || "(all chains)"}`); + console.log(` Chain filter: ${chainArg || '(all chains)'}`); console.log(` Output dir : ${path.resolve(storesDir)}`); - console.log(` Dry run : ${isDryRun}${isDryRun ? " (first 10 zips only)" : ""}\n`); + console.log( + ` Dry run : ${isDryRun}${isDryRun ? ' (first 10 zips only)' : ''}\n`, + ); const allStores = new Map(); // locationId → store object await processInBatches(queryZips, tokenMgr, allStores); if (allStores.size === 0) { - console.log(" No stores found. Check credentials or try --chain with a different value."); + console.log( + ' No stores found. Check credentials or try --chain with a different value.', + ); process.exit(0); } - const storeList = Array.from(allStores.values()) - .sort((a, b) => (a.chain ?? "").localeCompare(b.chain ?? "") || (a.locationId ?? "").localeCompare(b.locationId ?? "")); + const storeList = Array.from(allStores.values()).sort( + (a, b) => + (a.chain ?? '').localeCompare(b.chain ?? '') || + (a.locationId ?? '').localeCompare(b.locationId ?? ''), + ); // ── Write main CSV ───────────────────────────────────────────────────────── - const csvPath = path.join(storesDir, "kroger_stores.csv"); - fs.writeFileSync(csvPath, [HEADERS.join(","), ...storeList.map(storeToRow)].join("\n"), "utf8"); - console.log(`\n Saved ${storeList.length.toLocaleString()} stores → ${csvPath}`); + const csvPath = path.join(storesDir, 'kroger_stores.csv'); + fs.writeFileSync( + csvPath, + [HEADERS.join(','), ...storeList.map(storeToRow)].join('\n'), + 'utf8', + ); + console.log( + `\n Saved ${storeList.length.toLocaleString()} stores → ${csvPath}`, + ); // ── Per-chain CSVs ───────────────────────────────────────────────────────── const byChain = new Map(); for (const s of storeList) { - const key = (s.chain ?? "UNKNOWN").replace(/[^a-zA-Z0-9_]/g, "_"); + const key = (s.chain ?? 'UNKNOWN').replace(/[^a-zA-Z0-9_]/g, '_'); if (!byChain.has(key)) byChain.set(key, []); byChain.get(key).push(s); } - const chainDir = path.join(storesDir, "by_chain"); + const chainDir = path.join(storesDir, 'by_chain'); if (!fs.existsSync(chainDir)) fs.mkdirSync(chainDir); for (const [chain, chainStores] of byChain) { fs.writeFileSync( path.join(chainDir, `${chain}.csv`), - [HEADERS.join(","), ...chainStores.map(storeToRow)].join("\n"), - "utf8" + [HEADERS.join(','), ...chainStores.map(storeToRow)].join('\n'), + 'utf8', ); } console.log(` Per-chain CSVs → ${chainDir}/`); // ── Summary ──────────────────────────────────────────────────────────────── const sorted = [...byChain].sort((a, b) => b[1].length - a[1].length); - const summaryLines = ["chain,store_count", ...sorted.map(([c, arr]) => `${esc(c)},${arr.length}`), `TOTAL,${storeList.length}`]; - fs.writeFileSync(path.join(storesDir, "stores_summary.csv"), summaryLines.join("\n"), "utf8"); + const summaryLines = [ + 'chain,store_count', + ...sorted.map(([c, arr]) => `${esc(c)},${arr.length}`), + `TOTAL,${storeList.length}`, + ]; + fs.writeFileSync( + path.join(storesDir, 'stores_summary.csv'), + summaryLines.join('\n'), + 'utf8', + ); console.log(`\n Chain breakdown:`); for (const [chain, arr] of sorted) { console.log(` ${arr.length.toString().padStart(5)} ${chain}`); } - console.log(` ${"─".repeat(20)}`); + console.log(` ${'─'.repeat(20)}`); console.log(` ${storeList.length.toString().padStart(5)} TOTAL\n`); } main().catch((err) => { console.error(`\nFatal error: ${err.message}`); process.exit(1); -}); \ No newline at end of file +}); diff --git a/Walmart.sql b/Walmart.sql deleted file mode 100644 index 69d63af..0000000 --- a/Walmart.sql +++ /dev/null @@ -1,4058 +0,0 @@ -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10295164, 'DEL MONTE Fruit Naturals Red Grapefruit, 8 oz', 1.67, 'deleted_024000030362', 'Red Grapefruit in Extra Light Syrup 8 oz (227 g) Del Monte Fruit Naturals Red Grapefruit provides an effortless way to enjoy the refreshing taste of fruit. Each container holds delicious fruit picked at the very peak of ripeness. No artificial colors or flavors are added, just the great taste of fruit, naturally. Product of Mexico. Must be refrigerated. 8 oz (227 g) San Francisco, CA 94105 800-543-3090', 'DEL MONTE Fruit Naturals Red Grapefruit, 8 oz', 'Del Monte', 'https://i5.walmartimages.com/asr/4cd5b2f2-62fd-41d7-ba2a-f7e81ea01eb4_1.15cae25db4cf47d7327d567e168564ad.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4cd5b2f2-62fd-41d7-ba2a-f7e81ea01eb4_1.15cae25db4cf47d7327d567e168564ad.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4cd5b2f2-62fd-41d7-ba2a-f7e81ea01eb4_1.15cae25db4cf47d7327d567e168564ad.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10317531, 'Disney Garden Swt Apple Slices 5/2.8 Oz', 3.48, '877629001431', 'short description is not available', 'Disney Garden Swt Apple Slices 5/2.8 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/590950dc-9172-41a6-888c-2a1ea2ee17cf_1.2769b622ab980256b17ef4ae353bfdcb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/590950dc-9172-41a6-888c-2a1ea2ee17cf_1.2769b622ab980256b17ef4ae353bfdcb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/590950dc-9172-41a6-888c-2a1ea2ee17cf_1.2769b622ab980256b17ef4ae353bfdcb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10403799, 'Fresh Organic Limes, 1 lb Bag', 2.98, '681131091251', 'Add zest and flavor to your meals and beverages with these Fresh Organic Limes. Freshly squeezed limes are a key ingredient in many recipes, from homemade salsa to chicken dishes. The citrusy tropical flavor of these limes is sure to add a zing to all your cooked meals. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. These limes are sold in a one-pound bag, so you\'ll have plenty for all your culinary creations. Enjoy the refreshing, tart flavor of Fresh Organic Limes.', 'Fresh and juicy limes USDA organic Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies, and tarts Refreshing, tart flavor Available in a 1-pound bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e97f54ec-fde8-49dc-a69e-e860c90deb29_5.8ae8d03d8dbd14578c04c6a33bd276d9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e97f54ec-fde8-49dc-a69e-e860c90deb29_5.8ae8d03d8dbd14578c04c6a33bd276d9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e97f54ec-fde8-49dc-a69e-e860c90deb29_5.8ae8d03d8dbd14578c04c6a33bd276d9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10416264, 'Wholly Guacamole Classic All Natural Hand-Scooped Hass Avocados', 1.98, '616112289587', 'All natural.Wholly Guacamole.America\'s #1.20 vitamins & minerals.classic.hand-scooped.Hass avocados.', 'Guacamole, Classic All natural. America\'s No. 1. 20 vitamins & minerals. Hand-scooped Hass avocados. Gluten free. 100% all natural ingredients (stuff you can pronounce) + 20 vitamins & minerals (stuff your body wants) + good fats (yes, good fats) + more potassium than a banana! Fresherized for flavor. Product of Mexico.', 'Unbranded', 'https://i5.walmartimages.com/asr/5b80d356-2a4e-412d-9223-4a246a897290_1.b398bb335aa2ffe76b8ea42dbcaac975.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b80d356-2a4e-412d-9223-4a246a897290_1.b398bb335aa2ffe76b8ea42dbcaac975.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b80d356-2a4e-412d-9223-4a246a897290_1.b398bb335aa2ffe76b8ea42dbcaac975.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10447832, 'Fresh Key Limes, 2 lb Bag', 4.47, '021492630513', 'Indulge in the vibrant, tangy flavor of our Fresh Key Limes. Sourced from the finest citrus groves, these key limes elevate your culinary creations with their unique taste. Each 2 lb bag is packed with juicy, vitamin-rich key limes that are perfect for juices, marinades, and desserts. Ideal for enhancing the taste of your seafood dishes or creating the perfect key lime pie, these limes are a versatile addition to your kitchen. With their refreshing zest, they are essential for crafting appealing beverages and delightful garnishes for a versatile cooking experience.', 'Fresh key limes in a 2 lb bag Perfect for juicing and baking Vibrant, tangy flavor enhances culinary creations Rich in vitamin C and antioxidants Ideal for crafting beverages and garnishes Versatile use in savory and sweet dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/473a2b53-01ff-4634-baab-0c19565f40a3.41902a0899256b07443382e4d12ead39.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/473a2b53-01ff-4634-baab-0c19565f40a3.41902a0899256b07443382e4d12ead39.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/473a2b53-01ff-4634-baab-0c19565f40a3.41902a0899256b07443382e4d12ead39.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10448538, 'Mango 20oz', 3.48, '077745235431', 'short description is not available', 'Mango 20oz', '', 'https://i5.walmartimages.com/asr/d61ba96b-ed3e-4e8b-8465-c45f7da7842f_1.2b49ce7eb2cb8f82dc1f70cec7d9701d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d61ba96b-ed3e-4e8b-8465-c45f7da7842f_1.2b49ce7eb2cb8f82dc1f70cec7d9701d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d61ba96b-ed3e-4e8b-8465-c45f7da7842f_1.2b49ce7eb2cb8f82dc1f70cec7d9701d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10449776, 'Ready Pac Foods Ready Pac Watermelon, 40 oz', 7.78, '054427100751', 'Watermelon 40 oz (1.13 kg) No preservatives. Keep refrigerated. 40 oz (1.13 kg) Irwindale, CA 91706 800-800-7822', 'Obim: Watermelon Salad, 40 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/667ee4b6-a8c0-4ac5-a5f8-00e9206fbee9_1.996b95564e7f2f7570304d814e62d8cc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/667ee4b6-a8c0-4ac5-a5f8-00e9206fbee9_1.996b95564e7f2f7570304d814e62d8cc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/667ee4b6-a8c0-4ac5-a5f8-00e9206fbee9_1.996b95564e7f2f7570304d814e62d8cc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10451960, 'Natures Way Banana Keeper, Banana Holder', 3.98, '085865211013', 'Have a safe and designated place for your fruit with the Nature\'s Way Banana Keeper. It\'s made of a strong, durable material and is easy to use. This banana stand raises your fruit off of the counter, allowing them to hang naturally. This position lets the air flow freely around and through the bananas similar to hanging from a tree, helping them retain the proper pulp temperature and to ripen evenly. This stand also prevents the development of soft spots and damaging bruises. It keeps them fresher longer and gives them a better taste. It\'s dishwasher safe for easy care. Natures Way Banana Keeper:', 'Attractive design decorates and complements any decor Strong and durable Easy to clean Dishwasher safe Hanging banana holder keeps fruit fresh longer Prevents black bruises, soft spots Bananas taste better', 'Nature\'s Way', 'https://i5.walmartimages.com/asr/0799ff2d-7a25-42a2-9c9c-4a5f2fbfd0cc.3f00f5004a88ddbb52b6d01a5ac686e0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0799ff2d-7a25-42a2-9c9c-4a5f2fbfd0cc.3f00f5004a88ddbb52b6d01a5ac686e0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0799ff2d-7a25-42a2-9c9c-4a5f2fbfd0cc.3f00f5004a88ddbb52b6d01a5ac686e0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10795084, 'Del Monte Red Grapefruit, Jarred Fruit, 64 oz. Jar, Fresh Refrigerated Fruit', 8.97, '810051010657', 'Del Monte Red Grapefruit In Extra Light Syrup makes it easy to enjoy high quality fruit in minutes. The jarred fruit is packed with delicious, ripe grapefruit slices in extra light syrup for a ready to eat fruit snack you can feel good about. Del Monte grapefruit offers a good source of vitamin C, making them a convenient, wholesome and ready to eat citrus fruit option for busy nights. Picked and packed at the peak of freshness, peeled and sectioned, and immersed in extra light syrup, the jarred fruit slices are ideal as part of a quick lunch snack or as a flavorful addition to fruit cocktail. Each 64-ounce jar is easy to open, reseal, and store for a convenient fruit snack whenever you need delicious fruit on-the-go. Bring the wholesome goodness of Del Monte Red Grapefruit In Extra Light Syrup to your family.', 'One 64-ounce jar of Del Monte Red Grapefruit In Extra Light Syrup Bring wholesome goodness to your family with Del Monte Red Grapefruit Ideal for fruit cocktails Jarred fruits are easy to open, reseal and store as quick lunch snacks Made with red grapefruit picked at the peak of freshness and immersed in extra light syrup Jarred grapefruit makes a great ready-to-eat fruit snack for busy nights Easy way to have a citrus fruit snack in just minutes', 'Del Monte', 'https://i5.walmartimages.com/asr/fbf4937f-c1f9-4d16-b5e2-9350a1bb5d93.4ab2d5d5fd76d5b2977e9c084a5dcd03.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fbf4937f-c1f9-4d16-b5e2-9350a1bb5d93.4ab2d5d5fd76d5b2977e9c084a5dcd03.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fbf4937f-c1f9-4d16-b5e2-9350a1bb5d93.4ab2d5d5fd76d5b2977e9c084a5dcd03.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10805270, 'Marzetti Guacamole Veg Dip 12fo', 3.57, '070200520127', 'Veggie Dip, Guacamole 12 oz (340 g) 0g Trans fat! Made in USA. Keep refrigerated. Contains milk and egg. 12 oz (340 g) Columbus, OH 43229 2006 T. Marzetti Company', 'Marzetti Guacamole Veg Dip 12fo', 'Marzetti', 'https://i5.walmartimages.com/asr/44964b94-7638-448c-b54a-2645533deb14_1.37cba5df471089c87c6290690620b0d4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44964b94-7638-448c-b54a-2645533deb14_1.37cba5df471089c87c6290690620b0d4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44964b94-7638-448c-b54a-2645533deb14_1.37cba5df471089c87c6290690620b0d4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10813388, 'Washington Fuji Apples, 5 lb Bag', 7.88, 'deleted_033383007038', 'Apples 5 lb (2.27 kg) Grown near beautiful Lake Chelan in Washington State where crisp nights and warm days produce the best tasting apples grown anywhere. www.chelanfresh.com. Catch of the day! Grade meets or exceeds US ex. fancy. 2-1/2 in. min. diameter. Coated with food grade vegetable and/or shellac based wax to maintain freshness. www.chelanfresh.com. Fruits & veggies. More matters. May be coated with food grade vegetable and/or shellax based wax. Produce of USA. Product of USA. 5 lb (2.27 kg) Chelan, WA 98816', 'Apples Grown near beautiful Lake Chelan in Washington State where crisp nights and warm days produce the best tasting apples grown anywhere. www.chelanfresh.com. Catch of the day! Grade meets or exceeds US ex. fancy. 2-1/2 in. min. diameter. Coated with food grade vegetable and/or shellac based wax to maintain freshness. www.chelanfresh.com. Fruits & veggies. More matters. May be coated with food grade vegetable and/or shellax based wax. Produce of USA. Product of USA.', 'DreamBone', 'https://i5.walmartimages.com/asr/09e27ee4-d4d3-46f8-8b77-07e106f773c6_1.05e73d184f398941ca4dea54ba8e02b9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/09e27ee4-d4d3-46f8-8b77-07e106f773c6_1.05e73d184f398941ca4dea54ba8e02b9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/09e27ee4-d4d3-46f8-8b77-07e106f773c6_1.05e73d184f398941ca4dea54ba8e02b9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10813390, 'Fresh Green Seedless Grapes, 2 lb', 4.97, '033383250557', 'Treat yourself to the delicious, juicy flavor of Fresh Green Grapes. These grapes are bursting with sweet flavor, so you can easily enjoy a handful as a fresh snack any time of day. Enjoy them for breakfast, lunch, dinner, or dessert. They are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Green Grapes.', 'Fresh Green Seedless Grapes Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e227d687-d4b5-4f05-a61e-e55f8f526075.39679801746d29ef48d99c92d7e4bcef.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e227d687-d4b5-4f05-a61e-e55f8f526075.39679801746d29ef48d99c92d7e4bcef.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e227d687-d4b5-4f05-a61e-e55f8f526075.39679801746d29ef48d99c92d7e4bcef.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10813391, 'Fresh Black Seedless Grapes, 2 lb', 4.97, '033383250571', 'Table Black Seedless', 'Fresh Black Seedless Grapes, 2 lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b9205886-b551-4692-8bb3-7b856c9027fb.3946687e06ca38e836f8c0f8af6cf8b4.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b9205886-b551-4692-8bb3-7b856c9027fb.3946687e06ca38e836f8c0f8af6cf8b4.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b9205886-b551-4692-8bb3-7b856c9027fb.3946687e06ca38e836f8c0f8af6cf8b4.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10813392, 'Fresh Organic Red Seedless Grapes from California, 2 lb Package', 5.27, '851781005612', 'Marketside Organic Red Grapes are seedless for you convenience and deliver a pleasantly refreshing taste in every bite. These fresh grapes have a firm texture and a vibrant red color. Enjoy them as a healthy snack or use as an ingredient in sweet and savory dishes. Use them in salads, pies, tarts, chicken salad and more. They are great for health conscious individuals as they are USDA organic. They are also a nutrient dense fruit that is low in calories. This container comes with two pounds of grapes making it easy to stock up on your favorite fruit. Enjoy fresh from the farm flavors with Marketside Organic Red Grapes. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Fresh Organic Red Seedless Grapes Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Marketside', 'https://i5.walmartimages.com/asr/abaf57b8-4b92-4b87-9be4-8b77e031073f.167672647b84e3503555fa9f6f68405f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/abaf57b8-4b92-4b87-9be4-8b77e031073f.167672647b84e3503555fa9f6f68405f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/abaf57b8-4b92-4b87-9be4-8b77e031073f.167672647b84e3503555fa9f6f68405f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (11025598, 'Fresh Mandarin Oranges, 3 lb Bag', 3.97, '899783002024', 'Enjoy the juicy goodness of citrus when you eat a Fresh Mandarin Orange. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, clementines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, mandarins are now available year-round in most markets. Mandarins are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the mandarins hang out in a bowl on your counter or table to breathe. Compact and portable, mandarins are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious fresh mandarin on hand for an easy, healthy treat.', 'Fresh Clementines, 3 lb Bag Delicious, sweet, juicy citrus Pleasing sweet-tart flavor Easy to peel and segment Excellent source of vitamin C, potassium, and folic acid For maximum flavor, do not refrigerate Typically seedless You\'ll have plenty for everyone with this 3-pound bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6f74508d-b685-4657-b5a0-2d29ab6a026f.a8d3beade57c94b66b31d9cf87e12e13.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6f74508d-b685-4657-b5a0-2d29ab6a026f.a8d3beade57c94b66b31d9cf87e12e13.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6f74508d-b685-4657-b5a0-2d29ab6a026f.a8d3beade57c94b66b31d9cf87e12e13.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (13424464, 'Fresh Valencia Oranges, 4 lb, Bag', 3.97, '033383120584', 'Known for their sweet flavor, Valencia Oranges have a thin skin and are typically very juicy. It is the most popular orange for juicing. It\'s juice will remain perfectly sweet even after air exposure. With a balanced sweet-to-tart flavor ratio that carries over to their juice, Valencia Oranges are widely available during the spring and summer months. Use Valencia oranges to make fresh orange juice, or use their flesh, juice, and zest in baked goods, cocktails, sauces, and marinades. Keep some sunshine on hand with Valencia Oranges. Available in a 4 lb bag.', '4 lb bag of Valencia oranges Thin skin and very juicy Most popular orange for juicing Balanced sweet-to-tart flavor ratio Widely available during the spring and summer months Use their flesh, juice, and zest in baked goods, cocktails, sauces, and marinades', 'Fresh Produce', 'https://i5.walmartimages.com/asr/aa6059cd-c60c-4fd5-b4ee-52d402de51db.e50ceff4098f3006f5000acb3c8941d5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa6059cd-c60c-4fd5-b4ee-52d402de51db.e50ceff4098f3006f5000acb3c8941d5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa6059cd-c60c-4fd5-b4ee-52d402de51db.e50ceff4098f3006f5000acb3c8941d5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (13908231, 'Fresh Cranberries, 12 oz, Bag', 0.98, '854641003001', 'Savor the tart taste of Fresh Cranberries. Cranberries have a wonderful tart flavor that can easily take on the sweetness of your favorite sweetener. Use them to make a tart cranberry sauce, bake them into delicious cranberry and orange scones, combine with baked Brie for a gooey, sweet appetizer, or reduce them for a glaze to use on grilled chicken or turkey. They contain essential vitamins and nutrients like vitamin C, vitamin B, fiber, and antioxidants making them perfect for a healthy diet. Prior to use simply gently wash them with cool water, drain, and enjoy the zesty taste. Refrigerate the berries to keep them fresh and ready for use. Pick up a Fresh Cranberries container today and relish the delectable flavor.', 'Fresh Field Grown Cranberries, 12 oz Bag: Enjoy with your favorite sweetener, baked good, or savory dish Enjoy with your favorite sweetener, baked good, or savory dish Light, tart taste Healthy treat Prior to use gently wash them with cool water Refrigerate your berries in the original container to maintain freshness Light, tart taste Healthy treat Prior to use gently wash them with cool water Refrigerate your berries in the original container to maintain freshness Keep dry for optimal freshness Cranberries can be stored up to 4 weeks in the refrigerator and up to 1 year in the freezer Keep dry for optimal freshness Cranberries can be stored up to 4 weeks in the refrigerator and up to 1 year in the freezer', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f9943649-faa7-4963-972e-1bcc4b468b57.d540cac6a95f56e03208080aaeb56f75.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f9943649-faa7-4963-972e-1bcc4b468b57.d540cac6a95f56e03208080aaeb56f75.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f9943649-faa7-4963-972e-1bcc4b468b57.d540cac6a95f56e03208080aaeb56f75.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (15716498, 'Del Monte Red Grapefruit Fruit Cup Snacks, No Sugar Added, 6.5 oz Cup', 1.97, '024000507932', 'Del Monte Red Grapefruit Fruit Cup Snacks, 6.5 oz Cup is packed with delicious, wholesome fruit with no sugar added for a snack you can feel good about. These bite-sized grapefruit pieces are conveniently packaged in easy-to-open individual fruit cups for a quick on the go snack. Each of these no sugar added fruit cups is rich in Vitamin C and contains 60% less sugar than Red Grapefruit in artificially sweetened water. Easily pack these fruit cups in a school lunchbox for a tasty school snack, or grab a few to take on a weekend trip with the family. Each refrigerated fruit cup comes with an easy peel-off lid for a tasty fruit snack you can say yes to every day. Bring goodness to your family with Del Monte Red Grapefruit Fruit Cup Snacks.', 'One 6.5 oz cup of Del Monte Red Grapefruit Fruit Cup Snacks Enjoy the delicious taste of juicy Del Monte Red Grapefruit with no added sugar, in every fruit cup These bite-sized red grapefruit pieces are bursting with juicy flavor for a nourishing and convenient fruit snack Bring a pack of fruit cups for a weekend trip with the family, or pack some grapefruit cups in a school lunchbox for a tasty school snack Each individual grapefruit Fruit Cup Snack offers a rich source of Vitamin C', 'Del Monte', 'https://i5.walmartimages.com/asr/e4a819ce-d11a-4da1-8804-4c5780a2db54.96d188063be69a5385a805c43c5fc7b7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4a819ce-d11a-4da1-8804-4c5780a2db54.96d188063be69a5385a805c43c5fc7b7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4a819ce-d11a-4da1-8804-4c5780a2db54.96d188063be69a5385a805c43c5fc7b7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (19400486, 'Walmart Produce Wrapped Watermelon Quarters', 3.28, '826766125005', 'short description is not available', 'Walmart Produce Wrapped Watermelon Quarters', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bece1249-8c24-44f5-86c8-8f8ce4e93b1e_1.7e6368f068bb06ef75dc29fff55de3c9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bece1249-8c24-44f5-86c8-8f8ce4e93b1e_1.7e6368f068bb06ef75dc29fff55de3c9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bece1249-8c24-44f5-86c8-8f8ce4e93b1e_1.7e6368f068bb06ef75dc29fff55de3c9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (20554590, 'Del Monte Red Grapefruit Fruit Cup Snacks, 7 oz', 1.97, '810051010480', 'Del Monte Red Grapefruit Fruit Cup Snacks, 7 oz Cup is packed with delicious wholesome red grapefruit in extra light syrup for a snack you can feel good about. Del Monte Red Grapefruit comes conveniently packaged in easy-to-open individual fruit cups for a quick on the go snack. Each Del Monte Red Grapefruit cup offers a rich source of Vitamin C and is bursting with flavor, a nourishing snack the whole family will love. Enjoy the sweet taste of grapefruit goodness with every fun spoonful. Easily pack these fruit cups in a school lunchbox for a tasty school snack, or grab a few to take on a weekend trip with the family. Bring goodness to your family with Del Monte.', 'One 7 oz cup of Del Monte Red Grapefruit Fruit Cup Snacks Each Del Monte Red Grapefruit fruit snack cup offers a rich source of Vitamin C Del Monte Red Grapefruit cups are bursting with rich, fruity flavor for a nourishing and convenient snack Enjoy the delicious taste of juicy red grapefruit in extra light syrup Bring a pack of fruit cups for a weekend trip with the family, or pack some grapefruit cups in a school lunchbox for a tasty school snack', 'Del Monte', 'https://i5.walmartimages.com/asr/bbbd73a5-f22d-4d52-adc2-3625aa86b60b.1b42c719ba589a98f92b661d26a1adab.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bbbd73a5-f22d-4d52-adc2-3625aa86b60b.1b42c719ba589a98f92b661d26a1adab.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bbbd73a5-f22d-4d52-adc2-3625aa86b60b.1b42c719ba589a98f92b661d26a1adab.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (20680599, 'Concord Foods, Chiquita Banana Bread Mix, 13.7 oz', 2.64, '041409002479', 'Banana Bread Mix 13.7 OZ Pouch. Just add 2 fresh & ripe bananas, water and egg. Easy to make. Shelf-Stable in plastic pouch. No partially hydrogenated oils. No artificial flavors. No preservatives. For more tasty suggestions and Concord Foods recipes, visit our website at www.concordfoods.com. You Will Need: 1 cup mashed banana approx. 2 bananas (over-ripe); 1 large egg (lightly beaten); 1/3 cup water. 1. Pre-heat oven to 350 degrees F. Grease and lightly flour 8 x 4 inch loaf pan. 2. Stir contents of Chiquita Banana Bread pouch with water, lightly beaten egg and mashed bananas for 1-2 minutes or until all ingredients are wet. 3. Pour batter into greased and floured loaf pan. 4. Bake at 350 degrees for 45-50 minutes or until toothpick inserted into center comes out clean. If using a 9 x 5-inch baking pan adjust baking time to 40-45 minutes. Cool 20 minutes. Loosen edges with knife and remove from pan. Makes 12 servings! 13.7 oz (390 g). Pouch is #2 recyclable. Approved for store drop-off programs.', 'Banana Bread Mix Just add 2 fresh bananas, water and egg. Easy to make. No partially hydrogenated oils. No artificial flavors. No preservatives. Shelf-Stable Plastic Pouch .', 'Chiquita', 'https://i5.walmartimages.com/asr/9118f2e8-5ae8-491f-89a2-0f1044b657ff.eef1aa6ba2eb2b41db1d9c03d67f99ab.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9118f2e8-5ae8-491f-89a2-0f1044b657ff.eef1aa6ba2eb2b41db1d9c03d67f99ab.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9118f2e8-5ae8-491f-89a2-0f1044b657ff.eef1aa6ba2eb2b41db1d9c03d67f99ab.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (21968705, 'Fresh Melon Trio, 16 oz', 3.88, '717524777058', 'Introducing Del Monte® Melon Medley - a delightful fusion of three exquisite melons, featuring Del Monte\'s signature Quality®. This refreshing medley combines juicy cantaloupe (USA), succulent honeydew (USA), and thirst-quenching watermelon, creating a symphony of flavors and textures. Perfect for any occasion, the Del Monte® Melon Medley is a delightful way to enjoy the best of nature\'s offerings. Share this vibrant and delicious fruit blend with friends and family, or savor it alone as a healthy and satisfying treat. Experience the unparalleled taste of Del Monte® Melon Medley today!', 'No preservatives Introducing Del Monte® Melon Medley - a delightful fusion of three exquisite melons, featuring Del Monte\'s signature Quality®.&; This refreshing medley combines juicy cantaloupe (USA), succulent honeydew (USA), and thirst-quenching watermelon, creating a symphony of flavors and textures.&; Perfect for any occasion, the Del Monte® Melon Medley is a delightful way to enjoy the best of nature\'s offerings.&; Share this vibrant and delicious fruit blend with friends and family, or savor it alone as a healthy and satisfying treat. &Experience the unparalleled taste of Del Monte® Melon Medley today! Find this in your local Walmart! Delicious Melon Trio', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2974442f-942c-4f12-8415-34a58dadb530_1.f68cab08deeed20be25c17416c5e0d3f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2974442f-942c-4f12-8415-34a58dadb530_1.f68cab08deeed20be25c17416c5e0d3f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2974442f-942c-4f12-8415-34a58dadb530_1.f68cab08deeed20be25c17416c5e0d3f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (22142321, 'Melon Trio 9 Oz', 2.48, '826766255849', 'short description is not available', 'Melon Trio 9 Oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/fd2fac8a-5558-4c3d-97fa-60da7c4ade84_1.205ec17d75a91fd1299d4b9648117f00.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fd2fac8a-5558-4c3d-97fa-60da7c4ade84_1.205ec17d75a91fd1299d4b9648117f00.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fd2fac8a-5558-4c3d-97fa-60da7c4ade84_1.205ec17d75a91fd1299d4b9648117f00.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (22211097, 'Concorde Pears, each', 0.69, '887434030168', 'Concorde Pear', 'Concorde Pears', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7f4a1db5-89fb-487b-836a-1e0a27d2cf2c.48dee7b39cf8bd7a00d380d9a0d59543.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7f4a1db5-89fb-487b-836a-1e0a27d2cf2c.48dee7b39cf8bd7a00d380d9a0d59543.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7f4a1db5-89fb-487b-836a-1e0a27d2cf2c.48dee7b39cf8bd7a00d380d9a0d59543.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (22660282, 'Fresh Strawberries, 2 lb, Container', 5.97, '780353784047', 'The sweet, juicy flavor of Fresh Strawberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like, vitamin C, dietary fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Strawberries today and savor the delectable flavor.', 'Prior to serving gently wash the fruit and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'Fresh Produce', 'https://i5.walmartimages.com/asr/dd2bcd97-25af-4a91-9258-989853e16b2f_1.36dd4f1579a25d423741d9970de3ddac.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd2bcd97-25af-4a91-9258-989853e16b2f_1.36dd4f1579a25d423741d9970de3ddac.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd2bcd97-25af-4a91-9258-989853e16b2f_1.36dd4f1579a25d423741d9970de3ddac.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (22863044, 'Crunch Pak Flavorz Disney Sliced Apples w/Natural Grape Flavor, 10 oz/5 ct', 3.48, '732313089983', '', 'Crunch Pak Flavorz Disney Sliced Apples with Natural Grape Flavor: Healthy snack Mickey Mouse and friends', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8c6d6a4a-e270-4a7f-943e-a63991349810.a3c498abfce578c2a52cdc934757e23a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8c6d6a4a-e270-4a7f-943e-a63991349810.a3c498abfce578c2a52cdc934757e23a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8c6d6a4a-e270-4a7f-943e-a63991349810.a3c498abfce578c2a52cdc934757e23a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (24538641, 'Fresh Kiwi, 16 oz, Package', 3.12, '054107401000', 'Treat yourself to the delicious and refreshing taste of kiwi. Kiwi are known for their sweet, tangy, and soft flesh and nutritional benefits. They are packed with vitamin C, fiber, and antioxidants. They\'re also fat-free and have a low glycemic index. Enjoy a fresh kiwi with your breakfast to start your day off on the right foot or bring one to work and treat yourself to a scrumptious healthy snack at the office. You can also serve them up in a big fresh fruit salad with all your favorite fruits like strawberries, apples, blueberries and more. They\'re even perfect for topping pies, tres leches cakes, tarts and more for dessert. The possibilities are endless when you bring home Kiwi', 'Delicious sweet and tangy kiwi fruit Packed with Vitamin C, fiber and antioxidants with a scrumptious fruit taste Enjoy a fresh kiwi with your breakfast to start your day off on the right foot Bring one to work and treat yourself to a scrumptious healthy snack at the office Great for school lunches Perfect for topping desserts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/15bd81c7-5450-4d7a-8b58-a9256c868da0.4d15c3921b6f2774c1db0be4f5e39158.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/15bd81c7-5450-4d7a-8b58-a9256c868da0.4d15c3921b6f2774c1db0be4f5e39158.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/15bd81c7-5450-4d7a-8b58-a9256c868da0.4d15c3921b6f2774c1db0be4f5e39158.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (28826837, 'Marketside Fresh Cut Mango, 16 oz Tray', 5.44, '074641003171', 'Enjoy the sweet, tropical flavor of Marketside Mango. These precut pieces are great for breakfast, lunch, dessert, or when you want a snack. Mango is a good source of vitamin C making it an excellent healthy treat. You can eat it right out of the container, infuse them with water and mint for a refreshing drink, or chop them up and make a mouthwatering mango salsa with jalapenos, tomatoes, and red onion. With 16-ounces in each container, this mango is great for sharing with friends and family or keep it for yourself. It comes in a closable container to help maintain freshness. Bring home Marketside Mango today for a refreshing, healthy treat. Marketside provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Marketside item.', 'Marketside Mango 16 oz Comes in a re-closable container to help maintain freshness Great for breakfast, lunch, dessert, or when you want a snack No preservatives, artificial colors, or artificial flavors Convenient and portable Share with friends and family or keep for yourself Make a fruit bowl topped with whipped cream or a yogurt parfait Enjoy on their own or in a variety of recipes', 'Marketside', 'https://i5.walmartimages.com/asr/70a13b6e-8fc2-4689-8f7c-f116bd06db60.c6d1ff904eb5cdbe90ce7f35604cb74d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/70a13b6e-8fc2-4689-8f7c-f116bd06db60.c6d1ff904eb5cdbe90ce7f35604cb74d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/70a13b6e-8fc2-4689-8f7c-f116bd06db60.c6d1ff904eb5cdbe90ce7f35604cb74d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (28826839, 'Fresh Pineapple Rings, 8 oz', 1.99, '074641042002', '', 'Fresh Pineapple Rings: Cleaned and cut Ready to eat', 'Country Fresh', 'https://i5.walmartimages.com/asr/4a9ca2e9-fb23-4829-973e-c7e81891dab4_1.ec3705a43b639df9aea0d7a984ecf46a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4a9ca2e9-fb23-4829-973e-c7e81891dab4_1.ec3705a43b639df9aea0d7a984ecf46a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4a9ca2e9-fb23-4829-973e-c7e81891dab4_1.ec3705a43b639df9aea0d7a984ecf46a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (29823646, 'Concord Foods Lemon Juice from Concentrate, No Pulp, 4.5 oz', 0.98, '041409000055', 'Concord Foods Lemon Juice contains no pulp and will add zest and flavor to your favorite recipes. Use this lemon juice in sweet treats like lemon thumbprint cookies, lemon snowball cookies, or cheesecake lemon bars. You can also use it to add flavor to savory foods like lemon chicken, lemon spinach dip or a leafy green salad. There are 26 servings in each bottle which equates to the juice of almost three lemons. Enjoy the caffeine-free taste and versatility of Concord Foods Lemon Juice. Shelf-Stable (Refrigerate after opening).', 'Concord Foods Lemon Juice, From Concentrate, 4.5 FL OZ May be used in a variety of savory or sweet recipes Drizzle on fish or add to your favorite sauces Caffeine-free, no pulp Use to make refreshing beverages 3 tbsp. of juice equals 1 medium lemon Refrigerate after opening Shelf-Stable', 'Concord Foods', 'https://i5.walmartimages.com/asr/bc849737-899a-460b-bc58-d2d7a8158687.768b4d9d7a618e0a5e6a29aa31af28f5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc849737-899a-460b-bc58-d2d7a8158687.768b4d9d7a618e0a5e6a29aa31af28f5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc849737-899a-460b-bc58-d2d7a8158687.768b4d9d7a618e0a5e6a29aa31af28f5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (32176609, 'Fresh Green Seedless Grapes, 3 lb', 4.97, '854957001364', 'Treat yourself to the delicious, juicy flavor of Fresh Green Seedless Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Green Seedless Grapes.', 'Fresh Green Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/63e94312-19b8-4874-9e43-518a58288cee.7e323d21847755a8a1b7fe3f7ff8dad1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/63e94312-19b8-4874-9e43-518a58288cee.7e323d21847755a8a1b7fe3f7ff8dad1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/63e94312-19b8-4874-9e43-518a58288cee.7e323d21847755a8a1b7fe3f7ff8dad1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (32196592, 'Fresh Tomatillo Milpero, 1 Pound Bag', 2.52, '045255128581', 'Enjoy the delicious flavor of fresh Milpero Tomatillos. Milpero tomatillos are a miniaturized version of the tomatillo, about half the size of their cousin. The flavor is more concentrated with a sweeter, less acidic taste than the tomatillo. This versatile ingredient is perfect for a variety of mouthwatering dishes. Use them raw by chopping and mixing into a salsa for a tangy addition or puree them and pour over a pork butt in a slow cooker. After cooking for several hours, you\'ll have a tender, juicy pork butt that\'s great for taco or burritos. Simply shuck the husk off the tomatillos and wash then prepare them for your dish. With so many so many ways to prepare them, Milpero Tomatillos will become a staple in your dishes.', 'Milpero Tomatillos, Per Pound: A smaller, sweeter, less acidic version of the tomatillo Acidic, tangy flavor raw and a sweeter, less acidic taste cooked Versatile ingredient perfect for a variety of dishes Chop and mix with onions, cilantro, and lime juice for salsa Puree and pour over pork butt in a slow cooker for a tender and juicy protein for tacos and burritos Shuck off the husk, wash, and then prepare', 'Fresh Produce', 'https://i5.walmartimages.com/asr/116839f7-1173-4dfc-bd1c-5edbf81212f3.020e98934faa2f36ed2308046787fc1a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/116839f7-1173-4dfc-bd1c-5edbf81212f3.020e98934faa2f36ed2308046787fc1a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/116839f7-1173-4dfc-bd1c-5edbf81212f3.020e98934faa2f36ed2308046787fc1a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33284077, 'Chiquita Juicy Red Apple Bites with Vanilla Flavored Yogurt Dip, 2.5 oz', 0.98, '074904201689', 'Get active with Chiquita Juicy Red Apple Bites with Vanilla Flavored Yogurt Dip. Apples are naturally packed with phytonutrients like phenols that can boost your immunity. Each bag contains one fabulous fruit serving of hardworking antioxidants like vitamin C that can produce anti-stress hormones and promote oxygen flow to pump up your energy. And why do Chiquita\'s apples look so good? Because they\'re soaked in a wonderful calcium and vitamin C wash that keeps them from turning brown. So activate your core and keep loving life with Chiquita Juicy Red Apple Bites.', 'Chiquita Juicy Red Apple Bites with Vanilla Flavored Yogurt Dip: Washes and ready to eat A great source of nutrition 60 calories per pack Excellent source of vitamin C 1-half cup of fruit', 'Chiquita', 'https://i5.walmartimages.com/asr/7abb6ab3-4dbf-4311-882d-b7383430faa7_1.f21abc2d87276ed3d3b352715a5c0975.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7abb6ab3-4dbf-4311-882d-b7383430faa7_1.f21abc2d87276ed3d3b352715a5c0975.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7abb6ab3-4dbf-4311-882d-b7383430faa7_1.f21abc2d87276ed3d3b352715a5c0975.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33284079, 'Chiquita Juicy Red Apple Bites, 2 oz, 5 count', 4.87, '074904201719', 'Apple, Juicy Red 5 - 2 oz (56 g) packs 10 oz (280 g) Washed & ready to eat. 30 calories per pack. Excellent source of vitamin C. Questions? Comments? Call 1-800-242-5472 or visit www.chiquita.com. Product of USA. Keep refrigerated. 5 - 2 oz (56 g) packs 10 oz (280 g) 550 S. Caldwell St. Charlotte, NC 28202 800-242-5472 2012 Chiquita Brands LLC', 'Apple, Juicy Red Washed & ready to eat. 30 calories per pack. Excellent source of vitamin C. Questions? Comments? Call 1-800-242-5472 or visit www.chiquita.com. Product of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ec1f985d-b8bd-4371-a86e-9734ac397f7e.94a5304839aabcbb092fe21d12367e45.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec1f985d-b8bd-4371-a86e-9734ac397f7e.94a5304839aabcbb092fe21d12367e45.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec1f985d-b8bd-4371-a86e-9734ac397f7e.94a5304839aabcbb092fe21d12367e45.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33338131, 'Broccoli Crown Bag, 16 oz', 1.68, 'deleted_027918701102', 'Tanimura & Antle Broccoli crowns are the premium cut of broccoli, trimmed just under the broccoli head. They are hand-harvested and trimmed on U.S. family farms for superior quality. Stand-up pouch provides protection against excessive in-store handling and allows you to clearly see the fresh product. Handle pouch is re-sealable, keeps product fresh and easy to store.', 'Broccoli Crown Bag, 16 oz: Field-packed for freshness Premium cut of broccoli, trimmed just under the broccoli head Chop, add to stir-fry or pasta sauce, or steam Broccoli crowns are the premium cut of broccoli, trimmed just under the broccoli head. They are hand-harvested and trimmed on U.S. family farms for superior quality. Stand-up pouch provides protection against excessive in-store handling and allows you to clearly see the fresh product. Handle pouch is re-sealable, keeps product fresh and easy to store.', 'Tanimura & Antle', 'https://i5.walmartimages.com/asr/44ae7a77-4d0a-44d5-aea0-10ce0a6a5b8e_1.42eba6ee1888c86369e5b672432c8ab5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44ae7a77-4d0a-44d5-aea0-10ce0a6a5b8e_1.42eba6ee1888c86369e5b672432c8ab5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44ae7a77-4d0a-44d5-aea0-10ce0a6a5b8e_1.42eba6ee1888c86369e5b672432c8ab5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33338837, 'Jicama Chunks 10 Oz', 2.48, 'deleted_074641023155', 'short description is not available', 'Jicama Chunks 10 Oz', '', 'https://i5.walmartimages.com/asr/bc607b05-dc0b-4e10-922d-d13409b56a2e_1.0493cbeca36765d38cb1451917fb0827.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc607b05-dc0b-4e10-922d-d13409b56a2e_1.0493cbeca36765d38cb1451917fb0827.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc607b05-dc0b-4e10-922d-d13409b56a2e_1.0493cbeca36765d38cb1451917fb0827.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33469968, 'Fresh Exp Single Serve Italian 2-3.5oz', 1.98, '071279211039', 'short description is not available', 'Fresh Exp Single Serve Italian 2-3.5oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5bc29479-b0e3-48b7-8c60-3b2c907e1916_1.22320fa98f979e77300fb5a6ff6ae24b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5bc29479-b0e3-48b7-8c60-3b2c907e1916_1.22320fa98f979e77300fb5a6ff6ae24b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5bc29479-b0e3-48b7-8c60-3b2c907e1916_1.22320fa98f979e77300fb5a6ff6ae24b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33469969, 'Fresh Exp Single Serve Hrts Of Romaine', 1.98, '071279261140', 'short description is not available', 'Fresh Exp Single Serve Hrts Of Romaine', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2a447257-37fa-4f0a-953a-b470420c6db2_1.8cac9280b3dea330274e7ee814ed6820.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a447257-37fa-4f0a-953a-b470420c6db2_1.8cac9280b3dea330274e7ee814ed6820.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a447257-37fa-4f0a-953a-b470420c6db2_1.8cac9280b3dea330274e7ee814ed6820.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33469980, 'Fresh Exp Single Spring Mix 2-1.5oz', 1.98, '071279271217', 'short description is not available', 'Fresh Exp Single Spring Mix 2-1.5oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/ed25d09d-e0b5-4cc7-af07-b3148b3403d3_1.0ed500f1e2e7539b3906a2f9f90ce686.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed25d09d-e0b5-4cc7-af07-b3148b3403d3_1.0ed500f1e2e7539b3906a2f9f90ce686.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed25d09d-e0b5-4cc7-af07-b3148b3403d3_1.0ed500f1e2e7539b3906a2f9f90ce686.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33628817, 'Cut N Clean Turnip Greens, 1 lb', 3.68, '028764702282', 'Nature\'s Greens Turnip Greens', 'A mustard flavor with a peppery bite A part of the mustard family, these have a zippy mustard flavor and peppery bite. Turnip greens mix well with other greens varieties (collards, mustard greens and turnip greens is a common traditional mix) or they can be cooked singly.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/86f00e60-96d0-431e-b504-cdf5a004e2d0_1.6352c9742cb4812fb4a95bd5b188db17.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/86f00e60-96d0-431e-b504-cdf5a004e2d0_1.6352c9742cb4812fb4a95bd5b188db17.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/86f00e60-96d0-431e-b504-cdf5a004e2d0_1.6352c9742cb4812fb4a95bd5b188db17.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33784652, 'Cored Pineapple, 10 oz', 2.98, '030223081296', 'Cored Pineapple is a quick-and-easy way to enjoy your fresh fruit.', 'Cored Pineapple: Healthy, fresh, simple Convenient, easy to eat on the go', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cf6cb84e-c022-428a-aae8-7b195d5e7dc9_1.effb6f4d7eb048f524c4232611f2d0f1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cf6cb84e-c022-428a-aae8-7b195d5e7dc9_1.effb6f4d7eb048f524c4232611f2d0f1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cf6cb84e-c022-428a-aae8-7b195d5e7dc9_1.effb6f4d7eb048f524c4232611f2d0f1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33786617, 'Lemon Slices W/ Rine 5.5 Oz', 1.98, '074641004284', 'short description is not available', 'Lemon Slices W/ Rine 5.5 Oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/df928707-44cb-490b-b0ef-d5cc9c9e889d_1.ab65a08f586e7d08538bb50d215f0f7f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/df928707-44cb-490b-b0ef-d5cc9c9e889d_1.ab65a08f586e7d08538bb50d215f0f7f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/df928707-44cb-490b-b0ef-d5cc9c9e889d_1.ab65a08f586e7d08538bb50d215f0f7f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33786618, 'Fresh Diced Nopalitos, 12 oz', 2.48, 'deleted_074641060013', '', 'NOPALITO DICED 12ZHM', 'Country Fresh', 'https://i5.walmartimages.com/asr/7137ed79-bb39-4f00-9d9c-fdcb532e0488_1.77c2765ae49e06613a27cf11ce90589b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7137ed79-bb39-4f00-9d9c-fdcb532e0488_1.77c2765ae49e06613a27cf11ce90589b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7137ed79-bb39-4f00-9d9c-fdcb532e0488_1.77c2765ae49e06613a27cf11ce90589b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33789515, 'Lemon Slices 5 Oz', 1.98, '826766255948', 'short description is not available', 'Lemon Slices 5 Oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/26408ab4-9a8d-4e6a-a704-bbe943330312_1.6f14282b812fcc9cccfeff27e7087fa8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/26408ab4-9a8d-4e6a-a704-bbe943330312_1.6f14282b812fcc9cccfeff27e7087fa8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/26408ab4-9a8d-4e6a-a704-bbe943330312_1.6f14282b812fcc9cccfeff27e7087fa8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (33866209, 'Fresh Chile De Arbol, 4 oz, Tray', 2.98, '045255145908', 'Our fresh Chile de Arbol will add some heat to your next meal. These peppers are vibrant with skin that is smooth, translucent, and rather brittle. With a heat level of seven out of 10, this pepper tends to have a vicious bite, so handle with caution. The smaller the pepper, the hotter it is. Chile de Arbol is generally used for hot sauces and spicy salsas. No matter how you choose to use them, these peppers will add heat to any recipe. Explore new recipes and discover all the delicious ways to prepare this tasty pepper. Add something hot and spicy to your next meal with our fresh Chile de Arbol.', 'Hot Chile pepper Heat level is 7 out of 10 The smaller the pepper, the hotter it is Tends to have a vicious bite, so handle with caution Generally used to make hot sauces and spicy salsas Explore delicious new recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2a1d71b9-4855-4fca-92ba-aa24dbb80c31.baddf46746041419822c734853eb08ed.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a1d71b9-4855-4fca-92ba-aa24dbb80c31.baddf46746041419822c734853eb08ed.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a1d71b9-4855-4fca-92ba-aa24dbb80c31.baddf46746041419822c734853eb08ed.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (34017487, 'Marketside Hearts of Romaine Salad, 10 oz Bag', 3.34, '681131027830', 'Level up your salads with Marketside Hearts of Romaine. Romaine is a popular lettuce for use in salads, wraps, and other dishes because of its sweet, mild flavor and crisp, crunchy texture. Hearts of romaine are the smaller, more tender, and sweeter center leaves, prized for use in Caesar salads. Romaine hearts can also be grilled to bring out a delicate smoky flavor that pairs beautifully with a vinaigrette and Parmesan cheese for an unusual but crowd-pleasing vegetable side. Find new reasons to love lettuce with Marketside Hearts of Romaine. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Excellent Source of Vitamin A, Vitamin K, and Folate Thoroughly Washed Ready to Eat', 'Marketside', 'https://i5.walmartimages.com/asr/2eb80fe8-5b91-4c02-b908-b44209a96321.a644ddce8434af633bdf30b48a07b907.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2eb80fe8-5b91-4c02-b908-b44209a96321.a644ddce8434af633bdf30b48a07b907.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2eb80fe8-5b91-4c02-b908-b44209a96321.a644ddce8434af633bdf30b48a07b907.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (34017489, 'Marketside Butter Lettuce Salad Blend, 6 oz Bag', 2.73, '681131027861', 'Marketside Butter Lettuce Salad is made with a wholesome medley of butter lettuce and red leaf lettuce. This mix is picked fresh, washed and ready to eat for your convenience. Use it to create your very own personalized salad tossed with your favorite vegetables, protein, nuts and dressing. Use it as a topping on sandwiches and pizzas, or simply enjoy it as a healthy side. It offers nutritional benefits such as being an excellent source of vitamin A and K. Enjoy fresh from the farm taste with Marketside Butter Lettuce Salad. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Heathy mix of butter lettuce and red leaf lettuce Washed and ready to eat Picked fresh for you Net weight 6 oz', 'Marketside', 'https://i5.walmartimages.com/asr/b64ec4f6-fe77-49ba-b8bd-ecd40e87c077.50c7043d47cc007da71e2beeff618650.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b64ec4f6-fe77-49ba-b8bd-ecd40e87c077.50c7043d47cc007da71e2beeff618650.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b64ec4f6-fe77-49ba-b8bd-ecd40e87c077.50c7043d47cc007da71e2beeff618650.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (34017490, 'Marketside Fresh Baby Spinach, 6 oz Bag (Fresh)', 2.18, '681131027908', 'Marketside Baby Spinach has a smooth, tender texture and great fresh taste and is loaded with nutrients. This spinach is packed fresh, washed and ready to eat for your convenience. Use it to create your very own personalized salad that is tossed with your favorite vegetables, protein, nuts and dressing. Use it as a topping on sandwiches and pizzas or simply enjoy it as a healthy side. It offers nutritional benefits as it is a rich source of dietary fiber, calcium, iron and vitamins A and C. Enjoy fresh from the farm taste and bring home Marketside Baby Spinach today. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Fresh Baby Spinach, 6 oz Bag Excellent source of vitamins A and C Can be used in a wide variety of dishes Picked fresh for you Washed and ready to eat Perishable, keep refrigerated Net weight 6 oz', 'Marketside', 'https://i5.walmartimages.com/asr/5e85307c-f0f4-4b68-9a4b-82446a9ddb49.93b24bfd0b2b96fc2a626bf03a24923e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5e85307c-f0f4-4b68-9a4b-82446a9ddb49.93b24bfd0b2b96fc2a626bf03a24923e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5e85307c-f0f4-4b68-9a4b-82446a9ddb49.93b24bfd0b2b96fc2a626bf03a24923e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (34143814, 'Fresh Plantain, 1 Count', 0.58, '717524210005', 'Get creative in the kitchen with these delicious Plantains. While you can eat plantains uncooked, they\'re typically cooked to bring out their amazing flavor. Larger and starchier than bananas, plantains may be used in a wide variety of recipes. For a quick and easy treat, you can fry them in oil and serve with your favorite dipping sauce. You can also incorporate them into a hearty stew or try them as a topping for your tacos or nachos. For dessert, you can thinly slice them, bake them, and serve with chocolate drizzle. Create your next culinary masterpiece with these fresh Plantains.', 'Plantains: Used in a wide variety of recipes Fry and serve with your favorite dipping sauce Use to top tacos or nachos Larger and starchier than a banana Good source of vitamins and minerals Also known as Plátano Macho, Cooking Banana, Green Plantain, and Maduro around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8f09649d-0bb9-49f0-8aef-89da183e9b96.319b2632d4a2c10aab70a569a0d3036b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8f09649d-0bb9-49f0-8aef-89da183e9b96.319b2632d4a2c10aab70a569a0d3036b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8f09649d-0bb9-49f0-8aef-89da183e9b96.319b2632d4a2c10aab70a569a0d3036b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (36240078, 'Marketside Organic Fresh Baby Spinach, 16 oz', 5.74, '032601901509', 'Give your body the healthy food it deserves with Marketside Organic Baby Spinach. This baby green is a nutritional powerhouse, packing in 15 percent of your daily iron, 10 percent of your daily potassium, and six percent of your daily calcium per serving. Swap out iceberg lettuce and replace it with spinach in your salads, sandwiches, and more. Create a killer spinach and artichoke dip and serve with carrot and celery sticks for an appetizer the whole family will love. Making nutritious and delicious meals is simple with Marketside Organic Baby Spinach. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Baby Spinach, 16 oz Washed and ready to eat USDA certified organic 15% daily iron, 10% daily potassium, and 6% daily calcium per serving 20 calories per serving 2g protein per serving Resealable container to help maintain freshness', 'Marketside', 'https://i5.walmartimages.com/asr/807f156e-bd85-4203-bda8-80ee9ad4881e.9c96d82fee4adc0fdeef62bdd903dba6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/807f156e-bd85-4203-bda8-80ee9ad4881e.9c96d82fee4adc0fdeef62bdd903dba6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/807f156e-bd85-4203-bda8-80ee9ad4881e.9c96d82fee4adc0fdeef62bdd903dba6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (36266896, 'Giorgio Stuffed Cheese & Imitation Bacon Bits Portabella Mushrooms, 8 Oz., 4 Count', 4.98, '070475500176', 'Giorgio Stuffed Cheese & Imitation Bacon Bits Portabella Mushrooms have a tan or brown cap and measure up to six inches in diameters. They are easy to prepare and can be served as appetizers, entrees or side dishes. Portabella mushrooms have a rich, robust mushroom taste and a texture that has been compared to fine beef. Adding the smokey flavor of the bacon and rich flavor of cheddar cheese only adds to the already robust flavor of the portabella mushroom.', 'Giorgio Stuffed Cheese & Imitation Bacon Bits Portabella Mushrooms:America\'s favorite mushroom0 grams trans fat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/52013df2-5531-4602-83f4-0fe24174b306_1.bf5bb7b15c94b1fb18b3aabb1455cbc0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/52013df2-5531-4602-83f4-0fe24174b306_1.bf5bb7b15c94b1fb18b3aabb1455cbc0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/52013df2-5531-4602-83f4-0fe24174b306_1.bf5bb7b15c94b1fb18b3aabb1455cbc0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (36479606, 'Giorgio Stuffed Portabella Mushrooms, 8 oz', 4.98, '037102270055', 'Make life easier and more delicious with Giorgio Stuffed Portabella Mushrooms. These savory, hearty mushrooms taste like they were made from scratch, bursting with flavor and goodness. The vegetarian stuffed portabella mushrooms are crafted with fresh artichokes and ripe spinach, blended with savory, zesty real Parmesan cheese, ladled atop giant portobello mushroom caps. They come ready to bake or broil, for hot appetizers, entrees or side dishes in just a few minutes. The spinach and cheese stuffed portabella mushrooms pair delightfully with most proteins for effortless inclusion into weekly meal plans. Each 8 oz pack contains four heat-and-serve stuffed mushrooms.Giorgio Stuffed Portabella Mushrooms:', 'Stuffed with Parmesan cheese, artichoke and spinachAdds a unique and flavorful taste to the already robust flavorSpinach and cheese stuffed portabella mushrooms are easy to prepare Can be served as appetizers, entrees or side dishesHearty and flavorfulJust heat and serveBake or broil for best flavor8 oz package contains 4 prepared mushrooms', 'Giorgio', 'https://i5.walmartimages.com/asr/acd306ad-e0cf-42af-baa8-44d66ab6e291.7c56149b2fda9a7ce055527ff2e09351.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acd306ad-e0cf-42af-baa8-44d66ab6e291.7c56149b2fda9a7ce055527ff2e09351.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acd306ad-e0cf-42af-baa8-44d66ab6e291.7c56149b2fda9a7ce055527ff2e09351.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (36996407, 'SaladWOW Thai Style White Chicken Salad Kit, 7 Oz.', 3.48, '851146002591', 'The ingredients for the SaladWOW Thai Style White Chicken Salad Kit are chef-inspired and always fresh. SaladWOW\'s on-trend flavor combinations and delicious ingredients will be sure to WOW you. Trust SaladWOW for the very best quality.', 'SaladWOW Thai Style White Chicken Salad Kit:Grilled white chicken, edamame, roasted peanuts, coconutWith tangy orange and soy dressingInspired flavorsAlways freshIndividual pouches from maximum freshness18g protein per serving280 calories per serving; just add lettuce', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2382e12f-332e-486e-8ace-28edaf9e6b2b_1.c5409af5db445207dac1d17ee451773c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2382e12f-332e-486e-8ace-28edaf9e6b2b_1.c5409af5db445207dac1d17ee451773c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2382e12f-332e-486e-8ace-28edaf9e6b2b_1.c5409af5db445207dac1d17ee451773c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (37010915, 'Portabella Mushroom Caps, 14 Oz.', 5.48, '050091400142', 'Portabella Mushroom Caps, 14 Oz.', 'Portabella Mushroom Caps', 'Unbranded', 'https://i5.walmartimages.com/asr/2774f48d-47d3-43a8-b225-0bc5b1cad1af_1.f3b4a76e6c563a4157753b3bc615e068.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2774f48d-47d3-43a8-b225-0bc5b1cad1af_1.f3b4a76e6c563a4157753b3bc615e068.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2774f48d-47d3-43a8-b225-0bc5b1cad1af_1.f3b4a76e6c563a4157753b3bc615e068.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (37011492, 'Power Up Greens Baby Kale, 4.5 oz', 2.48, '071430900147', 'All natural', 'Power Up Greens Baby Kale, 4.5 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cc1a1659-1e5e-4cc3-8197-5ef1f2e5707e_1.dabf016f04639e15e46e4ccc90bd2d7f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc1a1659-1e5e-4cc3-8197-5ef1f2e5707e_1.dabf016f04639e15e46e4ccc90bd2d7f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc1a1659-1e5e-4cc3-8197-5ef1f2e5707e_1.dabf016f04639e15e46e4ccc90bd2d7f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (37011493, 'Power Up Greens Baby Kale & Greens, 4.5 oz', 2.48, '071430900154', 'All natural', 'Power Up Greens Baby Kale & Greens, 4.5 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f93161d4-163a-43aa-a091-95e4d40367d3_1.85190c9a2f984995c6192ef0d987dd96.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f93161d4-163a-43aa-a091-95e4d40367d3_1.85190c9a2f984995c6192ef0d987dd96.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f93161d4-163a-43aa-a091-95e4d40367d3_1.85190c9a2f984995c6192ef0d987dd96.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (37157463, 'Marketside Fresh Veggie Grillers, 23 oz', 6.48, '681131074476', 'Complete your cookout menu with our Marketside Fresh Veggie Grillers. Everyone loves having a flame-kissed veggie skewer to pair with their barbeque, and everyone can agree that the food tastes best when the prep is already done, that\'s exactly why we\'ve combined freshly sliced vegetables with a ready-to-grill skewer. Since we\'ve done all the side work for you, you can focus all your attention on perfecting your barbecue\'s smoky flavor and mouth-watering, fall-apart texture. With our pre-prepared lineup of cremini mushrooms, tender squash, red onion, and bell peppers, all you\'ll have left to do is just butter them up, throw a dash of seasoning on, and they\'re ready to go. We\'ve got your next cookout covered with our Marketside Fresh Veggie Grillers. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Includes 3 fully-assembled vegetable skewers Skewers are ready to grill for your convenience Vegetables include fresh cremini mushrooms, red onions, zucchini, green bell peppers, red bell peppers, and yellow squash Simply dress them up with butter or oil and your favorite seasonings Easy way to add some delicious vegetables to your cookout menu', 'Marketside', 'https://i5.walmartimages.com/asr/5811c339-dcb5-4745-a14b-3cfc96489b2e.7473112b378f3fc8e27c30d0e5e4dbfd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5811c339-dcb5-4745-a14b-3cfc96489b2e.7473112b378f3fc8e27c30d0e5e4dbfd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5811c339-dcb5-4745-a14b-3cfc96489b2e.7473112b378f3fc8e27c30d0e5e4dbfd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (37181924, 'Generic Roland Cepes Dried Mushrooms, 16 Oz, (pa', 59.58, '030684385322', 'short description is not available', 'Generic Roland Cepes Dried Mushrooms, 16 Oz, (pa', 'Roland', 'https://i5.walmartimages.com/asr/0b87e5da-7a71-405d-9195-140b064c19d7.69f12da332c1dad1ffe48a99c8981506.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b87e5da-7a71-405d-9195-140b064c19d7.69f12da332c1dad1ffe48a99c8981506.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b87e5da-7a71-405d-9195-140b064c19d7.69f12da332c1dad1ffe48a99c8981506.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (37295421, 'Fresh Produce Tropical Avocado, Each', 2.68, '000000042215', 'Fresh Whole Tropical Avocado are not only great-tasting fruit, but they are a nutrient-dense food enjoyed around the world. They are a versatile ingredient that can be used in many different types of recipes and dishes. Enjoy it on its own or as part of a salad, sandwiches, wraps, in a smoothie or on your avocado toast. Tropical avocado a great ingredient to use in numerous ways, but it is also a healthy food that adds many health benefits that contributes unsaturated \"good\" fats and a variety of vitamins including vitamin E, vitamin K, vitamin C, and vitamins B5 and B9. Tropical avocados, also known as green skin avocados, are larger than a traditional avocado. They have smooth skin, and with most varieties remain green when ripe. Tropical avocados are harvested in Florida or the Dominican Republic. Fresh Produce Avocado.', 'Versatile ingredient Enjoy it on its own or as part of a salad, fresh guacamole, taco, burrito, or avocado toast Good source of unsaturated \"good\" fats and a variety of vitamins Tropical avocados are larger than a conventional avocado with have smooth skin, and with most varieties remain green when ripe Grown in Florida and Dominican Republic Fresh produce', 'Fresh Produce', 'https://i5.walmartimages.com/asr/447c8d99-28ba-428b-af97-ec514ae263e3_1.0928ed0270b508fa08c84c3d9efe4f8e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/447c8d99-28ba-428b-af97-ec514ae263e3_1.0928ed0270b508fa08c84c3d9efe4f8e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/447c8d99-28ba-428b-af97-ec514ae263e3_1.0928ed0270b508fa08c84c3d9efe4f8e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (37319701, 'Russet Potatoes Whole Fresh, 15 lb, Bag', 5.24, '033383536729', 'Russet Baking Potatoes are the perfect addition to your pantry. With so many ways to prepare potatoes, you\'ll want to add them to every meal. For breakfast, you could make crispy hash browns smothered in cheese and diced ham or add them to a savory omelet. For lunch or dinner, you could use these fresh potatoes to make au gratin potatoes, garlic mashed potatoes, or a baked potato loaded with cheese, sour cream, green onions, and bacon bits. If you\'re hosting a neighborhood get-together, you can use them to make creamy potato salad or homestyle French fries. Serve up something fresh and delicious when you cook with Russet Baking Potatoes.', 'Russet Potatoes, 15 lb bag Russet Baking Potatoes are the perfect addition to your pantry. With so many ways to prepare potatoes, you\'ll want to add them to every meal. &For breakfast, you could make crispy hash browns smothered in cheese and diced ham or add them to a savory omelet. &For lunch or dinner, you could use these fresh potatoes to make au gratin potatoes, garlic mashed potatoes, or a baked potato loaded with cheese, sour cream, green onions, and bacon bits. I f you\'re hosting a neighborhood get-together, you can use them to make creamy potato salad or homestyle French fries.&; Serve up something fresh and delicious when you cook with Russet Baking Potatoes.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9824af0b-18de-4ce8-84be-a43451afd02f.944c1d32628b2b47e02630c7991e96ee.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9824af0b-18de-4ce8-84be-a43451afd02f.944c1d32628b2b47e02630c7991e96ee.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9824af0b-18de-4ce8-84be-a43451afd02f.944c1d32628b2b47e02630c7991e96ee.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (38127803, 'Fresh Red Onions, 2 lb, Bag', 3.48, '091434001312', 'Add some Fresh Red Onions to your favorite recipes. There are a variety of ways to add this fresh produce to your recipes. Add them to your pasta sauces; use them to top pizza; enhance the flavors of your soups, stews, and gumbo; incorporate them into meatloaf; or make delicious omelets or hearty casseroles. You can also dice them and put them in a zesty stir fry or dip the onions in batter to fry up some crowd-pleasing onion rings. Try them in a spicy salsa recipe or on your hamburgers and hot dogs. However you choose to use them, these Fresh Red Onions are a must-have for every kitchen pantry.', 'Red Onions, 2 lb Bag Add savory flavor to a variety of dishes Perfect for at-home cooking Have a mild flavor that is not overpowering or pungent, making them highly versatile for a variety of meals including pizza, a fresh salad topper, on the BBQ and in a burger; Adds color and exceptional flavor to any meal, whether slivered, chopped or diced, making them perfect for at-home cooking Delicious fresh produce item', 'Fresh Produce', 'https://i5.walmartimages.com/asr/73f2f373-5441-47fb-b38c-ad396be33738.3c7b9d6e7e75b12b6f326b0fa1f9c9b6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/73f2f373-5441-47fb-b38c-ad396be33738.3c7b9d6e7e75b12b6f326b0fa1f9c9b6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/73f2f373-5441-47fb-b38c-ad396be33738.3c7b9d6e7e75b12b6f326b0fa1f9c9b6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (38548640, 'Whole Fresh White Sweet Potatoes, 1 Count', 1.28, '801608030440', 'White Sweet Potatoes \"Batata\" are sweet, starchy and most importantly they are fresh and delicious. You can roast or boil them. You can make them mash with a little butter and garlic. You can also slice them fry them in hot oil and make sweet potato chips. Sweet potatoes are a good source of vitamin A, B-complex vitamins, vitamin C and manganese.', 'White Sweet Potatoes &Fresh and Whole Proteins &Carbohydrates &Calcio &Vitamin A; &Vitamin C', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3f680d8f-de39-4fc8-bec3-46acb6c7e87b.4d3a0d3841e4ba6c2275634f4083509d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3f680d8f-de39-4fc8-bec3-46acb6c7e87b.4d3a0d3841e4ba6c2275634f4083509d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3f680d8f-de39-4fc8-bec3-46acb6c7e87b.4d3a0d3841e4ba6c2275634f4083509d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (39103253, 'Fresh Slicing Tomato, 2 Pack', 2.98, '069905845215', 'Bring the fresh, delicious taste of Slicing Tomatoes into your home. These tomatoes deliver sweet and juicy flavor with each bite and are an ideal ingredient in a variety of recipes. They would make a tasty, garden-inspired addition to salads, burgers, gourmet sandwiches, and so much more. They are picked at peak freshness and specially bred for deep red color, intense flavor, and higher lycopene content than standard tomatoes. Whether you slice or dice them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with these fresh Slicing Tomatoes.', 'Slicing Tomato, 1 lb Tray Wholesome, fresh, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, burgers, gourmet sandwiches, and more Add to party trays or school lunches Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b3b822ae-8aaa-446f-9bd9-6b3deb6a564e.c003bce181926dab4e08eb4794f96f39.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3b822ae-8aaa-446f-9bd9-6b3deb6a564e.c003bce181926dab4e08eb4794f96f39.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3b822ae-8aaa-446f-9bd9-6b3deb6a564e.c003bce181926dab4e08eb4794f96f39.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (39104764, 'Marketside Fresh Shredded Iceberg Lettuce, 16 oz Bag', 3.13, '681131532099', 'Marketside Iceberg Lettuce is shredded to perfection and has a great fresh taste that is loaded with nutrients. This lettuce is packed fresh, washed and ready to eat for your convenience. Use it to create your very own personalized salad tossed with your favorite vegetables, protein, nuts and dressing. Use it as a topping on sandwiches and pizzas or simply enjoy it as a healthy side. It offers nutritional benefits as it is a good source of vitamins A and C. Enjoy fresh from the farm taste with Marketside Shredded Iceberg Lettuce. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Fresh Shredded Iceberg Lettuce, 16 oz Bag Freshly shredded iceberg lettuce is top for crisp crunch and refreshing flavor Great for salads or sandwiches All natural Washed and ready to eat Only 10 calories per serving', 'Marketside', 'https://i5.walmartimages.com/asr/0a43127c-410c-48c3-bfb1-13b5ca422384.ef2513e82f95761722252a48096896a8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a43127c-410c-48c3-bfb1-13b5ca422384.ef2513e82f95761722252a48096896a8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a43127c-410c-48c3-bfb1-13b5ca422384.ef2513e82f95761722252a48096896a8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (39104773, 'Cored Pineapple, 16 oz', 3.98, '074641005113', '', 'Cored Pineapple, 16 oz', 'WALMART PRODUCE', 'https://i5.walmartimages.com/asr/499f7420-b835-4bf1-b7b2-2344a315f132.3aec28dd7f71059e24f8dd7a74e348c3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/499f7420-b835-4bf1-b7b2-2344a315f132.3aec28dd7f71059e24f8dd7a74e348c3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/499f7420-b835-4bf1-b7b2-2344a315f132.3aec28dd7f71059e24f8dd7a74e348c3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (39168667, 'Monterey Supreme Stuffers Mushrooms, 14 Oz.', 2.98, '037102142543', 'Monterey Supreme Stuffers Mushrooms, 14 Oz.', 'Fresh Stuffing Mushrooms 14 Oz.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b074dddb-c561-4628-8a2e-9db6fd786085_1.d19ecc0c224f0fe2e4d563961b826b52.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b074dddb-c561-4628-8a2e-9db6fd786085_1.d19ecc0c224f0fe2e4d563961b826b52.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b074dddb-c561-4628-8a2e-9db6fd786085_1.d19ecc0c224f0fe2e4d563961b826b52.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (40347953, 'Fresh Green Kale Bunch, Each', 1.48, '033383652207', 'Fresh Kale Greens, Bunch, 1 Each', 'Kale Greens, Bunch: Ideal addition to every kitchen Flavorful addition to many recipes Add to pasta & pizza Try steamed or sauteed Make satisfying kale chips for healthy snacking Explore all the delicious ways to add fresh kale to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/27276b36-591d-4d09-8435-90b168297b91.72f415f09f357b3f9cd5d090ec022b90.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/27276b36-591d-4d09-8435-90b168297b91.72f415f09f357b3f9cd5d090ec022b90.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/27276b36-591d-4d09-8435-90b168297b91.72f415f09f357b3f9cd5d090ec022b90.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (40619555, 'Marketside Fresh Sugar Snap Peas, 1 lb Bag', 5.98, '874896008385', 'Add fresh and ready to eat sugar snap peas to your meal with Marketside Sugar Snap Peas. These peas are an excellent source of vitamin A and vitamin C. Serve as is, or add your favorite spices, parmesan cheese or garlic for additional flavor. Marketside Sugar Snap Peas are a quick and healthy side dish and a great addition to any meal. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Fresh Sugar Snap Peas, 1 lb Bag Washed and ready to eat Picked fresh for you Serves up to 5 people Microwave: Place desired amount of vegetables in a microwave safe dish. Add 1 inch of water, cover with damp paper towel or plastic wrap. Microwave on high for 2 to 3 minutes. Using caution as the steam from the bag will be very hot.', 'Marketside', 'https://i5.walmartimages.com/asr/be0540a3-7381-408d-b55d-f24d564f4889.9c62ba76d74166e1cd3757b8e3cdf91f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/be0540a3-7381-408d-b55d-f24d564f4889.9c62ba76d74166e1cd3757b8e3cdf91f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/be0540a3-7381-408d-b55d-f24d564f4889.9c62ba76d74166e1cd3757b8e3cdf91f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (40619563, 'Marketside Cauliflower Florets, 10 oz', 2.48, '605806122316', 'Marketside Cauliflower Florets are packed fresh, washed and ready to eat. They have a delicious tender texture and an elegant white color that is sure to add a pop to all your dishes. Enjoy them as a healthy side or use them in all your favorite recipes. They are a great addition to Italian pastas. Season them with salt, pepper and garlic and serve with grilled steak, grilled Brussel sprouts and dinner rolls for a filling dinner. Use in the place as chicken for a healthy substitute. They are great for health conscious individuals as they are USDA organic. They come packaged inside a microwaveable bag that cooks in less than five minutes. Dinner is made easy with Marketside Cauliflower Florets. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Cauliflower Florets Steams in pack. Per Serving: 20 calories; 0 g sat fat (0% DV); 25 mg sodium (1% DV); 2 g sugars; vitamin C (70% DV); vitamin K (15% DV).', 'Marketside', 'https://i5.walmartimages.com/asr/c0252247-2177-4820-af77-05533c8667b8_2.adf07ab03d43a3ff360b0c5b13b7f247.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0252247-2177-4820-af77-05533c8667b8_2.adf07ab03d43a3ff360b0c5b13b7f247.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0252247-2177-4820-af77-05533c8667b8_2.adf07ab03d43a3ff360b0c5b13b7f247.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (40619565, 'Marketside Asparagus Tips, 6 oz', 3.98, '681131091404', 'Fresh ideas and honest ingredients, that\'s how Marketside brings the best quality fresh foods to your table every day. If you\'re not completely delighted with our product please contact us at 1-888-658-6325 or walmart.com/market side.', 'Trimmed, tender asparagus strips Microwave in bag, steams in minutes All Natural Washed and ready to cook', 'Marketside', 'https://i5.walmartimages.com/asr/628759a9-c322-4fe8-b594-8a252ea4bc5a.eff49767de8da83bce9df395c7a281e1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/628759a9-c322-4fe8-b594-8a252ea4bc5a.eff49767de8da83bce9df395c7a281e1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/628759a9-c322-4fe8-b594-8a252ea4bc5a.eff49767de8da83bce9df395c7a281e1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (40662908, 'Grow Your Own Oyster Mushrooms!', 24.99, '810017014989', 'DuneCraft\'s new edible oyster mushroom growing kit is a huge hit! Growing mushrooms is the perfect activity for the winter gardener, kitchen connoisseur and a great project for kids. These kits are as easy to grow as a potted plant and will yield one to two pounds of fresh, edible mushrooms. The kit comes with complete instructions and everything needed to successfully grow your own oyster mushrooms, is environmentally friendly and guaranteed to grow!', 'Grow Your Own Oyster Mushrooms!: DuneCraft\'s new edible oyster mushroom growing kit is a huge hit Growing mushrooms is the perfect activity for the winter gardener, kitchen connoisseur and a great project for kids These kits are as easy to grow as a potted plant and will yield 1 to 2 pounds of fresh, edible mushrooms Our kit comes with complete instructions and everything needed to successfully grow your own oyster mushrooms, is environmentally friendly and guaranteed to grow Contents include: Dome Terrarium Base & Lid, Oyster Mushroom Decals, Growing Medium with Mycelium, Growing and Care Instructions', 'DuneCraft', 'https://i5.walmartimages.com/asr/5dd980a1-5fa6-42bd-9029-2778df64a50b_1.4144ce197f95fb476bfcefcd781a260d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5dd980a1-5fa6-42bd-9029-2778df64a50b_1.4144ce197f95fb476bfcefcd781a260d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5dd980a1-5fa6-42bd-9029-2778df64a50b_1.4144ce197f95fb476bfcefcd781a260d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (40711122, 'NewStar Cooking with Chard Plus Kale, 12 oz', 2.88, '012842410053', '', 'NewStar Cooking with Chard Plus Kale: Rainbow chard and savory kale Versatile cooking greens with a mild, sweet taste Triple washed and ready to cook Rich in antioxidants beta carotene, vitamins A and C*NEW_LINE* Excellent source of vitamin K with 8.4 mg of lutein per 85g serving', 'Generic', 'https://i5.walmartimages.com/asr/8095f295-c8c5-4675-8d17-6bfe8bae6415_1.b0c78b7de6fdfba74e8ca9b008b7a43a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8095f295-c8c5-4675-8d17-6bfe8bae6415_1.b0c78b7de6fdfba74e8ca9b008b7a43a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8095f295-c8c5-4675-8d17-6bfe8bae6415_1.b0c78b7de6fdfba74e8ca9b008b7a43a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (40715952, 'Fieldpack Unbranded Iceless Broccoli Rabe', 2.07, '072668805556', 'short description is not available', 'Fieldpack Unbranded Iceless Broccoli Rabe', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (41523154, 'Mg Groables Cherry Tomato', 4.92, '073561400459', 'Mg Groables Cherry Tomato', 'Miracle Gro Mg Groables Cherry Tomato', 'Miracle-Gro', 'https://i5.walmartimages.com/asr/1f4ada4b-7666-4b1d-b4df-bd9bb033466e.ca697be2f76018802c286359f200eaac.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f4ada4b-7666-4b1d-b4df-bd9bb033466e.ca697be2f76018802c286359f200eaac.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f4ada4b-7666-4b1d-b4df-bd9bb033466e.ca697be2f76018802c286359f200eaac.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (41752773, 'Fresh Lemon, Each', 0.58, '000000040334', 'Lemons are a kitchen essential, known for their bright yellow color and tangy, refreshing flavor. Perfect for cooking, baking, and beverages, they add a zesty touch to both sweet and savory dishes. Packed with vitamin C and natural antioxidants, lemons are not only delicious but also a nutritious choice for enhancing your meals and drinks with vibrant freshness. Available by the each.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Add to your iced or hot tea Make a satisfying and refreshing strawberry lemonade Use lemon zest to make lemon cookies or lemon loaf Adds flavor to a variety or recipes Available by the each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f025c57c-13e1-4a1a-ac81-0695aaf2473d.7f3c9f067735c2730223c9147a646f7c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f025c57c-13e1-4a1a-ac81-0695aaf2473d.7f3c9f067735c2730223c9147a646f7c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f025c57c-13e1-4a1a-ac81-0695aaf2473d.7f3c9f067735c2730223c9147a646f7c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (41775475, 'Carnival Squash, each', 1.48, '000000031424', '12 1/2\" overall. 7 3/4\" blade. Double edged dagger blade. Multi-color wood handle with brass guard and pommel. Brown leather belt sheath.', 'Commando', 'Fresh Produce', 'https://i5.walmartimages.com/asr/56ac18a5-b060-47bb-88c4-de9c22ea7ede_1.99a6bb2d72508299235810d3e907f7c8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56ac18a5-b060-47bb-88c4-de9c22ea7ede_1.99a6bb2d72508299235810d3e907f7c8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56ac18a5-b060-47bb-88c4-de9c22ea7ede_1.99a6bb2d72508299235810d3e907f7c8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (41781273, 'Fresh Black Seedless Grapes, Bag (2.25 lbs/Bag Est.)', 2.27, '204957000001', 'Treat yourself to the delicious, juicy flavor of Fresh Black Seedless Grapes. These grapes are bursting with flavor and are completely seedless, so you can easily enjoy a handful as a fresh snack any time of day. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Black Seedless Grapes.', 'Fresh Black Seedless Grapes Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (42132297, 'Marketside Organic Baby Kale, 5 oz', 3.46, '681131072793', 'Marketside Organic Baby Kale is picked young for its tenderness and mild flavor. Kale is a very healthy addition to your daily diet as it is a rich source of vitamin A, vitamin C, vitamin K, calcium and iron. You can serve kale after braising it, either alone or mixed with greens like collard, mustard or turnip. It can also be used in salads, or as a side dish. They are certified organic as per USDA standards. They are washed and ready to eat from the pack, so you don\'t have to work towards getting a healthy meal. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Baby Kale Organic 5 oz', 'Marketside', 'https://i5.walmartimages.com/asr/b694cf44-0b27-4caf-9525-9d886b4d4ea6_2.771a9975f3fe9eaa7949e380d4c7b081.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b694cf44-0b27-4caf-9525-9d886b4d4ea6_2.771a9975f3fe9eaa7949e380d4c7b081.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b694cf44-0b27-4caf-9525-9d886b4d4ea6_2.771a9975f3fe9eaa7949e380d4c7b081.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (42353640, 'Fresh Produce, Bagged Whole Red Radish, 1 Bag Each', 1.74, '033383670027', 'Serve up something amazing when you cook with Fresh Red Radish. This versatile root vegetable is a great addition to a healthy diet and can be prepared in a variety of ways. Their slightly peppery flavor adds a natural, subtle spice to salads and slaws. Their crisp texture makes them a natural, healthy choice for dips. Try them as a low-carb substitute for potatoes when roasted or as a healthy side dish when grilled. However, you choose to use them, these fresh radishes will add big flavor and unforgettable taste to any meal. The culinary possibilities are endless with Fresh Red Radish..', 'Fresh Produce, Bagged Red Whole Radish, 1 Each Wholesome, versatile, and delicious Cool and crunchy with a peppery taste to salads Great in soups, salads, slaws, dips or raw Also known as Bolsa de rábanos, luóbo dài and mūlī kī thailī around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5121964c-a2e6-40b2-bdf0-9271cdc00835.9d768f180827f9842fafc0c053b1da7d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5121964c-a2e6-40b2-bdf0-9271cdc00835.9d768f180827f9842fafc0c053b1da7d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5121964c-a2e6-40b2-bdf0-9271cdc00835.9d768f180827f9842fafc0c053b1da7d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (42405386, '4.5\" X 3\" French Pears, Set Of 4 In Box,', 93.48, '026259824754', 'short description is not available', '4.5\" X 3\" French Pears, Set Of 4 In Box,', 'ONLINE', 'https://i5.walmartimages.com/asr/a3b82b57-9280-499a-bf89-91bebfdf61b0_1.2171bdf742a8cd3108927aefee8075be.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a3b82b57-9280-499a-bf89-91bebfdf61b0_1.2171bdf742a8cd3108927aefee8075be.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a3b82b57-9280-499a-bf89-91bebfdf61b0_1.2171bdf742a8cd3108927aefee8075be.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (42408862, 'Fresh Thai Chile Peppers, 4 Ounce Bag', 2.98, '045255115406', 'Add some color and heat to your next meal with our fresh Thai Chile Peppers. Also known as the bird\'s eye chili, Thai chile peppers are a popular ingredient in Southeast Asian cuisine. You can pickle these peppers and serve with a savory noodle dish or make them into a curry paste. Use them to make a spicy coconut milk chicken curry soup or a zesty chicken stir-fry. However you choose to use them, these chile peppers will add spice to any recipe. Explore new recipes and discover all the delicious ways to prepare this tasty and nutritious pepper. Add a kick of heat to your next meal with our fresh Thai Chile Peppers.', 'Thai Chile Peppers, 4 oz: Extremely versatile vegetable Also known as the bird\'s eye chili Perfect ingredient for Southeast Asian cuisine Try them pickled & serve with noodles Make a spicy soup or a savory stir-fry Explore delicious new recipes', 'Unbranded', 'https://i5.walmartimages.com/asr/75d3a4e5-72c5-42c3-84a3-0a34e39800e2.5f384a14349a03e4e678ef65eac8b434.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75d3a4e5-72c5-42c3-84a3-0a34e39800e2.5f384a14349a03e4e678ef65eac8b434.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75d3a4e5-72c5-42c3-84a3-0a34e39800e2.5f384a14349a03e4e678ef65eac8b434.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (42408863, 'Melissa\'s Ruby Gold Potatoes, 1.5 Lb.', 3.97, '045255126808', 'Potatoes, Ruby Gold, Bag 1.5 LB US No. 1 - min. dia. 3/4 inch. Rich potato flavor. Great grilled, roasted, or in salads! Grown in Idaho. Idaho potatoes. www.melissas.com. Good life food. Melissa\'s Ruby Gold potatoes are great in potato salads or as a savory side dish. They have a wonderful, buttery texture and flavor when baked, roasted, boiled, steamed, sauteed or mashed. Try them in your favorite potato recipe. Please contact us or visit our website for delicious recipes: 1.800.588.0151; www.melissas.com. Packed in Idaho. Product of USA. Store in a cool, dry place. 24 oz (1.5 lbs) 680 g Los Angeles, CA 90051 800-588-0151', 'Ruby Gold Potatoes 24 Oz Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4f509e0d-ae29-4f39-bc38-ae94f88ee6da_1.9853aa0b3e44c91c86c4f022e533bc14.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4f509e0d-ae29-4f39-bc38-ae94f88ee6da_1.9853aa0b3e44c91c86c4f022e533bc14.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4f509e0d-ae29-4f39-bc38-ae94f88ee6da_1.9853aa0b3e44c91c86c4f022e533bc14.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (42439588, 'Libby\'s Sliced Carrots Microwave Cup, 7 oz', 2.15, '037100090044', 'Now you can enjoy the same Libby\'s goodness right from a microwave thanks to this Libby\'s Sliced Carrots Microwave Cup, 7 oz. This package contains farm-fresh goodness in a kosher product. Use this as an individual side dish that you can eat at any time of the day. Or you can combine this package with a chicken dish, a meat item, or even seafood. Put these on top of a salad. This fat-free vegetable has endless possibilities whether served solo or as part of a meal. Make it a healthy snack if you\'re on a diet and on the go. This vegetable is a good source of calcium and is high in vitamin A and vitamin C.Libby\'s Sliced Carrots Microwave Cup:', 'Microwavable Farm-fresh goodness Libby\'s carrots are kosher Good source of calcium High in vitamin A and C Ideal for those on the go', 'Libby\'s', 'https://i5.walmartimages.com/asr/f6d62be0-8b5a-49db-9702-f0cbeebacb5b.25096d5f732bcf0d47f5384df82c6117.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f6d62be0-8b5a-49db-9702-f0cbeebacb5b.25096d5f732bcf0d47f5384df82c6117.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f6d62be0-8b5a-49db-9702-f0cbeebacb5b.25096d5f732bcf0d47f5384df82c6117.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (42700530, 'Yellow Potatoes Whole Fresh, 3lb Bag', 2.64, '033383533032', 'Introducing our premium Yukon Gold Potatoes, a 3 Lb. pack of earthy goodness! These versatile, golden-fleshed potatoes boast a buttery flavor and velvety texture, perfect for all your culinary needs. Ideal for boiling, mashing, roasting, or frying, their thin, smooth skin retains essential nutrients and ensures easy preparation. Sustainably grown and carefully handpicked, our Yukon Gold Potatoes are non-GMO and free from harmful chemicals. With their rich, satisfying taste and exceptional quality, elevate your dishes to new heights with this 3 Lb. pack of wholesome Yukon Gold Potatoes.', 'Guarantee Brand Yukon Gold Potatoes, 3 lb Introducing our premium Yukon Gold Potatoes, a 3 Lb. pack of earthy goodness! These versatile, golden-fleshed potatoes boast a buttery flavor and velvety texture, perfect for all your culinary needs. Ideal for boiling, mashing, roasting, or frying, their thin, smooth skin retains essential nutrients and ensures easy preparation. Sustainably grown and carefully handpicked, our Yukon Gold Potatoes are non-GMO and free from harmful chemicals. With their rich, satisfying taste and exceptional quality, elevate your dishes to new heights with this 3 Lb. pack of wholesome Yukon Gold Potatoes.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a9f2e4a2-dbe2-44b5-b4a2-7a58c51ac7d5.7d44e9d9995635646c94d3556f42ef2d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9f2e4a2-dbe2-44b5-b4a2-7a58c51ac7d5.7d44e9d9995635646c94d3556f42ef2d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9f2e4a2-dbe2-44b5-b4a2-7a58c51ac7d5.7d44e9d9995635646c94d3556f42ef2d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (42794616, 'Fresh Shiitake Mushrooms, 3.2 oz', 3.98, '037102678103', 'Enjoy the rich, full flavor of fresh Shiitake Mushrooms. This versatile ingredient is perfect for a variety of dishes, whether its for breakfast, lunch, or dinner. Mince some up and put them in your omelet with peppers and ham for a filling breakfast. Slice them and add them to a healthy salad for lunch or slice them thin and sauté with barbeque sauce for a delicious, mouthwatering vegan burger. Shitake mushrooms are an excellent source of selenium and are naturally fat-free, cholesterol-free, and are low in calories and sodium. Enjoy the delicious taste of Shiitake Mushrooms any way you prepare them.', 'Rich, full flavor Great for breakfast, lunch, or dinner Mince them for an omelet, slice them for a salad, or sauté in barbeque sauce for a vegan sandwich Naturally fat-free and cholesterol-free Low in sodium and calories Excellent source of selenium', 'Monterey Mushrooms', 'https://i5.walmartimages.com/asr/6eadb39a-7463-4d65-a0f9-df8aab5eb7ce_1.4348b31319fdcad5927f8362a8f56a48.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6eadb39a-7463-4d65-a0f9-df8aab5eb7ce_1.4348b31319fdcad5927f8362a8f56a48.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6eadb39a-7463-4d65-a0f9-df8aab5eb7ce_1.4348b31319fdcad5927f8362a8f56a48.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (43236028, 'Fresh Petite Carrots, 12 oz, Bag', 1.86, '033383088037', 'Fresh Petite Carrots are cut, peeled and ready to eat for your convenience. Enjoy them as an ingredient in your favorite recipes or simply enjoy them as a healthy snack on the go. Make a tasty snack and serve these petite carrots with celery and ranch dressing or hummus for dipping. These carrots come in a microwavable bag, making them easy to prepare for a dinnertime side dish. Carrots are one of nature\'s best sources of nutrients, rich in Vitamin A with antioxidant beta-carotene. Carrots provide dietary fiber and potassium. Health agencies recommend that you eat five or more servings of fruits and vegetables, which include carrots, every day for good health. Enjoy the delicious flavor and healthy crunch of Fresh Petite Carrots.', 'Fresh Petite Carrots 12-ounce bag Excellent source of beta carotene, fiber, vitamin K1, potassium, and antioxidants No preservatives Washed and ready to eat Perfect for packing in lunches or serving as a snack with dip Microwaveable packaging', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3e12070f-d731-4c6a-bda8-4e47ef043025.3f7f33acdb814ceeb7f749980acf7ebf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e12070f-d731-4c6a-bda8-4e47ef043025.3f7f33acdb814ceeb7f749980acf7ebf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e12070f-d731-4c6a-bda8-4e47ef043025.3f7f33acdb814ceeb7f749980acf7ebf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (43278119, 'Bright Light Swiss Chard, 1.0 Count', 1.87, '735718702044', 'Chard contains 3 times the recommended daily intake of vitamin K and 44 percent of the recommended amount of vitamin A. This vegetable can help reduce blood pressure, and enhance performance in sports.', 'Earthy-sweet taste with some bitterness Loaded with vitamins A, C, and Phytonutrients, and fiber Eat it like spinach or beet greens', 'Wonderful', 'https://i5.walmartimages.com/asr/70a25a2f-d3a7-4dd2-897f-1166a1b89281.0c4157687802c70a3b8086f649998403.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/70a25a2f-d3a7-4dd2-897f-1166a1b89281.0c4157687802c70a3b8086f649998403.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/70a25a2f-d3a7-4dd2-897f-1166a1b89281.0c4157687802c70a3b8086f649998403.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (43278218, 'Yam Root Whole Fresh, Each (Name Florido)', 9.12, '000000032766', 'Create something delicious with this fresh Yam (Name) Root. Also known as a \"true yam,\" the name yam is a versatile root that may be prepared like a potato. Commonly used in tropical regions, this yam should be peeled and cooked before eaten. Name yams can be cooked in a variety of ways, such as mashed, baked, boiled, fried, and more. Use it to make crispy fries, a comforting stew, or even a sweet cake. It\'s also a good source of fiber, B vitamins, and vitamin C. Make your next culinary masterpiece with Yam (Name) Root.', 'Great source of fiber Rich in B vitamins and vitamin C Can be boiled, mashed, roasted, fried, and more Fresh and whole Must be peeled and cooked before eaten Versatile and delicious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2ad2dcdb-9aca-4cc4-b024-a7303762f6c6.0a3c22ca0f682d57e4e58497385bf0d8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ad2dcdb-9aca-4cc4-b024-a7303762f6c6.0a3c22ca0f682d57e4e58497385bf0d8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ad2dcdb-9aca-4cc4-b024-a7303762f6c6.0a3c22ca0f682d57e4e58497385bf0d8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (43279694, 'Savoy Cabbage Repollo', 1.48, '000000045551', 'Get creative in the kitchen with super versatile and yummy Green Cabbage. Green cabbage is low in calories and high in fiber and antioxidants making it a great part of any healthy diet. Best of all, this cabbage can be used a myriad of different recipes and cuisines. This amazing vegetable can be incorporated into everything from delicious and creamy cole slaw, stuffed cabbage, and wraps, to egg rolls, grilled cabbage, curry, kimchi and more. You can even use it during breakfast in a delicious frittata. Green cabbage can be roasted, boiled, braised, grilled, sauted, and even blanched. The possibilities are endless when you bring home Green Cabbage', '1 head of green cabbage Versatile and healthy ingredient Can be roasted, boiled, braised, grilled, sauted, and even blanched Incorporate into everything from delicious and creamy cole slaw, stuffed cabbage, and wraps, to egg rolls, grilled cabbage, curry, kimchi and more Low in calories and high in fiber and antioxidants', 'Fresh Produce', 'https://i5.walmartimages.com/asr/223b5fb6-e842-49fb-9679-7745b5ad1eee.068229ec90a55030fdc11bc646b9cbd4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/223b5fb6-e842-49fb-9679-7745b5ad1eee.068229ec90a55030fdc11bc646b9cbd4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/223b5fb6-e842-49fb-9679-7745b5ad1eee.068229ec90a55030fdc11bc646b9cbd4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (43923182, 'Fresh Fuji Apple, Each', 0.83, '030767041299', 'Treat your family to the healthy taste of Fuji Apples. Low in calories, these crisp and crunchy apples can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these apples to make a rich and creamy yogurt parfait or serve them alongside your pancakes, sausage, and eggs. Slice these apples and use them to add flavor to a lunchtime salad or spread peanut butter on them for a protein-filled snack. Fuji Apples are used in many tasty desserts like apple cobbler, apple crisp, and apple pie. Get creative in the kitchen and make homemade apple butter or applesauce. However you choose to use them, Fuji Apples add sweetness to any meal.', 'Fresh Fuji Apple, Each: Crunchy, crisp & sweet flavor Low in calories Enjoy on their own or in a variety of recipes Make a creamy yogurt parfait Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ecbe0124-9333-4b2f-9f99-b37fc032fb52.d9f86f3c2d89f8fb4570cb1c42e91006.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecbe0124-9333-4b2f-9f99-b37fc032fb52.d9f86f3c2d89f8fb4570cb1c42e91006.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecbe0124-9333-4b2f-9f99-b37fc032fb52.d9f86f3c2d89f8fb4570cb1c42e91006.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (43923235, 'Fresh Tomatillos by Weight', 1.85, '853447003154', 'Enjoy the delicious flavor of Fresh Tomatillos raw or cooked. Tomatillos have a slightly acidic, tangy flavor when raw and have a sweeter, less acidic taste when cooked. This versatile ingredient is perfect for a variety of mouthwatering dishes. Use them raw and chop it and mix into a salsa for a tangy addition. Puree them and pour over a pork butt in a slow cooker and let it cook for several hours for a tender, juicy pork butt that?s great for taco or burritos. Simply, shuck the husk off the tomatillos and wash then prepare them for your dish. With so many so many ways to prepare Fresh Tomatillos will become a staple in your dishes. Also known as Green Tomato and Tomatillo around the word.', 'Tomatillos, Per Pound: Acidic, tangy flavor raw and a sweeter, less acidic taste cooked Versatile ingredient perfect for a variety of dishes Chop and mix with onions, cilantro, and lime juice for salsa Puree and pour over pork butt in a slow cooker for a tender and juicy protein for tacos and burritos Shuck off the husk, wash, and then prepare', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c6d94102-7d80-4fbb-ad3c-334aea20566a.dd190789e6e95eb0cbc06fd6545fd761.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c6d94102-7d80-4fbb-ad3c-334aea20566a.dd190789e6e95eb0cbc06fd6545fd761.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c6d94102-7d80-4fbb-ad3c-334aea20566a.dd190789e6e95eb0cbc06fd6545fd761.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (43923746, 'Fresh SugarBee Apple, Each', 1.69, '000000034869', 'With exceptional crispness and delicious sweet flavor, SugarBee Apples deliver an un-bee-lievable eating experience. This unique, natural marvel was created by honeybees who mixed the pollen of a mystery apple variety with Honey crisp. With great versatility and nutritional value, SugarBee Apples make for the perfect snack or ingredient in apple pies, tarts, turnovers, juices and more. Sweeter. Crispier. Honey-r. From bee to you.', 'Sugarbee Apples Notes of honey, caramel and molasses Crisp, firm texture and a crunchy bite Juicy, aromatic and just the right amount of sweetness Perfect for a variety of seasonal treats like caramel apples, ciders and more Pairs well with cheeses like gouda and sharp cheddar Adds flavor to a variety of recipes', 'SugarBee', 'https://i5.walmartimages.com/asr/0fabf6bb-bbfc-4cf6-bda1-5faffb98e98b.ca073c0767dd716961a4aebed5259d93.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0fabf6bb-bbfc-4cf6-bda1-5faffb98e98b.ca073c0767dd716961a4aebed5259d93.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0fabf6bb-bbfc-4cf6-bda1-5faffb98e98b.ca073c0767dd716961a4aebed5259d93.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390943, 'Fresh Green Seedless Grapes, Bag (2.25 lbs/Bag Est.)', 3.65, '000000044981', 'Treat yourself to the delicious, juicy flavor of Fresh Green Seedless Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Green Seedless Grapes.', 'Fresh Green Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7a31dc3a-cf2c-4e7e-829c-88e40e488e7a.e79a0599056e495b799eb1a237b5452f.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a31dc3a-cf2c-4e7e-829c-88e40e488e7a.e79a0599056e495b799eb1a237b5452f.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a31dc3a-cf2c-4e7e-829c-88e40e488e7a.e79a0599056e495b799eb1a237b5452f.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390944, 'Fresh Roma Tomato, Each', 0.23, '000000032827', 'With Fresh Roma Tomatoes from Walmart, it\'s easy to make a wholesome, delicious meal. Roma tomatoes are a fresh produce ingredient for whipping up a variety of wonderful dishes. You can use them to create a zesty tomato sauce for stirring into a homemade pasta dish, crush them up to make a delightful Roma tomato bruschetta, or simply enjoy them on their own as a nutritious snack or as a party platter option for dipping in your favorite vegetable dipping sauce. If you\'re feeling a classic tomato dish, Roma tomatoes can even lend themselves in making a comforting and appetizing tomato soup or a flavorful salsa. However you choose to use them, each Roma tomato will add stunning flavor to your meal. Just find the recipe and experience the tasty results for yourself! Elevate your recipes with Roma Tomatoes.', 'Fresh Roma Tomato, Each: Wholesome and delicious fresh produce Ideal ingredient for a variety of dishes Perfect for making zesty tomato sauces Enjoyable as a nutritious snack Excellent for homemade salsa', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ecef8a3e-ab96-445e-a16a-d639b40eb5fb.93fcc627f542f02488e5ee9d8e26f152.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecef8a3e-ab96-445e-a16a-d639b40eb5fb.93fcc627f542f02488e5ee9d8e26f152.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecef8a3e-ab96-445e-a16a-d639b40eb5fb.93fcc627f542f02488e5ee9d8e26f152.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390945, 'Green Bell Pepper, 1 each', 0.98, '000000040655', 'Enhance your meals with the delicious flavor of Green Bell Peppers. This vegetable contains essential vitamins such as A and C, and minerals including calcium and magnesium. Green bell pepper, also known as green capsicum, has a crisp flavor that enhances a variety of recipes. Dice bell peppers and put them in a hearty chili, slice them and add to a deli sandwich, saute them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out green bell pepper can be filled with sausage, mushrooms, and rice to create a delicious stuffed pepper that will have the family asking for seconds. Lunches and dinners are more scrumptious when fresh green peppers are part of the meal. They also taste delicious raw alongside other vegetables. Add your favorite dip for a healthy, crunchy crudite. Cooked or uncooked, Green Bell Peppers are an excellent item to have on hand. Also known as Pimiento verde, Green chili, Filfil akhdar and Hari mirch around the world.', 'Green Bell Pepper, 1 each: Naturally low in calories Exceptionally rich in vitamin C and other antioxidants Delicious cooked or uncooked Create delicious recipes with fresh green peppers', 'Fresh Produce', 'https://i5.walmartimages.com/asr/15c8fcf1-7b73-429e-8a7c-802091d818f1.4730164455d5cc0a04d2b1f675971dd1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/15c8fcf1-7b73-429e-8a7c-802091d818f1.4730164455d5cc0a04d2b1f675971dd1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/15c8fcf1-7b73-429e-8a7c-802091d818f1.4730164455d5cc0a04d2b1f675971dd1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390947, 'Fresh Produce, Whole Zucchini, 1 Each', 0.88, '000000040679', 'This Zucchini, Each provides a healthy dose of vitamins to add to your diet. Ideal for many types of cuisines, it can be enjoyed year-round in many recipes. It can be used as a simple side dish, sauteed in oil, herbs and spices. You can also serve it with a protein and a starch for a wholesome meal. This zucchini vegetable is sold in the store at a per-unit price, so you can stock up on as many as you need. You can even buy just one single zucchini at a time. Also known as Calabacin, Kousa and Tori around the world.', 'Fresh zucchini Sold individually Ideal for use in a savory side dish Highly nutritious vegetable that offers an excellent source of fiber Also known as Calabacin, Kousa and Tori around the world.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7d7a2618-ed85-45bd-bf30-11b14b289c34.d484064e9e02e1132b6a3da45c871632.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7d7a2618-ed85-45bd-bf30-11b14b289c34.d484064e9e02e1132b6a3da45c871632.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7d7a2618-ed85-45bd-bf30-11b14b289c34.d484064e9e02e1132b6a3da45c871632.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390948, 'Fresh Banana, Each', 0.2, '717524111128', 'Enhance breakfast and baking dishes by incorporating fresh Banana (Guineo) Fruit into family-favorite recipes. Each banana is a versatile fruit that\'s packed with potassium and dietary fiber to help maintain a balanced and nutritional diet. They\'re essential to a wealth of traditional recipes, as well as a healthy, easy snack the entire family will enjoy. Their soft, ripened fruit is a favorite of all ages and offers a sweet and delicious bite that makes a tasty smoothie and snack addition. Raw bananas have a universal use that complements many flavors and can easily add a different and delicious dimension to ice cream and dessert treats.', 'Fresh produce Easy-to-peel bananas Can be enjoyed raw or cooked Can elevate dessert and breakfast recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5939a6fa-a0d6-431c-88c6-b4f21608e4be.f7cd0cc487761d74c69b7731493c1581.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5939a6fa-a0d6-431c-88c6-b4f21608e4be.f7cd0cc487761d74c69b7731493c1581.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5939a6fa-a0d6-431c-88c6-b4f21608e4be.f7cd0cc487761d74c69b7731493c1581.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390949, 'Fresh Hass Avocados, Each', 0.97, '405563623039', 'Whole conventional avocados are a versatile and nutrient-dense fruit that can be enjoyed in many different recipes. They are perfect for barbecues and outdoor gatherings with friends and family. Avocados can be used in Mexican food items like tacos or burritos, as appetizers like avocado crostini, or in a fresh guacamole or avocado dip. They provide unsaturated \"good\" fats and almost 20 vitamins, minerals, and phytonutrients. When selecting avocados, look for a dark green to nearly black skin color, a bumpy texture, and they should yield to gentle pressure without feeling mushy. They are creamy, mild, and light. Enjoy all kinds of healthy foods and recipes at your next gathering with friends and family.', 'Fresh fruit with a creamy texture and mild flavor A cholesterol free fruit that contains almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9 Avocados are the lowest sugar fruit and provide unsaturated “good fats” that help absorb Vitamin A, Vitamin D, Vitamin K and Vitamin E Ripe avocados will have dark green to nearly black skin color, a bumpy texture and should yield to gentle pressure without leaving indentations', 'Fresh Produce', 'https://i5.walmartimages.com/asr/af510d27-f416-4691-99fa-0943d730f8d2.8607ec56ce71993860620dc4c8ca9cd6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af510d27-f416-4691-99fa-0943d730f8d2.8607ec56ce71993860620dc4c8ca9cd6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af510d27-f416-4691-99fa-0943d730f8d2.8607ec56ce71993860620dc4c8ca9cd6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390950, 'Fresh Honeycrisp Apple, Each', 1.06, '748790328378', 'Honeycrisp Apples are the ultimate healthy choice for busy families, offering a sweet-tart crunch that kids adore and parents trust. Say goodbye to snack-time negotiations! These premium, U.S. Extra Fancy Honeycrisp Apples deliver guaranteed quality and flavor, making them the perfect lunchbox hero and an ideal ingredient for versatile home cooking. Their unique, crisp texture and honey-sweet flavor profile means they are fantastic enjoyed fresh as a healthy snack or cooked into delicious family favorites, from classic applesauce to a quick morning smoothie. Stock up on these premium fresh apples and confidently provide your family with a convenient, nutritious, and absolutely irresistible option.', 'The Flavor Kids Beg For: Perfectly balanced sweet-tart flavor with a hint of honey. It\'s the guilt-free treat your family will choose first. Lunchbox Hero & Easy Snack: Ready-to-eat convenience makes packing lunches a breeze. Just wash and toss one in the bag! Unmatched Versatility: Crisp enough for on-the-go snacking, yet bakes beautifully into pies, sauces, and crumbles. Maximize your grocery value! Premium, U.S. Extra Fancy Quality: confident in our quality - expect a beautiful, vibrant red-orange apple that looks as good as it tastes.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fdffb720-8b75-43df-bffe-4ffc4e9369d8_3.d4460fa9146eb9716b5804d61d4b26b9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fdffb720-8b75-43df-bffe-4ffc4e9369d8_3.d4460fa9146eb9716b5804d61d4b26b9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fdffb720-8b75-43df-bffe-4ffc4e9369d8_3.d4460fa9146eb9716b5804d61d4b26b9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390951, 'Fresh Mandarin Oranges, 5 lb Bag', 6.67, '605049428640', 'Enjoy the juicy goodness of citrus when you eat a Fresh Mandarin Orange. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, clementines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, mandarins are now available year-round in most markets. Mandarins are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the mandarins hang out in a bowl on your counter or table to breathe. Compact and portable, mandarins are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious fresh mandarin on hand for an easy, healthy treat.', 'Fresh Mandarins, 5 lb Bag Delicious, sweet, juicy citrus Pleasing sweet-tart flavor Easy to peel and segment Excellent source of vitamin C, potassium, and folic acid For maximum flavor, do not refrigerate Typically seedless You\'ll have plenty for the whole family with this 5-pound bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/74f9c12b-7d59-4b92-bfc7-8ca35ceb0bbc.6825cad59a8e52c10d2bdb436b093770.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/74f9c12b-7d59-4b92-bfc7-8ca35ceb0bbc.6825cad59a8e52c10d2bdb436b093770.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/74f9c12b-7d59-4b92-bfc7-8ca35ceb0bbc.6825cad59a8e52c10d2bdb436b093770.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390952, 'Fresh Produce, Green Whole Asparagus, 1 Bunch Bundle', 3.08, '012842001534', 'Asparagus is a fresh and flavorful vegetable that has a crisp texture and mild earthy taste. This nutrient-rich vegetable that is packed with vitamins, minerals & fiber. Asparagus is the perfect ingredient item that is elicious in pasta, salads, casseroles or soups. They are also simple to prepare as a side, saute in olive oil or wrap in bacon for the grill. Asparagus is a healthy side that complements any meal. Asparagus is also know as Espárragos, Asuparagasu, Hilyawn, Asfaraj & Shatavari around the world.', 'Asparagus is fresh & flavorful with a crsip texture & a mild earthy taste Nutrient-rich vegetable that is packed with vitamins, minerals & fiber Simple to prepare, saute in olive oil or wrap in bacon for the grill Perfect ingredient item that is elicious in pasta, salads, casseroles or soups A healthy side that complements a wide variety of main dishes Also known as Espárragos, Asuparagasu, Hilyawn, Asfaraj & Shatavari around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5556f793-0600-4e42-812e-ae2cb11c0047.2635cfb5344dbbbee8ff1cb6d52877c8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5556f793-0600-4e42-812e-ae2cb11c0047.2635cfb5344dbbbee8ff1cb6d52877c8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5556f793-0600-4e42-812e-ae2cb11c0047.2635cfb5344dbbbee8ff1cb6d52877c8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390953, 'Fresh Gala Apple, Each', 0.68, '024425041325', 'Indulge in the succulent taste of Fresh Gala Apples, now available in a convenient 1lb bag! These crisp and flavorful apples are a crowd favorite, known for their perfect balance of sweetness and tartness. With their bright red and yellow skin, they are as visually appealing as they are delicious. Perfect for snacking on the go, adding to salads, or baking into mouthwatering pies and desserts, Fresh Gala Apples are a versatile choice for any occasion. Treat yourself to the freshness and goodness of these 1lb bags and elevate your apple experience to a whole new level!', 'Fresh Gala Apples, by weight: Sweet and mild with a subtle floral aroma Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidity Sweet and mild with a subtle floral aroma Sweet and mild with a subtle floral aroma Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidity', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f46d4fa7-6108-4450-a610-cc95a1ca28c5_3.38c2c5b2f003a0aafa618f3b4dc3cbbd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f46d4fa7-6108-4450-a610-cc95a1ca28c5_3.38c2c5b2f003a0aafa618f3b4dc3cbbd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f46d4fa7-6108-4450-a610-cc95a1ca28c5_3.38c2c5b2f003a0aafa618f3b4dc3cbbd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390954, 'Fresh Cucumber, Each', 0.72, '405505626623', 'Introducing our Whole Fresh Cucumbers, the epitome of crispness and flavor! Handpicked at the peak of freshness, these cucumbers are bursting with natural goodness. With their vibrant green color and firm texture, they are perfect for slicing into refreshing salads or adding a delightful crunch to your favorite recipes. Treat your taste buds to the ultimate freshness with our Whole Fresh Cucumbers!', 'Single cucumber Crisp, delicious, and refreshing Create delicious recipes with this fresh cucumber Also known as Pepino, Kyuri, Khyar and Kheera around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5985ccc8-109e-411d-aca7-556ab217e1da.e3770028b0d00b3fa4e6a40c4e630ef9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5985ccc8-109e-411d-aca7-556ab217e1da.e3770028b0d00b3fa4e6a40c4e630ef9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5985ccc8-109e-411d-aca7-556ab217e1da.e3770028b0d00b3fa4e6a40c4e630ef9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390955, 'Fresh Tomato on the Vine, Bag (1.9 lbs/Bag Est.)', 3.88, '699058046643', 'Keep your recipes simple and classic with Fresh Tomatoes on the Vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, this fresh produce item is sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Walmart\'s Tomatoes On The Vine and keep your dishes looking great and tasting equally as excellent.', 'Fresh Tomato on the Vine, Bag Wholesome, versatile, and delicious fresh produce Ideal ingredient for a variety of dishes Make a zesty tomato sauce to go along with your favorite pasta Enjoy on their own as a nutritious snack Make ounces of a flavorful salsa or add some pop to your guacamole', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390957, 'Fresh Raspberries, 12 oz. Container', 6.64, '715756100033', 'The sweet, juicy flavor of Fresh Raspberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes or yogurt, bake them into mouthwatering raspberry crumble bars, mix them with other fruit for a light and flavorful salad, or add them to a creamy smoothie. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin K and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them with cool water and enjoy the fresh taste. Refrigerate the berries to keep them fresh and ready for use. Pick up a Fresh Raspberry container today and savor the delectable flavor.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Raspberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Raspberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of raspberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these tasty gems into your baking endeavors, whether it\'s muffins, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are raspberries delicious, but they also offer an array of health benefits. Loaded with vitamins and dietary fiber, raspberries are are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Raspberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Raspberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/eda41ad1-ca39-45df-ac28-9f2df375156d_1.9d270b612b7896e3a54f48fe48a72b59.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eda41ad1-ca39-45df-ac28-9f2df375156d_1.9d270b612b7896e3a54f48fe48a72b59.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eda41ad1-ca39-45df-ac28-9f2df375156d_1.9d270b612b7896e3a54f48fe48a72b59.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390958, 'Fieldpack Unbranded Gala Apples 3 Lb Bag', 2.58, '847473001727', 'Savor the sweet taste of Freshness Guaranteed Gala Apples. Gala apples are sweet and mild with a subtle floral aroma making them perfect for breakfast, lunch, dinner, and dessert. Perfect for snacking, they have a creamy white flesh with low acidity. Chop the apples up and add them to a salad with walnut, mixed greens, and a poppy seed vinaigrette for a crunchy delicious salad that you can enjoy for lunch or dinner. Add it to your favorite smoothie or juice blend for a morning pick me up to get your day started right. Serve with a dollop of peanut butter and enjoy as a healthy snack that both kids and adults will love. Enjoy the delicious taste of Freshness Guaranteed Gala Apples. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Gala Apples, 3 lb Bag: Sweet and mild with a subtle floral aroma Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidity Sweet and mild with a subtle floral aroma Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidity Sweet and mild with a subtle floral aroma Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidity Make a creamy smoothie or a nutritious juice blend Perfect as a healthy treat or seasonal baking ingredient Great for packing in lunches Make a creamy smoothie or a nutritious juice blend Adds flavor to a variety of recipes', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/bcfd9451-a73b-411f-84e3-1d866f833ae8.3e996f05a24facfa2ac526d6c631401d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bcfd9451-a73b-411f-84e3-1d866f833ae8.3e996f05a24facfa2ac526d6c631401d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bcfd9451-a73b-411f-84e3-1d866f833ae8.3e996f05a24facfa2ac526d6c631401d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390964, 'Sweet Potatoes Whole Fresh, Each (Batata Mameya)', 1.11, '000000048163', 'Create something wholesome, fresh and delicious with these Sweet Potatoes (Yams) .These versatile vegetables can be used to make savory sides or sweet treats. Try them roasted or baked for a tasty addition to any dish. You could also use them to make seasoned sweet potato fries or a flavorful hummus dip for your next party. If you want to satisfy your sweet tooth, try them in a traditional sweet potato casserole or use them to make sweet potato and brown sugar ice cream. The mouthwatering possibilities are endless with this hearty vegetable. Add something amazing to your meals with Sweet Potatoes.', 'Wholesome, versatile, and delicious Ideal ingredient for a variety of dishes Make seasoned sweet potato fries or a flavorful hummus dip Use them for a sweet potato casserole or sweet potato and brown sugar ice cream Sometimes referred to as yams', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1696f72c-2214-4f16-9a53-f737b4039260.5059dac4fe3ac4097e944e7e59ac55b9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1696f72c-2214-4f16-9a53-f737b4039260.5059dac4fe3ac4097e944e7e59ac55b9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1696f72c-2214-4f16-9a53-f737b4039260.5059dac4fe3ac4097e944e7e59ac55b9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390965, 'Northwest Bartlett Pears, juicy and ready to eat - sold by the pound', 0.39, 'deleted_000000044097', 'Savor the sweet taste of Bartlett Pears. Bartlett Pears are aromatic and have a definitive pear flavor that makes them great for breakfast, lunch, dinner, and dessert. Chop the pears up and add them to muffins with walnuts and vanilla for a sweet treat that’s great for breakfast to get your morning started on a high note.', 'Bartlett Pears, Each: Aromatic with a definitive pear flavor Great for breakfast, lunch, dinner, and dessert Chop them up and add to muffins with walnuts and vanilla, slice and add to pizza with prosciutto, goat cheese, and arugula, or cut in half and cook in a skillet with butter, brown sugar, and vanilla Versatile ingredient perfect for both savory and sweet dishes', 'Chelan Fresh', 'https://i5.walmartimages.com/asr/e5c177f1-c83d-466d-be2e-a9ecbb7f4e0a_1.f8702655003f8478a2cfb7937b03d449.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5c177f1-c83d-466d-be2e-a9ecbb7f4e0a_1.f8702655003f8478a2cfb7937b03d449.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5c177f1-c83d-466d-be2e-a9ecbb7f4e0a_1.f8702655003f8478a2cfb7937b03d449.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390968, 'Fresh Small Hass Avocados, 5-6 Count Bag', 2.97, '761010098769', 'Fresh Small Hass Avocados, 5-6 Count Bag', 'Bag of 5-6 Small Hass Avocados Fresh fruit with a creamy texture and mild flavor Fresh avocados are great for using in tacos, burritos, appetizers, avocado dip and fresh guacamole so that you have delicious food to share and enjoy during barbecues and the summer months A cholesterol free fruit that contains almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9 Small hass avocados are the lowest sugar fruit and provide unsaturated “good fats” that help absorb Vitamin A, Vitamin D, Vitamin K and Vitamin E Small ripe avocados will have dark green to nearly black skin color, a bumpy texture and should yield to gentle pressure without leaving indentations', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8ab7eab4-588f-4f36-8841-87eaf0702464.c4aeb60930acd1b9d5eb4aeeea1769e3.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ab7eab4-588f-4f36-8841-87eaf0702464.c4aeb60930acd1b9d5eb4aeeea1769e3.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ab7eab4-588f-4f36-8841-87eaf0702464.c4aeb60930acd1b9d5eb4aeeea1769e3.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390971, 'Fresh Slicing Tomato, Each', 1.35, '204799000009', 'Slicing Tomatoes are the leader when it comes to big, yummy, fresh tomatoes. The large size, juicy tomato taste and meaty texture make these tomatoes the perfect choice for slicing up and topping your favorite burger and sandwiches. Use them to make a hearty grilled cheese and tomato sandwich that\'s bursting with flavor. Slice some up and pair with fresh mozzarella, basil, and balsamic vinegar for a delicious appetizer. You can even enjoy a slice topped with a sprinkle of salt and pepper for a fresh, healthy snack. Add Slicing Tomatoes to your fresh produce basket today for a delicious juicy addition.', 'Slicing Tomatoes, Each: Wholesome, fresh, versatile, and delicious Large size with a juicy, delicious flavor Meaty texture makes them perfect for slicing Enjoy on burgers, sandwiches and more Enjoy on its own seasoned with salt and pepper as a heathy snack Create a mouthwatering salad or appetizer', 'Fresh Produce', 'https://i5.walmartimages.com/asr/87d9362e-14de-4d0d-ac8a-76e0f45036ee.cc24439f3db08493212df9f0d12f48dd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/87d9362e-14de-4d0d-ac8a-76e0f45036ee.cc24439f3db08493212df9f0d12f48dd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/87d9362e-14de-4d0d-ac8a-76e0f45036ee.cc24439f3db08493212df9f0d12f48dd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390974, 'Fresh Cantaloupe, Each', 2.97, '000000040495', 'Treat yourself to the refreshing flavor of a fresh Cantaloupe. Enjoy this tasty melon on its own as a healthy snack or incorporate it into a variety of delicious recipes. For breakfast, you can make a sweet fruit bowl with sliced cantaloupe, strawberries, pineapple, and kiwi. For an extra special treat, top with a dollop of whipped cream. Cut it into small pieces and put it in a fresh salad along with chicken, cucumbers, tomatoes, and a light dressing. You can even use cantaloupe to make a refreshing summer cocktail, a spreadable jam or a light sorbet. Enjoy the sweet and juicy taste of fresh Cantaloupe.', 'Cantaloupe, each: Ideal addition to every kitchen Flavorful addition to many recipes Enjoy on its own or add to a mixed fruit salad Add to your fresh garden salad Get creative & make a cantaloupe cocktail or a refreshing sorbet Explore all the delicious ways to add fresh cantaloupe to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fb4c18a5-9367-4770-b99f-7518c72db482.5609c32e87a3110b734aad048bf9fe35.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb4c18a5-9367-4770-b99f-7518c72db482.5609c32e87a3110b734aad048bf9fe35.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb4c18a5-9367-4770-b99f-7518c72db482.5609c32e87a3110b734aad048bf9fe35.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390976, 'Red Globe Seeded Grapes, Bag', 1.98, '333832505956', 'Produce Unbranded Fresh Chilean Grown Red Globe Grapes', 'Red Globe Seeded Grapes, Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0d5f1d83-8b5b-4c85-9170-4ae2c288720e_1.5530e794986c0ec5ede8e866f1186fc3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d5f1d83-8b5b-4c85-9170-4ae2c288720e_1.5530e794986c0ec5ede8e866f1186fc3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d5f1d83-8b5b-4c85-9170-4ae2c288720e_1.5530e794986c0ec5ede8e866f1186fc3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390977, 'Fresh Muscadine Bronze Grapes, Whole, 1 lb Tray', 3.88, '033383250731', 'Enjoy the sweet taste of these Fresh Muscadine Bronze Grapes. Native to the southern United States, these muscadine grapes have a thick, tough skin and a sweet, juicy interior. These large, round grapes come in various shades of purple to bronze and are known for their unique musky whole flavor. Rich in antioxidants and vitamins, muscadine grapes are enjoyed fresh, as well as in jams, jellies, and wines. With a sweet flavor, they\'re great for snacking and can be used in salads, smoothies, and desserts, making them a perfect addition to any meal. Bring home some Fresh Muscadine Bronze Grapes today.', 'Fresh Muscadine Bronze Grapes, Whole, 1 lb Tray Tasty, nutritious fruit ideal for snacking or adding to recipes Muscadine grapes have a high concentration of antioxidants These grapes provide dietary fiber, supporting digestive health, cholesterol regulation, and weight maintenance With a sweet flavor, they\'re great for snacking and can be used in salads, smoothies, and desserts, making them a perfect addition to any meal Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7c72acc7-6cdc-465f-8699-f5062fae2d7e.6c465b360f3f7b24a97185c6001423ad.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c72acc7-6cdc-465f-8699-f5062fae2d7e.6c465b360f3f7b24a97185c6001423ad.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c72acc7-6cdc-465f-8699-f5062fae2d7e.6c465b360f3f7b24a97185c6001423ad.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390980, 'Fresh Pink Lady Apple, Each', 0.82, '000000041300', 'Treat yourself to the delicious, crisp taste of Pink Lady Apples. These apples are known for their vivid green skin covered in a pinkish blush, crunchy texture, and tart taste with a sweet finish. Enjoy one with breakfast or lunch or as a fresh snack any time of day. with Pink Lady Apples. These are some of the fresh produce we offer that is made with organic ingredients.', 'Fresh Pink Lady Apples, Each: Crisp and aromatic with a pleasant sweet but tart flavor Great morning, noon, or night Chop them up and add to a salad, dice and top with oats, spices, and butter for an apple crisp, or serve with a dollop of peanut butter Versatile ingredient great for a variety of dishes Make a creamy smoothie or a nutritious juice blend Perfect as a healthy treat or seasonal baking ingredient Great for packing in lunches Make a creamy smoothie or a nutritious juice blend Adds flavor to a variety of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fb057123-7b14-45f0-8b95-0b7ba1aca744.5a3e368f1b6db1be85515a4e5015a780.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb057123-7b14-45f0-8b95-0b7ba1aca744.5a3e368f1b6db1be85515a4e5015a780.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb057123-7b14-45f0-8b95-0b7ba1aca744.5a3e368f1b6db1be85515a4e5015a780.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390986, 'Fresh Personal Seedless Watermelon, Each', 4.18, '823298000138', 'Discover the refreshing taste and convenience of a Fresh Personal Seedless Watermelon. Ideally sized for modern kitchens, these personal watermelons are often sought after as a mini watermelon because of their compact shape that fits neatly into refrigerator drawers. Slice through the vibrant green rind to reveal crisp, juicy red flesh bursting with natural sweetness. Known as sandia in many households, this whole fruit serves as a wonderful choice for backyard picnics, fresh fruit salads, or blending into cooling smoothies. The manageable size allows you to enjoy fresh melon with ease, making it simple to wash, carry, and prepare whenever you crave a healthy treat.', 'Compact personal size fits easily in refrigerator drawers and travel coolers Crisp red flesh offers a sweet and juicy texture for a refreshing treat Naturally hydrating snack that is fat-free and low in calories Lightweight whole fruit is effortless to carry, wash and slice for quick preparation Delicious addition to fruit salads, sandia fresh waters, lunch boxes and sorbets Convenient mini watermelon size reduces food waste and storage needs', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d3ac703a-9c91-451a-8218-f522602003d7.fc560b0a40424cda1152890f8f927344.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d3ac703a-9c91-451a-8218-f522602003d7.fc560b0a40424cda1152890f8f927344.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d3ac703a-9c91-451a-8218-f522602003d7.fc560b0a40424cda1152890f8f927344.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390991, 'Fresh Granny Smith Apples, 3 lb Bag', 3.62, '888289401073', 'Treat yourself to Freshness Guaranteed Granny Smith Apples. Granny Smith apples are firm and juicy with a crisp texture and a tart, acidic, yet subtly sweet flavor, perfect for use in a variety of dishes morning, noon, and night. Slice them up and cook in a skillet with brown sugar, butter, cloves, and nutmeg for a simple, sweet treat. Mix them with cabbage, grapes, honey, mayonnaise and, celery to make a fresh, apple slaw for a summer cookout. Use them to make a sweet, classic apple pie that your friends and family with love. Create delicious meals and treats with Freshness Guaranteed Granny Smith Apples. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Firm and juicy with a crisp texture and a tart, acidic, yet subtly sweet flavor Great for breakfast, lunch, dinner, or dessert Cook in a skillet with butter, brown sugar, and spices; mix with cabbage, grapes, honey, mayonnaise and, celery for apple slaw; or make a classic apple pie Versatile ingredient perfect for both savory and sweet dishes Meets or exceeds U.S. Extra Fancy They have a creamy white flesh with low acidity', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/50a4f85e-f8c7-4ff3-857b-92066c31ab5e.b05cce25b6be38f5892bad0ebb8ff078.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/50a4f85e-f8c7-4ff3-857b-92066c31ab5e.b05cce25b6be38f5892bad0ebb8ff078.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/50a4f85e-f8c7-4ff3-857b-92066c31ab5e.b05cce25b6be38f5892bad0ebb8ff078.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390992, 'Fresh Whole Sweet Onion, Each', 0.96, '204166000007', 'Add flavor to your next meal with fresh Sweet Onions. This versatile vegetable adds flavor and texture to a variety of recipes. For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. You can dice these onions and add them to a fresh garden salad for a satisfying crunch or sprinkle them on top of your fish tacos. Sweet onions also make delicious golden onion rings to serve alongside juicy hamburgers and hot dogs at your next backyard barbecue. You can keep these onions at room temperature until ready to use. Stock your pantry with several of these fresh, whole Sweet Onions.', 'Whole fresh sweet onions, each: Less pungent than other varieties of onions Mild, sweet flavor Great in dishes that feature onion as a primary flavor, like onion soup Yummy addition to salads and sandwiches Store in the refrigerator for best results Packed with minerals and vitamins Delicious and nutritious Less pungent than other varieties of onions Mild, sweet flavor Great in dishes that feature onion as a primary flavor, like onion soup Yummy addition to salads and sandwiches Store in the Bag refrigerator for best results Packed with minerals and vitamins Delicious and nutritious, No Preservatives', 'Fresh Produce', 'https://i5.walmartimages.com/asr/751d9737-f277-476b-853c-e0051119e55f.6682664c7777fd9f7ceec9e4078bf383.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/751d9737-f277-476b-853c-e0051119e55f.6682664c7777fd9f7ceec9e4078bf383.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/751d9737-f277-476b-853c-e0051119e55f.6682664c7777fd9f7ceec9e4078bf383.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44390996, 'Fresh Long English Cucumber, Each', 0.97, '003338301009', 'Enjoy the fresh, crisp, delicious flavor of English Cucumber. Packed with nutritional benefits such as being naturally low in calories, carbohydrates, sodium, fat, and cholesterol, cucumbers also provide potassium, fiber, and vitamin C and clock in at a cool 16 calories per cup. Use this cucumber to make healthy treats such as a cucumber salad with tomatoes and onions in a vinaigrette dressing, toss with fresh mozzarella, tomatoes, and a drizzle of balsamic vinegar, mix diced cucumbers with Greek yogurt, lemon, dill, and garlic for a refreshing tzatziki sauce for gyros or veggies, add to a crisp, fresh veggie salad, or thinly slice and add to a vinegar brine for quick pickles. Any way you slice, dice, or spiralize them, English Cucumber is a refreshing, healthy addition to any meal.', 'English Cucumber, 1 Each: Single cucumber Crisp, delicious, and refreshing Naturally low in calories, carbohydrates, sodium, fat, and cholesterol Provides potassium, fiber, and vitamin C, among other nutrients Create delicious recipes with this fresh cucumber', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ab5b3a59-55ca-4e21-b071-d6410abcd75b.d4490acd083eb12bee46c4335a6dceb4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ab5b3a59-55ca-4e21-b071-d6410abcd75b.d4490acd083eb12bee46c4335a6dceb4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ab5b3a59-55ca-4e21-b071-d6410abcd75b.d4490acd083eb12bee46c4335a6dceb4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391001, 'Fresh Carrot Chips, 1 lb, Bag', 2.07, '033383088006', 'Serve up a delicious snack with Fresh Carrot Chips. Carrots are a great source of beta carotene, fiber, vitamin K, potassium, and antioxidants. Ready to eat as-is, serve them with your favorite healthy dip for a snack that is better for you than traditional potato chips, add them to a crudité platter with other fresh vegetables, roast them in the oven with some olive oil and a little honey for a delectable side dish, or make a quick refrigerator pickle with radish slices and onions for a fun condiment with Mexican flair for your next Taco Tuesday. Perfectly portable, it’s easy to pack some carrot chips in your lunch or take a bag with you for a mid-afternoon pick-me-up. Keep healthy snacks within reach when you stock of up Fresh Carrot Chips.', 'Fresh Carrot Chips 1-pound bag Great source of beta carotene, fiber, vitamin K, potassium, and antioxidants Ready to eat Serve with your favorite dip as an alternative to traditional potato chips', 'Unbranded', 'https://i5.walmartimages.com/asr/39b48ca6-6c78-4f45-8a68-3106bd77c507.295daa91ace35ef1e629b902a19ff2c0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39b48ca6-6c78-4f45-8a68-3106bd77c507.295daa91ace35ef1e629b902a19ff2c0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39b48ca6-6c78-4f45-8a68-3106bd77c507.295daa91ace35ef1e629b902a19ff2c0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391003, 'Fresh Orange Bell Pepper, Each', 1.48, '203121000007', 'Enhance your meals with the delicious flavor of Greenhouse grown Orange Bell Peppers. Orange bell pepper has a crisp flavor that enhances a variety of recipes. Dice bell peppers and put them in a hearty chili, slice them and add to a deli sandwich, sauté them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper. They also taste delicious raw alongside other vegetables. Orange Bell Peppers are an excellent item to have on hand', 'Naturally low in calories, Exceptionally rich in vitamin C and other antioxidants Delicious cooked or uncooked Create delicious recipes with fresh bell peppers', 'Fresh Produce', 'https://i5.walmartimages.com/asr/eb1893c6-ff33-4a36-ba05-d7fe42b67fbf.830244cad6037e9c0b18c4c237259b5d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eb1893c6-ff33-4a36-ba05-d7fe42b67fbf.830244cad6037e9c0b18c4c237259b5d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eb1893c6-ff33-4a36-ba05-d7fe42b67fbf.830244cad6037e9c0b18c4c237259b5d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391004, 'Russet Baking Potatoes Whole Fresh, Each', 0.75, '000000040723', 'Russet Baking Potatoes are the perfect addition to your pantry. With so many ways to prepare potatoes, you\'ll want to add them to every meal. For breakfast, you could make crispy hash browns smothered in cheese and diced ham or add them to a savory omelet. For lunch or dinner, you could use these fresh potatoes to make au gratin potatoes, garlic mashed potatoes, or a baked potato loaded with cheese, sour cream, green onions, and bacon bits. If you\'re hosting a neighborhood get-together, you can use them to make creamy potato salad or homestyle French fries. Serve up something delicious when you cook with Russet Baking Potatoes.', 'Fresh Russet Baking Potatoes, each: Ideal addition to every pantry Make crispy hash browns or add to an omelet Serve garlic mashed potatoes or a loaded baked potato Great for potato salad or homestyle French fries Explore all the delicious ways to serve these satisfying potatoes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c638c006-a982-48f7-aa33-6d3a8dc2983c.8fd015937ebfdd46c8fcb6177d0d1b1d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c638c006-a982-48f7-aa33-6d3a8dc2983c.8fd015937ebfdd46c8fcb6177d0d1b1d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c638c006-a982-48f7-aa33-6d3a8dc2983c.8fd015937ebfdd46c8fcb6177d0d1b1d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391005, 'Fresh Ginger Root, Each', 0.97, '000000046121', 'Fresh Ginger Root has a light brown, textured skin and white to yellow flesh. Its peppery, pungent, zesty flavor is a great way to bring acidity and just a touch of sweetness to juices, teas, stir-fries, and more. With a fibrous, somewhat juicy texture, ginger can be used fresh, dried, powdered, or as an oil or juice. Plus, it is known to have amazing health benefits, and has been used to help digestion, reduce nausea, and fight the flu, thanks to its impressive array of vitamins and minerals like iron, potassium, and vitamin C. Whether you\'re garlic-ginger chicken and broccoli, candied ginger, or an immune-boosting ginger tea, you\'ll want to have Fresh Ginger Root on hand. Also known as Jengibre, Sheng Jiang, Zanjabeel and Adrak around the world.', 'Fresh Ginger Root, per lb: Light brown, textured skin and white to yellow flesh Peppery, pungent, zesty flavor Can be used fresh, dried, powdered, or as an oil or juice Great addition to juices, teas, and stir-fries', 'Fresh Produce', 'https://i5.walmartimages.com/asr/19b5b581-826c-4d16-9a51-4260b57d15a4.262bf459282bb9c9d6e73db2d0db0cfa.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19b5b581-826c-4d16-9a51-4260b57d15a4.262bf459282bb9c9d6e73db2d0db0cfa.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19b5b581-826c-4d16-9a51-4260b57d15a4.262bf459282bb9c9d6e73db2d0db0cfa.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391008, 'Fresh Lime, Each', 0.25, '883616002763', 'Add zest and flavor to your meals and beverages with these Limes (Lima). Freshly squeezed limes provide a healthy dose of vitamin C to your diet and are a key ingredient in many recipes, from homemade salsa to chicken dishes. The citrusy tropical flavor of these limes are sure to add a zing to all your cooked meals. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. Enjoy the refreshing, tart flavor of Limes.', 'Juicy and fresh, packed with vitamin C Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies and tarts Refreshing, tart flavor Available by the each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/12314833-2e54-4739-94a2-7db45b63109d.16ff07e3c111df9be4158853c2e505ef.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/12314833-2e54-4739-94a2-7db45b63109d.16ff07e3c111df9be4158853c2e505ef.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/12314833-2e54-4739-94a2-7db45b63109d.16ff07e3c111df9be4158853c2e505ef.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391012, 'Fresh Navel Oranges, 4 lb Bag', 5.83, '033383120805', 'Fresh Navel Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with a thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 4 lb package, these Fresh Navel Oranges are great for the entire family.', 'Fresh Navel Oranges, 4 lb Bag A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fde3a905-a587-489d-baf8-399c6a685b03.30b341eb36f6f629e51f36434db8015f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fde3a905-a587-489d-baf8-399c6a685b03.30b341eb36f6f629e51f36434db8015f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fde3a905-a587-489d-baf8-399c6a685b03.30b341eb36f6f629e51f36434db8015f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391016, 'Kiwi Bulk, 1ea', 0.56, '066022040301', 'Kiwi, it is a fruit native to China, very popular for its sweet-tart flavor and its green flesh with small black seeds. It has a high water content and few calories. Rich in vitamins, fiber, antioxidants, vitamin K, and potassium, it is also low in calories. It is a refreshing fruit and can be eaten on its own, in fruit salads, smoothies, and more.', 'Rich in vitamin C, strengthens the immune system. Fiber, aids digestion and intestinal transit. Antioxidants, protect cells from damage. Vitamin K and potassium, support bones and heart health. Low in calories, ideal for healthy diets.', 'Unbranded', 'https://i5.walmartimages.com/asr/ea2f1505-0449-4d67-b4b4-d64294748ab5_2.ccee6b1b5876b8a7d2ef2395829076ad.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea2f1505-0449-4d67-b4b4-d64294748ab5_2.ccee6b1b5876b8a7d2ef2395829076ad.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea2f1505-0449-4d67-b4b4-d64294748ab5_2.ccee6b1b5876b8a7d2ef2395829076ad.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391018, 'Fresh Jalapeno Pepper, Approx. 3-5 per 0.25 Pound', 0.41, '853447003208', 'Enhance your meals with the delicious flavor of Jalapeno Peppers. Naturally low in calories, fat, and cholesterol, this vegetable is a great source of vitamins C, B6, A, and K, as well as folate and manganese. Jalapeno peppers have a range of pungency, and a crisp flavor that enhances a variety of recipes. Stuff jalapeno peppers with cheese and wrap in bacon for everyone?s favorite poppers, add them to enchiladas, put some diced jalapeno in your famous chili recipe, or make a zesty salsa using fresh jalapeno peppers. You can even add some diced jalapeno peppers and cheese to cornbread batter for a delectable chile cheese cornbread that will have everyone asking for seconds. Lunches and dinners are more scrumptious when fresh Jalapeno Peppers are part of the meal. Also known as Jalapeño, Spicy chili, Filfil har and Mirch around the world.', 'Jalapeno Pepper, 1 each: Naturally low in calories Rich in vitamins C, B6, A, and K Stuff jalapeno peppers and wrap in bacon for poppers, add to enchiladas or chili, or make a zesty salsa Approximately 3-5 peppers per .25 lb Versatile and delicious Jalapeno Peppers, 1 lb. Approximately 17 jalapenos per lb.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/540e857c-d063-4ad1-96a4-553c237171b3.080e0d33d92e26a5822927761234c7f1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/540e857c-d063-4ad1-96a4-553c237171b3.080e0d33d92e26a5822927761234c7f1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/540e857c-d063-4ad1-96a4-553c237171b3.080e0d33d92e26a5822927761234c7f1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391023, 'Fresh Green Beans, Bag (26.5 oz / Bag Est.)', 2.95, '000000040662', 'Add fresh flavor to your meal with fresh Green Beans. These green beans are an excellent source of vitamin A and vitamin C. Serve just as they are or add your favorite seasonings for additional flavor. Roast them with oil and spices for a rich and flavorful dish or add butter, shallots, salt, and pepper to green beans to create a yummy side dish. Serve with pork chops, chicken breasts, and other meats for a well-rounded meal. With so many uses, these greens beans will become a kitchen staple for your home. Fresh Green Beans are a quick and healthy side dish and a great addition to any meal.', 'Excellent source of vitamins A and C Roast with oil and spices or add butter, shallots, salt, and pepper for the perfect side dish Versatile ingredient Serve with pork chops, chicken breasts, and other meats for a well-rounded meal A kitchen staple', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0f89b2d3-88e2-4bf2-a948-a78bde5e886f.66904022b5a6e51cf5c329a2ac19c822.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0f89b2d3-88e2-4bf2-a948-a78bde5e886f.66904022b5a6e51cf5c329a2ac19c822.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0f89b2d3-88e2-4bf2-a948-a78bde5e886f.66904022b5a6e51cf5c329a2ac19c822.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391024, 'Spice World Fresh & Peeled Garlic 6 oz', 3.07, '023562010379', 'When you insist on fresh but don’t want to bother with peeling your garlic, Spice World Peeled Garlic is a sure bet. Pre-peeled and ready for you to mince, chop, crush, slice, or toss into any recipe for a convenient and savory boost to your dish!', 'No preservatives added No sodium Non-GMO Kosher', 'Spice World', 'https://i5.walmartimages.com/asr/96909e50-5c3d-4dfb-a50b-e4d6a5ea10a5.3cf9df14709618f4b8902742e0de84a3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96909e50-5c3d-4dfb-a50b-e4d6a5ea10a5.3cf9df14709618f4b8902742e0de84a3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96909e50-5c3d-4dfb-a50b-e4d6a5ea10a5.3cf9df14709618f4b8902742e0de84a3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391032, 'Marketside Organic Yellow Onions Whole Fresh, 3 lb Bag', 4.78, '033383900018', 'Give all of your dishes a wonderful flavor with these Organic Yellow Onions 3-lb Bags. They can be added to all of your favorite foods including hamburgers, stir-fries, soups, and pizza and used to make onion rings or blooming onions. These onions can be sauteed or served raw and stored in a cool, dry area until you are ready to use them. They have a fresh taste that will put something extra in your dish. These onions are easy to peel and quick to prepare so you can serve them on your dinner plate in no time. Add these veggies to your next dish and impress others with your culinary skills.', 'Staple ingredient for a variety of recipes Organic onions have a sharp taste that sweetens as it cooks 3 lb bag', 'Marketside', 'https://i5.walmartimages.com/asr/7494d3f2-fc20-4038-8be8-ba9a5088b94d.6b1d272e8ec503d8881db5bacb729afc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7494d3f2-fc20-4038-8be8-ba9a5088b94d.6b1d272e8ec503d8881db5bacb729afc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7494d3f2-fc20-4038-8be8-ba9a5088b94d.6b1d272e8ec503d8881db5bacb729afc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391037, 'Fresh Romaine Fillets, 7 oz', 2.98, '716519090080', 'Introducing our refreshing Fresh Romaine Fillets, a delightful addition to any meal. These crisp, 7 oz bags are packed with delicious, hand-picked romaine lettuce, specifically chosen for their tender and succulent fillets. Our romaine is sustainably grown and harvested at peak freshness, ensuring a vibrant and nutritious experience in every bite. Perfect for salads, wraps, or as a crunchy snack, our Fresh Romaine Fillets are a versatile and healthy option. Enjoy the unbeatable taste and quality of these convenient and appetizing greens today!', 'Romaine Fillets, 7 oz Introducing our refreshing Fresh Romaine Fillets, a delightful addition to any meal. These crisp, 7 oz bags are packed with delicious, hand-picked romaine lettuce, specifically chosen for their tender and succulent fillets. Our romaine is sustainably grown and harvested at peak freshness, ensuring a vibrant and nutritious experience in every bite. Perfect for salads, wraps, or as a crunchy snack, our Fresh Romaine Fillets are a versatile and healthy option. Enjoy the unbeatable taste and quality of these convenient and appetizing greens today!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9aa35949-161b-4c31-8f76-eb76190ca730.449bb4a9c1fe483e0b882c97f41c5029.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9aa35949-161b-4c31-8f76-eb76190ca730.449bb4a9c1fe483e0b882c97f41c5029.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9aa35949-161b-4c31-8f76-eb76190ca730.449bb4a9c1fe483e0b882c97f41c5029.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391040, 'Fresh Yellow Squash', 0.95, '000000047845', 'Create something wholesome and delicious with Yellow Squash. These versatile vegetables can be used to make savory sides or sweet treats. Try them dipped in batter and fried for a comforting side or, for a healthier option, you can make a filling squash and chicken chowder, or roast them in the oven stuffed with ground turkey. If you\'re looking for something sweet, you can use squash to make a zesty lemon squash bread, a creamy squash custard pie, or even a squash chocolate loaf. Use your imagination to create something amazing and tasty with this squash. The mouthwatering possibilities are endless with this hearty vegetable. Add something amazing to your meals with fresh Yellow Squash.', 'Yellow Squash Wholesome and delicious Ideal ingredient for a variety of dishes Make fried squash, a fresh squash salad, or a hearty autumn squash soup Use to make lemon squash bread and squash custard pie Versatile and hearty', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cac77957-3d9b-4bd3-bb94-53dbacf7241a.6e34f4c036af69455baa7a228c0eff91.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cac77957-3d9b-4bd3-bb94-53dbacf7241a.6e34f4c036af69455baa7a228c0eff91.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cac77957-3d9b-4bd3-bb94-53dbacf7241a.6e34f4c036af69455baa7a228c0eff91.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391042, 'Fresh Green Cabbage, Each', 2.66, '763478723924', 'Get creative in the kitchen with green cabbage. Fresh green cabbage is low in calories and high in fiber and antioxidants making it a great part of any healthy diet. Best of all, cabbage can be used for many different recipes and cuisines. Cabbage can be incorporated into everything from delicious and creamy cole slaw, wraps, egg rolls, curry, kimchi and more. Green cabbage can be roasted, boiled, braised, grilled, sauted, and even blanched. The possibilities are endless when you bring home green cabbage. Also known as Repollo verde, Malfoof and Patta Gobhi around the world.', 'Green Cabbage, Head: 1 head of green cabbage Versatile and healthy ingredient Can be roasted, boiled, braised, grilled, sauted, and even blanched Incorporate into everything from delicious and creamy cole slaw, stuffed cabbage, and wraps, to egg rolls, grilled cabbage, curry, kimchi and more Low in calories and high in fiber and antioxidants', 'Fresh Produce', 'https://i5.walmartimages.com/asr/164666b6-9c50-4505-bc1d-29f4d316f7dc.754a17269329372872578ecaef0c9d99.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/164666b6-9c50-4505-bc1d-29f4d316f7dc.754a17269329372872578ecaef0c9d99.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/164666b6-9c50-4505-bc1d-29f4d316f7dc.754a17269329372872578ecaef0c9d99.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391050, 'Fresh Yellow Grape Tomato, 10 oz Package', 2.98, '751666470064', 'These Yellow Grape Tomatoes deliver fresh, versatile flavor to take you from sauces to salads and beyond. A unique spin on the time-tested grape tomato, these colorful cousins of the grape tomato boast unique citrusy, floral notes. Refreshingly vibrant and versatile, you can enjoy them for snacking, salads, grilling, roasting or sauteing. You can combine these tasty little tomatoes with fresh mozzarella and basil drizzled with olive oil or slice them up and add them to a freshly tossed salad. If you\'re feeling something classic, you can always cut one up to add that fresh tomato taste to a sandwich or dice up a few to make a delightful pizza topping. Be sure to add Yellow Grape Tomatoes to your inventory of fresh ingredients today.', 'Yellow Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Colorful tomatoes with citrusy, floral notes Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fb428654-2801-4914-a853-7b57912d3df3.564b08cd4bb64c7880b1736f897970bb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb428654-2801-4914-a853-7b57912d3df3.564b08cd4bb64c7880b1736f897970bb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb428654-2801-4914-a853-7b57912d3df3.564b08cd4bb64c7880b1736f897970bb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391051, 'Marketside Organic Fresh Green Onions, 1 Bunch', 1.97, '073574850012', 'Add flavor to your next meal with Marketside Organic Fresh Green Onions. For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. Chop up the stalks into little rings and mix them into sour cream to create a delicious chip dip. You can also add them to a fresh garden salad or sprinkle them on top of your fish tacos. Add color and flavor to any dish with these Marketside Organic Fresh Green Onions. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Use in a variety of recipes Adds a hint of boldness to your dishes Dice them and add to a savory breakfast omelet Chop into little rings and add to sour cream to make a delicious chip dip Easy way to add color and flavor to a dish', 'Marketside', 'https://i5.walmartimages.com/asr/b579fc12-871b-43bb-9c37-5a818ee5a730.7e0ee1a74497207bf600bc66f9e4b7c3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b579fc12-871b-43bb-9c37-5a818ee5a730.7e0ee1a74497207bf600bc66f9e4b7c3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b579fc12-871b-43bb-9c37-5a818ee5a730.7e0ee1a74497207bf600bc66f9e4b7c3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391060, 'Fresh Large Braeburn Apple, Each', 0.88, '813200010157', 'Indulge in the pure bliss of Fresh Braeburn Apples - the epitome of fresh produce made with organic ingredients. Harvested at their prime, our apples are juicy, crisp and flavorful. Filled with vitamins, antioxidants and fiber, these apples are a healthy snacking option that can be enjoyed on-the-go or incorporated into your favorite recipes. Treat your taste buds to the delightful crunch that only our Fresh Braeburn Apples can offer!', 'Fresh Braeburn Apple, Each: Sweet, crisp & juicy Mild lemon-citrus undertones Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6afbeabb-2816-4a5c-a0aa-f4255269f28e.98948ebdba2b724102eec9a1f7260ef8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6afbeabb-2816-4a5c-a0aa-f4255269f28e.98948ebdba2b724102eec9a1f7260ef8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6afbeabb-2816-4a5c-a0aa-f4255269f28e.98948ebdba2b724102eec9a1f7260ef8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391064, 'Fresh Limes, 2 lb Bag', 4.98, '033383115498', 'Limes are a versatile citrus fruit, loved for their tangy, refreshing flavor and vibrant green color. Perfect for enhancing drinks, marinades, and desserts, they add a zesty twist to both sweet and savory dishes. Rich in vitamin C and bursting with aroma, limes are a kitchen staple that brings freshness and flavor to every meal. Available in a 2 lb bag.', 'Juicy and fresh, packed with vitamin C Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies and tarts Refreshing, tart flavor Available in a 2-pound bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a49d8849-2b49-466c-a479-91b6cc4c8266.d46302dad12444be222c84dac705d51f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a49d8849-2b49-466c-a479-91b6cc4c8266.d46302dad12444be222c84dac705d51f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a49d8849-2b49-466c-a479-91b6cc4c8266.d46302dad12444be222c84dac705d51f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391069, 'Fresh Navel Oranges, 8 lb Bag', 7.97, '033383130033', 'Enjoy the juicy goodness of Fresh Navel Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these navel oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Fresh Navel Oranges add flavor to any meal or beverage.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes Use as a garnish for your favorite cocktail Make sweet desserts like ambrosia, orange bars, and orange pie', 'Unbranded', 'https://i5.walmartimages.com/asr/9a25f6b3-e35b-43b6-b39a-c29cae0cfed1.be63ddb1f1f88e79fcaf0ee8c6123561.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9a25f6b3-e35b-43b6-b39a-c29cae0cfed1.be63ddb1f1f88e79fcaf0ee8c6123561.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9a25f6b3-e35b-43b6-b39a-c29cae0cfed1.be63ddb1f1f88e79fcaf0ee8c6123561.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391071, 'Fresh Produce, Whole Beets, 1 Bunch', 2.57, '735718700705', 'Serve up something amazing when you cook with Fresh Beets. This versatile root vegetable is known for its bright red color and is a great addition to a healthy diet and can be prepared in a variety of ways. Roast them with your favorite seasonings and serve with a juicy steak and homemade rolls or add them to a goat cheese and arugula salad. Use them in a comforting soup recipe, a delicious casserole, or even a cake. However, you choose to use them, these beets will add big flavor and unforgettable taste to any meal. The culinary possibilities are endless with Fresh Beets. Also known as Remolacha, Beetroot, Shamandar, and Chukandar around the world.', 'Fresh Beets, Bunch Healthy vegetable root, known for their ruby red hue Enjoy the deep, earthy flavor in your favorite dish or juice Great for a variety of dishes and a great addition to a healthy diet that can be prepared in many ways Also known as Remolacha, Beetroot, Shamandar, and Chukandar around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bcb52aec-0033-4349-8053-9dbf60a5475b.f8318e88e815cff3ae4d1332c48ac5ef.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bcb52aec-0033-4349-8053-9dbf60a5475b.f8318e88e815cff3ae4d1332c48ac5ef.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bcb52aec-0033-4349-8053-9dbf60a5475b.f8318e88e815cff3ae4d1332c48ac5ef.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391079, 'Fresh Organic Granny Smith Apples, 2lb Bag', 1.68, '847473003912', 'Treat yourself to Organic Granny Smith Apples. Granny Smith apples are firm and juicy with a crisp texture and a tart, acidic, yet subtly sweet flavor, perfect for use in a variety of dishes morning, noon, and night. Slice them up and cook in a skillet with brown sugar, butter, cloves, and nutmeg for a simple, sweet treat. Mix them with cabbage, grapes, honey, mayonnaise and, celery to make a fresh, apple slaw for a summer cookout. Use them to make a sweet, classic apple pie that your friends and family with love. Create delicious meals and treats with Organic Granny Smith Apples.', 'Organic Granny Smith Apples, 2lb Bag: Firm and juicy with a crisp texture and a tart, acidic, yet subtly sweet flavor Great for breakfast, lunch, dinner, or dessert Cook in a skillet with butter, brown sugar, and spices, mix with cabbage, grapes, honey, mayonnaise and, celery for apple slaw, or make a classic apple pie Versatile ingredient perfect for both savory and sweet dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/757a2485-0b01-43a0-aac6-4b6e91b1d13e.839a05ccafbc235a8f6b38559ccff0c7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/757a2485-0b01-43a0-aac6-4b6e91b1d13e.839a05ccafbc235a8f6b38559ccff0c7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/757a2485-0b01-43a0-aac6-4b6e91b1d13e.839a05ccafbc235a8f6b38559ccff0c7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391083, 'Freshness Guaranteed Fruit Tray with Vanilla Dip, 48 oz - Fresh and Delicious', 13.47, '717524782540', 'The Freshness Guaranteed Fruit Tray with Vanilla Dip, 48 oz is perfect for any occasion, offering a delightful assortment of fresh fruits. This fruit tray is an excellent choice for gatherings, parties, or simply enjoying a healthy snack at home. Packed with an enticing variety of seasonal fruits, it includes crisp grapes, juicy pineapples, succulent strawberries, and more. Accompanied by a creamy vanilla dip, this fruit tray ensures both flavor and freshness. Ideal for those who appreciate quality and convenience, our fruit tray is a testament to our commitment to providing fresh, high-quality produce for the modern consumer. With the brand Freshness Guaranteed, you can trust in consistent freshness and quality. Make it a staple for your next event or everyday enjoyment.', 'Includes an assortment of fresh, seasonal fruits Accompanied by a creamy vanilla cream cheese dip 48 oz size perfect for gatherings and parties Convenient and ready-to-serve packaging Ideal for healthy snacking and entertaining Freshness Guaranteed brand ensures quality and taste', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1357e144-4200-477c-be4e-69dcd7001201.210cdc1c9aa0543bb011e44b182a4e6f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1357e144-4200-477c-be4e-69dcd7001201.210cdc1c9aa0543bb011e44b182a4e6f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1357e144-4200-477c-be4e-69dcd7001201.210cdc1c9aa0543bb011e44b182a4e6f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391085, 'Fresh Spaghetti Squash, Each', 5.7, '204776000008', 'Treat yourself to a delicious and healthy meal with fresh, Produce Unbranded Spaghetti Squash. When, cooked this unique squash falls apart into ribbons that are the perfect substitute for spaghetti. Roast the squash and serve with marinara sauce and meatballs for a healthy spin on a classic or bake some with pancetta and make a creamy, decadent carbonara. You can even make scrumptious vegan or vegetarian meals using this versatile squash. If you’re feeling creative you can make Spaghetti Squash tacos, Spaghetti Squash casserole, or even pad Thai. Try serving it for breakfast by making Spaghetti Squash nests with a sunny side up egg. The possibilities are endless when you bring home Spaghetti Squash.', 'Fresh Spaghetti Squash, Each: Produce Unbranded Perishable, fresh produce When cooked, this squash falls apart into ribbons that are the perfect substitute for spaghetti Perfect for a healthy dinner Incorporate into all sorts of recipes from traditional Italian cuisine to Asian inspired dishes Can even be enjoyed for breakfast with eggs Great for vegan and vegetarian options', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a372db03-ecec-4fe4-ada6-1937224a090d.08af8ffcd30cb5fd83d57f6db282c355.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a372db03-ecec-4fe4-ada6-1937224a090d.08af8ffcd30cb5fd83d57f6db282c355.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a372db03-ecec-4fe4-ada6-1937224a090d.08af8ffcd30cb5fd83d57f6db282c355.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391086, 'Fresh Purple Eggplant - Versatile & Delicious', 2.45, '204081000007', 'Create something wholesome and delicious with Purple Eggplant. Eggplants are incredibly versatile and can be used to make a myriad of different recipes. Try them coated in breadcrumbs and fried for a comforting side, or for a healthier option you can stuff them and roast them in the oven. They can also be used to make cheesy eggplant rollatini, decadent eggplant parmesan, and scrumptious eggplant ravioli. You can even incorporate them into hearty stews or use them to top pizzas and more. Use your imagination to create something amazing and tasty with this squash. The mouthwatering possibilities are endless with this hearty vegetable. Add something amazing to your meals with fresh Purple Eggplant.', 'Healthy and delicious Versatile vegetable for various recipes Ideal for frying, stuffing, or roasting Perfect for eggplant parmesan, rollatini or Ratatouille Great addition to stews and pizzas Main ingredient for Baba Ganoush', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4307b532-ea7b-4b41-82b0-5ece9e9ab30c.431696526ff3c9ed9dbb45c1f9f233e7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4307b532-ea7b-4b41-82b0-5ece9e9ab30c.431696526ff3c9ed9dbb45c1f9f233e7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4307b532-ea7b-4b41-82b0-5ece9e9ab30c.431696526ff3c9ed9dbb45c1f9f233e7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391089, 'Fresh Cameo Apples, Each', 1.47, '840156101721', 'Cameo apples are known for their crisp texture, juicy flesh, and a unique combination of sweet and tangy flavors. With their beautiful red and yellow striped skin, Cameo apples are not only delicious but also visually appealing.', 'Cameo apples have a satisfyingly crisp texture that makes each bite a delightful experience. The flesh is firm and holds up well in various preparations. These apples offer a perfect balance of sweetness and tanginess. The flavor profile is often described as mildly sweet with subtle hints of acidity, making them enjoyable for a wide range of taste preferences. With their vibrant red and yellow striped skin, Cameo apples are visually appealing. Their unique coloring adds a touch of beauty to fruit bowls, desserts, and other culinary creations.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fb1a90ea-ce05-41b6-b825-71e15212655d.fb910fb70848500c56a43a14fe0e3a7e.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb1a90ea-ce05-41b6-b825-71e15212655d.fb910fb70848500c56a43a14fe0e3a7e.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb1a90ea-ce05-41b6-b825-71e15212655d.fb910fb70848500c56a43a14fe0e3a7e.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391093, 'Fresh Ambrosia Apple, Each', 1.25, '203438000004', 'Treat yourself to Ambrosia Apples. Ambrosia apples are crisp and juicy with a sweet honey-like flavor perfect for use in a variety of dishes morning, noon, and night. Perfect for snacking, they have a low acidity and are slow to brown. Chop the apples up and add them to a salad with walnut, mixed greens, and a poppy seed vinaigrette for a crunchy delicious salad that you can enjoy for lunch or dinner. Slice and plate them up on the side of your breakfast for a healthy start to your day. Serve them with a dollop of peanut butter for a delicious treat or add them to your cheese board for a mouthwatering sweet and salty combination. Create delicious meals and treats with Ambrosia Apples.', 'Fresh Jazz Apple, Each: Crisp with dense flesh and a fruity-sweet tartness Great morning, noon, or night Chop them up and add to a salad, slice and plate them up on the side of your breakfast, or serve with a dollop of peanut butter Add them to a cheese board for a sweet and salty combination', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6ba3d69b-4c3e-4d74-b875-e565b7bab40f_2.4077a6a330f2ce5a08708847a6e011c0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6ba3d69b-4c3e-4d74-b875-e565b7bab40f_2.4077a6a330f2ce5a08708847a6e011c0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6ba3d69b-4c3e-4d74-b875-e565b7bab40f_2.4077a6a330f2ce5a08708847a6e011c0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391097, 'Fresh Yellow Nectarine, Each', 0.76, '042188043783', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/537db953-d604-4a27-8ca4-0c7c5d3fe452.20282c3c0030c79a43479105f165c86b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/537db953-d604-4a27-8ca4-0c7c5d3fe452.20282c3c0030c79a43479105f165c86b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/537db953-d604-4a27-8ca4-0c7c5d3fe452.20282c3c0030c79a43479105f165c86b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391100, 'Garlic Bulb Fresh Whole, Each', 5.1, '000000046114', 'Take your culinary creations to the next level with fresh, flavorful Garlic. Garlic\'s signature flavors become caramelized and sweeter when cooked, making it a perfect accompaniment to many dishes such as pasta, shrimp, chicken, stews, and more. Garlic also goes great in creamed soups, on all types of roasts, in a variety of egg dishes, or used simply with sauteed or roasted vegetables. To prepare garlic for cooking, you\'ll need to break it up into individual cloves and peel the skin. Once you\'ve done this, you can mince the garlic by chopping it into fine pieces. Spice up your next meal with a tasty clove of fresh Garlic.', 'Single garlic bulb Must-have pantry staple Flavorful addition to a wide variety of recipes Add to pasta, shrimp, chicken, stews, and more Delivers a bold, pungent flavor when eaten raw but transforms into a lightly sweet and buttery flavor when cooked Explore all the delicious ways to add fresh garlic to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a4f114d9-93ab-4d39-a8d6-9170536f57a9.f9f8e58c8e3e74894050c7c2267437e3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a4f114d9-93ab-4d39-a8d6-9170536f57a9.f9f8e58c8e3e74894050c7c2267437e3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a4f114d9-93ab-4d39-a8d6-9170536f57a9.f9f8e58c8e3e74894050c7c2267437e3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391101, 'Fresh Seedless Watermelon, Each', 8.1, '040000040323', 'Enjoy the sweet, refreshing taste of a Seedless Watermelon. Seedless Watermelon is great for breakfast, lunch, dessert, or when you want a snack. Watermelon is a good source of vitamin C, vitamin A, and potassium making them an excellent healthy treat. Cut the watermelon into chunks for a quick snack, infuse it with water for a refreshing drink, or chop it up and make a mouthwatering watermelon salad with feta and mint. This watermelon is great for sharing with friends and family or keep it for yourself. Bring it to your next cookout or get it as a sweet after dinner treat with friends.', 'Explore all the delicious ways to add fresh watermelon to your favorite recipes. No added sugar Enjoy a fresh seedless Watermelon on its own or add to a mixed fruit salad Serve at your next neighborhood barbecue Get creative and make a watermelon cocktail or a refreshing sorbet Sweet and Juicy Watermelon', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e2ec527d-fe7b-4309-9373-186de34557cf.1c562d1a69a2a8f4cb7b5de8f125fc76.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2ec527d-fe7b-4309-9373-186de34557cf.1c562d1a69a2a8f4cb7b5de8f125fc76.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2ec527d-fe7b-4309-9373-186de34557cf.1c562d1a69a2a8f4cb7b5de8f125fc76.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391102, 'Fresh Leeks Bunch, Each', 4.37, '000000046299', 'Bring the delicious taste of Fresh Leeks into your home. These leeks deliver unmistakable flavor with each bite and are an ideal ingredient in a variety of recipes. Use them to top a gourmet pizza, add to a comforting potato soup, or use in a crowd-pleasing casserole. You could also mix them into a garden salad, a creamy dip, or use them as a garnish for roasted vegetables. However you choose to use them, these fresh leeks will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with these Fresh Leeks.', 'Wholesome, versatile, and delicious Ideal ingredient for a variety of dishes Use to make a comforting potato soup or a casserole Adds unmistakable flavor to dips and salads Try using leeks instead of onions in your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/590b5c73-8c51-4266-841d-aa1473abd554.b44a72e4346bd1ba0776c889275e0858.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/590b5c73-8c51-4266-841d-aa1473abd554.b44a72e4346bd1ba0776c889275e0858.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/590b5c73-8c51-4266-841d-aa1473abd554.b44a72e4346bd1ba0776c889275e0858.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391103, 'Organic Whole Carrots, 2 Lb Bag', 1.96, 'deleted_071464016968', 'Organic Whole Carrots, 2 pound bag.', 'Nutritious and delicious High in vitamin A Naturally sweet with rich flavor A cooking essential Perfect for juicing Organic', 'Marketside', 'https://i5.walmartimages.com/asr/5920bc6b-1db0-4af3-9f23-dddc46c0095f_1.e20c8ba41055db1ac42dfbc1e08d2fe0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5920bc6b-1db0-4af3-9f23-dddc46c0095f_1.e20c8ba41055db1ac42dfbc1e08d2fe0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5920bc6b-1db0-4af3-9f23-dddc46c0095f_1.e20c8ba41055db1ac42dfbc1e08d2fe0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391104, 'Marketside Organic Red Delicious Apples, 2 lb Bag', 3.56, '741839007913', 'Marketside Organic Red Delicious Apples are a treat for everyone. Enjoy them on their own or serve with a side of peanut butter for dipping. You can also turn your snack time into a sweet occasion and cover with caramel. Chop them up and add them to yogurt for a parfait, mix them with other fruit for a refreshing fruit salad, or use them to bake a decadent pie. Enjoy a healthier snack everyday with these Marketside Organic Red Delicious Apples. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Red Delicious Apples, 2 lb Bag Good for snacking Use to make a wonderful apple pie Makes tasty apple sauce Whole apples are delicious fresh produce', 'Marketside', 'https://i5.walmartimages.com/asr/d85954a3-dcb5-434e-a8c4-68906fad6a04.bd7209045c915c96d89c85e80e82e8d4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d85954a3-dcb5-434e-a8c4-68906fad6a04.bd7209045c915c96d89c85e80e82e8d4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d85954a3-dcb5-434e-a8c4-68906fad6a04.bd7209045c915c96d89c85e80e82e8d4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391105, 'Fresh Sweet Onions, 3 lb, Bag', 3.67, '851533003743', 'Add flavor to your next meal with fresh Sweet Onions. This versatile vegetable adds flavor and texture to a variety of recipes. For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. You can dice these onions and add them to a fresh garden salad for a satisfying crunch or sprinkle them on top of your fish tacos. Sweet onions also make delicious golden onion rings to serve alongside juicy hamburgers and hot dogs at your next backyard barbecue. You can keep these onions at room temperature until ready to use. Stock your pantry with this three-pound bag of fresh Sweet Onions.', 'Whole fresh sweet onions, 3 lb bag Ideal addition to every pantry Add flavor and texture to any meal Dice them and add to a savory breakfast omelet Sprinkle them onto a fresh garden salad for extra crunch Make delicious golden onion rings to serve with hamburgers and hot dogs', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e806ef18-d648-46cf-a232-3456b038974f.a883644337a1532e30af7e10f9dc3706.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e806ef18-d648-46cf-a232-3456b038974f.a883644337a1532e30af7e10f9dc3706.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e806ef18-d648-46cf-a232-3456b038974f.a883644337a1532e30af7e10f9dc3706.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391108, 'Organic Kale, bunch', 2.46, '688962145306', 'Organic KaleKale has a subtle flavor that blends well with many dishes. It is the perfect addition to soups, sautés, stir-fries, even coleslaws. Use kale in any recipe that calls for hardy greens.', 'Farm Fresh Cooking Greens', 'Fresh Produce', 'https://i5.walmartimages.com/asr/633b59e5-eba5-4da8-986a-37736b6e172f_1.7201e10d6faa872505a2e9c57f1a35d2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/633b59e5-eba5-4da8-986a-37736b6e172f_1.7201e10d6faa872505a2e9c57f1a35d2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/633b59e5-eba5-4da8-986a-37736b6e172f_1.7201e10d6faa872505a2e9c57f1a35d2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391110, 'Fresh Butter Lettuce, Each', 2.88, '027918908235', 'Switch up your lettuce game with Fresh Butter Lettuce. One of the most nutritious of the lettuces, Butter Lettuce is high in folate, iron, and potassium as well as a group of potent antioxidants called carotenoids, including beta carotene, lutein, and zeaxanthin. Butter lettuce has a soft, delicate texture and a mild, sweet flavor that lends itself to all kinds of uses. Also known as Boston or bibb lettuce, use butter lettuce to amp up a salad, add some leafy crunch to a sandwich, or in place of a tortilla or burger bun as a lettuce wrap. Whether you’re a fan of traditional salads or looking for a new way to add some green to your meals, Fresh Butter Lettuce is a delicious and nutritious choice.', 'Fresh Butter Lettuce High in folate, iron, and potassium Soft, delicate texture and a mild, sweet flavor Use in salads, add to a sandwich, or use in place of a tortilla or burger bun', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2217aae8-70cd-4e84-8406-0594dcc21ccb.47082a3150c3225a71c2577157100314.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2217aae8-70cd-4e84-8406-0594dcc21ccb.47082a3150c3225a71c2577157100314.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2217aae8-70cd-4e84-8406-0594dcc21ccb.47082a3150c3225a71c2577157100314.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391112, 'Marketside Premium Romaine Salad Blend, 9 oz Bag (Fresh)', 3.03, '681131387538', 'Sit down to a healthy meal with Marketside Premium Romaine Salad. With zero cholesterol, zero fat, and only 15 calories per serving, this 9-ounce bag of pre-washed salad is an excellent lunch or dinner option. All this salad needs is your favorite dressing, and you\'ve got yourself a tasty, no-hassle meal. Add a protein like chicken, steak, or garbanzo beans for a hearty and satisfying dish. Whether you serve it as a side or the main course, Marketside Premium Romaine Salad is sure to please. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Premium Romaine Salad Blend, 9 oz Bag (Fresh) Includes romaine lettuce, carrots, and red cabbage Washed and ready to be served out of the bag Convenient and nutritious 9oz package', 'Marketside', 'https://i5.walmartimages.com/asr/a3602ca5-370c-4605-a63d-9bc865a053a2.ce687c5389b10f67f194691795a68c1c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a3602ca5-370c-4605-a63d-9bc865a053a2.ce687c5389b10f67f194691795a68c1c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a3602ca5-370c-4605-a63d-9bc865a053a2.ce687c5389b10f67f194691795a68c1c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391113, 'Fresh Honeydew Melon, Each', 4.99, '799939040347', 'Treat yourself to the juicy goodness of a Fresh Honeydew Melon. Enjoy this tasty melon on its own as a healthy snack or incorporate it into a variety of delicious recipes. For breakfast, you can make a sweet fruit bowl with sliced honeydew melon, strawberries, pineapple, banana, and kiwi. For an extra special treat, top with a dollop of whipped cream. Cut it into small pieces and put it in a fresh salad along with chicken, cucumbers, tomatoes, and a light dressing. You can even use this melon to make a refreshing summer cocktail, a spreadable jam, or a light sorbet. Enjoy the sweet and juicy taste of Fresh Honeydew Melon.', 'Juicy and sweet honeydew melon Enjoy on its own or add to a mixed fruit bowl, No Container Add to your fresh garden salad Get creative and make a melon cocktail or a refreshing sorbet Explore all the delicious ways to add fresh honeydew melon to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a7b3bd36-e71d-41aa-9ace-cf70a2bade2b.e880a17b460f81c9ea3b7ec5f49d2d05.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a7b3bd36-e71d-41aa-9ace-cf70a2bade2b.e880a17b460f81c9ea3b7ec5f49d2d05.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a7b3bd36-e71d-41aa-9ace-cf70a2bade2b.e880a17b460f81c9ea3b7ec5f49d2d05.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391114, 'Fresh Romaine Lettuce, Each', 1.28, '854186005027', 'Treat yourself to the healthy, delicious taste of Fresh Romaine Lettuce. This romaine is perfect for a variety of healthy and delicious meals and is packed with vitamins, minerals and antioxidants. You can use it to whip up a classic Caesar salad with all the fixings or let your creativity run wild. You can also use it to make lettuce wraps filled with all your favorite fillings or top your favorite sandwich or burger. The possibilities are endless with Fresh Romaine Lettuce.', 'Sturdy dark green leaves with firm ribs down their centers Extremely low-calorie content and high-water volume Packed full of vitamins, minerals, and antioxidants Perfect for salads, smoothies, lettuce wraps, sandwiches, and more Organic and fresh from the farm Ideal for health-conscious diets and meal prep', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f1702b46-b866-4b41-9d65-bafdd5714b89.42b7c93565cf399acd8154734d64d85a.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f1702b46-b866-4b41-9d65-bafdd5714b89.42b7c93565cf399acd8154734d64d85a.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f1702b46-b866-4b41-9d65-bafdd5714b89.42b7c93565cf399acd8154734d64d85a.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391123, 'Fresh Yellow Baby Potatoes, 1.5 lb Bag', 3.44, '045255118803', 'Baby Yellow Potatoes are hand selected for excellent quality. Firm, well-shaped, and smooth, these fresh potatoes can be cooked in almost any way imaginable. They have a light, subtle flavor and creamy texture that make them the perfect side dish to chicken, fish, steak, and other delicious proteins. Simply grill, roast, or toss into salads along with your favorite seasonings. To preserve the nutrients, leave the skins on and simply scrub gently in water before cooking. Always store potatoes in a cool, well-ventilated area rather than in the refrigerator. Enjoy nutrients, flavor, and all-around deliciousness when you cook up Baby Potatoes.', 'Pre-Washed to save you time in the kitchen No need to peel-Thin skinned but NOT thin on taste! Fast, Easy Prep For additional information and recipes, visit tastefulselections.com', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ed528ea7-87ab-4de2-9fb2-a0c9cc543933.8bf991656a8723b7600c208324b644b0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed528ea7-87ab-4de2-9fb2-a0c9cc543933.8bf991656a8723b7600c208324b644b0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed528ea7-87ab-4de2-9fb2-a0c9cc543933.8bf991656a8723b7600c208324b644b0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391135, 'Fresh Poblano Pepper, Each', 0.68, '000000047050', 'Enhance your meals with the delicious flavor of Poblano Peppers. Naturally low in calories, fat, and cholesterol, this vegetable is an excellent source of vitamin A and vitamin B6, as well as iron and magnesium. Poblano pepper, also known as an ancho Chile, has a crisp flavor that enhances a variety of recipes. Stuff poblano peppers with cheese and meat for delicious rellenos, add them to enchiladas, put some diced poblano in your famous chili recipe, or make a zesty salsa using fresh poblano peppers. You can even add some diced poblano peppers and cheese to cornbread batter for a delectable Chile cheese cornbread that will have everyone asking for seconds. Lunches and dinners are more scrumptious when fresh Poblano Peppers are part of the meal.', 'Naturally low in calories Exceptionally rich in vitamins A and B6 Stuff poblano peppers for rellenos, add to enchiladas or chili, or make a zesty salsa Versatile and delicious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d5805f54-ccba-440a-a73c-1f47a56fca12_1.17cbe45fef678754efdc98e365207640.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d5805f54-ccba-440a-a73c-1f47a56fca12_1.17cbe45fef678754efdc98e365207640.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d5805f54-ccba-440a-a73c-1f47a56fca12_1.17cbe45fef678754efdc98e365207640.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391136, 'Fresh Marketside Organic Carrots, 16 oz', 1.16, '071464016913', 'Add some fresh and tender carrots to your meal with Marketside Organic Whole Carrots. These whole carrots are certified organic, and are an excellent source of vitamin A. They are perfect for adding as an ingredient in stews, casseroles and soups. Add your favorite sauce or seasoning for a quick and healthy side dish. You can serve them with grilled chicken breast and green beans, roast them or use them in your own recipes. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see.', 'They are perfect for adding as an ingredient in stews, casseroles and soups. With their crunchy texture and fresh taste, it is a must-have vegetable in your kitchen. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside', 'https://i5.walmartimages.com/asr/e2dca10f-1419-421b-ac99-ba6ba888f8c6_2.1ae51990e30e30b7b768f1157514f85f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2dca10f-1419-421b-ac99-ba6ba888f8c6_2.1ae51990e30e30b7b768f1157514f85f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2dca10f-1419-421b-ac99-ba6ba888f8c6_2.1ae51990e30e30b7b768f1157514f85f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391140, 'Fresh Jonagold Apple Large, Each', 1.47, '741839041474', 'This Fresh apple tends to be large in size and is tangy sweet with honey-like flavor notes.Jonagold is high quality American apple, developed in the 1940s. As its name suggests, this is a cross between a Jonathan and a Golden Delicious. Although it\'s known to be a great fresh-eating apple, because of its sweet/tart flavor, this apple variety is great for baking. Whip up some delicious apple crisp or pies with this variety and treat yourself to some homemade apple sauce.', 'Fresh Jonagold Apple, Each: Crisp with dense flesh and a fruity-sweet tartness Great morning, noon, or night Chop them up and add to a salad, slice and plate them up on the side of your breakfast, or serve with a dollop of peanut butter Add them to a cheese board for a sweet and salty combination', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/de530635-1316-44a7-9923-ed57e8eb30ac.fe2ef957bce8c012d6e00a0ff1145c1f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/de530635-1316-44a7-9923-ed57e8eb30ac.fe2ef957bce8c012d6e00a0ff1145c1f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/de530635-1316-44a7-9923-ed57e8eb30ac.fe2ef957bce8c012d6e00a0ff1145c1f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391143, 'Serrano Pepper, Each', 0.62, '000000047098', 'Enhance your meals with the delicious flavor of Serrano Peppers. Naturally low in calories, fat, and cholesterol, this vegetable is a great source of vitamins C, B6, and A, as well as iron and magnesium. Serrano peppers have a bright and biting flavor that enhances a variety of recipes. Make a zesty Pico de gallon or salsa using fresh serrano peppers, add to a sweet peach jam to make a glaze for hot wings, or add to eggs for out of this world huevos rancheros. You can even add some diced serrano peppers and cheese to cornbread batter for a delectable Chile cheese cornbread that will have everyone asking for seconds. Lunches and dinners are more scrumptious when fresh Serrano Peppers are part of the meal.', 'Approximately 40 Serrano Peppers per lb Naturally low in calories, and fat Low in cholesterol is a great source of vitamins C, B6', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cf45f59d-f968-4fa4-ad3a-880a310705d1.3649588ea7699bd5520d1e7bc4f6a44b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cf45f59d-f968-4fa4-ad3a-880a310705d1.3649588ea7699bd5520d1e7bc4f6a44b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cf45f59d-f968-4fa4-ad3a-880a310705d1.3649588ea7699bd5520d1e7bc4f6a44b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391144, 'Fresh Produce, Whole Red Radish, 1 Bunch', 1.74, '073150103426', 'Serve up something amazing when you cook with Fresh Red Radish. This versatile root vegetable is a great addition to a healthy diet and can be prepared in a variety of ways. Their slightly peppery flavor adds a natural, subtle spice to salads and slaws. Their crisp texture makes them a natural, healthy choice for dips. Try them as a low-carb substitute for potatoes when roasted or as a healthy side dish when grilled. However, you choose to use them, these fresh radishes will add big flavor and unforgettable taste to any meal. The culinary possibilities are endless with Fresh Red Radish.', 'Fresh Produce, Whole Red Radish, 1 Bunch Wholesome, versatile, and delicious Enjoy raw, pickled, roasted, in tacos, in soups, and so much more Cool and crunchy Lends a peppery taste to salads Also known as rábanos, yī kǔn luóbo and mūlī kā gucchā around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ea0e9022-05d6-4e6a-ad18-633471a03a0b.0c926e45ad97705e24c87ed57f663122.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea0e9022-05d6-4e6a-ad18-633471a03a0b.0c926e45ad97705e24c87ed57f663122.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea0e9022-05d6-4e6a-ad18-633471a03a0b.0c926e45ad97705e24c87ed57f663122.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391147, 'Fresh Plum, Each', 0.76, '812985015012', 'Enrich your day with some juicy plums. Fruit is a healthy snack and an important part of a healthy diet for most people. It provides fiber and essential vitamins and minerals. Black plums are no exception. They contain vitamin A and other vitamins and minerals. Each plum fruit bite is sweet and delicious. Slice one and enjoy it alone, or add it to salads and other recipes. Plums are a versatile fruit with a unique flavor and a meaty yet juicy texture. There are approximately 3-4 plums per lb. Plums, each:', 'Approximately 3-4 plums per lb Sweet and juicy Delicious as a snack Excellent ingredient for salads Black plums contain vitamin A and other essential vitamins and minerals Approximately 3-4 plums per Bag lb Sweet and juicy Delicious as a snack Excellent ingredient for salads Black plums contain vitamin A and other essential vitamins and minerals', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e8de249f-8c2e-4cfc-a225-4ff6486978ed.1d00c2aec5c70bf24944314ac910fb6f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e8de249f-8c2e-4cfc-a225-4ff6486978ed.1d00c2aec5c70bf24944314ac910fb6f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e8de249f-8c2e-4cfc-a225-4ff6486978ed.1d00c2aec5c70bf24944314ac910fb6f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391152, 'Fresh Red Pear, Each', 0.99, '851191002041', 'The Fresh Red pear carries a true pyriform \"pear shape;\" a rounded bell on the bottom half of the fruit, then a definitive shoulder with a smaller neck or stem end. Color goes from a dark red often with light vertical striping to become a beautiful bright red. As they ripen, Red Pears offer different flavors and textures, starting crunchy and tart when underripe, and finishing super sweet and juicy when fully ripened.', 'Fresh Red Pear, Each Sweet, crisp, and juicy Excellent snacking pear Make a creamy smoothie or a nutritious juice blend Add to your salad for extra crunch and flavor Adds flavor to a variety of recipes Make pear butter or poached pears Make sweet desserts like pear cobbler, pear crisp or pear tarts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bd8f2d47-7640-4d6b-81ea-b85905a185d9.0743c431f7e9e19ffca02c585558334a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd8f2d47-7640-4d6b-81ea-b85905a185d9.0743c431f7e9e19ffca02c585558334a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd8f2d47-7640-4d6b-81ea-b85905a185d9.0743c431f7e9e19ffca02c585558334a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391159, 'Butternut Squash, each', 5.64, '000000047593', 'Add some fresh flavor to your meal with Butternut Squash. This versatile vegetable can be used in a variety of dishes to create delicious and decadent meals. Roast the whole squash for a simple and flavorful side dish, chop it into cubes and put it in the slow cooker with chicken breast, kidney beans, and spices, or make butternut noodles for a gluten-free pasta alternative. For a sweet treat turn the squash into a rich and spicy pie, perfect for the holiday season. With so many uses, this vegetable will become a pantry staple. Create tasty and flavorful meals with Butternut Squash.', 'Butternut Squash, 1 Each: Versatile ingredient Roast the whole squash for the perfect side dish or chop into cubes, put into a slow cooker, and mix with chicken breast, beans, and spices for a flavorful dish Use it to create a sweet and decadent pie Make butternut squash noodles for a gluten free pasta alternative Will become a pantry staple', 'Greenpoint', 'https://i5.walmartimages.com/asr/76a18a23-dc4f-45a8-90ae-452e50fd5923.c254801fb641a0df6bbd5e83640d8d9c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/76a18a23-dc4f-45a8-90ae-452e50fd5923.c254801fb641a0df6bbd5e83640d8d9c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/76a18a23-dc4f-45a8-90ae-452e50fd5923.c254801fb641a0df6bbd5e83640d8d9c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391186, 'Gourmet Garden Gluten Free Garlic Stir-in Paste, 4.0 oz Tube', 3.94, '875208000646', 'Gourmet Garden Gluten Free Garlic Stir-in Paste, 4 oz Tube. Give everyday meals the bold flavor they deserve with Gourmet Garden Garlic Stir-in Paste. No prep needed- it\'s so easy to add a squeeze of our convenient garlic paste to any savory recipe. In each squeezable tube is garlic that\'s been peeled and finely chopped to deliver its signature punch. Our garlic paste is at its best flavor, color and aroma when it reaches your family\'s table. Use it at the beginning of cooking to create a sweet, garlicky base. Add it at the end- traditionally garlic bread, marinades and sauces- for a deeper, more pungent flavor. Use 1 teaspoon of paste in place of 1 medium garlic clove. Store refrigerated for weeks after opening. This Gourmet Garden Garlic Stir-in Paste is in a Plastic tube that is 4 ounces. Store this Refrigerated item at an ambient temperature.', 'Gourmet Garden Gluten Free Garlic Stir-in Paste, 4 oz Tube Chopped garlic packed into a convenient squeezable tube No prep necessary Stays fresh in refrigerator for weeks after opening. Gluten Free Adds bold flavor to garlic bread, marinades and sauces Use 1 tsp. of paste in place of 1 medium garlic clove This product is in a Plastic Tube', 'Gourmet Garden', 'https://i5.walmartimages.com/asr/63564f7b-54ac-462e-8788-20f63e460170.431352b482af53e84cd9398959a6ac8d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/63564f7b-54ac-462e-8788-20f63e460170.431352b482af53e84cd9398959a6ac8d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/63564f7b-54ac-462e-8788-20f63e460170.431352b482af53e84cd9398959a6ac8d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391191, 'Fresh Papaya, Each, 1 Count', 3.97, '850940002103', 'Get flavor and nutrition with our Fresh Papaya. Papaya is a tropical fruit that originated in the tropics of the Americas and is known to be a great source of vitamins C, A, fiber, and antioxidants. When ripe, this fruit has a butter-like texture with a fairly sweet flavor similar to cantaloupe and can be eaten raw, without skin or seeds. Papaya can be prepared in a variety of ways; you can mix them with grapefruit and avocado for a bright summer salad, add them to a zesty salsa for some sweetness, freeze them and turn them into refreshing popsicle spears, or bake them in the oven with a melted brown sugar mixture. The sky\'s the limit! Get ready for a taste-bud party with Fresh Papaya.', 'Creamy, butter-like flavor when ripe Rich in vitamins A, C, fiber, and antioxidants Fairly sweet flavor like cantaloupe and mango Great addition to smoothies, salads, salsa, and more Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7bca4cb8-f2fa-481b-8d18-969c8ddb4f1a.dc09b3bdd116b64b15f7abd16ad085b4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7bca4cb8-f2fa-481b-8d18-969c8ddb4f1a.dc09b3bdd116b64b15f7abd16ad085b4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7bca4cb8-f2fa-481b-8d18-969c8ddb4f1a.dc09b3bdd116b64b15f7abd16ad085b4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391200, 'Fresh Pineapple, Each', 2.18, '333834000138', 'FRESH PINEAPPLE', 'Fresh produce Naturally sweet and juicy flavor Can be enjoyed raw or cooked Great for snacks, smoothies, desserts, and recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1d2b3723-b31f-481d-ae30-c82fcbb59e20.d2e4de8d8b987f98a6e9da93a7e8c752.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d2b3723-b31f-481d-ae30-c82fcbb59e20.d2e4de8d8b987f98a6e9da93a7e8c752.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d2b3723-b31f-481d-ae30-c82fcbb59e20.d2e4de8d8b987f98a6e9da93a7e8c752.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391206, 'Fresh Red Cabbage, Each', 3.3, '000000045544', 'This Fresh Red Cabbage is a must-have addition to any cook\'s kitchen. This red cabbage delivers unmistakable flavor with each bite and is an ideal ingredient in a variety of recipes. Use it to make a crowd-pleasing slaw to serve at your next backyard barbecue or add it to a garden salad for a healthy lunch option. You can also saute it and serve as a delicious side for your next family dinner. However you choose to use it, this cabbage will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with Fresh Red Cabbage.', 'Wholesome, versatile, and delicious Use to make a crowd-pleasing slaw for your next barbecue Add to a garden salad Saute or steam and serve as a side for any meal Wonderful addition to stir fry', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e57c64f4-205b-4a36-be5f-709592b00bdf.7ebd2a465c67aa7213fdee368d936008.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e57c64f4-205b-4a36-be5f-709592b00bdf.7ebd2a465c67aa7213fdee368d936008.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e57c64f4-205b-4a36-be5f-709592b00bdf.7ebd2a465c67aa7213fdee368d936008.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391236, 'Fresh Roma Tomato, 2 lb Bag', 1.82, '606105032917', 'Create something wholesome and delicious with Roma Tomatoes. These ripe tomatoes are the ideal fresh produce ingredient for a variety of tasty dishes. Use them to make a zesty Roma tomato sauce for a pasta dish, try using them to make a Roma tomato bruschetta, or simply enjoy them on their own as a nutritious snack. They would make a comforting and appetizing tomato soup and a flavorful salsa. You could also serve them at your next party alongside your favorite vegetable dipping sauce or add them to your famous guacamole recipe. How ever you choose to use them, these tomatoes will add flavor and taste to any meal. Elevate your recipes with this two-pound bag of Roma Tomatoes.', 'Fresh Roma Tomato, 2-pound Bag Wholesome, versatile, and delicious Rich, juicy flavor in each bite Ideal ingredient for a variety of dishes Use to make pasta sauce, tomato soup, or fresh salsa Make a tasty pesto or bruschetta to serve at your next dinner party Delicious and nutritious fresh produce', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0a6850cf-3900-4801-b917-7b54dd621720.9caff3d450f89d792208a67e47ecc822.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a6850cf-3900-4801-b917-7b54dd621720.9caff3d450f89d792208a67e47ecc822.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a6850cf-3900-4801-b917-7b54dd621720.9caff3d450f89d792208a67e47ecc822.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391242, 'Marketside Fresh Asparagus Spears, 10 oz', 3.77, '681131003896', 'Add fresh and tender asparagus to your meal with Marketside Asparagus Spears. These spears are an excellent source of vitamin A and fiber. Conveniently packaged in a 10-ounce steamer bag, they are ready in just a quick 3 minutes or roast them for some lovely flavor. Serve as is, or add your favorite spices, parmesan cheese, or lemon zest for additional flavor. Pair them with a variety of meats like fish or chicken for a fresh addition to make a truly delicious and well-rounded meal. Marketside Asparagus Spears are a quick and healthy side dish and a great addition to any meal. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Excellent source of vitamin A and fiber Conveniently packaged in a 10-ounce steamer bag Great addition to any meal Serve as is or add your favorite spices, parmesan cheese or lemon zest Pair with a variety of meats Washed and ready to cook', 'Marketside', 'https://i5.walmartimages.com/asr/5318501a-8f49-4903-9798-4b9d5fc85ab8.30bf6d816092cae3f0d0f7b284763c14.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5318501a-8f49-4903-9798-4b9d5fc85ab8.30bf6d816092cae3f0d0f7b284763c14.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5318501a-8f49-4903-9798-4b9d5fc85ab8.30bf6d816092cae3f0d0f7b284763c14.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391243, 'Fresh Organic Rainbow Kale, 1 lb Bag', 4.76, '028764900060', 'Marketside Organic Green Kale will add something delicious to your next meal. This superfood is carefully picked and packed to bring you wholesome quality leaves of crisp kale. This kale is great as an addition to a main entree or as a side dish. Sautee it in minced garlic, olive oil and chicken stock to create a hearty meal. Add grilled chicken, Roma tomatoes and crisp cucumbers and toss it in a light dressing of your choice for a delicious healthy salad. It is also a great addition to smoothies. Enjoy the fresh from the farm taste of Marketside Organic Green Kale. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Green Kale, 16 oz Bag, Fresh Wash before eating USDA organic Picked fresh for you Serve with your favorite protein and dressing Keep refrigerated until ready to enjoy', 'Marketside', 'https://i5.walmartimages.com/asr/18f00616-8b6d-47a4-8d92-cebd4e47948e.d74377329f0ac04301e91215c3591b49.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18f00616-8b6d-47a4-8d92-cebd4e47948e.d74377329f0ac04301e91215c3591b49.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18f00616-8b6d-47a4-8d92-cebd4e47948e.d74377329f0ac04301e91215c3591b49.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391253, 'Rooster Potatoes, 2.2 lbs', 3.47, '852883004015', '', 'Potatoes Rooster, 2.2 Lb.', 'Unbranded', 'https://i5.walmartimages.com/asr/3134e75a-5507-43b3-9706-9bb88f7391f6_1.0bacbf06c7e92255b6f4f303b3916222.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3134e75a-5507-43b3-9706-9bb88f7391f6_1.0bacbf06c7e92255b6f4f303b3916222.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3134e75a-5507-43b3-9706-9bb88f7391f6_1.0bacbf06c7e92255b6f4f303b3916222.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391255, 'Fresh and Vibrant Whole Napa Cabbage, Each', 4.37, '000000045520', 'Cook up a healthy and flavorful meal the whole family will enjoy with Napa Cabbage. It features a vibrant green color and a fresh, crisp texture that makes it a tasty addition to a variety of dishes. Enjoy it raw in a creamy coleslaw recipe, or pair it with several other colorful vegetables and meats to make everything from soups to stir-fry and more. It even makes a flavorful choice for vegetarian meals. This Chinese cabbage vegetable may be sliced, chopped or left whole as a garnish. This Napa Cabbage can be found fresh in your produce section for all of your cooking needs.', 'Fresh and crisp Vibrant, green, leafy vegetable Napa vegetable may be eaten raw or cooked A tasty addition to a variety of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ea08de03-6e2c-4c26-9f75-e0a2a26851bd.c7696a6a5ed348ee387669c4e7891820.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea08de03-6e2c-4c26-9f75-e0a2a26851bd.c7696a6a5ed348ee387669c4e7891820.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea08de03-6e2c-4c26-9f75-e0a2a26851bd.c7696a6a5ed348ee387669c4e7891820.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391289, 'Fresh Produce, Whole Bok Choy, 1 Each', 3.47, '000000045452', 'Discover the versatility of Fresh Bok Choy, a crisp and flavorful vegetable also known as spoon cabbage. Perfect for a wide range of dishes, bok choy can be: Steamed or sautéed and paired with your favorite protein Used in stir-fries, soups, and garden salads Added to gourmet sandwiches for a crunchy twist Low in calories and packed with essential vitamins and minerals, bok choy is a nutritious choice for any meal. Whether you\'re cooking for the family or experimenting with new recipes, this leafy green brings bold flavor and unforgettable taste to your kitchen. Endless culinary possibilities await with Fresh Bok Choy! Fresh Bok Choy can be found at your local Walmart and is sold whole, fresh out of a container.', 'Fresh Whole Bok Choy or Spoon Cabbage Bok Choy is a versatile vegetable that can be prepared in a variety of ways Great in your favorite recipe, soups, salads or even sandwiches Bok Choy is a fresh and healthy vegetable full of essential vitamins and minerals Also known as Col China, xiǎo báicài, shànghǎi qīng, chingensai and cheonggyeongchae around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/39c383e0-15c8-48f0-a376-ef8f0dd5b241.229ed6ebd251ad73bd70d0f3a758326a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39c383e0-15c8-48f0-a376-ef8f0dd5b241.229ed6ebd251ad73bd70d0f3a758326a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39c383e0-15c8-48f0-a376-ef8f0dd5b241.229ed6ebd251ad73bd70d0f3a758326a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391299, 'Marketside Fresh Cut Watermelon Chunks, 10 oz Tray', 2.77, '077745245720', 'Experience a burst of summertime goodness with this delicious Marketside Watermelon. This pre-cut ripe watermelon is juicy, sweet, and refreshing to the taste. In addition, watermelons are a great natural source of vitamins A and C. Carry them with you and eat them straight out of the tray any time you want, at home, or on-the-go. Pair them with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use them as a naturally sweet ingredient in a fruit salad. Add some fresh fruit to your daily menu with this Marketside Watermelon.Marketside provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Marketside item.', 'Marketside Watermelon Chunks 10 oz Pre-Cut Convenience: Fresh, sweet, juicy watermelon chunks are ready to eat, saving you time on preparation. Portable Packaging: Comes in a 10 oz re-closable container, making it easy for grab-and-go convenience. Nutrient-Rich: A good source of vitamins A and C, contributing to your daily nutritional needs. No Artificial Additives: Free from preservatives, artificial colors, and artificial flavors, ensuring a natural taste. Versatile Use: Perfect as a standalone snack, addition to fruit salads, or as a refreshing side dish. Perishable Item: Keep refrigerated to maintain freshness and quality.', 'Marketside', 'https://i5.walmartimages.com/asr/d40b8924-955e-494c-ae47-9505fddbfc49.ac8d150d52b9839951550f7435f099d7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d40b8924-955e-494c-ae47-9505fddbfc49.ac8d150d52b9839951550f7435f099d7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d40b8924-955e-494c-ae47-9505fddbfc49.ac8d150d52b9839951550f7435f099d7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391302, 'Nature\'s Greens Organic Rainbow Chard, 8 oz', 7.67, '028764900077', 'Create fresh and delicious meals with Nature\'s Greens Organic Rainbow Chard. This USDA certified organic chard features a mix of red, green or rainbow varieties and is bursting with fresh flavor. Mix up this chard with almonds, pecans, shredded cheese and your favorite dressing for a healthy and tasty salad or wilt some in a skillet with your favorite seasonings ¬– the possibilities are endless! Not only is this rainbow chard a versatile ingredient, but it\'s also packed with vitamins A, C, and K making it perfect for a healthy lifestyle. Bring hoe Nature\'s Green Organic Rainbow Chard today.', 'Nature\'s Greens Organic Rainbow Chard, 8 oz: Rainbow Swiss chard comes with red and green varieties Has a delicious taste Mix with your own ingredients for making a salad Goes nicely with almonds, pecans, shredded cheese and more Add your favorite dressing on the top Makes a perfect side for a variety of dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ce51660f-2b20-4fd2-891f-64e2c64678d3.cec05b2ce1afc19eaec7f0101e2c20f1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce51660f-2b20-4fd2-891f-64e2c64678d3.cec05b2ce1afc19eaec7f0101e2c20f1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce51660f-2b20-4fd2-891f-64e2c64678d3.cec05b2ce1afc19eaec7f0101e2c20f1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391306, 'Fresh Chayote Squash, Each', 1.17, '000000047616', 'Create tasty meals and side dishes with Chayote Squash. It\'s ideal to use for creating authentic Cajun cuisine and can be grilled, stir-fried, boiled, steamed or baked. This chayote squash can also be sliced or shredded and used in salads and slaws, or you can boil it and mash like a potato. It has a mild and slightly sweet taste with light notes of cucumber. Naturally low in calories and fat, chayote squash is an excellent source of vitamin C, vitamin B6, folate, fiber, and potassium. Expand your culinary repertoire when you use Chayote Squash to create delicious dishes.', 'Ideal for making authentic Cajun dishes Can be grilled, stir-fried, boiled, steamed or baked Slice or shred raw chayote to use in salads and slaws Mild and slightly sweet taste Provides an excellent source of vitamin C, vitamin B6, folate, dietary fiber and potassium Use in soups, stews, curries and casseroles Boil and mash like a potato Also known as Mirliton, Christophene, Choko, Güisquil & Chuchu across the world.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/daeb7eb2-0625-4419-9fb8-e031974d225f.9f7a99116d625d5dd8bae596507ab35b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/daeb7eb2-0625-4419-9fb8-e031974d225f.9f7a99116d625d5dd8bae596507ab35b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/daeb7eb2-0625-4419-9fb8-e031974d225f.9f7a99116d625d5dd8bae596507ab35b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391315, 'Fresh Pomegranate, Each', 1.98, '854335004925', 'Add a some zing to your meals with with Fresh Pomegranate. It has a sweet and tangy flavor that\'s made it a Mediterranean favorite for centuries. Pomegranate fruit is soft and tender and you can squeeze it for juice. This product is filled with edible seeds. At only 72 calories per serving this product is an easy indulgence to add to your diet plan.', 'Fresh Pomegranate, sold by the each Pleasing sweet-tart taste Great addition to salads or enjoy on its own Contains 3g of fiber and a good source of vitamin C per 1/2 cup Unopened pomegranates can last up to two months in the refrigerator or up to one month at room temperature', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c8bb0100-dfb6-47b6-ad72-1b3c4d27c853.ffd069e6a7379f244c201de3c1a2a3d5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8bb0100-dfb6-47b6-ad72-1b3c4d27c853.ffd069e6a7379f244c201de3c1a2a3d5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8bb0100-dfb6-47b6-ad72-1b3c4d27c853.ffd069e6a7379f244c201de3c1a2a3d5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391317, 'Fresh Collard Greens Bunch, Each', 1.97, '000000046220', 'Fresh Collard Greens are the perfect addition to your dishes. They are packed full of minerals and nutrients making them an excellent healthy option to add to your meals. These collard greens are a versatile ingredient that can be transformed in many ways. Sautee them with a garlic and onions for a delicious side dish or add it to a stew for a nutrient dense addition. Use them as a substitute for spinach in your favorite recipes. They come in a bunch, so you can choose exactly how you want to cut and prepare them. Elevate mealtime with Fresh Collard Greens Bunch.', 'Fresh Collard Greens Bunch, Each Packed full of vitamins and minerals Versatile ingredient that can be used in a variety of dishes Sautee with garlic and onions or add it to a stew Great way to incorporate greens into your diet Nutrient dense vegetable Use it as a substitute for spinach in your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9fd904ba-cd80-4c29-93d0-94116a778937.48e8b2ad7de0848ca2a89b30edb9ff51.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9fd904ba-cd80-4c29-93d0-94116a778937.48e8b2ad7de0848ca2a89b30edb9ff51.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9fd904ba-cd80-4c29-93d0-94116a778937.48e8b2ad7de0848ca2a89b30edb9ff51.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391352, 'Pinata Apple Large, Each', 1.66, '203435000007', 'The Pinata Apple Large is the perfect choice for those who crave a unique and flavorful apple experience. Each fresh apple is grown to perfection, resulting in a large, juicy, and crisp fruit that will delight your taste buds. With its vibrant red and yellow skin, the Pinata Apple is as visually appealing as it is delicious. Whether you enjoy it on its own, sliced up in a salad, or baked into a mouthwatering dessert, the Pinata Apple Large will be a delightful addition to any meal or snack. Order yours today and indulge in the sweet and tangy flavors of this extraordinary apple variety.', 'Pinata Apple Large, 1 lb', 'Unbranded', 'https://i5.walmartimages.com/asr/e7ec1bc6-f6d3-4017-95fe-b535bfb3ec4c.0b7c12e78e0765ee92a2471a7ad89c0e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e7ec1bc6-f6d3-4017-95fe-b535bfb3ec4c.0b7c12e78e0765ee92a2471a7ad89c0e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e7ec1bc6-f6d3-4017-95fe-b535bfb3ec4c.0b7c12e78e0765ee92a2471a7ad89c0e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391430, 'Fresh Sweet Corn on the Cob (1 each)', 0.68, '204077000004', 'While sweet corn typically invokes images of summer barbeques, it has many health benifits. Sweet corn is a great source of Vitamin A and C, with one ear of corn containing over 10% of the Daily Value (DV) of Vitamin C and over 6% DV of Vitamin A. It\'s not truly summer until you\'ve had some Fresh Corn on the Cob- just add butter and salt! Also known as Maíz, Dura and Makka around the world.', 'Fresh Corn on the Cob: Freshly picked Sweet and juicy Perfect for grilling or boiling Great addition to summer dinners, BBQs, picnics, and camping trips Just add butter, salt, and pepper Naturally low in calories Great source of potassium and antioxidants Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a79ee74c-836e-4c81-81d7-3ffd8deca0c4.c333e398e5c4da78062aa64b6db07eba.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a79ee74c-836e-4c81-81d7-3ffd8deca0c4.c333e398e5c4da78062aa64b6db07eba.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a79ee74c-836e-4c81-81d7-3ffd8deca0c4.c333e398e5c4da78062aa64b6db07eba.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391479, 'Fresh Keylimes, 1 Each', 0.1, '000000043052', 'Add zest and flavor to your meals and beverages with these Key Limes. Freshly squeezed limes provide a healthy dose of vitamin C to your diet and are a key ingredient in many recipes, from homemade salsa to chicken dishes. The citrusy tropical flavor of these limes are sure to add a zing to all your cooked meals. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. These limes are sold in a one-pound bag, so you\'ll have plenty for all your culinary creations. Enjoy the refreshing, tart flavor of Key Limes.', 'Fresh and juicy key limes Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies, and tarts Refreshing, slightly sweet, tart flavor Available by the each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/726ce64a-28fd-49b1-96d0-e3607b64adb7.7b147c809b5d0354853d8da08bd42afe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/726ce64a-28fd-49b1-96d0-e3607b64adb7.7b147c809b5d0354853d8da08bd42afe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/726ce64a-28fd-49b1-96d0-e3607b64adb7.7b147c809b5d0354853d8da08bd42afe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391515, 'Fresh Whole Carrots, 1 lb Bag', 1.32, '852442002001', 'This 1 lb. Bag of Whole Carrots can make a versatile addition to various meals. They have a crisp crunch and a bold taste. These California carrots are easy to cut into pieces for adding to a stew, pot roast or meat pie. Slice them thin and add them to a salad with some lettuce, tomatoes, olives and other ingredients. These fresh carrots are also ideal for dipping in dressing.', 'Approximately 6 carrots per lb. California carrots have a crunchy texture and a bold taste Fun to eat in many different ways Cut into slices for stews or a meat pie Cut thin to add to a salad along with other vegetables Ideal for use with dips and dressings 16 oz (1 lb./454g) Also known as Zanahoria entera, Whole carrot, Jazar and Gajar around the world', 'ATV Farms', 'https://i5.walmartimages.com/asr/a6c9eb5f-51b2-465e-aaf4-502d4a905604.1bdb1d7098cc222b894d86f999f81579.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6c9eb5f-51b2-465e-aaf4-502d4a905604.1bdb1d7098cc222b894d86f999f81579.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6c9eb5f-51b2-465e-aaf4-502d4a905604.1bdb1d7098cc222b894d86f999f81579.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391517, 'Canary Melon, each', 2.78, 'deleted_736558000093', '', 'This melon has a distinctively sweet flavor that is slightly tangier than a honeydew melon.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5c18a967-ef85-4a25-be3a-1f73a829bdb5_1.1ce5fb1786003eb20b98eaa258e32daa.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5c18a967-ef85-4a25-be3a-1f73a829bdb5_1.1ce5fb1786003eb20b98eaa258e32daa.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5c18a967-ef85-4a25-be3a-1f73a829bdb5_1.1ce5fb1786003eb20b98eaa258e32daa.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391520, 'The Little Potato Company Garlic Parsley Potatoes, 1 lb Tray', 4.38, '629307015342', 'Taste the difference with The Little Potato Company Garlic Parsley Potatoes. They pair well as a side with a variety of dishes. Fresh creamer potatoes with a seasoning pack, it only takes five minutes in the microwave to have them hot and ready to eat! At just 60 calories per serving, these potatoes are a good source of potassium and are gluten free with no artificial colors or flavors. Three cups of vegetables per tray ensures that you have plenty for your family dinner. Add a delicious touch to dinner with The Little Potato Company Garlic Parsley Potatoes.', 'Fresh creamer potatoes with seasoning pack Microwave ready Cooks in 5 minutes Garlic parsley seasoned 3 cups of vegetables per tray Gluten free Good source of potassium 60 calories per serving', 'The Little Potato Company', 'https://i5.walmartimages.com/asr/d536213f-39fe-40b4-9d80-eadbb4fb0ffe.97cdb6a5ebdfe99304c3756fa2b06c6c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d536213f-39fe-40b4-9d80-eadbb4fb0ffe.97cdb6a5ebdfe99304c3756fa2b06c6c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d536213f-39fe-40b4-9d80-eadbb4fb0ffe.97cdb6a5ebdfe99304c3756fa2b06c6c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391543, 'The Little Potato Company Microwave-Ready Savory Herb Potatoes, 1 lb Tray', 4.38, '629307015045', 'In 1996, when my father and I introduced these flavorful The Little Potato Company Microwave-Ready Savory Herb Potatoes, we grew a one-acre plot that we harvested, washed and bagged by hand. Since then, we focus solely on selecting and growing fresh Creamer potatoes that are outstanding in taste, nutrition and texture. It\'s all we do: Our proprietary varietals are harvested when they are mature and at their best. My family and I still enjoy the original, diverse taste of these exceptional Creamer potatoes, and I am excited to share them with you. - Angela, Co-Founder and Chief Potato Champion.', 'The Little Potato Company Microwave-Ready Savory Herb Potatoes, 1 lb (16 ounces) A tantalizing blend of savory herbs and spices Good source of potassium Microwave ready Gluten free Contains no artificial flavors, colors or preservatives Vegan 80 calories per serving 8% DV of vitamin C Naturally fat-free Cholesterol free Fresh produce', 'The Little Potato Company', 'https://i5.walmartimages.com/asr/63499740-ad84-4bb3-9850-1b7624ea84ea.a7fe5c4d4624c9a6adc42d728c3fa148.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/63499740-ad84-4bb3-9850-1b7624ea84ea.a7fe5c4d4624c9a6adc42d728c3fa148.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/63499740-ad84-4bb3-9850-1b7624ea84ea.a7fe5c4d4624c9a6adc42d728c3fa148.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391559, 'Black Seedless Grapes, per lb', 1.54, 'deleted_204056000001', 'short description is not available', 'Black Seedless Grapes, per lb', 'Generic', 'https://i5.walmartimages.com/asr/2a7a36a6-abd3-44ff-a479-1b6ab9308eb3_2.fb7eeec87b8007a35df2953f4ea7496c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a7a36a6-abd3-44ff-a479-1b6ab9308eb3_2.fb7eeec87b8007a35df2953f4ea7496c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a7a36a6-abd3-44ff-a479-1b6ab9308eb3_2.fb7eeec87b8007a35df2953f4ea7496c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391565, 'Fresh Acorn Squash, Each', 7.32, '204750000000', 'Add some fresh flavor to your meal with Acorn Squash. This versatile vegetable can be used in a variety of dishes to create delicious and decadent meals. Roast the whole squash for a simple and flavorful side dish, chop it into cubes and put it in the slow cooker with chicken breast, kidney beans, and spices, or make butternut noodles for a gluten-free pasta alternative. For a sweet treat turn the squash into a rich and spicy pie, perfect for the holiday season. With so many uses, this vegetable will become a pantry staple. Create tasty and flavorful meals with Acorn Squash.', 'Versatile ingredient Roast the whole squash for the perfect side dish or chop into cubes, put into a slow cooker, and mix with chicken breast, beans, and spices for a flavorful dish Use it to create a sweet and decadent pie Make acorn squash noodles for a gluten free pasta alternative Will become a pantry staple', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7f9f4de4-8301-498f-923c-0aadcbd145ac.19a506d251535265665235f80586b147.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7f9f4de4-8301-498f-923c-0aadcbd145ac.19a506d251535265665235f80586b147.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7f9f4de4-8301-498f-923c-0aadcbd145ac.19a506d251535265665235f80586b147.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391581, 'Fresh Red Bell Pepper, 1 Each', 1.48, '405551853776', 'Enhance your meals with the delicious flavor of Red Bell Peppers. This vegetable contains essential vitamins such as A and C, and minerals including calcium and magnesium. Red bell pepper, also known as red capsicum, has a crisp flavor that enhances a variety of recipes. Dice bell peppers and put them in a hearty chili, slice them, saute them with onions or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out red bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper that will have the family asking for seconds. They also taste delicious raw alongside other vegetables. Add your favorite dip for a healthy, crunchy crudite. Cooked or uncooked, Red Bell Peppers are an excellent item to have on hand.', 'Naturally low in calories, Exceptionally rich in vitamin C and other antioxidants Delicious cooked or uncooked Create delicious recipes with fresh red peppers Also known as Pimiento rojo, Red Chili, Filfil ahmar and Lal mirch around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7be94a8e-9a5d-4f87-842f-5fe4084138ba.c95d36e140f5e0d492ca632b42e4543c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7be94a8e-9a5d-4f87-842f-5fe4084138ba.c95d36e140f5e0d492ca632b42e4543c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7be94a8e-9a5d-4f87-842f-5fe4084138ba.c95d36e140f5e0d492ca632b42e4543c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391602, 'Fresh Yellow Bell Pepper, Each', 1.48, '890773002116', 'Enhance your meals with the delicious flavor of Yellow Bell Peppers. This vegetable contains essential vitamins such as A and C, and minerals including calcium and magnesium. Yellow bell pepper, also known as yellow capsicum, has a crisp flavor that enhances a variety of recipes. Dice bell peppers and put them in a hearty chili, slice them and add to a deli sandwich, saute them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out yellow bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper that will have the family asking for seconds. Lunches and dinners are more scrumptious when fresh yellow peppers are part of the meal. They also taste delicious raw alongside other vegetables. Add your favorite dip for a healthy, crunchy crudite. Cooked or uncooked, Yellow Bell Peppers are an excellent item to have on hand.', 'Yellow Bell Pepper, 1 each: Naturally low in calories Exceptionally rich in vitamin C and other antioxidants Delicious cooked or uncooked Create delicious recipes with fresh red peppers', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4afb6fc7-4b33-4dc9-b938-035666ab2fe6.dca886c2d62ffc4a948e28a2d0039ea2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4afb6fc7-4b33-4dc9-b938-035666ab2fe6.dca886c2d62ffc4a948e28a2d0039ea2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4afb6fc7-4b33-4dc9-b938-035666ab2fe6.dca886c2d62ffc4a948e28a2d0039ea2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391605, 'Fresh Strawberries, 1 lb', 3.12, '071430007525', 'The sweet, juicy flavor of Fresh Strawberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like, vitamin C, dietary fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Strawberries today and savor the delectable flavor.', 'Prior to serving gently wash the fruit and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b54a64ad-e961-46cf-b60c-bc763716fb0b.a481cdfd237c5ab5438d5c9e90bead07.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b54a64ad-e961-46cf-b60c-bc763716fb0b.a481cdfd237c5ab5438d5c9e90bead07.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b54a64ad-e961-46cf-b60c-bc763716fb0b.a481cdfd237c5ab5438d5c9e90bead07.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391639, 'Fresh Fuji Apples, 3 lb Bag', 3.54, '033383017242', 'There is an inherent spicy-savory flavor to these Freshness Guaranteed Fuji Apples that makes them an all-around favorite for both fresh and cooked uses. It is perhaps natural that this apple, with its Japanese heritage, would pair well with Asian flavors such as cilantro, chili pepper, rice vinegar and sesame. This is a wine-friendly apple, making it a good choice for recipes served as an appetizer or main course accompanied by wine. It pairs particularly well with Riesling, Chianti, Merlot and Pinot Noir wines. Pick up a bag of Freshness Guaranteed Fuji Apples today. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Fuji Apples, 3 lb Bag Super sweet Fresh and sophisticated flavor Hints of spice and savory earth character Juicy and aromatic Healthy snack Convenient bag packaging Meets or exceeds U.S. Extra Fancy Super sweet Fresh and sophisticated flavor Hints of spice and savory earth character Juicy and aromatic Healthy snack Convenient bag packaging Meets or exceeds U.S. Extra Fancy Super sweet Fresh and sophisticated flavor Hints of spice and savory earth character Juicy and aromatic Healthy snack Convenient bag packaging Meets or exceeds U.S. Extra Fancy Make a creamy smoothie or a nutritious juice blend Perfect as a healthy treat or seasonal baking ingredient Great for packing in lunches Make a creamy smoothie or a nutritious juice blend Adds flavor to a variety of recipes', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/e70c5b78-90d7-4248-b791-79cd6999b309.0975f20dc3d3e039b772d0fdd73af3d0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e70c5b78-90d7-4248-b791-79cd6999b309.0975f20dc3d3e039b772d0fdd73af3d0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e70c5b78-90d7-4248-b791-79cd6999b309.0975f20dc3d3e039b772d0fdd73af3d0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391659, 'Fresh Lemons, 2 lb Bag', 3.92, '033383140032', 'Add zest and flavor to your meals and beverages with these fresh Lemons. A great source of vitamin C, lemons are a staple citrus fruit essential for any kitchen. Slice them and use them in your iced or hot tea or use the lemon juice to make satisfying and refreshing strawberry lemonade. Zest the lemon peel to use in recipes such as lemon cookies or a tasty lemon loaf. You can also use lemons in savory recipes like asparagus with lemon zest or shrimp scampi with linguini. Enhance the flavor of your next meal with fresh Lemons.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Add to your iced or hot tea Make a satisfying and refreshing strawberry lemonade Use lemon zest to make lemon cookies or lemon loaf Adds flavor to a variety or recipes Available in a 2-pound bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ea02745f-85ec-4437-b558-99017aa55ba0_1.54e4ccd90fb051e0422baf290b61d661.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea02745f-85ec-4437-b558-99017aa55ba0_1.54e4ccd90fb051e0422baf290b61d661.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea02745f-85ec-4437-b558-99017aa55ba0_1.54e4ccd90fb051e0422baf290b61d661.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44391666, 'Fresh Raspberries, 6 oz. Container', 3.37, '715756100019', 'The sweet, juicy flavor of Fresh Raspberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes or yogurt, bake them into mouthwatering raspberry crumble bars, mix them with other fruit for a light and flavorful salad, or add them to a creamy smoothie. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin K and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them with cool water and enjoy the fresh taste. Refrigerate the berries to keep them fresh and ready for use. Pick up a Fresh Raspberry container today and savor the delectable flavor.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Raspberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Raspberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of raspberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these tasty gems into your baking endeavors, whether it\'s muffins, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are raspberries delicious, but they also offer an array of health benefits. Loaded with vitamins and dietary fiber, raspberries are are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Raspberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Raspberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7f2a89a0-04cc-4272-ad39-f3c96525b57b.a243dab95fc3537540fbf5cbb7a8365b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7f2a89a0-04cc-4272-ad39-f3c96525b57b.a243dab95fc3537540fbf5cbb7a8365b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7f2a89a0-04cc-4272-ad39-f3c96525b57b.a243dab95fc3537540fbf5cbb7a8365b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44419692, 'Marketside Organic Fresh Cucumber, Each', 2.98, '033383911045', 'The Marketside Organic Fresh Cucumber is crisp, refreshing, and naturally hydrating, making it a perfect addition to any meal. Grown by trusted organic farmers, this cucumber is USDA certified organic, ensuring it is free from synthetic pesticides and fertilizers. Its cool and clean flavor pairs wonderfully with salads, sandwiches, wraps, or as a simple snack with your favorite dip. Slice it up for a crisp crunch, or add it to a pitcher of water for a fresh, spa-like taste. With its vibrant green color and garden-fresh taste, the Marketside Organic Fresh Cucumber is a versatile choice that delivers both nutrition and flavor. Enjoy the wholesome goodness of the Marketside Organic Fresh Cucumber every time you reach for a healthy option. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to delivering freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Fresh Cucumber USDA certified organic and grown without synthetic pesticides Crisp, refreshing flavor perfect for salads, wraps, and snacks Hydrating and low-calorie option for a healthy lifestyle Versatile use from cooking to infused water', 'Marketside', 'https://i5.walmartimages.com/asr/9b051d0b-d6ed-43fb-8a53-2d26eeeebb31_1.c1ecc4eff47d63fb3ce42a9c4adb9780.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b051d0b-d6ed-43fb-8a53-2d26eeeebb31_1.c1ecc4eff47d63fb3ce42a9c4adb9780.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b051d0b-d6ed-43fb-8a53-2d26eeeebb31_1.c1ecc4eff47d63fb3ce42a9c4adb9780.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44419695, 'Cooking with Spinach, Classic, Fresh Spinach, Net Wt 16 oz (1LB) 454g', 2.98, '012842410015', 'Spinach, Classic 16 oz (454 g) Triple washed & ready to cook! No time for cooking? Great as a salad too! The perfect size and texture for cooking. Specially grown for cooking. Rich in antioxidants - beta carotene, vitamins A & C. Excellent source of folate and vitamin K with 10.4 mg of lutein per 85 g serving! For more nutritional info and more recipes, go to www.newstarfresh.com. Produce of USA. Classic 3-Minute Spinach! 1 bag Cooking with Spinach Classic; 1 tbsp olive oil (or our favorite cooking oil); salt and pepper. Heat oil in large skillet over high heat. When hot, add spinach and cover with lid. Stir spinach after 1 minute and replace lid. Cook 2 minutes more until wilted but still bright green. Season with salt and pepper to taste. Serves 2-3 as a side dish. Spice up your spinach by adding 1/2 tsp hot chili flakes and 1 tsp lemon juice after first minute of cooking! Keep refrigerated. 16 oz (454 g) 900 Work Street Salinas, CA 93901 888-STAR-220 2012 NewStar', 'Spinach, Classic Triple washed & ready to cook! No time for cooking? Great as a salad too! The perfect size and texture for cooking. Specially grown for cooking. Rich in antioxidants - beta carotene, vitamins A & C. Excellent source of folate and vitamin K with 10.4 mg of lutein per 85 g serving! Produce of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/71047ede-75dd-4bad-a2ca-cbd360dc7dea.900f32bab8bfac704613f1a78808c297.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71047ede-75dd-4bad-a2ca-cbd360dc7dea.900f32bab8bfac704613f1a78808c297.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71047ede-75dd-4bad-a2ca-cbd360dc7dea.900f32bab8bfac704613f1a78808c297.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44659372, 'Fresh Summer Kiss Melon, Each', 2.98, '850940002431', 'Enjoy the fruits of summer with a Summer Kiss Melon. Summer Kiss melons are sweet but not overbearing, mellow, and creamy. They have a creamy, green textured flesh that will add interest and color to any fruit bowl. Mix some cubes of Summer Kiss melon with watermelon, honeydew, and cantaloupe for a melon bowl that will satisfy anyone\'s fruit cravings, mix into a morning smoothie, sprinkle with lime juice and salt, or pair with fresh herbs such as mint, cilantro, oregano, tarragon, or basil for a refreshing treat. Sugar Kiss melon is a wonderful accompaniment to salty meats, soft cheeses, dried fruits, and nuts. Bring home the flavor of summer with a Sugar Kiss Melon.', 'Fresh Sugar Kiss melon Sweet but not overbearing flavor Creamy, green textured flesh Adds interest and color to any fruit bowl Mix with watermelon, honeydew, and cantaloupe for a delicious melon bowl', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2c0c9fce-2930-48cd-8974-c897e6b63c4b.cf73021f24ffff716bdca17e76a2bbc8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2c0c9fce-2930-48cd-8974-c897e6b63c4b.cf73021f24ffff716bdca17e76a2bbc8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2c0c9fce-2930-48cd-8974-c897e6b63c4b.cf73021f24ffff716bdca17e76a2bbc8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44901266, 'Mann Packing Manns Snap Pea Sensations, 1 ea', 2.38, '716519011085', 'Snap Pea Sensations, Mediterranean Style, Bag 10.14 OZ Nt wt. Snap Peas & Topping: 10.14 oz (287.5 g). Dressing: 1.0 fl oz (29.6 ml). Complete Kit: Serve hot or cold. Sugar snap peas, basil garlic olive oil & parmesan cheese. Three generations. Est. 1939. Serve as a cold salad or hot saute. Healthy cooking made easy! Simply toss these delicious ingredients together for a quick & easy side dish or meal. Serve hot or cold! For more information contact us: Mann\'s Customer Service PO Box 690, Salinas, CA 93902 or call 800-285-1002. Veggiesmadeeasy.com. At Mann\'s we are moms creating solutions for moms. Certified WBENC. Women\'s business enterprise. Facebook. Twitter. Pinterest. Instagram. YouTube. Dating back to the 1930s, farming has been a family business for three generations. We are dedicated to providing the highest quality, fresh produce. We grow on family-owned farms using sustainable practices & follow strict quality standards. Keep refrigerated. Washed & ready to eat. Perishable. Enjoy as a Cold Salad: 1. Pour the pre-washed sugar snap peas into a bowl. 2. Add the parmesan cheese and basil garlic olive oil. 3. Toss to coat evenly; serve immediately for best results. Enjoy as a Hot Saute: 1. Pour the pre-washed sugar snap peas into a bowl. 2. Drizzle the basil garlic olive oil over the sugar snap peas. Toss to coat evenly. 3. Preheat a non-stick skillet until hot. 4. Pour the coated sugar snap peas into the skillet and saute quickly - 1 to 2 minutes. 5. Remove from heat. Add parmesan cheese. Toss gently. 6. For best results serve immediately. Suggestions for Hot & Cold Dishes: Add to pasta or pair with your favorite grilled fish, chicken or beef. Contains milk. 1 kit PO Box 690 Salinas, CA 93902', 'Snap Pea Sensations, Mediterranean Style Nt wt. Snap Peas & Topping: 10.14 oz (287.5 g). Dressing: 1.0 fl oz (29.6 ml). Complete Kit: Serve hot or cold. Sugar snap peas, basil garlic olive oil & parmesan cheese. Three generations. Est. 1939. Serve as a cold salad or hot saute. Healthy cooking made easy! Simply toss these delicious ingredients together for a quick & easy side dish or meal. Serve hot or cold! For more information contact us: Mann\'s Customer Service PO Box 690, Salinas, CA 93902 or call 800-285-1002. Veggiesmadeeasy.com. At Mann\'s we are moms creating solutions for moms. Certified WBENC. Women\'s business enterprise. Facebook. Twitter. Pinterest. Instagram. YouTube. Dating back to the 1930s, farming has been a family business for three generations. We are dedicated to providing the highest quality, fresh produce. We grow on family-owned farms using sustainable practices & follow strict quality standards.', 'Mann\'s', 'https://i5.walmartimages.com/asr/c8178d5b-c2b9-413b-9449-d02128049ceb_1.6a10ea294aa600cb61e86d109c2e9563.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8178d5b-c2b9-413b-9449-d02128049ceb_1.6a10ea294aa600cb61e86d109c2e9563.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8178d5b-c2b9-413b-9449-d02128049ceb_1.6a10ea294aa600cb61e86d109c2e9563.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (44998120, 'Fresh Seeded Watermelon, Each', 6.96, '850525002023', 'Treat yourself to a sweet Fresh Seeded Watermelon. Enjoy this tasty watermelon on its own as a healthy snack or incorporate it into a variety of delicious recipes. For breakfast, you can make a sweet fruit bowl with sliced watermelon, strawberries, pineapple, banana, and kiwi. For an extra special treat, top with a dollop of whipped cream. Fresh seeded watermelons are rich in micronutrients! You can also serve up this watermelon at your next neighborhood barbecue, use it to make a refreshing sorbet, or make a delicious summertime cocktail.', 'Juicy and fresh seeded watermelon Explore all the delicious ways to add fresh watermelon to your favorite recipes Rich in micronutrients Get creative and make a watermelon cocktail or a refreshing sorbet Enjoy on its own or add to a mixed fruit salad No container', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3d9086b4-d3b8-4da0-9b4b-09fe51509bee.d73dc9b869c69c180d1bcafa4a8847a0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d9086b4-d3b8-4da0-9b4b-09fe51509bee.d73dc9b869c69c180d1bcafa4a8847a0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d9086b4-d3b8-4da0-9b4b-09fe51509bee.d73dc9b869c69c180d1bcafa4a8847a0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (45067833, 'Little Gems Sweet Lettuce, 3 heads', 2.98, '027918921234', 'Lettuce, Sweet 3 heads Grown with family pride for 3 generations. Field packed for freshness. Preferred by San Francisco Chefs. Chef\'s Choice. Resealable for freshness. Tanimura & Antle the premier grower of this sweet and crunchy lettuce variety that has been enjoyed by culinary professionals in the San Francisco Bay Area for years. Sweet and crunchy, perfect in a salad or as a lettuce cup. Pick up a bag and put little gems on the dinner table tonight. www.taproduce.com. Produce of USA. Wash before use. 3 heads Salinas, CA 93908', 'LETTUCE GEM CA TA', 'Tanimura & Antle', 'https://i5.walmartimages.com/asr/c91f7310-0344-4fdf-a9aa-0ced165be333.806330fb16582977c101e596e47067d9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c91f7310-0344-4fdf-a9aa-0ced165be333.806330fb16582977c101e596e47067d9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c91f7310-0344-4fdf-a9aa-0ced165be333.806330fb16582977c101e596e47067d9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (45106270, 'Organic Kiwi Fruit, 1 lb Clam Shell', 6.34, '032601500016', 'Treat yourself to the refreshing flavor of Organic Kiwi Fruit. Enjoy this tasty kiwi on its own as a healthy snack or incorporate it into a variety of delicious recipes. For breakfast, you can make a sweet fruit bowl with sliced kiwi, strawberries, pineapple, and cantaloupe. For an extra special treat, top with a dollop of whipped cream. Cut it into small pieces and put it in a fresh salad along with chicken, cucumbers, tomatoes, and a light dressing. You can even use kiwi to make a sweet sorbet or scrumptious muffins. Enjoy the sweet and juicy taste of fresh Organic Kiwi Fruit.', 'Flavorful addition to many recipes Enjoy on its own or add to a mixed fruit salad Add to your fresh garden salad USDA organic Get creative and make a refreshing sorbet Explore all the delicious ways to add fresh kiwi to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/681f409f-5556-4c5c-87b6-427273e29fda.b3f9c96e8afacbd545ec61df09ed17a7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/681f409f-5556-4c5c-87b6-427273e29fda.b3f9c96e8afacbd545ec61df09ed17a7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/681f409f-5556-4c5c-87b6-427273e29fda.b3f9c96e8afacbd545ec61df09ed17a7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (45127027, 'Fresh Red Baby Potatoes, 1.5 lb Bag', 3.44, '045255118643', 'Baby Red Potatoes are hand selected for excellent quality. Firm, well-shaped, and smooth, these fresh creamer potatoes can be cooked in almost any way imaginable. They have a light, subtle flavor and creamy texture that make them the perfect side dish to chicken, fish, steak, and other delicious proteins. Simply grill, roast, or toss into salads along with your favorite seasonings. To preserve the nutrients, leave the skins on and simply scrub gently in water before cooking. Always store potatoes in a cool, well-ventilated area rather than in the refrigerator. Enjoy nutrients, flavor, and all-around deliciousness when you cook up Baby Potatoes.', 'Firm, well-shaped, and smooth Can be cooked in almost any way imaginable, including grilled, roasted, or in salads Light, subtle flavor and creamy texture Perfect side dish to chicken, fish, steak, and other delicious proteins Great addition to holiday meals and celebrations Good source of potassium', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b893e478-176e-40ea-ae5e-0b0def2711c7.e38013c56d6d975720185ad48d3f5af2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b893e478-176e-40ea-ae5e-0b0def2711c7.e38013c56d6d975720185ad48d3f5af2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b893e478-176e-40ea-ae5e-0b0def2711c7.e38013c56d6d975720185ad48d3f5af2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (45618183, 'Fresh USDA Organic Strawberries, 1 lb Container', 6.99, '033383200385', 'The sweet, juicy flavor of Fresh USDA Organic Strawberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. These organic berries contain essential vitamins and nutrients like, vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh USDA Organic Strawberries today and savor the delectable flavor.', 'Certified organic Prior to serving gently wash the strawberries and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail Prior to serving gently wash the strawberries and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fb148fa5-193e-479c-8e89-dca9d61e2ff7_1.0d26c201e069d9940a4d0cb0c85d776d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb148fa5-193e-479c-8e89-dca9d61e2ff7_1.0d26c201e069d9940a4d0cb0c85d776d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb148fa5-193e-479c-8e89-dca9d61e2ff7_1.0d26c201e069d9940a4d0cb0c85d776d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (45619132, 'Fresh Premium Grape Tomato, 10 oz Package', 3.48, '751666370050', 'Bring the fresh, delicious taste of Premium Grape Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Premium Grape Tomatoes.', 'Premium Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8c3423a6-d5f1-4e00-926a-41f316288808.89ce7b3f27c9a70b987d7c19edc72f1a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8c3423a6-d5f1-4e00-926a-41f316288808.89ce7b3f27c9a70b987d7c19edc72f1a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8c3423a6-d5f1-4e00-926a-41f316288808.89ce7b3f27c9a70b987d7c19edc72f1a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (45619133, 'Fresh Cherubs Grape Tomatoes, 16.5 oz Package', 4.16, '751666774056', 'Bring the fresh, delicious taste of NatureSweet Cherubs into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of NatureSweet Cherubs Grape Tomatoes.', 'NatureSweet Cherubs Grape Tomatoes, 16.5 oz Package Wholesome, fresh, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'NatureSweet', 'https://i5.walmartimages.com/asr/cb0449f8-005c-459a-8df4-e18c5b7bb6bb.fa163a1bfa3793606243f324c3199f20.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb0449f8-005c-459a-8df4-e18c5b7bb6bb.fa163a1bfa3793606243f324c3199f20.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb0449f8-005c-459a-8df4-e18c5b7bb6bb.fa163a1bfa3793606243f324c3199f20.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (45619141, 'Walmart Produce Pineapple Blueberry 10 Oz', 2.58, '826766252114', 'short description is not available', 'Walmart Produce Pineapple Blueberry 10 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4b1fd3b3-b599-4015-be35-c32646acda88_1.5f34cc4c89c989e6fe81846c1b74fb26.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4b1fd3b3-b599-4015-be35-c32646acda88_1.5f34cc4c89c989e6fe81846c1b74fb26.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4b1fd3b3-b599-4015-be35-c32646acda88_1.5f34cc4c89c989e6fe81846c1b74fb26.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (45980427, 'Melissa\'s Potato Medley, 1.5 Lb.', 3.66, 'deleted_045255136425', 'Potato Medley, Red/White/Blue, Bag 1.5 LB US No. 1-min. dia 3/4 inch. Idaho potatoes. Good life food. Rich, buttery flavor. The best potato for salads or grilling! Recipes - melissa.com. Melissa\'s Red, White and Blue Potatoes are great in potato salads or as a savory side dish. They have a wonderful, buttery texture and flavor when baked, roasted, boiled, steamed, sauteed or mashed. Try them in your favorite potato recipe. www.melissas.com. Grown in Idaho. Product of USA. Packed in Idaho. Store in a cool, dry place. 24 oz (1.5 lbs) 680 g PO Box 514599 Los Angeles, CA 90051 800-588-0151', 'Red White & Blue Potato Medley 24 Oz Bag', 'Melissa\'s', 'https://i5.walmartimages.com/asr/0dbaf4bf-ed3b-40a0-94bd-e21394fa87f6_1.1f02444448f0715e3b2d5a00ea5e0a43.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0dbaf4bf-ed3b-40a0-94bd-e21394fa87f6_1.1f02444448f0715e3b2d5a00ea5e0a43.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0dbaf4bf-ed3b-40a0-94bd-e21394fa87f6_1.1f02444448f0715e3b2d5a00ea5e0a43.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46341599, 'Fresh Quick Cook Brussel Sprouts, 16 oz', 2.98, '000651319018', 'Green Giant™ Fresh Halved Brussels Sprouts.Recipe ready.Steams in pack.Per serving:35 Calories.0g Sat fat, 0% DV.20mg Sodium, 1% DV.2g Sugars.Net Wt 16 oz (454 g). Refrigerate for best quality.Microwave directions:1. Tear bag at notch.2. Open pouch and run under cold water to rinse Brussels Sprouts. Drain water from pouch. Reseal pouch leaving about 1 inch open.3. Place bag standing up in microwave; microwave on high for 2-3 minutes or until desired tenderness*. Let stand 1 minute in microwave.Because microwaves cook differently, times are approximate.Caution: Hot! Pouch may be hot to the touch. Let stand 1 minute in microwave before removing.Serving suggestions:Drizzle Halved Brussels Sprouts with olive oil, sea salt, and pepper. Roast at 400°F for 20 minutes. Great dipped into a garlic aioli.Halved Brussel Sprouts are a great addition to your cooked pasta dishes. Just roast and toss with cooked pasta, olive oil and parmesan cheese.Perfect for sauteing with Pancetta and freshly, chopped garlic.', 'Brussels Sprouts, Sprout Halves, Quick Cook Halved for faster and even cooking! 5 min. Season, seal & steam in the bag. Ready to serve fresh veggies. Visit OceanMist.com for recipes and ideas to personalize your Season & Steam meals! Visit OceanMist.com for brussels sprouts facts, videos and recipes. Gluten free. GMO free. Vegan. Washed and ready to use. Excellent source of vitamin C. Rich in antioxidants and good source of fiber. No artificial ingredients or preservatives.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/be686bcd-6ab5-46cb-b0b4-0034d467e1fd.f78a4e6a858aa8ff551f12118381b22c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/be686bcd-6ab5-46cb-b0b4-0034d467e1fd.f78a4e6a858aa8ff551f12118381b22c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/be686bcd-6ab5-46cb-b0b4-0034d467e1fd.f78a4e6a858aa8ff551f12118381b22c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46341600, 'Brussels Sprouts, 12 oz', 2.98, '605806027970', 'Ocean Mist® Farms Super Shreds Superfood? Brussels Sprouts. Use for salads, saute or tacos. Contains good source of fiber & vitamin C. Rich in antioxidants. There are no artificial ingredients and preservatives. This product is Gluten free and GMO free.', 'Ocean Mist Farms Super Shreds Superfood Brussels Sprouts.Ocean Mist® Farms Super Shreds Superfood? Brussels Sprouts.Use for salads, saute or tacos!Cleaned and ready to use.Microwave in the bag 3 min.Season, seal & steam in the bag!For a wealth of Brussels sprouts facts, videos and recipes, visit oceanmist.com.Benefits: Good source of fiber.Excellent source of vitamin C. Rich in antioxidants.No artificial ingredients.No preservatives.Gluten free.GMO free.Vegan.', 'Unbranded', 'https://i5.walmartimages.com/asr/c81c2c13-62ed-4341-8bf7-674819deaa95.20aa7b9d343d2d1688f5c1701b1600a7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c81c2c13-62ed-4341-8bf7-674819deaa95.20aa7b9d343d2d1688f5c1701b1600a7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c81c2c13-62ed-4341-8bf7-674819deaa95.20aa7b9d343d2d1688f5c1701b1600a7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46342082, 'Crunch Pak NBA Fit Snackers Apples, Pretzels, Cheese, 4.75 oz', 2.28, '732313852815', '', 'Crunch Pak NBA Fit Snackers Apples, Pretzels, Cheese: America\'s No. 1 sliced apple Healthy snack on the go', 'Fresh Produce', 'https://i5.walmartimages.com/asr/61af1d4e-1723-45fe-a484-a9b5e3993cdf_1.a82be18ac0957206306e635f88981233.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/61af1d4e-1723-45fe-a484-a9b5e3993cdf_1.a82be18ac0957206306e635f88981233.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/61af1d4e-1723-45fe-a484-a9b5e3993cdf_1.a82be18ac0957206306e635f88981233.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46491668, 'Fresh White Potatoes, Each', 0.3, '000000040839', 'These White Potatoes are a must-have for any pantry. With so many ways to prepare potatoes, you\'ll want to add them to every meal. For breakfast, you could make crispy hash browns smothered in cheese and diced ham or add them to a savory omelet. For lunch or dinner, you could use these fresh potatoes to make au gratin potatoes, garlic mashed potatoes, or a baked potato loaded with cheese, sour cream, green onions, and bacon bits. If you\'re hosting a neighborhood get-together, you can use them to make creamy potato salad or homestyle French fries. Serve up something delicious when you cook with White Potatoes.', 'White Potatoes, 1 lb. Approximately 2 potatoes per lb. These White Potatoes are a must-have for any pantry. With so many ways to prepare potatoes, you\'ll want to add them to every meal. For breakfast, you could make crispy hash browns smothered in cheese and diced ham or add them to a savory omelet. For lunch or dinner, you could use these fresh potatoes to make au gratin potatoes, garlic mashed potatoes, or a baked potato loaded with cheese, sour cream, green onions, and bacon bits. If you\'re hosting a neighborhood get-together, you can use them to make creamy potato salad or homestyle French fries. Serve up something delicious when you cook with White Potatoes.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4ad2392e-7783-4d52-a5da-642ed12519da.0c7a0e38aa1d4f9ef6314fd72ff657f8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ad2392e-7783-4d52-a5da-642ed12519da.0c7a0e38aa1d4f9ef6314fd72ff657f8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ad2392e-7783-4d52-a5da-642ed12519da.0c7a0e38aa1d4f9ef6314fd72ff657f8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46491672, 'Fresh Shredded Carrots, 10 oz Bag', 1.87, '078783514106', 'Add color and nutrition to your diet with Fresh Shredded Carrots. Carrots are a great source of beta carotene, fiber, vitamin K1, potassium, and antioxidants. Washed and ready to eat with no preservatives, keep a bag of these shredded carrots on hand to add to any meal at a moment’s notice. Add this nutritional powerhouse to all kinds of recipes to add a delicious dose of vitamins and minerals. Slightly cook shredded carrots and add to a grilled cheese sandwich, add to macaroni and cheese as you’re boiling the noodles, sprinkle into an omelet, add to your award-winning lasagna recipe, use as an ingredient for a delicious salad, or mix into muffins batter. You’ll be serving up an extra-nutritious meal that nobody will object to! Give your dishes an extra boost of color and nutrition with Fresh Shredded Carrots.', 'Fresh Shredded Carrots 10-ounce bag No preservatives Washed and ready to eat Fresh and crunchy Excellent source of beta carotene, fiber, vitamin K1, potassium, and antioxidants', 'Grimmway Farms', 'https://i5.walmartimages.com/asr/35817df3-4652-4035-9e07-0d073658c7d3.f739e89b28b14d00be573312547a31db.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35817df3-4652-4035-9e07-0d073658c7d3.f739e89b28b14d00be573312547a31db.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35817df3-4652-4035-9e07-0d073658c7d3.f739e89b28b14d00be573312547a31db.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46491694, 'Fresh Red Cherries, 2.25 lb Bag', 8.93, '000000040457', 'Enjoy our deliciously sweet red cherries grown in US. Full of nutrition, these fresh red cherries are not only delicious, but also packed with vitamins and minerals like vitamin C, potassium, and vitamin B complex. Enjoy these cherries on their own, as part of desserts and entrees, or add them to drinks. Cherries can stay fresh when frozen for up to three months, so you\'ll be able to enjoy them throughout the fall and winter seasons. Make sure you use a freezer bag that removes as much air as possible. Then, when you\'re ready to eat them, thaw cherries in the refrigerator and enjoy. Get powerful nutrition and flavor with these Fresh Red Cherries.', 'Fresh Red Cherries Bag Bursting with antioxidants, phytochemicals, vitamins, nutrients, and fiber Rich source of vitamin C, potassium, and vitamin B complex Versatile and delicious Wonderful addition to entrees, desserts, and beverages To enjoy fresh cherries: store in the refrigerator and wash just before eating Grown in US', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ae909d05-c36d-42f7-bcfe-bcf43201fc73.477cac022ebe2e0acad63c17124ca733.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ae909d05-c36d-42f7-bcfe-bcf43201fc73.477cac022ebe2e0acad63c17124ca733.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ae909d05-c36d-42f7-bcfe-bcf43201fc73.477cac022ebe2e0acad63c17124ca733.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46491703, 'Freshly Harvested BBQ Green Onions, 1 Bunch', 1.8, '814905011296', 'Add flavor to your next meal with Fresh BBQ Green Onions. Also known as Mexican BBQ onions, they\'re similar in taste to the typical green onion variety. This versatile vegetable adds flavor and texture to a variety of recipes. For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. Chop up the stalks into little rings and mix them into sour cream to create a delicious chip dip. You can also add them to a fresh garden salad or sprinkle them on top of your fish tacos. Stock your pantry with these Fresh BBQ Green Onions.', 'Great addition to every pantry Adds flavor and texture to any meal Dice them and add to a savory breakfast omelet Chop into little rings and add to sour cream to make a delicious chip dip Similar in taste to the typical green onion variety Fresh condition for optimal flavor and texture Also known as Cebollitas Asadas, Basal Akhdar Mashwi, Hara Pyaaz & Kǎo Xiāng Cōng around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/88304921-0043-4e1b-a4a6-b53a2459aa3b_1.cf00c8cf6d80aeb06274fa8f1a44bbd0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/88304921-0043-4e1b-a4a6-b53a2459aa3b_1.cf00c8cf6d80aeb06274fa8f1a44bbd0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/88304921-0043-4e1b-a4a6-b53a2459aa3b_1.cf00c8cf6d80aeb06274fa8f1a44bbd0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46491714, 'Fresh Yellow Mangoes, Each', 0.76, '000000043120', 'Get ready for big flavor with our Yellow Mangoes. This sweet, juicy tropical fruit, also known as an \"Ataulfo\" mango, originated in Mexico and has a soft, buttery texture and naturally sweet taste that the whole world has grown to love. They\'re delicious and nutritious, containing loads of vitamin C, which may act as an antioxidant and contribute to healthy immunity. They also have vitamin A, calcium, iron and fiber, so you can feel good about eating them. Slice up a mango and enjoy as a healthy, sweet snack, use it to make fresh mango salsa, or add it to sweet treats like creamy mango-lime bars or mango sorbet! The sky is the limit with this versatile fruit. Life is better when you have Yellow Mangoes.', 'Soft, buttery texture and naturally sweet taste Rich in vitamins A, C, calcium, iron, and fiber Makes a healthy snack Great addition to smoothies, salads, salsa, and more Can also be used to cook and bake with Delicious and nutritious Also known as Ataulfo Mango, Honey Mango, and Champagne Mango around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/701b5e2d-45a5-46fc-bac5-5b77e634792d.b4da8c2e4ad44ef5825b5f0c57cac35b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/701b5e2d-45a5-46fc-bac5-5b77e634792d.b4da8c2e4ad44ef5825b5f0c57cac35b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/701b5e2d-45a5-46fc-bac5-5b77e634792d.b4da8c2e4ad44ef5825b5f0c57cac35b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46491725, 'Honeycrisp Apples, 2lb Bag', 6.12, 'deleted_033383047904', 'Treat yourself to the delicious, crisp taste of Honeycrisp Apples. These medium-to-large apples are known for their light green and yellow background covered with a red-orange flush and a strong hint of pink, and a honey-sweet, tart flavor. Enjoy one with breakfast or lunch or as a fresh snack any time of day. Best of all, these delicious apples hold up well when cooked and can be used in both savory and sweet dishes. They can be used for baking, snacking, salads, pairing, or made into a delicious sauce that pairs perfectly with pork. Try incorporating them into soups and compotes or using to make yummy jam or juice. Use them to create apple crisp, pie and strudel for a sweet treat. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Honeycrisp Apples.', 'Honeycrisp Apples, 2lb Bag: Light green and yellow background covered with a red-orange flush and a strong hint of pink Honey-sweet, tart flavor Good for baking and applesauce Can be enjoyed fresh or cooked into both savory and sweet dishes', 'Generic', 'https://i5.walmartimages.com/asr/710231ac-34ab-41a3-9b6c-04d7261ada17_1.a866a242aeccff90ad46e37b7fdf3940.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/710231ac-34ab-41a3-9b6c-04d7261ada17_1.a866a242aeccff90ad46e37b7fdf3940.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/710231ac-34ab-41a3-9b6c-04d7261ada17_1.a866a242aeccff90ad46e37b7fdf3940.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46491765, 'Fresh Jicama, Each, 1 Count', 2.44, '000000046268', 'The wonderful jicama is thick, slightly sweet, hearty and offers a very satisfying crunch. It is a staple of many different cuisines, including Mexican, and makes a wonderful addition to a variety of tasty dishes. Chop it or shred it to sprinkle on a salad or put it in a soup. The jicama vegetable is loaded with fiber, which is useful for maintaining digestive regularity and promotes a feeling of fullness after eating. It\'s also a very rich source of the antioxidant vitamin C, a potent immune booster.', 'Sweet and crunchy 1 serving is 23.25 oz 250 calories per jicama-food serving No fat No cholesterol Low sodium High in potassium 128% daily recommended fiber 221% daily recommended vitamin C High in iron Source of vitamin B6 and magnesium Also known as Mexican Turnip and Yam Bean around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/01cd7508-0f53-47e6-9d78-4792cc1c085e.13951d9e889a9fe8ddcf20ca5dc2e0c9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/01cd7508-0f53-47e6-9d78-4792cc1c085e.13951d9e889a9fe8ddcf20ca5dc2e0c9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/01cd7508-0f53-47e6-9d78-4792cc1c085e.13951d9e889a9fe8ddcf20ca5dc2e0c9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46521533, 'Fresh Organic Zucchini Squash, 2 Count', 2.96, '711069660011', 'Organic zucchini is always fresh, and has a light, delicate flavor with a creamy texture. It can be enjoyed raw with your favorite veggie dip or cooked. Like other summer squash, it has tender edible skin that does not require long cooking making it a very versatile ingredient for soups, chilis, sauté\'s and skewers. Dice and sauté with other fresh veggies, roast in the oven topped with parmesan cheese or grate it into delicious zucchini frittatas. Zucchini also makes a great low-carb pasta alternative. Simply spiralize the fresh zucchini and prepare it with your choice of toppings. Best yet, zucchini is packed with many essential vitamins such as vitamin B6 and rich in antioxidants, making it a great addition to a healthy diet. The possibilities are endless and always flavorful with fresh organic zucchini.', 'Organic Zucchini Squash Certified Organic 2 Count Zucchini Great for grilling Great pasta alternative Responsibly grown', 'Marketside', 'https://i5.walmartimages.com/asr/b21707a9-3f97-4ebd-ad43-373bac8a190b.da052b2bc8586765fefad0261123eee9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b21707a9-3f97-4ebd-ad43-373bac8a190b.da052b2bc8586765fefad0261123eee9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b21707a9-3f97-4ebd-ad43-373bac8a190b.da052b2bc8586765fefad0261123eee9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46583418, 'Naturipe Fresh Blueberries Snack Packs, 1.25 oz, 3 count', 2.98, '812049002095', '', 'BERRY SNACKS 3PK NRF', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d1189730-4a1b-4d75-b2c3-b976ecb4ef04_1.55a6af21922e175bf57ec49c1d531111.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d1189730-4a1b-4d75-b2c3-b976ecb4ef04_1.55a6af21922e175bf57ec49c1d531111.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d1189730-4a1b-4d75-b2c3-b976ecb4ef04_1.55a6af21922e175bf57ec49c1d531111.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (46829825, 'Fresh Blueberries, 6 oz. Container', 2.97, '015756300120', 'Fresh Blueberries are a delightful and nutritious treat that brings a burst of flavor to any dish. These plump and juicy berries are picked at the peak of freshness, ensuring a sweet and tangy taste that is hard to resist. Perfect for snacking, baking, or adding to your favorite recipes, these blueberries are a versatile fruit that can be enjoyed in countless ways. Whether you sprinkle them on top of your morning cereal, blend them into a smoothie, or bake them into a delicious pie, Fresh Blueberries are sure to satisfy your cravings for a healthy and delicious snack.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Blueberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Blueberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of blueberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these blue gems into your baking endeavors, whether it\'s muffins, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are blueberries delicious, but they also offer an array of health benefits. Loaded with antioxidants, vitamins, and dietary fiber, blueberries are known to promote heart health, support brain function, and boost the immune system. They are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Blueberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Blueberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Multiple Suppliers', 'https://i5.walmartimages.com/asr/c251a0dc-54a1-49b2-b763-47e7a7d795ff.4d6e0d49bfb29e6e01c1ab7e50c10ac8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c251a0dc-54a1-49b2-b763-47e7a7d795ff.4d6e0d49bfb29e6e01c1ab7e50c10ac8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c251a0dc-54a1-49b2-b763-47e7a7d795ff.4d6e0d49bfb29e6e01c1ab7e50c10ac8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47094195, 'Old Wisconsin® Beef Sausage Beef Bites 3.5 oz. Pouch', 3.98, '073170124067', 'Old Wisconsin 3.5 oz Beef Bites have a perfect smokey flavor you\'ll crave. Sausage fans across the United States are wondering: How do we fit so much beefy flavor into such a little snack bite Our secret Using high-quality cuts of beef and spices, and slowly smoking them over a hardwood fire, just like our bigger sausages. It\'s no wonder Old Wisconsin 3.5 oz Beef Snack Bites are so good wherever you are and whenever you want them. And because they\'re available in a wide variety of resealable packages, you can eat as many of them as you want.', 'Real. Genuine. Taste. Beefed-Up Flavor', 'Old Wisconsin', 'https://i5.walmartimages.com/asr/247f8ec5-fcf6-4dcb-aceb-60c30ecda9a1.a80b874608ba1847258ded6e26af52a6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/247f8ec5-fcf6-4dcb-aceb-60c30ecda9a1.a80b874608ba1847258ded6e26af52a6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/247f8ec5-fcf6-4dcb-aceb-60c30ecda9a1.a80b874608ba1847258ded6e26af52a6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47094278, 'Cantaloupe Spears 16 oz', 4.84, '717524414366', 'Discover the sweet and juicy flavor of Cantaloupe, a delicious and refreshing fruit that\'s perfect for any occasion. Our Cantaloupes are carefully selected to ensure the highest quality and freshness. Whether you\'re adding it to a fruit salad or enjoying it as a healthy snack, Cantaloupe is the perfect choice for anyone who loves the taste of fresh, natural fruit. Order now and experience the irresistible flavor of Cantaloupe for yourself!', 'Cantaloupe Chunks, 16 oz Contains Cantaloupe Packed in a secure plastic bowl with lid Portable and convenient Provides many essential nutrients', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8cbaa217-f530-4344-bb51-72dc5701f005.a009e6ef456e79af40075313d473197e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8cbaa217-f530-4344-bb51-72dc5701f005.a009e6ef456e79af40075313d473197e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8cbaa217-f530-4344-bb51-72dc5701f005.a009e6ef456e79af40075313d473197e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47094281, 'Marketside Fresh Cut Watermelon Chunks, 42 oz Tray', 9.24, '077745247571', 'Enjoy the sweet, refreshing taste of Marketside Watermelon Chunks. This pre-cut watermelon is great for breakfast, lunch, dessert, or when you want a snack. You can eat them right out of the container, use them to infuse water for a refreshing drink, or chop them up and make a mouthwatering watermelon salad with feta and mint. With 42-ounces in each container, this watermelon is great for sharing with friends and family or keeping it for yourself. It comes in a reclosable container to help maintain freshness. Bring home Marketside Watermelon Chunks today for a refreshing, healthy treat. Marketside provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Marketside item.', 'Sweet and Juicy Sweet, refreshing treat Great for breakfast, lunch, dessert, or when you want a snack Enjoy right out of the Tray or add to a delicious fruit salad Re-closable package helps maintain freshness Keep refrigerated until ready to enjoy', 'Marketside', 'https://i5.walmartimages.com/asr/26f3dda4-7907-43b4-9766-cbd1d022203a.13a39530a74aff741517199fa9dfb8c6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/26f3dda4-7907-43b4-9766-cbd1d022203a.13a39530a74aff741517199fa9dfb8c6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/26f3dda4-7907-43b4-9766-cbd1d022203a.13a39530a74aff741517199fa9dfb8c6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47184184, 'Pineapple Chunks, 42 oz', 9.76, '077745248646', 'Experience a burst of tropical flavors with these Pineapple Chunks. The pre-cut slices of ripe pineapple are juicy and sweet to taste and are packed in its own juice. Carry them with you and eat them straight out of the tray any time you want, at home or on-the-go. You can also use them to top desserts and ice creams, in a fruit salad or blend them with milk to make milkshakes. Pineapples are known to have a number of nutrients, and they are especially rich in vitamin C. Add some fresh fruits to your daily menu today with these Freshness Guaranteed Pineapple Chunks.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', '', 'Fresh Produce', 'https://i5.walmartimages.com/asr/727dc4fc-50ed-41ea-850b-5d6eab2d2afe_1.4a5fe0a5b8f0e00312d7944fcd0d70b9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/727dc4fc-50ed-41ea-850b-5d6eab2d2afe_1.4a5fe0a5b8f0e00312d7944fcd0d70b9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/727dc4fc-50ed-41ea-850b-5d6eab2d2afe_1.4a5fe0a5b8f0e00312d7944fcd0d70b9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47197248, 'Fresh Organic Bartlett Pears, 2 lb Bag', 3.98, '804305000938', 'Enjoy the fresh and delightful taste of USDA organic Bartlett pears. These high-quality, fresh pears are renowned for their sweet, juicy, and tantalizingly crisp texture, making them a perfect snack. They\'re versatile and can enhance many recipes. Use them to create a rich, creamy smoothie or a nutritious juice blend. Perfect for adding an extra crunch and flavor to salads, these pears are also fantastic for making sweet desserts like pear crisp, pear cobbler, or pear tarts. Bartlett pears are an excellent food choice for those who appreciate fresh, organic fruits. However you choose to use them, these fresh pears are bound to make any meal special.', 'Sweet, crisp & juicy Bartlett pears USDA certified organic for high-quality freshness Ideal for healthy snacking and culinary uses Create creamy smoothies or nutritious juice blends Add crunch and flavor to any salad or dish Enhance your recipes with the natural sweetness of pears', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7c007d25-96ce-400b-9e46-174710228653.e6247a95311f10e7dd02060065b7e9f3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c007d25-96ce-400b-9e46-174710228653.e6247a95311f10e7dd02060065b7e9f3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c007d25-96ce-400b-9e46-174710228653.e6247a95311f10e7dd02060065b7e9f3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47230052, 'French\'s Tomato Ketchup, 38 oz (3 Pack)', 8.91, '041500962832', 'Enjoy French\'s Tomato Ketchup on a wide variety of foods including burgers, fries and hot dogs. It is cholesterol free and made without high fructose corn syrup. With only real ingredients, it is free from preservatives as well as artificial flavors and colors. Made using U.S. farm-grown tomatoes, it offers delicious flavor in every bite. It is kosher certified and has no fat. This gluten-free tomato ketchup comes in a family size bottle.', 'French\'s Tomato Ketchup: Free from high fructose corn syrup Tomato ketchup bottle contains the wonderful flavor of U.S. farm-grown tomatoes Free from preservatives, artificial flavors, colors and gluten Enjoy on a wide variety of foods Kosher certified Family size bottle Wonderful taste Real ingredients 0 grams of fat Cholesterol free 38 oz', 'French\'s', 'https://i5.walmartimages.com/asr/32557797-1e0a-4766-9b20-70a3d0efb15f_1.c75f682f387ac351217e95a613dca67b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32557797-1e0a-4766-9b20-70a3d0efb15f_1.c75f682f387ac351217e95a613dca67b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32557797-1e0a-4766-9b20-70a3d0efb15f_1.c75f682f387ac351217e95a613dca67b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47234816, '(6 pack) (6 Pack) Del Monte Tomato Wedges, 14.5 Oz', 8.09, '113102829858', 'Del MonteÃÂâÂÂÃÂî Tomato Wedges. It is natural source of vitamin C, a powerful antioxidant. It contains no artificial avors or preservatives.', 'Del Monte Tomato Wedges. Del MonteÃÂâÂÂÃÂî Tomato Wedges. Quality. Net wt 14.5 oz. (411g). Our garden\'s best, to brighten your plate. Natural source of vitamin C, a powerful antioxidant. No artificial avors or preservatives. Please recycle. Questions or comments? Call 1-800-543-3090 (Mon-Fri). For recipes and more, visit www.delmonte.com. ÃÂâÂÂÃÂéDel Monte Foods.', 'Del Monte', 'https://i5.walmartimages.com/asr/b88d7728-4869-4797-970c-f7d0b892a5ab_1.1c4ec93186e7f337c43d9d897cd3b285.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b88d7728-4869-4797-970c-f7d0b892a5ab_1.1c4ec93186e7f337c43d9d897cd3b285.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b88d7728-4869-4797-970c-f7d0b892a5ab_1.1c4ec93186e7f337c43d9d897cd3b285.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47308009, 'Whole Fresh Fingerling Potatoes, 1.5 lb Bag', 3.47, '826429906156', 'Fingerling Potatoes, 1.5 Lb. Add a gourmet touch to your meals with these 1.5 lb. bags of versatile fingerling potatoes. Perfect for roasting, boiling, or sautéing, their thin skin and nutty, buttery taste pair well with various herbs and seasonings. Elevate your dishes and impress your guests with these delicious, easy-to-prepare fingerlings, a delightful addition to any dinner table.', 'Fresh Fingerling Potatoes 1.5 Lb Bag Add a gourmet touch to your meals with these 1.5 lb. bags of versatile fingerling potatoes. Perfect for roasting, boiling, or sautéing, their thin skin and nutty, buttery taste pair well with various herbs and seasonings. Elevate your dishes and impress your guests with these delicious, easy-to-prepare fingerlings, a delightful addition to any dinner table. Find these at your local Walmart!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/309c4754-90fa-4231-b455-1e93c4483e00.2c93acef6cea47187e840b9c675e8459.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/309c4754-90fa-4231-b455-1e93c4483e00.2c93acef6cea47187e840b9c675e8459.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/309c4754-90fa-4231-b455-1e93c4483e00.2c93acef6cea47187e840b9c675e8459.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47308010, 'King Rustic Potatoes, 10 lbs', 5.94, '024617700108', '', 'King Rustic Potatoes, 10 lbs', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7c7c06ce-1ae7-4088-bb47-f4458a86bdfe_1.b1c0f8ea77a6a9611f75c90a35f70d29.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c7c06ce-1ae7-4088-bb47-f4458a86bdfe_1.b1c0f8ea77a6a9611f75c90a35f70d29.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c7c06ce-1ae7-4088-bb47-f4458a86bdfe_1.b1c0f8ea77a6a9611f75c90a35f70d29.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47308012, 'Fresh Whole Small Potatoes, 5 lbs', 2, '033383530147', 'Introducing our Small Potatoes 5 lbs pack, a versatile and nutritious addition to your pantry. These petite yet flavorful potatoes are perfect for a variety of dishes, from delicious appetizers to satisfying mains. Boil, roast, or fry them to create mouthwatering meals for your family and friends. Grown with care and hand-selected for quality, our Small Potatoes 5 lbs pack offers you the best in taste and freshness, making them a must-have staple for every kitchen.', 'Small Potatoes, 5 lbs Introducing our Small Potatoes 5 lbs pack, a versatile and nutritious addition to your pantry. These petite yet flavorful potatoes are perfect for a variety of dishes, from delicious appetizers to satisfying mains. Boil, roast, or fry them to create mouthwatering meals for your family and friends. Grown with care and hand-selected for quality, our Small Potatoes 5 lbs pack offers you the best in taste and freshness, making them a must-have staple for every kitchen.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/50e2a8e4-d19d-4645-9caf-0c3a8f68f0b2.546f1b6919f92a19b17005ce9f0d057b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/50e2a8e4-d19d-4645-9caf-0c3a8f68f0b2.546f1b6919f92a19b17005ce9f0d057b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/50e2a8e4-d19d-4645-9caf-0c3a8f68f0b2.546f1b6919f92a19b17005ce9f0d057b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47308014, 'King Pak Whole Fresh Golden Potatoes 160 oz. Bag', 10.98, '605806002236', 'King Pak Golden Potatoes are a versatile and delicious ingredient that can be used in a variety of dishes. This 160 oz. (10 lbs) bag contains a generous amount of golden potatoes, making it perfect for large families, meal planning, or for those who simply enjoy incorporating potatoes into their meals. Golden potatoes, also known as yellow potatoes, are known for their smooth, slightly waxy texture and buttery flavor. They are a great all-purpose potato, suitable for various cooking methods such as boiling, baking, roasting, and frying.', 'Fresh King Pak Golden Potatoes are a versatile and delicious ingredient that can be used in a variety of dishes. This 160 oz. (10 lbs) bag contains a generous amount of golden potatoes, making it perfect for large families, meal planning, or for those who simply enjoy incorporating potatoes into their meals. Golden potatoes, also known as yellow potatoes, are known for their smooth, slightly waxy texture and buttery flavor. They are a great all-purpose potato, suitable for various cooking methods such as boiling, baking, roasting, and frying.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6728348a-f754-44ae-93cd-0743b4cadd26.b43807451fec54cc07921c982ca25d15.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6728348a-f754-44ae-93cd-0743b4cadd26.b43807451fec54cc07921c982ca25d15.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6728348a-f754-44ae-93cd-0743b4cadd26.b43807451fec54cc07921c982ca25d15.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47314766, 'Fresh White Nectarine, Each', 0.76, '850892002541', 'Discover the delightful sweetness of these Fresh White Nectarines. Enjoy them on their own as a sweet snack or use them in a variety of recipes. For breakfast, you could slice them to put into your oatmeal or use them to make a delicious yogurt parfait. You can also use these fresh nectarines in several baking recipes including a comforting crisp topped with ice cream, a tasty upside-down cake, or a scrumptious tart. You can even use them to make a jam or a smooth sorbet. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Fresh White Nectarines.', 'Fresh White Nectarine, Each Enjoy on their own as a satisfying snack Bag Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Slice as a sweet topping for waffles or pancakes Add to iced tea to create a refreshing summertime flavor', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5885f7a0-9ea1-47f8-94cc-8434f0cc5344.25ca231d45cd1f96b34be3024d8fa151.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5885f7a0-9ea1-47f8-94cc-8434f0cc5344.25ca231d45cd1f96b34be3024d8fa151.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5885f7a0-9ea1-47f8-94cc-8434f0cc5344.25ca231d45cd1f96b34be3024d8fa151.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47314798, 'Fresh Blackberries, 6 oz. Container', 2.37, '033383211053', 'The sweet, juicy flavor of Fresh Blackberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes or yogurt, bake them into mouthwatering blackberry cobbler, mix them with other fruit for a light and flavorful salad, or add them to a creamy smoothie. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin K and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them with cool water and enjoy the fresh taste. Refrigerate the berries to keep them fresh and ready for use. Pick up a Fresh Blackberry container today and savor the delectable flavor.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Blackberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Blackberries are plump, juicy, and bursting with natural sweetness. The versatility of blackberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these tasty gems into your baking endeavors, whether it\'s cobblers, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are blackberries delicious, but they also offer an array of health benefits. Loaded with vitamins and dietary fiber, blackberries are are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Blackberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Blackberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Multiple', 'https://i5.walmartimages.com/asr/793944b7-a276-4e20-af31-f1c8b32ad824.d9f7092e633054695c13dd73233d3769.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/793944b7-a276-4e20-af31-f1c8b32ad824.d9f7092e633054695c13dd73233d3769.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/793944b7-a276-4e20-af31-f1c8b32ad824.d9f7092e633054695c13dd73233d3769.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47376050, 'Fresh Pie Pumpkin, Each (Approx. 1.7 - 2.8 lb)', 2.62, '400094768631', 'Celebrate the arrival of fall by making something delicious with these Fresh Pie Pumpkin, Each (Approx. 1.7 - 2.8 lb). These colorful pumpkins may be used as decor, carved into jack-‘o-lanterns, painting crafts or incorporated into a variety of recipes. Use them to make tasty pumpkin bread, muffins, or a crowd-pleasing pie. Create a vibrant display by placing these pumpkins near a hay bale and adding colorful fall foliage and an assortment of sunflowers. You could also use them to make a heartwarming centerpiece on your buffet table as you welcome friends and family into your home for Thanksgiving. The fall decorating and culinary opportunities are endless with these Fresh Pie Pumpkins, Each.', 'Fresh Pie Pumpkin, Each (Approx. 1.7 - 2.8 lb) Fresh pumpkins for decor, carving, or using in recipes Pumpkin sizes, shapes, and weights vary Weighs approximately 1.7-2.8 lbs Approximately 4.5\"-7\" in width Approximately 4.5\"-8\" tall Gather everyone around and carve something amazing Use to create a vibrant display on your front porch Make a centerpiece for your Thanksgiving buffet table', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ed14fbbe-ee4d-46a4-8f9b-d92bd353e77c.73f62b896bdd2e99c43b3eeba1d417c1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed14fbbe-ee4d-46a4-8f9b-d92bd353e77c.73f62b896bdd2e99c43b3eeba1d417c1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed14fbbe-ee4d-46a4-8f9b-d92bd353e77c.73f62b896bdd2e99c43b3eeba1d417c1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47376051, 'Mini Tiger Striped Pumpkins, Fresh Decorative Gourds, 3 Count Bag', 3.28, '892961001550', 'Celebrate the season with these Fresh Mini Tiger Striped Pumpkins. Each 3-count bag includes naturally striped orange and white pumpkins, perfect for bringing a festive autumn touch to your home décor. Use them to style a Thanksgiving centerpiece, add charm to your Halloween decorations, or brighten your porch display alongside mums and hay bales. Their compact size and bold striping also make them ideal for craft projects and DIY seasonal activities.', 'Fresh mini pumpkins with natural orange and white stripes Perfect for fall décor, Halloween displays, and Thanksgiving tables Great for porch styling, table centerpieces, or seasonal party décor Ideal size for crafting, kids’ projects, and DIY decorations Convenient 3-count bag for easy seasonal decorating', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2583c182-b03c-47e4-8889-7a5b695f537a.f253d2ab6143a87c336d9630ecff60eb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2583c182-b03c-47e4-8889-7a5b695f537a.f253d2ab6143a87c336d9630ecff60eb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2583c182-b03c-47e4-8889-7a5b695f537a.f253d2ab6143a87c336d9630ecff60eb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47376052, 'Fresh Mini Pumpkins, 5 Count Bag, Whole Seasonal Fall Décor', 3.28, '835375006971', 'Fresh Mini Pumpkins add festive style to your seasonal decorating. This 5 count bag includes whole pumpkins in petite sizes that bring natural color and texture to your fall décor. Use them to create a warm table centerpiece, brighten your front porch, or accent a Halloween display. Fresh Mini Pumpkins are a versatile way to celebrate autumn, offering a classic and natural look that enhances your home for Halloween, Thanksgiving, and everyday fall decorating.', 'Fresh mini pumpkins perfect for fall and holiday decorating Includes 5 whole pumpkins in each bag Ideal for Halloween displays, Thanksgiving tables, and seasonal centerpieces Naturally varies in size and shape for a unique look Great for porch decorating, entryways, or indoor accents Adds natural autumn color and texture to home décor', 'Fresh Produce', 'https://i5.walmartimages.com/asr/86481a1e-1b20-49d5-bc10-f000710664d0.1b2da0371ca20395464321b3250cf76d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/86481a1e-1b20-49d5-bc10-f000710664d0.1b2da0371ca20395464321b3250cf76d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/86481a1e-1b20-49d5-bc10-f000710664d0.1b2da0371ca20395464321b3250cf76d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47428850, 'Fresh Carving Pumpkin, Each', 3.97, '687615323238', 'Celebrate the arrival of fall by decorating with Fresh Carving Pumpkins, Each. These pumpkins may be used as decor, carved into jack-\'o-lanterns, or incorporated into a variety of recipe as dish settings! Create a vibrant display throughout your home and outside to showcase the fall season! You could also use them to make a heartwarming centerpiece on your buffet table as you welcome friends and family into your home for Thanksgiving. For a Halloween display, arrange them around a creepy scarecrow surrounded by spiders and cobwebs. The fall decorating opportunities are endless with these Carving Pumpkins.', 'Fresh pumpkins for decor, carving, or using in recipes Pumpkin sizes, shapes, and weights vary Weighs approximately 14-18 lbs Approximately 9.5\"-18\" in width Approximately 9.5\"-20\" tall Gather everyone around and carve something amazing Use to create a vibrant display on your front porch Make a centerpiece for your Thanksgiving buffet table', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f3d4664c-d7a9-4b61-903e-8ab908f00e08.09d2190a2dfd71c6cc73dafd968ab501.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3d4664c-d7a9-4b61-903e-8ab908f00e08.09d2190a2dfd71c6cc73dafd968ab501.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3d4664c-d7a9-4b61-903e-8ab908f00e08.09d2190a2dfd71c6cc73dafd968ab501.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47770124, 'Fresh Produce Whole Color Bell Peppers, 3 Count Bag', 2.47, '057836000049', 'Enhance your meals with the delicious flavor of Fresh Produce Whole Color Bell Peppers, 3 Count Bag. Dice these colorful bell peppers and put them in a hearty chili, slice them and add to a deli sandwich, saute them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly sliced steak and serve with rice. A hollowed-out bell pepper can be filled with sausage, mushrooms, and rice to create a delicious stuffed pepper that will have the family asking for seconds. With so many ways to prepare them, Fresh Color Bell Peppers are an excellent fresh produce vegetable to have on hand. Also known as Pimiento morrón, Capsicum, Filfil and Shimla mirch around the world.', 'Fresh Produce Whole Color Bell Peppers, 3 Count Bag Add to your favorite recipe, sandwith or raw Can also be great sliced and serve with your favorite dip Loaded with vitamin C and High in vitamin A Also known as Pimiento morrón, Capsicum, Filfil and Shimla mirch around the world Wash before eating', 'Fresh Produce', 'https://i5.walmartimages.com/asr/35eb8263-09ad-4149-8d97-51a0f44ff4da.e978648f96e2f9deff03d9a1742f8bb8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35eb8263-09ad-4149-8d97-51a0f44ff4da.e978648f96e2f9deff03d9a1742f8bb8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35eb8263-09ad-4149-8d97-51a0f44ff4da.e978648f96e2f9deff03d9a1742f8bb8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47770140, 'Fresh Red Seedless Grapes, Bag (2.25 lbs/Bag Est.)', 3.65, '000000040235', 'Treat yourself to the delicious, juicy flavor of Fresh Red Seedless Grapes Bag. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Red Seedless Grapes.', 'Fresh Red Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8e59c7de-1534-42f6-8ac7-9460aa0b45c4.f17a453b10f3c60533eef3abb0d7519a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e59c7de-1534-42f6-8ac7-9460aa0b45c4.f17a453b10f3c60533eef3abb0d7519a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e59c7de-1534-42f6-8ac7-9460aa0b45c4.f17a453b10f3c60533eef3abb0d7519a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (47885458, 'Golden State Fruit Fresh Imperial Comice Pears Gift Box with Holiday Ribbon', 28.35, '819354011699', 'The Golden State Fruit Imperial Comice Pears With Holiday Ribbon, 9 pc. can offer you a tasty way to spoil a loved one. It is filled with exotic produce for your family to enjoy. The Golden State Fruit box includes favorites like 9 fresh Comice pears. It comes with a green ribbon wrapped around it to add an elegant touch. The Golden State gift box can be personalized with a gift message too. The Golden State Fruit Imperial Comice Pears With Holiday Ribbon is packed fresh to order.', 'Golden State Fruit Imperial Comice Pears With Holiday Ribbon, 9 pc.: Includes: 9 fresh Comice pears Exotic fresh fruit basket full of warm climate cheer, a sweet way to send a basket of sunshine Comes with a green ribbon wrapped around it to add an elegant touch The Golden State gift box can be personalized with a gift message too All Golden State Fruit gift baskets are packed fresh to order', 'Golden State Fruit', 'https://i5.walmartimages.com/asr/137d4369-b680-4a8c-8281-a82d94f3e153.f394cafefb7eed242afb4c1cc0f43004.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/137d4369-b680-4a8c-8281-a82d94f3e153.f394cafefb7eed242afb4c1cc0f43004.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/137d4369-b680-4a8c-8281-a82d94f3e153.f394cafefb7eed242afb4c1cc0f43004.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (48387918, 'Fresh Medley Baby Potatoes, 1.5 lb Bag', 3.44, '045255141214', 'These Fresh Medley Baby Potatoes are a must-have for any pantry. With so many ways to prepare potatoes, you\'ll want to add them to every meal. For breakfast, you could make crispy hash browns smothered in cheese and diced ham or add them to a savory omelet. For lunch or dinner, you could use these fresh potatoes to make au gratin potatoes, garlic mashed potatoes, or a baked potato loaded with cheese, sour cream, green onions, and bacon bits. If you\'re hosting a neighborhood get-together, you can use them to make creamy potato salad or homestyle French fries. Serve up something delicious when you cook with Fresh Medley Baby Potatoes.', 'Must-have addition to every pantry Make crispy hash browns or add to an omelet Serve garlic mashed potatoes or a loaded baked potato Great for potato salad or homestyle French fries Explore all the delicious ways to serve these satisfying potatoes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3cedd9db-c8e1-4554-b16c-482da1c88284.be74438395a31e32cb6bafa534ea8885.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cedd9db-c8e1-4554-b16c-482da1c88284.be74438395a31e32cb6bafa534ea8885.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cedd9db-c8e1-4554-b16c-482da1c88284.be74438395a31e32cb6bafa534ea8885.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (48676864, 'Baby Roma Tomatoes, 1 pint', 2.78, '069905880025', 'Italian for wholesome and full of goodness, Mucci Farms Sano Baby Roma Tomatoes have a genuine authentic tomato flavor. They are bigger than grape tomatoes, but smaller than plum tomatoes (in the shape of miniature pears).*NEW_LINE*They are great for using whole in salads or sauce recipes that call for a great-tasting, naturally sweet small tomato.', 'talian for wholesome and full of goodness, Mucci Farms Sano Baby Roma Tomatoes have a genuine authentic tomato flavor. They are bigger than grape tomatoes, but smaller than plum tomatoes (in the shape of miniature pears).They are great for using whole in salads or sauce recipes that call for a great-tasting, naturally sweet small tomato.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/711d3e2b-560f-4043-9bab-83cfc6fc3736.fbeef82316a7e530f9e9b6ae05e2a53e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/711d3e2b-560f-4043-9bab-83cfc6fc3736.fbeef82316a7e530f9e9b6ae05e2a53e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/711d3e2b-560f-4043-9bab-83cfc6fc3736.fbeef82316a7e530f9e9b6ae05e2a53e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (48676919, 'The Little Potato Company Onion Medley Griller Potatoes, 1.0 lb', 5.62, '629307015649', 'The Little Potato Company is focused solely on carefully selecting and growing little potatoes that have outstanding flavors, great texture, and better nutrition. The unique, proprietary potato varieties are harvested when they\'re mature and at their best. You can taste the difference!', 'The Little Potato Company Onion Medley Griller Potatoes, 1.0 lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f0c6c80a-a378-40d2-a481-6a091a3b0d5b_1.ca67f57ba889bbfced2e635e38eca7a3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f0c6c80a-a378-40d2-a481-6a091a3b0d5b_1.ca67f57ba889bbfced2e635e38eca7a3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f0c6c80a-a378-40d2-a481-6a091a3b0d5b_1.ca67f57ba889bbfced2e635e38eca7a3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (48676922, 'The Little Potato Company Baby Boomer Yellow Potatoes, 1.5 lb', 3.84, 'deleted_629307121746', 'The Little Potato Company is focused solely on carefully selecting and growing little potatoes that have outstanding flavors, great texture, and better nutrition. The unique, proprietary potato varieties are harvested when they\'re mature and at their best. You can taste the difference!', 'The Little Potato Company Baby Boomer Yellow Potatoes, 1.5 lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5caa1209-ae11-4683-8322-eb00c603bdbf.13200e3997cecef283897f4181721e14.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5caa1209-ae11-4683-8322-eb00c603bdbf.13200e3997cecef283897f4181721e14.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5caa1209-ae11-4683-8322-eb00c603bdbf.13200e3997cecef283897f4181721e14.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (48676923, 'Little Potato Company Blushing Belle Fresh Whole Red Baby Potatoes, 1.5 lb Bag', 3.44, 'deleted_629307121944', 'Originally bred in Germany by one of the oldest breeding companies in Europe, Blushing Belle is extremely versatile, and adapts well to a variety of cooking methods. Named after its blushing red skin and buttery yellow flesh, Blushing Belle delivers a soft, light texture with mild, delicate flavor. Excellent roasted or mashed. The Little Potato Company is focused solely on carefully selecting and growing little potatoes that have outstanding flavors, great texture, and better nutrition. The unique, proprietary potato varieties are harvested when they\'re mature and at their best. You can taste the difference!', 'The Little Potato Company Blushing Belle Red Potatoes,Fresh 1.5 lb Originally bred in Germany by one of the oldest breeding companies in Europe, Blushing Belle is extremely versatile, and adapts well to a variety of cooking methods. Named after its blushing red skin and buttery yellow flesh, Blushing Belle delivers a soft, light texture with mild, delicate flavor. Excellent roasted or mashed. The Little Potato Company is focused solely on carefully selecting and growing little potatoes that have outstanding flavors, great texture, and better nutrition. The unique, proprietary potato varieties are harvested when they\'re mature and at their best. You can taste the difference!', 'The Little Potato Company', 'https://i5.walmartimages.com/asr/23ad38e3-027f-4998-ac08-165346d96dfa.91c9ca445bdb888daa75f2370e7a1fbb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/23ad38e3-027f-4998-ac08-165346d96dfa.91c9ca445bdb888daa75f2370e7a1fbb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/23ad38e3-027f-4998-ac08-165346d96dfa.91c9ca445bdb888daa75f2370e7a1fbb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49238696, 'The Little Potato Company Three Cheese Potatoes, 1 Lb.', 3.97, '629307016042', 'Potatoes, Three Cheese, Tray 1 LB New. Microwave ready. Fresh creamer potatoes with seasoning pack. 5 min. Good source of potassium. Gluten free. 8% DV of fiber for serving. A savory blend of rich parmesan, romano and cheddar cheese. In 1996, when my father and I introduced these flavorful little potatoes, we grew a one-acre plot that we harvested, washed and bagged by hand. Since then, we focus solely on selecting and growing creamer potatoes that are outstanding in taste, nutrition and texture. It\'s all we do. Our proprietary varietals are harvested when they are mature and at their best. My family and I still enjoy the original, diverse taste of these exceptional Creamer potatoes, and I am excited to share them with you. - Angela, co-founder and chief potato champion. 90 calories per serving. 4% DV of vitamin C. Naturally fat-free. Cholesterol free. Contains no artificial flavors or colors. LittlePotatoes.com. Facebook. Twitter. Pinterest. Instagram. These potatoes are washed and ready to cook. Do not puncture or remove the plastic film before cooking. 1. Remove cardboard sleeve and seasoning pack. 2. Place tray in microwave. Cook on high for 5 minutes (cooking times may vary). 3. Let rest 2 minutes then carefully remove plastic film and stir in seasoning pack. If desired, add 2 tbsp of butter or oil. Caution - contents will be hot. Serve and enjoy! To help retain freshness, please store in a cool, dry and dark place. Contains: milk. 16 oz (1 lb) 454 g Edmonton AB Canada T5S 2H6 855-516-6075', 'The Little Potato Company Three Cheese Potatoes, 1.0 lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/563e1dc9-13c0-4b9e-ae61-e299dfe7e6d2.663bc23f9c783ff05e8827f1f8a7aa19.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/563e1dc9-13c0-4b9e-ae61-e299dfe7e6d2.663bc23f9c783ff05e8827f1f8a7aa19.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/563e1dc9-13c0-4b9e-ae61-e299dfe7e6d2.663bc23f9c783ff05e8827f1f8a7aa19.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49342262, 'Melissa\'s Organic Baby Garnet Yams, 16 oz', 2.96, '045255139518', 'Yams, Baby Garnet, Organic, Pouch 16 OZ www.melissas.com. USDA organic. Certified organic by CCOF. Product of USA. 16 oz (1 lb) 454 g Los Angeles, CA 90051 800-588-0151', 'Baby Garnet Yams USDA Organic. www.melissas.com. Certified Organic by: CCOF. Product of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ac2d74a5-4ef7-4265-9600-6bd2471750ae_1.ab9028cd34f3cdca3232a7236f4f711e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac2d74a5-4ef7-4265-9600-6bd2471750ae_1.ab9028cd34f3cdca3232a7236f4f711e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac2d74a5-4ef7-4265-9600-6bd2471750ae_1.ab9028cd34f3cdca3232a7236f4f711e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49342263, 'Melissa\'s Organic Baby Jewel Yams, 16 oz', 2.96, '045255139525', '', 'Melissa\'s Organic Baby Jewel Yams: Beautiful color and rich flavor USDA Organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7ee8f2f1-9d77-42a6-b953-919cae2bd62d.1ffcb09d2fe6780bc602ee0142cb26e1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7ee8f2f1-9d77-42a6-b953-919cae2bd62d.1ffcb09d2fe6780bc602ee0142cb26e1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7ee8f2f1-9d77-42a6-b953-919cae2bd62d.1ffcb09d2fe6780bc602ee0142cb26e1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49342264, 'Melissa\'s Organic Baby Sweet Potatoes, 16 oz', 2.96, '045255139532', '', 'Melissa\'s Organic Baby Sweet Potatoes: Beautiful color and rich flavor Beautiful color and rich flavorUSDA Organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/da91c3ba-c8be-4b07-900c-66509ca8c8ab_1.bc2065a2081c6f441cdb59075f46d259.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/da91c3ba-c8be-4b07-900c-66509ca8c8ab_1.bc2065a2081c6f441cdb59075f46d259.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/da91c3ba-c8be-4b07-900c-66509ca8c8ab_1.bc2065a2081c6f441cdb59075f46d259.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49342265, 'Melissa\'s Organic Baby Japanese Yams, 16 oz', 2.96, '045255142129', '', 'Yams, Baby Japanese USDA Organic. Certified Organic By: California Certified Organic Farmers. www.melissas.com. Product of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8018106e-837b-4317-8b46-de65f2d62175.1fee2de592bc97d02527f8b9058c8eca.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8018106e-837b-4317-8b46-de65f2d62175.1fee2de592bc97d02527f8b9058c8eca.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8018106e-837b-4317-8b46-de65f2d62175.1fee2de592bc97d02527f8b9058c8eca.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49358464, 'Melissa\'s Fingerling Potato Medley, 24 oz', 3.67, '045255135732', 'Potato Medley, Fingerling, Bag 24 OZ Beautiful color and rich flavor. Great grilled, roasted, or in salads! US mixed. Recipes: melissas.com. Good Life Food. Melissa\'s Fingerling Potatoes are great in potato salads or as a savory side dish. They have exceptional texture and flavor when baked, roasted, boiled, steamed, sauteed or mashed. Try them in your favorite potato recipe. Please contact us or visit our website for delicious recipes. www.melissas.com. Product of USA. Store in a cool, dry place. 24 oz (1.5 lbs) 680 g Los Angeles, CA 90051 800-588-0151', 'Melissa\'s Fingerling Potato Medley:Buttery, thin-skinned fingerling potatoesBeautiful color and rich flavorHigh in vitamin CGood source of potassiumGreat grilled, roasted, or in salads', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2dbf54bf-e8e2-4d64-98dc-751fbf0b574d_1.088d9a0b8f9aae6e0b298878c2b60b36.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2dbf54bf-e8e2-4d64-98dc-751fbf0b574d_1.088d9a0b8f9aae6e0b298878c2b60b36.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2dbf54bf-e8e2-4d64-98dc-751fbf0b574d_1.088d9a0b8f9aae6e0b298878c2b60b36.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49400460, 'Pineapple Spears, 2 lbs', 8.48, '077745247113', 'Experience a burst of tropical flavors with these Pineapple Chunks. The pre-cut chunks of ripe pineapple are juicy and sweet to taste and are packed in its own juice. Carry them with you and eat them straight out of the tray any time you want, at home or on-the-go. You can also use them to top desserts and ice creams, in a fruit salad or blend them with milk to make milkshakes. Pineapples are known to have a number of nutrients, and they are especially rich in vitamin C. Add some fresh fruits to your daily menu today.', 'Pineapple, Chunks www.freshdelmonte.com. Product of Costa Rica.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f3703e51-3273-4377-a950-a23e870cc846.9ceb1d49199943f7bc67c177980abea2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3703e51-3273-4377-a950-a23e870cc846.9ceb1d49199943f7bc67c177980abea2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3703e51-3273-4377-a950-a23e870cc846.9ceb1d49199943f7bc67c177980abea2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49400465, 'Marketside Fresh Cut Fruit Duo, 10 oz Tray', 6.18, '717524778727', 'Enjoy a healthy snack with these Fresh Strawberries and Blueberries. The sweet juicy strawberries pair perfectly with the tender and slightly tart blueberries to provide you with the essential nutrients and a convenient snacking option. It is a great way to add a serving of delicious fruits in your daily diet. You could also use these fresh berries as a topping for your favorite ice cream or add them to a decadent cheesecake. The fruit is packed in a secure plastic bowl with a lid, making it convenient and portable. Have an easy, healthy treat on hand with these Fresh Strawberries and Blueberries.', 'Marketside Strawberry and Blueberry Fruit Duo 10 oz Comes in a re-closable plastic container to help maintain freshness Great for breakfast, lunch, dessert, or when you want a snack No preservatives, artificial colors or artificial flavors Convenient and portable Share with friends and family or keep for yourself Make a fruit bowl topped with whipped cream or a yogurt parfait Enjoy on their own or in a variety of recipes', 'Marketside', 'https://i5.walmartimages.com/asr/297846f5-314e-44eb-ae0c-2e19cb1b951e.a58a490d0ce36b3e5bb7ff76efc812db.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/297846f5-314e-44eb-ae0c-2e19cb1b951e.a58a490d0ce36b3e5bb7ff76efc812db.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/297846f5-314e-44eb-ae0c-2e19cb1b951e.a58a490d0ce36b3e5bb7ff76efc812db.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49400484, 'Fresh Grape Tomato, 4 oz Cup', 1.42, '714581000884', 'Add color and flavor to your next salad with these personal-sized fresh Grape Tomatoes. Similar to larger tomatoes, grape tomatoes have a lower water content than other snacking tomatoes, making them meatier and more flavorful, as well as less likely to make a mess when you bite into them. They are perfectly bite-sized which makes them not only ideal in salads and salsas but also perfect as a delicious and convenient snack all on their own. Plus, these small tomatoes also have a longer shelf-life, making it easy to store them for several days at a time and they are hardier and less fragile than a traditional tomato, meaning you no longer have to worry about bruising. Be sure to pick up Grape Tomatoes and experience just how convenient enjoying tomatoes can be.', 'Grape Tomatoes, 4 oz: Lower water content and longer shelf-life than cherry tomatoes Fresh produce Hardier and more resistant to bruising than traditional tomatoes Conveniently bite-sized Quick and excellent addition to salads and snack trays Best stored at room temperature out of sunlight', 'Fresh Produce', 'https://i5.walmartimages.com/asr/03c6a972-a393-4d91-b327-ceb4f03c465c.3ea08772d2d38cb4a989be66a8a1e104.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/03c6a972-a393-4d91-b327-ceb4f03c465c.3ea08772d2d38cb4a989be66a8a1e104.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/03c6a972-a393-4d91-b327-ceb4f03c465c.3ea08772d2d38cb4a989be66a8a1e104.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49509903, 'Cal-Organic Farms Organic Carrots, 80.0 oz', 3.96, '032601044008', 'Cal-Organic Farms® Organic Carrots. The best selected carrots. The USDA certified organic product.', 'USDA OrganicCal-Organic Farms® Organic Carrots.Healthy by choice.Since 1984.USDA Organic.Net wt 80 oz 5 lb 2.27 kg.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/44923803-21f1-41d6-9397-a1fc31f20ab3.0267ee6e021b22f8ea95949149059721.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44923803-21f1-41d6-9397-a1fc31f20ab3.0267ee6e021b22f8ea95949149059721.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44923803-21f1-41d6-9397-a1fc31f20ab3.0267ee6e021b22f8ea95949149059721.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49509904, 'New York Apple Sales Cortland Apples, 3 lbs', 3.57, '048739085233', 'New York Apple Sales Cortland Apples are full of surprises from their hint of pear flavor to their bright exterior.', 'New York Apple Sales Cortland Apples: Sweet, juicy and great for snacking Great for eating and salads, plus kabobs, fruit plates and even freezing', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f59d0814-b073-4091-881d-bcec030df721_1.ff0eb9fd63bbb57905a95634f27f5747.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f59d0814-b073-4091-881d-bcec030df721_1.ff0eb9fd63bbb57905a95634f27f5747.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f59d0814-b073-4091-881d-bcec030df721_1.ff0eb9fd63bbb57905a95634f27f5747.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49509905, 'New York Apple Sales Cortland Apples, 5 lbs', 4.92, '033383085074', 'New York Apple Sales Cortland Apples are full of surprises from their hint of pear flavor to their bright exterior.', 'Cortland Apples, 5 lb bag', 'Unbranded', 'https://i5.walmartimages.com/asr/02394829-d2ff-426e-aee1-a876ef9f5d52.cede18c89558b7fcbe50023ce6a89dbf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/02394829-d2ff-426e-aee1-a876ef9f5d52.cede18c89558b7fcbe50023ce6a89dbf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/02394829-d2ff-426e-aee1-a876ef9f5d52.cede18c89558b7fcbe50023ce6a89dbf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49509906, 'Hudson River Fruit New York Empire Apples, 5.0 LB', 4.92, '736264000233', 'Hudson River Fruit New York Empire Apples. EST 1963. Distributors.', 'APPLE EMPIRE 5# 5 OH', 'Hudson River Fruit Distributors', 'https://i5.walmartimages.com/asr/129e5756-976c-4667-8f77-61c3406fa04d_1.b3cbe9690bec8806e15a2d88000db0b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/129e5756-976c-4667-8f77-61c3406fa04d_1.b3cbe9690bec8806e15a2d88000db0b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/129e5756-976c-4667-8f77-61c3406fa04d_1.b3cbe9690bec8806e15a2d88000db0b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49510903, 'Plantains, 2 count', 0.5, 'deleted_000000031707', 'Delicious plantains have long been a traditional staple food in many tropical cultures. Chiquita Plantains are perfect to use at any stage of ripeness as a main or side dish, snack, or dessert. If green, fry them. If yellow, grill them.', 'Chiquita Plantains: Contains major vitamin groups Full of potassium Variety of uses for each stage of ripeness', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f51e4476-d789-4d83-8851-268f3e168715_1.cbe81b7613132b15a6cbc08f02533d60.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f51e4476-d789-4d83-8851-268f3e168715_1.cbe81b7613132b15a6cbc08f02533d60.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f51e4476-d789-4d83-8851-268f3e168715_1.cbe81b7613132b15a6cbc08f02533d60.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49511107, 'Marketside Fresh Organic Gold Potatoes, 3 lb Bag', 4.97, '078783908059', 'Marketside Organic Gold Potatoes are the perfect addition to your pantry. These organic gold potatoes are yellow with light brown skin and are suitable for baking, boiling and frying. They also fry up crisp and golden brown, and the buttery and smooth texture of baked gold potatoes go well with sour cream, chives and Latin or Mediterranean flavors. The semi-firm and moist flesh goes well in soups and chowders. Gold potatoes are also an excellent source of vitamin C and are fat, sodium and cholesterol free. This fresh produce item can last up to 3 to 5 weeks in a cool, dry pantry. Add a healthy starch to your diet today with this three-pound bag of Organic Gold Potatoes by Marketside. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Fresh Organic Gold Potatoes, 3-pound Bag USDA Organic Excellent roasted, stewed or baked Excellent source of vitamin C Delicious fresh produce', 'Marketside', 'https://i5.walmartimages.com/asr/59e5ed9c-009c-453d-b483-e3acd0858f3e.ddc79b736a99cc1bbfc3502efd4a00e8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59e5ed9c-009c-453d-b483-e3acd0858f3e.ddc79b736a99cc1bbfc3502efd4a00e8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59e5ed9c-009c-453d-b483-e3acd0858f3e.ddc79b736a99cc1bbfc3502efd4a00e8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49658301, 'Marketside Fresh Seedless Whole Grapes, 10 oz Tray, Ready-to-Eat', 3.63, '826766254002', 'Experience a burst of goodness with these Marketside Seedless Grapes. Carry it with you and eat the fruit straight out of the package any time you want, at home, or on-the-go. Pair with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use them as a naturally sweet ingredient in a fruit salad. Add some fresh fruit to your day with this 10-ounce package of Marketside Seedless Grapes. Marketside provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Marketside item.', '10-ounce Tray package of fresh seedless grapes Keep refrigerated until ready to eat Add to a delicious fruit salad Re-closable package helps maintain freshness Great for a quick snack or for packing in lunches Convenient and ready to eat', 'Marketside', 'https://i5.walmartimages.com/asr/74df5c98-a967-4055-b0da-64e9faf5f1ff.56d3d6f9cb4c9671335e987ee0b09f7b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/74df5c98-a967-4055-b0da-64e9faf5f1ff.56d3d6f9cb4c9671335e987ee0b09f7b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/74df5c98-a967-4055-b0da-64e9faf5f1ff.56d3d6f9cb4c9671335e987ee0b09f7b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49658345, 'Apple Country New York State Macoun Apples, 5 lbs', 4.92, '879329003579', '', 'Apple Country New York State Macoun Apples: Extra sweet and aromatic Great for eating, baking, sauces, and salads These apples--when eaten or sliced--give off a wonderful fresh fruit flavor of autumn smell', 'Fresh Produce', 'https://i5.walmartimages.com/asr/176f4445-daac-4687-afc7-715739fe2f0d.16fabbf17e508a49d08f2ddff8f94cdc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/176f4445-daac-4687-afc7-715739fe2f0d.16fabbf17e508a49d08f2ddff8f94cdc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/176f4445-daac-4687-afc7-715739fe2f0d.16fabbf17e508a49d08f2ddff8f94cdc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (49699139, 'Marketside Fresh Cut Watermelon, 32 oz Tray', 7.36, '826766225309', 'Experience a burst of tropical flavors with some Marketside Cut Watermelon. This 32-ounce package of pre-cut ripe watermelon is juicy, sweet, and refreshing to the taste. In addition, watermelons are a great natural source of vitamins A and C. Carry them with you and eat them straight out of the tray any time you want, at home, or on-the-go. Pair them with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use them part of a fruit salad. Add some fresh fruits to your daily menu and enjoy the refreshing taste of Marketside Cut Watermelon. Marketside provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Marketside item.', 'Marketside Fresh Cut Watermelon, 32 oz Pre-Cut Convenience: Fresh, sweet, juicy watermelon chunks are ready to eat, saving you time on preparation. Portable Packaging: Comes in a 32 oz tray, making it easy to take on the go for snacks or meals. Nutrient-Rich: A good source of vitamins A and C, contributing to your daily nutritional needs. No Artificial Additives: Free from preservatives, artificial colors, and artificial flavors, ensuring a natural taste. Versatile Use: Perfect as a standalone snack, addition to fruit salads, or as a refreshing side dish. Perishable Item: Keep refrigerated to maintain freshness and quality.', 'Marketside', 'https://i5.walmartimages.com/asr/d97b530a-d558-4503-825d-be0f281cd3f3.95a5a60085a6e868f8035a1f96052942.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d97b530a-d558-4503-825d-be0f281cd3f3.95a5a60085a6e868f8035a1f96052942.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d97b530a-d558-4503-825d-be0f281cd3f3.95a5a60085a6e868f8035a1f96052942.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259163, 'Dried Guajillo Chile Peppers, Bulk per lb', 7.64, '000000047128', 'Dried Guajillo Chile is a type of dried chili pepper that is widely used in Mexican cuisine. It is a moderately hot chili that is dark red in color and has a smooth, shiny skin. The Guajillo chile has a tangy, slightly sweet flavor with notes of berry and green tea. It is often used in sauces, salsas, and marinades for meats and fresh vegetables. The Guajillo chile is also an essential ingredient in adobo sauce, a popular Mexican seasoning paste that is used to flavor meats and stews.', '-Enjoy the great flavor of Dried Guajillo Chile in Mexican style cuisine for sauces, salsas, and marinades. - Key ingredient in adobo sauce for flavoring meats and stews. - Versatile ingredient in authentic Mexican recipes, enhancing both the visual and taste appeal of dishes!.', 'Melissa\'s', 'https://i5.walmartimages.com/asr/d04a7272-a78e-4ab2-b7bd-d418338e71f4.e44afed7299a0bf1ee822b869de99bbc.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d04a7272-a78e-4ab2-b7bd-d418338e71f4.e44afed7299a0bf1ee822b869de99bbc.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d04a7272-a78e-4ab2-b7bd-d418338e71f4.e44afed7299a0bf1ee822b869de99bbc.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259190, 'Fresh Meyer Lemons, 1 lb Bag', 2.18, '405547706802', 'Meyer lemons are perfect for flavoring both savory and sweet dishes. Squeeze lemon juice into water and add to teas or use in salad dressings or sauces. Great staple for marinating fish and chicken without making them too sour. Meyer Lemons are perfect for lemon-based desserts and lemonade and require less added sugar since they are a cross between a lemon and a mandarin orange. Available in a 1-pound bag.', 'Meyer Lemons, 1 lb bag Sweeter and less acidic than conventional lemons Refreshing herbal scent Bright yellow/yellow orange with a thin tender rind', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a9d2d5df-6df6-41de-9c48-693487089f47_1.37f24f4e5945e54cd674169517939a8b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9d2d5df-6df6-41de-9c48-693487089f47_1.37f24f4e5945e54cd674169517939a8b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9d2d5df-6df6-41de-9c48-693487089f47_1.37f24f4e5945e54cd674169517939a8b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259191, 'Organic Fresh Whole Carrots, 2 lb Bag', 2.62, '681131091206', 'Add some crunch to your next snack or meal with Marketside Organic Whole Carrots. These carrots are full of flavor and certified USDA organic. Enjoy them as an ingredient in your favorite recipes or simply enjoy them as a healthy snack on the go. Make it a tasty snack and serve with celery and ranch dressing or hummus for dipping. They are only 30 calories per serving, and there are about 12 servings per package. Enjoy farm fresh flavors with Marketside Organic Whole Carrots.Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes. Also known as Zanahoria orgánica, Organic carrot, Jazar and Gajar around the world.', 'Marketside Organic Whole Carrots, 32 oz: USDA organic Wash before use Use as an ingredient in your favorite recipes Enjoy as a healthy snack 30 calories per serving About 12 servings per package Keep refrigerated', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4ccb4d13-7f9d-43c4-9044-ee855cb00418.a19543f9c2a7152d279db832d6c7f2f9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ccb4d13-7f9d-43c4-9044-ee855cb00418.a19543f9c2a7152d279db832d6c7f2f9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ccb4d13-7f9d-43c4-9044-ee855cb00418.a19543f9c2a7152d279db832d6c7f2f9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259193, 'Fresh Organic Lemons, 2 lb Bag', 4.92, '729062120272', 'Add zest and flavor to your meals and beverages with Marketside Organic Lemons. A great source of vitamin C, lemons are a staple citrus fruit essential for any kitchen. Slice them and use them in your iced or hot tea or use the lemon juice to make satisfying and refreshing strawberry lemonade. Zest the lemon peel to use in recipes such as lemon cookies or a tasty lemon loaf. You can also use lemons in savory recipes like asparagus with lemon zest or shrimp scampi with linguini. You can even use lemon peels to clean around the house. For example, use lemon peels to clean microwaves and stovetops or as an all-purpose cleaner. Enhance the flavor of your next meal with Marketside Organic Lemons. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Lemons, 2 lb Bag: Great source of vitamin C Certified USDA organic Use to add zest & flavor to your meals & beverages Add to your iced or hot tea Make a satisfying & refreshing strawberry lemonade Use lemon zest to make lemon cookies or lemon loaf Adds flavor to a variety of recipes Lemons contain more potassium than apples or grapes Lemons also contain citric acid, flavonoids, B-complex vitamins, calcium, copper, iron, magnesium, phosphorus, potassium & fiber', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f61894c0-418d-4480-aee1-75053bc0416b.2196dcd833d1991780ecf36bd299451e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f61894c0-418d-4480-aee1-75053bc0416b.2196dcd833d1991780ecf36bd299451e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f61894c0-418d-4480-aee1-75053bc0416b.2196dcd833d1991780ecf36bd299451e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259195, 'Fresh Red Grapefruit, 5 lb Bag', 5.76, '877629002766', 'The ideal balance between tart and sweet, this Fresh Red Grapefruit is great for both savory and sweet dishes any time of day. Enjoy half of a grapefruit sprinkled with sugar with some eggs in the morning for a light, sweet breakfast. Slice it up and put in a salad with spinach, avocado, and red onion topped with a mustard and balsamic vinegar dressing for lunch or dinner. Make delicious grapefruit bars that showcase the sweet and tartness of this versatile fruit. In addition, it\'s a great source of vitamin C and vitamin A. With such versatility, Fresh Red Grapefruit will become a pantry staple in your home.', 'Fresh red grapefruit is great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a grapefruit sprinkled with sugar in the morning Slice it up and put it in salad for lunch or dinner Make delicious grapefruit bars Great source of vitamin C and vitamin A', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9b84af97-6b8d-4eae-b425-f5c61f424ac5.24cc26efbf95c43c758eac871c485527.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b84af97-6b8d-4eae-b425-f5c61f424ac5.24cc26efbf95c43c758eac871c485527.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b84af97-6b8d-4eae-b425-f5c61f424ac5.24cc26efbf95c43c758eac871c485527.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259197, 'Manzana Granny Smith, 1 Lb.', 0.73, '852908002163', 'Treat yourself to the delicious, crisp taste of Granny Smith Apples. These apples are known for their bright. Enjoy one with breakfast or lunch or as a fresh snack any time of day. Best of all, these delicious apples hold up well. They are a favorite of pie bakers and can be used for snacking, salads, pairing, or made into a delicious sauce that pairs perfectly with pork. Try incorporating them into soups and compotes or using to make yummy jam or juice. Use them to create apple crisp, pie and strudel for a sweet treat. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Granny Smith Apples.', 'Fresh Granny Smith Apples, Each: Bright green skin speckled with faint white spots Bright white, crisp flesh Tart, acidic yet subtly sweet flavor Can be enjoyed fresh or cooked into both savory and sweet dishes', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/bf2ec88a-2f36-41f2-93d3-c3161772733d_1.cdc913433c6acc6bf9201dc1fa86bac9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf2ec88a-2f36-41f2-93d3-c3161772733d_1.cdc913433c6acc6bf9201dc1fa86bac9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf2ec88a-2f36-41f2-93d3-c3161772733d_1.cdc913433c6acc6bf9201dc1fa86bac9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259199, 'Organic Marketside Fresh Baby Peeled Carrots, 1 lb Bag', 1.74, '032601041007', 'Add some fresh carrots to your next meal with Marketside Organic Baby Carrots. They are cut, peeled, washed and ready to eat for your convenience. With their crunchy texture and fresh taste, they are equally good for snacking on their own. They are perfect for adding as an ingredient in stews, casseroles and soups. Serve them with grilled chicken breast and green beans, or use them in your own recipes. Enjoy with a side of ranch dressing or hummus for dipping. These baby carrots are certified organic, and are an excellent source of vitamin A. Snacking is made easy with Marketside Organic Baby Carrots. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Baby Carrots, 16 oz Cut, peeled and ready to eat USDA Organic Serve with ranch dressing or hummus for a perfect snack Excellent source of vitamin A', 'Marketside', 'https://i5.walmartimages.com/asr/0f9fb9a3-5148-4ba9-a109-e69878a6fc5c.89437a32c2a0a5f821f321a42c0bdc9f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0f9fb9a3-5148-4ba9-a109-e69878a6fc5c.89437a32c2a0a5f821f321a42c0bdc9f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0f9fb9a3-5148-4ba9-a109-e69878a6fc5c.89437a32c2a0a5f821f321a42c0bdc9f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259204, 'Fresh Anjou Pears, Each', 1.38, '204025000001', 'Treat yourself to the delicious, sweet taste of Anjou Pears. Enjoy one with breakfast or lunch or as a fresh snack any time of day. Best of all, these delicious pears have a dense flesh that holds up well when cooked. They can be used for baking, snacking, salads, pairing, or made into a delicious sauce that pairs perfectly with pork. Try incorporating them into soups and compotes or using to make yummy jam or juice. They are delicious when sliced fresh in salads or eaten out-of-hand for a refreshing snack. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Anjou Pears.', 'Fresh Anjou Pears, Each: All-purpose pears known for their juiciness Subtle sweetness with a Refreshing lemon-lime flavor Good for baking, poaching, roasting, or grilling Can be enjoyed fresh or cooked into both savory and sweet dishes All-purpose pears known for their juiciness Subtle sweetness with a Refreshing lemon-lime flavor Good for baking, poaching, roasting, or grilling Can be enjoyed fresh or cooked into both savory and sweet dishes Make a creamy smoothie or a nutritious juice blend Perfect as a healthy treat or seasonal baking ingredient Great for packing in lunches Make a creamy smoothie or a nutritious juice blend Adds flavor to a variety of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3634a46d-cbfd-41df-bb55-61dc030c5e09.9ad98c7758dd41a65f67ac3b6832e317.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3634a46d-cbfd-41df-bb55-61dc030c5e09.9ad98c7758dd41a65f67ac3b6832e317.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3634a46d-cbfd-41df-bb55-61dc030c5e09.9ad98c7758dd41a65f67ac3b6832e317.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259208, 'Fresh Whole White Onions, Each', 1.03, '853120003129', 'Add flavor to your next meal with these Fresh, Whole White Onions. For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. You can dice these onions and add them to a fresh garden salad for a satisfying crunch or sprinkle them on top of your fish tacos. White onions also make delicious golden onion rings to serve alongside juicy hamburgers and hot dogs at your next backyard barbecue. You can keep these onions at room temperature until ready to use. Stock your pantry with several Fresh, Whole, White Onions.', 'Fresh whole white onions Ideal ingredient in a variety of recipes Can be sauteed and put in your favorite foods for added flavor Use to top sandwiches, hamburgers, and hot dogs Fresh onions can be stored in a cabinet or pantry and are easy to prepare', 'Fresh Produce', 'https://i5.walmartimages.com/asr/efe28fe8-5537-45ff-9de2-bb534a963c97.00e9aa917c1121c4874b00e3fc312ec7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/efe28fe8-5537-45ff-9de2-bb534a963c97.00e9aa917c1121c4874b00e3fc312ec7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/efe28fe8-5537-45ff-9de2-bb534a963c97.00e9aa917c1121c4874b00e3fc312ec7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259209, 'Fresh Pink Lady Apples, 3lb Bag', 3.54, '033383087825', 'Treat yourself to the delicious, crisp taste of Pink Lady Apples. These apples are known for their vivid green skin covered in a pinkish blush, crunchy texture, and tart taste with a sweet finish. Enjoy one with breakfast or lunch or as a fresh snack any time of day. with Pink Lady Apples. Super tasty Fresh Produce made with organic ingredients.', 'Includes 3 pounds of tart, crisp apples Tart taste with a sweet finish Pair them with sharp cheeses and crackers for a stunning appetizer board Can be enjoyed fresh or cooked into both savory and sweet dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2f834848-c7de-4697-b719-a10e4a31d796.fdd15236d674bcf3c4916de7b1c25eb9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f834848-c7de-4697-b719-a10e4a31d796.fdd15236d674bcf3c4916de7b1c25eb9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f834848-c7de-4697-b719-a10e4a31d796.fdd15236d674bcf3c4916de7b1c25eb9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259212, 'Fresh Whole Yellow Onion, Each', 0.7, '851339002179', 'Give all of your dishes a wonderful flavor with these Fresh Yellow Onions. They can be added to all of your favorite foods including hamburgers, stir-fries, soups, and pizza and used to make onion rings and blooming onions as well. These onion vegetables can be sauteed or served raw and stored in a cool, dry area until you are ready to use them. They have a fresh taste that will put something extra in your dish. These onions are easy to peel and quick to prepare so you can serve them on your dinner plate in no time. Add these Fresh Yellow Onions to your next dish and impress others with your culinary skills.', 'Whole fresh yellow onions, each Less pungent than other varieties of onions Mild, all-purpose flavor Great for roasting, caramelizing, grilling, and more Good for long cooking times (roasts, braises, stews, etc.) Yummy addition to salads and relishes Can be made into onion confit or onion rings Packed with minerals and vitamins', 'Fresh Produce', 'https://i5.walmartimages.com/asr/980c6780-7179-491e-978f-8101cdda6760.60f5a7e656c6aea9d94f732ca795dddf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/980c6780-7179-491e-978f-8101cdda6760.60f5a7e656c6aea9d94f732ca795dddf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/980c6780-7179-491e-978f-8101cdda6760.60f5a7e656c6aea9d94f732ca795dddf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259213, 'White Onions, 2 lb bag', 3.57, 'deleted_034924000471', 'Add flavor to your next meal with this 2 lb bag of Fresh, Whole White Onions. For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. You can dice these onions and add them to a fresh garden salad for a satisfying crunch or sprinkle them on top of your fish tacos. White onions also make delicious golden onion rings to serve alongside juicy hamburgers and hot dogs at your next backyard barbecue. You can keep these onions at room temperature until ready to use. Stock your pantry with this two-pound bag of Fresh White Onions.', 'Fresh whole white onions, 2-lb bag Ideal ingredient in a variety of recipes Can be sauteed and put in your favorite foods for added flavor Use to top sandwiches, hamburgers, and hot dogs Fresh onions can be stored in a cabinet or pantry and are easy to prepare', 'Fresh Produce', 'https://i5.walmartimages.com/asr/df1d6d7c-e0f4-457c-bc12-acb5d6dcf073.c82b88c194d3bfcff3c5fddb36d61760.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/df1d6d7c-e0f4-457c-bc12-acb5d6dcf073.c82b88c194d3bfcff3c5fddb36d61760.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/df1d6d7c-e0f4-457c-bc12-acb5d6dcf073.c82b88c194d3bfcff3c5fddb36d61760.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259215, 'Fresh Whole Red Onion, Each', 0.99, '851339002186', 'Fresh Red Onions offer a delicious and simple way to add more vegetables to your diet. These onions are perfect for adding to multiple of your favorite recipes. Add them to your favorite pasta sauces; use them to top pizza; enhance the flavors of your soups, stews, and gumbo, incorporate them into meatloaf; or make delicious omelets or hearty casseroles. You can also dice them and put them in a zesty stir fry or dip the onions in batter to fry up some crowd-pleasing onion rings. Try them in a spicy salsa recipe or on your hamburgers and hot dogs. However you choose to use them, this fresh produce is a must-have for every kitchen pantry. Fresh Red Onions are tasty, versatile and the ideal choice for health-conscious individuals.', 'Fresh Red Onions offer a delicious and simple way to add more vegetables to your diet. These onions are perfect for adding to multiple of your favorite recipes. Add them to your favorite pasta sauces; use them to top pizza; enhance the flavors of your soups, stews, and gumbo, incorporate them into meatloaf; or make delicious omelets or hearty casseroles. You can also dice them and put them in a zesty stir fry or dip the onions in batter to fry up some crowd-pleasing onion rings. Try them in a spicy salsa recipe or on your hamburgers and hot dogs. However you choose to use them, this fresh produce is a must-have for every kitchen pantry. Fresh Red Onions are tasty, versatile and the ideal choice for health-conscious individuals.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6bf5e2ca-9924-4ba6-b74c-775f3f4a1f0f.e20492ce3de3076bfa0bc40c862c9c6c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6bf5e2ca-9924-4ba6-b74c-775f3f4a1f0f.e20492ce3de3076bfa0bc40c862c9c6c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6bf5e2ca-9924-4ba6-b74c-775f3f4a1f0f.e20492ce3de3076bfa0bc40c862c9c6c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259219, 'Fresh Anjou Pears, 3 lb Bag', 5.32, '804305000846', 'Treat yourself to the delicious, sweet taste of Fresh Anjou Pears. Enjoy one with breakfast or lunch or as a fresh snack any time of day. Best of all, these delicious pears have a dense flesh that holds up well when cooked. They can be used for baking, snacking, salads, pairing, or made into a delicious sauce that pairs perfectly with pork. Try incorporating them into soups and compotes or using to make yummy jam or juice. They are delicious when sliced fresh in salads or eaten out-of-hand for a refreshing snack. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Anjou Pears.', 'All-purpose pears known for their juiciness Subtle sweetness with a Refreshing lemon-lime flavor Good for baking, poaching, roasting, or grilling Can be enjoyed fresh or cooked into both savory and sweet dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/565ff93b-6c44-4a63-801c-7196dd46184d.74de9d1c4240934765b5ccc0bb694a96.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/565ff93b-6c44-4a63-801c-7196dd46184d.74de9d1c4240934765b5ccc0bb694a96.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/565ff93b-6c44-4a63-801c-7196dd46184d.74de9d1c4240934765b5ccc0bb694a96.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259223, 'Fresh Calabacita Squash, Each', 1.1, '000000047883', 'Add some fresh flavor to your meal with Calabacita Squash. This versatile vegetable can be used in a variety of dishes to create delicious and decadent meals. Roast the whole squash for a simple and flavorful side dish, chop it into cubes and put it in the slow cooker with chicken breast, kidney beans, and spices, or make noodles for a gluten-free pasta alternative. For a sweet treat turn the squash into a rich and spicy pie, perfect for the holiday season. With so many uses, this vegetable will become a pantry staple. Create tasty and flavorful meals with Calabacita Squash.', 'Versatile ingredient Roast the whole squash for the perfect side dish or chop into cubes, put into a slow cooker, and mix with chicken breast, beans, and spices for a flavorful dish Use it to create a sweet and spicy pie Will become a pantry staple', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3215e13c-345e-4a78-857c-67d6208b86b5.35c20643d7fb623f6697919e1cea88b4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3215e13c-345e-4a78-857c-67d6208b86b5.35c20643d7fb623f6697919e1cea88b4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3215e13c-345e-4a78-857c-67d6208b86b5.35c20643d7fb623f6697919e1cea88b4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259225, 'Yves Veggie Cuisine Kale & Quinoa Bites, 8.2 oz', 4.96, '060822008684', 'Kale & Quinoa Bites, Vegan, Tray 8.2 OZ Packed with veggies. Excellent source of vitamin A & C. Vegan. Gluten free. Questions? 1-800-667-Yves. www. yvesveggie.com. For recipes: yvesveggie.com/recipes. Replacing saturated fat with similar amounts of unsaturated fats may reduce the risk of heart disease. To achieve this benefit, total daily calories should not increase. Product of Canada. Conventional Oven: Place bites in a single layer on a baking sheet and bake for 13-14 mins at 400 degrees F (205 degrees C) or until heated through (Ensure internal temperature reaches at least 167 degrees F [75 degrees C]). Keep refrigerated. Manufactured in a facility that uses egg, milk and soy. 8.2 oz (235 g) Lake Success, NY 11042 800-667-YVES 2015 The Hain Celestial Group, Inc.', 'Kale & Quinoa Bites, Plant Based Good source of vitamin A & C. Non-GMO Project verified. nongmoproject.org. Packed with veggies. www.yvesveggie.com. Question? 1-800-667-YVES www.yvesveggie.com. For recipes visit: yvesveggie.com. Product of Canada.', 'Yves Veggie Cuisine', 'https://i5.walmartimages.com/asr/528c70b8-7e55-4f0e-a052-91c8304a5a23.a2a83503e803dd3261a09697881d440a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/528c70b8-7e55-4f0e-a052-91c8304a5a23.a2a83503e803dd3261a09697881d440a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/528c70b8-7e55-4f0e-a052-91c8304a5a23.a2a83503e803dd3261a09697881d440a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259227, 'Blush Potato, 3 Lb.', 2.47, '097419070311', '', '', 'NATURAL BLUSH', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259229, 'Fresh Mangoes, Each', 0.66, '094922506344', 'Get ready for big flavor with our Fresh Mangoes. This sweet, juicy tropical fruit originated in South Asia and has a soft, buttery texture and naturally sweet taste that the whole world has grown to love. They\'re delicious and nutritious, containing loads of vitamin C, which may act as an antioxidant and contribute to healthy immunity. They also have vitamin A, calcium, iron and fiber, so you can feel good about eating them. Slice up a mango and enjoy as a healthy, sweet snack, use it to make fresh mango salsa, or add it to sweet treats like creamy mango-lime bars or mango sorbet! The sky is the limit with this versatile fruit. Life is better when you have Fresh Mangoes.', 'Fresh Mangoes, each: Soft, buttery texture and naturally sweet taste Rich in vitamins A, C, calcium, iron, and fiber Makes a healthy snack Great addition to smoothies, salads, salsa, and more Can also be used to cook and bake with Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cc54242f-cb87-4a25-9baa-fccaa20f5443.64fa79325ad44a7352dcd3c2a8b477be.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc54242f-cb87-4a25-9baa-fccaa20f5443.64fa79325ad44a7352dcd3c2a8b477be.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc54242f-cb87-4a25-9baa-fccaa20f5443.64fa79325ad44a7352dcd3c2a8b477be.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259230, 'Fresh Persimmons, 1 Each', 0.49, '000000044288', 'Persimmons are rich in antioxidants and important nutrients, such as fiber and vitamin A. They have also been linked to several potential health benefits and can be enjoyed in a variety of dishes. You can eat persimmons fresh, dried, or cooked. They are also commonly used around the world in jellies, drinks, pies, curries, and puddings. They make a great addition to any sweet or savory dessert!', 'Creamy texture and a tangy-sweet vanilla like flavor Make a great addition in both sweet dishes for breakfast or dessert, or paired with cheese and greens for a salad or appetizer Contains a good amount of vitamin A and some vitamin C Sold by the each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c7ac26ed-4227-44d7-aff5-d088d95435a2_1.aac06e588578c578cf553db9ca16a2c6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ac26ed-4227-44d7-aff5-d088d95435a2_1.aac06e588578c578cf553db9ca16a2c6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ac26ed-4227-44d7-aff5-d088d95435a2_1.aac06e588578c578cf553db9ca16a2c6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259243, 'Pineapple Spears 10 oz', 3.48, 'deleted_826766255771', 'Pineapple Spears 10 oz', 'Pineapple Chunks, 10 oz', 'Ready Pac Foods', 'https://i5.walmartimages.com/asr/c8513a66-eda9-4c83-942b-3b82046a07ba.b0b76c8e51732c21aa2a4585cc866f33.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8513a66-eda9-4c83-942b-3b82046a07ba.b0b76c8e51732c21aa2a4585cc866f33.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8513a66-eda9-4c83-942b-3b82046a07ba.b0b76c8e51732c21aa2a4585cc866f33.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259250, 'Monterey Dried Shitake Mushrooms, 1 oz', 3.74, '037102289101', 'Fresh Shiitake, Bag 1 OZ Fine gourmet dried mushrooms. Recipe inside! 100% natural. Wildcrafted in Nature\'s Lab - the forest floor. Wild Light mushrooms - one of nature\'s miracles! Are full of rich flavor, nutritional goodness, and (some say) healing properties. Their fragrant magic, when preserved by drying, can be enjoyed year round. Simply soak dried mushrooms in warm water (or wine, or stock) for 20-30 minutes, then add to your favorite recipe. Save that soaking liquid and use as a stock or gravy base - it\'s full of concentrated mushroom flavor! Dried mushrooms keep for months, without refrigeration, and for a year or more if frozen. The traditional black mushroom of Oriental cuisine. The meaty flesh of the shiitake has a full-bodied, distinctively woodsy flavor. Originally wild-harvested in Japan and Korea, shiitakes are now cultivated around the world. Many health benefits have been attributed to eating shiitake mushrooms, including strengthening the immune system. Use shittake for a hearty mushroom soup or in savory sauces for meat and poultry. Excellent in risottos, omelettes, and quiche. Product of China. Always cook mushrooms before eating. 1 oz (24.8 g) Okemos, MI 800-367-4709', 'Dried Shiitake Mushrooms, 1 oz: Rich, full flavor Great for breakfast, lunch, or dinner Mince them for an omelet, slice them for a salad, or saute in barbeque sauce for a vegan sandwich Naturally fat-free and cholesterol-free Low in sodium and calories Excellent source of selenium Soak in warm water, wine, or stock fro 20-30 minutes Can keep for months, without refrigeration, and for a year or more if frozen ***Discontinued***GHS***MSH DRIED WHLE SHTKE', 'Monterey', 'https://i5.walmartimages.com/asr/3b405e18-dc4e-45bd-be5c-d26aef8a32a6_1.18841c33c2108681ee9d3371d0376e7a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3b405e18-dc4e-45bd-be5c-d26aef8a32a6_1.18841c33c2108681ee9d3371d0376e7a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3b405e18-dc4e-45bd-be5c-d26aef8a32a6_1.18841c33c2108681ee9d3371d0376e7a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259258, 'Marketside Fresh Butternut Squash, 16 oz', 3.47, '681131122351', 'Marketside Butternut Squash makes preparing this fantastic hard-shelled gourd easier than ever! Whole butternut squash can be difficult to cut and peel, so we\'ve done the work for you. Each bag includes a full pound of washed, chopped, and ready-to-cook butternut squash. This versatile and delicious vegetable can be prepared with an array of spices. Use it for sweet sides, such as cinnamon and brown sugar roasted squash, or for savory creations like garlic, Parmesan, and herb roasted squash. You can also add it to a casserole or make roasted butternut squash with pecans by following the recipe featured on the package. Explore the many possibilities of our Marketside Butternut Squash today. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Steams in minutes in the microwave Washed and ready to cook Keep refrigerated Great for both sweet and savory dishes', 'Marketside', 'https://i5.walmartimages.com/asr/f6a75a41-7654-49ae-a514-c3d2e85e3e88.512b168166d83aad565c934aaf178b1e.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f6a75a41-7654-49ae-a514-c3d2e85e3e88.512b168166d83aad565c934aaf178b1e.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f6a75a41-7654-49ae-a514-c3d2e85e3e88.512b168166d83aad565c934aaf178b1e.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259264, 'Ready Pac Bistro Puro Picante Blazin\' Hot Salad, 7.5 oz', 2.98, '077745297514', 'Salad, Bistro Bowl, Puro Picante Blazin\' Hot, Carton 7.5 OZ Crisp iceberg and romaine lettuces, white meat chicken, pepper jack cheese, black beans, corn and poblano peppers topped with blazin\' not cheese curls and a spicy ranch dressing. 260 calories. 11 g protein. Fork inside. Hot! Inspected for wholesomeness by US Department of Agriculture. www.readypac.com. Perishable. Keep refrigerated. Contains: milk, egg, wheat, soy. 7.5 oz (213 g) Irwindale, CA 91706 800-800-7822', 'Salad, Puro Picante Blazin\' Hot Crisp iceberg and romaine lettuces, white meat chicken, pepper jack cheese, black beans, corn and poblano peppers topped with blazin\' not cheese curls and a spicy ranch dressing. 260 calories. 11 g protein. Fork inside. Hot! Inspected for wholesomeness by US Department of Agriculture. www.readypac.com.', 'Ready Pac Foods', 'https://i5.walmartimages.com/asr/7e4bceb6-c772-4603-b43e-fdb55ec7a2a5.5f2f13a6ef4d9429d0401db9ac96c588.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7e4bceb6-c772-4603-b43e-fdb55ec7a2a5.5f2f13a6ef4d9429d0401db9ac96c588.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7e4bceb6-c772-4603-b43e-fdb55ec7a2a5.5f2f13a6ef4d9429d0401db9ac96c588.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259271, 'Ready Pac Bistro Santa Fe Salad Bowl, 12.5 Oz., 2 Count', 4.95, '077745295985', '', '', 'Ready Pac Foods', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259274, 'Green Giant Fresh Washed & Trimmed Green Leaf Lettuce, 7 oz', 3.07, '716519090028', 'Bring the refreshing taste of Green Giant Fresh Washed & Trimmed Green Leaf Lettuce to your home. These individual lettuce leaves are washed and ready to use right out of the package. These perfectly crisp fresh lettuce leaves are great for salads, burgers, sandwiches, wraps and more. This package features a peel and resealable film to keep your lettuce leaves fresh and crisp. The culinary possibilities are endless with of Green Giant Fresh Washed & Trimmed Green Leaf Lettuce.', 'Green Giant Fresh Washed & Trimmed Green Leaf Lettuce, 7 oz Wholesome, versatile, and delicious These individual lettuce leaves are washed and ready to use right out of the package Perfectly crisp fresh lettuce leaves are great for salads, burgers, sandwiches, wraps and more Package features a peel and resealable film to keep your lettuce leaves fresh and crisp', 'Fresh Produce', 'https://i5.walmartimages.com/asr/dabd2aa2-69be-4995-ae13-892816132f22.bdb51f35d2398481d7cf607d807b5731.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dabd2aa2-69be-4995-ae13-892816132f22.bdb51f35d2398481d7cf607d807b5731.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dabd2aa2-69be-4995-ae13-892816132f22.bdb51f35d2398481d7cf607d807b5731.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259299, 'Fresh Whole Carrots, 5 lb Bag', 4.77, '033383660035', 'Fresh Whole Carrots are delicious crunchy veggies perfect for snacking or using in recipes. Enjoy them as an ingredient in your favorite recipes or simply enjoy them as a healthy snack on the go. Peel, slice, and go! Make a tasty snack and serve these carrots with celery and ranch dressing or hummus for dipping. You can roast them in the oven with a little bit of olive oil and honey for a delectable side dish, or boil and mash them for a fun twist on traditional mashed potatoes. Carrots are one of nature\'s best sources of nutrients, rich in Vitamin A with antioxidant beta-carotene. Carrots provide dietary fiber and potassium. Health agencies recommend that you eat five or more servings of fruits and vegetables, which include carrots, every day for good health. Enjoy the delicious flavor and healthy crunch of Fresh Whole Carrots.', 'Fresh Whole Carrots 5-pound bag Excellent source of beta carotene, fiber, vitamin K1, potassium, and antioxidants No preservatives Perfect for snacking or using in recipes Perfect for packing in lunches or serving as a snack with dip', 'Fresh Produce', 'https://i5.walmartimages.com/asr/40af4930-3308-4d3d-a8f1-8f50ca6116a3.42dda044924c7d41d2f97c8d67217a08.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/40af4930-3308-4d3d-a8f1-8f50ca6116a3.42dda044924c7d41d2f97c8d67217a08.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/40af4930-3308-4d3d-a8f1-8f50ca6116a3.42dda044924c7d41d2f97c8d67217a08.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259300, 'Fresh Organic Marketside Petite Carrots, 12 oz Bag', 2.26, '032601046637', 'Marketside Organic Petite Carrots are cut, peeled and ready to eat for your convenience. These carrots are full of flavor and certified USDA organic. Enjoy them as an ingredient in your favorite recipes or simply enjoy them as a healthy snack on the go. Make it a tasty snack and serve with celery and ranch dressing or hummus for dipping. They also offer nutritional benefits as they are a good source of dietary fiber and vitamins A and C. These carrots come in a bag that is steamable in the microwave or you can heat them up on the stovetop. Enjoy farm fresh flavors with Marketside Organic Petite Carrots. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Cut and peeled USDA organic Ready to eat Microwaveable, steam in bag Great snack Serve with hummus and ranch dip', 'Marketside', 'https://i5.walmartimages.com/asr/0b8acef8-75c2-45c8-9400-2555ad7ad29d.6e57f30701d8db84abf702005614bd7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b8acef8-75c2-45c8-9400-2555ad7ad29d.6e57f30701d8db84abf702005614bd7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b8acef8-75c2-45c8-9400-2555ad7ad29d.6e57f30701d8db84abf702005614bd7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259301, 'Fresh Organic Grape Tomato, 10 oz Package', 2.83, '826375018224', 'Organic Grape Tomatoes are an exciting summer treat, and they\'re the perfect size for skewers, salads and roasting. These bite-sized grape tomatoes look and taste great. Grape tomatoes are a low-calorie treat that are also low in sodium and are a good source of fiber. Whether you are snacking or adding them to your favorite dish. their uses are almost limitless. Try these grape tomatoes with feta cheese, fresh dill and a drizzle of olive oil for a light and delicious Mediterranean treat. Or make a caprese salad with grape tomatoes, fresh basil, fresh mozzarella and balsamic vinegar. With 10-ounces of tomatoes in each package, you\'ll have plenty to make mouthwatering meals. Use your imagination to create delicious dishes with Organic Grape Tomatoes.', 'Organic Cherry Tomatoes, 10 oz Package: Perfect size for skewers, salads and roasting Low-calorie, low in sodium, and a good source of fiber Pair with feta cheese, fresh dill, and a drizzle of olive oil for a Mediterranean dish Certified organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6b6dd728-49bd-438f-abbe-dc65033b7fc8.8f14e50c2cd84c4bfeb071d7d98cbadd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6b6dd728-49bd-438f-abbe-dc65033b7fc8.8f14e50c2cd84c4bfeb071d7d98cbadd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6b6dd728-49bd-438f-abbe-dc65033b7fc8.8f14e50c2cd84c4bfeb071d7d98cbadd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259302, 'Fresh Produce Whole Artichoke Vegetable, 1 Each', 2.78, '204516000008', 'Fresh globe artichokes are crisp and delicious, picked at the peak of freshness. They are easy to cook, boil, braise, stuff or bake for a tasty result. You can also enjoy as an appetizer, side dish or as a healthy snack. Artichokes have a tender and buttery flavor, softening beautifully when properly cooked. Add a nutrient-rich vegetable, that is naturally high in folate, vitamin C and K to your diet', 'Fresh Globe Artichoke – Crisp and delicious, picked at peak freshness Easy to Cook – Boil, grill, braise, or stuff and bake for tasty results. Tender & Buttery Flavor – Softens beautifully when properly cooked Healthy & Versatile – Enjoy as an appetizer, side dish, or wholesome snack Nutrient-Rich Vegetable – Naturally high in folate plus vitamins C and K', 'Fresh Produce', 'https://i5.walmartimages.com/asr/963a2841-33e9-4f14-9447-97a386e98b57.8e1796f357fdc621a34080ea9587a3eb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/963a2841-33e9-4f14-9447-97a386e98b57.8e1796f357fdc621a34080ea9587a3eb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/963a2841-33e9-4f14-9447-97a386e98b57.8e1796f357fdc621a34080ea9587a3eb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259305, 'Fresh Whole Heirloom Tomato, 2 Pack', 3.98, '686478999994', 'Enjoy the robust flavor of Fresh Whole Organic Heirloom Tomatoes. These tomatoes feature vibrant colors with sweet, juicy flavor in each bite, making them a versatile ingredient that\'s perfect for a wide range of dishes. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. They make an excellent addition to meals or simply enjoy them alone for a healthy and refreshing snack. Bring the fresh and delicious taste of Fresh Whole Organic Heirloom Tomatoes to your kitchen today!', 'Fresh Whole Heirloom Tomato, 2 Pack Sweet and juicy flavor in every bite Versatile ingredient that\'s perfect for a wide range of dishes Slice them up to garnish a sandwich or burger for added flavor and texture Dice them up to create a pizza or pasta topping Crush them up to make a decadent bruschetta or sauce Finely blend them to create your own personalized salsa', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0d3dd139-c5cb-4d25-9d2e-ca28307c381f.5917af0f7369587011a3183ba17f1708.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d3dd139-c5cb-4d25-9d2e-ca28307c381f.5917af0f7369587011a3183ba17f1708.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d3dd139-c5cb-4d25-9d2e-ca28307c381f.5917af0f7369587011a3183ba17f1708.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259307, 'Freshly Cut, Vibrant Green Broccoli Bunch, 1 Bunch Wrapped', 2.94, '012842001602', 'Getting your daily servings of vegetables is tastier than ever with fresh green Broccoli bunches. This bunch broccoli has everything a broccoli-lover could want, from its healthy green color to its even ratio of florets to stem. The consumption of broccoli has tripled over the past 25 years. Its popularity is due to an aesthetic appeal, delightful taste, versatile-culinary applications, and the fact that it is packed full of nutrition. Whether you are in the mood to steam, roast, or sauté, broccoli is a great way to get your daily dose of greens in for the day.', 'Bright-green color Healthy side to any meal Excellent steamed, roasted, sautéed, in soups or served raw with a favorite dip Even ratio of florets to stem; approximately 2 per bunch Freshly cut and ready to use Food Condition: Fresh', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c5dec8ec-eebd-4fbb-9ffb-420e621b75a6.aea71634538634282f78440020f4ca54.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5dec8ec-eebd-4fbb-9ffb-420e621b75a6.aea71634538634282f78440020f4ca54.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5dec8ec-eebd-4fbb-9ffb-420e621b75a6.aea71634538634282f78440020f4ca54.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259319, 'Italian Vegetable Blend', 3.06, '605806000454', 'This blend of Italian favorites–cabbage, Brussels sprouts, carrots, kale, broccoli, celery and onion–make a tasty and crunchy salad base. Or add a protein and top with dressing to make a complete meal in minutes.This Italian Vegetable Blend can also be added to soups or pasta sauce for extra heartiness. Comes in convenient resealable pouch–use what you need and keep the rest fresh for later.', 'This blend of Italian favorites–cabbage, Brussels sprouts, carrots, kale, broccoli, celery and onion–make a tasty and crunchy salad base. Or add a protein and top with dressing to make a complete meal in minutes.This Italian Vegetable Blend can also be added to soups or pasta sauce for extra heartiness. Comes in convenient resealable pouch–use what you need and keep the rest fresh for later.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7df645a9-8dac-4668-8d2b-b0199502e91d_1.514b2a5a33f8a09b9d9c6e05d7893d2d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7df645a9-8dac-4668-8d2b-b0199502e91d_1.514b2a5a33f8a09b9d9c6e05d7893d2d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7df645a9-8dac-4668-8d2b-b0199502e91d_1.514b2a5a33f8a09b9d9c6e05d7893d2d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259320, 'Green Giant Southwest Vegetable Blend, 12 oz', 3.06, '605806000478', 'This unique blend is made up of cabbage, carrots, celery, green onion and cilantro. Make a complete, tasty meal with this Southwest Vegetable Blend by adding corn, avocado, black beans, a favorite protein and topping it off with a cilantro lime dressing.These time-saving blends are a quick and easy start to making delicious, healthy soups, stews, or chili?also makes an excellent taco topper.', 'This unique blend is made up of cabbage, carrots, celery, green onion and cilantro. Make a complete, tasty meal with this Southwest Vegetable Blend by adding corn, avocado, black beans, a favorite protein and topping it off with a cilantro lime dressing.These time-saving blends are a quick and easy start to making delicious, healthy soups, stews, or chili?also makes an excellent taco topper.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2218ac6d-fd42-4ce6-a955-00a971df01d1_1.9247ac5466e221acdc83ae2de7e5838f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2218ac6d-fd42-4ce6-a955-00a971df01d1_1.9247ac5466e221acdc83ae2de7e5838f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2218ac6d-fd42-4ce6-a955-00a971df01d1_1.9247ac5466e221acdc83ae2de7e5838f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259322, 'Cut N Clean Greens Kale, 1 lb Bag', 2.44, 'deleted_028764652228', 'The living flavor and versatility of nutrient dense greens! A Fresh Mellow Cabbage FlavorKale: fresh mellow cabbage taste that pairs well with many other vegetables, fruits, herbs, spices and proteins. Kale\'s versatility makes it the perfect addition to any recipe that shows off its ruffly leaves. Try adding kale to your favorites pasta or soup recipe. Triple washed, cut & ready to use.Cut \'N Clean Greens come in special breathable bags to maximize freshness. Good food starts with good farming.From our farms to your family... San Miguel Produce is an innovative, sustainable family farm passionately focused on growing and processing quality, nutrient-dense greens.', 'Farm Fresh...Grower Direct', 'Cut \'N Clean Greens', 'https://i5.walmartimages.com/asr/45e1e489-a41c-4994-9830-17960cd4724e_1.3b335a6cff52dc7da7c9e304d9fcd926.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/45e1e489-a41c-4994-9830-17960cd4724e_1.3b335a6cff52dc7da7c9e304d9fcd926.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/45e1e489-a41c-4994-9830-17960cd4724e_1.3b335a6cff52dc7da7c9e304d9fcd926.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259324, 'Bacon Sriracha Brussels Bok Choy 10oz', 3.08, '688962016101', 'short description is not available', 'Bacon Sriracha Brussels Bok Choy 10oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259327, 'Organic Marketside Fresh Bagged Green Kale, 1 lb Bag', 4.76, '028764952816', 'Fresh Organic Green Kale 16 oz', 'Kale Greens, Organic USDA Organic. Certified Organic by Georgia Crop Improvement Association Organic Certification Program. Family owned. Real southern style. Goodness. Gracious, Glory. Glory Foods greens are fresh picked at the peak of their flavor and nutrients, triple washed, bagged and ready to cook. Fresh food. Fast. Because Glory Foods knows you\'d rather spend your time eating a home-cooked meal that nurtures the soul than preparing one. Real Southern style made easy. Find this in your local Walmart!', 'Marketside', 'https://i5.walmartimages.com/asr/18f00616-8b6d-47a4-8d92-cebd4e47948e.d74377329f0ac04301e91215c3591b49.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18f00616-8b6d-47a4-8d92-cebd4e47948e.d74377329f0ac04301e91215c3591b49.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18f00616-8b6d-47a4-8d92-cebd4e47948e.d74377329f0ac04301e91215c3591b49.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259330, 'Fresh Envy Apples, Each', 1.06, '000000033152', 'Treat your family to the wildly juicy, sweet and crisp taste of Envy Apples. With a classic apple cider flavor, these apples have a firm texture with flesh that is slow to brown. This variety was developed in New Zealand by master farmers and now grown in Zillah, Washington. A crossing of Braeburn and Gala varieties, this apple fruit is always cross-pollinated to ensure genetic diversity. Envy Apples retain their white color long after you\'ve cut them open, which ensures that your refreshing fruit salads and other desserts look beautiful and appetizing. Free of gluten, fat and cholesterol, these apples are a wholesome way to indulge your sweet tooth. Enjoy the sweet and healthy taste of Envy Apples.', 'Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Free from genetic modification Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie', 'ENVY APPLES', 'https://i5.walmartimages.com/asr/32451a10-0563-426a-9a16-a8865b2c3774_3.b3be01fcc4c956f51fe3890589897d31.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32451a10-0563-426a-9a16-a8865b2c3774_3.b3be01fcc4c956f51fe3890589897d31.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32451a10-0563-426a-9a16-a8865b2c3774_3.b3be01fcc4c956f51fe3890589897d31.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259331, 'Fresh Red Globe Seeded Grapes, Bag (2.25 lbs/Bag Est.)', 4.21, '895321002037', 'Treat yourself to the delicious, juicy flavor of Fresh Red Globe Whole Seeded Grapes. These grapes are bursting with sweet flavor and known for their large size. Enjoy a handful as a fresh snack any time of day or dry them for scrumptious raisins. You can even use them to make refreshing grape juice. They are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with cheese, crackers, or delectable meats like prosciutto. If you want to be creative, you can freeze them and use them as ice cubes in your favorite drinks. Treat yourself to the whole fresh taste of Red Globe Whole Seeded Grapes.', 'Fresh Red Globe Whole Seeded Grapes, Bag (2.25 lbs/Bag Est.) Bursting with flavor and known for their large size Enjoy a handful as a fresh snack Add to a stunning cheese board or charcuterie plate Dry them to make raisins Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/56a93cf7-e9e8-45d7-8891-b0f2dde7b90c.0bc56cfb5776a10494d8114303e1f507.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56a93cf7-e9e8-45d7-8891-b0f2dde7b90c.0bc56cfb5776a10494d8114303e1f507.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56a93cf7-e9e8-45d7-8891-b0f2dde7b90c.0bc56cfb5776a10494d8114303e1f507.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259334, 'Fresh Minneola, Each', 0.44, '000000044561', 'Known for their sweet, unique flavor, Minneola\'s add a sophisticated twist to your beverages and cocktails. Add a pinch of zest to your meals or add peeled sections to your salads. Due to its easy to peel skin and lack of seeds, these make a great snack for lunchboxes or on-the-go. These are also an excellent source of fiber and Vitamin C that help strengthen the immune system. Available by the each.', 'Delicious, sweet, juicy citrus Easy to peel and segment Excellent source of vitamin C, folate and potassium Seedless Great choice for lunchboxes or snacks on-the-go', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5144f96d-e0bc-47ea-aebd-801db965a311.2b7f30c61a7dd7caa2d6a012432c72e0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5144f96d-e0bc-47ea-aebd-801db965a311.2b7f30c61a7dd7caa2d6a012432c72e0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5144f96d-e0bc-47ea-aebd-801db965a311.2b7f30c61a7dd7caa2d6a012432c72e0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259335, 'Gourmet Garden Gluten Free Minced Garlic Stir-in Paste, 4.0 oz Tube', 3.94, '875208000707', 'Gourmet Garden Gluten Free Minced Garlic Stir-in Paste, 4 oz Tube. Gourmet Garden Minced Garlic Stir-in Paste is made for garlic lovers who make sure they always have their favorite herb on-hand. It\'s an easy way to add bold, savory flavor and minced garlic texture to your meals. Packed inside each squeezable tube is fresh garlic that\'s been peeled and minced to deliver its signature punch. Our garlic paste is at its best flavor, color and aroma when it reaches your table. Use it at the beginning of cooking to create a sweet, garlicky base. Add it at the end- traditionally garlic bread, marinades and sauces- for a deeper, more pungent flavor. Use 1 teaspoon of paste in place of 1 medium garlic clove. Store refrigerated for weeks after opening. This Gourmet Garden Minced Garlic Stir-in Paste is in a Plastic tube that is 4 ounces. Store this Refrigerated item at an ambient temperature.', 'Gourmet Garden Gluten Free Minced Garlic Stir-in Paste, 4 oz Tube Fresh minced garlic paste packed into a convenient squeezable tube No prep necessary Stays fresh in refrigerator for weeks after opening. Gluten Free Adds bold flavor to garlic bread, marinades and sauces Use 1 tsp. of paste in place of 1 medium garlic clove This product is in a Plastic Tube', 'Gourmet Garden', 'https://i5.walmartimages.com/asr/e5e65329-4010-4377-aa08-2942e4defd74.3d2a67ef309f8f58cc8f0fd0875c5a18.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5e65329-4010-4377-aa08-2942e4defd74.3d2a67ef309f8f58cc8f0fd0875c5a18.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5e65329-4010-4377-aa08-2942e4defd74.3d2a67ef309f8f58cc8f0fd0875c5a18.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259338, 'Marketside Fresh Organic Bananas, Bunch', 1.71, '000000940115', 'Enjoy the sweet, tropical taste of Marketside Organic Bananas. Bananas are a good source of several vitamins and minerals including potassium, vitamin B6 and vitamin C and are low in sodium. Enjoy them at breakfast, lunch, dessert, or anytime you want a healthy snack. Use them to make a whole loaf of moist banana bread and enjoy with a hot cup of coffee in the mornings or layer them with pudding and vanilla wafer cookies for a light, sweet banana pudding that\'s perfect for dessert. Simply peel open the banana and savor the delicious taste of this sweet fruit. Bring home Marketside Organic Bananas and make them a part of your day. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Fresh Organic Whole Bananas, Bunch Sweet, tropical flavor Enjoy at breakfast, lunch, dessert, or when you want a snack Good source of potassium, vitamin B6 and vitamin C and low in sodium Make banana bread or banana pudding and enjoy with a hot cup of coffee Peel open and enjoy One bunch contains approximately 5-7 bananas', 'Marketside', 'https://i5.walmartimages.com/asr/f17ef225-0999-4035-9ed1-7a06607333b4.7c3b33492f937bcc19fe3339d5230929.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f17ef225-0999-4035-9ed1-7a06607333b4.7c3b33492f937bcc19fe3339d5230929.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f17ef225-0999-4035-9ed1-7a06607333b4.7c3b33492f937bcc19fe3339d5230929.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259339, 'Fresh Mini Bananas, Bunch, Sweet', 1.11, '000000042345', 'Our fresh mini bananas are made with organic ingredients and are the perfect healthy snack! These sweet and delicious sweet fruits are filled with essential vitamins and minerals that provide energy and help maintain a balanced diet. Enjoy them as a quick on-the-go snack or add them to smoothies and desserts for a delicious treat. Trust us, you won\'t be disappointed!', 'Whole mini bananas, also known as baby bananas or finger bananas, are a type of fresh produce that comes in a smaller size compared to regular bananas, offering a convenient and portable snack option. As a fresh produce item, mini bananas retain their full nutritional value, providing essential vitamins and minerals such as potassium, vitamin C, and vitamin B6, which contribute to overall health and well-being. When consumed whole and ripe, mini bananas have a sweet, creamy taste and a soft texture, making them a delightful and satisfying snack or addition to various recipes, such as smoothies, fruit salads, or baked goods.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/351f0494-e31f-4021-b85e-06f255e3398c.8ab1a7c8e2f554c22428bf44fe7a680f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/351f0494-e31f-4021-b85e-06f255e3398c.8ab1a7c8e2f554c22428bf44fe7a680f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/351f0494-e31f-4021-b85e-06f255e3398c.8ab1a7c8e2f554c22428bf44fe7a680f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259341, 'Monterey Dried Oyster Mushrooms, 1 oz', 3.74, '643362110620', 'Mushrooms, Oyster, Dried, Pouch 1 OZ.', 'Mushrooms, Oyster, Dried Since 1928. America\'s favorite mushroom. Visit www.giorgiofresh.com. Recipe on back of label. www.giorgiofresh.com.', 'Monterey', 'https://i5.walmartimages.com/asr/c55cebde-e3b1-441b-bb24-5b0fee033886_1.99256881d2f8a75657e4628a44332924.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c55cebde-e3b1-441b-bb24-5b0fee033886_1.99256881d2f8a75657e4628a44332924.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c55cebde-e3b1-441b-bb24-5b0fee033886_1.99256881d2f8a75657e4628a44332924.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259342, 'Dried Mushrooms, 1 oz', 3.74, '037102289606', 'A popular ingredient in Europe and Asia for many, many centuries, Dried Mushrooms have been receiving attention in the culinary world due their versatility and economy. The flavor of dried mushrooms is more concentrated than their fresh counterparts, so less is needed for your favorite recipes. This particular blend of mushrooms features dried porcini, boletes, shiitake, morel, oyster and lobster mushrooms to provide you with a savory and versatile mixture of wild and cultivated flavors. For full flavor potential, use this blend to add a rich, hearty flavor to beef, pork and poultry recipes, vegetable soups, stir fry recipes, hunter stew, casseroles, rice dishes, pasta, stuffings, and sauces. Experience a recipe favorite in a new light with our Dried Mushrooms.', 'Dried Mushrooms, 1 oz: Store in a cool, dark place Shelf life is 6 to 12 months can be extended by freezing To reconstitute, cover with boiling water for 20-30 minutes Drain; reserve fluid for adding flavor to dishes, if desired Trim tough stems 1 ounce of reconstituted mushrooms equals 4 ounces of fresh mushrooms May contain naturally occurring sulfites', 'Unbranded', 'https://i5.walmartimages.com/asr/39023d4c-f04c-4302-8188-38ac557ac255.5ac744e7cba5d645e63aa319fd1f94c4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39023d4c-f04c-4302-8188-38ac557ac255.5ac744e7cba5d645e63aa319fd1f94c4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39023d4c-f04c-4302-8188-38ac557ac255.5ac744e7cba5d645e63aa319fd1f94c4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259343, 'Fresh Red Leaf Lettuce, each', 1.74, '000651041018', 'Fresh Red leaf lettuce is a loose head of crispy leaves with red-tinged tops. It offers a mild lettuce flavor and can be used as you would its green counterpart. Make a perfect salad and top it off with tomato, black olives, cranberries and almonds. Add it to a wrap or pop it in a sandwhich you wont be dissapointed. Find this at your local Walmart.', 'High in a variety of essential vitamins and minerals Very low in calories Rich in the antioxidant beta carotene', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c3017a6e-0de7-404d-9c08-7e1ed7ac4da0.2352f96905556978b7418097d9294ae4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3017a6e-0de7-404d-9c08-7e1ed7ac4da0.2352f96905556978b7418097d9294ae4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3017a6e-0de7-404d-9c08-7e1ed7ac4da0.2352f96905556978b7418097d9294ae4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259344, 'Fresh Cherry Tomato, 10 oz Clam Shell', 2.98, '033383655208', 'Bring the fresh, delicious taste of Slicing Tomatoes into your home. These tomatoes deliver sweet and juicy flavor with each bite and are an ideal ingredient in a variety of recipes. They would make a tasty, garden-inspired addition to salads, burgers, gourmet sandwiches, and so much more. They are picked at peak freshness and specially bred for deep red color, intense flavor, and higher lycopene content than standard tomatoes. Whether you slice or dice them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with these fresh Slicing Tomatoes.', 'Cherry Tomato, 1 Bag Wholesome, fresh, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a59807a2-bd89-4a64-9d7e-f263efc3d7a6.21a9d203fad771b7b512830fa740034f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a59807a2-bd89-4a64-9d7e-f263efc3d7a6.21a9d203fad771b7b512830fa740034f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a59807a2-bd89-4a64-9d7e-f263efc3d7a6.21a9d203fad771b7b512830fa740034f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259349, 'Simply Spuds Steamables Golden Potatoes, 1 lb', 2.77, '056210980380', 'Side Delights® Steamables™ Golden Potatoes. Ready to steam in this bag. These potatoes are triple washed and fresh, healthy & easy. A gluten free product. Microwave & serve in just 8 minutes.', 'Simply Spuds Steamables Golden Potatoes, 1.5 lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2185422d-edd9-4970-a38c-73cdaa80525d_1.35546e9fddbeda969dee559e0f267fbb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2185422d-edd9-4970-a38c-73cdaa80525d_1.35546e9fddbeda969dee559e0f267fbb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2185422d-edd9-4970-a38c-73cdaa80525d_1.35546e9fddbeda969dee559e0f267fbb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259350, 'PTO MICRO RED ID WD', 1.98, '842281099744', 'Potatoes, Klondike Rose Express, Red Skin, Golden Flesh, Bag 16 OZ Red skin, golden flesh. Per Serving: 110 calories; 0 g sat fat (0% DV); 0 mg sodium (0% DV); 1 g sugars; 620 mg potassium (18% DV); vitamin C (45% DV). Ready to serve in minutes. US No. 1 (3/4 inch min.). Fresh Steamed Potatoes are Ready to Serve in Just Minutes: Steamed to perfection, our potatoes maintain their rich flavor and buttery texture in this advanced microwave bag. It\'s never been easier to prepare a quick and healthy side dish. Dice, slice, mash or serve whole and apply your own seasoning - the options for these fresh, delicious steamed potatoes are endless. Self-venting steam bag. For great recipe ideas, visit www.klondikebrands.com. Produce of USA. Microwave Cooking: 1) Place unopened bag of fresh potatoes, this side up in a microwave safe bowl. Do not cut or puncture bag. Package will inflate and may make noises while cooking. 2) Microwave on high for 6 minutes. For softer texture, add up to 60 seconds. Microwave ovens may vary. Cooking time is approximate. 3) Let bag cool 1 minute. Carefully open bag - Steam will be hot. Empty into serving dish, season and enjoy. Be careful to avoid steam. Microwave only. Okay to refrigerate. Do not freeze. 16 oz (1 lb) 454 g Pasco, WA 99301', 'Simply Spuds Klondike Rose Express Potatoes, 1 Lb.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3c256ee1-c613-4643-bc29-2b9a36dc0c0f.2452938a709ec1aba7aff719a2a4185a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3c256ee1-c613-4643-bc29-2b9a36dc0c0f.2452938a709ec1aba7aff719a2a4185a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3c256ee1-c613-4643-bc29-2b9a36dc0c0f.2452938a709ec1aba7aff719a2a4185a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259357, 'Marketside Cauliflower Florets, 16 oz', 2.47, '681131122320', 'Add fresh and ready to eat cauliflower florets to your meal with Marketside Cauliflower Florets. Serve as is, or add your favorite spices for additional flavor. Add onion, thyme, garlic, olive oil, parmesan cheese, salt and pepper to cauliflower to create a yummy side dish. Marketside Cauliflower Florets are a quick and healthy side dish and a great addition to any meal. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes. Microwave: Pierce holes in bag with fork. Place on a microwave safe dish and microwave on high for 2 or 3 minutes. Using caution as the steam from the bag will be very hot.', 'Marketside Cauliflower Florets, 16 oz Microwave in bag Washed and ready to eat Ready in 3 minutes Picked fresh for you', 'Marketside', 'https://i5.walmartimages.com/asr/0aad7a2c-1854-465b-8a12-fb461b892220.0b915611b36ea3eb5e807e96c2c3be14.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0aad7a2c-1854-465b-8a12-fb461b892220.0b915611b36ea3eb5e807e96c2c3be14.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0aad7a2c-1854-465b-8a12-fb461b892220.0b915611b36ea3eb5e807e96c2c3be14.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259358, 'Green Giant Cauliflower Crumbles, 16 oz', 2.98, '605806000713', 'Green Giant™ Cauliflower Crumbles®.Chopped cauliflower.Great for mashing, pizza crusts, sauces & more!Recipe ready.Steams in pack.Gluten free.Per Serving:20 Calories.0g Sat fat, 0% DV.25mg Sodium, 1% DV.2g Sugars.Net Wt 16 oz (1 lb) (454 g). Perishable, keep refrigerated.Steam in pack Directions:1. Tear bag at notch.2. Close bag with zipper leaving 1-inch opening.3. Place bag standing up in microwave; microwave on high 4 minutes, or until desired tenderness*. Let stand 1 minute in microwave.4. Carefully remove bag. Caution hot!5. Ready to use as recipe ingredient, or add desired seasonings to taste and enjoy!*Because microwaves cook differently, times are approximate.', 'Cauliflower, Crumbles, Chopped Great for mashing, pizza crusts, sauces & more! Making comfort food healthy! Steams in pack. Box Tops for Education. Gluten free. Per serving: 20 calories; 0 g sat fat (0% DV0; 25 mg sodium (1% DV); 2 g sugars; Vitamin C (70% DV); Vitamin K (15% DV). Find delicious recipes, helpful tips & more: Scan code with app. greengiantfresh.com/cauliflower-crumbles. Find Delicious Recipes: GreenGiantFresh.com. Questions or comments? 1-800-998-9996. Follow Us On: Facebook and Twitter. Facebook. Twitter.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7b6d30da-69b0-4e78-9f25-3b94ec11c921.9b7c470841bebbf0ac5a4261238a84c2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7b6d30da-69b0-4e78-9f25-3b94ec11c921.9b7c470841bebbf0ac5a4261238a84c2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7b6d30da-69b0-4e78-9f25-3b94ec11c921.9b7c470841bebbf0ac5a4261238a84c2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259361, 'Fresh Green Onions Bunch, Each', 0.98, '723525040022', 'Add flavor to your next meal with Fresh Green Onions. For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. Chop up the stalks into little rings and mix them into sour cream to create a delicious chip dip. You can also add them to a fresh garden salad or sprinkle them on top of your fish tacos. However you choose to use it, this fresh produce will add something delicious to any meal. Add color and flavor to any dish with these Fresh Green Onions. Also known as Cebollino, Scallion, Basal akhdar and Hara pyaz around the world.', 'Fresh Green Onion Bunch, Each Versatile ingredient Chop up the stalks into little rings and mix them into sour cream to create a delicious chip dip Use them to garnish a mouthwatering bowl of ramen Adds a hint of boldness to your dishes Easy way to add color and flavor to a dish Tasty fresh produce', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e3e6b87a-735c-4e00-b35b-c566d3f56ff3.e7440b87be49eb20ac956d0a2690822e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3e6b87a-735c-4e00-b35b-c566d3f56ff3.e7440b87be49eb20ac956d0a2690822e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3e6b87a-735c-4e00-b35b-c566d3f56ff3.e7440b87be49eb20ac956d0a2690822e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259365, 'Earthy Delights Mushrooms, 1 Oz.', 5.98, '037102289309', 'Porcini, Bag 1 OZ Fine gourmet dried mushrooms. Recipe inside! 100% natural. Wildcrafted in Nature\'s Lab - the forest floor. Wild mushrooms - one of nature\'s miracles! Are full of rich flavor, nutritional goodness, and (some say) healing properties. Their fragrant magic, when preserved by drying, can be enjoyed year round. Simply soak dried mushrooms in warm water (or wine, or stock) for 20-30 minutes, then add to your favorite recipe. Save that soaking liquid and use as a stock or gravy base - it\'s full of concentrated mushroom flavor! Dried mushrooms keep for months, without refrigeration, and for a year or more if frozen. Delectable fresh or dried, porcini mushrooms are among the most sought-after of all wild-harvest mushrooms. Porcini means little pigs in Italian, so called for their plump floor. In France they are known as cepes; to the Germans they are Steinpilz. With a rich, earthy flavor and heady aroma, porcini may be featured in savory sauces to accompany meat or poultry. Excellent in risottos, omelettes, or served with polenta. Wild harvested. www.earthy.com. Product of China. Always cook mushrooms before eating. May contain naturally occurring sulfites. 1 oz (24.8 g) Okemos, MI 800-367-4709', 'Mushrooms, Dried, Porcini Fine gourmet dried mushrooms. Recipe inside! 100% natural. Wildcrafted in Nature\'s Lab - the forest floor. Wild mushrooms - one of nature\'s miracles! Are full of rich flavor, nutritional goodness, and (some say) healing properties. Their fragrant magic, when preserved by drying, can be enjoyed year round. Simply soak dried mushrooms in warm water (or wine, or stock) for 20-30 minutes, then add to your favorite recipe. Save that soaking liquid and use as a stock or gravy base - it\'s full of concentrated mushroom flavor! Dried mushrooms keep for months, without refrigeration, and for a year or more if frozen. Delectable fresh or dried, porcini mushrooms are among the most sought-after of all wild-harvest mushrooms. Porcini means little pigs in Italian, so called for their plump floor. In France they are known as cepes; to the Germans they are Steinpilz. With a rich, earthy flavor and heady aroma, porcini may be featured in savory sauces to accompany meat or poultry. Excellent in risottos, omelettes, or served with polenta. Wild harvested. www.earthy.com. Product of China.', 'Earthy', 'https://i5.walmartimages.com/asr/bb8faf50-9f1c-43f2-90aa-db89382dc5e4_1.0f4800e434b68382af92ecc44ef5588d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bb8faf50-9f1c-43f2-90aa-db89382dc5e4_1.0f4800e434b68382af92ecc44ef5588d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bb8faf50-9f1c-43f2-90aa-db89382dc5e4_1.0f4800e434b68382af92ecc44ef5588d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259368, 'Fresh Green Leaf Lettuce, Each', 2.06, '033383651415', 'Fresh Green Leaf Lettuce is the perfect way to add more greens to your diet. This leafy lettuce is the perfect base for creating a variety of salads. Chop it up, add a protein like grilled chicken, a cheese like feta, candied pecans, and dried cranberries with a sweet vinaigrette for a sweet and tangy salad. Add it to spring rolls for a crunchy, refreshing addition. You could use it as a lettuce boat or wrap when you are wanting to still eat leafy greens but don\'t want a salad. It\'s low in calories making it perfect for adding to a healthy diet. Enjoy the crisp and refreshing taste of Fresh Green Leaf Lettuce.', 'Fresh Green Leaf Lettuce, Each Perfect base for creating salads Chop it and mix with grilled chicken, feta cheese, candied pecans, dried cranberries and a vinaigrette Add it to a spring roll for fresh addition Use it as a lettuce wrap or lettuce boat for something different Low calorie making it perfect for a healthy diet', 'Fresh Produce', 'https://i5.walmartimages.com/asr/43584fcd-d522-41d9-8b26-c8e671d4850e.86fe376258eaa7ba3a75e3e261877292.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/43584fcd-d522-41d9-8b26-c8e671d4850e.86fe376258eaa7ba3a75e3e261877292.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/43584fcd-d522-41d9-8b26-c8e671d4850e.86fe376258eaa7ba3a75e3e261877292.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259369, 'Fresh Keylimes, 1 lb Bag', 2.98, '033383146812', 'Add zest and flavor to your meals and beverages with these Key Limes. Freshly squeezed limes provide a healthy dose of vitamin C to your diet and are a key ingredient in many recipes, from homemade salsa to chicken dishes. The citrusy tropical flavor of these limes are sure to add a zing to all your cooked meals. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. These limes are sold in a one-pound bag, so you\'ll have plenty for all your culinary creations. Enjoy the refreshing, tart flavor of Key Limes.', 'Fresh and juicy key limes Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies, and tarts Refreshing, tart flavor Available in a 1-pound bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/55de190c-7ec6-4b89-9dc6-2cdb721d6eb5.48fc6c58092b173dce51eeacf4703a2b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/55de190c-7ec6-4b89-9dc6-2cdb721d6eb5.48fc6c58092b173dce51eeacf4703a2b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/55de190c-7ec6-4b89-9dc6-2cdb721d6eb5.48fc6c58092b173dce51eeacf4703a2b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259372, 'Lil Snapper Blood Oranges, 3 Lb.', 4.5, '605049458302', 'The Moro Blood Orange is called \"the blood orange\" because of my intense maroon color on the inside. It has a rich orange taste with hints of berry flavor with an orange peel with a red blush.', 'Lil Snapper Blood Oranges', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259374, 'Robinson Fresh Orange Habanero Chili Peppers, 4 oz', 2.97, '852966005182', 'Add some spice to your meals with Habanero Peppers. Habanero chilies have a high spice level, so it\'s perfect for adding heat to your meals. These versatile peppers are an excellent addition to a multitude of dishes. For a sweet and spicy dish dice the habanero and mix it with diced mango, onion, cilantro, and tomatoes. You can make pepper jelly with the chopped chilis for a delicious jelly that can be spread on bagels, toast, and more. Make a habanero sauce to brush over your choice of protein, like buffalo wings, pork loin, or ribs. Use as little or as much of this fresh produce item as you like to get that perfect level of heat. Wash the peppers before use. Make this four-ounce tray of Habanero Peppers a staple in your pantry.', 'Fresh Habanero Peppers, 4 Ounce Tray High spice level peppers Perfect for adding heat to your dishes Versatile pepper Dice for pepper jelly, dice and mix with mango, onions, and tomatoes for salsa, or make a sauce and brush over your choice of protein Use as little or as much as you want to get the perfect amount of heat Delicious and fresh produce item Wash chilies before use', 'Robinson Fresh', 'https://i5.walmartimages.com/asr/5335890b-e820-43b4-a77d-99655c77526f.fad2dc5ccee7726bf0499aaec2ae908e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5335890b-e820-43b4-a77d-99655c77526f.fad2dc5ccee7726bf0499aaec2ae908e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5335890b-e820-43b4-a77d-99655c77526f.fad2dc5ccee7726bf0499aaec2ae908e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259378, 'Fresh Broccoli Crowns, Each', 1.83, '203082000009', 'These fresh broccoli crowns are a top-quality, nutritious choice for your meals. They are the premium cut of broccoli, with stalks trimmed just under the head to deliver maximum florets. Ideal for a variety of dishes such as steaming, roasting, or sautéing. These crowns are about 0.75 lbs each and packed in a recyclable, food-grade cardboard container, ensuring they are kept fresh and environmentally friendly. Enjoy them as a healthy side dish or snack with your favorite dip. Perfect for adding flavor and nutrients to soups and salads. Always choose fresh, organic produce for the best results. Also known as Brocoli and Kai-lan around the world.', 'Healthy side to any meal Excellent steamed, roasted, sautéed, in soups or served raw with a favorite dip Stalks cut short to offer greater ratio of florets per lb Approximately .75 lbs per crown Vegetable type: Fresh Broccoli Food condition: Fresh, never frozen Container type: Cardboard Box Container material: Recyclable, food-grade cardboard', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c721459d-3826-4461-9e79-c077d5cf191e_3.ca214f10bb3c042f473588af8b240eca.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c721459d-3826-4461-9e79-c077d5cf191e_3.ca214f10bb3c042f473588af8b240eca.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c721459d-3826-4461-9e79-c077d5cf191e_3.ca214f10bb3c042f473588af8b240eca.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259381, 'Fresh Coconut, Each, 1 Count', 2.74, '064081402009', 'Enjoy a taste of the tropics with a Fresh Coconut. Enjoying a fresh coconut couldn\'t be easier: just puncture the pre-scored eyes on top with a dull knife and pour out the delicious coconut water. After the water is gone, crack the coconut along the scored line, remove the coconut meat with a dull knife, and enjoy! There are so many ways to enjoy a fresh coconut; you can blend it into smoothies, cut it into chunks and add to stir fries and stews, use it as a garnish, blend it into dips and spreads, or even make your own shredded coconut for delicious desserts. Enjoy a tropical treat any time of year when you bring home a Fresh Coconut.', 'Enjoy the taste of the tropics any time of year Puncture the pre-scored eyes on top and pour out the coconut water When water is gone, crack along the scored line and remove the coconut meat Use in smoothies, stir fries, dips and spreads, as a garnish, or make your own shredded coconut Also known as Coco and Brown Coconut around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/81131765-9311-47ed-ae77-15dddde6b01d.7363231977ed5579d57e0b24cd7c1d9f.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/81131765-9311-47ed-ae77-15dddde6b01d.7363231977ed5579d57e0b24cd7c1d9f.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/81131765-9311-47ed-ae77-15dddde6b01d.7363231977ed5579d57e0b24cd7c1d9f.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259387, 'Fresh Grapefruit, Each', 1.24, '072240062063', 'Grapefruit is the perfect balance between tart and sweet. The balance between tart and sweet is great for both savory and sweet dishes any time of day. Enjoy half of a grapefruit sprinkled with sugar with some eggs in the morning for a light, sweet breakfast. Slice it up and put in a salad with spinach, avocado, and red onion topped with a mustard and balsamic vinegar dressing for lunch or dinner. Make delicious grapefruit bars that showcase the sweet and tartness of this versatile fruit. For an adult recipe juice the grapefruit and pair with some simple syrup and alcohol for a refreshing cocktail. This fruit is the perfect addition to a healthy diet as it is a great source of vitamin C and vitamin A. With such versatility, Grapefruit will become a pantry staple in your home.', 'Great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a grapefruit sprinkled with sugar in the morning, slice it up and put it in salad for lunch or dinner, or make grapefruit bars Great source of vitamin C and vitamin A', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9b886c2a-7fc2-4dbd-98fe-99c8e48e6944.f2698681c6f777003cfd13d7c6086d09.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b886c2a-7fc2-4dbd-98fe-99c8e48e6944.f2698681c6f777003cfd13d7c6086d09.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b886c2a-7fc2-4dbd-98fe-99c8e48e6944.f2698681c6f777003cfd13d7c6086d09.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259388, 'Fresh Hass Organic Bagged Avocados, 3-4 Count', 3.93, '701080310170', 'Avocados aren’t just great-tasting fresh produce items, but they are a nutrient-dense fruit that can be enjoyed throughout the year. Hass avocados are a versatile ingredient with a creamy texture and mild flavor that can be used in many different types of recipes and dishes that are perfect for enjoying at barbecues and outdoor gatherings with friends and family during the summer. Enjoy organic avocados in countless ways that will make those barbecues and gatherings with family and friends even more exciting. Use avocados in flavorful recipes that everybody can share and enjoy while being together outside. Try avocados in individual Mexican food items like tacos or burritos, as part of appetizers like avocado crostini, or in a fresh guacamole or avocado dip so everybody can dip tortilla chips into something delicious. The possibilities are deliciously endless if you need additional food options for barbecues. Not only is an organic avocado a great ingredient to use in numerous ways, but it is also a healthy food that contributes unsaturated “good” fats and almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9. An organic ripe avocado will have a dark green to nearly black skin color, a bumpy skin texture and should yield to gentle pressure without leaving indentations or feeling mushy. Avocados with a slightly bumpy texture should be ripe in 1 to 2 days. They will also be somewhat firm and have a dark green and black speckled color. Once you’ve selected the perfect bag of avocados, you’ll be ready to enjoy all kinds of different healthy foods and recipes for the next time you’re enjoying an outdoor gathering with friends and families.', 'Fresh fruit with a creamy texture and mild flavor Fresh avocados are great for using in tacos, burritos, appetizers, avocado dip and fresh guacamole so that you have delicious food to share and enjoy during barbecues and the summer months A cholesterol free fruit that contains almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9 Hass organic avocados are the lowest sugar fruit and provide unsaturated “good fats” that help absorb Vitamin A, Vitamin D, Vitamin K and Vitamin E Organic ripe avocados will have dark green to nearly black skin color, a bumpy texture and should yield to gentle pressure without leaving indentations', 'Unbranded', 'https://i5.walmartimages.com/asr/fccbe414-7ac5-49ba-8dfd-40f9ee96e683.f4a4225a6944971b127b8b012bf5a987.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fccbe414-7ac5-49ba-8dfd-40f9ee96e683.f4a4225a6944971b127b8b012bf5a987.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fccbe414-7ac5-49ba-8dfd-40f9ee96e683.f4a4225a6944971b127b8b012bf5a987.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259389, 'Marketside Fresh Broccoli Florets, 32 oz', 5.98, '681131122344', 'Add fresh and ready-to-eat broccoli florets to your meal with Marketside Broccoli Florets. These florets are an excellent source of vitamin A and vitamin C. Plus, they\'re easy to prepare! Just place desired amount of vegetables in a microwave safe dish and add one inch of water. Cover with a damp paper towel or plastic wrap and microwave on high for three to four minutes. Serve as is, or add your favorite spices for additional flavor. Add butter and cheese to steamed broccoli to create a tasty side dish. Marketside Broccoli Florets are a quick and delicious side dish and a great addition to any meal. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Fresh Broccoli Florets, 32 oz: Excellent source of vitamins A and C Serve as is, or season with salt, pepper, chili powder or garlic powder for additional flavor Quick and healthy side dish', 'Marketside', 'https://i5.walmartimages.com/asr/28f3e0d9-697b-4327-90f5-497042ebded3_1.dac2593a9c33b9ec08c83dcc0143e5f6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28f3e0d9-697b-4327-90f5-497042ebded3_1.dac2593a9c33b9ec08c83dcc0143e5f6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28f3e0d9-697b-4327-90f5-497042ebded3_1.dac2593a9c33b9ec08c83dcc0143e5f6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259397, 'Fresh Blueberries, 24 oz Container', 6.18, '665290050243', 'Create decadent meals with sweet and light Fresh Blueberries. Enjoy them for breakfast, lunch, dinner, or dessert. Use them to make a lemon and blueberry galette, bake them into delicious blueberry muffins, cook up a sweet and savory pizza topped with blueberries and bacon, or reduce them for a sauce to use on grilled chicken or cheesecake. They contain essential vitamins and nutrients like, vitamin C, vitamin K, antioxidants, and manganese making them perfect for a healthy diet. Prior to serving simply gently wash them with cool water and enjoy the fresh taste. Refrigerate the berries to keep them fresh and ready for use. Pick up a Fresh Blueberry container today and savor the delectable flavor.', 'Fresh Blueberries, 24 oz Container: Best when enjoyed at room temperature Light, refreshing taste Healthy treat Prior to serving gently wash them with cool water Refrigerate your berries in the original container to maintain freshness They should approximately last 3-5 days after purchase Keep dry for optimal freshness', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/77811688-c7bf-403f-802f-831985dc7758_1.16cf6cf228f841d5c565c35925f0cbf9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77811688-c7bf-403f-802f-831985dc7758_1.16cf6cf228f841d5c565c35925f0cbf9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77811688-c7bf-403f-802f-831985dc7758_1.16cf6cf228f841d5c565c35925f0cbf9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259398, 'Fresh Red Potatoes, Each', 0.44, '000000040730', 'These Red Potatoes are a must-have for any pantry. With so many ways to prepare potatoes, you\'ll want to add them to every meal. For breakfast, you could make crispy sliced potatoes smothered in cheese and diced ham or add them to a savory omelet. For lunch or dinner, you could use these fresh potatoes to make au gratin potatoes, garlic mashed potatoes, or roast them with your favorite spices to serve with a juicy steak and rolls. If you\'re hosting a neighborhood get-together, you can use them to add flavor and color to a creamy potato salad. Serve up something delicious when you cook with Red Potatoes.', 'Must-have addition to every pantry Roast them with your favorite spices and serve with a juicy steak Add them to a savory omelet for a mouthwatering breakfast Use them to add color and flavor to your potato salad Explore all the delicious ways to serve these satisfying potatoes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6123387a-ad45-4fd4-ad0a-d712cb5e0a38.fb33c9142ca45aa08dc52db010a12334.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6123387a-ad45-4fd4-ad0a-d712cb5e0a38.fb33c9142ca45aa08dc52db010a12334.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6123387a-ad45-4fd4-ad0a-d712cb5e0a38.fb33c9142ca45aa08dc52db010a12334.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259399, 'Steamables Sweet Potatoes Whole Fresh, 1.5 lb Bag', 3.38, '854679004186', 'Add a fresh, delicious and nutritious side to your dinner entree with Steamables Sweet Potatoes. They come pre-washed and ready to cook in the bag. This gluten-free food provides 110 calories per serving and is an ideal source of vitamin A. The potatoes also have no cholesterol and contain 4g of dietary fiber and 2g of protein. These steamable potatoes are available in a convenient 1.5-lb bag.', 'Steamables Sweet Potatoes, 1.5-lb Bag: Potato steamer, sweet Net weight: 1.5 lbs Triple washed Ready to steam in the bag Petite sweet potatoes Fresh, healthy and easy to prepare 110 calories per serving No cholesterol 4g dietary fiber 2g protein Gluten-free steamable potatoes Source of vitamin A', 'Fresh Produce', 'https://i5.walmartimages.com/asr/58964ada-46d2-4e80-8180-a43dcb16b9b8.e4da1e9da6321227068a42ab94c1aa18.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58964ada-46d2-4e80-8180-a43dcb16b9b8.e4da1e9da6321227068a42ab94c1aa18.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58964ada-46d2-4e80-8180-a43dcb16b9b8.e4da1e9da6321227068a42ab94c1aa18.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259402, 'Microwaveable Sweet Potato Whole Fresh, Each', 1.64, '855555002067', 'Make dinner simple and delicious when you serve these Microwave-Ready Sweet Potatoes. Ready to eat in ten to twelve minutes, these whole potatoes are pre-washed and ready to heat up. Simply cook them in the microwave for a satisfying side dish or main course. You can also serve them alongside a tender and juicy steak, a succulent grilled chicken breast or a country-fried pork chop. Convenient and delicious, these sweet potatoes will please the entire family. Serve up something fresh fast and delicious when you bring home Microwave-Ready Sweet Potatoes.', 'Microwave-Ready Sweet Potato, each: Ideal addition to every pantry Cooks in 10-12 minutes Pre-washed & ready to cook Add butter, salt & pepper for a quick side Load it with your favorite toppings for a full meal 8 oz minimum weight Fresh. All natural. No preservatives. Microwavable. Product of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8ccc9cad-cbe4-45ba-9a66-eaac7da18d79.1cb840929bb828ecd979f16ddd831f66.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ccc9cad-cbe4-45ba-9a66-eaac7da18d79.1cb840929bb828ecd979f16ddd831f66.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ccc9cad-cbe4-45ba-9a66-eaac7da18d79.1cb840929bb828ecd979f16ddd831f66.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259404, 'Earthbound Farm Organic Deep Green Power Blends, 5 oz', 3.46, '032601902674', 'Established in 1984 on a 2½-acre plot in California\'s lush Carmel Valley, Earthbound Farm was born. Since then, our dedication to organic farming has flourished year after year. Rooted in our humble beginnings, we express our heartfelt gratitude for choosing organic. By supporting Earthbound Farm, you join us on our mission to cultivate a healthier, more sustainable future. Thank you for your conscious choice.', '***Discontinued***GHS***ORG SLD PWR GRN 5Z E', 'Earthbound Farm', 'https://i5.walmartimages.com/asr/2082f075-89c3-430a-8411-83ed8c50f37d.533611c33670b02216ae761d3c76a6e9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2082f075-89c3-430a-8411-83ed8c50f37d.533611c33670b02216ae761d3c76a6e9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2082f075-89c3-430a-8411-83ed8c50f37d.533611c33670b02216ae761d3c76a6e9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259407, 'Taylor Farms Organic Pure Veggie Snack Tray with Creamy Ranch Dip, 7 oz', 2.5, '824862008024', 'Introducing Taylor Farms Organic Pure Veggie Snack Plastic', 'Taylor Farms Organic Pure Veggie Snack Plastic Tray with Creamy Ranch Dip, 7 oz Introducing Taylor Farms Organic Pure Veggie Snack Tray with Creamy Ranch Dip, a delicious and convenient 7 oz snack option for health-conscious individuals. This delightful tray features a variety of organic, fresh, and crunchy vegetables, such as carrots, celery, and cherry tomatoes. Paired with a delectable, creamy ranch dip, this snack provides a satisfying and guilt-free experience. Perfect for on-the-go snacking, lunchboxes, or parties, the Taylor Farms Organic Pure Veggie Snack Tray is a must-try for those seeking a nutritious and tasty treat.', 'Taylor Farms', 'https://i5.walmartimages.com/asr/07e298c3-ec43-414b-b11e-67aabec98ed8.35fc9377e14202472529684c312db990.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/07e298c3-ec43-414b-b11e-67aabec98ed8.35fc9377e14202472529684c312db990.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/07e298c3-ec43-414b-b11e-67aabec98ed8.35fc9377e14202472529684c312db990.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259408, 'Marketside with Buttermilk Ranch Dip Vegetable Tray, 20 oz', 5.98, '824862004071', 'The Marketside with Buttermilk Randy Dip Vegetable Tray is ideal to serve at any backyard barbeque, outdoor picnic or a party at home when entertaining. It includes delicious veggies with tasty buttermilk ranch dip. This Marketside vegetable tray can be transported to school parties or special occasions for a fresh and tasty appetizer or can be served with any meal as well.Marketside with Buttermilk Ranch Dip Vegetable Dip:', 'Party vegetable tray, 20 oz Buttermilk ranch dip Ideal to serve as appetizer or with meals', 'Marketside', 'https://i5.walmartimages.com/asr/9050ec0f-ad3a-41e5-aafe-998dd6ea8908.3376a3696b00ff2c9f938b0809de74cf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9050ec0f-ad3a-41e5-aafe-998dd6ea8908.3376a3696b00ff2c9f938b0809de74cf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9050ec0f-ad3a-41e5-aafe-998dd6ea8908.3376a3696b00ff2c9f938b0809de74cf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259410, 'Fresh Sweet Corn on the Cob, 4 Count Tray', 3.47, '894624001136', 'It\'s not truly summer until you\'ve had some Fresh Corn on the Cob. Just add butter and salt. While sweet corn typically invokes images of summer barbeques, it has many health benifits. Sweet corn is a great source of Vitamin A and C, with one ear of corn containing over 10% of the Daily Value (DV) of Vitamin C and over 6% DV of Vitamin A. It\'s not truly summer until you\'ve had some Fresh Corn on the Cob- just add butter and salt! Also known as Maíz empacado, Dura and Makka around the world.', 'Fresh Corn on the Cob, 4 Pack, Sweet gourmet corn on the cob, Husked, field fresh, prewashed, and ready to eat. Low in fat and cholesterol free. Ideal for your next backyard barbecue or summer camp out, May be cooked in the microwave, steamed or boiled. Serve with mashed potatoes, steak and your favorite green. U.S. Fancy Grade. Sweet gourmet corn on the cob Husked, field fresh, prewashed, and ready to eat Low in fat and cholesterol free Ideal for your next backyard barbecue or summer camp out May be cooked in the microwave, steamed or boiled Serve with mashed potatoes, steak and your favorite green U.S. Fancy Grade Fresh Sweet gourmet corn on the cob Husked, field fresh, prewashed, and ready to eat Low in fat and cholesterol free Ideal for your next backyard barbecue or summer camp out May be cooked in the microwave, steamed or boiled Serve with mashed potatoes, steak and your favorite green U.S. Fancy Grade', 'Fresh Produce', 'https://i5.walmartimages.com/asr/54b0dbba-34af-4097-9155-27a08dca29e6.e0fb7ee3bb64792004f0103789cbafd6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54b0dbba-34af-4097-9155-27a08dca29e6.e0fb7ee3bb64792004f0103789cbafd6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54b0dbba-34af-4097-9155-27a08dca29e6.e0fb7ee3bb64792004f0103789cbafd6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259411, 'Fresh Celery Stalk, Each', 1.54, '204070000001', 'Promote healthy bones by adding Fresh Celery to your diet. Celery is a low-calorie vegetable that consists mostly of water but is packed full of antioxidants and fiber. Cut off the leafy tops and bulky bottoms and enjoy them as a crisp and healthy snack or chop them up and create a fresh salad with romaine lettuce, carrots, cherry tomatoes, and croutons. They\'re also delicious when stuffed with peanut butter and dried fruit, like raisins and cranberries. Each bite is crunchy, crispy, and full of vitamins and minerals like vitamin K, which is known for helping with bone metabolism and regulating blood calcium levels. Being healthy can be fun, especially with Fresh Celery! Also known as Apio, Qin cai, Karafs and Ajmoda around the world.', 'Fresh Celery, each: Promotes healthy bones Packed full of vitamin K, antioxidants, and fiber Try dipping in a variety of sauces, like peanut butter, hummus, cheese sauce, and salad dressing Add to salads, stir fry, and soup Crispy, crunchy texture Healthy snack option Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/64e099e6-9c88-4516-b6d9-fb081114720d.0c080b0f52c5271fb6f5480eb7ad1759.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/64e099e6-9c88-4516-b6d9-fb081114720d.0c080b0f52c5271fb6f5480eb7ad1759.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/64e099e6-9c88-4516-b6d9-fb081114720d.0c080b0f52c5271fb6f5480eb7ad1759.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259412, 'Mann\'s Snap Pea Sensations Asian Sesame Style Kit, 11.35 oz', 2.38, '716519011092', 'Snap Pea Sensations, Asian Sesame, Bag 10.14 OZ Snap Peas & Topping: 10.1 oz (286 g); Dressing: 1.25 fl oz (37 ml). Sugar snap peas, Asian dressing & sesame seeds. Serve as a cold salad or hot saute. Three generations. Est. 1939. New try me! Complete Kit: Serve hot or cold. Washed & ready to eat. Preservative free. For more information contact us: Mann\'s Customer Service, PO Box 690, Salinas, CA 93902 or call 800-285-1002. veggiesmadeeasy.com. At Mann\'s, We\'re moms creating solutions for moms. Certified WBENC: Women\'s Business Enterprise. Facebook. Twitter. Pinterest. Instagram. YouTube. Dating back to the 1930\'s, farming has been a family business for three generations. We are dedicated to proving the highest quality. Fresh produce. We grow on family-owned farms using sustainable practices & follow strict quality standards. Product of USA. Keep refrigerated. Perishable. Healthy cooking made easy. Simply toss these delicious ingredients together for a quick & easy side dish or meal. Serve hot or cold! Enjoy as a Cold Salad: 1. Pour the pre-washed sugar snap peas into a bowl. 2. Add the Asian dressing and sesame seeds. 3. Toss to coat evenly; serve immediately for best results. Enjoy as a Hot Saute: 1. Pour the pre-washed sugar snap peas into a bowl. 2. Add the Asian dressing. Toss to coat evenly. 3. Preheat a non-stick skillet until hot. 4. Pour the coated sugar snap peas into the skillet and saute quickly - 1 to 2 minutes. 5. Remove from heat. Sprinkle with sesame seeds. 6. For best results serve immediately. Suggestions for Hot & Cold Dishes: Add pre-cooked quinoa or rice. Pair with grilled fish, chicken or beef. Contains soy, wheat. 1 kit Salinas, CA 93901 800-285-1002', 'Snap Pea Sensations Kit, Asian Sesame Snap Peas & Topping: 10.1 oz (286 g); Dressing: 1.25 fl oz (37 ml). Sugar snap peas, Asian dressing & sesame seeds. Serve as a cold salad or hot saute. Three generations. Est. 1939. New try me! Complete Kit: Serve hot or cold. Washed & ready to eat. Preservative free. For more information contact us: Mann\'s Customer Service, PO Box 690, Salinas, CA 93902 or call 800-285-1002. veggiesmadeeasy.com. At Mann\'s, We\'re moms creating solutions for moms. Certified WBENC: Women\'s Business Enterprise. Facebook. Twitter. Pinterest. Instagram. YouTube. Dating back to the 1930\'s, farming has been a family business for three generations. We are dedicated to proving the highest quality. Fresh produce. We grow on family-owned farms using sustainable practices & follow strict quality standards. Product of USA.', 'Mann\'s', 'https://i5.walmartimages.com/asr/ba0fa981-d121-4df5-b46f-6b63f63fc53a_1.70aece7d497d04b8b249f3094e89ab5a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ba0fa981-d121-4df5-b46f-6b63f63fc53a_1.70aece7d497d04b8b249f3094e89ab5a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ba0fa981-d121-4df5-b46f-6b63f63fc53a_1.70aece7d497d04b8b249f3094e89ab5a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51259427, 'Fresh Celery Sticks, 20 oz Bag', 2.96, '073150152233', 'Add flavor and texture to your meals with these Fresh Celery Sticks. This versatile vegetable is ideal for a variety of dishes, whether it\'s for breakfast, lunch, or dinner. Mince some up and put them in your omelet with peppers and ham for a filling and nutritious breakfast. Add them to a healthy salad for lunch or enjoy them with peanut butter and dried fruits for a quick snack. Celery is also a wonderful addition to comforting soups, hearty stews, and crowd-pleasing casseroles. Enjoy the delicious taste of Fresh Celery Sticks any way you prepare them. Also known as Palitos de apio, Karafs and Ajmoda around the world.', 'Adds flavor and texture to your meals Great for breakfast, lunch, or dinner Mince them for an omelet or put them in a salad Enjoy with peanut butter and dried fruits Delicious addition to soups, stews, and casseroles Equivalent to 2 stalks of celery Naturally sweeter and crispier Pre-cut, washed, and ready to eat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7cf2e316-000b-4d96-bdb0-b7e5545ffe28.7fe22eeb04592e2447ffeacf29b12ff1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7cf2e316-000b-4d96-bdb0-b7e5545ffe28.7fe22eeb04592e2447ffeacf29b12ff1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7cf2e316-000b-4d96-bdb0-b7e5545ffe28.7fe22eeb04592e2447ffeacf29b12ff1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (51822900, 'Fresh Minneolas, 3 lb Bag', 3.98, '814683010115', 'Enjoy the fresh sweetness of a Minneola. Sometimes called a tangelo, this citrus fruit is a hybrid of a tangerine and a grapefruit. This unique fruit can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these minneolas to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice them and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. You can also use them to make scrumptious baked goods like muffins, cakes, and tarts. However you choose to use them, fresh Minneolas add flavor to any meal or beverage.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy smoothie Serve with your pancake breakfast Use as a garnish for your favorite cocktail Use to make muffins, cakes, and tarts Available in a 3-pound bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cb719495-ecde-430f-ac16-f50569418a1d.a680eeba8ecae5cdab9837a2d2939757.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb719495-ecde-430f-ac16-f50569418a1d.a680eeba8ecae5cdab9837a2d2939757.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb719495-ecde-430f-ac16-f50569418a1d.a680eeba8ecae5cdab9837a2d2939757.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (52145777, 'Marketside Portabella Griller, 12.5 oz', 4.48, '681131133630', '', 'PORT GRILLR 12.5Z MS', 'Marketside', 'https://i5.walmartimages.com/asr/aa122005-061c-4a4d-ace5-ac6b3a340b6f_1.8b0cc8f9fc8caa1c1edd620a7624e79f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa122005-061c-4a4d-ace5-ac6b3a340b6f_1.8b0cc8f9fc8caa1c1edd620a7624e79f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa122005-061c-4a4d-ace5-ac6b3a340b6f_1.8b0cc8f9fc8caa1c1edd620a7624e79f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (52196663, 'Marketside Broccolini, 6oz', 2.88, '681131133593', 'Marketside Broccolini is a \"foodie\" favorite. It is a natural hybrid of broccoli and Chinese kale. It is featured on menus and used by chefs in many recipes and easy to cook dishes.', 'Marketside Broccolini: Easy to cook Sweet tasting and less bitter than broccoli Stems are the most delicate part to eat GMO free Low in carbs High in vitamin C Can steam or grill or microwave', 'Marketside', 'https://i5.walmartimages.com/asr/845c6d32-beef-41d2-b0e9-01e58eb9a383_1.145fc335e657d894b9a49a063aa396da.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/845c6d32-beef-41d2-b0e9-01e58eb9a383_1.145fc335e657d894b9a49a063aa396da.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/845c6d32-beef-41d2-b0e9-01e58eb9a383_1.145fc335e657d894b9a49a063aa396da.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (52268778, 'Earthbound Farm Organic Flavor Blends Sweet Kale, 4 oz', 3.46, '032601902933', 'Earthbound Farm® Organic Sweet Kale. It is a combination of crisp butter lettuce and tender baby kale. Grown without GMOs.', 'Organic Flavor Blends Sweet Kale, 4 Oz.', 'Earthbound Farm', 'https://i5.walmartimages.com/asr/2549d1e4-aaf2-4a76-bd47-a5d61c82d86f_1.9fb64bf28c622f8e0449e38b31abe62a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2549d1e4-aaf2-4a76-bd47-a5d61c82d86f_1.9fb64bf28c622f8e0449e38b31abe62a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2549d1e4-aaf2-4a76-bd47-a5d61c82d86f_1.9fb64bf28c622f8e0449e38b31abe62a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (52694731, 'Cal-Organic Farms Organic Bunch Carrots', 1.86, '032601046002', 'Cal-Organic Bunch Carrots', 'Organic Carrots, 1 bunch', 'Produce (Brands May Vary)', 'https://i5.walmartimages.com/asr/1f24acc1-4b0b-4981-978f-10d17153836b_1.2db24345e0fa1e63e69a803ff2e814ed.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f24acc1-4b0b-4981-978f-10d17153836b_1.2db24345e0fa1e63e69a803ff2e814ed.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f24acc1-4b0b-4981-978f-10d17153836b_1.2db24345e0fa1e63e69a803ff2e814ed.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (53314544, 'Melissa\'s Sweet Tamarind, 10 oz', 4.97, 'deleted_045255147261', 'Use Melissa\'s Sweet Tamarind for a variety of dishes. It works well in Indian and Middle Eastern cuisine. This fresh tamarind has a sweet and sour pulp. It makes a good seasoning for chutneys and curries. Each fruit is hand-selected to ensure high quality. Try adding it to Worcestershire sauce or make a syrup out of it to flavor your favorite soft drink. This fruit can be stored for a long time when kept in a cool place. It\'s available in a 10 oz bag. Keep it handy in the kitchen to add sweet flavor to your meals or snacks.', 'Melissa\'s Sweet Tamarind, 10 oz: Useful for Indian and Middle Eastern cooking Good for chutneys and curries Melissa\'s tamarind has a sweet and sour flavor Can be used as a seasoning or a syrup for flavoring drinks and food Keeps a long time in a cool place', 'Fresh Produce', 'https://i5.walmartimages.com/asr/aee5f74e-d32e-42b0-9fad-0c9bd3740bd1.94b9a36a6e32fba2f4f3101c9c2f8b30.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aee5f74e-d32e-42b0-9fad-0c9bd3740bd1.94b9a36a6e32fba2f4f3101c9c2f8b30.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aee5f74e-d32e-42b0-9fad-0c9bd3740bd1.94b9a36a6e32fba2f4f3101c9c2f8b30.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (53326860, 'Fresh Sweet Cherries, 1 lb Pouch', 4.48, '810506011789', 'With the arrival of warm weather comes these sweet cherries. Each package contains a whole pound of sweet, dark red fruit that can easily be enjoyed on their own or as part of a meal. These fresh cherries (1 lb) are naturally low in fat and also packed full of dietary fiber, vitamin A and calcium.Sweet Cherries:', 'Fresh Red Cherries, 1 lb Package Bursting with antioxidants, phytochemicals, vitamins, nutrients, and fiber Rich source of vitamin C, potassium, and vitamin B complex Versatile and delicious Wonderful addition to entrees, desserts, and beverages To enjoy fresh cherries: store in the refrigerator and wash just before eating Grown in Washington', 'Fresh Produce', 'https://i5.walmartimages.com/asr/999a11d3-71a7-4020-b8a9-af1a78fe5502.fba58c158bea74cdf466dc95ad1650ed.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/999a11d3-71a7-4020-b8a9-af1a78fe5502.fba58c158bea74cdf466dc95ad1650ed.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/999a11d3-71a7-4020-b8a9-af1a78fe5502.fba58c158bea74cdf466dc95ad1650ed.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (53326861, 'Fresh Apricot, Each', 4.34, '000000042185', 'Treat everyone to the sweet taste of Fresh California Grown Apricots. These apricots are great to pack in lunches or to hand out to the kids as a tasty after-school snack. Add these apricots to a fruit salad to serve at your next party or to a delectable salad as a sweet topping. Serve them with cheese, salami, and almonds for a wonderful picnic cheese plate. You could also slice them to top your yogurt and granola for a healthy breakfast, or even make a tasty apricot crumble dessert for your next dinner party. The culinary opportunities are endless with Fresh California Grown Apricots.', 'Fresh California Grown Apricots, 16 oz: Sweet and juicy Pack in lunches or hand out to the kids as a tasty after-school snack Use to make a delicious fruit salad Slice and use top your yogurt and granola for a healthy breakfast Use to make a delectable dessert for your next party', 'Fresh Produce', 'https://i5.walmartimages.com/asr/58f608b4-1e61-4e2d-b399-29535b43cac3.699ad7120cdb554eaec886680d225c20.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f608b4-1e61-4e2d-b399-29535b43cac3.699ad7120cdb554eaec886680d225c20.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f608b4-1e61-4e2d-b399-29535b43cac3.699ad7120cdb554eaec886680d225c20.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (54082903, 'Medley Tomato, 10 oz Package', 2.98, 'deleted_751666461451', 'Bring the fresh, delicious taste of Medley Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Medley Tomatoes.', 'Medley Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'NatureSweet', 'https://i5.walmartimages.com/asr/97fcc0f4-2b44-4726-a99f-a16db0ee4543.f790d6f505f2b5ecfae8b8ac59052146.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/97fcc0f4-2b44-4726-a99f-a16db0ee4543.f790d6f505f2b5ecfae8b8ac59052146.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/97fcc0f4-2b44-4726-a99f-a16db0ee4543.f790d6f505f2b5ecfae8b8ac59052146.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (54513681, 'Juicing Carrots 25 Lb Bag', 5.98, '078783670277', '', 'Grimmway Farms California Carrots, 25 lb: Hydro Cooled California Carrots', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c678f234-4c94-4a3b-b41c-c44c2c4236c7.6a5b3c11a1998229f09b8772b84c2463.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c678f234-4c94-4a3b-b41c-c44c2c4236c7.6a5b3c11a1998229f09b8772b84c2463.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c678f234-4c94-4a3b-b41c-c44c2c4236c7.6a5b3c11a1998229f09b8772b84c2463.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (54905954, 'NatureSweet Constellation Tomatoes, 16.5 oz', 4.48, 'deleted_751666414051', 'NatureSweet Constellation is a colorful blend of your favorite tomatoes in one convenient package!', 'Picked at the peak of freshness for great taste year-round The perfect variety of great taste and flavor A healthy alternative to traditional sweets', 'Constellation Tires', 'https://i5.walmartimages.com/asr/c443ee6c-ecf4-4835-a18c-662d58d81ad6_1.b153990deef5d866aa3f0c2ceb845a59.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c443ee6c-ecf4-4835-a18c-662d58d81ad6_1.b153990deef5d866aa3f0c2ceb845a59.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c443ee6c-ecf4-4835-a18c-662d58d81ad6_1.b153990deef5d866aa3f0c2ceb845a59.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (55014398, 'Fresh Garlic Sleeve, 3 Count', 1.74, '023562080099', 'Take your culinary creations to the next level with fresh, flavorful Garlic. Garlic\'s signature flavors become caramelized and sweeter when cooked, making it a perfect accompaniment to many dishes such as pasta, shrimp, chicken, stews, and more. Garlic also goes great in creamed soups, on all types of roasts, in a variety of egg dishes, or used simply with sauteed or roasted vegetables. To prepare garlic for cooking, you\'ll need to break it up into individual cloves and peel the skin. Once you\'ve done this, you can mince the garlic by chopping it into fine pieces. Spice up your next meal with a tasty clove of fresh Garlic.', 'Fresh garlic Sleeve of 3 bulbs Must-have pantry staple Flavorful addition to a wide variety of recipes Add to pasta, shrimp, chicken, stews, and more Delivers a bold, pungent flavor when eaten raw but transforms into a lightly sweet and buttery flavor when cooked Explore all the delicious ways to add fresh garlic to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1987f303-5f7b-4250-a4be-15735b797999.ee158276b27318447e0e876cc3b1291b.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1987f303-5f7b-4250-a4be-15735b797999.ee158276b27318447e0e876cc3b1291b.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1987f303-5f7b-4250-a4be-15735b797999.ee158276b27318447e0e876cc3b1291b.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (55110582, 'CiboVita Natures Garden Cranberries, 9 oz', 2.23, '846548090093', 'Cranberries, Pouch 9 OZ cibovita.com. Product of USA. Allergy Information: Packed and processed in a facility that packages peanuts, tree nuts, milk, soy, wheat and egg products. May contain pits, shell pieces or other naturally occurring objects. 9 oz (255 g) Fair Lawn, NJ 07410', 'Cranberries cibovita.com. Product of USA.', 'Nature\'s Garden', 'https://i5.walmartimages.com/asr/32101579-5f15-485f-9a1d-45955d7acfe6_1.7560e3a8b07b47be87eef370873ee67d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32101579-5f15-485f-9a1d-45955d7acfe6_1.7560e3a8b07b47be87eef370873ee67d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32101579-5f15-485f-9a1d-45955d7acfe6_1.7560e3a8b07b47be87eef370873ee67d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (55170751, 'Bushwick Get Saucy Potato Sides Creamy Herb Small Red Potatoes, 27 oz', 3.97, '080911007015', 'Bushwick Get Saucy Potato Sides Creamy Herb Small Red Potatoes are your go-to dinner dish. Easy and fast to prepare, you\'ll have a delicious side from microwave to table in minutes.', 'Potato Creamy Herb 27 Oz.', 'Unbranded', 'https://i5.walmartimages.com/asr/678cf6d4-549b-4561-8cbc-762b7cfd6add.70bc6728607cb5ebbfb3fbe1d1319159.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/678cf6d4-549b-4561-8cbc-762b7cfd6add.70bc6728607cb5ebbfb3fbe1d1319159.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/678cf6d4-549b-4561-8cbc-762b7cfd6add.70bc6728607cb5ebbfb3fbe1d1319159.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (55317047, 'Dole California Pitted Dates, 8 Oz Snack', 4.38, '075700045002', 'Picked at the peak of ripeness for maximum sweetness and flavor, our 100% natural dates are great for snacking, baking and anything else you can name under the sun. Rich in nutrients, Dole dried fruit gives you the healthy energy you need to feel refreshed and ready to shine! Grown in the Coachella Valley of California, we use Deglet Noor dates for a uniform taste, size, shape, firmness and light coloring. So we can ensure you get the same delicious, high quality date with every bite, every time. Dole California Whole Pitted Dates, 100% All Natural California Dates, 8 Oz Pouch Naturally sweet California-grown pitted dates Resealable pouch keeps dry dates fresh Dried in warm flowing air & packed for maximum freshness and flavor Naturally cholesterol free Fat free, gluten free and certified non-GMO Use for baking, cooking or enjoy as a snack on their own! Also available in Dole Chopped Dates Learn more about Dole products at dolesunshine.com WHY KIDS & PARENTS CHOOSE DOLE: FIBER-RICH SNACK: Picked at the peak of ripeness for maximum sweetness & flavor, our 100% natural dates are great for snacking, baking & anything else you can name under the sun. GLUTEN FREE: Naturally sweet DOLE Whole Pitted California Dates are a good source of dietary fiber, cholesterol free, and fat free. They\'re also gluten free and great for salads, toppings, baking, and snacking. DELICIOUS CALIFORNIA DATES: With Dole\'s shelf-stable date products, you can have the sweet taste of California Dates anywhere & anytime. For another delicious, dried fruit snack try DOLE California Dates. HEALTHY SNACKS AND JUICES: From packaged shelf stable fruit, to dried fruit, fruit juices, and frozen fruit, Dole is a world leader in growing, sourcing, distributing, and marketing packaged fruit and healthy snacks to brighten your day. REFRESHING FLAVOR: Try the refreshing bright flavor of Dole\'s packed fruit, fruit juice, and other pantry staples in all your favorite recipes!', 'Trail Mix with Dates Enjoy \"fruit chips\" as a healthy and easy-to-take alternative to potato chips Ingredients (6) 1 pkg. (8 oz.) DOLE Dates, Chopped 2 cups whole grain, square-shaped cereal 1 cup whole almonds, toasted 1 cup DOLE Seedless or Golden Raisins 1 cup dried banana chips 1 cup dried apricots, cut in half Directions Combine all ingredients in large bowl. Store in tightly sealed container or zip lock bag. Enjoy 100% All Natural Fruit with Dole: Fruit Bowls | Fruit Juice | Frozen Fruit | Frozen Smoothie Blends | Fruit Fridge Packs | Dried Fruit | Snack Bites | Dole Mixations About Dole: Dole Packaged Foods, LLC, is a world leader in growing, sourcing, distributing and marketing fruit and healthy snacks. Dole sells a full line of packaged shelf stable fruit, frozen fruit, dried fruit and juices. The company focuses on four pillars of sustainability in all of its operations: water management, carbon footprint, soil conservation and waste reduction.', 'Dole', 'https://i5.walmartimages.com/asr/59f8e989-8ca5-4623-9e1a-f364c9d2c9cb_1.4f72ec6bda2ff54fd748bc269bd17d36.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59f8e989-8ca5-4623-9e1a-f364c9d2c9cb_1.4f72ec6bda2ff54fd748bc269bd17d36.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59f8e989-8ca5-4623-9e1a-f364c9d2c9cb_1.4f72ec6bda2ff54fd748bc269bd17d36.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (55325824, 'Kirsch Kirsc Mushroom Dried Dark', 6.1, '072291000069', 'short description is not available', '1 oz QTY 12 Genuine. New 1 ounce. Kosher for Passover and year around use. Product of Chile.', 'Kirsch Mushroom', 'https://i5.walmartimages.com/asr/e9e6f40e-3083-4610-9092-8596f1bd86c3_1.29175423f4ef660db439ac5ba324bab1.xhtml+xml?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9e6f40e-3083-4610-9092-8596f1bd86c3_1.29175423f4ef660db439ac5ba324bab1.xhtml+xml?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9e6f40e-3083-4610-9092-8596f1bd86c3_1.29175423f4ef660db439ac5ba324bab1.xhtml+xml?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (55348262, 'Michigan Valley Lemon Juice', 8.18, '783963001740', 'Michigan Valley Brand Reconstituted Lemon Juice is 100% real lemon juice created from fresh lemons. It is ideal for adding a delicious twist of lemon to your favorite seafood and poultry recipes. It is also great in marinades and it brightens up both hot and cold beverages.', 'Michigan Valley Brand Reconstituted Lemon Juice: Fresh lemons Delicious No artificial flavors No artificial colors', 'Michigan Valley', 'https://i5.walmartimages.com/asr/6bd9c60b-f109-49c9-a5c1-f1ea58b4e8ee.3539be2c738673f7e049978b27204c30.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6bd9c60b-f109-49c9-a5c1-f1ea58b4e8ee.3539be2c738673f7e049978b27204c30.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6bd9c60b-f109-49c9-a5c1-f1ea58b4e8ee.3539be2c738673f7e049978b27204c30.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (55420372, 'Green Giant Fresh Cauliflower Crumbles \"Fried Rice\" Blend, 16 oz', 2.78, '605806000744', 'Add a delicious medley of vegetables to mealtime with this Green Giant Fresh Cauliflower Crumbles Fried Rice. It contains a high-nutritional blend of fresh, chopped cauliflower, broccoli, carrots and green onions. This fresh fried rice mix can be used as a quick and easy side dish, a stir-fry, a casserole and more. It lets you create your own tasty meal in just minutes without the calories or carbs of traditional rice. It\'s available in a convenient 16-oz bag.', 'Cauliflower Crumble Fry Rice: Mixture of fresh chopped cauliflower, broccoli, carrots and green onions Uses: quick and easy side dish, casserole or stir fry Create your own tasty meal in just minutes No mess, no prep and no cleanup Gluten-free Steam in pack Good source of vitamins A and C No cholesterol 0g trans fat 1g protein 2g dietary fiber 16-oz bag of Green Giant cauliflower rice blend', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b779d700-3173-492a-bc5c-05919f602a42_1.297392430f6da3c0f48e5bc8de7b1901.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b779d700-3173-492a-bc5c-05919f602a42_1.297392430f6da3c0f48e5bc8de7b1901.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b779d700-3173-492a-bc5c-05919f602a42_1.297392430f6da3c0f48e5bc8de7b1901.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (55420373, 'Growers Express Green Giant Fresh Sweet Potato, 12 oz', 3.98, '605806000751', 'Green Giant™ Fresh Sweet Potato Noodles.Fresh spiralized sweet potato.Perfect substitute for pasta!Quick cooking!Steams in pack.Gluten free.Per serving:70 Calories.0g Sat fat, 0% DV.45mg Sodium, 2% DV.4g Sugars.Vitamin A, 240% DV.Net Wt 12 oz (340 g). Keep refrigerated.Steam in pack directions:1. Tear bag at notch.2. Close bag with zipper leaving 1-inch opening.3. Place bag standing up in microwave; microwave on high 4 minutes, or until desired tenderness*. Let stand 1 minute in microwave.4. Carefully remove bag. Caution hot!5. Ready to use as recipe ingredient, or add desired seasonings to taste and enjoy!*Because microwaves cook differently, times are approximate.', 'Sweet Potato, Noodles, Spiralized, Fresh Perfect substitute for pasta! Quick cooking! Steams in pack. Box Tops for Education. Gluten free. Per Serving: 70 calories; 0 g sat fat (0% DV); 45 mg sodium (2% DV); 4 g sugars. Vitamin A (240% DV). Find delicious recipes, helpful tips & more: Scan code with app. greengiantfresh.com/sweet-potato-noodles. Find Delicious Recipes: GreenGiantFresh.com. Questions or comments? 1-800-998-9996. Follow Us On: Facebook and Twitter. Facebook. Twitter.', 'Green Giant', 'https://i5.walmartimages.com/asr/04b2ff18-e4e3-449a-b0c5-a097a396f1c4_1.3115efe5cee0d0116b6239fd77714ecb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/04b2ff18-e4e3-449a-b0c5-a097a396f1c4_1.3115efe5cee0d0116b6239fd77714ecb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/04b2ff18-e4e3-449a-b0c5-a097a396f1c4_1.3115efe5cee0d0116b6239fd77714ecb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100005418, 'Cameo Apples 3 Lb Bag', 3.42, '847473005763', 'short description is not available', 'Cameo Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100164078, 'Happy Farms Plato Sofrito, 16 oz', 4.97, '824845005125', 'Happy Farms Plato Sofrito, 16 oz', 'Happy Farms Plato Sofrito, 16oz El sofrito es la base o el ingrediente principal de casi todas nuestras comidas Contiene: recao, cebolla, ajo, y ajies dulce y pimiento cubanell Perfecto para arroz guisado, sopa, sancocho', 'Happy Farms', 'https://i5.walmartimages.com/asr/f2e33841-514e-4abf-a226-1200f640a3cf.4fccab21deba4a5ee2707fbaef417934.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f2e33841-514e-4abf-a226-1200f640a3cf.4fccab21deba4a5ee2707fbaef417934.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f2e33841-514e-4abf-a226-1200f640a3cf.4fccab21deba4a5ee2707fbaef417934.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100180082, 'Fresh Jonathan Apples, 3 lb Bag', 3.54, '033383024097', 'Looking for a sweet yet tart apple that has a tender, juicy flesh? Try Jonathan apples. These classic American apples are known for their bold red color, crisp texture, and refreshing taste. They\'re perfect for snacking, baking, or adding to salads and pies. Our Jonathan apples are hand-picked and carefully selected for optimal freshness and flavor. Try them today and taste the difference for yourself!', 'Hand-selected for exceptional quality - Crisp texture and sweet flavor make them perfect for snacking or baking - 3 lb bag ensures you\'ll have plenty to enjoy - Packed with essential nutrients and antioxidants for a healthy snack option - Versatile and delicious - great for pies, sauces, and salads - Jonathan Apples are a classic variety loved by apple enthusiasts for generations Perfect for adding fall flavors to your favorite recipes - Ideal for sharing with family and friends Freshness guaranteed, so you can trust that you\'re getting the best quality apples every time. Grab these and some organic ingredients at your local store today!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9a59a607-72a2-47af-931b-66bfd2545132.719bbba29477d6f0ea3dc2f26b91ebfd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9a59a607-72a2-47af-931b-66bfd2545132.719bbba29477d6f0ea3dc2f26b91ebfd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9a59a607-72a2-47af-931b-66bfd2545132.719bbba29477d6f0ea3dc2f26b91ebfd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100215565, 'Fresh White Asparragus, 1lb', 4.98, '400094305522', 'Esparrago Blanco, 1 Lb.', 'Esparrago Blanco', 'Unbranded', 'https://i5.walmartimages.com/asr/475d9d6e-2ae9-46ff-b23c-957c37981467.487b7f473e4d95ad742c822da8a43758.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/475d9d6e-2ae9-46ff-b23c-957c37981467.487b7f473e4d95ad742c822da8a43758.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/475d9d6e-2ae9-46ff-b23c-957c37981467.487b7f473e4d95ad742c822da8a43758.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100306180, 'Apple Banana, 3 Lb.', 8.48, '763478052468', 'Apple Banana, 3 Lb.', 'Apple Banana 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/797c5cdd-32c9-4ad1-a87a-06eabc0d1e8a.b7616ae5864f3316806e49d3c5004084.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/797c5cdd-32c9-4ad1-a87a-06eabc0d1e8a.b7616ae5864f3316806e49d3c5004084.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/797c5cdd-32c9-4ad1-a87a-06eabc0d1e8a.b7616ae5864f3316806e49d3c5004084.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100390215, 'Soy Wax Melts (Various Scents)', 41.53, '000000004060', 'Wax melts are scented pieces of wax without a wick. A wax melt can give off a slight scent when cold; however, they are designed to be slowly warmed using a tart or wax warmer. Our wax warmers on our website complements these wonderful scents. Our wax warmers are electric and provide a large aroma Wax melts are very easy to use. You simply take your wax melt and place one or more in your warmer and then turn on your heat warmer. When you are finished using them, you just turn off the warmer and the wax will solidify until you are ready to use it again. When you are ready to use it again, just turn the warmer back on to begin the melting process. When you are ready to dispose of the used wax melts, you just allow the wax to harden, then just allow it to heat for a few minutes to loosen it and it should pop right out. Our wax is safe to throw away without any harm to our environment.', 'Broccoli', 'unknown', 'https://i5.walmartimages.com/asr/6975c4f4-4050-48b0-a7ab-12d9aef71b05_1.e508323f2758d9260355211d7109e4c8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6975c4f4-4050-48b0-a7ab-12d9aef71b05_1.e508323f2758d9260355211d7109e4c8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6975c4f4-4050-48b0-a7ab-12d9aef71b05_1.e508323f2758d9260355211d7109e4c8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100440051, '3 Lb Bag Of Apples', 6.97, '741839005933', 'Apples, Pink Lady, Lil Snappers, Bag 3 LB 2-1/2 inch min dia. Sweet with a zippy finish. Resealable. World famous fruit. Kid size fruit. Meets or exceeds US extra fancy. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us: YouTube; Facebook; Twitter; Pinterest. For fun recipes, activities and more, visit www.lilsnappers.com. World famous fruit. Responsible choice. Fruits & Veggies: more matters. Produce of USA. 3 lb (1.36 kg) Wenatchee, WA 98801', 'PKLADY SNP 3#WA STM', 'Unbranded', 'https://i5.walmartimages.com/asr/09a46f99-cbab-4c12-9801-942bf1f02fdd_1.3ef9616b9d2a9ca8adbf1b94a7f209ba.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/09a46f99-cbab-4c12-9801-942bf1f02fdd_1.3ef9616b9d2a9ca8adbf1b94a7f209ba.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/09a46f99-cbab-4c12-9801-942bf1f02fdd_1.3ef9616b9d2a9ca8adbf1b94a7f209ba.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100449030, 'Garden Salad Mix, 16 Oz.', 1.48, '750641000111', 'Garden Salad Mix, 16 Oz.', 'Garden Salad Mix 16 Oz.', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100527394, 'Love Beets Ready-to-Eat Cooked Beets 8.8 oz', 2.72, '850996004441', 'Love Beets Cooked Beets Rte 8.8 oz', 'Beets, Cooked, Ready-to-Eat', 'Love Beets', 'https://i5.walmartimages.com/asr/bda916b9-67a1-46df-a90d-37bef8f82b1e.fcec520ecfe85987cc1ffe9b332b0f2b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bda916b9-67a1-46df-a90d-37bef8f82b1e.fcec520ecfe85987cc1ffe9b332b0f2b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bda916b9-67a1-46df-a90d-37bef8f82b1e.fcec520ecfe85987cc1ffe9b332b0f2b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100615485, 'Ak Alaska Jumbo Onions, 1 Lb.', 0.94, '405504388201', 'Ak Alaska Jumbo Onions, 1 Lb.', 'Ak Onions Jumbo', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100626718, 'Tasteful Selections Russet Potatoes Org 3#', 5.97, '826088499303', 'Organic Russet potato 3#', 'Tasteful Selections®, the absolute leader and pioneer in the category of best-quality, bite-size baby potatoes, offers an expanded, year-round organics program. More varieties, more pack sizes, same great taste and quality. Our three-pound bags are available in Honey Gold®, Ruby Sensation® and the new offering, Tasteful Selections organic russet potato. copy rights tasteful selections', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/aece20a9-a060-4f06-9ffc-bbc86d58d752.633a6cec25d2ff72185eca3f5a31ef8f.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aece20a9-a060-4f06-9ffc-bbc86d58d752.633a6cec25d2ff72185eca3f5a31ef8f.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aece20a9-a060-4f06-9ffc-bbc86d58d752.633a6cec25d2ff72185eca3f5a31ef8f.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100674698, 'Fresh Baby Yellow Potatoes, 28oz.', 4.47, '858143004085', 'Yellow Potatoes are hand selected for excellent quality. Firm, well-shaped, and smooth, these potatoes can be cooked in almost any way imaginable. They have a wonderful, buttery texture and flavor when baked, roasted, boiled, steamed, sauteed, or mashed. Feature them in a potato salad or cook them up and serve as a savory side dish to your favorite protein. To preserve the nutrients, leave the skins on and simply scrub gently in water before cooking. Always store potatoes in a cool, well-ventilated area rather than in the refrigerator. Enjoy nutrients, flavor, and all-around deliciousness when you cook up Yellow Potatoe', '4 ounce bag of fresh Honey Gold potatoes Fast and easy prep Triple washed No need to peel Offering naturally creamy textures and buttery sweet flavor Great for every day or gourmet meals', 'Agro', 'https://i5.walmartimages.com/asr/2d3c7ddd-775f-4cdf-9afa-1d79d80aad37.47ca71f24a61781ee07f37884ba4ef7b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2d3c7ddd-775f-4cdf-9afa-1d79d80aad37.47ca71f24a61781ee07f37884ba4ef7b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2d3c7ddd-775f-4cdf-9afa-1d79d80aad37.47ca71f24a61781ee07f37884ba4ef7b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100802638, 'Melon Medly', 10.98, '893268001021', 'short description is not available', 'Melon Medly', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (100892590, 'Marketside Organic Fresh Broccoli Slaw, 16 oz', 3.77, '681131179430', 'Marketside Organic Broccoli Slaw is packed with a wholesome blend of broccoli, carrots and red cabbage. This crisp medley of USDA approved organic vegetable shreds is packed fresh, washed and ready to eat for your convenience. Use this blend to make our delicious broccoli slaw with raisins recipe located directly on the back of the packaging, or use it to create a brand-new slaw recipe that you and your family will serve for generations to come. Serve this tasty blend with baked chicken and grilled asparagus for a delicious and healthy meal. Dinner sides are made easy with Marketside Organic Broccoli Slaw. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Blend of crisp broccoli, carrots and red cabbage Washed and ready to eat USDA Organic Includes broccoli slaw with raisins recipe 5 servings per container Requires to be kept refrigerated', 'Marketside', 'https://i5.walmartimages.com/asr/0bcb3eac-a7e2-43a7-8b1a-9d387436fc51.59f68144ad3fec0eedd67f3386eb6e36.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0bcb3eac-a7e2-43a7-8b1a-9d387436fc51.59f68144ad3fec0eedd67f3386eb6e36.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0bcb3eac-a7e2-43a7-8b1a-9d387436fc51.59f68144ad3fec0eedd67f3386eb6e36.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101054749, 'Fresh Cubanelle Peppers, lb', 2.17, '400094251041', 'Cubanelle pepper, a culinary delight! With its narrow, round-tipped shape and vibrant pale to glossy green color, this pepper measures approximately 6-8 inches in length. It is cherished for its sweet and mild flavor. Elevate your dishes with the irresistible taste of the cubanelle pepper - a true culinary gem.', 'Peppers are a great way to add flavor into one\'s diet and lessen the need to add salt. For a more mild, smoky flavor, roast before using. For a fresh, hot flavor, consume raw. refrigerate in its original packaging for up to one week. Wash well before using', 'Unbranded', 'https://i5.walmartimages.com/asr/b14520bb-32ef-4943-a03c-c854e6f7030d.0e9c2b154c902f128e4b7c69bd1ce880.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b14520bb-32ef-4943-a03c-c854e6f7030d.0e9c2b154c902f128e4b7c69bd1ce880.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b14520bb-32ef-4943-a03c-c854e6f7030d.0e9c2b154c902f128e4b7c69bd1ce880.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101143466, 'Sliced Baby Bella Mushrooms, 8 oz', 2.37, 'deleted_081453618752', 'Experience the fresh taste of our Sliced Baby Bella Mushrooms. Baby bella mushrooms look similar in size and shape to white mushrooms, but they\'re hardier and provide a deeper earthy taste. They are just like the large portabella mushrooms you know and love but have been harvested just a few days before becoming large enough to fit a burger. This means they have that same firm, meaty texture you love about portabella caps, just in a tasty bite-size form. Pre-cleaned and pre-sliced, their hearty, full-bodied taste makes them an excellent addition to beef, wild game, and vegetable dishes. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try out our Sliced Baby Bella Mushrooms.', 'Sliced Baby Bella Mushrooms, 8 oz: 8-ounce package of sliced baby bella mushrooms Naturally fat free Cholesterol free Low in calories, carbs and sodium Fresh and all natural Pre-cleaned Natural source of the antioxidant selenium Excellent addition to beef, wild game and vegetable dishes', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/e765cc1a-41e9-4289-89ac-067b6b616291.efaf86c523518e6c4b003a3fb33b65c1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e765cc1a-41e9-4289-89ac-067b6b616291.efaf86c523518e6c4b003a3fb33b65c1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e765cc1a-41e9-4289-89ac-067b6b616291.efaf86c523518e6c4b003a3fb33b65c1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101213833, 'Sweet Onions, 5 lb.', 4.48, '883616004095', 'Sweet Onions, 5 Lb. Introducing a 5-pound bag of Sweet Onions, perfect for all your cooking and culinary needs. These versatile and delicious onions are known for their mild, sweet taste and low sulfur content, making them a popular choice for a wide range of dishes and recipes. Sweet Onions are ideal for eating raw in salads and sandwiches, but they also shine when cooked in soups, stir-fries, and other savory dishes. With their tender, juicy flesh and delightful sweetness, these onions add a touch of natural flavor and depth to your meals.', 'Sweet Onion 5lb Bag Introducing a 5-pound bag of Fresh Whole Sweet Onions, perfect for all your cooking and culinary needs. These versatile and delicious onions are known for their mild, sweet taste and low sulfur content, making them a popular choice for a wide range of dishes and recipes. Sweet Onions are ideal for eating raw in salads and sandwiches, but they also shine when cooked in soups, stir-fries, and other savory dishes. With their tender, juicy flesh and delightful sweetness, these onions add a touch of natural flavor and depth to your meals.', 'Unbranded', 'https://i5.walmartimages.com/asr/b93e4a4f-4177-454a-9f4f-1074bf090066.37b03974d3954e9a0e299d1712e88ab5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b93e4a4f-4177-454a-9f4f-1074bf090066.37b03974d3954e9a0e299d1712e88ab5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b93e4a4f-4177-454a-9f4f-1074bf090066.37b03974d3954e9a0e299d1712e88ab5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101215034, 'White Sweet Potatoes 3 Lb Bag', 2.84, '832298000710', 'short description is not available', 'White Sweet Potatoes 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101220641, 'Organic Butternut Squash 8 Oz', 3.98, '853968006894', 'short description is not available', 'Organic Butternut Squash 8 Oz', 'Unbranded', 'https://i5.walmartimages.com/asr/2c5aef39-51be-46d0-9524-875f4c1a4e66_1.e9ddfe94964b796aa247b7ae7de959e4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2c5aef39-51be-46d0-9524-875f4c1a4e66_1.e9ddfe94964b796aa247b7ae7de959e4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2c5aef39-51be-46d0-9524-875f4c1a4e66_1.e9ddfe94964b796aa247b7ae7de959e4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101247887, 'Sunkist Growers Sunkist Lemons, 1 lb', 3.88, '605049395300', 'Lemons, Baby, Bag 1 LB Fruit & Veggies: More matters. Coated with food-grade vegetable-, beeswax-, and/or lac-resin-based wax or resin, to maintain freshness. www.sunkist.com. Produce of USA. 1 lb (454 g) Valencia, CA 91355 2014', 'Lemons, Baby Fruit & Veggies: More matters. Coated with food-grade vegetable-, beeswax-, and/or lac-resin-based wax or resin, to maintain freshness. www.sunkist.com. Produce of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/74e4435c-b2b0-4688-baa7-f70432698860.069ed2f402edc305b7abc7da515fc9f5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/74e4435c-b2b0-4688-baa7-f70432698860.069ed2f402edc305b7abc7da515fc9f5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/74e4435c-b2b0-4688-baa7-f70432698860.069ed2f402edc305b7abc7da515fc9f5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101262303, 'Rooster Potatoes, 4 Count', 2.97, '852883004022', 'Rooster Potatoes, 4 Count', 'Rooster Potatoes 4 Pack', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101292970, 'Fresh Minzano Tomato, 10 oz Package', 2.58, '057836021563', 'Bring the fresh, delicious taste of Grape Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Grape Tomatoes.', 'Sunset® Minzano® Tomatoes Super Tuscan®. Gourmet chef inspired. The perfect saucing tomato. Whole, sweet tomatoes. Net Wt. 10 Oz 284 g. NON-GMO', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b97455d3-e3f9-41c9-a224-176b200088bd_1.ae27d2f15770f063aac88dceae3cef76.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b97455d3-e3f9-41c9-a224-176b200088bd_1.ae27d2f15770f063aac88dceae3cef76.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b97455d3-e3f9-41c9-a224-176b200088bd_1.ae27d2f15770f063aac88dceae3cef76.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101323175, 'Organic Butternut Squash 15 oz', 3.46, '824862702168', 'short description is not available', 'ORG BUTTERNUT 15Z TF', 'Fresh Produce', 'https://i5.walmartimages.com/asr/11a70b37-5b5b-4704-9399-c3939e0165bb_1.d171c7131a698cf7b7309cd3ed1407d7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/11a70b37-5b5b-4704-9399-c3939e0165bb_1.d171c7131a698cf7b7309cd3ed1407d7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/11a70b37-5b5b-4704-9399-c3939e0165bb_1.d171c7131a698cf7b7309cd3ed1407d7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101354337, 'Fresh Honeycrisp Apples, 2.5 lb Bag', 5.46, '888289403794', 'Our Honeycrisp fresh apples are bursting with flavor and are the perfect snack for any time of day! These crisp and juicy apples have a sweet yet slightly tart taste that will leave your taste buds wanting more. They\'re also a great source of fiber and essential vitamins, making them a healthy snack choice. Try them today and taste the difference!', 'Fresh Fruit Natural Can be stored in refrigerators', 'Unbranded', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101358491, 'Freshly Chopped Green Onions', 2.58, 'deleted_643550000689', 'short description is not available', 'Freshly Chopped Green Onions', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101373810, 'Pacific Rose Apples 3 Lb Bag', 3.94, '066022003078', 'short description is not available', 'Pacific Rose Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101410103, 'Tanimura & Antle Tanimura & Antle Lettuce, 2 ea', 3.97, '027918922231', 'Lettuce, Artisan Romaine 2 heads Grown with family pride for 3 generations. Field-packed for freshness. Fill it. Dip it. Grill it. Resealable for freshness. The Artisan Advantage: Tanimura & Antle\'s exclusive seed varieties can only be found on our farms. Tanimura & Antle\'s Artisan Romaine is a unique whole head lettuce variety that has the refreshing crunch of iceberg lettuce and the sweet flavor of a romaine heart. www.taproduce.com. Produce of USA. Wash before use. 2 heads Salinas, CA 93908', 'Lettuce, Artisan Romaine Grown with family pride for 3 generations. Field-packed for freshness. Fill it. Dip it. Grill it. Resealable for freshness. The Artisan Advantage: Tanimura & Antle\'s exclusive seed varieties can only be found on our farms. Tanimura & Antle\'s Artisan Romaine is a unique whole head lettuce variety that has the refreshing crunch of iceberg lettuce and the sweet flavor of a romaine heart. www.taproduce.com. Produce of USA.', 'Tanimura & Antle', 'https://i5.walmartimages.com/asr/14151d06-adbc-4523-8cb7-f58e88764074_1.22cfbe36a93c525a0fde03fecf59430e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/14151d06-adbc-4523-8cb7-f58e88764074_1.22cfbe36a93c525a0fde03fecf59430e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/14151d06-adbc-4523-8cb7-f58e88764074_1.22cfbe36a93c525a0fde03fecf59430e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101482530, 'Watermelon Seedless', 4.98, '400094918579', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101501735, 'Taylor Farms Petite Carrots Grape Tomatoes Broccoli R', 2.67, '030223101598', 'short description is not available', 'Taylor Farms Petite Carrots Grape Tomatoes Broccoli R', 'Taylor Farms', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101672552, 'Mexico Heirloom Tomatoes', 3.09, '405547134117', 'short description is not available', 'Mexico Heirloom Tomatoes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101715698, 'Jonagold Apples 3 Lb Bag', 3.94, '022906300121', 'Shock absorbing and weather resistant neoprene material is perfect to protect your device. Looking for case that protects your tablet as well store additional accessories like Smart Case, this is the solution of your problems. Internal Dimensions of this case are 7.75 x 5.25 inches while external 8.5 x 5.875 inches.', 'Product Features: Constructed of shock-absorbing & weather resistant neoprene material Non-abrasive material lines interior securing your device for safe travel and storage Slim and lightweight design provides low-profile protection against every day wear and tear Stylish exterior graphic and Dual zippers make accessing your device quick and easy Fashion Sleeve Pouch for your 7 Inch Samsung Galaxy Tab A 2016, Samsung Galaxy J Max, Samsung Galaxy Tab 3 Lite 7.0, Samsung Galaxy Tab 4 7.0 is Tough enough to protect your tablet yet stylish to take everywhere you go. The high-grade and highly durable neoprene is water resistant and offers advanced protection from bumps, scratches and dust. And the smooth, non-scratch interior lining offers enhanced screen protection while your device is tucked away. Ideal for any tablet or e-book up to 7.75 inches, this no-bulk case easily slides into your bag, briefcase or backpack and perfect for those of you on the go. This Sleeve is compatible for most Tablets or Netbooks upto 7.75 inch. This pouch can accommodate your Samsung Galaxy Tab A 7.0 2016, Samsung Galaxy J Max, Samsung Galaxy Tab 3 Lite 7.0, Samsung Galaxy Tab 4 7.0. Product Features: Constructed of shock-absorbing & weather resistant neoprene material Non-abrasive material lines interior securing your device for safe travel and storage Slim and lightweight design provides low-profile protection against every day wear and tear Stylish exterior graphic and Dual zippers make accessing your device quick and easy', 'Unbranded', 'https://i5.walmartimages.com/asr/584f425c-b199-451c-a82a-781256572bed_1.9e4f8d8e45009fcc99ac41360eb28f6a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/584f425c-b199-451c-a82a-781256572bed_1.9e4f8d8e45009fcc99ac41360eb28f6a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/584f425c-b199-451c-a82a-781256572bed_1.9e4f8d8e45009fcc99ac41360eb28f6a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101721551, 'Jonagold Apples, 5 lbs Bag', 4.92, '033308005514', 'short description is not available', 'New York Apple Sales Jonagold Apples, 5 lbs', 'Fresh Produce', 'https://i5.walmartimages.com/asr/de530635-1316-44a7-9923-ed57e8eb30ac.fe2ef957bce8c012d6e00a0ff1145c1f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/de530635-1316-44a7-9923-ed57e8eb30ac.fe2ef957bce8c012d6e00a0ff1145c1f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/de530635-1316-44a7-9923-ed57e8eb30ac.fe2ef957bce8c012d6e00a0ff1145c1f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101751977, 'Grape Tomato, 10 oz Package', 2.88, '711069545271', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101754657, 'California Grown Peaches, per Pound', 1.58, '400094644669', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101804393, 'Walmart Produce Watermelon 10 Oz', 3.98, '077745245935', 'short description is not available', 'Walmart Produce Watermelon 10 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101902568, 'X-Seed 204FD0020UC-50 50 lbs Annual Gulf Ryegrass - Light Green', 49.35, '738835151009', 'X-Seed Annual Ryegrass Full Sun/Light Shade Grass Seed 25 lb.', 'Brand Name: X-Seed Grass Type: Annual Ryegrass Sunlight Required: Full Sun/Light Shade Product Type: Grass Seed Container Size: 25 lb. Coverage Area: 35000 sq. ft. Packaging Type: Bagged Drought Tolerant: No', 'X-Seed', 'https://i5.walmartimages.com/asr/0423f779-e940-474f-aaa1-1d5ac8c621eb.21c54e8d64d9407c5efc25971335139d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0423f779-e940-474f-aaa1-1d5ac8c621eb.21c54e8d64d9407c5efc25971335139d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0423f779-e940-474f-aaa1-1d5ac8c621eb.21c54e8d64d9407c5efc25971335139d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (101958082, 'Ready Pac Foods Ready Pac Pineapple, 10.5 oz', 3.88, '077745237497', 'Pineapple, Gold, Chucks 10.5 oz (298 g) Natural fruit. Perishable. No preservatives. Keep refrigerated. 10.5 oz (298 g) Irwindale, CA 91706 800-800-7822', 'Pineapple, Gold, Chucks Natural fruit. Perishable. No preservatives.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (102067344, 'Baking Potatoes Whole Fresh, lb', 1.27, '400094439708', 'Baking Potatoes are the perfect addition to your pantry. With so many ways to prepare potatoes, you\'ll want to add them to every meal. For breakfast, you could make crispy hash browns smothered in cheese and diced ham or add them to a savory omelet. For lunch or dinner, you could use these fresh potatoes to make au gratin potatoes, garlic mashed potatoes, or a baked potato loaded with cheese, sour cream, green onions, and bacon bits. If you\'re hosting a neighborhood get-together, you can use them to make creamy potato salad or homestyle French fries. Serve up something delicious when you cook with Russet Baking Potatoes.', 'Ideal addition to every pantry Make crispy hash browns or add to an omelet Serve garlic mashed potatoes or a loaded baked potato Great for potato salad or homestyle French fries', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/b8e26cef-3be9-470e-9829-70b78314eb57.ff1adc06a3c934de89587c489035ce18.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b8e26cef-3be9-470e-9829-70b78314eb57.ff1adc06a3c934de89587c489035ce18.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b8e26cef-3be9-470e-9829-70b78314eb57.ff1adc06a3c934de89587c489035ce18.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (102285367, 'Fresh Nectarines, 2.5 Lb.', 4.47, '078742064963', 'Fresh Nectarines, 2.5 Lb.', 'Fresh Nectarines 2.5# Box', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (102527901, 'Fresh Whole Organic Heirloom Tomato, 1 lb Package', 3.77, '044419310213', 'Enjoy the robust flavor of Fresh Whole Organic Heirloom Tomatoes. These tomatoes feature vibrant colors with sweet, juicy flavor in each bite, making them a versatile ingredient that\'s perfect for a wide range of dishes. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. These organic tomatoes are certified organic, meaning that you can enjoy a healthy, flavorful addition to elevate the taste and texture of any meal. They make an excellent addition to meals or simply enjoy them alone for a healthy and refreshing snack. Bring the fresh and delicious taste of Fresh Whole Organic Heirloom Tomatoes to your kitchen today!', 'Fresh Whole Organic Heirloom Tomato, 1 lb Package Sweet and juicy flavor in every bite Versatile ingredient that\'s perfect for a wide range of dishes Slice them up to garnish a sandwich or burger for added flavor and texture Dice them up to create a pizza or pasta topping Crush them up to make a decadent bruschetta or sauce Finely blend them to create your own personalized salsa USDA certified organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e5cd9099-5b09-4cec-bf7b-2d63171f2a34.5f61dc1fc2b1fa276fbdc2e1158994a3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5cd9099-5b09-4cec-bf7b-2d63171f2a34.5f61dc1fc2b1fa276fbdc2e1158994a3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5cd9099-5b09-4cec-bf7b-2d63171f2a34.5f61dc1fc2b1fa276fbdc2e1158994a3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (102553887, 'Tomate Tubo, 3 Count', 1.67, 'deleted_052435000186', 'Tomate Tubo, 3 Count', 'Tomate Tubo 3ea', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/4e60a468-e7e6-4b55-bd09-7a4fb34c3fb6.1b2a353cafa527929a8efc76edae5101.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4e60a468-e7e6-4b55-bd09-7a4fb34c3fb6.1b2a353cafa527929a8efc76edae5101.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4e60a468-e7e6-4b55-bd09-7a4fb34c3fb6.1b2a353cafa527929a8efc76edae5101.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (102670221, 'Grapple Apple, 1 Each', 2.97, '847473003134', 'Apple, Grape Flavored 1 each', 'Apple, Grape Flavored, heart healthy, cholesterol free, gluten free', 'Unbranded', 'https://i5.walmartimages.com/asr/7a714673-cf2a-4446-80d9-0448cf3e3fa7.88ce7ac733a484926507e622948b31af.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a714673-cf2a-4446-80d9-0448cf3e3fa7.88ce7ac733a484926507e622948b31af.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a714673-cf2a-4446-80d9-0448cf3e3fa7.88ce7ac733a484926507e622948b31af.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (103122112, 'White Pearl Onions, 6 Oz.', 2.98, '075574859033', 'White Pearl Onions, 6 Oz.', 'White Pearl Onions 6 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (103202561, 'Uva Blanca, 1 Lb.', 4.98, '400094434383', 'Uva Blanca, 1 Lb.', 'Uva Blanca', 'Unbranded', 'https://i5.walmartimages.com/asr/45626e63-5f01-424c-9aa1-974ff5c54570.1891b7a9e57bb594fb892e8dceb32fa6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/45626e63-5f01-424c-9aa1-974ff5c54570.1891b7a9e57bb594fb892e8dceb32fa6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/45626e63-5f01-424c-9aa1-974ff5c54570.1891b7a9e57bb594fb892e8dceb32fa6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (103397459, 'Fresh Slicing Tomato, 6 Pack', 4.27, '858143004139', 'Create something wholesome and delicious with Tomatoes. These fresh tomatoes are the perfect ingredient for a variety of tasty dishes. Use them to make a decadent tomato sauce for a pasta dish; try slicing them up and pairing with mozzarella cheese, basil and balsamic vinegar; or simply enjoy them on their own as a nutritious snack. They would make a comforting and appetizing tomato soup and a flavorful salsa. You could also slice them up and use them to top burgers and pizza or use them to make a delicious grilled cheese and tomato sandwich. However you choose to use them, these tomatoes will add flavor and taste to any meal. Be sure to add these fresh tomatoes to your Walmart purhase today.', 'Slicing Tomatoes, 6 Count Pack of 3 fresh, whole slicing tomatoes Firm and thick-skinned Large size is perfect for slicing up and garnishing sandwiches and burgers Classic tomato flavor lends itself to a wide variety of recipes', 'Unbranded', 'https://i5.walmartimages.com/asr/d54fc0c1-a72c-453f-9a53-7961df8d9fc9.0960fbc3fd414e71298c1c3bd35b69f8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d54fc0c1-a72c-453f-9a53-7961df8d9fc9.0960fbc3fd414e71298c1c3bd35b69f8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d54fc0c1-a72c-453f-9a53-7961df8d9fc9.0960fbc3fd414e71298c1c3bd35b69f8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (103412487, 'Organic Concorde Pear, per Pound', 0.88, '883391930169', 'Organic Concorde Pear, per Pound', 'Organic Concorde Pear', 'Fresh Produce', 'https://i5.walmartimages.com/asr/aae2fd45-cfe2-4215-aa6b-df615108d360.94ba67d1cb58d7877e7b7eb32ea6e6b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aae2fd45-cfe2-4215-aa6b-df615108d360.94ba67d1cb58d7877e7b7eb32ea6e6b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aae2fd45-cfe2-4215-aa6b-df615108d360.94ba67d1cb58d7877e7b7eb32ea6e6b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (103562120, 'Fresh Large Heirloom Pumpkin, Whole, Each (Color and Variety May Vary)', 6.88, '892961001215', 'Celebrate the arrival of fall with our Large Heirloom Pumpkins, the perfect blend of beauty and purpose. Each pumpkin is fresh, whole, and uniquely shaped, offering rich colors and textures that transform any space into an autumn showcase. Whether you’re stacking them by a hay bale with bright fall foliage, creating a cozy Thanksgiving centerpiece, or building a playful Halloween scene with scarecrows and cobwebs, these pumpkins bring warmth and charm to your seasonal décor. Unlike ordinary carving pumpkins, heirloom varieties such as Cinderella, Fairytale, and Jarrahdale provide both decorative appeal and culinary value. Their thick, sweet flesh is ideal for homemade pies, soups, and roasted sides—making them as delicious as they are beautiful. Available only during the fall harvest, these pumpkins embody the spirit of the season and add an authentic touch to every autumn celebration.', 'Fresh Autumn Harvest – Whole heirloom pumpkin in unique colors, shapes, and textures (variety may vary from image). Perfect for Décor – Elevates front porch displays, Thanksgiving buffets, and seasonal table centerpieces. Ideal for Stacking - create layered porch displays or tiered centerpiece arrangements Halloween Ready – Arrange with scarecrows, cobwebs, and lanterns for a festive, spooky touch. Heirloom Varieties – Distinctive pumpkins like Cinderella, Fairytale, and Jarrahdale bring storybook charm and heritage flavor. Dual-Purpose Value – Beautiful for decorating and rich in thick, sweet flesh for pies, soups, and roasting. Generous Size – Large, impactful pumpkins that make a statement indoors and outdoors. Seasonal Treasure – A limited-time harvest product available only in the fall—get them while they last.', 'Fresh Large Heirloom Pumpkin', 'https://i5.walmartimages.com/asr/95a721a0-add1-4fc8-9598-d212f571e6ec.ddec8e112381727de01da55e3dd7707f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95a721a0-add1-4fc8-9598-d212f571e6ec.ddec8e112381727de01da55e3dd7707f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95a721a0-add1-4fc8-9598-d212f571e6ec.ddec8e112381727de01da55e3dd7707f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (103607444, 'Whole Baby Carrots 6oz', 3.99, '853968006849', 'short description is not available', 'Whole Baby Carrots 6oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/cc0e9ef7-59f8-45c6-aa7b-af1ee8933e74_1.09fd366041a8e9e931217bf1e0aa6745.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc0e9ef7-59f8-45c6-aa7b-af1ee8933e74_1.09fd366041a8e9e931217bf1e0aa6745.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc0e9ef7-59f8-45c6-aa7b-af1ee8933e74_1.09fd366041a8e9e931217bf1e0aa6745.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (103755489, 'Fresh Red Seedless Grapes', 1.87, 'deleted_014668760152', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (103767871, 'Tri-Color Onions, 3 Lb.', 2.48, '605806003042', 'Tri-Color Onions, 3 Lb.', 'Tri-color Onions 3 Lb Bag', 'SUNSET', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (103796373, 'Fresh Red Seedless Grapes, 3 lbs', 8.47, '033383250786', 'Treat yourself to the delicious, juicy flavor of Fresh Red Seedless Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Red Seedless Grapes.', 'Fresh Red Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (103799684, 'Fresh Whole Grape Tomato, 10 oz Bag', 3.97, '816239013328', 'Fresh Whole Grape Tomatoes are an exciting summer treat, and they\'re the perfect size for skewers, salads and roasting. These bite-sized grape tomatoes look and taste great. Grape tomatoes are a low-calorie treat that are also low in sodium and are a good source of fiber. Whether you are snacking or adding them to your favorite dish. their uses are almost limitless. Try these grape tomatoes with feta cheese, fresh dill, and a drizzle of olive oil for a light and delicious Mediterranean treat. Or make a caprese salad with grape tomatoes, fresh basil, fresh mozzarella, and balsamic vinegar. With 10-ounces of tomatoes in each package, you\'ll have plenty to make mouthwatering meals. Use your imagination to create delicious dishes with Fresh Whole Grape Tomatoes.', 'Fresh Whole Grape Tomatoes, 10 oz Package Perfect size for skewers, salads and roasting Low-calorie, low in sodium, and a good source of fiber Pair with feta cheese, fresh dill, and a drizzle of olive oil for a Mediterranean dish Make a caprese salad with grape tomatoes, fresh basil, fresh mozzarella, and balsamic vinegar', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (103864881, 'Cherry Tomato, 10 oz Package', 2.98, 'deleted_606105112657', 'Bring the fresh, delicious taste of Cherry Tomatoes into your home. Because of their notable flavor and thicker skin, they are a versatile tomato that\'s great for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, cherry tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with these fresh Cherry Tomatoes.', 'Cherry Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/39585953-8ae1-4909-a68a-40c3288c87ba.b7af54eb72069bdaca0bd4d3d88f9d2b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39585953-8ae1-4909-a68a-40c3288c87ba.b7af54eb72069bdaca0bd4d3d88f9d2b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39585953-8ae1-4909-a68a-40c3288c87ba.b7af54eb72069bdaca0bd4d3d88f9d2b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (104002718, 'Saturn Peach, Each', 4.97, 'deleted_813187011116', 'Donut white peaches are delightfully sweet and full of flavor! Donut peaches are fun-shaped and easy to eat.', 'Produce Unbranded Fresh California Grown Saturn Peaches', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c3f42ae8-968c-4ccb-957f-7cd76d3e043d_1.de373134c42d2085b82771f2ea12f695.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3f42ae8-968c-4ccb-957f-7cd76d3e043d_1.de373134c42d2085b82771f2ea12f695.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3f42ae8-968c-4ccb-957f-7cd76d3e043d_1.de373134c42d2085b82771f2ea12f695.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (104073068, 'Fresh Organic Green Grapes, Estimate 2.25 lbs, Bag', 6.97, '681131133739', 'Marketside Organic Green Seedless grapes are the perfect sweet snack that your whole family will enjoy. The fresh grapes are crisp and sweet and make an excellent addition to your breakfast, lunch, dinner or snack. A ¾ cup of grapes contains just 90 calories with no fat, no cholesterol, and virtually no sodium. Grapes are also a good source of Vitamin K and a natural source of antioxidants. This container conveniently contains two pounds of grapes making it easy to have your favorite fruit on hand for everyone in the house.', 'Fresh Organic Green Seedless Grapes Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e251457a-f630-4464-90fb-70778c7258b8_1.230b88422efcf5fbf819fd5fa8bedfa1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e251457a-f630-4464-90fb-70778c7258b8_1.230b88422efcf5fbf819fd5fa8bedfa1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e251457a-f630-4464-90fb-70778c7258b8_1.230b88422efcf5fbf819fd5fa8bedfa1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (104367434, 'Mt. Olive Bread & Butter Garden Salad with Vidalia Onions, 16 fl oz Jar', 2.48, '009300003667', 'Mt. Olive’s Vidalia Bread and Butter Garden Salad 16 fl oz combines your favorite ingredients in one jar creating mouth-watering results. Our beloved bread and butter chips mixed with Vidalia onions and carrots mix together for a delicious bread and butter pickle garden salad you can use as an ingredient in a recipe or alone as a snack or side dish. Our Simply Vidalia Bread and Butter Garden Salad makes a tasty topping for sandwiches, an excellent addition to salads, and wonderful inclusion in a variety of other dishes. Enjoy Mt. Olive’s Vidalia Bread and Butter Garden Salad today! Available in a 16 fl oz. jar.', 'One 16 ounce jar of Mt. Olive Vidalia Bread & Butter Chips Crafted from the Corner of Cucumber and Vine with Mt. Olive\'s exclusive pickle brine Certified Kosher and Vegan Resealable jar that locks in the perfect crunch and crispy flavor Pickled with only the freshest onions and cucumbers straight from the farm The perfect addition to any Hotdog, Hamburger or Salad Refrigerate to ensure freshness', 'Mt. Olive Pickle', 'https://i5.walmartimages.com/asr/1cc4bdca-e54a-4b40-a9c5-667e135d464a_1.1aa984270f3c6bde33621e2b61be7bc7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1cc4bdca-e54a-4b40-a9c5-667e135d464a_1.1aa984270f3c6bde33621e2b61be7bc7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1cc4bdca-e54a-4b40-a9c5-667e135d464a_1.1aa984270f3c6bde33621e2b61be7bc7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (104387879, 'Freshness Guaranteed Whole Brown Mushrooms, 16 oz', 4.67, 'deleted_021706162298', 'Experience the fresh taste of our Whole Organic Brown Mushrooms. Brown Mushrooms give you that same earthy taste you love about mushrooms but take it up a notch with their firm, meaty texture. Similar in size and shape to white mushrooms, Brown mushrooms are hardier and provide a deeper earthy taste. They\'re the same portabella mushrooms you\'ve enjoyed before - they\'ve just been harvested a few days earlier before becoming those large caps you\'ve seen in vegetarian and vegan cuisines. With their hearty, full-bodied taste, brown mushrooms are an excellent addition to beef, wild game, and vegetable dishes. Plus, these whole brown mushrooms are certified USDA Organic, making them a wholesome addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try out our Whole Organic Brown Mushrooms.', 'Fresh Whole Brown Mushrooms, 16 oz tray: 16-ounce package of sliced white mushrooms Naturally fat free Cholesterol free Low in calories, carbs and sodium Fresh and all natural Pre-cleaned Natural source of the antioxidant selenium Excellent addition to beef, wild game and vegetable dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/75f685b0-5daf-4963-a9a2-e258834dc40f.b07cfd6f55a79891fae7dba36d0e5879.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75f685b0-5daf-4963-a9a2-e258834dc40f.b07cfd6f55a79891fae7dba36d0e5879.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75f685b0-5daf-4963-a9a2-e258834dc40f.b07cfd6f55a79891fae7dba36d0e5879.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (104475164, 'Fresh Cranberries, 12 Oz.', 2.76, 'deleted_812049009421', 'Fresh Cranberries, 12 Oz.', 'Fresh Cranberry 12 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/59354037-8d6d-43e2-99a8-f1f9ed6b1c78.58052199a001d89d0999fc9a4fdaf4c5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59354037-8d6d-43e2-99a8-f1f9ed6b1c78.58052199a001d89d0999fc9a4fdaf4c5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59354037-8d6d-43e2-99a8-f1f9ed6b1c78.58052199a001d89d0999fc9a4fdaf4c5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (104504727, 'Taylor Farms Ginger Garlic Stir Fry Kit Packaged Meal, 14 oz', 3.28, '030223041252', 'The Taylor Farms Ginger Garlic Stir Fry Kit allows you to become a first-class stir fry chef in a matter of minutes. An aromatic blend of kale, broccoli, brussels sprouts, Bok choy, cabbage, and carrots paired with a ginger garlic sauce will leave everyone asking for seconds and giving compliments to the chef of course. It cooks in six minutes, so you\'ll have dinner on the table in no time. It\'s dairy-free, nut-free, vegetarian, and vegan. Keep this 14-ounce bag refrigerated until ready to enjoy. Treat the entire family to the delicious taste of Taylor Farms Ginger Garlic Stir Fry Kit.', 'An aromatic blend of kale, broccoli, brussels sprouts, Bok choy, cabbage, and carrots Keep refrigerated 3.5 servings per 14-ounce package 70 calories per serving Ready in 6 minutes Dairy-free, nut-free, vegetarian, and vegan Includes a garlic ginger sauce', 'Taylor Farms', 'https://i5.walmartimages.com/asr/1b57d12d-b3b5-4bdf-a4e7-d3921e293bfa.fe006147c6a6cb13febcc7e53c9061cc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b57d12d-b3b5-4bdf-a4e7-d3921e293bfa.fe006147c6a6cb13febcc7e53c9061cc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b57d12d-b3b5-4bdf-a4e7-d3921e293bfa.fe006147c6a6cb13febcc7e53c9061cc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (104604725, 'Slicing Tomato, Each', 2.18, '714548031517', 'Slicing Tomatoes are the leader when it comes to big, yummy, fresh tomatoes. The large size, juicy tomato taste and meaty texture make these tomatoes the perfect choice for slicing up and topping your favorite burger and sandwiches. Use them to make a hearty grilled cheese and tomato sandwich that\'s bursting with flavor. Slice some up and pair with fresh mozzarella, basil, and balsamic vinegar for a delicious appetizer. You can even enjoy a slice topped with a sprinkle of salt and pepper for a fresh, healthy snack. Add Slicing Tomatoes to your fresh produce basket today for a delicious juicy addition.', 'Slicing Tomatoes, Each: Wholesome, versatile, and delicious Large size with a juicy, delicious flavor Meaty texture makes them perfect for slicing Enjoy on burgers, sandwiches and more Enjoy on its own seasoned with salt and pepper as a heathy snack Create a mouthwatering salad or appetizer', 'Fresh Produce', 'https://i5.walmartimages.com/asr/596ed5a2-6558-42d6-9a5b-c318bc9f4ae2.4927131d05c00312cf51744e17e11473.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/596ed5a2-6558-42d6-9a5b-c318bc9f4ae2.4927131d05c00312cf51744e17e11473.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/596ed5a2-6558-42d6-9a5b-c318bc9f4ae2.4927131d05c00312cf51744e17e11473.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (104689162, 'Fresh Produce, Cubanelle Pepper, Pimiento De Cocinar, lb', 0.67, '000000046879', 'Add rich flavor and color to your meals with these fresh Cubanelle Peppers. These versatile peppers are light green in color before they ripen and then turn red once they\'re ripe. The Cubanelle is a mild pepper that may be used much like you would use a bell pepper. Try these peppers stuffed with your favorite ingredients like cheese, sirloin steak, and zesty spices. You could also use them in your next stir fry to add a mild sweetness or even pan fry them and season them for a quick and tasty snack. They are low in calories, and they\'re a great source of vitamins C and A. Fresh Produce, Cubanelle Pepper, Pimiento De Cocinar, lb', 'Mild and sweet Perfect stuffed with your favorite ingredients Try them in your next stir fry Fry and season by themselves for a quick and nutritious snack Low in calories Good source of vitamins A and C', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a102ed08-5558-4082-a09e-52808ee4d408.803492be2ec14b8165519900f65e102b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a102ed08-5558-4082-a09e-52808ee4d408.803492be2ec14b8165519900f65e102b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a102ed08-5558-4082-a09e-52808ee4d408.803492be2ec14b8165519900f65e102b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (104813441, 'Sunset Organic Cocktail Tomatoes, 12 oz Package, Fresh', 5.47, '057836020771', 'SUNSET Organic Cocktail Tomatoes are 12 ounces of flavorful and fresh tomatoes! From salsa to salads, this Organic Cocktail Tomato is the most versatile tomato in the kitchen. The perfect balance of sweetness and acidity, their small size makes them an ideal choice for salads, sauces, appetizers, and more. Hothouse grown to ensure consistent quality and freshness. Certified organic and non-GMO tomatoes grown without pesticides or herbicides. Store at room temperature for optimal flavor, and wash before enjoying. Clamshell packaging makes washing and storing a breeze. Enjoy SUNSET Organic Cocktail Tomatoes all year long.', 'SUNSET fresh Organic Cocktail Tomato Perfectly balanced sweetness and acidity Small size is ideal for salads and appetizers Wash and enjoy Available all-year-long Non-GMO certified Certified organic Hothouse grown to ensure consistent quality and freshness No pesticides or herbicides 12-oz clamshell container makes washing and storing a breeze Store at room temperature for optimal flavor', 'SUNSET', 'https://i5.walmartimages.com/asr/536c0d46-76f3-44f0-bbab-e68d0c59dd1c_1.d35c06395805ec11922ebb51d73195c7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/536c0d46-76f3-44f0-bbab-e68d0c59dd1c_1.d35c06395805ec11922ebb51d73195c7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/536c0d46-76f3-44f0-bbab-e68d0c59dd1c_1.d35c06395805ec11922ebb51d73195c7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (104965407, 'Heirloom Tomato, 2 Pack', 3.98, 'deleted_044419510316', 'Fresh Heirloom Tomatoes are the time tested, never modified, reminder of the quality eating experience that can only come from a tomato grown in your own backyard and picked at the peak of perfedtion! Whether chopping to add into a salad, or sliced as part of a burger, these fresh heirloom tomatoes will not dissapoint. Be sure to add fresh heirloom tomatoes to our Walmart produce purchase today', 'Heirloom Tomato', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105116093, 'Organic Minced Garlic 4.5 Oz Jar', 2.66, 'deleted_023562010546', 'short description is not available', 'Organic Minced Garlic 4.5 Oz Jar', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/8e5bae08-e840-49db-a31d-1908f2691306.58f79bad67e86b10bdb40332df118e78.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e5bae08-e840-49db-a31d-1908f2691306.58f79bad67e86b10bdb40332df118e78.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e5bae08-e840-49db-a31d-1908f2691306.58f79bad67e86b10bdb40332df118e78.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105267026, 'Ocean Victoria Brussels Sprouts, 10 Oz.', 4.98, '060556601601', 'Ocean Victoria Brussels Sprouts, 10 Oz.', 'Ocean Victoria Brussels Sprouts', 'OCEAN VICTORIA', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105292093, 'York Apple Totes', 0.98, '681131124164', 'short description is not available', 'York Apple Totes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105301792, '200pc Pto Rst 5#', 648, '405507544475', 'short description is not available', '200pc Pto Rst 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105380798, 'Large Melon Medley', 3.97, '224131000009', 'short description is not available', 'Large Melon Medley', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105513263, '155pc Bumpy Pumpkins', 616.9, '405968009070', 'short description is not available', '155pc Bumpy Pumpkins', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105573995, 'Organic Danjou Pears, per Pound', 1.97, '045255124941', 'Organic Danjou Pears, per Pound', 'Organic Danjou Pears', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105692162, 'Fresh from the Start Potatoes, 3 Lb.', 1.5, '033383452739', 'Potatoes, Gourmet White 3 lb (11.36 kg) US No. 1 (3/4 inch min). Potatoes goodness unearthed. Full of vitamins and minerals. Tips and Trivia: Potatoes were the first vegetable grown in space. Cut potatoes can be stored in cold water for up to two hours to prevent discoloration. French fries were introduced to the United States by President Thomas Jefferson in 1801, at the White House. Health Benefits: Fat free. One medium potato provides 45% of the daily value of vitamin C. Cholesterol free. Excellent source of potassium. Produce of USA. 3 lb (11.36 kg) Riverhead, NY 11901', 'Potatoes, Gourmet WhiteUS No. 1 (3/4 inch min). Potatoes goodness unearthed. Full of vitamins and minerals. Tips and Trivia: Potatoes were the first vegetable grown in space. Cut potatoes can be stored in cold water for up to two hours to prevent discoloration. French fries were introduced to the United States by President Thomas Jefferson in 1801, at the White House. Health Benefits: Fat free. One medium potato provides 45% of the daily value of vitamin C. Cholesterol free. Excellent source of potassium. Produce of USA.', 'Unbranded', 'https://i5.walmartimages.com/asr/bf8a5fba-17d0-4596-8f5c-003001a5c904.a9fc0e1ecfc34da55db342f7516cdedb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf8a5fba-17d0-4596-8f5c-003001a5c904.a9fc0e1ecfc34da55db342f7516cdedb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf8a5fba-17d0-4596-8f5c-003001a5c904.a9fc0e1ecfc34da55db342f7516cdedb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105712396, 'Freshness Guaranteed Fruit Cup To Go Fresh Treat Blend', 2.28, '263027000006', 'short description is not available', 'Freshness Guaranteed Fruit Cup To Go Fresh Treat Blend', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105773014, 'Kumquats', 3.48, '045255113662', '12x1pint clamshells fresh kumquats', '12x1pint clamshells fresh kumquats 12x1pint clamshells fresh kumquats', 'Generic', 'https://i5.walmartimages.com/asr/a318021a-1ce9-4b45-a5c2-ac3a2bdb5f1c.8eebf9bcf22077454471d22fd92f1e76.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a318021a-1ce9-4b45-a5c2-ac3a2bdb5f1c.8eebf9bcf22077454471d22fd92f1e76.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a318021a-1ce9-4b45-a5c2-ac3a2bdb5f1c.8eebf9bcf22077454471d22fd92f1e76.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105798635, 'Russet Potatoes, 3 lb bag', 0.97, '012289531571', '', '', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1defbae2-5e0d-4c96-bd62-10f3e23e3372_1.14791b8de8802b1d3a1b4f9824649948.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1defbae2-5e0d-4c96-bd62-10f3e23e3372_1.14791b8de8802b1d3a1b4f9824649948.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1defbae2-5e0d-4c96-bd62-10f3e23e3372_1.14791b8de8802b1d3a1b4f9824649948.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105942242, 'Organic 3# Bag Grapefruit', 5.88, '851343002509', 'short description is not available', 'Organic 3# Bag Grapefruit', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (105992578, 'Hh Baby Eggplant', 2.98, '000000045995', 'short description is not available', 'Hh Baby Eggplant', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106049059, 'Milpero Tomatillos, 1 lb', 1.5, '037842070441', '', '', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/30293232-4f93-4396-87f4-cfbf6860e8e3_1.0914342035279c84c0139d0538ce7c33.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/30293232-4f93-4396-87f4-cfbf6860e8e3_1.0914342035279c84c0139d0538ce7c33.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/30293232-4f93-4396-87f4-cfbf6860e8e3_1.0914342035279c84c0139d0538ce7c33.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106069253, 'Fresh Red Delicious Apples, 3 lb Bag', 3.44, '033383080611', 'Savor the sweet taste of Red Delicious Fresh Apples. Red Delicious apples have a classic sweet flavor and are crisp and juicy with higher antioxidants due to the rich deep red skin. Perfect for snacking, they have a creamy white flesh with low acidity. Chop the apples up and add them to a slow cooker with lemon juice, water and cinnamon for a sweet and tasty apple sauce that everyone is sure to love. Add it to your favorite smoothie or juice blend for a morning pick me up to get your day started right. Serve with a dollop of peanut butter and enjoy as a healthy snack that both kids and adults will love. Enjoy the delicious taste of Red Delicious Apples.', 'Freshness Guaranteed Red Delicious Apples, 3 lb Bag: Sweet, crisp, and juicy Creamy white flesh with low acidity Excellent snacking apple Higher antioxidants due to the rich, deep red skin Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp, and apple pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/54a13a30-0239-4da7-8de3-df2636b17e92.e59aab7b30b1a26c75e87e03bcf3c068.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54a13a30-0239-4da7-8de3-df2636b17e92.e59aab7b30b1a26c75e87e03bcf3c068.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54a13a30-0239-4da7-8de3-df2636b17e92.e59aab7b30b1a26c75e87e03bcf3c068.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106112116, '200pc Pto Ykn 5# Mf', 853.99, '405526691525', 'short description is not available', '200pc Pto Ykn 5# Mf', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106184917, 'Tomate Plato, 4 Count', 2.97, '052435655027', 'Tomate Plato, 4 Count', 'Tomate Plato 4 Each', 'Unbranded', 'https://i5.walmartimages.com/asr/f831b600-aa81-41a3-9931-fbf714ca3a92.e63d188f7e3bedc7c8658fac524b95ba.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f831b600-aa81-41a3-9931-fbf714ca3a92.e63d188f7e3bedc7c8658fac524b95ba.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f831b600-aa81-41a3-9931-fbf714ca3a92.e63d188f7e3bedc7c8658fac524b95ba.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106317186, 'Premium Bananas', 0.49, 'deleted_405821601144', 'short description is not available', 'Premium Bananas', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106520773, 'Red Grapes Multipak 5ct/3oz', 4.97, '859002004192', 'short description is not available', 'Red Grapes Multipak 5ct/3oz', 'WOOT FROOT', 'https://i5.walmartimages.com/asr/6eedb1ff-a83d-4247-b53e-3fc7f70d3993.853390968a4f178bfd7c86ad1b2fbd90.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6eedb1ff-a83d-4247-b53e-3fc7f70d3993.853390968a4f178bfd7c86ad1b2fbd90.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6eedb1ff-a83d-4247-b53e-3fc7f70d3993.853390968a4f178bfd7c86ad1b2fbd90.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106591006, 'White Turnips, 1 Lb.', 4.97, '400094303283', 'White Turnips, 1 Lb.', 'Nabo Blanco', 'Unbranded', 'https://i5.walmartimages.com/asr/0d1f1dd6-07aa-42cb-9014-632242f78097.ee1ec4ddfdf93a467716523c6a7adf53.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d1f1dd6-07aa-42cb-9014-632242f78097.ee1ec4ddfdf93a467716523c6a7adf53.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d1f1dd6-07aa-42cb-9014-632242f78097.ee1ec4ddfdf93a467716523c6a7adf53.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106726969, 'Fresh Radicchio, 1 lb.', 2.94, '000000047388', 'Introducing Joe Premium Radicchio, the embodiment of fresh and whole produce. Grown with meticulous attention, this radicchio maintains its vibrant color and crispness. Bursting with flavor and packed with nutrients, it adds a delightful twist to salads and other dishes. Indulge in the freshness and wholesomeness of Joe Premium Radicchio, and elevate your culinary creations with its distinct taste and exceptional quality.', 'Radicchio, 1 lb Introducing Joe Premium Radicchio, the embodiment of fresh and whole produce. Grown with meticulous attention, this radicchio maintains its vibrant color and crispness. Bursting with flavor and packed with nutrients, it adds a delightful twist to salads and other dishes. Indulge in the freshness and wholesomeness of Joe Premium Radicchio, and elevate your culinary creations with its distinct taste and exceptional quality.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c72bfe18-e2ce-4f66-9dcd-04ce9f9791a2.0f126d04aebd6115a6fab48194167c3b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c72bfe18-e2ce-4f66-9dcd-04ce9f9791a2.0f126d04aebd6115a6fab48194167c3b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c72bfe18-e2ce-4f66-9dcd-04ce9f9791a2.0f126d04aebd6115a6fab48194167c3b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106749299, 'Kanzi (nikita) Apples 5 Lb Bag', 5.29, '847473005992', 'short description is not available', 'Kanzi (nikita) Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106805386, 'Santa Fe Salad Bowl, 7 Oz.', 2.98, '795631842944', 'Santa Fe Salad Bowl, 7 Oz.', 'Salad Bowl Santa Fe', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106813160, 'Crisply Spicy Greens Mixed Salad, 5 oz', 3.48, '857951008018', 'Crisply Spicy Greens Mixed Salad, 5 Oz.', 'Crisply Spicy Greens Mixed Salad, 5 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b47811bf-f8d9-4c39-9e0a-60da25592d64_3.a20519cd0175c4e479f35d757d6e829a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b47811bf-f8d9-4c39-9e0a-60da25592d64_3.a20519cd0175c4e479f35d757d6e829a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b47811bf-f8d9-4c39-9e0a-60da25592d64_3.a20519cd0175c4e479f35d757d6e829a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106832910, 'Organic Wellness Blend, 5 Oz.', 3.46, '030223101765', 'Organic Wellness Blend, 5 Oz.', 'Organic Wellness Blend', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106926993, 'Cherry Tomato, 10 oz Package', 3.26, 'deleted_033383655949', 'Your order will contain 1 pint of organic cherry tomatoes.', 'Organic Cherry Tomato', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106948318, 'Cored Pineapple', 4.97, '042797200072', 'short description is not available', 'Cored Pineapple', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106971512, 'Cinnamon Apples With Blueberries 3-count', 2.98, '074641018052', 'short description is not available', 'Cinnamon Apples With Blueberries 3-count', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (106984115, 'Mx Roma Tomatoes', 1.49, 'deleted_078742046938', 'short description is not available', 'Mx Roma Tomatoes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107016149, 'Fresh Express Fresh Express Salad, 5 oz', 1.98, '071279271224', 'Salad, Baby Kale Mix, Bag 5 OZ Chard, baby kale, spinach. Guaranteed fresh. Excellent source of vitamin A + vitamin K. Good source of folate. Thoroughly washed. Ready to eat. No preservatives. Fruits & Veggies: More matters. Why we\'re so fresh! To guarantee Fresh Express salads are consistently, deliciously fresh, we: cool our salads within hours of harvest to keep them chilled from field to store; thoroughly rinse and gently dry; then seal them in our keep-crisp bag to maintain freshness; and deliver fresh salads daily. Fresh Express Promise: Fresh guaranteed! At Fresh Express, we are passionate about delivering the freshest, highest quality salads possible! Our team of food scientists and agricultural experts are committed to exceeding industry standards so we can guarantee the freshest of our salads, every single day. Questions? Comments? Call 1-800-242-5472 or visit www.FreshExpress.com. Tenderleaf. Get delicious recipes & more. Product of USA. Keep refrigerated. Reseal for freshness. 5 oz (141 g) 550 S. Caldwell St. Charlotte, NC 28202 800-242-5472 2013 Fresh Express Incorporated', 'Salad, Baby Kale Mix Excellent source of vitamin A + vitamin K. Good source of folate. Chard. Baby kale. Spinach. Guaranteed fresh. Ready to eat. Reseal for freshness. No preservatives. Fruits & veggies more matters. Why we\'re so fresh! To guarantee fresh express salads are consistently, deliciously fresh, we: Cool our salads within hours of harvest and keep them chilled from field to store; thoroughly rinse and gently dry; then seal them in our keep-crisp bag to maintain freshness; and deliver fresh salads daily. Promise: Fresh express. Fresh guaranteed! At fresh express, we are passionate about delivering the freshnest, highest quality salads possible! Our team of food scientists and and agriculture experts are committed to exceeding industry standards so we can guarantee the freshness of our salads, every single day. SmartLabel: Scan for more food information. Tender leaf. Get delicious recipes & more! Questions? Comments? 1-8880-242-5472 or www.freshexpress.com. Product of USA.', 'Fresh Express', 'https://i5.walmartimages.com/asr/71c33aae-f9a8-416d-aae7-3cd1c3bcc2ea.e0b4214d776a3814bda8076543a5e8ac.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71c33aae-f9a8-416d-aae7-3cd1c3bcc2ea.e0b4214d776a3814bda8076543a5e8ac.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71c33aae-f9a8-416d-aae7-3cd1c3bcc2ea.e0b4214d776a3814bda8076543a5e8ac.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107217975, 'Fresh Chocolate Dipped Strawberries, 4 Count Container', 7.28, '204252000003', 'The sweet, juicy flavor of Fresh Chocolate Dipped Strawberries make them a refreshing and delicious treat. They can be enjoyed on their own or as a garnish for cakes and other strawberry desserts. Keep the berries refrigerated in original Clam Shell to keep them fresh and ready for use. Pick up Fresh regular Chocolate dipped Strawberries today and savor the delectable flavor.', 'Regular, fresh, juicy strawberries dipped in rich, velvety chocolate The perfect combination of sweet and tangy flavors A luxurious treat for any occasion, from romantic dates to weddings and parties Keep your strawberries refrigerated in the original Clam Shell container to maintain freshness Keep dry for optimal freshness', 'Fresh', 'https://i5.walmartimages.com/asr/700b48f0-e1bc-483c-932b-0035e8730ae0.2f4eb452087bec8bb9077bb377b0acb7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/700b48f0-e1bc-483c-932b-0035e8730ae0.2f4eb452087bec8bb9077bb377b0acb7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/700b48f0-e1bc-483c-932b-0035e8730ae0.2f4eb452087bec8bb9077bb377b0acb7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107284862, 'Mutsu Apples 5 Lb Bag', 4.97, '022906500125', 'short description is not available', 'Mutsu Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107325751, 'Sweet Onions 3 Lb Bag', 2.83, '042808350338', 'short description is not available', 'Sweet Onions 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107341224, 'Fresh Red Apples, 3 lb Bag', 3.44, '741839005957', 'Kiku Fresh apples are a premium variety grown in the sun-drenched orchards of Italy. Known for their exceptional sweetness and satisfying crunch, these apples are the perfect snack for any occasion. Their unique cinnamon-like aroma and beautiful red and yellow coloration make them a standout choice for baking or creating elegant cheese plates. Buy a bag of Kiku apples today and enjoy a taste of Italy in every bite.', 'Sweet, crisp, and juicy Creamy white flesh with low acidity Excellent snacking apple Higher antioxidants due to the rich, deep red skin Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp, and apple pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ada31246-1c45-4c41-aec7-e2d607500bdf.38553668d16b287cd56e935e3f043740.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ada31246-1c45-4c41-aec7-e2d607500bdf.38553668d16b287cd56e935e3f043740.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ada31246-1c45-4c41-aec7-e2d607500bdf.38553668d16b287cd56e935e3f043740.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107383676, 'California Grown Peaches, per Pound', 1.58, '400094622681', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107396726, 'Marketside Seafood Salads', 3.98, '681131095600', 'short description is not available', 'Marketside Seafood Salads', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107487742, 'Sweet Potatoes 5 Lb Bag', 4.27, '855555002197', 'short description is not available', 'Sweet Potatoes 5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107507562, 'Fresh From The Start Onions, 5 lb', 3.67, '033383600031', 'Discover the versatile and flavorful Fresh From The Start Onions, available in a convenient 5 lb. bag. These high-quality onions are a staple ingredient in countless recipes, adding depth and aroma to your favorite dishes. Perfect for dicing, slicing, or caramelizing, our onions are carefully selected to ensure optimal freshness and taste. Enhance your culinary creations with the robust flavor of Fresh From The Start Onions, and experience the difference that superior produce can make in your home-cooked meals.', 'Onion Yellow 5 Lb. Discover the versatile and flavorful Fresh From The Start Onions, available in a convenient 5 lb. bag. These high-quality onions are a staple ingredient in countless recipes, adding depth and aroma to your favorite dishes.; Perfect for dicing, slicing, or caramelizing, our onions are carefully selected to ensure optimal freshness and taste.; Enhance your culinary creations with the robust flavor of Fresh From The Start Onions, and experience the difference that superior produce can make in your home-cooked meals.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d575010c-7c27-45cc-8c0e-58556d120ada.f121a5e93ed0802a729b3ddaf89ea9b8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d575010c-7c27-45cc-8c0e-58556d120ada.f121a5e93ed0802a729b3ddaf89ea9b8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d575010c-7c27-45cc-8c0e-58556d120ada.f121a5e93ed0802a729b3ddaf89ea9b8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107512749, 'Plum 1 lb Pack', 4.88, 'deleted_815263013069', 'Emerald Plum 1 Lb Clamshell', 'Emerald Plum 1 Lb Clamshell', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ddcd508f-b9f1-46bb-9827-127e9b1e5fb9.44d47b99b3f89701ce045e39ce19fd61.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ddcd508f-b9f1-46bb-9827-127e9b1e5fb9.44d47b99b3f89701ce045e39ce19fd61.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ddcd508f-b9f1-46bb-9827-127e9b1e5fb9.44d47b99b3f89701ce045e39ce19fd61.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107544941, 'Fresh Beets, lb', 1.37, '400094254615', 'Serve up something amazing when you cook with Fresh Beets. This versatile root vegetable is known for its bright red color and is a great addition to a healthy diet and can be prepared in a variety of ways. Roast them with your favorite seasonings and serve with a juicy steak and homemade rolls or add them to a goat cheese and arugula salad. Use them in a comforting soup recipe, a delicious casserole, or even a cake. However, you choose to use them, these beets will add big flavor and unforgettable taste to any meal. The culinary possibilities are endless with Fresh Beets.', 'Fresh Beets, Bunch Known for their ruby red hue Deep, earthy flavor Great for a variety of dishes Ideal Temperature: 33 F', 'Unbranded', 'https://i5.walmartimages.com/asr/a5bbee36-3acf-4f3a-a717-df6a6c35e132.dd1cd8418f533f94f2bc4f7bbc0a34ae.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a5bbee36-3acf-4f3a-a717-df6a6c35e132.dd1cd8418f533f94f2bc4f7bbc0a34ae.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a5bbee36-3acf-4f3a-a717-df6a6c35e132.dd1cd8418f533f94f2bc4f7bbc0a34ae.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107656095, 'Tomate, 1 Lb.', 2.57, '400094060728', 'Tomate, 1 Lb.', 'Tomate Cocinar #1', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107716331, '225pc Pto Rst Jmb 8#', 1332, '405518608470', 'short description is not available', '225pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107746698, 'Baby White Potatoes, 1.5 Lb.', 3, '667859026201', 'Baby White Potatoes, 1.5 Lb.', 'White Baby Potatoes 24 Oz Clamshell', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107834173, 'Aloha Gourmet Mini Pounder Li Hing Fuji Apples, 3.8 Oz.', 2.08, '797516044771', 'Li Hing Fuji Apples 3.8 oz (107.7 g) www.alohagourmet.net. Product of Thailand & Taiwan. Phenylketonurics: contains phenylalanine. 3.8 oz (107.7 g) Honolulu, HI 96819', 'Li Hing Fuji Appleswww.alohagourmet.net. Product of Thailand & Taiwan.', 'Aloha Gourmet', 'https://i5.walmartimages.com/asr/7c7c52e8-2721-4707-9b3b-2f9d3fcdc861.ced83b096d044cd0f64b31a8a0842b47.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c7c52e8-2721-4707-9b3b-2f9d3fcdc861.ced83b096d044cd0f64b31a8a0842b47.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c7c52e8-2721-4707-9b3b-2f9d3fcdc861.ced83b096d044cd0f64b31a8a0842b47.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (107966262, 'Fresh Broccoli Crown, each', 4.77, '400094289075', 'Broccoli crowns are the premium cut of broccoli, trimmed just under the broccoli head. Healthy & Delicious!!!!', 'Healthy side to any meal Excellent steamed, roasted, sautéed, in soups or served raw with a favorite dip Stalks cut short to offer greater ratio of florets per lb', 'Unbranded', 'https://i5.walmartimages.com/asr/1ee5500b-e985-4022-b8bc-726a40fa0043.9f71623966c6834020d03782363fa077.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1ee5500b-e985-4022-b8bc-726a40fa0043.9f71623966c6834020d03782363fa077.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1ee5500b-e985-4022-b8bc-726a40fa0043.9f71623966c6834020d03782363fa077.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108143231, 'Melorange (Charentais) Melon', 2.48, '885674000446', 'A Fresh Melorange (Charentais) Melon has a birght orange center that is firm with a crisp and succulent consistency. This melon has a high suagr content creating a sweet and subtly fruity taste. It is a great item to add to appetizer platters, halved and filled with cottage cheese or even eaten for breakfast! Enjoy one today and every day!', 'Melorange (Charentais) Melon: High sugar content Melon Firm orange inside with a small seed cavity Use to create apptizer platters or enjoy as a breakfast treat Can be used in smoothies or a fresh topping for yogurts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6edeb223-dac7-4e34-a514-7a144970d6a2.0661cd732735ee634aa5656a1002cc8a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6edeb223-dac7-4e34-a514-7a144970d6a2.0661cd732735ee634aa5656a1002cc8a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6edeb223-dac7-4e34-a514-7a144970d6a2.0661cd732735ee634aa5656a1002cc8a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108160610, 'Squash Hubbard Per Lb', 1.48, '853647001356', 'short description is not available', 'Squash Hubbard Per Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5d1d068a-7b60-491c-9099-2ec9a29577d4.ecfea1f9c8a30e96c1c93045ae5944e4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d1d068a-7b60-491c-9099-2ec9a29577d4.ecfea1f9c8a30e96c1c93045ae5944e4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d1d068a-7b60-491c-9099-2ec9a29577d4.ecfea1f9c8a30e96c1c93045ae5944e4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108254120, 'Steamables Red Potatoes with Picante Salt, per Pound', 3.48, '813652010101', 'Steamables Red Potatoes with Picante Salt, per Pound', 'Red Steamables Potatoes with picante Salt', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108454904, 'Fresh Bean Sprouts, 12 Oz.', 1.47, '018186002039', 'Fresh Bean Sprouts, 12 Oz.', 'Fresh Bean Sprouts 12 Oz.', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108496604, 'Freshness Guaranteed Kiss Melon 16 Oz', 4.48, '681131428699', 'short description is not available', 'Freshness Guaranteed Kiss Melon 16 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108501760, 'D\'Altura Grape Tomato, 8 Oz.', 3.47, '860551000207', 'D\'Altura Grape Tomato, 8 Oz.', 'D\'altura Tomate Grape 8oz', 'D\'Altura', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108556583, 'Elephant Garlic Whole Fresh, Each', 4.28, 'deleted_718940001376', 'Sweet and mild, Fresh Elephant Garlic is terrific for a mild garlic butter with mixed herbs. Elephant garlic bulbs are an excellent source of vitamins E, C, and A. Similar to conventional garlic, elephant garlic also contains allicin, which has been known for its antibacterial properties. Commonly used as a substitute for common garlic in cooking, use elephant garlic when you’re looking for a more subtle garlic flavor. You can sautee elephant garlic, roast it, grill it, or use it raw in salads or dips. These large bulbs, sometimes as large as a man’s fist, are an excellent addition to any home cook’s arsenal. Add the distinctive zing of garlic to your dishes with Fresh Elephant Garlic.', 'Elephant Garlic Per Each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8b7f762f-60bf-482e-ba11-7fbcc49063b5.d7cd588fc644dbe8ba9e46d36c14b375.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8b7f762f-60bf-482e-ba11-7fbcc49063b5.d7cd588fc644dbe8ba9e46d36c14b375.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8b7f762f-60bf-482e-ba11-7fbcc49063b5.d7cd588fc644dbe8ba9e46d36c14b375.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108636478, 'Fresh Chinese Eggplant, Each', 3.31, '000000030892', 'Our fresh Chinese Eggplant will add delicious flavor and texture to your next meal. The Chinese eggplant has a thinner skin and fewer seeds than a globe eggplant. With fewer seeds, the Chinese eggplant is not as bitter and has a more delicate flavor. Use it in recipes such as Chinese Eggplant with Spicy Garlic Sauce or Szechuan Eggplant. No matter how you choose to use it, this Chinese eggplant will add a mild and sweet flavor to any meal. Explore new recipes and discover all the delicious ways to prepare this tasty vegetable. Add something delicious and nutritious to your next meal with our fresh Chinese Eggplant.', 'Thinner skin and fewer seeds than a globe eggplant Not as bitter as a globe eggplant and has a milder flavor Use in stir fries, soups, or roast it for delicious flavor Will add a mild and sweet flavor to a myriad of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6b8e7e84-26f2-477b-bd0c-94402dce779a.004c30373a8312fc1e706d1d8db2ef6e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6b8e7e84-26f2-477b-bd0c-94402dce779a.004c30373a8312fc1e706d1d8db2ef6e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6b8e7e84-26f2-477b-bd0c-94402dce779a.004c30373a8312fc1e706d1d8db2ef6e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108646054, 'Cheese Raw Org Tomato & Garlc', 4.98, '759885882064', 'short description is not available', 'Cheese Raw Org Tomato & Garlc', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108804643, 'Taylor Farms Fresh Red Grapes', 2.05, '030223081135', 'short description is not available', 'Taylor Farms Fresh Red Grapes', 'Taylor Farms', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108812734, 'Foxy Foods Foxy Organic Broccoli Slaw, 12 oz', 2.36, '824862077020', 'Broccoli Slaw 12 oz (340 g) Broccoli & Carrots. Ready-to-use. Preservative-free. USDA Organic: Certified organic by California Organic Framers (CCOF). The Foxy Vent Sticker helps keep your product fresh. Perishable. Keep refrigerated. 12 oz (340 g) Salinas, CA 93902 800-695-5012', 'Foxy Foods Foxy Organic Broccoli Slaw, 12 oz', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108908605, 'Freshness Guaranteed Pink Lady Apples, 3 lb Bag', 5.28, 'deleted_681131430548', 'Treat yourself to the delicious, crisp taste of Freshness Guaranteed Pink Lady Apples. These apples are known for their vivid green skin covered in a pinkish blush, crunchy texture, and tart taste with a sweet finish. Enjoy one with breakfast or lunch or as a fresh snack any time of day. Best of all, these delicious apples hold up well when cooked and can be used in both savory and sweet dishes. They can be used for baking, snacking, salads, pairing, or made into a delicious sauce that pairs perfectly with pork. Try incorporating them into soups and compotes or using to make yummy jam or juice. Use them to create apple crisp, pie, and strudel for a sweet treat. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Freshness Guaranteed Pink Lady Apples. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Pink Lady Apples, 3 lb Bag: Includes 3 pounds of tart, crisp apples Tart taste with a sweet finish Pair them with sharp cheeses and crackers for a stunning appetizer board Can be enjoyed fresh or cooked into both savory and sweet dishes Meets or exceeds U.S. Extra Fancy Minimum diameter: 2.5\"', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/e7280927-854d-4a8a-982b-9ce3a2c15167.d10b0af22142a3f7958854cc7f150795.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e7280927-854d-4a8a-982b-9ce3a2c15167.d10b0af22142a3f7958854cc7f150795.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e7280927-854d-4a8a-982b-9ce3a2c15167.d10b0af22142a3f7958854cc7f150795.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108929136, 'Fresh Express Juicing Greens, 10 Oz.', 6.47, '071279275123', 'Fresh Express Juicing Greens contain a spring mix that consists of green romaine lettuce, green leaf lettuce, tango lettuce, green oak lettuce, Lolla Rossa lettuce, radicchio, red romaine lettuce, red leaf lettuce, red oak lettuce, spinach, mizuna, arugula, beet tops, butter lettuce, chard, kale, pak choi, tatsoi, endive and Frisee. The container also includes baby kale and shredded carrots for added flavor. These vegetable juice ingredients are thoroughly washed and contain no preservatives. They contain nutrients that can help restore vitality and energy to help you throughout your day.', 'Fresh Express Vitality Juicing Green:Juicing Greens, VitalitySpring mix, baby kale and shredded carrotsHealthy, pre-washed and ready to useThoroughly washed green juice ingredientsNo preservativesProduct of USA', 'Fresh Express', 'https://i5.walmartimages.com/asr/cb949ea2-9faa-4eea-a590-7626fc951ba0.6d7343b9c33e814808b2749e504c1a76.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb949ea2-9faa-4eea-a590-7626fc951ba0.6d7343b9c33e814808b2749e504c1a76.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb949ea2-9faa-4eea-a590-7626fc951ba0.6d7343b9c33e814808b2749e504c1a76.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (108938621, 'Pera D\'anjou Viva Tierra 12/3', 6.98, '033383300726', 'Pera D\'anjou Viva Tierra 12/3', 'Org Pera D\'anjou Viva Tierra 12/3', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/3d896424-8396-449b-a52e-d7cc4ab59073.d62f3e8ee1a90b3756728a940d4e21d7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d896424-8396-449b-a52e-d7cc4ab59073.d62f3e8ee1a90b3756728a940d4e21d7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d896424-8396-449b-a52e-d7cc4ab59073.d62f3e8ee1a90b3756728a940d4e21d7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (109050652, 'Fresh Grown Thomcord Grapes', 2.98, '708174102024', 'short description is not available', 'Fresh Grown Thomcord Grapes', 'Spiech Farms', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (109112488, 'Fresh Roma Tomato, Each', 1.28, '688962361133', 'With Fresh Roma Tomatoes from Walmart, it\'s easy to make a wholesome, delicious meal. Roma tomatoes are a fresh produce ingredient for whipping up a variety of wonderful dishes. You can use them to create a zesty tomato sauce for stirring into a homemade pasta dish, crush them up to make a delightful Roma tomato bruschetta, or simply enjoy them on their own as a nutritious snack or as a party platter option for dipping in your favorite vegetable dipping sauce. If you\'re feeling a classic tomato dish, Roma tomatoes can even lend themselves in making a comforting and appetizing tomato soup or a flavorful salsa. However you choose to use them, each Roma tomato will add stunning flavor to your meal. Just find the recipe and experience the tasty results for yourself! Elevate your recipes with Roma Tomatoes.', 'Roma Tomato, Each: Wholesome, versatile, and delicious Rich, juicy flavor in each bite Ideal ingredient for a variety of dishes Use to make pasta sauce, tomato soup, or fresh salsa Make a tasty pesto or bruschetta to serve at your next dinner party Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (109185045, 'Romaine Hearts 2 Count', 6.97, '033383651026', 'short description is not available', 'Romaine Hearts 2 Count', 'Tanimura & Antle', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (109222715, 'Masquerade Potatoes, 3 Lb.', 2.98, '826088920234', 'Masquerade Potatoes, 3 Lb.', 'Masquerade Potatoes 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (109285772, 'GoVerden Spicy Guacamole 12oz', 4.43, '850002858082', 'GoVerden Spicy Guacamole 12oz is all natural and non-GMO certified. So, no artificial ingredients, no preservatives... nothing added that you wouldn\'t use at home. Our love and care for avocados is evident in every bite, taking special care to the selection, harvesting, ripening, and handling for each avocado. Try it today, it guactually goes with everything. Nachos? Hamburgers? Chips and Guac? Go natural, go for more, GoVerden.', 'GoVerden Spicy Guacamole 12oz is as creamy and chunky as you want it to be. All natural ingredients and non-GMO certified. Ready to eat. Keep it refrigerated.', 'GoVerden', 'https://i5.walmartimages.com/asr/fda5b994-a93b-435a-ba6d-d4d9a5aa6aca.26b0f8c019ee679c2860827876d38097.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fda5b994-a93b-435a-ba6d-d4d9a5aa6aca.26b0f8c019ee679c2860827876d38097.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fda5b994-a93b-435a-ba6d-d4d9a5aa6aca.26b0f8c019ee679c2860827876d38097.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (109290023, 'White Potatoes Whole Fresh, 5 lb, Bag', 5.94, '648196050555', 'These White Potatoes are a must-have for any pantry. With so many ways to prepare potatoes, you\'ll want to add them to every meal. For breakfast, you could make crispy hash browns smothered in cheese and diced ham or add them to a savory omelet. For lunch or dinner, you could use these fresh potatoes to make au gratin potatoes, garlic mashed potatoes, or a baked potato loaded with cheese, sour cream, green onions, and bacon bits. If you\'re hosting a neighborhood get-together, you can use them to make creamy potato salad or homestyle French fries. Serve up something delicious when you cook with White Potatoes.', 'Must-have addition to every pantry Make crispy hash browns or add to an omelet Serve garlic mashed potatoes or a loaded baked potato Great for potato salad or homestyle French fries Explore all the delicious ways to serve these satisfying potatoes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8bf36d9a-230d-4dbb-9599-84e31540709a.4a8e0726dbfbdd8193f8718c1d9c6ea6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8bf36d9a-230d-4dbb-9599-84e31540709a.4a8e0726dbfbdd8193f8718c1d9c6ea6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8bf36d9a-230d-4dbb-9599-84e31540709a.4a8e0726dbfbdd8193f8718c1d9c6ea6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (109338252, 'Whole Fresh Yellow Onion, 2 lb Bag', 1.67, 'deleted_858143004108', 'Give all of your dishes a wonderful flavor with this three-pound bag of Fresh Yellow Onions (Cebolla Amarilla). They can be added to all of your favorite foods including hamburgers, stir-fries, soups, and pizza and used to make onion rings and blooming onions as well. These onion vegetables can be sauteed or served raw and stored in a cool, dry area until you are ready to use them. They have a fresh taste that will put something extra in your dish. These onions are easy to peel and quick to prepare so you can serve them on your dinner plate in no time. Add these Fresh Yellow Onions to your next dish and impress others with your culinary skills.', 'Fresh Yellow Onions, 2 lb Bag Ideal ingredient in a variety of recipes Can be sauteed and put in your favorite foods for added flavor Use to top sandwiches, hamburgers, and hot dogs Fresh onions can be stored in a cabinet or pantry and are easy to prepare', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5fd92178-783d-4b9b-a0ce-79c518c70617.096bca82d3b2884597e97e03449b4355.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5fd92178-783d-4b9b-a0ce-79c518c70617.096bca82d3b2884597e97e03449b4355.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5fd92178-783d-4b9b-a0ce-79c518c70617.096bca82d3b2884597e97e03449b4355.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (109358846, 'Good Foods Guacamole Spicy, 7 oz', 4.97, '736798903031', 'Good Foods? Guacamole Spicy.', 'Guacamole, Chunky, Spicy Non GMO Project verified. nongmoproject.org. No artificial ingredients. No preservatives. Clean: No artificial anything. Made with 100% hass fresh avocados. High pressure certified. goodfoods.com. Facebook. Instagram. Pinterest. Product of Mexico.', 'Unbranded', 'https://i5.walmartimages.com/asr/31ac07d1-bd16-4226-ab1f-cf683c5ede01_1.6a179e89660d05ed048a22ef0cc61f37.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/31ac07d1-bd16-4226-ab1f-cf683c5ede01_1.6a179e89660d05ed048a22ef0cc61f37.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/31ac07d1-bd16-4226-ab1f-cf683c5ede01_1.6a179e89660d05ed048a22ef0cc61f37.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (109482590, 'Fresh Organic Whole White Beech Mushroom, 3.5 oz', 3.98, '037102678707', 'Add flavor and texture to your meals with the Organic Whole White Beech Mushrooms. This versatile ingredient is perfect for a variety of dishes, whether its for breakfast, lunch, or dinner. Mince some up and put them in your omelet with peppers and ham for a filling breakfast. Slice them and add them to a healthy salad for lunch or stuff them with cream cheese, parmesan, and sharp cheddar cheese for a delicious, mouthwatering meal. White mushrooms are an excellent source of riboflavin and are naturally fat-free, cholesterol-free, and are low in calories and sodium. Enjoy the delicious taste of Organic Whole White Beech Mushrooms any way you prepare them.', 'Adds flavor and textures to your meals Great for breakfast, lunch, or dinner Mince them for an omelet, slice them for a salad, or stuff them with cheese Naturally fat-free and cholesterol-free Low in sodium and calories', 'Unbranded', 'https://i5.walmartimages.com/asr/9092a857-197a-4f03-acc1-b68e5b10ecf1.52281570b6d812ca72dda6fce973c461.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9092a857-197a-4f03-acc1-b68e5b10ecf1.52281570b6d812ca72dda6fce973c461.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9092a857-197a-4f03-acc1-b68e5b10ecf1.52281570b6d812ca72dda6fce973c461.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (109568195, 'Fresh Healit™ Healthy Garden Salad Bundle Pack', 27.95, '078509020904', 'Looking for healthier meal options? try our healthy garden collection with all organic seeds. Contains one Pack each of All Lettuce mix, Red Cherry tomato, Marketmore cucumber, Colorful Beet mix, Nelly Chives & Arugula. 100% certified organic seeds; Healthy, nutritious, all natural vegetables and herbs; Seeds of Change has been a trusted Brand for over 29 years; The OLDEST pure organic seed company in the . As an added bonus you get 4 rolls of Healit™ Garden Tape: Garden Tape is a self-adhering tape ideal for training and supporting plants and saplings. It stretches just enough to keep stems and limbs in place, without disturbing vital nutrient delivery or adding stress. Garden Tape is easy to use, flexible and biodegradable. Its durability allows it to stay in place for the entire growing season and support your plants in even the toughest conditions.', 'Benefits of Using Healit™ Garden Tape:– Easy to use flexible and biodegradable– Tears easily to the desired length– Stays in place for the growing season– Supports against wind - Self-adhesive, no tying needed– Green tape blends to plants– Great for grafting trees– Come rain or shine, on land or at sea, we’ll help keep you safe and secure the Healit™ way.', 'HealiT', 'https://i5.walmartimages.com/asr/22aebfc3-58c6-46ee-9426-8baa23c8d2e7_1.91a7e09f7a036c669e9584c131a644ed.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/22aebfc3-58c6-46ee-9426-8baa23c8d2e7_1.91a7e09f7a036c669e9584c131a644ed.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/22aebfc3-58c6-46ee-9426-8baa23c8d2e7_1.91a7e09f7a036c669e9584c131a644ed.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (109943917, 'Seedless Mini Cucumbers 16 Oz', 2.23, 'deleted_884051060097', 'Let\'s get snacking and stacking! These mini-cukes are our perfect for lunch, full of flavor, grab\'em and go variety. Mini yet mighty, they\'re a treat for the entire family and a truly healthy midday snack. Stay hydrated with a refreshing treat that?s conveniently sized. For over 70 years, Lakeside has been focused on delivering fresh, flavorful produce to families across North America. From our family to yours, thank you for letting us share your table.', '- Crisp texture - Great for hydration - Low calorie treat - Sweet and crunchy - Perfect for snacks and lunches', 'Lakeside Produce', 'https://i5.walmartimages.com/asr/7a062e82-a62d-421a-bd0d-622f998b5c90_1.786fdf64cc21dc7b9dca8fe8f16098af.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a062e82-a62d-421a-bd0d-622f998b5c90_1.786fdf64cc21dc7b9dca8fe8f16098af.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a062e82-a62d-421a-bd0d-622f998b5c90_1.786fdf64cc21dc7b9dca8fe8f16098af.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (110190614, 'Stemilt Artisan Organics Lil Snappers Pears D\'Anjou', 3.18, '741839007869', 'short description is not available', 'Organic Pears Lil Snapper 12/2', 'Lil Snappers', 'https://i5.walmartimages.com/asr/139c3e82-d172-4636-b321-67510284b9fe_1.18a8c75f98cddc4e60790c8a65ac952c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/139c3e82-d172-4636-b321-67510284b9fe_1.18a8c75f98cddc4e60790c8a65ac952c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/139c3e82-d172-4636-b321-67510284b9fe_1.18a8c75f98cddc4e60790c8a65ac952c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (110260354, '200pc Pto Idaho 5#', 588, '405508050951', 'short description is not available', '200pc Pto Idaho 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (110333062, 'Snap Peas, 1 Lb.', 6.97, '400094303702', 'Snap Peas, 1 Lb.', 'Snap Peas', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e43669f2-3f33-4aec-baf8-c1e145d4c6d5.e27ba1f637d954021e82a596dbf8afdd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e43669f2-3f33-4aec-baf8-c1e145d4c6d5.e27ba1f637d954021e82a596dbf8afdd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e43669f2-3f33-4aec-baf8-c1e145d4c6d5.e27ba1f637d954021e82a596dbf8afdd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (110343207, 'Glory Food 12oz Squash Medley', 2.28, '736393207046', 'short description is not available', 'Glory Food 12oz Squash Medley', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (110362266, 'Habichuelas, 1 Lb.', 2.97, '400094434666', 'Habichuelas, 1 Lb.', 'Habichuelas Tiernas', 'Unbranded', 'https://i5.walmartimages.com/asr/e2b99c12-c552-4656-867c-6bc3f5cace1b.d046175bdfdd2400520f3842623d75a8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2b99c12-c552-4656-867c-6bc3f5cace1b.d046175bdfdd2400520f3842623d75a8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2b99c12-c552-4656-867c-6bc3f5cace1b.d046175bdfdd2400520f3842623d75a8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (110384918, 'Mcintosh Fresh Apples, 5 lb Bag', 4.92, '033383084770', 'One bite of our Macintosh fresh apples and you\'ll be transported to the crisp autumn air of the orchard. These juicy apples are perfect for snacking, baking or using in savory dishes. They\'re naturally sweet with a tartness that will keep you coming back for more. With their bright red skin and creamy white flesh, Macintosh apples are not only delicious but also visually stunning. Order a bushel today and see for yourself!', 'Freshness Guaranteed McIntosh Apples, 5 lb Bag: Crisp & juicy Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie', 'Unbranded', 'https://i5.walmartimages.com/asr/3cc1dbea-7e35-45ea-9cb3-b943caa034bb.ddaa5414f846595569ded2a10ede0cbc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cc1dbea-7e35-45ea-9cb3-b943caa034bb.ddaa5414f846595569ded2a10ede0cbc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cc1dbea-7e35-45ea-9cb3-b943caa034bb.ddaa5414f846595569ded2a10ede0cbc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (110388786, 'CH Robinson Glory Foods Kale Greens, 10 oz', 4.56, 'deleted_736393206551', 'Greens, Kale, Organic, Bag 10 OZ Ready to cook. USDA organic. Southern food with a soulful heritage. Glory Foods Southern-flavored greens, beans, squash and more - are fresh picked at the peak of their flavor and nutrients, washed, bagged and ready to cook. Fresh food. Fast. Because Glory Foods knows you\'d rather spend your time eating a home-cooked meal that nurtures the soul, than preparing one. Good taste for the table good taste for the soul. Certified organic by Quality Assurance International. If you have questions or comments about Glory Foods Products, please call 1-877-404-5679. Perishable - keep refrigerated. 10 oz (283 g) Eden Prairie, MN 55347 877-404-5679', 'Kale Greens, Organic Ready to cook. USDA organic. Southern food with a soulful heritage. Glory Foods Southern-flavored greens, beans, squash and more - are fresh picked at the peak of their flavor and nutrients, washed, bagged and ready to cook. Fresh food. Fast. Because Glory Foods knows you\'d rather spend your time eating a home-cooked meal that nurtures the soul, than preparing one. Good taste for the table good taste for the soul. Certified organic by Quality Assurance International. If you have questions or comments about Glory Foods Products, please call 1-877-404-5679.', 'Glory Foods', 'https://i5.walmartimages.com/asr/e5255e3f-eeb9-459f-93b8-3d75db35a868_1.1c452bda5b6785803b6dfa30eed4073c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5255e3f-eeb9-459f-93b8-3d75db35a868_1.1c452bda5b6785803b6dfa30eed4073c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5255e3f-eeb9-459f-93b8-3d75db35a868_1.1c452bda5b6785803b6dfa30eed4073c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (110468066, 'Fresh Red Seedless Grapes, 2 Lb.', 3.96, 'deleted_881006020212', 'Red Seedless Grapes, 2 Lb.', 'Fresh Red Seedless Grapes, 2 Lb.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (110654123, 'Ready Pac Asian Wrap, 5.5 Oz.', 2.98, '077745296272', 'This ready-made meal has two tortillas included to help you get started with a quick meal. It has 280 calories per bowl, so it can provide you with a quick, low-calorie lunch or dinner. Each bowl contains a fork inside. This boxed meal consists of Artisan sesame seed tortillas, crisp iceberg and cabbage mix, white chicken, celery, fire-roasted edamame, natural sweet Thai peanut sauce, carrots and red cabbage. It is inspected for wholesomeness by the US Department of Agriculture.Ready Pac Asian Wrap, 5.5 oz:', 'Wrap kit, Thai peanut crunch2 tortillas included280 calories per bowlMix, fill and enjoyPacked meal with a fork insideIncludes Artisan sesame seed tortillas, crisp iceberg and cabbage mix, white chicken, celery, fire roasted edamame, natural sweet Thai peanut sauce, carrots and red cabbageInspected for wholesomeness by the U.S. Department of Agriculture', 'Ready Pac Foods', 'https://i5.walmartimages.com/asr/92a48d11-2c9b-4d36-a76d-2c3cb3bc1188.0f272cf164582d5ca85640166c02d2c4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/92a48d11-2c9b-4d36-a76d-2c3cb3bc1188.0f272cf164582d5ca85640166c02d2c4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/92a48d11-2c9b-4d36-a76d-2c3cb3bc1188.0f272cf164582d5ca85640166c02d2c4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (110787220, 'Dole Mandarin Sweet Chili Salad Companion, 1 Oz.', 3.48, '071430000472', 'Dole Mandarin Sweet Chili Salad Companion, 1 Oz.', 'Salad Companion Mandarin Sweet Chili', 'Dole', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111066591, '200pc Pto Ykn/red 5#', 824, '405536848889', 'short description is not available', '200pc Pto Ykn/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111078096, 'Whole Fresh White Sweet Potatoes, 2 lb, Bag', 2.98, '850148003070', 'Fresh Potatoes are ideal for any time of the day and may be prepared multiple ways. They are handy for baking, microwaving, mashing or sliced into wedges. With 110 calories per serving, these high-fiber potatoes also provide a good source of vitamin C, B vitamins and potassium. You can add this fresh produce to your breakfast in the form of delicious hash browns, add them to the lunch menu as tasty French fries or bring more substance to your dinner by serving them in baked or mashed form. They are available in a convenient 10-pound bag with easy recipes on the package. Stock your pantry with Fresh Potatoes.', 'White Sweet Potatoes 2 Lb Bag Fresh Potatoes are ideal for any time of the day and may be prepared multiple ways. They are handy for baking, microwaving, mashing or sliced into wedges. With 110 calories per serving, these high-fiber potatoes also provide a good source of vitamin C, B vitamins and potassium. You can add this fresh produce to your breakfast in the form of delicious hash browns, add them to the lunch menu as tasty French fries or bring more substance to your dinner by serving them in baked or mashed form. They are available in a convenient 10-pound bag with easy recipes on the package. Stock your pantry with Fresh Potatoes.', 'Unbranded', 'https://i5.walmartimages.com/asr/b33fd2a9-2e6e-49e3-96b4-d1c521d53ebd.05d5f6316cee80a1367fccb62a5c036d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b33fd2a9-2e6e-49e3-96b4-d1c521d53ebd.05d5f6316cee80a1367fccb62a5c036d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b33fd2a9-2e6e-49e3-96b4-d1c521d53ebd.05d5f6316cee80a1367fccb62a5c036d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111146370, 'Fresh Organic Mini Sweet Peppers, 8 oz, Bag', 3.46, '603224255050', 'Introducing our Fresh Organic whole Peppers - greenhouse grown without the use of pesticides. These peppers offer a naturally sweet and crisp flavor, with virtually no seeds. Enjoy the goodness of organic produce in every bite. With their small size, these peppers are a convenient and delicious addition to any meal. Experience the freshness and quality of our Organic Peppers and savor the taste of nature. Try them today and elevate your culinary creations.', 'Organic Biologiques mini peppers are greenhouse grown without the use of pesticides Unique size is packed with sweet flavor Minimal seeds make this a quick and easy snack option A sweet source of Vitamin C', 'Fresh Produce', 'https://i5.walmartimages.com/asr/937430ea-9661-43df-a238-44ff38438226.e357818578ade69c9e929fb0805a7835.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/937430ea-9661-43df-a238-44ff38438226.e357818578ade69c9e929fb0805a7835.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/937430ea-9661-43df-a238-44ff38438226.e357818578ade69c9e929fb0805a7835.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111224631, 'Fresh D\'Anjou Pears, 1 lb Bag', 1.97, '400094433966', 'Indulge in the juicy and succulent taste of Danjou Pears, a premium fresh produce with a delightful blend of organic ingredients. These whole pears are hand-picked from the orchards and packed with the goodness of nature, with no containers required. Enjoy the full natural flavors of this wholesome fruit and enrich your meals with a touch of elegance and healthful nutrition.', 'Anjou pears are a classic variety known for their sweet, juicy flavor and smooth, firm texture. They are versatile and can be used in a variety of dishes, from salads to desserts. High in dietary fiber and vitamin C, making them a healthy snack option. The 3lb bag size is convenient for families and individuals looking for a larger supply of fresh pears. Whole Anjou pears are harvested at their peak ripeness and carefully packed to ensure maximum freshness and flavor. They have a long shelf life and can be stored in the refrigerator for up to 2-3 weeks. Anjou pears are available year-round, making them a reliable choice for any occasion. Made with organic ingredients.', 'Unbranded', 'https://i5.walmartimages.com/asr/1768e8ef-865f-48d4-912f-b986d583fdf5.08b640e3e963a277c891bfd44fa1dbd6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1768e8ef-865f-48d4-912f-b986d583fdf5.08b640e3e963a277c891bfd44fa1dbd6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1768e8ef-865f-48d4-912f-b986d583fdf5.08b640e3e963a277c891bfd44fa1dbd6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111242525, 'Organic Sweet Potatoes 3 Lb Bag', 6.28, 'deleted_790132087320', 'Baking yams is the most straightforward way to prepare them. Wash the yams thoroughly. Prick them with a fork. Preheat your oven to 200 C and bake for approximately 40 minutes. When done, slice them open and add a bit of butter and a sprinkle of cinnamon.', 'Organic Sweet Potatoes 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111257215, 'Fresh Strawberries, 4 lb', 12.47, '686478000126', 'short description is not available', 'Fieldpack Unbranded Strawberries', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b1e063a4-1d67-43b2-bf36-6e9e4e1e53b4.ee5d2c1163b851257e6c523b44c1b693.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b1e063a4-1d67-43b2-bf36-6e9e4e1e53b4.ee5d2c1163b851257e6c523b44c1b693.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b1e063a4-1d67-43b2-bf36-6e9e4e1e53b4.ee5d2c1163b851257e6c523b44c1b693.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111422396, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094144152', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111459585, 'Marketside Greek Salad', 3.98, '681131095594', 'short description is not available', 'Marketside Greek Salad', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111521775, 'Fresh Athena Cantaloupe, Each', 3.28, '689076992596', 'Fresh Athena Cantaloupe is a high-sugar melon with a delectable flavor enhanced with honeyed nuances. Athena melons have a sweet and floral flavor that is well suited for fresh and cooked meals. They are great added to a cheese plate, tossed into an herb-based salad or eaten freshly cut. Cut it into small pieces and put it in a fresh salad along with chicken, cucumbers, tomatoes, and a light dressing. You can even use this sweet cantaloupe to make a refreshing summer cocktail, a spreadable jam, or a light sorbet. Enjoy the sweet and juicy taste of Fresh Athena Cantaloupe.', 'Fresh Athena Cantaloupe, Each Flavorful addition to many recipes Enjoy on its own or add to a mixed fruit salad Add to your fresh garden salad High sugar content A great source of potassium and vitamin C Sweeter taste and more fragrant than other melons', 'Fresh Produce', 'https://i5.walmartimages.com/asr/59aad4b7-b020-47cc-b7b7-3c85277229ce.6d58d83c48301f60e92519256dd3a3fe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59aad4b7-b020-47cc-b7b7-3c85277229ce.6d58d83c48301f60e92519256dd3a3fe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59aad4b7-b020-47cc-b7b7-3c85277229ce.6d58d83c48301f60e92519256dd3a3fe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111731346, 'Fresh Organic Bosc Pears, 2 lb, Bag', 4.98, '888289402506', 'Introducing the sweet and juicy Fresh Bosc Organic pear, known for its distinct elongated shape and brownish-golden skin. This versatile fruit is perfect for snacking, cooking, and baking. Its firm flesh holds up well under heat, making it the ideal ingredient for pies, tarts, and baked goods. Enjoy the subtle honey-like flavor of the Organic Bosc pear in a 2lb Bag in salads or sliced with your favorite cheese. Fill your fruit basket with the delicious and nutritious Bosc pear today.', 'This package includes 2 lbs of pears, each with a distinctive brownish-yellow skin and a long, tapered neck. The flesh of the Organic Bosc Pear is dense and juicy, with a sweet and spicy flavor that is perfect for eating fresh or cooking. These pears are certified organic, which means that they are grown without the use of synthetic pesticides, fertilizers, or genetically modified organisms (GMOs). Organic Bosc Pears are a good source of fiber, vitamin C, and antioxidants, and are a healthy and flavorful addition to any diet. With their unique taste and appearance, Organic Bosc Pears are a premium choice for pear lovers who value organic and sustainable farming practices. The flesh of the Organic Bosc Pear is dense and juicy, with a sweet and spicy flavor that is perfect for eating fresh or cooking. These pears are certified organic, which means that they are grown without the use of synthetic pesticides, fertilizers, or genetically modified organisms (GMOs). Organic Bosc Pears are a good source of fiber, vitamin C, and antioxidants, and are a healthy and flavorful addition to any diet. With their unique taste and appearance, Organic Bosc Pears are a premium choice for pear lovers who value organic and sustainable farming practices. These pears are certified organic, which means that they are grown without the use of synthetic pesticides, fertilizers, or genetically modified organisms (GMOs). Organic Bosc Pears are a good source of fiber, vitamin C, and antioxidants, and are a healthy and flavorful addition to any diet. With their unique taste and appearance, Organic Bosc Pears are a premium choice for pear lovers who value organic and sustainable farming practices.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5d196224-2231-471f-936c-8e469e3939e0_1.093fc731528375e86c28ce931fa79eae.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d196224-2231-471f-936c-8e469e3939e0_1.093fc731528375e86c28ce931fa79eae.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d196224-2231-471f-936c-8e469e3939e0_1.093fc731528375e86c28ce931fa79eae.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111835793, 'Yellow Squash, 2 Pack', 1.57, '711069541143', 'Yellow Squash is an extremely versatile vegetable that is a must-have for every cook. This yellow squash is rich in vitamin C, so you know you\'re getting a wholesome vegetable. You can prepare the squash in many different ways. Sauté it with butter and serve with your choice of protein, like pork chops or grilled chicken breast. You can slice it and fry it up Southern-style, or you can incorporate it into a casserole for a little comfort food. For a sweet treat use the squash to bake a decadent lemon and yellow squash muffins, you can through in some blueberries for a fresh addition. The culinary possibilities are endless with Yellow Squash.', 'Fresh, versatile ingredient Sauté it with butter, slice it and fry it up Southern-style, or bake into sweet lemon and yellow squash muffins Rick in vitamin C Wash before use and use within 2-3 days of opening', 'Fresh Produce', 'https://i5.walmartimages.com/asr/981cb5fe-eb0c-4954-adcc-c4a004043213_1.e7342e4945605edb54577accf3314284.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/981cb5fe-eb0c-4954-adcc-c4a004043213_1.e7342e4945605edb54577accf3314284.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/981cb5fe-eb0c-4954-adcc-c4a004043213_1.e7342e4945605edb54577accf3314284.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111844339, 'ROLAND DRIED FANCY PORCINI MUSHROOM', 48.57, '041224448162', 'These popular dried cepes are noted for their earthy aroma and intense flavor. Roland Dried Porcini Mushrooms are excellent with meats, rice and pasta dishes, they are also the preferred mushrooms for soups and casseroles. Reconstitute by soaking it in hot water till soft and prepare just like fresh mushrooms. Specialty foods. Boletus edulis. Visit us at www.rolandfood.com. Product of Serbia/Montenegro. Packed in France.', 'ROLAND DRIED FANCY PORCINI MUSHROOM', 'Roland', 'https://i5.walmartimages.com/asr/fae48ea4-96ed-4035-a301-718c4aeda815.c891bac22e5011405739696e43c2d173.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fae48ea4-96ed-4035-a301-718c4aeda815.c891bac22e5011405739696e43c2d173.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fae48ea4-96ed-4035-a301-718c4aeda815.c891bac22e5011405739696e43c2d173.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111868357, 'Fresh Green Cabbage, LB', 1.07, '400094439913', 'Get creative in the kitchen with green cabbage (Repollo) . Fresh green cabbage is low in calories and high in fiber and antioxidants making it a great part of any healthy diet. Best of all, cabbage can be used for many different recipes and cuisines. Cabbage can be incorporated into everything from delicious and creamy cole slaw, wraps, egg rolls, curry, kimchi and more. Green cabbage can be roasted, boiled, braised, grilled, sauted, and even blanched. The possibilities are endless when you bring home green cabbage.', '1 head of green cabbage Versatile and healthy ingredient Can be roasted, boiled, braised, grilled, sauted, and even blanched Incorporate into everything from delicious and creamy cole slaw, stuffed cabbage, and wraps, to egg rolls, grilled cabbage, curry, kimchi and more Low in calories and high in fiber and antioxidants', 'Repollo Verde', 'https://i5.walmartimages.com/asr/82d23d6a-d19c-4182-967e-ffcc4d40926f.25f2601e790451103f702155dae3d29c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/82d23d6a-d19c-4182-967e-ffcc4d40926f.25f2601e790451103f702155dae3d29c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/82d23d6a-d19c-4182-967e-ffcc4d40926f.25f2601e790451103f702155dae3d29c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (111906876, 'Dole Spring Mix with Garden Vegetables, 8 Oz.', 2.98, '071430010860', 'Dole Spring Mix with Garden Vegetables, 8 Oz.', 'Dole Spring Mix with garden Veggies 8 Oz.', 'Dole', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (112030832, 'Milpas Japones Whole Chile Pods, 3 Oz', 1.64, '074734184145', 'Milpas Japones Whole Chile Pods offer an authentic taste of Mexican culinary tradition. These whole dried Japones chiles are known for their mild to medium heat and distinct, slightly fruity flavor, making them a versatile ingredient in a wide range of dishes. The 3 oz package provides a convenient amount for home cooks looking to add a touch of authentic spice and depth to their meals. Perfect for crafting traditional salsas, marinades, or infusing oils, these chile pods can also be rehydrated and incorporated into stews and braises. Their whole form allows for controlled flavor release, and they are a staple for anyone seeking to explore or recreate authentic Mexican flavors. Elevate your cooking with the simple yet impactful addition of Milpas Japones Whole Chile Pods.', 'Authentic Japones whole chile podsMild to medium heat level, perfect for various dishes3 oz package for convenient useAdds a distinct flavor and subtle spiceIdeal for sauces, marinades, stir-fries, and traditional Mexican cuisine', 'Milpas', 'https://i5.walmartimages.com/asr/1d2cb315-75f4-47c0-b694-3e6df18accfc.bb0e67b9789460945e019f1e25432b88.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d2cb315-75f4-47c0-b694-3e6df18accfc.bb0e67b9789460945e019f1e25432b88.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d2cb315-75f4-47c0-b694-3e6df18accfc.bb0e67b9789460945e019f1e25432b88.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (112100895, 'Fresh Gold Nugget Mandarin Oranges, 3 lb Bag', 4.96, '605049521631', 'Enjoy the juicy sweetness of Fresh Gold Nugget Mandarin Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these mandarin oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. However you choose to use them, Fresh Gold Nugget Mandarin Oranges add flavor to any meal or beverage.', '3-pound bag of deliciously sweet and juicy fresh mandarin oranges Extend shelf-life by storing in the fridge Easy to peel and segment Only available in the spring California grown Package branding may vary by region', 'Fresh Produce', 'https://i5.walmartimages.com/asr/33fc9b18-8298-486f-bc57-d2d44729379c.337c994f9936cd521c173d8f41f73e5d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/33fc9b18-8298-486f-bc57-d2d44729379c.337c994f9936cd521c173d8f41f73e5d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/33fc9b18-8298-486f-bc57-d2d44729379c.337c994f9936cd521c173d8f41f73e5d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (112144424, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094344118', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (112244005, 'Fresh Valencia Oranges, 4 lb Bag', 7.57, '605049510895', 'Orange Valencia is a variety of orange that is highly sought after for its sweet and juicy flavor. Named after the city of Valencia in Spain, where it is believed to have originated, this orange has become popular worldwide for its exceptional taste and vibrant color. The fruit is medium-sized with a smooth and slightly pebbled skin that is easy to peel. Its bright orange hue is a visual delight, adding a touch of sunshine to any fruit bowl. The flesh of the Orange Valencia is tender, succulent, and bursting with tangy-sweet juice.', 'Orange Valencia is a variety of orange that is highly sought after for its sweet and juicy flavor. Named after the city of Valencia in Spain, where it is believed to have originated, this orange has become popular worldwide for its exceptional taste and vibrant color. The fruit is medium-sized with a smooth and slightly pebbled skin that is easy to peel. Its bright orange hue is a visual delight, adding a touch of sunshine to any fruit bowl. The flesh of the Orange Valencia is tender, succulent, and bursting with tangy-sweet juice.', 'Sunkist', 'https://i5.walmartimages.com/asr/4967e330-10dc-4669-acb2-401efa61a63d.c5824c6c3b0f1240b36d09393c76904d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4967e330-10dc-4669-acb2-401efa61a63d.c5824c6c3b0f1240b36d09393c76904d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4967e330-10dc-4669-acb2-401efa61a63d.c5824c6c3b0f1240b36d09393c76904d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (112253687, 'Tuscan Cantaloupe 2 Ct Bag', 3.98, '827575300065', 'short description is not available', 'Tuscan Cantaloupe 2 Ct Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (112332122, 'Marketside Butternut Squash, 12 oz Bag', 2.72, 'deleted_605806138010', 'Squash, Butternut, Fresh, Wrapper 12 OZ Steams in pack. Per Serving: 40 calories; 0 g sat fat (0% DV); 0 mg sodium (0% DV); 2 g sugars; vitamin A (180% DV); vitamin C (30% DV). Find Delicious Recipes: GreenGiantFresh.com. Questions or comments? 1-800-998-9996. Follow us on: Facebook and Twitter. Find delicious recipes, helpful tips & more: Scan code with app. greengiantfresh.com/value-added. Product of USA. Perishable. Keep refrigerated. Microwave in Bag Directions: 1. Pierce bag with fork. 2. Place bag on microwavable plate. 3. Microwave on high for 3 minutes. For softer texture, add up to 1 minute. Let sit for 1 minute. Caution: Contents and bag hot! 4. Open bag, pour contents into serving dish and enjoy. Because microwaves vary, cook times are approximate. Serving Suggestions: Saute squash with butter and brown sugar for a flavorful side dish. Sauteed squash can also be served with vanilla ice cream for a delicious dessert! Boil squash until tender, then mash and top with pecans and nutmeg for a festive twist to traditional mashed potatoes. Chop into bite size pieces and add to rice pilaf for added color and flavor. Toss squash with olive oil, salt, pepper and rosemary. Roast at 400 degrees F for 45-50 minutes, or until caramelized and golden brown. 12 oz (340 g) Salinas, CA 93901 800-998-9996 2013 Growers Marketing, LLC.', 'Marketside Butternut Squash, 12 oz', 'Green Giant', 'https://i5.walmartimages.com/asr/d3b01b24-04b1-4fa1-9f3b-3367eee237f0_1.0b565097358daa53310049d065299221.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d3b01b24-04b1-4fa1-9f3b-3367eee237f0_1.0b565097358daa53310049d065299221.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d3b01b24-04b1-4fa1-9f3b-3367eee237f0_1.0b565097358daa53310049d065299221.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (112493923, 'Organic Whole White Mushrooms, 6 Oz.', 2.54, 'deleted_678286888553', 'Organic Whole White Mushrooms, 6 Oz.', 'Organic Mushroom White Whole 6 Oz.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (112575948, 'Marketside Diced Butternut Squash, 20 oz', 2.98, '669826501209', 'Marketside Diced Butternut Squash, 20 oz', 'Butternut Squash Diced 20 oz', 'Marketside', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (112588693, 'Revol Greens Organic Green and Red Leaf Lettuce Salad Blend, 4 oz Clam Shell, Fresh', 2.98, '850024486027', 'Revol Greens® Organic Green & Red Duo 4 oz is a blend of organic green and red leaf lettuce. This versatile blend of green & red lettuce adds color and crunch to salads and sandwiches. All Revol Greens® lettuce is grown inside a greenhouse and harvested daily, 365 days a year. Our regional greenhouse locations allow us to reach nearly all our customers within 24-48 hours of harvest, so that our greens arrive incredibly fresh and at peak nutritional value. Revol Greens® Organic Green & Red Duo 4 oz is ready to eat and packaged in a convenient resealable container.', 'USDA Certified Organic Grown inside a protected greenhouse environment Grown with 90% less water than field grown lettuce', 'Revol Greens', 'https://i5.walmartimages.com/asr/1dc73899-84c5-4d48-992d-9e6657b4f487.1d2e84da762a75192a92700064edb788.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1dc73899-84c5-4d48-992d-9e6657b4f487.1d2e84da762a75192a92700064edb788.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1dc73899-84c5-4d48-992d-9e6657b4f487.1d2e84da762a75192a92700064edb788.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (112614055, 'Fresh Organic Brown Sliced Mushrooms, 8 oz', 3.88, '678286889000', 'Experience the fresh taste of Organic Brown Sliced Mushrooms. If you\'re looking for a traditional mushroom with a mild earthy taste, brown mushrooms are just what you need. Versatile and meaty, these mushrooms are a great addition to any meal. Pre-cleaned and sliced, they are perfect for adding to stir-fries, sauces, soups, pizzas, salads, and stews to create culinary works all your own. They are free of fat and cholesterol and are low in calories and sodium. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try out Organic Brown Sliced Mushrooms.', '8-ounce package of organic brown sliced mushrooms Naturally fat-free Cholesterol-free Low in calories, carbs and sodium Fresh and all natural Natural source of the antioxidant selenium Great for salads, pizzas, and much more', 'Unbranded', 'https://i5.walmartimages.com/asr/9845e302-060b-4a1e-ac36-9fd1e741f660_4.989f447e486395f3bfa28d1f6b935ab0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9845e302-060b-4a1e-ac36-9fd1e741f660_4.989f447e486395f3bfa28d1f6b935ab0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9845e302-060b-4a1e-ac36-9fd1e741f660_4.989f447e486395f3bfa28d1f6b935ab0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113088542, 'Sugarbee Apple 2ct', 1.97, '888289403749', 'short description is not available', 'Sugarbee Apple 2ct', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113108793, 'Fresh Slicing Tomato, 3 Pack', 2.5, '057836655812', 'Create something wholesome and delicious with 4pk tomatoes. These fresh tomatoes are the perfect ingredient for a variety of tasty dishes. Use them to make a decadent tomato sauce for a pasta dish; try slicing them up and pairing with mozzarella cheese, basil and balsamic vinegar; or simply enjoy them on their own as a nutritious snack. They would make a comforting and appetizing tomato soup and a flavorful salsa. You could also slice them up and use them to top burgers and pizza or use them to make a delicious grilled cheese and tomato sandwich. However you choose to use them, these tomatoes will add flavor and taste to any meal. Be sure to add these fresh tomatoes to your Walmart purhase today.', 'Slicing Tomatoes, 4 Count: Pack of 4 whole slicing tomatoes Firm and thick-skinned Large size is perfect for slicing up and garnishing sandwiches and burgers Classic tomato flavor lends itself to a wide variety of recipes Delicious base for making salsas, soups, sauces, and more', 'Sunset Grown', 'https://i5.walmartimages.com/asr/66a57190-3844-4a00-8135-3466bbfce8b0.d49d3461c8a0b731cc67c52cceea0bb9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/66a57190-3844-4a00-8135-3466bbfce8b0.d49d3461c8a0b731cc67c52cceea0bb9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/66a57190-3844-4a00-8135-3466bbfce8b0.d49d3461c8a0b731cc67c52cceea0bb9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113309180, 'Melon Medly', 10.98, '893268001052', 'short description is not available', 'Melon Medly', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113309473, 'Fresh Whole Slicing Tomato, Each', 1.98, '405522485401', 'Bring the delicious taste of Fresh Whole Slicing Tomatoes into your home. These tomatoes deliver sweet and juicy flavor with each bite and are an ideal ingredient in a variety of recipes. They would make a tasty, garden-inspired addition to salads, burgers, gourmet sandwiches, and so much more. They are picked at peak freshness and specially bred for deep red color, intense flavor, and higher lycopene content than standard tomatoes. Whether you slice or dice them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with these Fresh Whole Slicing Tomatoes.', 'Fresh Whole Slicing Tomato, Each Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Picked at peak freshness High lycopene content Ideal ingredient for a variety of dishes Perfect for salads, burgers, gourmet sandwiches, and more Add to party trays or school lunches', 'Fresh Produce', 'https://i5.walmartimages.com/asr/596ed5a2-6558-42d6-9a5b-c318bc9f4ae2.4927131d05c00312cf51744e17e11473.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/596ed5a2-6558-42d6-9a5b-c318bc9f4ae2.4927131d05c00312cf51744e17e11473.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/596ed5a2-6558-42d6-9a5b-c318bc9f4ae2.4927131d05c00312cf51744e17e11473.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113322217, 'Sun-Maid Deglet Noor Pitted Dried Dates, 8 oz (227 g)', 7.23, '041143089088', 'Whole Fruit 0 g Added Sugars* Good Source of Fiber Fresh Lock® Quality Seal Since 1912 Non GMO Project Verified Kosher Grown in ample sunlight and dry conditions to produce its sweet and nutty flavor, Sun-Maid Deglet Noor Pitted Dates are healthy, good source of fiber snacks right out of the bag. Healthy, sun-dried to perfection and perfectly delicious. *All dates have 0 g added sugars.', 'Whole fruit 0 g added sugars Good source of fiber Fresh lock Quality seal since 1912', 'Sun-Maid', 'https://i5.walmartimages.com/asr/5b4c4bef-89c3-484f-95d6-95cb987e9691.5ff6018a089d92393a6c25bce7d0b08a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b4c4bef-89c3-484f-95d6-95cb987e9691.5ff6018a089d92393a6c25bce7d0b08a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b4c4bef-89c3-484f-95d6-95cb987e9691.5ff6018a089d92393a6c25bce7d0b08a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113604620, 'Microwave in Bag Yellow Potatoes, 1.25 Lb.', 3.97, '661061000387', 'Microwave in Bag Yellow Potatoes, 1.25 Lb.', 'Microwave In Bag Yellow Potatoes 1.25 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113643498, 'Clementine Baby Cuties, 3.6 lb', 4.99, '033383104164', 'Clementines, 3.6 lb', 'Clementines, 3.6 lb', 'Unbranded', 'https://i5.walmartimages.com/asr/a117be90-8c23-4f71-916b-f66270c44319.c7fc66e36cd8b355b23432f451bee70f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a117be90-8c23-4f71-916b-f66270c44319.c7fc66e36cd8b355b23432f451bee70f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a117be90-8c23-4f71-916b-f66270c44319.c7fc66e36cd8b355b23432f451bee70f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113706232, 'Fresh Blueberries, 2 lb Box', 6.94, '812049006246', 'Create decadent meals with sweet and light Fresh Blueberries. Enjoy them for breakfast, lunch, dinner, or dessert. Use them to make a lemon and blueberry galette, bake them into delicious blueberry muffins, cook up a sweet and savory pizza topped with blueberries and bacon, or reduce them for a sauce to use on grilled chicken or cheesecake. They contain essential vitamins and nutrients like, vitamin C, vitamin K, antioxidants, and manganese making them perfect for a healthy diet. Prior to serving simply gently wash them with cool water and enjoy the fresh taste. Refrigerate the berries to keep them fresh and ready for use. Pick up Fresh Blueberries today and savor the delectable flavor.', 'Fresh Blueberries, 2 lb Box: Best when enjoyed at room temperature Light, refreshing taste Healthy treat Prior to serving gently wash them with cool water Refrigerate your berries in the original container to maintain freshness They should approximately last 3-5 days after purchase Keep dry for optimal freshness', 'Unbranded', 'https://i5.walmartimages.com/asr/95dcb6db-b793-4da5-8bdc-f0884cc337fc.aa761c55c1ab1460c3451fbc379b662a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95dcb6db-b793-4da5-8bdc-f0884cc337fc.aa761c55c1ab1460c3451fbc379b662a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95dcb6db-b793-4da5-8bdc-f0884cc337fc.aa761c55c1ab1460c3451fbc379b662a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113716180, 'Gefen Organic Vacuum Pack Beets, 17.6 Oz', 4.93, '710069011014', 'Gefen Organic Vacuum Pack Beets offer a convenient and healthy way to enjoy this nutritious root vegetable. Sourced from organic farms and vacuum-sealed to preserve their natural flavor and vibrant color, these beets are ready to be incorporated into your favorite meals. Their tender texture and earthy taste make them a versatile addition to salads, grain bowls, or as a simple, delicious side dish. Perfect for busy households and health-conscious consumers, Gefen\'s organic beets eliminate the need for peeling and cooking from scratch. They are a staple in many Eastern European and Kosher cuisines, often enjoyed pickled, roasted, or mashed. Whether you\'re preparing a traditional borscht or a modern beet salad, these ready-to-eat beets provide exceptional quality and convenience.', 'Certified organic beets, vacuum-sealed for freshnessConvenient 17.6 oz packageTender, earthy flavor and vibrant colorReady to eat, perfect for salads and side dishesVersatile ingredient for various culinary creations', 'Gefen', 'https://i5.walmartimages.com/asr/0a9405f5-63eb-4849-9de2-debcc156ac9f_1.c00291e6af5df99f138f828e0ef756a8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a9405f5-63eb-4849-9de2-debcc156ac9f_1.c00291e6af5df99f138f828e0ef756a8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a9405f5-63eb-4849-9de2-debcc156ac9f_1.c00291e6af5df99f138f828e0ef756a8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113724749, 'Mott\'s Sliced Green Apples, 12 Oz., 6 Count', 5.47, '095829201479', 'Apple, Green, Sliced, Tray 12 OZ Individual bags. Hand-picked goodness. Ready to eat. If you have any questions or comments about Mott\'s branded products please call 1-800-487-3245. www.mottsfresh.com. Product of USA. Keep refrigerated. 6 - 2 oz bags [12 oz (340 g)] Eden Prairie, MN 55347 800-487-3245 2011 Mott\'s LLP', 'Mott\'s Sliced Green Apples - 6 CT.Motts is a trademark of Mott\'s LLP.Grown in Chile.chile.If you have any questions or comments abouts Mott\'s branded products please call 1-800-487-3245.www.mottsfresh.com.©2011 Mott\'s LLP.', 'Mott\'s', 'https://i5.walmartimages.com/asr/19c00892-224e-48cd-a446-fc7316104d04.9504feab939e99de4c64130a19fb504b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19c00892-224e-48cd-a446-fc7316104d04.9504feab939e99de4c64130a19fb504b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19c00892-224e-48cd-a446-fc7316104d04.9504feab939e99de4c64130a19fb504b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113790422, 'Nopalito Diced', 2.38, '045255113341', 'Add flavor and goodness to your recipes with Nopalito Cactus. Nopalitos, tender, juicy cactus chunks, are a staple in Central and South American dishes, adding texture and depth to salads, stews, soups and more. Cactus is packed with dietary fiber and vitamins and minerals, including vitamins A, C, D, E, K, B6 and B12 as well as iron, phosphorous, magnesium and zinc. It contains no cholesterol, trans or saturated fat, with just 14 calories per cup. This diced California cactus comes ready to add to your recipes.', 'Nopalito, Diced: Tender, diced cactus Low in calories Delicious added to cold salads for extra flavor and texture Essential for a variety of Central and South American dishes Rich in vitamins and minerals, including vitamins A, C, D, E, K, B6 and B12 as well as iron, phosphorous, magnesium and zinc No cholesterol, trans fat, saturated fat High in dietary fiber 14 calories per cup', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cbff6710-7d2e-4e22-8f91-d9cbadd9dda8.d3bdbf392766a6067b072f89872a52a6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cbff6710-7d2e-4e22-8f91-d9cbadd9dda8.d3bdbf392766a6067b072f89872a52a6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cbff6710-7d2e-4e22-8f91-d9cbadd9dda8.d3bdbf392766a6067b072f89872a52a6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113804290, '250pc Pto Rst Jmb 8#', 1605, '405518780305', 'short description is not available', '250pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113865188, 'Zestar Apple Totes', 0.98, '681131124249', 'short description is not available', 'Zestar Apple Totes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113874169, 'Pretty Lady White Grapes, 2 Count', 6.97, '850859002003', 'Pretty Lady White Grapes, 2 Count', 'Pr Pretty Lady Grape White', 'Pretty Lady', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113914413, '180pc Pto Rst 10#2ts', 889.2, '405542167950', 'short description is not available', '180pc Pto Rst 10#2ts', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (113986818, 'Anjou Pears, 5 lb', 4.97, '033383300559', 'Danjou Pears, 5 Lb.', '5lb Bag Of Danjou Pears', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9c58b4e3-6dee-44fa-9489-4b8056bfb81b_1.77992124e814dfb65dcbefb14d277f1c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c58b4e3-6dee-44fa-9489-4b8056bfb81b_1.77992124e814dfb65dcbefb14d277f1c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c58b4e3-6dee-44fa-9489-4b8056bfb81b_1.77992124e814dfb65dcbefb14d277f1c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114189769, 'Fresh Organic Blueberries, 6 oz Container', 2.67, '899062002264', 'Fresh Blueberries are a delightful and nutritious treat that brings a burst of flavor to any dish. These plump and juicy berries are picked at the peak of freshness, ensuring a sweet and tangy taste that is hard to resist. Perfect for snacking, baking, or adding to your favorite recipes, these blueberries are a versatile fruit that can be enjoyed in countless ways. Whether you sprinkle them on top of your morning cereal, blend them into a smoothie, or bake them into a delicious pie, Fresh Blueberries are sure to satisfy your cravings for a healthy and delicious snack.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Blueberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Blueberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of blueberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these blue gems into your baking endeavors, whether it\'s muffins, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are blueberries delicious, but they also offer an array of health benefits. Loaded with antioxidants, vitamins, and dietary fiber, blueberries are known to promote heart health, support brain function, and boost the immune system. They are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Blueberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Blueberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/738b6006-e4bb-41a7-bd14-5a4e7adf1b24.0925ca0c47211b0a3a12fb1897566002.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/738b6006-e4bb-41a7-bd14-5a4e7adf1b24.0925ca0c47211b0a3a12fb1897566002.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/738b6006-e4bb-41a7-bd14-5a4e7adf1b24.0925ca0c47211b0a3a12fb1897566002.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114204302, 'Organic Fresh Rainbow Baby Carrots, 12 oz, Bag', 2.16, '078783907267', 'Enjoy a colorful and delicious snack with these Organic Fresh Rainbow Baby Carrots. Certified USDA organic, these baby carrots are cut, washed, peeled, and ready to eat. They\'re great for packing in lunches to take to school or the office. You could also bring them along on a road trip when you\'re in the mood for a quick and healthy snack. If you\'re throwing a dinner party, set them out on a vegetable tray along with a variety of crowd-pleasing dips. Keep refrigerated until ready to enjoy. Bring home some Organic Fresh Rainbow Baby Carrots today.', 'Organic Fresh Rainbow Baby Carrots, 12 oz Plastic Bag USDA certified organic rainbow baby carrots Cut and peeled Washed and ready to eat Great for packing in lunches to take to school or the office Set them out on a vegetable tray along with your favorite dips Keep refrigerated', 'Fresh Produce', 'https://i5.walmartimages.com/asr/98941551-0007-4141-89d4-6fcaf5392f62.f832d472fabe56e24c4844d3c9353bdd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/98941551-0007-4141-89d4-6fcaf5392f62.f832d472fabe56e24c4844d3c9353bdd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/98941551-0007-4141-89d4-6fcaf5392f62.f832d472fabe56e24c4844d3c9353bdd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114256350, 'Brussels Sprouts, 12 oz', 2.48, 'deleted_716519010354', '', '', 'Mann\'s', 'https://i5.walmartimages.com/asr/827a1ba5-10ff-4a82-842c-42ecaec7a085_1.7fbcd3e53ac6ed7df4a4574d22c27cab.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/827a1ba5-10ff-4a82-842c-42ecaec7a085_1.7fbcd3e53ac6ed7df4a4574d22c27cab.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/827a1ba5-10ff-4a82-842c-42ecaec7a085_1.7fbcd3e53ac6ed7df4a4574d22c27cab.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114263715, 'Heirloom Tomato, 2 Pack', 3.98, 'deleted_867747000003', 'Fresh Heirloom Tomatoes are the time tested, never modified, reminder of the quality eating experience that can only come from a tomato grown in your own backyard and picked at the peak of perfedtion! Whether chopping to add into a salad, or sliced as part of a burger, these fresh heirloom tomatoes will not dissapoint. Be sure to add fresh heirloom tomatoes to our Walmart produce purchase today', 'Uglyripe Heirloom Tomato', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114263964, 'Batata, 3 Lb.', 4.97, '882623895818', 'Fresh Batata, 3 Lb.', 'Good source of fiber and potassium Rich in vitamin C and vitamin B Nutty flavor when cooked Fresh and whole Can be mashed, baked, boiled, fried, creamed, and more Versatile and delicious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ab5d23d2-8648-4ced-bdfe-bae89c3ee3f1.6c7f199c87af3ca8c039cb3dcd9b2387.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ab5d23d2-8648-4ced-bdfe-bae89c3ee3f1.6c7f199c87af3ca8c039cb3dcd9b2387.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ab5d23d2-8648-4ced-bdfe-bae89c3ee3f1.6c7f199c87af3ca8c039cb3dcd9b2387.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114400724, 'Fresh Yellow Grape Tomato, 10 oz Package', 2.98, '000000031486', 'These Yellow Grape Tomatoes deliver fresh, versatile flavor to take you from sauces to salads and beyond. A unique spin on the time-tested grape tomato, these colorful cousins of the grape tomato boast unique citrusy, floral notes. Refreshingly vibrant and versatile, you can enjoy them for snacking, salads, grilling, roasting or sauteing. You can combine these tasty little tomatoes with fresh mozzarella and basil drizzled with olive oil or slice them up and add them to a freshly tossed salad. If you\'re feeling something classic, you can always cut one up to add that fresh tomato taste to a sandwich or dice up a few to make a delightful pizza topping. Be sure to add Yellow Grape Tomatoes to your inventory of fresh ingredients today.', 'Yellow Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Colorful tomatoes with citrusy, floral notes Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9f25e3db-2d7e-4cc6-9630-325a4d12829b_5.f5ece42c4ed727430faecd9822c3f490.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9f25e3db-2d7e-4cc6-9630-325a4d12829b_5.f5ece42c4ed727430faecd9822c3f490.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9f25e3db-2d7e-4cc6-9630-325a4d12829b_5.f5ece42c4ed727430faecd9822c3f490.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114429665, 'Marketside Brussels Sprouts & Asparagus, 8 oz', 3.4, '681131147057', 'short description is not available', 'Ms Brussels Sprouts Asparagus 8oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/09949f41-496e-4fe4-b4f7-661d3829440f_1.47727f515cae19074401f28178edb30b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/09949f41-496e-4fe4-b4f7-661d3829440f_1.47727f515cae19074401f28178edb30b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/09949f41-496e-4fe4-b4f7-661d3829440f_1.47727f515cae19074401f28178edb30b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114511126, 'Fresh Tricolor Grapes, 10 Oz', 2.98, '708174105001', 'Grapes, Rainbow 1 qt 1 US dry quart. May contain blue, white or red grapes. www.SpiechFarms.com. Product of USA (CS). 1 qt Lawton, MI 49065', 'Fresh Tricolor Grapes, 10 Oz', 'Spiech Farms', 'https://i5.walmartimages.com/asr/792b6ecd-c260-487e-8bc1-834b31989ba4.5a1bd01de7fde77bfc0f5d90074a91d0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/792b6ecd-c260-487e-8bc1-834b31989ba4.5a1bd01de7fde77bfc0f5d90074a91d0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/792b6ecd-c260-487e-8bc1-834b31989ba4.5a1bd01de7fde77bfc0f5d90074a91d0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114600353, 'Organic French Fingerling Potatoes, 1.5 Lb.', 3.48, '690545915336', 'Organic French Fingerling Potatoes, 1.5 Lb.', 'Organic French Fingerling Potatoes 1.5lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114653332, 'Organic Russet Baking Potatoes, Each, Whole', 0.57, '000000940726', 'Introducing our Organic Russet Baking Potatoes, the perfect choice for indulging in a healthy and flavorful culinary experience. Sourced from premium organic farms, each pound of these earthy, golden-brown delights guarantees a satisfying and mouthwatering baked potato experience. Rich in essential nutrients and packed with natural goodness, our Russet Baking Potatoes are both delicious and nourishing. Fresh Produce With their tender, fluffy interior and crisp, flavorful skin, these versatile potatoes are ideal for whipping up savory dishes, hearty soups, or classic comfort food favorites. Elevate your meals and treat your taste buds with our exceptional Organic Russet Baking Potatoes, available by the pound.', 'Organic Russet Baking Potatoes, each Introducing our Organic Russet Baking Potatoes, the perfect choice for indulging in a healthy and flavorful culinary experience. Sourced from premium organic farms, each pound of these earthy, golden-brown delights guarantees a satisfying and mouthwatering baked potato experience. Rich in essential nutrients and packed with natural goodness, our Russet Baking Potatoes are both delicious and nourishing. With their tender, fluffy interior and crisp, flavorful skin, these versatile potatoes are ideal for whipping up savory dishes, hearty soups, or classic comfort food favorites. Elevate your meals and treat your taste buds with our exceptional Organic Russet Baking Potatoes, available by the pound.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b99497a7-6eae-4182-92d5-9116cbf632d6.70adfa0891a33515a4e64c85f019868a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b99497a7-6eae-4182-92d5-9116cbf632d6.70adfa0891a33515a4e64c85f019868a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b99497a7-6eae-4182-92d5-9116cbf632d6.70adfa0891a33515a4e64c85f019868a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114803944, 'Guava, 1 lb, Clamshell', 3.34, '614360000480', 'Savor the irresistible taste of fresh Guava. Guavas are an excellent fruit to add to your breakfast, lunch, dinner, or dessert. For breakfast, you can chop them up and add to yogurt or a smoothie for a sweet treat that\'s sure to get your morning started on a high note. For dessert, you could use them to make a creamy cheesecake, scrumptious pastries, and so much more. You can also use them to make a unique cocktail to serve at your next dinner party. The culinary possibilities are endless when you keep your kitchen stocked with fresh Guavas.', 'Fresh and juicy guavas Delicious on its own or in a variety of recipes Add to yogurt or a smoothie Use to top your salad for a tropical twist Excellent source of vitamin C High in dietary fiber Rich in potassium Also known as Guayaba and Bayabas around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/543f54e0-9053-40c6-b65d-d49315703202.83039a112dfb97284a3ee601fa58a751.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/543f54e0-9053-40c6-b65d-d49315703202.83039a112dfb97284a3ee601fa58a751.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/543f54e0-9053-40c6-b65d-d49315703202.83039a112dfb97284a3ee601fa58a751.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (114992615, 'Rome Apples 3 Lb Bag', 3.94, '022906300022', 'short description is not available', 'Rome Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (115085981, 'Plumogranate Plumcot - 1 lb Bag', 3.98, 'deleted_813187011314', 'Plumogranate® plumcots are a black plumcot with a deep, dark red flesh. They burst with flavors of plum, berry and pomegranate. Plus, they are packed with healthy disease-fighting antioxidants.', 'Plumogranate Plumcot - 1 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cf8031bf-ae52-4066-970b-47801ab7f4d5_1.7d51442f5b5d5b6a299096b77a356edb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cf8031bf-ae52-4066-970b-47801ab7f4d5_1.7d51442f5b5d5b6a299096b77a356edb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cf8031bf-ae52-4066-970b-47801ab7f4d5_1.7d51442f5b5d5b6a299096b77a356edb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (115156596, 'Plumcot, 1 lb Pack', 4.48, 'deleted_813187011307', 'Thousands of tiny speckles grace the rosy colored skin. The color and flavors will remind you of a delicious fruit punch.', 'Summer Punch Plumcot 1# Clamshell', 'Fresh Produce', 'https://i5.walmartimages.com/asr/71c6d5cb-8616-4113-8aca-dd5a6619d255_1.562b25a1ffd7eea2f14b0754f808e28c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71c6d5cb-8616-4113-8aca-dd5a6619d255_1.562b25a1ffd7eea2f14b0754f808e28c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71c6d5cb-8616-4113-8aca-dd5a6619d255_1.562b25a1ffd7eea2f14b0754f808e28c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (115230324, 'Haralson Apple Totes', 0.98, '681131124423', 'short description is not available', 'Haralson Apple Totes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (115329445, 'Fresh Lychee, 1 lb Package', 2.98, '851720003082', 'Our whole lychees are a fresh produce pick that\'s sure to satisfy your sweet tooth. These juicy, tropical fruits come in a convenient bag, making it easy to enjoy a snack on-the-go. Perfect for pairing with desserts or adding to your favorite cocktail, these whole lychees are a must-have for anyone who loves delicious fresh fruit.', 'Bring the tropics into your home with Lychee. Sweat, flowery and fresh flavor and a great source of vitamins, minerals and antioxidants. Crack and peel the skin off to discover the fruit inside, often described as a grape without the skin. Fresh and whole 1 lb lychee', 'Unbranded', 'https://i5.walmartimages.com/asr/c06d0176-c5d4-414b-b001-ef3fbec22850.ff5b7785860aa59713129271e1e06561.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c06d0176-c5d4-414b-b001-ef3fbec22850.ff5b7785860aa59713129271e1e06561.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c06d0176-c5d4-414b-b001-ef3fbec22850.ff5b7785860aa59713129271e1e06561.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (115416805, 'Cameo Apples 5 Lb Bag', 5.29, '847473005886', 'short description is not available', 'Cameo Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (115511928, 'Halos Mandarin Oranges, 2 Count', 0.99, '072240424229', 'Halos Mandarin Oranges, 2 Count', 'Halos 2 Pk', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (115738305, 'Melon Cantalupe', 2.5, '400094288238', 'Melon Cantalupe', 'Melon Cantalupe 15', 'Unbranded', 'https://i5.walmartimages.com/asr/cf901ec3-9e25-4e79-ab8b-296b6e94d3e6.aa2c19f4402d076204c6eead51241c30.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cf901ec3-9e25-4e79-ab8b-296b6e94d3e6.aa2c19f4402d076204c6eead51241c30.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cf901ec3-9e25-4e79-ab8b-296b6e94d3e6.aa2c19f4402d076204c6eead51241c30.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (116097530, 'Bartlett Pears, 4 lb', 6.36, 'deleted_885880007079', 'Bartlett Pears, 4 Lb.', '4lb Bag Of Packham Pears', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a6fbdd1e-9ba0-4018-be9e-e103a7aff0c8_1.7bea0e2f51b084242fcf154eeae372d0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6fbdd1e-9ba0-4018-be9e-e103a7aff0c8_1.7bea0e2f51b084242fcf154eeae372d0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6fbdd1e-9ba0-4018-be9e-e103a7aff0c8_1.7bea0e2f51b084242fcf154eeae372d0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (116142869, 'Tomoor Palmera Ajwa Luxury Dates from Madinah 100% Natural Dates, 3000g (6.6LBs)', 110, '761062893022', 'Tomoor Palmera Ajwa Luxury Dates pits and flesh are good source of naturally occurring antioxidants and other beneficial bioactive. Our dates are naturally sweet, luscious and very soft. Dates from Saudi Arabia Fresh hand-picked, no preservatives, tightly packed without chemicals. Dates a sacred food in Islam is among prophet Mohammed favorites. Dates are a sacred food in Islam, one of the favorites in the month of Ramadan, the ideal food for iftar in Ramadan; Best breakfast in Ramadan everyone loves to eat wonderful dates in Ramadan because of its multiple benefits. Maintain your health, as dates are not only healthy and delicious, but they are also a source of vitamins and minerals. Aiwa are sourced from organic Farmers in Madinah. Try it soft moist and tasty packed in a happy approved factory.', '100% Natural:Tomoor Palmera Luxury Organic Whole Ajwa Dates from Madinah 100% Natural, 3000g (6.6LBs) 100% Fresh: Our dates are naturally sweet, luscious and very soft. Fresh hand-picked dates, no preservatives, tightly packed without chemicals, Best breakfast in Ramadan everyone loves to eat wonderful dates in Ramadan because of its multiple benefits. Stay healthy: Dates are not only healthy and delicious, but they are also a source of vitamins, minerals and natural immunity. easy-to-eat: If you want healthy nutrition for your children with a taste similar to sweets without artificial colors and preservatives that harm their health, here is a delicious and nutritious taste that young children accept for its sweetness, softness and swallowing, just like sweets. No Pesticides, no chemical fertilizers, no added sugar, no sweeteners, Authentic Ajwa taste maintained for hundreds of years', 'Tomoor Palmera', 'https://i5.walmartimages.com/asr/54ca0464-a7a9-43f6-8f27-269ff6272154.5974b3e029304b44a873183f2b661d81.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54ca0464-a7a9-43f6-8f27-269ff6272154.5974b3e029304b44a873183f2b661d81.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54ca0464-a7a9-43f6-8f27-269ff6272154.5974b3e029304b44a873183f2b661d81.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (116148654, 'Manzana Braeburn Apples, 1 lb Bag, Whole, Fresh', 1.77, 'deleted_400094433195', 'Looking for fresh produce that packs a punch? Look no further than our organic Braeburn apples! These whole, juicy apples are bursting with sweet flavor and make a delicious snack any time of day. Made with only the best organic ingredients, you can feel good about indulging in this healthy treat. Perfect for baking or eating raw, these apples are sure to brighten up any dish!', 'Fresh Braeburn Apple, Each: Sweet, crisp & juicy Mild lemon-citrus undertones Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/8bb3f41b-7560-485d-a19f-f6c6910dd450.f86ec5dde8443841c6b18be976bfbcc5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8bb3f41b-7560-485d-a19f-f6c6910dd450.f86ec5dde8443841c6b18be976bfbcc5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8bb3f41b-7560-485d-a19f-f6c6910dd450.f86ec5dde8443841c6b18be976bfbcc5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (116224014, 'Cameo Apples 3 Lb Bag', 3.58, '033383010120', 'short description is not available', 'Cameo Apples 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b0164a7d-e94a-442e-bbf0-237bb8108d79.8f3bfc0d82fb0737879f106a2dfdb329.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b0164a7d-e94a-442e-bbf0-237bb8108d79.8f3bfc0d82fb0737879f106a2dfdb329.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b0164a7d-e94a-442e-bbf0-237bb8108d79.8f3bfc0d82fb0737879f106a2dfdb329.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (116566237, 'Seedless Green Grapes, 2 lb bag', 3.96, 'deleted_091636144985', 'short description is not available', 'Green Grapes Seedless Bag, 2 lbs.', '', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (116598552, 'Fresh Ugli-uniq Fruit, Each', 1.68, '204459000004', 'Experience the exotic taste of the Caribbean with our fresh Ugli-Uniq fruit, a unique and delectable citrus variety from Jamaica. This fruit boasts an easy-to-peel skin, making it perfect for on-the-go snacking. With its delightful blend of sweet and tangy flavors, it adds a tropical twist to salads and recipes. Ideal for health enthusiasts, it is rich in Vitamin C and supports a balanced diet. Discover the distinct bumpy exterior that sets it apart from other fruits. Try it today for a refreshing tropical indulgence that brings the taste of the tropics to your table, simply irresistible!', 'Ugli-Uniq Fruit Unique Appearance: Ugli-Uniq Fruit has a distinctive, rough, and bumpy exterior that\'s unlike any other fruit. High in Vitamin C: Ugli-Uniq Fruit is an excellent source of vitamin C, making it a great addition to a healthy diet. Sweet and Tangy Flavor: Enjoy the perfect balance of sweet and tangy flavors in every bite. Easy-to-Peel: Convenient for snacking and culinary use. Food Condition: Fresh and ready to eat. Imported from Jamaica: Authentic Caribbean taste.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/baefe933-2874-4c8a-bf2a-5b544ac4a6b2_1.7e76110c509aa345797ba03c7a4be1b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/baefe933-2874-4c8a-bf2a-5b544ac4a6b2_1.7e76110c509aa345797ba03c7a4be1b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/baefe933-2874-4c8a-bf2a-5b544ac4a6b2_1.7e76110c509aa345797ba03c7a4be1b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (116940085, 'Yellow Flesh Peaches, per Pound', 1.58, '400094167366', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (117174014, 'Fresh Peras (Pears) Anjou, 3 lb Bag, Sweet', 8.97, '400094308042', 'Introducing the Anjou Pears – a bag of fresh, full and organic produce! Bursting with flavor, these sweet delights are carefully made with organic ingredients to ensure optimal quality. Whether you’re looking for a healthy snack or want to add some fruity goodness to your favorite meals, these Anjou Pears are perfect for you. Satisfy your cravings and enjoy the natural sweetness that nature has to offer with every bite!', 'Organic Anjou pears are a classic variety grown using organic farming practices, ensuring they are free from harmful chemicals and pesticides. They have a sweet, juicy flavor and smooth, firm texture that makes them a versatile ingredient in a variety of dishes - Certified organic, they are non-GMO and free from synthetic fertilizers and pesticides. High in dietary fiber and vitamin C, making them a healthy snack option. The 3lb bag size is convenient for families and individuals looking for a larger supply of fresh pears - Organic Anjou pears are harvested at their peak ripeness and carefully packed to ensure maximum freshness and flavor. They have a long shelf life and can be stored in the refrigerator for up to 2-3 weeks. Organic Anjou pears are available year-round, making them a reliable choice for any occasion. Find these in your local stores!', 'Fresh Peras', 'https://i5.walmartimages.com/asr/3d896424-8396-449b-a52e-d7cc4ab59073.d62f3e8ee1a90b3756728a940d4e21d7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d896424-8396-449b-a52e-d7cc4ab59073.d62f3e8ee1a90b3756728a940d4e21d7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d896424-8396-449b-a52e-d7cc4ab59073.d62f3e8ee1a90b3756728a940d4e21d7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (117299794, 'Little Bagged Pumpkin, 1 Each', 2.98, '743425089402', 'Little Bagged Pumpkin, 1 Each', 'Pumpkin Little Bagged', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (117452205, 'Bicolor Grapes Clamshell, 2 Lb.', 6.47, 'deleted_073748141410', 'Treat yourself to the delicious, juicy flavor of Fresh Bi-Color Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Bi-Color Grapes.', 'Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/9641d3e8-ea3b-48f9-bd76-18e13427e066.2ccf355f62b2cde352311041f272321e.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9641d3e8-ea3b-48f9-bd76-18e13427e066.2ccf355f62b2cde352311041f272321e.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9641d3e8-ea3b-48f9-bd76-18e13427e066.2ccf355f62b2cde352311041f272321e.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (117735559, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094360149', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (117765046, 'Ambrosia Apples, 3 lb bag', 5.47, 'deleted_847473000355', 'short description is not available', 'Ambrosia Apples, 3 lb bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/9e3da353-e08a-464d-946e-16309b3b3709_1.8c2783bdedf49352910e3673170af77f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9e3da353-e08a-464d-946e-16309b3b3709_1.8c2783bdedf49352910e3673170af77f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9e3da353-e08a-464d-946e-16309b3b3709_1.8c2783bdedf49352910e3673170af77f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (118208792, 'Apple Pear', 3.98, '400094288658', 'short description is not available', 'Apple Pear', 'Unbranded', 'https://i5.walmartimages.com/asr/5327ee21-8005-4411-8362-4b5b623ab313.60f486f2a2486ada80efa46bd09e1ecf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5327ee21-8005-4411-8362-4b5b623ab313.60f486f2a2486ada80efa46bd09e1ecf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5327ee21-8005-4411-8362-4b5b623ab313.60f486f2a2486ada80efa46bd09e1ecf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (119375246, 'Pineapple Spears, 1 lb', 3.88, '077745237572', 'Pineapple Spears 16 oz (454 g) www.freshdelmonte.com. Product of Costa Rica. 16 oz (454 g) PO Box 149222 Coral Gables, FL 33114-9222', 'Pineapple Spears, Gold www.freshdelmonte.com. Product of Costa Rica.', 'WALMART PRODUCE', 'https://i5.walmartimages.com/asr/58157f3f-88fd-4500-baaf-364e865a7a74.7171307f32477593738f800d68141222.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58157f3f-88fd-4500-baaf-364e865a7a74.7171307f32477593738f800d68141222.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58157f3f-88fd-4500-baaf-364e865a7a74.7171307f32477593738f800d68141222.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (119662145, 'Dark Sweet Cherries, Half Pint', 2.98, '883391003948', 'Dark Sweet Cherries, Half Pint', 'Dark Sweet Cherries 1/2 Dry Pint', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (119752152, 'Fresh USDA Organic Blackberries, 6 oz. Container', 4.16, '852990008098', 'The sweet, juicy flavor of Fresh Blackberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes or yogurt, bake them into mouthwatering blackberry cobbler, mix them with other fruit for a light and flavorful salad, or add them to a creamy smoothie. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin K and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them with cool water and enjoy the fresh taste. Refrigerate the berries to keep them fresh and ready for use. Pick up a Fresh Blackberry container today and savor the delectable flavor.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Blackberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Blackberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of blackberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these tasty gems into your baking endeavors, whether it\'s cobblers, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are blackberries delicious, but they also offer an array of health benefits. Loaded with vitamins and dietary fiber, blackberries are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Blackberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Blackberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cc59ff3c-2e82-477b-b73e-0381bac00fac_1.8cea8b96440dc796935f0ad4bc140919.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc59ff3c-2e82-477b-b73e-0381bac00fac_1.8cea8b96440dc796935f0ad4bc140919.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc59ff3c-2e82-477b-b73e-0381bac00fac_1.8cea8b96440dc796935f0ad4bc140919.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (119856351, 'Fresh Cherimoya, Each', 5.27, '000000042574', 'Indulge in the sweet and tangy taste of cherimoya, a tropical fruit from south America. our fresh cherimoya is carefully selected to ensure optimal flavor and texture. enjoy it as a healthy snack or add it to your favorite recipes for a burst of exotic flavor.', 'Item Type: Assembly Heater Defrost 115V Unique Flavor: Cherimoya has a sweet and slightly tangy flavor, often described as a combination of pineapple, strawberry, and banana. Creamy Texture: Enjoy the creamy and smooth texture of Cherimoya, similar to a pear. Rich in Antioxidants: Cherimoya is rich in antioxidants, which can help protect against free radicals and support overall health. Exotic and Rare: Cherimoya is a rare and exotic fruit, making it a unique addition to your fruit bowl.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/485a0081-e1aa-41f3-9992-19e2c9bc6f9b.2cc3a8305928ba55b4d40dfea95b7895.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/485a0081-e1aa-41f3-9992-19e2c9bc6f9b.2cc3a8305928ba55b4d40dfea95b7895.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/485a0081-e1aa-41f3-9992-19e2c9bc6f9b.2cc3a8305928ba55b4d40dfea95b7895.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (120036098, 'Fresh Caramel Apples with Nuts, 3 Pack', 4.64, '034986000020', 'Our Classic 3 pack Caramel with Nuts is the perfect treat to celebrate the fall season, adding a touch of autumn to any gathering or occasion. Handcrafted with fresh apples dipped in creamy caramel and rolled in chopped nuts, the perfect blend of sweet, nutty, and crunchy flavors in every bite is sure to satisfy any sweet tooth. This timeless favorite is perfect for any event or as a special treat for yourself or your loved ones. Don\'t miss out on this delicious and satisfying treat that never fails to delight.', 'Fresh Apples dipped in caramel and rolled in crushed peanuts. Caramel Apples with Nuts, 3 Pack Rolled in Chopped Nuts. This is a great PRODUCE UNBRANDED product that pairs well with any meal. Grab yours today, in a local store.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/91e5db36-5d2a-4404-8523-2ffee3d63b89_4.263dcf9cc2552e5d3b078f631b82d5a9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/91e5db36-5d2a-4404-8523-2ffee3d63b89_4.263dcf9cc2552e5d3b078f631b82d5a9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/91e5db36-5d2a-4404-8523-2ffee3d63b89_4.263dcf9cc2552e5d3b078f631b82d5a9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (120070481, 'Fresh Forelle Pears, 2 Lb.', 3.57, '847473004438', 'Forelle Pears, 2 Lb.', 'Savor the sweet taste of Fresh Forelle Pears are aromatic and have a definitive pear flavor that make them great for breakfast, lunch, dinner, and dessert. Chop the pears up and add them to muffins with walnuts and vanilla for a sweet treat that’s great for breakfast to get your morning started on a high note. Slice them up and top a pizza with prosciutto, goat cheese, and arugula for a mouthwatering meal perfect for a family dinner or dinner party. Cut the pear in half and cook it in a skillet with butter, brown sugar, and vanilla and serve with a scoop of vanilla ice cream for a decadent dessert. Enjoy tasty meals any time of day with Fresh Pears.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/157babee-5a2e-4c67-9794-bb1054fa771a.8433bbc08a89b26acbb4b4ad2ff069b0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/157babee-5a2e-4c67-9794-bb1054fa771a.8433bbc08a89b26acbb4b4ad2ff069b0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/157babee-5a2e-4c67-9794-bb1054fa771a.8433bbc08a89b26acbb4b4ad2ff069b0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (120211483, 'Mangoes, per Pound', 1.67, '400094673560', 'Mangoes, per Pound', 'Naturally sweet and juicy tropical fruit Rich in vitamins A and C for immune support Deliciously smooth texture and vibrant flavor Perfect for snacking, smoothies, salads, and desserts Handpicked at peak ripeness for optimal taste Can be stored at room temperature or refrigerated Low in fat and a source of dietary fiber', 'Unbranded', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (120312952, 'Pear, per Pound', 1.47, '681131124409', 'Pear, per Pound', 'Pear Totes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (120351830, 'Lil Snapper Cara Cara Oranges, 3 Lb.', 4.48, '605049458296', 'While Cara Cara Oranges look like a regular Navel orange on the outside, It is actually pink on the inside. Nicknamed \'The Power Orange®\' because it packs a nutritional punch with more Vitamin A and C than normal oranges. The Cara Cara tastes extremely sweet and has a tangy, cranberry-like zing.', 'Lil Snapper Cara Cara Oranges', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (121049574, 'Fresh Red Grapes, 2 lb Package', 6.47, '850859002058', 'Treat yourself to the delicious, juicy flavor of Fresh Red Seedless Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the fresh taste of Fresh Red Seedless Grapes.', 'Fresh Red Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3141816b-7f00-44b8-8b00-7b8e682ccd18.6cbe9f0913007e9fead77236b2ad4c4f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3141816b-7f00-44b8-8b00-7b8e682ccd18.6cbe9f0913007e9fead77236b2ad4c4f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3141816b-7f00-44b8-8b00-7b8e682ccd18.6cbe9f0913007e9fead77236b2ad4c4f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (121524969, 'Cantaloupe Chunk 16oz', 3.88, '813055012863', 'short description is not available', 'Cantaloupe Chunk 16oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (121612745, 'Stemilt Growers Golden Delicious Washington Apples, 1 ea', 1.67, 'deleted_000000040211', 'Washington Apples 1 each 1 each', 'Golden Delicious Apples Bulk Small', 'Golden Delicious', 'https://i5.walmartimages.com/asr/057bda41-124a-4fd6-bcc5-9377df88ab5e_1.b0ed184ba644ac29be649cd14f553db6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/057bda41-124a-4fd6-bcc5-9377df88ab5e_1.b0ed184ba644ac29be649cd14f553db6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/057bda41-124a-4fd6-bcc5-9377df88ab5e_1.b0ed184ba644ac29be649cd14f553db6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (121938338, 'Fresh Idared Apples, Each', 1.47, '000000041423', 'Introducing our premium Idared Fresh Apples, grown in the fresh and fertile orchards of North America. These juicy, moderately sweet apples feature a bright red skin and a creamy white flesh. Their crisp texture makes them perfect for snacking, baking, or adding to salads. Packed with nutritional benefits, these apples are rich in fiber, vitamins, and antioxidants. Enjoy them fresh or cooked whole, and savor the delightful taste of nature\'s bounty. Order now and taste the Fresh Produce difference!', 'Officially Licensed Featuring Dungeon & Dragons 6 small bases, 6 small adapters, 2 large bases, 6 large pegs, and 2 large adapters. Make a creamy smoothie or a nutritious juice blend Adds flavor to a variety of recipes', 'BelleHarvest', 'https://i5.walmartimages.com/asr/aa15aaac-2794-471c-a5c9-c3dff9128d50.3695d6f88aa63324b8d469f642c560e9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa15aaac-2794-471c-a5c9-c3dff9128d50.3695d6f88aa63324b8d469f642c560e9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa15aaac-2794-471c-a5c9-c3dff9128d50.3695d6f88aa63324b8d469f642c560e9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (122446525, 'Gesex Smart Fruit Cirueas/plums', 3.97, '814746010854', 'Gesex Smart Fruit Cirueas/plums', 'Gesex Smart Fruit Cirueas/plums', 'Unbranded', 'https://i5.walmartimages.com/asr/0a5dffd1-b77e-49e3-8ee6-ebc37c949452.f3202fa20364886dfa607ce9223cfb47.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a5dffd1-b77e-49e3-8ee6-ebc37c949452.f3202fa20364886dfa607ce9223cfb47.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a5dffd1-b77e-49e3-8ee6-ebc37c949452.f3202fa20364886dfa607ce9223cfb47.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (122537353, 'Small Cantaloupe Tub', 1.97, '224132000008', 'short description is not available', 'Small Cantaloupe Tub', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (122552887, 'Fresh Mandarins, 2 lb Bag', 4.97, '072240434976', 'Fresh Mandarin Oranges, 2 lb', 'Fresh Mandarin 2 lb Easy Peel', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6660a2b4-e56e-4306-bda1-5a64ef065196.3a025cf66d706c26f352a32e04ea266d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6660a2b4-e56e-4306-bda1-5a64ef065196.3a025cf66d706c26f352a32e04ea266d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6660a2b4-e56e-4306-bda1-5a64ef065196.3a025cf66d706c26f352a32e04ea266d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (122641195, 'Ambrosia Apples 5 Lb Bag', 5.29, '847473005855', 'short description is not available', 'Ambrosia Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (122699969, 'Fresh Apple Granny Smith, 1 Lb Package', 1.97, '400094435090', 'Our Granny Smith fresh apples are a delightfully tart and crunchy treat. With their bright green skin and firm flesh, they\'re perfect for snacking or adding a refreshing twist to your favorite recipes. These apples are packed with fiber, vitamins, and antioxidants, making them a healthy choice for anytime indulgence. Enjoy the deliciously tangy taste and characteristic juicy crunch of our fresh Granny Smith apples today.', 'Granny apples are a classic and beloved apple variety that has been a staple in kitchens for generations. These apples are known for their tart flavor and crisp texture, making them perfect for baking in pies, crisps, and other desserts. They are also a popular choice for making homemade applesauce and apple cider. Granny apples are an excellent source of dietary fiber and vitamin C, making them a healthy snack option that can be enjoyed anytime. Our Granny apples are carefully selected and picked at the peak of their freshness to ensure maximum flavor and quality. With their distinct flavor and versatility, Granny apples are a must-have for any apple lover\'s pantry. Whether you\'re a seasoned baker or simply enjoy the classic taste of a tart apple, Granny apples are sure to become a favorite in your household. Give them a try and discover why they have been a beloved apple variety for generations.', 'Unbranded', 'https://i5.walmartimages.com/asr/b5e97858-b90e-43cb-9c32-25734ddf948d.acc09060e7faa2752339ab01bcdfbb5f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b5e97858-b90e-43cb-9c32-25734ddf948d.acc09060e7faa2752339ab01bcdfbb5f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b5e97858-b90e-43cb-9c32-25734ddf948d.acc09060e7faa2752339ab01bcdfbb5f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (123453879, 'Fresh Red Apple, 3 lb Bag', 4.47, '033383000251', 'Our Gala Apples are grown with care, hand-picked at peak ripeness, and delivered straight to your doorstep. Each bite bursts with the sweet, juicy flavor characteristic of the Gala variety. Perfect for snacking on-the-go, baking into a pie, or adding to your favorite salad recipe. Stock up on these delicious, healthy apples today! This is some delicious organic fresh produce, available for you!', 'Manzana Empacada Roja 3# Great for on the go this Whole Fresh Produce apple is amazing This a great natural ingredient to cook and bake with Nice and juice flavor with yummy texture', 'Unbranded', 'https://i5.walmartimages.com/asr/20408dce-424e-401f-a14f-45dfef314fae.5492c0eec7d4c544d59dbd2c903f6f8a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20408dce-424e-401f-a14f-45dfef314fae.5492c0eec7d4c544d59dbd2c903f6f8a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20408dce-424e-401f-a14f-45dfef314fae.5492c0eec7d4c544d59dbd2c903f6f8a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (124020415, 'Braeburn Apples 5 Lb Bag', 5.29, '405559309930', 'short description is not available', 'Braeburn Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (124372391, 'California Grown Peaches, per Pound', 1.58, '400094420539', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (124508940, 'Fresh Limes, 6 Count Bag', 2.48, '813055011385', 'Add zest and flavor to your meals and beverages with these Limes. Freshly squeezed limes provide a healthy dose of vitamin C to your diet and are a key ingredient in many recipes, from homemade salsa to chicken dishes. The citrusy tropical flavor of these limes are sure to add a zing to all your cooked meals. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. These limes are sold in a six count bag, so you\'ll have just enough for all your culinary creations. Enjoy the refreshing, tart flavor of Limes.', 'Fresh and juicy limes Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies, and tarts Refreshing, tart flavor Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/aa7311c2-100b-415f-bfcc-06ec70a10913_1.251cd3ec98b2618be14072fe1bbafe50.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa7311c2-100b-415f-bfcc-06ec70a10913_1.251cd3ec98b2618be14072fe1bbafe50.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa7311c2-100b-415f-bfcc-06ec70a10913_1.251cd3ec98b2618be14072fe1bbafe50.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (124939268, 'Cantaloupe', 2.48, 'deleted_858739002006', 'Stemming from the cantaloupe center of the world, customers are assured that they are buying quality cantaloupes, honey dews, and mini watermelons to gratify their taste buds.', 'Cantaloupe With the help of many well crafted ideas, use of underground drip tape and a Full Safety Program for the cooling facility, Stamoules Produce Company has been a successfully family operated business in Central California for more than 80 years.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b9a935f3-3129-433a-b4ae-aa3f984205de_1.368084f65845cf092465c6fb99ad8dc5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b9a935f3-3129-433a-b4ae-aa3f984205de_1.368084f65845cf092465c6fb99ad8dc5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b9a935f3-3129-433a-b4ae-aa3f984205de_1.368084f65845cf092465c6fb99ad8dc5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (125160939, 'Tangelo Mineola', 1.86, '405536998614', 'Tangelo Mineola', 'Tangelo Mineola #40', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (125512428, 'Melocotones, 1 lb Bag, Whole, Fresh', 2.18, '400094288306', 'Indulge in the juicy and succulent taste of Melocotones, a delectable fruit that\'s perfect for snacking or adding to your favorite recipes. Our Melocotones are carefully hand-picked to ensure the highest quality and freshness, making them a favorite among fruit lovers. Whether you\'re baking a peach cobbler or simply enjoying a healthy snack, Melocotones are the perfect choice for anyone who loves sweet and natural fruit. Order now and experience the irresistible taste of Melocotones for yourself!', 'These Fresh Produce Melocotones are great for any occasion! Grab some stone fruit, fresh produce, or organic ingredients at your local store today! Great in dessert or grilled for a fresh summer treat! A healthy snack or side to lunch.', 'Melocotones', 'https://i5.walmartimages.com/asr/9428617e-86b9-4ccc-a91b-19c286f12ae9.994eb3255ed942b25f49104d16d067b8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9428617e-86b9-4ccc-a91b-19c286f12ae9.994eb3255ed942b25f49104d16d067b8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9428617e-86b9-4ccc-a91b-19c286f12ae9.994eb3255ed942b25f49104d16d067b8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (125528621, 'Fresh Banana Bunch, 3lb Package', 2.98, 'deleted_826125232276', 'Enjoy the sweet, tropical taste of Fresh Banana. They are a good source of several vitamins and minerals including potassium, vitamin B6 and vitamin C and are low in sodium. Enjoy them at breakfast, lunch, dessert, or anytime you want a healthy snack. Use them to make a loaf of moist banana bread and enjoy with a hot cup of coffee in the mornings or layer them with pudding and vanilla wafer cookies for a light, sweet banana pudding that\'s perfect for dessert', 'Sweet, tropical flavor Enjoy at breakfast, lunch, dessert, or when you want a snack Good source of potassium, vitamin B6 and vitamin C and low in sodium Make banana bread or banana pudding and enjoy with a hot cup of coffee Peel open and enjoy', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/816648b2-6f37-4601-8181-40a1004f452a.d59cb573f23290b8b7aac66b6001272c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/816648b2-6f37-4601-8181-40a1004f452a.d59cb573f23290b8b7aac66b6001272c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/816648b2-6f37-4601-8181-40a1004f452a.d59cb573f23290b8b7aac66b6001272c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (125768151, 'Fresh Whole Tamarind, 1 Count', 2.48, '204448000008', 'Our whole Tamarindo is the perfect addition to your fresh produce collection. These sweet pods come in a bag ready to be enjoyed as a snack or used in your favorite recipes. Add them to smoothies, teas, or use them in sauces for a tangy kick. This fresh whole Tamarindo is sure to satisfy your taste buds and add some variety to your kitchen.', 'Our whole Tamarindo comes in a bag, and is the perfect addition to your fresh produce collection. These sweet pods come in a bag ready to be enjoyed as a snack or used in your favorite recipes. Add them to smoothies, teas, or use them in sauces for a tangy kick. This fresh whole Tamarindo is sure to satisfy your taste buds and add some variety to your kitchen.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/12c2d6b0-3c03-4d11-9a13-dfc4d95b9040.c8df60247015270131c589086d7d2c2d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/12c2d6b0-3c03-4d11-9a13-dfc4d95b9040.c8df60247015270131c589086d7d2c2d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/12c2d6b0-3c03-4d11-9a13-dfc4d95b9040.c8df60247015270131c589086d7d2c2d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (125878944, 'Fresh Manzana Pink Lady, Apple 3 lb Bag, Whole', 3.98, '851210002885', 'Sweet, crisp and juicy, Pink Lady fresh apples are a delicious and healthy snack that\'s perfect for any time of day. These apples have a distinctive blush pink hue, making them a unique and visually appealing addition to any fruit bowl or recipe. With their satisfying crunch and tartness, Pink Lady apples are sure to become your go-to fruit for all your snacking and cooking needs.', 'Fresh Pink Lady Apples, 3 lb Bag: Includes 3 pounds of tart, crisp apples Tart taste with a sweet finish Pair them with sharp cheeses and crackers for a stunning appetizer board Can be enjoyed fresh or cooked into both savory and sweet dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ededa8d1-5f4f-475a-8495-d7bf604b23f5_1.46d0eea0118c03b2fd7ea2ffdaf072b7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ededa8d1-5f4f-475a-8495-d7bf604b23f5_1.46d0eea0118c03b2fd7ea2ffdaf072b7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ededa8d1-5f4f-475a-8495-d7bf604b23f5_1.46d0eea0118c03b2fd7ea2ffdaf072b7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (126250040, 'Jonathon Apples, 5 lbs, Tote', 0.98, '681131124232', 'APPLES JONATHON 5# TOTES', 'APPLES JONATHON 5# TOTE', 'Fresh Produce', 'https://i5.walmartimages.com/asr/54e39c36-fab6-4872-b08d-0a208b2d0393_1.f91f046e52c1ea156d85b79fbeace8a2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54e39c36-fab6-4872-b08d-0a208b2d0393_1.f91f046e52c1ea156d85b79fbeace8a2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54e39c36-fab6-4872-b08d-0a208b2d0393_1.f91f046e52c1ea156d85b79fbeace8a2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (126684515, 'Fresh Greenolla Seedless, 2 Lb', 4.94, 'deleted_881006000764', 'Greenolla Seedless, 2 Lb.', 'Fresh Greenolla Seedless, 2 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (126688230, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094949382', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (126839909, 'Premium Injecto Snap On Hard Shell Case for Samsung DoubleTime - Blue/ White', 5.83, '033383110561', 'Looking for a case that protects your phone without adding bulk then this is the perfect solution for all of your worries. It fits like second skin to your phone and protect it from scratches, dust, drops and keep your phone new. The case has all required cut outs to charge, listen to music without removing.', 'The new Blue/ White Amzer Injecto Snap On Case is designed specifically for your Samsung DoubleTime, hugging every curve. Made of lightweight yet durable plastic material, it will safeguard your Samsung DoubleTime without adding extra bulk. So say good-bye to accidental bumps and scratches on your Samsung DoubleTime. Exact cutouts allow speedy access to critical controls. Protecting your new gadget has never been this easy. Get your Injecto Snap On Case for your Samsung DoubleTime today! Product Features: Made of lightweight yet durable Hard Plastic material. Perfect to showcase your device. Precise Cutouts for Charging, Audio. Charge, Listen to music without removing case Provide best protection from bumps and dust Easy Installation and Removal', 'Amzer', 'https://i5.walmartimages.com/asr/730a8993-0c66-40bf-83be-53ebbf3f4229_1.7a7fc5953f79acabe6ca2a3cc2e39a97.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/730a8993-0c66-40bf-83be-53ebbf3f4229_1.7a7fc5953f79acabe6ca2a3cc2e39a97.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/730a8993-0c66-40bf-83be-53ebbf3f4229_1.7a7fc5953f79acabe6ca2a3cc2e39a97.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (127000582, 'Fresh Red Pears, 1 lb Bag', 2.97, '405530349702', 'Indulge in the naturally sweet and juicy flavor of our whole Red Pear fruit! Our fresh produce is carefully picked and delivered straight to your doorstep. Our Red Pears are picked at peak ripeness for delicious, refreshing taste. Enjoy the pure, unadulterated goodness in every bite with no artificial colors or preservatives added. Perfect for snacking or adding to salads. Order yours today and taste the difference!', 'Red pears are a unique variety known for their striking red skin and sweet, juicy flavor. They have a tender, buttery texture that makes them ideal for eating fresh or using in cooking and baking. High in dietary fiber and vitamin C, making them a healthy snack option. The 3lb bag size is convenient for families and individuals looking for a larger supply of fresh pears - Red pears are harvested at their peak ripeness and carefully packed to ensure maximum freshness and flavor. They have a long shelf life and can be stored in the refrigerator for up to 2-3 weeks. Red pears are available seasonally, making them a special treat to enjoy during their peak harvest time.', 'Unbranded', 'https://i5.walmartimages.com/asr/28d00e39-19b9-4fcc-bc6c-9f99a6e17cf6.64c61c830ea98646824d6cb3e2d8e72a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28d00e39-19b9-4fcc-bc6c-9f99a6e17cf6.64c61c830ea98646824d6cb3e2d8e72a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28d00e39-19b9-4fcc-bc6c-9f99a6e17cf6.64c61c830ea98646824d6cb3e2d8e72a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (127073635, 'Fresh Strawberries, 4 lb Container', 7.98, '071430011065', 'The sweet, juicy flavor of Fresh Strawberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like, vitamin C, dietary fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Strawberries today and savor the delectable flavor.', 'Prior to serving gently wash them and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b99dc93e-639c-48ef-8848-989e0463bbe4_1.a7c565756d8c3b1110392ae7bffa42dc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b99dc93e-639c-48ef-8848-989e0463bbe4_1.a7c565756d8c3b1110392ae7bffa42dc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b99dc93e-639c-48ef-8848-989e0463bbe4_1.a7c565756d8c3b1110392ae7bffa42dc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (127075656, 'Ciruelas Rojas, 1 Lb.', 1.67, '400094255384', 'Ciruelas Rojas, 1 Lb.', 'Ciruelas Rojas', 'Unbranded', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (127728569, 'Melon Trio 16 Oz', 3.78, '826766255146', 'short description is not available', 'Melon Trio 16 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (127779976, 'Taylor Farms Fresh Red Grapes And Red Apple Wedges', 1.83, '030223081111', 'short description is not available', 'Taylor Farms Fresh Red Grapes And Red Apple Wedges', 'Taylor Farms', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (127854244, 'Fireside Apples 5 Lb Bag', 4.92, '033383044453', 'short description is not available', 'Fireside Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (127953976, 'Van Zyverden Grape Seedless Flame (1 Dormant Bare Plant Root) Full Sun, Red, Perennial', 6.97, '030641780535', 'Grow your own fresh fruit! Grape Flame Seedless Dormant Plant Root is a famous variety that will grow in a wide range of soils and prefers a full sun location. Grapes are excellent when used as an ornamental and can be trained onto arbors or on pergolas to provide a unique addition to the landscape. Grapes contain antioxidants that may help prevent heart disease and some cancers. Grapes are also an excellent source of vitamins A, C and K. Grape Flame Seedless produces medium-sized clusters of large, sweet, juicy grapes. Grape Flame Seedless is heat tolerant and is ideally suited for southern gardens. Harvest late summer. Perennial. Self pollinating. Soil: Grapes need deep, well draining, loose soil with pH levels of 5.5 to 6.5. Mulch: Add 2-3\" of mulch to maintain moisture. Pruning: Pruning is important.', 'Grape Seedless Flame Perennial Plant in full sun Grow your own fruit Garden to table freshness! Harvest Late Summer Excellent source of vitamins A, C, and K GMO Free Can be eaten fresh or used to make wine, jam, juice, or raisins', 'Van Zyverden', 'https://i5.walmartimages.com/asr/206a1781-7e77-46d8-a58a-dd8b9b8614b0.728780d6d4bc0e078181b1809400f47b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/206a1781-7e77-46d8-a58a-dd8b9b8614b0.728780d6d4bc0e078181b1809400f47b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/206a1781-7e77-46d8-a58a-dd8b9b8614b0.728780d6d4bc0e078181b1809400f47b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (128099596, 'Honeycrisp Apples, 5 lb bag', 7.92, '814365012604', 'Honeycrisp Apples, 5 lb bag', 'Honeycrisp Apples, 5 lb bag', 'Unbranded', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (128575111, 'Gold Delicious Apple Totes', 1.63, '681131124256', 'short description is not available', 'Gold Delicious Apple Totes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (128683323, 'Walmart Produce Wrapped Watermelon Quarters', 3.28, '717524409188', 'short description is not available', 'Walmart Produce Wrapped Watermelon Quarters', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (129007530, 'Fresh Casaba Melon, Each', 2.98, '000000043205', 'Introducing the Fresh Casaba Melon, Each. This unique and delicious melon variety is perfect for a wide range of applications, from healthy snacking and fruit salads to refreshing smoothies and desserts. With its wrinkled, golden-yellow skin and sweet, tender pale-green to white flesh, the Casaba Melon offers a delightful taste and texture experience. Great for snacking or as an addition to any dish!', 'Introducing the Casaba Melon, available as a single unit for all your fruit needs, No Container. This unique and delicious melon variety is perfect for a wide range of applications, from healthy snacking and fruit salads to refreshing smoothies and desserts. With its wrinkled, golden-yellow skin and sweet, tender pale-green to white flesh, the Casaba Melon offers a delightful taste and texture experience. Fresh Casaba Melon Find this in your local Walmart', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5f04f875-ee62-4054-80a6-705f80be0b19.1584a4d1dee388a127909c20ed0635db.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5f04f875-ee62-4054-80a6-705f80be0b19.1584a4d1dee388a127909c20ed0635db.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5f04f875-ee62-4054-80a6-705f80be0b19.1584a4d1dee388a127909c20ed0635db.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (129094966, 'Fresh Green Seedless Grapes', 7.5, '033383250601', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (129676683, 'Fieldpack Unbranded Fresh Strawberries 1#', 7.36, 'deleted_780353744034', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (129734514, 'Fresh Red Delicious Apples, Tote', 7.5, '681131124225', 'Our Red Delicious Apples are the perfect addition to your shopping cart. This whole, fresh produce is sweet, juicy, and perfect for snacking on the go. Enjoy the satisfaction of eating a healthy and delicious fruit straight from the bag or add it to your favorite recipes. Our Red Delicious Apples are a staple for any kitchen and a must-have for any healthy lifestyle.', 'Sweet, crisp, and juicy Creamy white flesh with low acidity Excellent snacking apple Higher antioxidants due to the rich, deep red skin Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp, and apple pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/82370c02-fbc1-4664-a833-038039817701_1.f92306eb7e6b41d43ba1f1bb3b507023.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/82370c02-fbc1-4664-a833-038039817701_1.f92306eb7e6b41d43ba1f1bb3b507023.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/82370c02-fbc1-4664-a833-038039817701_1.f92306eb7e6b41d43ba1f1bb3b507023.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (129909888, 'Watermelon Seedless', 4.98, '400094256589', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (130375767, 'Freshness Guaranteed Strawberries & Blueberries 14 Oz', 6.12, '681131036504', 'short description is not available', 'Freshness Guaranteed Strawberries & Blueberries 14 Oz', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (130431702, 'Kiku Apples 5 Lb Bag', 5.29, '847473005848', 'short description is not available', 'Kiku Apples 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (130464058, 'Golden Apple, 1 Lb.', 1.97, 'deleted_400094433409', 'Golden Apple, 1 Lb.', 'Manzana Golden', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (130970827, 'Fresh Red Plumcot, Each, Whole', 0.76, '895009002519', 'Fresh Plumcots are the perfect blend of flavor and texture of a plum and an apricot. There are more than 20 different plumcot varieties, each one with its own distinct appearance, color, and size. You can use them as a substitute in recipes with plums for a sweet twist. Bake a mouthwatering plumcot cake, plumcot and blueberry crisp, or roast them with honey and goat cheese for a decadent dish. Enjoy it as is as a healthy snack, add it to your lunch for a healthy side, or pack multiple and take on a picnic with friends and family. Enjoy the delicious flavor of Fresh Plumcots.', 'Fresh Plumcots, Each Enjoy it as is as a healthy snack, add it to your lunch for a healthy side, or pack multiple and take on a picnic More than 20 different plumcot varieties Use as a substitute in recipes using plums Bake a mouthwatering plumcot cake, plumcot and blueberry crisp, or roast them with honey and goat cheese Perfect blend of a plum and an apricot Find this in your local Walmart!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2ab51fef-1649-445e-9feb-a3fde91f698e.c20a5939ea1b87d9589b70a7d31c4002.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ab51fef-1649-445e-9feb-a3fde91f698e.c20a5939ea1b87d9589b70a7d31c4002.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ab51fef-1649-445e-9feb-a3fde91f698e.c20a5939ea1b87d9589b70a7d31c4002.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (131164824, 'Fresh Valencia Orange, Each', 1.37, '400094287675', 'Enjoy the juicy goodness of Fresh Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Fresh Oranges add flavor to any meal or beverage.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast', 'China Valencia', 'https://i5.walmartimages.com/asr/cd81a81a-1a3f-4aca-8a8b-2270ca30443b.0fcb013b5071e2419f934364c85b0e5a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cd81a81a-1a3f-4aca-8a8b-2270ca30443b.0fcb013b5071e2419f934364c85b0e5a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cd81a81a-1a3f-4aca-8a8b-2270ca30443b.0fcb013b5071e2419f934364c85b0e5a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (131254124, 'Bulk Persian Limes', 0.25, 'deleted_744430275613', 'short description is not available', 'Bulk Persian Limes', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (131454366, 'Fresh Rambutan, 12 oz', 4.97, '037842037680', 'Fresh Rambutan brings a burst of tropical sweetness to your table with its juicy, mildly tart flavor and exotic appeal. This unique fruit has a soft, translucent flesh that\'s easy to peel and enjoy, revealing a refreshing taste similar to lychee or grapes. The seed in the center can even be cooked and eaten, adding versatility to your kitchen creations. Perfect for snacking, fruit salads, or party platters, rambutan makes a colorful and fun addition to any occasion. Add a touch of the tropics to your day with Fresh Rambutan.', 'Fresh Rambutan, 12 oz Sweet and mildly acidic tropical fruit with juicy flesh Easy to peel to enjoy the soft, refreshing inside Seed in the center can be cooked and eaten Great for fruit salads, desserts, or snacking Vibrant, eye-catching fruit ideal for entertaining Also known as Hairy Lychee around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/392edd21-1311-4e90-8ab4-a2d4e49bd34a.f57f876be1f72078125ae14ff5b0e6a4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/392edd21-1311-4e90-8ab4-a2d4e49bd34a.f57f876be1f72078125ae14ff5b0e6a4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/392edd21-1311-4e90-8ab4-a2d4e49bd34a.f57f876be1f72078125ae14ff5b0e6a4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (131497850, 'Organic Cotton Candy Grapes, 2 Lb', 3.98, '816426011373', 'short description is not available', 'Organic Cotton Candy Grapes, 2 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (131757259, 'Honeycrisp Apples, 2 lbs', 6.47, '033383047904', 'These Honeycrisp Apples feature a smooth blend of sweet and tart flavors that even kids will enjoy. They have a crisp crunch and are the right size for snacking. The honeycrisp fruit apples come in a handy 2 lb size.', 'Honeycrisp Apples, 2 lbs: Cross of macoun apple and honeygold apple 2 lbs of fresh apples with a smooth balance of sweet and tart flavors Can be stored 3-4 months in refrigerators', 'Generic', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (131871565, 'Van Zyverden Grape Seedless Himrod (1 Dormant Bare Plant Root) Full Sun, Green, Woody Perennial', 6.88, '030641780542', 'Grow your own fresh fruit! Grape Seedless Himrod Dormant Plant Root is the perfect addition to your edible garden that will reap benefits for years to come! Grapevines are deciduous, woody perennial plants. Plant in Full Sun. Grapes will grow in a variety of soils. Grapes are excellent when used as an ornamental and can be trained onto arbors, or on pergolas to provide a unique addition to the landscape. Once established, care consists entirely of annual pruning and picking the fruit. Grapes contain antioxidants that may help prevent heart disease and some cancers. Grapes are also an excellent source of vitamins A, C, and K. Grapes need deep, well-drained, loose soil with pH levels 5.5 to 6.5. Add 2-3\" of mulch to maintain soil moisture. Pruning is important. Don\'t be afraid to remove at least 90% of the previous season\'s growth when vines are dormant.', 'Van Zyverden Grape Seedless Himrod Woody Perennial Plant in full sun Grow your own fruit Garden to table freshness! Harvest when vines are dormant Excellent source of vitamins A, C, and K GMO Free Can be eaten fresh or used to make wine, jam, juice, or raisins', 'Van Zyverden', 'https://i5.walmartimages.com/asr/19353b71-aebb-45f0-9876-89aa1dcb0d46.9cbe63d5718beae6931a59f26e23074a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19353b71-aebb-45f0-9876-89aa1dcb0d46.9cbe63d5718beae6931a59f26e23074a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19353b71-aebb-45f0-9876-89aa1dcb0d46.9cbe63d5718beae6931a59f26e23074a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (131895723, 'Watermelon Seedless', 4.48, '400094575796', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (132186502, 'Produce Unbranded Limon Amarillo', 1.87, '400094432983', 'Limon Amarillo', 'Limon Amarillo', 'Limon Amarillo', 'https://i5.walmartimages.com/asr/13f06f11-07ba-48c3-b8b8-34d86c67bba6.3e9489565cedc9d6cb9add1943a97a40.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13f06f11-07ba-48c3-b8b8-34d86c67bba6.3e9489565cedc9d6cb9add1943a97a40.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13f06f11-07ba-48c3-b8b8-34d86c67bba6.3e9489565cedc9d6cb9add1943a97a40.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (132306693, 'Fresh Oranges, 5 lb Bag', 6.47, '826594106023', 'Enjoy the taste of Fresh juicy oranges that comes in a 5 lb bag. They\'re ideal for enjoying with breakfast, lunch or dinner.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Use as a garnish for your favorite adult beverage Enjoy on their own or in a variety of recipes Serve with your pancake breakfast or make a smoothie', 'Unbranded', 'https://i5.walmartimages.com/asr/8433dec6-8073-46c0-a064-6e9dff2c7bfd.e76bb26fa518c357be574e821174e0ab.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8433dec6-8073-46c0-a064-6e9dff2c7bfd.e76bb26fa518c357be574e821174e0ab.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8433dec6-8073-46c0-a064-6e9dff2c7bfd.e76bb26fa518c357be574e821174e0ab.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (132550702, 'Fresh Apples, Tote Bag', 6.56, '000000042048', 'Enjoy the satisfying taste of these Fresh Apples. These are excellent snacking apples, but you can also use them in many recipes. For breakfast, use these apples to make a rich and creamy yogurt parfait or a nutritious juice blend. Slice these apples and use them to add flavor to a lunchtime salad or spread peanut butter on them for a protein-filled snack. They can also be used in many tasty desserts like apple cobbler, apple crisp, and apple pie. Get creative in the kitchen and make your great-granny\'s homemade apple butter or cinnamon applesauce. However you choose to use them, this tote bag of Fresh Apples will add flavor to any meal.', 'Fresh Apples, Tote Bag Sweet, crisp, and juicy Excellent snacking apple Make a creamy parfait or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp and apple pie', 'Unbranded', 'https://i5.walmartimages.com/asr/9525c1c6-93ae-4127-80ec-67ad6fb8fe4b.33bd8cc31b89d369c11e414618112a98.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9525c1c6-93ae-4127-80ec-67ad6fb8fe4b.33bd8cc31b89d369c11e414618112a98.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9525c1c6-93ae-4127-80ec-67ad6fb8fe4b.33bd8cc31b89d369c11e414618112a98.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (132966605, 'Organic Raspberries, 12 oz', 4.98, '715756100156', 'Driscoll\'s® Organic Raspberries. Only the finest berries?. This is a Certified USDA Organic product.', 'Driscoll\'s Organic Raspberries. Driscoll\'s® Organic Raspberries. Only the finest berries?. USDA Organic. Certified Organic by CCOF. Net Wt 12 oz. www.driscolls.com. ©2016 Driscoll Strawberry Associates, Inc.', 'Unbranded', 'https://i5.walmartimages.com/asr/a299115b-169c-4adb-9b63-99b47bd627bf_1.e38e2f0279128e403776ed08c6c5a055.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a299115b-169c-4adb-9b63-99b47bd627bf_1.e38e2f0279128e403776ed08c6c5a055.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a299115b-169c-4adb-9b63-99b47bd627bf_1.e38e2f0279128e403776ed08c6c5a055.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (133599406, 'Fuyu Persimmons, 2 lb bag', 5.48, '854203001278', 'Fuyu Persimmons, 2 Lb.', 'Fuyu Persimmon 2 Lb Bag', 'Unbranded', 'https://i5.walmartimages.com/asr/07bfab6d-2e0d-4259-b000-bf2852241c62.311a6e7bff33a8dbf69e257e63381d7f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/07bfab6d-2e0d-4259-b000-bf2852241c62.311a6e7bff33a8dbf69e257e63381d7f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/07bfab6d-2e0d-4259-b000-bf2852241c62.311a6e7bff33a8dbf69e257e63381d7f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (133838470, 'Sabra Spicy Guacamole 8 oz', 5.38, '040822012225', 'Sabra Spicy Guacamole is coming in hot to your summer parties this year. Our authentic recipe combines ripe, hand-scooped, Mexican-grown Hass avocados, fresh jalapenos, fragrant cilantro, and tangy lime juice. This fiery chunky guacamole dip tastes just like homemade but is easy to store until serving. Sabra Spicy Guacamole dip is the ultimate avocado spread for anyone looking to turn up the flavor on gluten-free chips, tacos, quesadillas, and more. Whether you\'re enjoying summer fun by the pool, Memorial Day, or July 4th celebrations, it won\'t be long before Sabra Spicy Guacamole becomes the snacking staple at every summer event. In addition to Spicy Guacamole, Sabra offers chunky guacamole dip in a variety of irresistible flavors, including Classic, Classic With Lime, and Mexican Street Corn Inspired. The Classic Guacamole and Spicy Guacamole are also available in convenient on-the-go singles. For a fast, delicious breakfast, try Sabra Breakfast Avocado Toast, a creamy avocado dip made with Hass avocados and served alongside crispy whole wheat bread, or Sabra Snackers for a quick bite to eat. No matter the occasion, Sabra has a snack for you.', 'Our chunky, homestyle guacamole (made with ripe avocado, fragrant cilantro, tangy lime juice, and tomato) gets extra heat from jalapeño peppers. Saba Spicy Guacamole is served best with tortilla chips, tacos, and more for summer entertaining and BBQs. Made with ripe, hand-scooped, Mexican-grown Hass avocados (see product image for list of ingredients). Vegetarian; Kosher; GMO-free', 'Sabra', 'https://i5.walmartimages.com/asr/7d95af19-2d49-4e00-a447-4fc03847839c.55f624d36bb1a1f640d19a0aff253595.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7d95af19-2d49-4e00-a447-4fc03847839c.55f624d36bb1a1f640d19a0aff253595.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7d95af19-2d49-4e00-a447-4fc03847839c.55f624d36bb1a1f640d19a0aff253595.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (133856205, 'Fresh Clementines, 1 Each', 0.44, '000000044509', 'Enjoy the juicy goodness of citrus when you eat a Clementine. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, clementines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, clementines are now available year-round in most markets. Clementines are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the mandarins hang out in a bowl on your counter or table to breathe. Compact and portable, clementines are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious Clementines on hand for an easy, healthy treat.', 'Sweet & Juicy Flavor Naturally sweet with a pleasing sweet-tart balance, perfect for snacking. Easy to Peel Thin, loose skin makes them simple and mess-free to enjoy. Seedless Typically seedless for a smooth, fuss-free eating experience. Compact & Portable Ideal for lunchboxes, gym bags, or road trips healthy and travel-friendly.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/36ab60a4-249e-4602-8802-93ef8e98e468.70e4e1db9a9564f67c41cbf669561a78.webp?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/36ab60a4-249e-4602-8802-93ef8e98e468.70e4e1db9a9564f67c41cbf669561a78.webp?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/36ab60a4-249e-4602-8802-93ef8e98e468.70e4e1db9a9564f67c41cbf669561a78.webp?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (134267958, 'Snack Fresh Red Grapes 5/3 Oz', 3.88, '074641009999', 'short description is not available', 'Snack Fresh Red Grapes 5/3 Oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (134382335, 'Fresh Apple Braeburn, 5 lb Bag', 4.92, '033383087399', 'Fresh Apple Braeburn, 5 lb Bag is a pack of fresh and juicy apples that are perfect for snacking or baking. These apples are known for their sweet and tangy flavor, crispy texture, and vibrant red and green skin. They are carefully handpicked and packed to ensure their freshness and quality. Whether you\'re making a pie or just need a healthy snack, Fresh Apple Braeburn, 5 lb Bag is the ideal choice.', 'Fashion Sleeve Pouch for your 7 Inch Samsung Galaxy Tab A 2016, Samsung Galaxy J Max, Samsung Galaxy Tab 3 Lite 7.0, Samsung Galaxy Tab 4 7.0 is Tough enough to protect your tablet yet stylish to take everywhere you go. The high-grade and highly durable neoprene is water resistant and offers advanced protection from bumps, scratches and dust. And the smooth, non-scratch interior lining offers enhanced screen protection while your device is tucked away. Ideal for any tablet or e-book up to 7.75 inches, this no-bulk case easily slides into your bag, briefcase or backpack and perfect for those of you on the go. This Sleeve is compatible for most Tablets or Netbooks upto 7.75 inch. This pouch can accommodate your Samsung Galaxy Tab A 7.0 2016, Samsung Galaxy J Max, Samsung Galaxy Tab 3 Lite 7.0, Samsung Galaxy Tab 4 7.0. Product Features: Constructed of shock-absorbing & weather resistant neoprene material Non-abrasive material lines interior securing your device for safe travel and storage Slim and lightweight design provides low-profile protection against every day wear and tear Stylish exterior graphic and Dual zippers make accessing your device quick and easy', 'Unbranded', 'https://i5.walmartimages.com/asr/a2731ef5-32e9-4e85-8feb-748b2fb78bb5.bf99906400182e7f876d75c78b05c271.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a2731ef5-32e9-4e85-8feb-748b2fb78bb5.bf99906400182e7f876d75c78b05c271.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a2731ef5-32e9-4e85-8feb-748b2fb78bb5.bf99906400182e7f876d75c78b05c271.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (134518371, 'Crispin Apple, Each', 0.98, '681131124324', 'short description is not available', 'Crispin Apple, Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (134888415, 'Organic Tangerines, 1 Each', 0.38, '000000944496', 'Organic Tangerines, 1 Each', 'Organic Tangerines', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (134899769, 'Freshness Guaranteed Fresh Green Seedless Grapes', 1.88, 'deleted_816426013872', 'short description is not available', 'Freshness Guaranteed Fresh Green Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (134912068, 'Peacharine, 2 lb Pack', 3.98, '847081000587', 'short description is not available', '2# Peacharines', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (134918631, 'Watermelon Seedless', 4.48, '400094132265', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (135241386, 'Fresh Muscato Grapes, 2 lb Package', 3.88, '045255126396', 'Melissa\'s Muscatos Green Seedless Table Grapes are a delectable and healthy snack, perfect for any occasion. These 2 lb packs contain premium green grapes, known for their sweet, juicy flavor and firm texture. Seedless and easy to enjoy, Muscatos Grapes make a delightful addition to fruit salads, cheese platters, or as a simple on-the-go snack. Savor the refreshing taste and nutritional benefits of Melissa\'s Muscatos Green Seedless Table Grapes, and elevate your whole fruit snacking experience.', 'Fresh Green Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b21ee8da-a318-4799-8238-7d613524eb5f.3810631fdf4c79f043791935cfdd888c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b21ee8da-a318-4799-8238-7d613524eb5f.3810631fdf4c79f043791935cfdd888c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b21ee8da-a318-4799-8238-7d613524eb5f.3810631fdf4c79f043791935cfdd888c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (135890882, 'Macoun Apple Totes', 0.98, '681131124362', 'short description is not available', 'Macoun Apple Totes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (135964022, 'Ready Pac Foods Ready Pac Watermelon, 10.5 oz', 3.98, '077745237480', 'Watermelon, Chunks 10.5 oz (298 g) Natural fruit. Perishable. No preservatives. Keep refrigerated. 10.5 oz (298 g) Irwindale, CA 91706 800-800-7822', 'Watermelon, Chunks Natural fruit. Perishable. No preservatives.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (135998036, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094383636', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (136132805, 'Pineapple/mango/grapes 32 Oz', 7.68, '074641054067', 'short description is not available', 'Pineapple/mango/grapes 32 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8d87dfa7-d4f6-4281-9468-2ef4f853a81e_1.b24ee7ae70e6d4004f01ee39600a5315.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d87dfa7-d4f6-4281-9468-2ef4f853a81e_1.b24ee7ae70e6d4004f01ee39600a5315.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d87dfa7-d4f6-4281-9468-2ef4f853a81e_1.b24ee7ae70e6d4004f01ee39600a5315.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (136194520, 'Redfree Apple, Each', 0.98, '681131124935', 'short description is not available', 'Redfree Apple, Each', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (136326885, 'Braeburn Apples 3 Lb Bag', 3.94, '033383087375', 'Apples, Braeburn, Lil Snappers, Kid Size, Bag 3 LB 2-1/2 inch min dia. Meets or exceeds US extra fancy. Robust, spicey-sweet. World famous fruit. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us: YouTube; Facebook; Twitter; Pinterest. For fun recipes, activities and more, visit www.lilsnappers.com. (Std. msg & data rates may apply). Responsible choice. Fruits & Veggies: More matters. Resealable. Produce of USA. 3 lb (1.36 kg) Wenatchee, WA 98801', 'Apples, Braeburn, Kid Size Fruit 2-1/2 inch min dia. Meets or exceeds US extra fancy. Robust, spicey-sweet. World famous fruit. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us: YouTube; Facebook; Twitter; Pinterest. For fun recipes, activities and more, visit www.lilsnappers.com. (Std. msg & data rates may apply). Responsible choice. Fruits & Veggies: More matters. Resealable. Produce of USA.', 'Unbranded', 'https://i5.walmartimages.com/asr/358b0e15-e442-47bc-ad7e-2ec0781a657c.83069b302c5c985b72cc5cbf8c3db133.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/358b0e15-e442-47bc-ad7e-2ec0781a657c.83069b302c5c985b72cc5cbf8c3db133.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/358b0e15-e442-47bc-ad7e-2ec0781a657c.83069b302c5c985b72cc5cbf8c3db133.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (136441336, '2# Bag Lemons', 3.48, 'deleted_819265011559', 'short description is not available', '2# Bag Lemons', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (136520613, 'Fresh Fuyu Persimmons, 2 LB Bag', 4.24, '847081000686', 'Fuyu persimmons are a sweet, crisp treat with a vibrant orange hue and a delicate honey-like flavor. Unlike other varieties, they can be enjoyed firm or soft, making them versatile for snacking, salads, and desserts. Packed with fiber, vitamins, and antioxidants, Fuyu persimmons are a delicious and nutritious addition to your seasonal fruit selection. Available in a 2 lb bag.', 'Non-Stringy: Fuyu Persimmons are known for their non-stringy flesh, making them a great choice for eating fresh or using in recipes. Seasonal Availability: Fresh Fuyu Persimmons are available from September to February, making them a great winter treat Sweet and Juicy: Fuyu Persimmons are known for their sweet and juicy flesh, perfect for snacking or baking. Percinnamon Pouch 2lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/dca81229-099c-403a-a93c-978ccbe0d1c8_2.a4f326d1d6ca3335514c641adc65b3a0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dca81229-099c-403a-a93c-978ccbe0d1c8_2.a4f326d1d6ca3335514c641adc65b3a0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dca81229-099c-403a-a93c-978ccbe0d1c8_2.a4f326d1d6ca3335514c641adc65b3a0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (136640966, 'Sunkist Lil Snappers Granny Smith, 3 Lb.', 7.97, '741839005971', 'Granny Smith apples are available as Lil Snapper organics! Granny Smith Apples get their name from its founder, Mrs. Maria Ann (Granny) Smith. The variety has a solid green exterior with a greenish to yellowish-white, fine-grained flesh. The taste is mildly sweet with a tart after taste, which sweetens in storage. Today, Granny Smith is one of the most well-known apple varieties around. Firm with strong tartness resembling that of a lemon; this famously green apple is bound to make your mouth water!', 'Sunkist Lil Snappers Granny Smith 3 Lb', 'Lil Snappers', 'https://i5.walmartimages.com/asr/ca4295ce-ba18-4f7c-9436-03f061163d66_1.a294c511e738575ea58bfd076fbce897.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ca4295ce-ba18-4f7c-9436-03f061163d66_1.a294c511e738575ea58bfd076fbce897.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ca4295ce-ba18-4f7c-9436-03f061163d66_1.a294c511e738575ea58bfd076fbce897.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (136836092, 'Fresh Guava, Each', 0.82, '000000042994', 'Bring this Fresh Guava into your kitchen. It\'s a tropical fruit that somewhat resembles a pear but has a more round shape. When unripe, guava fruit has a green color, and once it ripens that shade of green changes into yellow. They give off an aroma that is somewhat similar to lemon rind. Depending on the species, the taste of the outer skin and the pulp inside can vary from sweet to sour. Guava is rich in vitamin C, which helps you maintain a healthy immune system, and fiber, which is important to keep your digestive system regular.', 'Guava, 1 lb Rich in vitamin C to support immune health Pink guava is a nice source of fiber for proper digestive system functioning May help reduce the risk of stroke and heart attack Also known as Guayaba Rosada and Pink Guayaba around the word', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bd96ed57-f000-42e6-8e24-a4dad7e42374.491a1eb4326d32dc3fbf6723b2d104c3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd96ed57-f000-42e6-8e24-a4dad7e42374.491a1eb4326d32dc3fbf6723b2d104c3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd96ed57-f000-42e6-8e24-a4dad7e42374.491a1eb4326d32dc3fbf6723b2d104c3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (137440708, 'Fresh Muscadine Bronze Grapes, Bag', 3.88, 'deleted_860655000202', 'short description is not available', 'Fresh Muscadine Bronze Grapes, Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/7236f72a-079e-486a-9ca3-f905a00f6317_1.cee7f10b4d62ca9683e11658ac7d83cb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7236f72a-079e-486a-9ca3-f905a00f6317_1.cee7f10b4d62ca9683e11658ac7d83cb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7236f72a-079e-486a-9ca3-f905a00f6317_1.cee7f10b4d62ca9683e11658ac7d83cb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (137703684, 'Honeycrisp Apples, 5 lb bag', 7.92, '405559309992', 'short description is not available', 'Honeycrisp Apples 5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5f74f8b-8156-4ca8-8aa8-aa63b6e40574.2c3ba5e7acf09c9735dc3f7a7e7cc58b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (137817725, 'Walmart Produce Fruit Burst 10oz', 2.97, '077745244457', 'short description is not available', 'Walmart Produce Fruit Burst 10oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (138096423, 'Cluster Grapes Green', 9.97, '764878633004', 'short description is not available', 'Cluster Grapes Green', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (138113429, 'Fresh Macoun Apples, Each', 1.47, '000000030731', 'Enjoy the sweet, juicy flavor of Apple Macoun Bulk, a premium variety of apples that are perfect for snacking and cooking. These apples are hand-selected to ensure the highest quality and freshness, making them a favorite among apple lovers. Whether you\'re baking an apple pie or simply enjoying a healthy snack, Apple Macoun Bulk is the perfect choice for anyone who loves the taste of fresh, delicious apples.', 'Each apple is medium to large in size, with a round shape and a deep red color that fades into a green-yellow background. The flesh of the Macoun apple is creamy-white, firm, and juicy, with a sweet and tangy flavor that has hints of honey and spice. This apple variety is perfect for snacking, but also holds up well in cooking and baking, maintaining its shape and flavor. Macoun Apples are a good source of fiber, vitamin C, and antioxidants, and can be enjoyed as a healthy and flavorful addition to any meal. With their distinctive taste and appearance, Macoun apples are a premium choice for apple lovers and foodies alike. The flesh of the Macoun apple is creamy-white, firm, and juicy, with a sweet and tangy flavor that has hints of honey and spice. This apple variety is perfect for snacking, but also holds up well in cooking and baking, maintaining its shape and flavor. Macoun Apples are a good source of fiber, vitamin C, and antioxidants, and can be enjoyed as a healthy and flavorful addition to any meal. With their distinctive taste and appearance, Macoun apples are a premium choice for apple lovers and foodies alike. This apple variety is perfect for snacking, but also holds up well in cooking and baking, maintaining its shape and flavor. Macoun Apples are a good source of fiber, vitamin C, and antioxidants, and can be enjoyed as a healthy and flavorful addition to any meal. With their distinctive taste and appearance, Macoun apples are a premium choice for apple lovers and foodies alike. Macoun Apples are a good source of fiber, vitamin C, and antioxidants, and can be enjoyed as a healthy and flavorful addition to any meal. With their distinctive taste and appearance, Macoun apples are a premium choice for apple lovers and foodies alike.', 'Unbranded', 'https://i5.walmartimages.com/asr/35f25653-a516-4b84-ab14-8a2d841e769d.0b1c00c02cb3d9d05f80101cd38db764.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35f25653-a516-4b84-ab14-8a2d841e769d.0b1c00c02cb3d9d05f80101cd38db764.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35f25653-a516-4b84-ab14-8a2d841e769d.0b1c00c02cb3d9d05f80101cd38db764.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (138129120, 'Fresh Paula Apples, Each', 1.27, '000000041577', 'Tamarind is a tangy and sweet fruit with numerous health benefits. It is versatile and can be used in a variety of dishes. Our tamarind is fully matured, hand-picked, and sun-dried to ensure maximum flavor and quality. Its distinct taste is perfect for adding a zing to your cooking and is an essential ingredient in many international cuisines. Try our tamarind today and experience its unique taste and benefits.', 'Paula apples are a unique and delicious variety with a sweet flavor and firm texture. These apples are perfect for snacking, baking, and cooking, and their distinct taste sets them apart from other apple varieties. They are also an excellent source of dietary fiber and vitamin C, making them a healthy addition to any diet. Our Paula apples are carefully selected and packed at the peak of their freshness to ensure maximum flavor and quality. Whether you\'re enjoying them on their own, using them in a recipe, or sharing them with friends and family, Paula apples are sure to impress with their delicious taste and satisfying crunch. Perfect for foodies and apple enthusiasts looking for a unique and flavorful apple variety, Paula apples are a must-try for anyone who loves apples.', 'Fresh', 'https://i5.walmartimages.com/asr/845043ea-5f53-4195-a994-3ea4d314c425.eb2eb37e071be719c64a1b4e1ef5d58b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/845043ea-5f53-4195-a994-3ea4d314c425.eb2eb37e071be719c64a1b4e1ef5d58b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/845043ea-5f53-4195-a994-3ea4d314c425.eb2eb37e071be719c64a1b4e1ef5d58b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (138227192, 'Mangosteens', 4.88, '712038811618', 'short description is not available', 'Mangosteens', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (138763361, 'Fresh Dark Sweet California Cherries, 3 Lb.', 17.64, '847473001376', 'Fresh Dark Sweet California Cherries, 3 Lb.', 'Fresh Dark Sweet California Cherries', 'Unbranded', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (138998369, 'Pomegranate Arils, 8 oz', 5.3, 'deleted_851362002092', 'Sweet Bursts all natural pomegranate arils are a great snack for everyone in your family. If you like sweet, crunchy, juicy snacks literally bursting with flavor, then you will love Sweet Bursts. Sweet Bursts are fantastic right out of the package or as an ingredient in your favorite main dish or salad. Nourishing your family with every bite was never so easy.', '100 % Natural Preservative Free Additive Free Sweet Juicy Crunchy', 'DJ.Forry', 'https://i5.walmartimages.com/asr/e74b1832-8390-4799-8427-3a5832256f71_1.c7d54d20deec09d5aee4fe62cb9ce7d7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e74b1832-8390-4799-8427-3a5832256f71_1.c7d54d20deec09d5aee4fe62cb9ce7d7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e74b1832-8390-4799-8427-3a5832256f71_1.c7d54d20deec09d5aee4fe62cb9ce7d7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (139461223, 'Black Seedless Grape', 1.98, '400094234815', 'short description is not available', 'Black Seedless Grape', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (139514017, 'White Peach, 4 Pack', 4, '898429002664', 'short description is not available', 'Peppermint White Peach 4 Ct Clamshell', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (139544225, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094208182', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (139685050, 'Yellow Flesh Peaches, per Pound', 1.58, '400094710197', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (140218018, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094358160', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (140304102, 'Fresh Dragon Fruit, Each', 4.97, '405509651621', 'Dragon fruit, also known as pitaya, is a vibrant tropical fruit native to Central America. Recognizable for its bright pink or yellow, spiky skin and creamy pulp filled with tiny seeds, it offers a subtly sweet taste reminiscent of kiwi or pear. Dragon fruit is a nutritional powerhouse, providing high amounts of fiber, vitamin C, essential minerals, and antioxidants. Grown on a climbing cactus, this refreshing fruit is harvested when its skin color fully develops, offering a unique and healthful treat.', 'Dragon fruit, also known as pitaya, is a tropical fruit that belongs to the cactus family. Native to Central America but now grown all over the world, dragon fruit is known for its unique appearance, vibrant color, and a wealth of health benefits. The fruit has a leathery, slightly leafy skin that is bright pink or yellow in color, while the inside boasts a sweet, creamy pulp dotted with tiny, crunchy seeds. Appearance and Taste: Dragon fruit stands out for its flamboyant appearance, with its bright pink or yellow, spiky skin, and white or red flesh speckled with small black seeds. The taste of dragon fruit is subtly sweet and often compared to that of a kiwi or pear, with the seeds providing a satisfying crunch. Its texture is wonderfully juicy and creamy, making it a refreshing treat on a hot day. Health Benefits: Dragon fruit is a nutritional powerhouse, packed with a range of beneficial compounds. It\'s high in fiber, vitamin C, and several essential minerals like iron and magnesium. Dragon fruit is also rich in antioxidants, which help fight off free radicals and prevent cell damage. Moreover, it contains prebiotics, which promote the growth of beneficial bacteria in your gut, contributing to a healthy digestive system. Cultivation and Harvest: Dragon fruit grows on a cactus plant that climbs up trees or walls with the help of its aerial roots. It thrives best in a dry tropical climate with a moderate amount of rain. The fruit is harvested when its skin color changes from bright green to pink or yellow, depending on the variety. Despite its exotic appearance, dragon fruit is easy to eat; simply slice it in half and scoop out the flesh with a spoon.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f528e325-51fe-44d1-a17f-2f9ff63f1713.6010e393face2dfefaa3560054b8f514.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f528e325-51fe-44d1-a17f-2f9ff63f1713.6010e393face2dfefaa3560054b8f514.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f528e325-51fe-44d1-a17f-2f9ff63f1713.6010e393face2dfefaa3560054b8f514.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (141113501, 'Fresh Navel Orange, Each', 1.37, '405536998607', 'Enjoy the juicy goodness of Fresh Navel Oranges (China Nebo). A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these navel oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Fresh Navel Oranges add flavor to any meal or beverage', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes Use as a garnish for your favorite cocktail', 'China Nebo', 'https://i5.walmartimages.com/asr/d4d3c917-dcc2-4ea4-bc0a-bf037237336a.95d3da224dc1740c5facfa2b1ac56481.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4d3c917-dcc2-4ea4-bc0a-bf037237336a.95d3da224dc1740c5facfa2b1ac56481.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4d3c917-dcc2-4ea4-bc0a-bf037237336a.95d3da224dc1740c5facfa2b1ac56481.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (141199612, 'Fresh Ginger Gold Apples, 5 lb Tote', 1.68, '681131124195', 'Our ginger gold apples are the perfect addition to your fresh produce selection. With whole and organic ingredients, these apples provide a delicious and healthy snacking option. Enjoy the crisp sweetness and tangy flavor of these juicy fruits as a snack, in a salad or baked dish. They are sure to impress your taste buds and are a great source of essential nutrients.', 'The Ginger Gold Fresh Apples have a crisp and juicy texture with a sweet and slightly tart flavor. They are great for eating fresh, adding to salads, or using in baking recipes . The 5 lb Tote provides a convenient and cost-effective way to stock up on these delicious apples . Listed apple varieties are rich in fiber, vitamins, and antioxidants, making them a healthy snacking option. They are also versatile and can be used in a variety of recipes, from sweet to savory. Whether you prefer the sweet and tart flavor of Ginger Gold Apples or the firm and sweet taste of Fuji Apples, both varieties offer a delicious and nutritious addition to your diet.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5deaecab-4f69-4029-b8be-5c2a3f8f0a5e_1.62a68d0b698540fc3e7be86b9e3ce9f2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5deaecab-4f69-4029-b8be-5c2a3f8f0a5e_1.62a68d0b698540fc3e7be86b9e3ce9f2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5deaecab-4f69-4029-b8be-5c2a3f8f0a5e_1.62a68d0b698540fc3e7be86b9e3ce9f2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (141358402, 'Walmart Produce Pineapple Blueberry 32 Oz', 7.98, '826766253692', 'short description is not available', 'Walmart Produce Pineapple Blueberry 32 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (141418923, 'Fresh Yellow Peaches, 2 lb Bag', 3.27, '813055011330', 'Discover the delightful sweetness of these Fresh Yellow Peaches. Enjoy them on their own as a sweet snack or use them in a variety of recipes. For breakfast, you could slice them to put into your oatmeal or use them to make a delicious yogurt parfait. You can also use these fresh peaches in several baking recipes including a comforting crisp topped with ice cream, a tasty upside-down cake, or a scrumptious tart. You can even use them to make a jam or a smooth sorbet. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Fresh Yellow Peaches.', 'Fresh Yellow Peaches, 2 lb Bag Enjoy on their own as a satisfying snack Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Slice as a sweet topping for waffles or pancakes Add to iced tea to create a refreshing summertime flavor', 'Unbranded', 'https://i5.walmartimages.com/asr/c16a22e8-802e-4317-a2b9-7cfb2c81e52c.7b91e88e4c599c94002b6ab5f0d9df9d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c16a22e8-802e-4317-a2b9-7cfb2c81e52c.7b91e88e4c599c94002b6ab5f0d9df9d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c16a22e8-802e-4317-a2b9-7cfb2c81e52c.7b91e88e4c599c94002b6ab5f0d9df9d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (141630284, 'Fresh Organic Washington Rainier Cherries, 16 oz Package', 3.96, '888289000825', 'Indulge in the sweet taste of Fresh Washington Organic Rainier Cherries - a summer indulgence you cannot resist! These cherries are hand-picked and grown with care for the ultimate taste experience. Savor the juicy texture and natural sweetness of these cherries, without any additives or preservatives. Perfect for snacking, baking, and even cocktail garnishes, these organic cherries are a delicious and healthy addition to your diet. Order now and savor the flavor of the Pacific Northwest!', 'Fresh Organic Washington Rainier Cherries are a delectable and healthy fruit that is sure to satisfy your sweet tooth. Each package contains 16 oz of these plump and juicy cherries with a distinctive yellow and red skin. The flesh of the Rainier Cherry is thick, firm, and has a creamy yellow color with a unique flavor that is both sweet and tangy. These cherries are grown organically in Washington State, without the use of synthetic pesticides, fertilizers, or genetically modified organisms (GMOs). They are a good source of fiber, vitamin C, and antioxidants, making them a nutritious and delicious addition to any diet. Fresh Organic Washington Rainier Cherries are perfect for snacking, but can also be used in a variety of recipes, from salads to desserts. With their sweet and tangy flavor, creamy texture, and organic certification, these cherries are a premium choice for health-conscious foodies who value sustainability and quality.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/67d27c14-7cd5-4d64-900d-c8e3a3a0a4fd.1e3dfca5606c7ac1e307c07a480f94e6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/67d27c14-7cd5-4d64-900d-c8e3a3a0a4fd.1e3dfca5606c7ac1e307c07a480f94e6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/67d27c14-7cd5-4d64-900d-c8e3a3a0a4fd.1e3dfca5606c7ac1e307c07a480f94e6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (141733704, 'Melon Medley 32oz', 6.88, '813055012993', 'short description is not available', 'Melon Medley 32oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (141845106, 'Fresh Oranges, 5 lb Bag', 6.47, '826594105026', 'Enjoy the taste of Fresh juicy oranges that comes in a 5 lb bag. They\'re ideal for enjoying with breakfast, lunch or dinner.', 'A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'HAR PRODUCTS', 'https://i5.walmartimages.com/asr/045dc826-a412-49a3-be38-9e30165f39fc.100e6befb2674a2db886d723132d5470.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/045dc826-a412-49a3-be38-9e30165f39fc.100e6befb2674a2db886d723132d5470.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/045dc826-a412-49a3-be38-9e30165f39fc.100e6befb2674a2db886d723132d5470.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (142082277, 'Pomegranate Arils 8 oz', 4.98, 'deleted_683953001777', '8 oz. Pomegranate Seeds', 'Pomegranate Seeds 8 Oz', 'Juicy Gems', 'https://i5.walmartimages.com/asr/33dcf507-ef18-4ab0-92be-1de88fa44b8e_2.14cc1e761945c8017596924283554824.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/33dcf507-ef18-4ab0-92be-1de88fa44b8e_2.14cc1e761945c8017596924283554824.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/33dcf507-ef18-4ab0-92be-1de88fa44b8e_2.14cc1e761945c8017596924283554824.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (142100999, 'Produce Produce Apple, 1 ea', 2.97, 'deleted_880563000064', 'Apple, Grape Flavored 1 each 1 each', 'Apple, Grape Flavored', 'Produce', 'https://i5.walmartimages.com/asr/6418cf79-d0c2-4155-a447-157948628018_1.1c8068a0b5c2b9a8a49855b87189575a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6418cf79-d0c2-4155-a447-157948628018_1.1c8068a0b5c2b9a8a49855b87189575a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6418cf79-d0c2-4155-a447-157948628018_1.1c8068a0b5c2b9a8a49855b87189575a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (142135105, 'Fresh Red Plum, Each', 2.57, '405535277529', 'Each fresh red plum is a delicious and juicy fruit with a vibrant red skin. Known for its sweet and tangy flavor, this plum variety is a popular choice for both snacking and cooking. Each plum is carefully picked when it is perfectly ripe, ensuring optimal sweetness and texture. The firm flesh of the plum has a smooth and succulent texture, making it a delight to bite into. The deep red skin adds a beautiful pop of color to any dish or fruit bowl. Whether enjoyed on its own, sliced into salads, or used in jams and desserts, each fresh red plum is a burst of refreshing and delightful flavor.', 'Ciruelas', 'Ciruelas', 'https://i5.walmartimages.com/asr/d16964a8-a814-4060-bfd7-158ccc2310de.92d8631b5b2051e5ee725f2ea4f4ac2d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d16964a8-a814-4060-bfd7-158ccc2310de.92d8631b5b2051e5ee725f2ea4f4ac2d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d16964a8-a814-4060-bfd7-158ccc2310de.92d8631b5b2051e5ee725f2ea4f4ac2d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (142505318, 'Organic Personal Sized Seedless Watermelon, Each', 4.18, '033383402697', 'Enjoy the sweet, refreshing taste of an Organic, Personal Seedless Watermelon. Watermelons are great for breakfast, lunch, dessert, or when you want a snack. Watermelon is a good source of vitamin C, vitamin A, and potassium making them an excellent healthy treat. Cut the watermelon into chunks for a quick snack, infuse it with water for a refreshing drink, or chop it up and make a mouthwatering watermelon salad with feta and mint. This watermelon is great for sharing with friends and family or keep it for yourself. Bring it to your next cookout or get it as a sweet after dinner treat with friends.', 'Juicy and fresh organic personal watermelon Enjoy on its own or add to a mixed fruit salad Serve at your next neighborhood barbecue Get creative and make a watermelon cocktail or a refreshing sorbet Explore all the delicious ways to add fresh organically grown watermelon to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a4354248-7204-46da-9c9a-16085000fec5.e50fa8651db9c595777b69a457922483.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a4354248-7204-46da-9c9a-16085000fec5.e50fa8651db9c595777b69a457922483.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a4354248-7204-46da-9c9a-16085000fec5.e50fa8651db9c595777b69a457922483.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (142838230, 'Watermelon Seedless', 4.48, '405503752409', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (143502117, 'Fresh Manzana (Apples) Roja, 1 lb.', 1.68, 'deleted_400094433829', 'Grown with care and picked at the peak of ripeness, our Red Apples are sure to satisfy your cravings. With their sweet and juicy taste, they make for a perfect snack any time of the day. Graced with a classic, vibrant red color, these apples are full of nutrients such as fiber, vitamin C, and antioxidants. Get your daily dose of health and deliciousness with our Red Apples.', 'Red Rome apples are a delicious and versatile apple variety that is known for its sweet, tangy flavor and firm texture. These apples are perfect for snacking, baking, and cooking, and their unique taste and texture make them a favorite among apple enthusiasts. Red Rome apples are also an excellent source of dietary fiber and vitamin C, making them a healthy addition to any diet. Our Red Rome apples are carefully selected and packed at the peak of their freshness to ensure maximum flavor and quality. With their beautiful red color and distinctive taste, Red Rome apples are a great choice for adding a pop of color and flavor to any dish. Whether you\'re using them in a savory recipe or baking them in a pie, Red Rome apples are sure to impress with their delicious taste and satisfying crunch. If you\'re looking for a delicious and versatile apple variety that is perfect for any occasion, give Red Rome apples a try and discover why they are a popular choice among apple lovers everywhere.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/72bba039-d136-4929-a22b-bf6168248e81.4f906c353fe8bce2de49f18dd60f7600.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/72bba039-d136-4929-a22b-bf6168248e81.4f906c353fe8bce2de49f18dd60f7600.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/72bba039-d136-4929-a22b-bf6168248e81.4f906c353fe8bce2de49f18dd60f7600.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (143658128, 'Garden Highway Garden Highway Pineapple Core, 18 oz', 3.97, '826766217007', 'Pineapple Core 18 oz (1 lb 2 oz) 510 g Perishable. Cut fresh daily. Product of: Costa Rica. Keep refrigerated. 18 oz (1 lb 2 oz) 510 g Rancho Cordova, CA 95670 888-4-HWYFUN', 'Pineapple Core Perishable. Cut fresh daily. Product of: Costa Rica.', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (143887151, 'Fresh White Peach, Each', 1.14, '895359002092', 'Discover the delightful sweetness of these Fresh White Peaches. Enjoy them on their own as a sweet snack or use them in a variety of recipes. For breakfast, you could slice them to put into your oatmeal or use them to make a delicious yogurt parfait. You can also use these fresh peaches in several baking recipes including a comforting crisp topped with ice cream, a tasty upside-down cake, or a scrumptious tart. You can even use them to make a jam or a smooth sorbet. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Fresh White Peaches.', 'Fresh White Peach, Each Enjoy on their own as a satisfying snack Bag Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Slice as a sweet topping for waffles or pancakes Add to iced tea to create a refreshing summertime flavor', 'Fresh Produce', 'https://i5.walmartimages.com/asr/88636da4-e6ee-43ef-98f7-0e942d44a698.fd38b955c99bbb0874ce8ca29b6e661a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/88636da4-e6ee-43ef-98f7-0e942d44a698.fd38b955c99bbb0874ce8ca29b6e661a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/88636da4-e6ee-43ef-98f7-0e942d44a698.fd38b955c99bbb0874ce8ca29b6e661a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (143888914, 'Mother Earth Products Crunchy Whole Red Grapes, 2 Cup Jar', 11.13, '810919034535', 'Mother Earth Products Freeze Dried Whole Red Grapes: a healthy & convenient addition to every area of your life without the headache: emergency preparedness, snacking, long and short term storage, traveling, everyday cooking, hiking, backpacking, spicing up your recipes, etc. use it now or later. Mother Earth Products Freeze Dried Whole Red Grapes are made with real, Non-GMO Red Grapes, no additives or preservatives, & is kosher - a guilt-free, robust food that makes eating tasty & rewarding, without the hassle of weekly trips to the store or the worry of spoiling. It’s so delicious you won’t store it away and hope you never have to use it. Taste the Goodness of Mother Earth Products', '100% red grapes; long term storage; short term storage; pantry; portable; convenient; nothing added; emergency preparedness; great flavor; easy to cook with; can eat straight from container without reconstituting', 'Mother Earth Products', 'https://i5.walmartimages.com/asr/7465c8cb-a233-41cf-aa3e-d06a0b0657e5_1.02f08f61dac85f4319468e57e158d04b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7465c8cb-a233-41cf-aa3e-d06a0b0657e5_1.02f08f61dac85f4319468e57e158d04b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7465c8cb-a233-41cf-aa3e-d06a0b0657e5_1.02f08f61dac85f4319468e57e158d04b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (143938248, 'Uvas Rojas, 10 Lb.', 2.17, '400094943991', 'Uvas Rojas, 10 Lb.', 'Uvas Red Globe', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (144148311, 'Uva Blanca, 1 Lb.', 4.47, '405515367721', 'Uva Blanca, 1 Lb.', 'Uva Blanca', 'Unbranded', 'https://i5.walmartimages.com/asr/f236462b-dc7a-47ff-90d4-7281369ce012.7a2478c3d27e4526eac51d6fda7bf11f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f236462b-dc7a-47ff-90d4-7281369ce012.7a2478c3d27e4526eac51d6fda7bf11f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f236462b-dc7a-47ff-90d4-7281369ce012.7a2478c3d27e4526eac51d6fda7bf11f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (144288494, 'Fresh Chilean Grown Yellow Peaches, 1 Lb.', 1.58, '400094390177', 'Fresh Chilean Grown Yellow Peaches, 1 Lb.', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (144523396, '?BBQ Jackfruit Meal, 10 oz', 4.99, '859806003025', 'BBQ PULLED JACKFRUIT', 'MEATY TEXTURE NEW TASTIER RECIPE! SWEET & SMOKY SAUCE', 'The Jackfruit Company', 'https://i5.walmartimages.com/asr/ab2ba3ea-6a31-43f6-a1c3-5f3157e29ea1.e43a20450c4220655b3cb455f14a84b1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ab2ba3ea-6a31-43f6-a1c3-5f3157e29ea1.e43a20450c4220655b3cb455f14a84b1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ab2ba3ea-6a31-43f6-a1c3-5f3157e29ea1.e43a20450c4220655b3cb455f14a84b1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (145162910, 'Yellow Flesh Peaches, per Pound', 1.58, '400094620700', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (145181964, 'Sunkist Lil Snappers Gala Smith, Fresh Apples, 3 lb Bag', 7.97, 'deleted_653571128125', 'Gala apples are available in Lil Snappers organics! The light golden streaks of color on the outside of the Gala hint at the honey-floral taste on the inside. We think there\'s a touch of banana in there, too. Sweet with a medium-crisp bite, the Gala looks like a beautiful old-time fruit-stand apple. Its delicate taste gets a boost from the slightly tart skin.', 'Sunkist Lil Snappers Gala Smith 3 Lb', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/ebc4b1a9-015d-4d8f-9941-deb80bcce50b_1.789098d8ffe09116e428523af3f61357.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ebc4b1a9-015d-4d8f-9941-deb80bcce50b_1.789098d8ffe09116e428523af3f61357.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ebc4b1a9-015d-4d8f-9941-deb80bcce50b_1.789098d8ffe09116e428523af3f61357.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (145353718, 'Kanzi Apples, Each', 1.77, '847473002656', 'Kanzi Apples, Each', 'Apple, Kanzi Sold per Apple Satisfaction guaranteed. For more information call 1-877-505-2267 or visit Walmart.com/help', 'Fresh Produce', 'https://i5.walmartimages.com/asr/96ed6e2f-d64a-4608-b5f1-4c95008f7dd0.a00f49a8adbefb5845d212cacd0d55d1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96ed6e2f-d64a-4608-b5f1-4c95008f7dd0.a00f49a8adbefb5845d212cacd0d55d1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96ed6e2f-d64a-4608-b5f1-4c95008f7dd0.a00f49a8adbefb5845d212cacd0d55d1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (145362893, 'Fresh Cactus (Nopales) Leaves, 1 lb', 1.48, '000000045582', 'Introducing our fresh cactus leaves, a unique and exotic ingredient ready to elevate your culinary journey. Packed with nutrients and antioxidants, these succulent leaves boast a mildly tangy flavor and a tender, yet crunchy texture. Ideal for salads, stir-fries, or grilled dishes, our cactus leaves offer a delightful twist to traditional recipes. Embrace the taste of adventure and add some excitement to your plate with our fresh cactus leaves.', 'Introducing our Fresh Cactus Leaves, a unique and nutritious addition to your culinary adventures. Handpicked for their exceptional quality and flavor, these vibrant green leaves bring a delightful, tangy taste and a satisfyingly crunchy texture to your dishes. Rich in antioxidants, fiber, and vitamins, our cactus leaves are not only delicious but also a powerhouse of health benefits. Enjoy them grilled, sautéed, or in salads and salsas for an exotic twist to your meals. Experience the magic of Fresh Cactus Leaves and surprise your taste buds with their extraordinary flavor and versatility.', 'Unbranded', 'https://i5.walmartimages.com/asr/97742ace-a7d5-4dcc-873c-e3576a5bb914.5e3d793853aebdb387639c30c417d41d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/97742ace-a7d5-4dcc-873c-e3576a5bb914.5e3d793853aebdb387639c30c417d41d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/97742ace-a7d5-4dcc-873c-e3576a5bb914.5e3d793853aebdb387639c30c417d41d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (145491247, 'Halos Mandarin Oranges, 2 Lb.', 3.97, '072240067204', 'Halos Mandarin Oranges, 2 Lb.', '2# Mandarin Halo', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (145623438, 'Pink Grapefruit, 1 Each', 1.84, '400094434314', 'Pink Grapefruit, 1 Each', 'Toronja Rosada', 'Unbranded', 'https://i5.walmartimages.com/asr/4ddf5bd9-20aa-483f-858a-8e7b636989e4.422b7ae9ad103680a1fb86e708b34815.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ddf5bd9-20aa-483f-858a-8e7b636989e4.422b7ae9ad103680a1fb86e708b34815.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ddf5bd9-20aa-483f-858a-8e7b636989e4.422b7ae9ad103680a1fb86e708b34815.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (145878309, 'Fruit Medley 16oz', 4.68, '813055012870', 'short description is not available', 'Fruit Medley 16oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (146356591, 'Gala Apples 5 Lb Bag', 5.29, '847473005862', 'short description is not available', 'Gala Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (146504937, 'Nectarines, 1 Lb.', 1.88, 'deleted_400094457481', 'Nectarines, 1 Lb.', 'Nectarines', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/ecee5f5a-6458-438a-b8c7-78a26974ae98.5492556a3e46d4abe66f9ffc0fb22665.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecee5f5a-6458-438a-b8c7-78a26974ae98.5492556a3e46d4abe66f9ffc0fb22665.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecee5f5a-6458-438a-b8c7-78a26974ae98.5492556a3e46d4abe66f9ffc0fb22665.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (146658675, 'Stayman Apple, Each', 0.98, '681131124300', 'short description is not available', 'Stayman Apple, Each', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (146912822, 'Gold Delicious Apples, 3lb Bag', 3.42, '405559309817', 'short description is not available', 'Gold Delicious Apples, 3lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/18a3ca48-62f6-42c5-9637-b04394ded669_1.5a234bb1d7bd5799a31dfe59ee4e8532.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18a3ca48-62f6-42c5-9637-b04394ded669_1.5a234bb1d7bd5799a31dfe59ee4e8532.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18a3ca48-62f6-42c5-9637-b04394ded669_1.5a234bb1d7bd5799a31dfe59ee4e8532.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (147038309, 'Braeburn Apple, Each', 0.98, '681131124331', 'short description is not available', 'Braeburn Apple, Each', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (147204902, 'Fresh Organic Oranges, 3 lb Bag', 5.97, 'deleted_400094666432', 'Enjoy the fresh sweetness of Marketside Organic Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite adult beverage. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Marketside Organic Oranges add flavor to any meal or beverage. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Organic Oranges 3lb bag Great source of vitamin C Certified USDA organic Use to add zest and flavor to your meals and beverages Use as a garnish for your favorite adult beverage Enjoy on their own or in a variety of recipes Serve with your pancake breakfast or make a smoothie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/35e5e43b-d7f7-4c05-ad55-d2df5404c1cd_1.8a8b9be88694f526967d6d5b24c78bae.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35e5e43b-d7f7-4c05-ad55-d2df5404c1cd_1.8a8b9be88694f526967d6d5b24c78bae.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35e5e43b-d7f7-4c05-ad55-d2df5404c1cd_1.8a8b9be88694f526967d6d5b24c78bae.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (147348986, 'Green Lime, 1 Each', 1.57, '400094986257', 'Green Lime, 1 Each', 'Lima Verde', 'Unbranded', 'https://i5.walmartimages.com/asr/4c195d67-0b07-46f8-b242-b80ee435ccdb.9646b96390ea44bad3467705da9a11bb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4c195d67-0b07-46f8-b242-b80ee435ccdb.9646b96390ea44bad3467705da9a11bb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4c195d67-0b07-46f8-b242-b80ee435ccdb.9646b96390ea44bad3467705da9a11bb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (147688715, 'Wrapped Watermelon Quarters', 3.28, '077745225357', 'short description is not available', 'Wrapped Watermelon Quarters', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (148479111, 'Red Delicious Apples 3 Lb Bag', 3.42, '847473005787', 'short description is not available', 'Red Delicious Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (148582375, 'Manzana Organica Gala, 3 Lb.', 7.97, '400094307908', 'Manzana Organica Gala, 3 Lb.', 'Organic Manzana Gala', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (148636252, 'Fresh Cut Pineapple', 1.97, '224133000007', 'short description is not available', 'Fresh Cut Pineapple', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (148660296, 'Fresh Mcintosh Apples, 5 lbs Tote', 35.97, '681131124201', 'Indulge in the crisp and succulent flavor of whole Macintosh apples – the perfect snack for any time of day! Our juicy and fresh produce is sourced directly from the growers and contains no artificial colors or preservatives. Packed with essential nutrients and fiber, Macintosh apples make for a delicious and healthy snack that\'ll keep you energized and satisfied all day long!', 'Crisp & juicy Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b52bfce0-fa29-4aae-a431-96e7aec61e5d.54cfdb525ebed061758b86d3a746944a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b52bfce0-fa29-4aae-a431-96e7aec61e5d.54cfdb525ebed061758b86d3a746944a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b52bfce0-fa29-4aae-a431-96e7aec61e5d.54cfdb525ebed061758b86d3a746944a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (148960971, 'Platanos Frescos, cantidad individual', 1.08, '405560823623', 'Platanos Frescos', 'Platanos Frescos Caja Platanos Frescos Caja Platanos Frescos Caja', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1aee9064-91f0-453e-98f0-b74db05e29d6.042fc0cbb3c38e4fbc14c6957d105ad7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aee9064-91f0-453e-98f0-b74db05e29d6.042fc0cbb3c38e4fbc14c6957d105ad7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aee9064-91f0-453e-98f0-b74db05e29d6.042fc0cbb3c38e4fbc14c6957d105ad7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (149006406, 'Small Bagged Oranges', 4.12, 'deleted_072240757341', 'short description is not available', 'Small Bagged Oranges', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (149035112, 'Yellow Flesh Peaches, per Pound', 1.58, '400094484371', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (149237862, '180pc Apple Gala 3#', 561.6, '405667977847', 'short description is not available', '180pc Apple Gala 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (149669949, 'Fresh Gala Apples, 3lb', 4.97, '033383084626', 'Gala fresh apples are sweet and mild with a subtle floral aroma making them perfect for breakfast, lunch, dinner, and dessert. Perfect for snacking, they have a creamy white flesh with low acidity. Chop the apples up and add them to a salad with walnut, mixed greens, and a poppy seed vinaigrette for a crunchy delicious salad that you can enjoy for lunch or dinner. Add it to your favorite smoothie or juice blend for a morning pick me up to get your day started right. Serve with a dollop of peanut butter and enjoy as a healthy snack that both kids and adults will love.', 'Sweet and mild with a subtle floral aroma Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidity', 'Fresh', 'https://i5.walmartimages.com/asr/af429a77-d9b3-492c-bdce-a37a1352127d.cb79424e07c374f20a2a09991c28b4bd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af429a77-d9b3-492c-bdce-a37a1352127d.cb79424e07c374f20a2a09991c28b4bd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af429a77-d9b3-492c-bdce-a37a1352127d.cb79424e07c374f20a2a09991c28b4bd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (149875299, 'Fresh Red Cherries, 2.25 lb Bag', 11.88, '628893000022', 'Fresh Dark Sweet Washington Cherries, 32 Oz.', 'Fresh Dark Sweet Washington Cherries', 'Fresh Produce', 'https://i5.walmartimages.com/asr/df09a170-3ae2-47ab-87f1-fdfa5c9565ee.10d08c0ac5fd99b53856ca15954a2026.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/df09a170-3ae2-47ab-87f1-fdfa5c9565ee.10d08c0ac5fd99b53856ca15954a2026.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/df09a170-3ae2-47ab-87f1-fdfa5c9565ee.10d08c0ac5fd99b53856ca15954a2026.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (149908720, 'Fresh Yellow Nectarines, Lb.', 1.88, 'deleted_405535277536', 'Savor the irresistible taste of these Fresh Yellow Nectarines. With a red and yellow coloration, these juicy nectarines are round, slightly heart-shaped with smooth skin. The flesh is soft and yellow with a sweet flavor and a slightly acidic taste. For breakfast, you can make a sweet fruit bowl with sliced nectarines, strawberries, pineapple, banana, and kiwi. For an extra special treat, top with a dollop of whipped cream. For dessert, you could use them to make a tasty crisp or a crowd-pleasing cobbler. Treat the entire family to the sweet flavor of Fresh Yellow Nectarines.', 'Juicy and fresh yellow nectarines Add to baked goods for a unique flavor Use to top your salad for extra flavor or make a tasty fruit bowl Slice as a sweet topping for waffles or pancakes Add to iced tea to create a refreshing summertime flavor', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/ecee5f5a-6458-438a-b8c7-78a26974ae98.5492556a3e46d4abe66f9ffc0fb22665.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecee5f5a-6458-438a-b8c7-78a26974ae98.5492556a3e46d4abe66f9ffc0fb22665.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecee5f5a-6458-438a-b8c7-78a26974ae98.5492556a3e46d4abe66f9ffc0fb22665.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (149938827, 'Fresh Yellow Nectarines, 2 lb Bag', 4.83, '788814320759', 'Savor the irresistible taste of these Fresh Yellow Nectarines. With a red and yellow coloration, these juicy nectarines are round, slightly heart-shaped with smooth skin. The flesh is soft and yellow with a sweet flavor and a slightly acidic taste. For breakfast, you can make a sweet fruit bowl with sliced nectarines, strawberries, pineapple, banana, and kiwi. For an extra special treat, top with a dollop of whipped cream. For dessert, you could use them to make a tasty crisp or a crowd-pleasing cobbler. Treat the entire family to the sweet flavor of Fresh Yellow Nectarines.', 'Fresh Yellow Nectarines, 2 lb Carton Add to baked goods for a unique flavor Use to top your salad for extra flavor or make a tasty fruit bowl Slice as a sweet topping for waffles or pancakes Add to iced tea to create a refreshing summertime flavor', 'Unbranded', 'https://i5.walmartimages.com/asr/fe56fa6a-09b8-4b74-8914-73603f49c498.b3a2d5752a7ca3a9dd910c54cf5ca6b5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fe56fa6a-09b8-4b74-8914-73603f49c498.b3a2d5752a7ca3a9dd910c54cf5ca6b5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fe56fa6a-09b8-4b74-8914-73603f49c498.b3a2d5752a7ca3a9dd910c54cf5ca6b5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (150401354, 'Packed Lemons, 1 Each', 3.47, '890685001351', 'Packed Lemons, 1 Each', 'Limones Empacados', 'Packed', 'https://i5.walmartimages.com/asr/33e3a080-7a51-4f05-86ad-a0c77b13a5ce.5b7806f9573718f631b518bd9ea3ddd3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/33e3a080-7a51-4f05-86ad-a0c77b13a5ce.5b7806f9573718f631b518bd9ea3ddd3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/33e3a080-7a51-4f05-86ad-a0c77b13a5ce.5b7806f9573718f631b518bd9ea3ddd3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (150485413, 'National Brand Fresh Fuji Apples, 8/Pack', 5, '041163453463', 'Our fresh produce of Fuji apples are a delicious variety belonging to the genus epithat \"Malus\". Bursting with sweetness and a crisp texture, these whole apples are perfect for snacking or cooking up a storm in the kitchen. Packed with flavor and nutrition, our Fuji apples are a must-have addition to your healthy lifestyle. Order now and savor the taste of these amazing fruits!', 'Super sweet Fresh and sophisticated flavor Hints of spice and savory earth character Juicy and aromatic Healthy snack', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8ab0e092-accf-44c7-bdf7-b370d2177e48.eef64f686b78eb19e6f13a108b1c5a96.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ab0e092-accf-44c7-bdf7-b370d2177e48.eef64f686b78eb19e6f13a108b1c5a96.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ab0e092-accf-44c7-bdf7-b370d2177e48.eef64f686b78eb19e6f13a108b1c5a96.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (150495343, 'Fuji Apples 3 Lb Bag', 3.94, '405544384430', 'short description is not available', 'Fuji Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (150795406, 'Yellow Flesh Peaches, per Pound', 1.58, '400094391082', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (150804164, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_400094237113', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (150984213, 'Orange Holiday Box, 1 Each', 9.98, '614200324073', 'Orange Holiday Box, 1 Each', 'Orange Holiday Box', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (151443931, 'Fresh Grapefruit, Each', 11.97, '032601502508', 'Grapefruit is the perfect balance between tart and sweet. The balance between tart and sweet is great for both savory and sweet dishes any time of day. Enjoy half of a grapefruit sprinkled with sugar with some eggs in the morning for a light, sweet breakfast. Slice it up and put in a salad with spinach, avocado, and red onion topped with a mustard and balsamic vinegar dressing for lunch or dinner. Make delicious grapefruit bars that showcase the sweet and tartness of this versatile fruit. For an adult recipe juice the grapefruit and pair with some simple syrup and alcohol for a refreshing cocktail. This fruit is the perfect addition to a healthy diet as it is a great source of vitamin C and vitamin A. With such versatility, Grapefruit will become a pantry staple in your home.', 'Great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a grapefruit sprinkled with sugar in the morning, slice it up and put it in salad for lunch or dinner, or make grapefruit bars Great source of vitamin C and vitamin A', 'Unbranded', 'https://i5.walmartimages.com/asr/4ddf5bd9-20aa-483f-858a-8e7b636989e4.422b7ae9ad103680a1fb86e708b34815.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ddf5bd9-20aa-483f-858a-8e7b636989e4.422b7ae9ad103680a1fb86e708b34815.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ddf5bd9-20aa-483f-858a-8e7b636989e4.422b7ae9ad103680a1fb86e708b34815.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (151762086, 'Fresh Honeycrisp Apples, 3 lb Bag', 5.46, '033383088044', '3 lb bag of Honeycrisp apples — fresh, crisp, and juicy. Crisp. Juicy. Perfectly sweet. Bite into the ultimate apple experience with Honeycrisp apples — loved for their refreshing crunch and balanced sweet-tart flavor. Each bite bursts with juice, making them an irresistible favorite for snacking, baking, and salads alike. Hand-picked at peak ripeness, these Honeycrisp apples deliver farm-fresh quality in every 3 lb bag. Great for families, lunchboxes, and meal prep. Crisp and juicy texture with a sweet, refreshing flavor. Perfect for snacking, salads, and baking. Good source of fiber and vitamin C. Hand-picked for peak ripeness and freshness. Enjoy chilled for a refreshing snack. Slice into salads for extra crunch and sweetness. Pair with peanut butter or cheese for a healthy combo. Bake into pies, crisps, or muffins for homemade treats.', 'Crisp, juicy Honeycrisp apples with sweet-tart flavor 3 lb bag—perfect for families, snacks, and meal prep Fresh, hand-picked apples for premium quality and taste Great for healthy snacks, lunchboxes, salads, and baking Naturally high in fiber and vitamin C Perfect balance of sweetness and crunch in every bite Ideal for apple pies, crisps, tarts, and caramel apples Farm-fresh Honeycrisp apples picked at peak ripeness Great value and freshness from Walmart Produce', 'Marketside', 'https://i5.walmartimages.com/asr/fc711cde-aa4a-49c2-8870-1d909354b78e.fd77ae610969e9058336736a4e65f7fd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fc711cde-aa4a-49c2-8870-1d909354b78e.fd77ae610969e9058336736a4e65f7fd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fc711cde-aa4a-49c2-8870-1d909354b78e.fd77ae610969e9058336736a4e65f7fd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (151988482, 'Disney Frozen II Tri-Color Seedless Table Grapes, 3 Lb', 5.98, '814326010298', 'Frozen II Tri-Color Grapes are seedless for your convenience and deliver a pleasantly refreshing taste in every bite. These California Grown grapes have a firm crisp texture with a sweet mild grape flavor. Grapes that are naturally high in vitamins and low in calories. Enjoy them as or use as an ingredient in sweet and savory dishes. Use them sliced in salads, pies, tarts, chicken salad, veggie wraps and more. They can also be frozen and whipped into an instant sorbet or smoothie for a refreshing frozen treat. Tri-Color grapes can be paired with soft texture cheeses, olives and charcuteries for an easy appetizer. They are great for health conscious individuals as they are high in natural antioxidant qualities that can help boost overall health. They are also a nutrient dense fruit that is low in calories. This container comes with three pounds of grapes making it easy to stock up on your favorite fruit. Enjoy fresh from the farm flavors with Frozen II Tri-Color Seedless Grapes. Before eating wash grapes under cool running water for about 30 seconds to a minute. To ensure freshness store grapes in refrigerator at 32-34 degrees. You can also freeze grapes to enjoy for a refreshing, nutritious frozen treat.', 'Disney Frozen II Tri-Color Seedless Table Grapes, 3 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b1f2a83c-8e76-4172-9601-0c825760f101_1.ab3da40a7ff7541a83315b4a624ee104.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b1f2a83c-8e76-4172-9601-0c825760f101_1.ab3da40a7ff7541a83315b4a624ee104.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b1f2a83c-8e76-4172-9601-0c825760f101_1.ab3da40a7ff7541a83315b4a624ee104.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (152092308, 'Fresh Red Seedless Grapes, 1 Lb', 3.68, '033383250038', 'Face Glitters Body Gel Sequins Liquid Eyeshadow Glitter For Face Hair Nails Cosmetic Powder Festival Glitter Makeup Material: Color: as the picture shows, (Due to the difference between different monitors, the picture may have slight color difference. please make sure you do not mind before ordering, Thank you!) Daily Dose with Dupe Cosmetics Makeup Petal Bun Blended Family Wedding Gift Shadow Seal Makeup', 'Fresh Red Seedless Grapes, 1 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (152592177, 'Fresh Granny Apple, 5 lb Bag', 5, '033383001555', 'Our Granny Smith apples are a delightfully tart and crunchy treat. With their bright green skin and firm flesh, they\'re perfect for snacking or adding a refreshing twist to your favorite recipes. These apples are packed with fiber, vitamins, and antioxidants, making them a healthy choice for anytime indulgence made with organic ingredients. Enjoy the deliciously tangy taste and characteristic juicy crunch of our fresh Granny Smith apples today.', 'Apple Granny is a classic apple variety known for its tart and tangy flavor, firm texture, and versatility in cooking and baking. Each Apple Granny is medium to large in size, with a round shape and a green background that is often streaked with red. The flesh of the Apple Granny is crisp and juicy, with a tart and acidic taste that is balanced by a subtle sweetness. This apple variety is perfect for making pies, sauces, and baked goods, but can also be enjoyed as a healthy snack. Apple Granny apples are a good source of fiber, vitamin C, and antioxidants, and are a nutritious and flavorful addition to any diet. With their distinctive taste and texture, Apple Granny apples are a popular choice for apple lovers and foodies alike.', 'Unbranded', 'https://i5.walmartimages.com/asr/aaf26660-1a7d-4f4b-961a-b07f9cd94ad7_1.4ad07051fe63abcc9eccdda62639a1f4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aaf26660-1a7d-4f4b-961a-b07f9cd94ad7_1.4ad07051fe63abcc9eccdda62639a1f4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aaf26660-1a7d-4f4b-961a-b07f9cd94ad7_1.4ad07051fe63abcc9eccdda62639a1f4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (152769711, 'Hypermart Green Pears, 1 Lb.', 2.27, '204202000008', 'Hypermart Green Pears, 1 Lb.', 'Hypermart Pera Verde Argentina', 'Hypermart', 'https://i5.walmartimages.com/asr/5a6421af-11b3-401b-8457-975765ef9db0_1.60acae23e90e1141a5e4050bdba533c5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a6421af-11b3-401b-8457-975765ef9db0_1.60acae23e90e1141a5e4050bdba533c5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a6421af-11b3-401b-8457-975765ef9db0_1.60acae23e90e1141a5e4050bdba533c5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (152781448, 'Ruby Cherries, 15 Oz.', 5.98, '888289402155', 'Ruby Cherries, 15 Oz.', 'Ruby Cherries, 15 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/af03e207-8965-45af-b06e-3b429cce4b03.17803005180ed41c6ed488470be1312e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af03e207-8965-45af-b06e-3b429cce4b03.17803005180ed41c6ed488470be1312e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af03e207-8965-45af-b06e-3b429cce4b03.17803005180ed41c6ed488470be1312e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (152819719, 'Pluot, 1 lb Carton', 2.28, '847081000563', 'short description is not available', 'Pluot 1lb Clam', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (152993731, 'Fresh Guineo Nino, Puerto Rico, 2 lb Bag', 3.57, '893108000290', 'Guineo Nino, 2 Lb.', 'Guineo Nino 2 Lb', 'Unbranded', 'https://i5.walmartimages.com/asr/53f995ca-ea43-4ed0-a9f0-bb9b3bf85a75.6e5131c2fd1eb75390c49dc62827da97.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/53f995ca-ea43-4ed0-a9f0-bb9b3bf85a75.6e5131c2fd1eb75390c49dc62827da97.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/53f995ca-ea43-4ed0-a9f0-bb9b3bf85a75.6e5131c2fd1eb75390c49dc62827da97.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (153278640, 'Organic Fresh Red Seedless Grapes, 1 lb Package', 5.98, '000000944991', 'Marketside Organic Red Grapes are seedless for you convenience and deliver a pleasantly refreshing taste in every bite. These fresh grapes have a firm texture and a vibrant red color. Enjoy them as a healthy snack or use as an ingredient in sweet and savory dishes. Use them in salads, pies, tarts, chicken salad and more. They are great for health conscious individuals as they are USDA organic. They are also a nutrient dense fruit that is low in calories. This container comes with two pounds of grapes making it easy to stock up on your favorite fruit. Enjoy fresh from the farm flavors with Marketside Organic Red Grapes.Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Fresh Organic Red Seedless Grapes Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (153336862, 'Snack Fresh Pine Spears 2.7 Oz', 0.98, '074641010063', 'short description is not available', 'Snack Fresh Pine Spears 2.7 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (153431095, 'Ambrosia Apples 3 Lb Bag', 4.94, '405559309718', 'short description is not available', 'Ambrosia Apples 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (153466616, 'Fresh Plums, 2 lb Bag', 5.58, '847081000440', 'Discover the delightful sweetness of Moonlight Plums. Enjoy them on their own as a sweet snack or use them in a variety of recipes. For breakfast, you could slice them to put into your oatmeal or use them to make a delicious yogurt parfait. You can also use these juicy plums in several baking recipes including a comforting crisp topped with ice cream, a tasty upside-down cake, or a scrumptious tart. You can even use them to make a jam or a smooth sorbet. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Moonlight Plums.', 'Sweet and juicy plums Enjoy on their own as a satisfying Bag snack Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Ideal snack to take to work or on a road trip', 'Fresh Produce', 'https://i5.walmartimages.com/asr/487ef962-3184-402f-bcf5-01da9b9cd544.f4d05caaeeeef5ad829478780c48974e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/487ef962-3184-402f-bcf5-01da9b9cd544.f4d05caaeeeef5ad829478780c48974e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/487ef962-3184-402f-bcf5-01da9b9cd544.f4d05caaeeeef5ad829478780c48974e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (153495541, 'Manzana Gala, 1 Lb.', 1.77, 'deleted_400094433331', 'Manzana Gala, 1 Lb.', 'Manzana Gala', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/8d883673-bcdc-4d0e-a377-bc0ef667c26e.6020cde76cad8270758f69c6a7638a7f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d883673-bcdc-4d0e-a377-bc0ef667c26e.6020cde76cad8270758f69c6a7638a7f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d883673-bcdc-4d0e-a377-bc0ef667c26e.6020cde76cad8270758f69c6a7638a7f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (153584093, '10lb Bag Of Red Delicious Apples', 8.92, '033383000046', 'Shock absorbing and weather resistant neoprene material is perfect to protect your device. Looking for case that protects your tablet as well store additional accessories like Smart Case, this is the solution of your problems. Internal Dimensions of this case are 7.75 x 5.25 inches while external 8.5 x 5.875 inches.', 'Fashion Sleeve Pouch for your tablet is Tough enough to protect your tablet yet stylish to take everywhere you go. The high-grade and highly durable neoprene is water resistant and offers advanced protection from bumps, scratches and dust. And the smooth, non-scratch interior lining offers enhanced screen protection while your device is tucked away. Ideal for any tablet or e-book up to 7.75 inches, this no-bulk case easily slides into your bag, briefcase or backpack and perfect for those of you on the go. This Sleeve is compatible for most Tablets or eBook readers upto 7.75 inch. Product Features: Constructed of shock-absorbing & weather resistant neoprene material Non-abrasive material lines interior securing your device for safe travel and storage Slim and lightweight design provides low-profile protection against every day wear and tear Stylish exterior graphic and Dual zippers make accessing your device quick and easy', 'Unbranded', 'https://i5.walmartimages.com/asr/ba64186b-9e72-42d1-86ef-b30bd0b4e13c_1.53359afa8d5ee64fba4e5b1c1169961d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ba64186b-9e72-42d1-86ef-b30bd0b4e13c_1.53359afa8d5ee64fba4e5b1c1169961d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ba64186b-9e72-42d1-86ef-b30bd0b4e13c_1.53359afa8d5ee64fba4e5b1c1169961d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (153589350, 'True Fruit Ruby Grapefruit No Sugar Added 7 oz', 1.28, 'deleted_810051010497', 'TRUE FRUIT: FRUIT GRPEFRUIT LITE SS (7.000 OZ)', 'GRPFRUIT LITE 7Z TF', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f02aa6f7-25d7-4350-b7b7-d5598327791f.0564cc072ab89019238d3ad5baaaa4b1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f02aa6f7-25d7-4350-b7b7-d5598327791f.0564cc072ab89019238d3ad5baaaa4b1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f02aa6f7-25d7-4350-b7b7-d5598327791f.0564cc072ab89019238d3ad5baaaa4b1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (154211430, 'Melissa\'s Sweet Young Coconuts, each', 3.48, '045255119671', 'Coconut, Sweet Young, Wrapper 1 CT This sweet coconut has a tender flesh and is full of refreshing water. For nutritional information and recipes, contact: www.melissas.com. Product of Thailand. To Prepare: Using a heavy knife, carefully cut off the diamond-shaped point of the coconut. Poke a hole in the exposed shell and pry off the circular crown. Slide in a straw and savor this delicious, sweet water for a refreshing, tropical drink! Perishable/Keep refrigerated. 1 coconut PO Box 21127 Los Angeles, CA 90021 800-588-0151', 'Coconut, Sweet Young This sweet coconut has a tender flesh and is full of refreshing water. www.melissas.com. For nutritional information and recipes contact: www.melissas.com; 1-800-588-0151. Product of Thailand.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a8fd0057-8825-4f6d-91b1-e641ab3a531c.874d372ed9334f54e03b757251b5bbaa.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a8fd0057-8825-4f6d-91b1-e641ab3a531c.874d372ed9334f54e03b757251b5bbaa.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a8fd0057-8825-4f6d-91b1-e641ab3a531c.874d372ed9334f54e03b757251b5bbaa.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (154218942, 'Organic Valencia Orange, 4 Lb.', 9.97, '032601501259', 'Organic Valencia Orange, 4 Lb.', 'Organic Valencia Orange', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (154345805, 'Walmart Produce Berry Blend 36 Oz', 11.98, '717524721648', 'short description is not available', 'Walmart Produce Berry Blend 36 Oz', 'WALMART PRODUCE', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (154392923, 'Jazz Apples 5 Lb Bag', 5.92, '066022000114', 'short description is not available', 'Jazz Apples 5 Lb Bag', 'Enza Costa', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (154594766, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094381670', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (154717836, 'Pineapple 16 Oz', 3.88, '813055012931', 'In season from March through June, pineapples are juicy and sweet. This versatile tropical fruit is delicious sliced, cubed into salads and in dessert recipes.', 'Pineapple 16 Oz', 'LANCASTER (LANCASTER FOODS LLC)', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (154812550, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094274958', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (154966581, 'Organic Tangelos, 4 Lb.', 3.98, '880612150030', 'Organic Tangelos, 4 Lb.', '4# Organic Tangelo', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (155140283, 'Red Grapes 3oz Bag', 1.27, 'deleted_859002004154', 'short description is not available', 'Red Grapes 3oz Bag', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (155215380, 'Pineapple 32 Oz', 7.97, '813055012962', 'short description is not available', 'Pineapple 32 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (155314356, 'Designer 7.75 Inch Soft Neoprene Sleeve Case Pouch for Alcatel ONETOUCH POP 7 LTE, Acer Iconia One 7, LG G Pad, Amazon Fire 7, Kindle/ Kindle HD 7, RCA 7 Tablet - Rose', 3.74, '033383092553', 'Shock absorbing and weather resistant neoprene material is perfect to protect your device. Looking for case that protects your tablet as well store additional accessories like Smart Case, this is the solution of your problems. Internal Dimensions of this case are 7.75 x 5.25 inches while external 8.5 x 5.875 inches.', 'Fashion Sleeve Pouch for your tablet is Tough enough to protect your tablet yet stylish to take everywhere you go. The high-grade and highly durable neoprene is water resistant and offers advanced protection from bumps, scratches and dust. And the smooth, non-scratch interior lining offers enhanced screen protection while your device is tucked away. Ideal for any tablet or e-book up to 7.75 inches, this no-bulk case easily slides into your bag, briefcase or backpack and perfect for those of you on the go. This Sleeve is compatible for most Tablets or Netbooks upto 7.75 inch. This pouch can accommodate your tablet with 7.75 inch width like Alcatel ONETOUCH POP 7 LTE, Acer Iconia One 7, LG G Pad, Amazon Fire 7, Kindle/ Kindle HD 7, RCA 7 Tablet . Product Features: Constructed of shock-absorbing & weather resistant neoprene material Non-abrasive material lines interior securing your device for safe travel and storage Slim and lightweight design provides low-profile protection against every day wear and tear Stylish exterior graphic and Dual zippers make accessing your device quick and easy', 'Unbranded', 'https://i5.walmartimages.com/asr/8b72ddd0-261c-4d95-b542-894b5db1dcd8_1.63e2ddc98e61b968ea4b9ebf5258c481.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8b72ddd0-261c-4d95-b542-894b5db1dcd8_1.63e2ddc98e61b968ea4b9ebf5258c481.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8b72ddd0-261c-4d95-b542-894b5db1dcd8_1.63e2ddc98e61b968ea4b9ebf5258c481.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (155577101, 'Fruit Medley 32oz', 6.98, '813055012887', 'short description is not available', 'Fruit Medley 32oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (155599563, 'Black Seedless Grape', 1.98, 'deleted_400094234884', 'short description is not available', 'Black Seedless Grape', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (155700350, 'Fresh Red Delicious Apples, 3 lb Bag', 4.47, '033383080642', 'Red Delicious 3lb Apple Bag', 'Red Delicious Sweet, crisp, and juicy Creamy white flesh with low acidity Excellent snacking apple Higher antioxidants due to the rich, deep red skin Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipesMake apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp, and apple pie', 'Timber Ridge Fruit Farm, LLC', 'https://i5.walmartimages.com/asr/fcee6e93-8d1d-40cf-89f7-c376710172d7.94f546efe5957e73ed1810f91c2497cf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fcee6e93-8d1d-40cf-89f7-c376710172d7.94f546efe5957e73ed1810f91c2497cf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fcee6e93-8d1d-40cf-89f7-c376710172d7.94f546efe5957e73ed1810f91c2497cf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (155898432, 'Stemilt Lil Snappers Apples, 3 Lb.', 4.67, '741839005902', 'Apples, Gala, Lil Snappers, Bag 3 LB Sweet, snappy and aromatic. Kid size fruit. Scan me! Resealable. World famous fruit. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us YouTube; Facebook; Twitter; Pinterest. For fun recipes activities and more, visit www.lilsnappers.com. Responsible choice. Fruits & veggies more matters. Meets or exceeds U.S. extra fancy. 2-1/2 inch min dia. Produce of USA. 3 lb (1.36 kg) Wenatchee, WA 98801', 'Apples, GalaSweet, snappy and aromatic. Kid size fruit. Scan me! Resealable. World famous fruit. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us YouTube; Facebook; Twitter; Pinterest. For fun recipes activities and more, visit www.lilsnappers.com. Responsible choice. Fruits & veggies more matters. Meets or exceeds U.S. extra fancy. 2-1/2 inch min dia. Produce of USA.', 'Stemilt', 'https://i5.walmartimages.com/asr/360e0b98-944e-467a-bd54-70c901dea4bf_1.a73370cdb6f4e046262ee695ac594ebb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/360e0b98-944e-467a-bd54-70c901dea4bf_1.a73370cdb6f4e046262ee695ac594ebb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/360e0b98-944e-467a-bd54-70c901dea4bf_1.a73370cdb6f4e046262ee695ac594ebb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (156312838, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094046876', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (156314893, 'Strawberry/cantaloupe/grapes 32 Oz', 8.48, '074641054074', 'short description is not available', 'Strawberry/cantaloupe/grapes 32 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (156437706, 'WHOLLY GUACAMOLE Homestyle, 16 oz', 6.46, 'deleted_616112027868', 'Need a little flavor in your day? We have an easy way to make your meals OMGuac! WHOLLY GUACAMOLE Homestyle Guacamole contains precut chunks of 100% Hass avocados with diced veggies to give you that homemade taste without any of the hassle. Dip it with veggies and pretzels. Top it on burgers and salads. Spread it on sandwiches and wraps. Love it! Every meal of the day (and some in between!). Goodbye mayo, hello Guac! Dip it, top it, spread it, love it. WHOLLY GUACAMOLE is a trademark of Avomex, Inc.', 'That homemade taste without the hassle of tricky avocados. America’s #1 selling refrigerated guacamole Keep refrigerated 50 calories per serving No Preservatives added and gluten free', 'WHOLLY GUACAMOLE', 'https://i5.walmartimages.com/asr/67cbf04a-f964-432a-877a-2ca48205ce58_1.9aab8fdc7715f7e51d5d54bd23632f06.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/67cbf04a-f964-432a-877a-2ca48205ce58_1.9aab8fdc7715f7e51d5d54bd23632f06.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/67cbf04a-f964-432a-877a-2ca48205ce58_1.9aab8fdc7715f7e51d5d54bd23632f06.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (156471039, 'Gala Apples 4 Pack', 3.98, '033383047805', 'short description is not available', 'Gala Apples 4 Pack', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (156640211, 'Fresh Yellow Watermelon, Each', 5.77, '823298601830', 'Enjoy the sweet, refreshing taste of a Fresh Yellow Seedless Watermelon. Watermelons are great for breakfast, lunch, dessert, or when you want a snack. Watermelon is a good source of vitamin C, vitamin A, and potassium making them an excellent healthy treat. Cut the watermelon into chunks for a quick snack, infuse it with water for a refreshing drink, or chop it up and make a mouthwatering watermelon salad with feta and mint. This watermelon is great for sharing with friends and family or keep it for yourself. Bring it to your next cookout or get it as a sweet after dinner treat with friends. Make every occasion special with a Fresh Yellow Seedless Watermelon.', 'Fresh Seedless Yellow Watermelon Enjoy a fresh Seedless Yellow Watermelon on its own or add to a mixed fruit salad Serve at your next neighborhood barbecue Get creative and make a watermelon cocktail or a refreshing sorbet Sweet and juicy Explore all the delicious ways to add fresh yellow watermelon to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/39dee6b3-ee6a-4774-9603-14f435fd7678.23e48889862abc7ec4e0e2f0a7b43555.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39dee6b3-ee6a-4774-9603-14f435fd7678.23e48889862abc7ec4e0e2f0a7b43555.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39dee6b3-ee6a-4774-9603-14f435fd7678.23e48889862abc7ec4e0e2f0a7b43555.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (156765768, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094608333', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (156901895, 'Organic Bartlett Pears, 3 Lb.', 4.96, '033383300788', 'Organic Bartlett Pears, 3 Lb.', 'Organic Bartlett Pears 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a6fbdd1e-9ba0-4018-be9e-e103a7aff0c8_1.7bea0e2f51b084242fcf154eeae372d0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6fbdd1e-9ba0-4018-be9e-e103a7aff0c8_1.7bea0e2f51b084242fcf154eeae372d0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6fbdd1e-9ba0-4018-be9e-e103a7aff0c8_1.7bea0e2f51b084242fcf154eeae372d0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (156905449, 'Fresh Cup of Cherries, Half Pint', 2.88, '888289402117', 'Fresh Cup of Cherries, Half Pint', 'Fresh Cup Of Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (157005099, 'Fresh Organic Peaches, 2 lb Bag', 5.66, '683953001449', 'Discover the delightful sweetness of Fresh Organic Peaches. Enjoy them on their own as a sweet snack or use them in a variety of recipes. For breakfast, you could slice them to put into your oatmeal or use them to make a delicious yogurt parfait. You can also use these organic peaches in several baking recipes including a comforting crisp topped with ice cream, a tasty upside-down cake, or a scrumptious tart. You can even use them to make a jam or a smooth sorbet. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Fresh Organic Peaches.', 'Fresh Organic Peaches, 2 lb Bag Sweet and juicy organic peaches Enjoy on their own as a satisfying snack Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Ideal snack to take to work or on a road trip', 'Fresh Produce', 'https://i5.walmartimages.com/asr/248fc84d-1607-415c-955e-788cd596d218.03af188de26b138b710defbe4b5c566c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/248fc84d-1607-415c-955e-788cd596d218.03af188de26b138b710defbe4b5c566c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/248fc84d-1607-415c-955e-788cd596d218.03af188de26b138b710defbe4b5c566c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (157008929, 'Seedless Green Grapes, 2 lb bag', 2.73, 'deleted_813552010034', 'short description is not available', 'Green Grapes Seedless Bag, 2 lbs.', '', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (157184028, 'Fresh Bosc Pears, 3 lb Bag', 5.47, '033383300511', 'The fresh Bosc Pear is a one-of-a-kind fruit. Featuring a 3 Lb Bag, the Pear white flesh that is slightly firmer and denser than other pears, this unique winter variety are widely used for baking, broiling, or poaching. With subtle notes of cinnamon and nutmeg, this flavorful pear is a great choice for baking as well; try baking these pears with walnuts and honey or creating a bosc pear crumble with brown sugar, rolled oats, cinnamon, and butter. Pears are also known to have great health benefits, as they include a wide variety of nutrients like folate, vitamin C, copper, and potassium. No matter how you enjoy, Bosc Pears are sure to leave your taste buds satisfied.', 'Fresh Bosc Pears, 3 lb Bag Sweet, crisp, and juicy Excellent snacking pear Make a creamy smoothie or a nutritious juice blend Add to your salad for extra crunch and flavor Adds flavor to a variety of recipes Make pear butter or poached pears Make sweet desserts like pear cobbler, pear crisp or pear tarts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3ca70784-4dfc-40c9-8f42-f0c4155d8c5f.fa3bb306d71ddf06055217909b92cc62.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3ca70784-4dfc-40c9-8f42-f0c4155d8c5f.fa3bb306d71ddf06055217909b92cc62.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3ca70784-4dfc-40c9-8f42-f0c4155d8c5f.fa3bb306d71ddf06055217909b92cc62.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (157249826, 'Valencia Oranges, 3 lb Bag', 4.98, '033383101163', 'short description is not available', '', 'Fresh Produce', 'https://i5.walmartimages.com/asr/58883aba-8ce4-4d6b-8cbd-7368e4dc0f30.3e590d8ad1eb2cc6e7973838f1ace692.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58883aba-8ce4-4d6b-8cbd-7368e4dc0f30.3e590d8ad1eb2cc6e7973838f1ace692.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58883aba-8ce4-4d6b-8cbd-7368e4dc0f30.3e590d8ad1eb2cc6e7973838f1ace692.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (157250373, 'Marketside Pineapple, 16 oz Tray', 4.97, '681131180467', 'Enjoy the sweet, tropical flavor of Marketside Pineapple. These precut chunks are great for breakfast, lunch, dessert, or when you want a snack. Pineapple is a good source of vitamin C, vitamin A and vitamin B6 making them an excellent healthy treat. You can eat the chunks right out of the container, infuse them with water and mint for a refreshing drink, or chop them up and make a mouthwatering pineapple salsa with jalapenos, tomatoes, and red onion. With 16-ounces in each container, this pineapple is great for sharing with friends and family or keep it for yourself. It comes in a closable container to help maintain freshness. Bring home Marketside Pineapple today for a refreshing, healthy treat. Marketside provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Marketside item.', 'Marketside Pineapple 16 oz Comes in a re-closable container to help maintain freshness Great for breakfast, lunch, dessert, or when you want a snack No preservatives, artificial colors or artificial flavors Convenient and portable Share with friends and family or keep for yourself Make a fruit bowl topped with whipped cream or a yogurt parfait Enjoy on their own or in a variety of recipes', 'Marketside', 'https://i5.walmartimages.com/asr/f4376da2-1090-4847-b1f1-5cee6e1af8ba.fa5e9b190849ba0a897c8f83347a6021.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f4376da2-1090-4847-b1f1-5cee6e1af8ba.fa5e9b190849ba0a897c8f83347a6021.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f4376da2-1090-4847-b1f1-5cee6e1af8ba.fa5e9b190849ba0a897c8f83347a6021.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (157381791, 'Fresh Organic Granny Smith Apples, 3 lb Pouch', 5.84, '033383009889', 'Treat yourself to the delicious, crisp taste of Marketside Organic Granny Smith Apples. These apples are known for their bright green skin speckled with faint white spots, bright white and crisp flesh, and tart, acidic yet subtly sweet flavor. Enjoy one with breakfast or lunch or as a fresh snack any time of day. Best of all, these delicious apples hold up well when cooked and can be used in both savory and sweet dishes. They are a favorite of pie bakers and can be used for snacking, salads, pairing, or made into a delicious sauce that pairs perfectly with pork. Try incorporating them into soups and compotes or use them to make yummy jam or juice. Use them to create apple crisp, pie, and strudel for a sweet treat. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Marketside Organic Granny Smith Apples. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to delivering freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Bright green skin speckled with faint white spots Bright white, crisp flesh USDA organic Tart, acidic yet subtly sweet flavor Can be enjoyed fresh or cooked into both savory and sweet dishes Meets or exceeds U.S. Extra Fancy Minimum diameter: 2.25\"', 'Marketside', 'https://i5.walmartimages.com/asr/c74d3488-a852-4732-8b5a-e937cb442670.bb2aaa079cec891fbfdc9463d0dc023a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c74d3488-a852-4732-8b5a-e937cb442670.bb2aaa079cec891fbfdc9463d0dc023a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c74d3488-a852-4732-8b5a-e937cb442670.bb2aaa079cec891fbfdc9463d0dc023a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (157512072, '3lb Bag Of Gala Apples', 5.28, '060034302150', 'short description is not available', '3lb Bag Of Gala Apples', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (157891483, 'Dark Sweet Cherries, Half Pint', 3.73, '888289403640', 'Dark Sweet Cherries, Half Pint', 'Dark Sweet Cherries 1/2 Dry Pint', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (158098953, 'Fresh Organic Black Grapes, 32 oz', 6.48, '333832506946', 'Black grapes, also sometimes known as Concord grapes or slipskin grapes, are consumed fresh or made into fresh juice, jams or jellies.', 'Fresh Organic Black Grapes, 32 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/520b62d6-f187-40bc-912a-489a8bcb0465.006c94121dd200c99545ed781fee6b77.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/520b62d6-f187-40bc-912a-489a8bcb0465.006c94121dd200c99545ed781fee6b77.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/520b62d6-f187-40bc-912a-489a8bcb0465.006c94121dd200c99545ed781fee6b77.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (158450577, 'Fresh Cut Jicama', 1.97, '224136000004', 'short description is not available', 'Fresh Cut Jicama', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (158672885, 'Paula Red Apple, Each', 1.58, '681131124294', 'short description is not available', 'Paula Red Apple, Each', 'RiverRidge', 'https://i5.walmartimages.com/asr/c8bc7c5e-eb09-4ce5-8836-836d3be45ba3.47de0b5b062dc4790d65aaaf41996445.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8bc7c5e-eb09-4ce5-8836-836d3be45ba3.47de0b5b062dc4790d65aaaf41996445.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8bc7c5e-eb09-4ce5-8836-836d3be45ba3.47de0b5b062dc4790d65aaaf41996445.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (158871007, 'Red Delicious Extra Fancy, 3 Lb.', 4.97, '818679004041', 'Red Delicious Extra Fancy, 3 Lb.', 'Red Delicious Extra Fancy 3 Lb', 'Peters Orchards', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (159106613, 'Marketside Fresh Cut Cantaloupe, 10 oz Tray', 3.12, '681131180146', 'Experience a burst of summertime goodness with this delicious Marketside Cantaloupe. This pre-cut ripe cantaloupe is juicy, sweet, and refreshing to the taste. In addition, cantaloupes are a great natural source of calcium, zinc, and iron. Enjoy some straight out of the tray, set it up for a dinner party as fruit tray, take it with you for lunch, or savor some as a delicious dessert. Pair it with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use it as a naturally sweet ingredient in a fruit salad. Add some fresh fruit to your daily menu with this Marketside Cantaloupe. Marketside provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Marketside item.', 'Marketside Cantaloupe 10 oz Pre-Cut Convenience: Fresh, sweet, juicy cantaloupe chunks are ready to eat, saving you time on preparation. Portable Packaging: Comes in a 10 oz re-closable container, making it easy for grab-and-go convenience. Nutrient-Rich: A good source of calcium, zinc, and iron, contributing to your daily nutritional needs. No Artificial Additives: Free from preservatives, artificial colors, and artificial flavors, ensuring a natural taste. Versatile Use: Perfect as a standalone snack, addition to fruit salads, or as a refreshing side dish. Perishable Item: Keep refrigerated to maintain freshness and quality.', 'Marketside', 'https://i5.walmartimages.com/asr/e659b7db-8c12-41d5-b205-529a2607efc9.205f7a3283253fe6f9ebff9250dc3148.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e659b7db-8c12-41d5-b205-529a2607efc9.205f7a3283253fe6f9ebff9250dc3148.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e659b7db-8c12-41d5-b205-529a2607efc9.205f7a3283253fe6f9ebff9250dc3148.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (159134009, 'Valencia Oranges, 1 Each', 0.97, 'deleted_791928040147', 'Valencia Oranges, 1 Each', 'Bulk Valencia Oranges', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (159602774, 'Fresh Caramel Apple Without Nuts, Each, Whole', 0.98, '034986001997', 'Savor the deliciousness of our Simple Fresh Caramel Apple, crafted with premium, plant-based ingredients. The crisp Granny Smith apple is enveloped in creamy, decadent caramel, creating a tantalizing flavor experience. Gluten-free and made with a variety of plants, this guilt-free snack is perfect for indulging your sweet tooth.', 'Simply Caramel, Due to the nature of this sticky, delicious, no-frills flavor, Simply Caramel is delicious. Fresh Apples handpicked, in a tray dipped on a special-recipe caramel for a taste that’s so simple, so delicious! Fresh Apples are used for this snack, mostly Granny Apples, but another varieties with the right level of sweetness will also make the work! The perfect healthy treat for the season. Looking for a delicious and healthy treat that\'s perfect for the season? Look no further than Simply Caramel! Made with fresh apples that are handpicked and dipped in a special-recipe caramel, this treat is so simple and yet so delicious. With a no-nuts formula, Simply Caramel is perfect for those with nut allergies or simply those who prefer a nut-free option. Also great for those with a gluten allergy as it is Gluten-Free.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/28269aff-7f28-4d22-878e-3cc6ef509708_1.cc7e8a2c0900657a391925ef159dc39a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28269aff-7f28-4d22-878e-3cc6ef509708_1.cc7e8a2c0900657a391925ef159dc39a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28269aff-7f28-4d22-878e-3cc6ef509708_1.cc7e8a2c0900657a391925ef159dc39a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (159719786, 'Fresh Gala Apples, 3 lb', 4.67, '087434007447', 'Looking for the perfect snack that\'s both delicious and healthy? Look no further than our Fresh Gala Apples! Bursting with sweet, juicy flavor and hand-picked at peak ripeness, our Gala Apples are the perfect addition to your favorite recipes or for snacking on-the-go. Order now and experience the crisp texture and refreshing taste of our Fresh Gala Apples, delivered straight to your doorstep for ultimate convenience!', 'Fresh Gala Apples, 3 lb Bag: Sweet and mild with a subtle floral aroma Fresh Gala Apples, 3 lb Bag: Sweet and mild with a subtle floral aroma Sweet and mild with a subtle floral aroma Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidityFresh Gala Apples, 3 lb Bag: Includes 3 pounds of crisp apples Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidity Includes 3 pounds of crisp apples Pair them with sharp cheeses and crackers for a stunning appetizer board Can be enjoyed fresh or cooked into both savory and sweet dishes Meets or exceeds U.S. Extra Fancy Minimum diameter: 2.25\" Make a creamy smoothie or a nutritious juice blend Perfect as a healthy treat or seasonal baking ingredient Great for packing in lunches Make a creamy smoothie or a nutritious juice blend Adds flavor to a variety of recipes Pair them with sharp cheeses and crackers for a stunning appetizer board Can be enjoyed fresh or cooked into both savory and sweet dishes Meets or exceeds U.S. Extra Fancy Minimum diameter: 2.25\" Make a creamy smoothie or a nutritious juice blend Perfect as a healthy treat or seasonal baking ingredient Great for packing in lunches Make a creamy smoothie or a nutritious juice blend Adds flavor to a variety of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ebd2f199-5ee9-4c03-a20e-2bad77147595.d78301ad27601db895884cc7fa9157b0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ebd2f199-5ee9-4c03-a20e-2bad77147595.d78301ad27601db895884cc7fa9157b0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ebd2f199-5ee9-4c03-a20e-2bad77147595.d78301ad27601db895884cc7fa9157b0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (159809222, 'Cucumbers 3-pack', 3.58, '028383001537', 'short description is not available', 'Cucumbers 3-pack', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (159833348, 'Emoji Pink Lady Apple, 3lb', 4.87, '887434011464', 'Treat yourself to the delicious and crisp apple. These apples are known for their vivid green skin covered in a pinkish blush, crunchy texture, and tart taste with a sweet finish.', 'Includes 3 pounds of tart, crisp apples Tart taste with a sweet finish Pair them with sharp cheeses and crackers for a stunning appetizer board Can be enjoyed fresh or cooked into both savory and sweet dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/862bb433-d0ff-438b-8860-fbe1a7157c9c.4babf736917349ec25028d902df8abc9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/862bb433-d0ff-438b-8860-fbe1a7157c9c.4babf736917349ec25028d902df8abc9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/862bb433-d0ff-438b-8860-fbe1a7157c9c.4babf736917349ec25028d902df8abc9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (160175726, 'Stayman Apples 5 Lb Bag', 4.92, '840208101112', 'short description is not available', 'Stayman Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (160281751, 'Cut Pineapple', 1.97, '224144000003', 'short description is not available', 'Cut Pineapple', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (161050666, 'Fresh Cherry, 1 Lb.', 2.97, '405543370908', 'Fresh Cherry, 1 Lb.', 'Cherry Fresca', 'Cherry Fresca', 'https://i5.walmartimages.com/asr/821f9110-4798-421b-983e-2dfb0dcb4ea8.4e50526b18e589c6af58eecdf3ba8d97.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/821f9110-4798-421b-983e-2dfb0dcb4ea8.4e50526b18e589c6af58eecdf3ba8d97.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/821f9110-4798-421b-983e-2dfb0dcb4ea8.4e50526b18e589c6af58eecdf3ba8d97.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (161086629, 'Fuji Apples 5 Lb Bag', 5.29, '847473005831', 'short description is not available', 'Fuji Apples 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (161115457, 'Fresh Blueberries, 18 oz. Container', 5.12, '066022002460', 'Fresh Blueberries are a delightful and nutritious treat that brings a burst of flavor to any dish. These plump and juicy berries are picked at the peak of freshness, ensuring a sweet and tangy taste that is hard to resist. Perfect for snacking, baking, or adding to your favorite recipes, these blueberries are a versatile fruit that can be enjoyed in countless ways. Whether you sprinkle them on top of your morning cereal, blend them into a smoothie, or bake them into a delicious pie, Fresh Blueberries are sure to satisfy your cravings for a healthy and delicious snack.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Blueberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Blueberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of blueberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these blue gems into your baking endeavors, whether it\'s muffins, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Our Fresh Blueberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Blueberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/66ee489f-0ddc-43b4-99ce-07c0a7bf886e_1.b805f72f3cafb54c77a036a6ab6f4ed4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/66ee489f-0ddc-43b4-99ce-07c0a7bf886e_1.b805f72f3cafb54c77a036a6ab6f4ed4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/66ee489f-0ddc-43b4-99ce-07c0a7bf886e_1.b805f72f3cafb54c77a036a6ab6f4ed4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (161304925, 'Watermelon Seeded, each', 6.47, '098843040314', 'short description is not available', 'Watermelon Seeded, each', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bf9c3233-0f6d-4fb6-a020-9ba5d9e26c7f_1.5cf6a6df3761717142d2a644edb907a4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf9c3233-0f6d-4fb6-a020-9ba5d9e26c7f_1.5cf6a6df3761717142d2a644edb907a4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf9c3233-0f6d-4fb6-a020-9ba5d9e26c7f_1.5cf6a6df3761717142d2a644edb907a4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (161770510, 'Pineapple & Mango With Tajin Spice 10 Oz', 2.48, '717524773869', 'short description is not available', 'Pineapple & Mango With Tajin Spice 10 Oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (161861341, 'Fresh Cantaloupe, Each', 2.5, '405544695017', 'Treat yourself to the refreshing flavor of a fresh Cantaloupe. Enjoy this tasty melon on its own as a healthy snack or incorporate it into a variety of delicious recipes. For breakfast, you can make a sweet fruit bowl with sliced cantaloupe, strawberries, pineapple, and kiwi. For an extra special treat, top with a dollop of whipped cream. Cut it into small pieces and put it in a fresh salad along with chicken, cucumbers, tomatoes, and a light dressing. You can even use cantaloupe to make a refreshing summer cocktail, a spreadable jam or a light sorbet. Enjoy the sweet and juicy taste of fresh Cantaloupe.', 'Ideal addition to every kitchen Flavorful addition to many recipes Enjoy on its own or add to a mixed fruit salad Add to your fresh garden salad Get creative & make a cantaloupe cocktail or a refreshing sorbet Explore all the delicious ways to add fresh cantaloupe to your favorite recipes', 'Unbranded', 'https://i5.walmartimages.com/asr/cf901ec3-9e25-4e79-ab8b-296b6e94d3e6.aa2c19f4402d076204c6eead51241c30.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cf901ec3-9e25-4e79-ab8b-296b6e94d3e6.aa2c19f4402d076204c6eead51241c30.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cf901ec3-9e25-4e79-ab8b-296b6e94d3e6.aa2c19f4402d076204c6eead51241c30.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (162229317, 'Yellow Nectarine, 1 lb Carton', 4.47, '078742037479', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh California Grown White Nectarines', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (162344814, 'Walmart Produce Caito Fruit Platter With Dip 32 Oz', 6.98, '081851834211', 'short description is not available', 'Walmart Produce Caito Fruit Platter With Dip 32 Oz', 'WALMART PRODUCE', 'https://i5.walmartimages.com/asr/5bbf8d6e-030e-4e57-9791-12fc106f3d99_1.0d9b4c5d5d69be19093a8fb7a0a87125.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5bbf8d6e-030e-4e57-9791-12fc106f3d99_1.0d9b4c5d5d69be19093a8fb7a0a87125.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5bbf8d6e-030e-4e57-9791-12fc106f3d99_1.0d9b4c5d5d69be19093a8fb7a0a87125.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (162405584, '15# Bag Grapefruit', 5.98, '033383125107', 'short description is not available', '15# Bag Grapefruit', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (162577028, 'Fresh Navel Orange, Each', 0.98, '649370331538', 'Enjoy the juicy goodness of Fresh Navel Oranges (China Nebo). A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these navel oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Fresh Navel Oranges add flavor to any meal or beverage.', 'Fresh Navel Orange, Each Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes Use as a garnish for your favorite cocktail Make sweet desserts like ambrosia, orange bars, and orange pie Available by the each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/be6fbf0c-9e03-4540-9fdd-e75c01e4d545.54cac44316eb806f46fb15e2189994ba.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/be6fbf0c-9e03-4540-9fdd-e75c01e4d545.54cac44316eb806f46fb15e2189994ba.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/be6fbf0c-9e03-4540-9fdd-e75c01e4d545.54cac44316eb806f46fb15e2189994ba.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (162707289, 'Bi-Color Seedless Grapes, per lb', 6.98, '850905002155', 'Bi-Color Seedless Grapes, 2 Lb.', 'Bi-color Seedless Grapes 32 Oz Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (162762710, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094341209', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (162889456, 'Eastern Cantaloupe Bag', 3.28, 'deleted_896071002254', 'short description is not available', 'Eastern Cantaloupe Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2374b61b-4660-49ec-9578-770c29ef23a8_1.d9df3b6f4d875882ee05cca3e59e4899.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2374b61b-4660-49ec-9578-770c29ef23a8_1.d9df3b6f4d875882ee05cca3e59e4899.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2374b61b-4660-49ec-9578-770c29ef23a8_1.d9df3b6f4d875882ee05cca3e59e4899.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (163251761, 'Fresh Cored Pineapple', 1.97, '224145000002', 'short description is not available', 'Fresh Cored Pineapple', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (163337767, 'Melon Medly', 5.33, '893268001007', 'short description is not available', 'Melon Medly', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (163376993, 'Organic Pineapple Chunks, 10oz', 3.38, '074641082336', '1 Tray of Organic Pineapple 10oz', 'ORG PINEAPPLE 10Z TF', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1e926209-a257-4099-9830-a8df28b1db3d_6.20546656a1b94b2330f22f14ae0b40f5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1e926209-a257-4099-9830-a8df28b1db3d_6.20546656a1b94b2330f22f14ae0b40f5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1e926209-a257-4099-9830-a8df28b1db3d_6.20546656a1b94b2330f22f14ae0b40f5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (163541275, 'Fresh Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094357347', 'Fresh Grown Yellow Nectarines, 1 Lb.', 'Fresh Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (163701608, 'Fresh Strawberries 1#', 1.56, '400094383148', 'short description is not available', 'Fresh Strawberries 1#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (164237236, 'Gala Apples 3 Lb Bag', 3.42, '405559309794', 'short description is not available', 'Gala Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (164619042, 'Freshness Guaranteed Red Apple Slices, 32 oz', 5.97, '077745250564', 'Enjoy the sweet, refreshing taste of Freshness Guaranteed Red Apple Slices. These pre-cut slices are great for breakfast, lunch, dessert, or when you want a snack. Apples are a good source of vitamin C, fiber, and potassium making them an excellent healthy treat. You can eat the slices right out of the container, serve with a dollop of peanut butter for a sweet treat, or cover them in nutmeg and cinnamon and bake in the oven for a mouthwatering dish. With 32-ounces in each container, these apples are great for sharing with friends and family or keeping it for yourself. Them come in a re-closable container to help maintain freshness. Bring home Freshness Guaranteed Red Apples Slices today for a refreshing, healthy treat. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Red Apple Slices, 32 oz Sweet, refreshing treat Great for breakfast, lunch, dessert, or when you want a snack Good source of vitamin C, fiber, and potassium Enjoy right out of the container, serve with a dollop of peanut butter, or cover in nutmeg and cinnamon and bake Share with friends and family or keep for yourself Comes in a re-closable container to help maintain freshness', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/f850ec9d-cfbd-4195-8b43-ed4ecdb67363.95c16960cede460b9c86e0cb2918df5a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f850ec9d-cfbd-4195-8b43-ed4ecdb67363.95c16960cede460b9c86e0cb2918df5a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f850ec9d-cfbd-4195-8b43-ed4ecdb67363.95c16960cede460b9c86e0cb2918df5a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (165531610, 'Fresh Organic Black Grapes', 4.78, '405526052623', 'short description is not available', 'Fresh Organic Black Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (165632982, 'Yellow Flesh Peaches, per Pound', 1.58, '400094345580', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (165736144, 'Fuji Apples, 8 lb Bag', 7.98, '033383007007', 'Fuji Apples, 8 lb Bag', 'Fuji Apples 8 Pound Bag Satisfaction guaranteed. For more information call 1-877-505-2267 or visit Walmart.com/help', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (166122433, 'Organic Cantaloupe', 3.98, '098843940508', 'short description is not available', 'Organic Cantaloupe', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (166231970, 'Fieldpack Unbranded Fresh Strawberries 2#', 3.42, 'deleted_400094170885', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 2#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (166239443, 'Fresh Manzana (Apples) Jonagold, 1 lb, Package, Sweet', 1.68, 'deleted_400094433478', 'Looking for the perfect apple? Fresh Jonagold apples are a sweet, juicy, and versatile option for all your snacking and baking needs. With a crisp texture and a balanced flavor, these apples are perfect for pies, tarts, and other baked goods. Their beautiful blend of red and yellow skin makes them an attractive addition to any fruit basket or decorative display. Enjoy the delicious taste of Jonagold apples today!', 'Jonagold apples are a hybrid variety, combining the best features of Jonathan and Golden Delicious apples. They have a sweet and tangy flavor with a crisp texture, making them a versatile apple for a variety of uses. High in dietary fiber, vitamin C, and antioxidants for a healthy snack option - Great for baking and cooking, retaining their shape and flavor when heated. Jonagold apples are available year-round, making them a reliable choice for any occasion. They have a long shelf life and can be stored for several months when kept in a cool, dry place.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/71cd183d-aa98-4033-bd3f-05428a1a4215.a650133cdb53a8bb5908c7d0e9a67b14.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71cd183d-aa98-4033-bd3f-05428a1a4215.a650133cdb53a8bb5908c7d0e9a67b14.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71cd183d-aa98-4033-bd3f-05428a1a4215.a650133cdb53a8bb5908c7d0e9a67b14.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (166339270, 'Grapefruit Gift Box', 12.88, '072240062438', 'short description is not available', 'Grapefruit Gift Box', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (166399725, 'Lil Snappers Bosc Pears, 3 lb', 5.98, 'deleted_741839007203', 'Pears, Bosc, Lil Snappers, Bag 3 LB Dense and buttery smooth. Sweet, spicy flavor. Kid size fruit. Scan me! Resealable. World famous fruit. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us YouTube; Facebook; Twitter; Pinterest. For fun recipes activities and more, visit www.lilsnappers.com. Responsible choice. Fruits & veggies more matters. US No. 1. 2-1/8 inch min dia. Produce of USA. 3 lb (1.36 kg) Wenatchee, WA 98801', 'Pears, BoscDense and buttery smooth. Sweet, spicy flavor. Kid size fruit. Scan me! Resealable. World famous fruit. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us YouTube; Facebook; Twitter; Pinterest. For fun recipes activities and more, visit www.lilsnappers.com. Responsible choice. Fruits & veggies more matters. US No. 1. 2-1/8 inch min dia. Produce of USA.', 'Stemilt', 'https://i5.walmartimages.com/asr/18636883-ae4f-46e3-bdc3-bcba1c7b2783_1.70452e8e1472416a006cb9c1f4c9c254.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18636883-ae4f-46e3-bdc3-bcba1c7b2783_1.70452e8e1472416a006cb9c1f4c9c254.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18636883-ae4f-46e3-bdc3-bcba1c7b2783_1.70452e8e1472416a006cb9c1f4c9c254.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (166855436, 'Freshness Guaranteed McIntosh Apples, 3 lb Bag', 3.88, '071208084598', 'Enjoy the juicy, bittersweet taste of Freshness Guaranteed McIntosh Apples. The McIntosh apple tastes like going home. Its traditional and subtle apple flavor makes it perfect for eating out of hand, but also adds a depth of flavor for baking, saucing and cider making. They come in a three-pound bag, so you can stock up and share them with others. Apples are proven to have major health benefits. You can eat an apple for weight loss as they are full of fiber, which helps you stay full, and they can fuel your immune system. Eat this fresh fruit as a snack or peel the skins off and mash them up to make applesauce. Create tarts, strudels and pies with them. Put them on sticks and dip them in caramel, chocolate or candy coating for handmade treats. However you choose to use them, Freshness Guaranteed McIntosh Apples add flavor to any meal. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Crisp & juicy Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/84fa4d46-d30b-4df3-8854-899ae5cfb750.1b1269dc28980d35f0352e353d659184.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/84fa4d46-d30b-4df3-8854-899ae5cfb750.1b1269dc28980d35f0352e353d659184.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/84fa4d46-d30b-4df3-8854-899ae5cfb750.1b1269dc28980d35f0352e353d659184.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (166985214, 'Melon De Agua En Pedazos', 0.97, '204144000005', 'Melon De Agua En Pedazos', 'Hypermart Melon De Agua En Pedazos', 'Hypermart', 'https://i5.walmartimages.com/asr/834763c0-c2ba-4275-b2b6-91aaa313db02.2ee4efed122059ee6ad49968c3e11fbc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/834763c0-c2ba-4275-b2b6-91aaa313db02.2ee4efed122059ee6ad49968c3e11fbc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/834763c0-c2ba-4275-b2b6-91aaa313db02.2ee4efed122059ee6ad49968c3e11fbc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (167007975, 'Fresh Manzana (Apples) Fuji, Each', 1.72, 'deleted_400094273418', 'Enjoy the crisp and juicy taste of our fresh Fuji apples. Our farmers delicately grow these apples to ensure they are the freshest and highest quality. Made with organic ingredients, these apples are a healthy snack choice for any time of day. Perfect for baking, juicing, or eating plain, these apples are the perfect addition to your fresh produce selection. Try them today and taste the fresh difference!', 'Enjoy the crisp and juicy taste of our fresh Fuji apples. Our farmers delicately grow these apples to ensure they are the freshest and highest quality. Made with organic ingredients, these apples are a healthy snack choice for any time of day. Perfect for baking, juicing, or eating plain, these apples are the perfect addition to your fresh produce selection. Try them today and taste the fresh difference!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a8924898-d577-4073-b149-aa9955d2583b.4ec60638e6b9ea2ec88fb4218489a6d5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a8924898-d577-4073-b149-aa9955d2583b.4ec60638e6b9ea2ec88fb4218489a6d5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a8924898-d577-4073-b149-aa9955d2583b.4ec60638e6b9ea2ec88fb4218489a6d5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (167089070, 'Pinata Apples 5 Lb Bag', 6.92, '741839006978', 'short description is not available', 'Pinata Apples 5 Lb Bag', 'Unbranded', 'https://i5.walmartimages.com/asr/c77c576a-f65c-494c-9f9b-e9cfcf2423ea_1.15239987cf49d0bdc6ad7cc90bdebf14.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c77c576a-f65c-494c-9f9b-e9cfcf2423ea_1.15239987cf49d0bdc6ad7cc90bdebf14.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c77c576a-f65c-494c-9f9b-e9cfcf2423ea_1.15239987cf49d0bdc6ad7cc90bdebf14.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (167600391, 'Organic Pink Lady Apples, Bulk Each', 2.46, '847473000720', 'Welcome to my store! We print designs on clothes; t-shirts, sweatshirts, and hoodies. We\'re working with the best print providers around the world to get a high quality printing and good service. And we\'ll also do our best to satisfy our valued customers. Key Details : Condition : New brand with tag Material : 100% cotton Fit : classic fit, runs true to size Neckline : Round Neck Size: Please See the Size picture *****PLEASE ORDER THE 1 SIZE BIGGER T-SHIRT***** Returns & Exchanges : You can get a replacement if the product is not arrived, lost, or again if the print quality was low. Above all, please contact us if you have any queries or encounter difficulties with your order.', 'Polyester Machine Wash Soft fabric, stretchy, lightweight and breathable. Short sleeve, crew neck, casual trendy. Funny cute graphic shirts perfect for street , beach, party, dating, casual wear, work, vacation, outdoor, holiday, daily life etc. easy to match with your favorite skinny jeans or shorts.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/508e6487-0928-4f83-aaf5-0d602c668807.b5c1d4c0c83bdd8b8c4400b4e25c34cb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/508e6487-0928-4f83-aaf5-0d602c668807.b5c1d4c0c83bdd8b8c4400b4e25c34cb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/508e6487-0928-4f83-aaf5-0d602c668807.b5c1d4c0c83bdd8b8c4400b4e25c34cb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (167745190, 'Freshness Guaranteed Cantaloupe & Blueberries 10 Oz', 3.98, '681131305457', 'short description is not available', 'Freshness Guaranteed Cantaloupe & Blueberries 10 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (167862546, 'Rainier White Cherries, 1 Lb.', 7.97, '400094720134', 'Rainier White Cherries, 1 Lb.', 'Cherries Rainier Blancas', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (167869723, 'Walmart Produce Watermelon 9.5 Oz', 3.98, '077745244426', 'short description is not available', 'Walmart Produce Watermelon 9.5 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (168568908, 'Fresh Oranges, 5 Lb.', 6.47, '612920443388', 'Enjoy the fresh Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite adult beverage. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Oranges add flavor to any meal or beverage.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Use as a garnish for your favorite adult beverage Enjoy on their own or in a variety of recipes', 'Unbranded', 'https://i5.walmartimages.com/asr/c09f46c4-878b-493f-b3b6-4cd356e2b7f1.d2b8ef9c80daeb9c8ccf07a74e201081.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c09f46c4-878b-493f-b3b6-4cd356e2b7f1.d2b8ef9c80daeb9c8ccf07a74e201081.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c09f46c4-878b-493f-b3b6-4cd356e2b7f1.d2b8ef9c80daeb9c8ccf07a74e201081.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (168653438, 'Fresh Sour Orange, Each', 0.38, '000000031097', 'Enjoy the juicy goodness of Fresh Navel Oranges (China Nebo). A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these navel oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Fresh Navel Oranges add flavor to any meal or beverage', 'A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2dd32fb4-3f23-49f6-91f0-7eed4150be5c.42d436251700b42dc6a471fb0a4ecc62.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2dd32fb4-3f23-49f6-91f0-7eed4150be5c.42d436251700b42dc6a471fb0a4ecc62.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2dd32fb4-3f23-49f6-91f0-7eed4150be5c.42d436251700b42dc6a471fb0a4ecc62.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (168714720, 'Fresh Organic Fuji Apples Bulk, Each', 2.46, '032601505813', 'Indulge in the crisp sweetness of organic fuji apples, available in bulk for a healthy snack or delicious addition to your favorite recipes.', 'Polyester Organic: Grown without synthetic pesticides, herbicides, or fertilizers Fresh: Freshly harvested and delivered to ensure optimal taste and texture Crisp Sweetness: Enjoy the classic Fuji apple flavor and texture Healthy Snack: A great option for a quick and healthy snack Versatile: Perfect for adding to salads, baking, or making delicious apple products', 'Unbranded', 'https://i5.walmartimages.com/asr/a6095dce-02d3-48bf-811f-e5a3c1fbae1e.317803027376a5cf26f89872f83a94cc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6095dce-02d3-48bf-811f-e5a3c1fbae1e.317803027376a5cf26f89872f83a94cc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6095dce-02d3-48bf-811f-e5a3c1fbae1e.317803027376a5cf26f89872f83a94cc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (168800956, 'Zestar Apples 5 Lb Bag', 4.92, '879329003609', 'short description is not available', 'Zestar Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (169065641, 'Mandarina China, 1 Lb.', 1.88, '405719377823', 'Mandarina China, 1 Lb.', 'China Mandarina Caja 33lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1271f7d9-bff0-4d07-8f75-038eff6274ff.d3e1d3735cd356bc2abe2b9f017c9a25.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1271f7d9-bff0-4d07-8f75-038eff6274ff.d3e1d3735cd356bc2abe2b9f017c9a25.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1271f7d9-bff0-4d07-8f75-038eff6274ff.d3e1d3735cd356bc2abe2b9f017c9a25.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (169150590, 'Hay Bale', 8.88, '892134002070', 'short description is not available', 'Hay Bale', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (169248215, 'Organic Tangelos, 3 Lb.', 3.76, '080612150034', 'Organic Tangelos, 3 Lb.', 'Organic 3# Bag Tangelo', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (169296662, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094210260', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (169753573, 'Virgina Gold Apple Totes', 0.98, '681131124133', 'short description is not available', 'Virgina Gold Apple Totes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (169772273, 'Fresh Chilean Grown Green Grapes', 2.28, 'deleted_812985018020', 'short description is not available', 'Fresh Chilean Grown Green Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (170125816, 'Fresh Red Grapefruit, 3 lb Bag', 4.98, '033383911120', 'Grapefruit is the perfect balance between tart and sweet. The balance between tart and sweet is great for both savory and sweet dishes any time of day. Enjoy half of a grapefruit sprinkled with sugar with some eggs in the morning for a light, sweet breakfast. Slice it up and put in a salad with spinach, avocado, and red onion topped with a mustard and balsamic vinegar dressing for lunch or dinner. Make delicious grapefruit bars that showcase the sweet and tartness of this versatile fruit. For an adult recipe juice the grapefruit and pair with some simple syrup and alcohol for a refreshing cocktail. This fruit is the perfect addition to a healthy diet as it is a great source of vitamin C and vitamin A. With such versatility, Grapefruit will become a pantry staple in your home.', 'Great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a grapefruit sprinkled with sugar in the morning, slice it up and put it in salad for lunch or dinner, or make grapefruit bars Great source of vitamin C and vitamin A', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9183bc36-5af9-4986-bb8b-d0051507c3fe.990659cf83a79a12424f34a36a70d080.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9183bc36-5af9-4986-bb8b-d0051507c3fe.990659cf83a79a12424f34a36a70d080.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9183bc36-5af9-4986-bb8b-d0051507c3fe.990659cf83a79a12424f34a36a70d080.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (170703872, 'Watermelon Seedless', 4.48, '400094579503', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (170737646, 'Fresh Driscoll\'s USDA Organic Strawberry, 8.8 oz Container', 2.48, '812049005300', 'The sweet, juicy flavor of Fresh USDA Organic Strawberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. These organic berries contain essential vitamins and nutrients like, vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh USDA Organic Strawberries today and savor the delectable flavor.', 'Fresh USDA Organic Strawberries, 8.8 oz Package: Certified organic Prior to serving gently wash the strawberries and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bc56dbdd-df40-49c5-8519-c224ea93dfd9_1.bd10c35f8f55ed1ced9774b81e3c902b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc56dbdd-df40-49c5-8519-c224ea93dfd9_1.bd10c35f8f55ed1ced9774b81e3c902b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc56dbdd-df40-49c5-8519-c224ea93dfd9_1.bd10c35f8f55ed1ced9774b81e3c902b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (170794542, 'Fresh California Grown Apricots 16oz', 2.98, 'deleted_813187010584', 'short description is not available', 'Fresh California Grown Apricots 16oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (170820340, 'Walmart Produce Pineapple Mango 16 Oz', 3.98, '030223082347', '1 Tray of 10oz Red Grapes', 'Fresh picked red grapes', 'WALMART PRODUCE', 'https://i5.walmartimages.com/asr/e722f9f9-e1fe-4e58-add3-a3b67455b315.1b37f274658e2c1f8e79a3ce37036968.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e722f9f9-e1fe-4e58-add3-a3b67455b315.1b37f274658e2c1f8e79a3ce37036968.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e722f9f9-e1fe-4e58-add3-a3b67455b315.1b37f274658e2c1f8e79a3ce37036968.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (171284729, 'Sprite Melon 2ct Bag', 1.98, '896071002247', 'short description is not available', 'Sprite Melon 2ct Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (171385002, 'Del Monte Fresh Honeydew Half 32 Oz', 2.68, '717524889041', 'short description is not available', 'Del Monte Fresh Honeydew Half 32 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (171411617, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094950081', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (171918306, 'Sweet Tamarind, 16 Oz.', 6.97, '400094288795', 'Sweet Tamarind, 16 Oz.', 'Tamarindo Sweet', 'Unbranded', 'https://i5.walmartimages.com/asr/2066f2d6-b632-477b-97cb-1054a712b50b.4b01468ce3faf911ddc2d002e98fd82b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2066f2d6-b632-477b-97cb-1054a712b50b.4b01468ce3faf911ddc2d002e98fd82b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2066f2d6-b632-477b-97cb-1054a712b50b.4b01468ce3faf911ddc2d002e98fd82b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (172214974, 'Stemilt Lil Snappers Apples, 3 Lb.', 4.87, '741839005919', 'Apples, Granny Smith, Lil Snappers, Bag 3 LB Crisp with lemon-like tartness. Kid size fruit. Scan me! Resealable. World famous fruit. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us YouTube; Facebook; Twitter; Pinterest. For fun recipes activities and more, visit www.lilsnappers.com. Responsible choice. Fruits & veggies more matters. Meets or exceeds U.S. extra fancy. 2-1/2 inch min dia. Produce of USA. 3 lb (1.36 kg) Wenatchee, WA 98801', 'Apples, Granny SmithCrisp with lemon-like tartness. Kid size fruit. Scan me! Resealable. World famous fruit. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us YouTube; Facebook; Twitter; Pinterest. For fun recipes activities and more, visit www.lilsnappers.com. Responsible choice. Fruits & veggies more matters. Meets or exceeds U.S. extra fancy. 2-1/2 inch min dia. Produce of USA.', 'Stemilt', 'https://i5.walmartimages.com/asr/2f348f18-f5aa-46c0-b193-133b0eb10088.fd788e8c5b72d9e96f5d56b405fa8434.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f348f18-f5aa-46c0-b193-133b0eb10088.fd788e8c5b72d9e96f5d56b405fa8434.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f348f18-f5aa-46c0-b193-133b0eb10088.fd788e8c5b72d9e96f5d56b405fa8434.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (172276419, 'Fresh Goldenberries, 6 oz Container', 2.48, '405559979836', 'The sweet, juicy flavor of Goldenberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes or yogurt, use them to make mouthwatering jam, mix them with other fruit for a light and flavorful salad, or add them to a creamy smoothie. They contain essential vitamins and nutrients like vitamin C, fiber, iron, vitamin A and beta-carotene making them perfect for a healthy diet. Prior to serving simply gently wash them with cool water and enjoy the fresh taste. Refrigerate the berries to keep them fresh and ready for use. Pick up Goldenberries today and savor the delectable flavor.', 'Best when enjoyed at room temperature Tangy, tropical, and sweet taste Also known as Cape Gooseberries Prior to serving gently wash them with cool water Refrigerate your berries in the original container to maintain freshness, they should approximately last 3-5 days after purchase Keep dry for optimal freshness', 'Unbranded', 'https://i5.walmartimages.com/asr/ab53bbf1-3f9e-47cd-aeb6-d246dc8b29d5.6ce7aefc36632be8ad2817a7969c9aca.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ab53bbf1-3f9e-47cd-aeb6-d246dc8b29d5.6ce7aefc36632be8ad2817a7969c9aca.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ab53bbf1-3f9e-47cd-aeb6-d246dc8b29d5.6ce7aefc36632be8ad2817a7969c9aca.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (172511418, 'Granny Smith Apples 3 Lb Bag', 4.98, 'deleted_033383022116', 'short description is not available', 'Granny Smith Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (172874380, 'Fresh Peruvian Grown Green Grapes', 1.98, 'deleted_775403000017', 'short description is not available', 'Fresh Peruvian Grown Green Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (172893349, 'Snack Fresh Red Apple Slices, 4ct, 10 oz', 3.68, '074641070005', 'short description is not available', 'Snack Fresh Red Apple Slices, 4ct, 10oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f404bff6-0dcf-4860-adb6-0f188a721fd6.e3b1fe8a469684df85283118cf7ede07.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f404bff6-0dcf-4860-adb6-0f188a721fd6.e3b1fe8a469684df85283118cf7ede07.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f404bff6-0dcf-4860-adb6-0f188a721fd6.e3b1fe8a469684df85283118cf7ede07.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (173070552, 'Cantaloupe Spears 32oz', 6.98, '030223082484', 'Cantaloupe Spears 32oz', 'Cantaloupe Spears 32oz', 'WALMART PRODUCE', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (173115427, 'Fresh Cherries, 1 lb Bag', 7.97, '400094304402', 'Cherries are a household favorite- great as a snack, the perfect addition to morning breakfasts in oatmeal or yogurt, a great ingredient for baking or salad toppings, and are a perfect stand-alone snack- even for your child’s lunch box! Our family cookie recipe including these cherries is a major hit among our family and friends', 'Fresh Cherries are good source of potassium Great for snacking Great for baking or salad topping', 'Unbranded', 'https://i5.walmartimages.com/asr/b1f64bb9-11a3-4258-8d29-43797ec94dbd.cd5b884e9c562bc7b61adf10abf9a365.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b1f64bb9-11a3-4258-8d29-43797ec94dbd.cd5b884e9c562bc7b61adf10abf9a365.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b1f64bb9-11a3-4258-8d29-43797ec94dbd.cd5b884e9c562bc7b61adf10abf9a365.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (174155646, 'Canning Peach, 16 lb Carton', 18, '033383284736', 'Canning Peaches, 16 Lb.', 'Canning Peaches 16 Lbs', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (174250135, 'Star Fruit, 10 oz container', 6.97, '400094287880', 'The Star Fruit, in a 10 oz container, is a tropical wonder that will transport your taste buds on a journey to paradise. This unique fruit, also known as carambola, is aptly named for its distinctive star-shaped appearance. Grown in lush, sun-drenched orchards, the Star Fruit boasts a vibrant yellow color and a smooth, waxy skin. Its unique shape and bright hue make it a visually striking addition to any fruit display or recipe. When you slice into the Star Fruit, you\'ll be greeted with a sight that is as beautiful as it is delicious. Each slice reveals a perfect star shape, making it a stunning addition to fruit salads, desserts, or even cocktails. But it\'s not just the appearance that makes the Star Fruit special. The taste is truly something to savor. With a flavor profile that is a delightful blend of sweet and tangy, the Star Fruit offers a refreshing burst of tropical goodness. Its juicy flesh is crisp and succulent, leaving a lingering citrusy note on your palate. Perfectly ripened and carefully selected, the 10 oz container of Star Fruit ensures that you\'ll have plenty to enjoy. Whether you\'re indulging in a healthy snack, creating a tropical-inspired dish, or simply wanting to experience the exotic flavors of the tropics, the Star Fruit in a 10 oz container is a delicious and visually stunning choice.', 'Carambola', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/59f9a143-ba57-4e06-8f3d-3eda0c4b8419.40034ea258fba271104e368f9940c918.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59f9a143-ba57-4e06-8f3d-3eda0c4b8419.40034ea258fba271104e368f9940c918.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59f9a143-ba57-4e06-8f3d-3eda0c4b8419.40034ea258fba271104e368f9940c918.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (174311984, 'WHOLLY GUACAMOLE Homestyle, 8 oz', 3.38, '616112278680', 'Need a little flavor in your day? We have an easy way to make your meals OMGuac! WHOLLY GUACAMOLE Homestyle Guacamole contains precut chunks of 100% Hass avocados with diced veggies to give you that homemade taste without any of the hassle. Dip it with veggies and pretzels. Top it on burgers and salads. Spread it on sandwiches and wraps. Love it! Every meal of the day (and some in between!). Goodbye mayo, hello Guac! Dip it, top it, spread it, love it. WHOLLY GUACAMOLE is a trademark of Avomex, Inc.', 'That homemade taste without the hassle of tricky avocados America’s #1 selling refrigerated guacamole Keep refrigerated 50 calories per serving No Preservatives added and gluten free', 'WHOLLY GUACAMOLE', 'https://i5.walmartimages.com/asr/1a1624bf-00e9-4395-9a6f-6524862cb843_1.cabf369b117a45811436156b4ddb2efe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a1624bf-00e9-4395-9a6f-6524862cb843_1.cabf369b117a45811436156b4ddb2efe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a1624bf-00e9-4395-9a6f-6524862cb843_1.cabf369b117a45811436156b4ddb2efe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (174349019, 'Granny Smith Apple Totes', 0.98, '681131124157', 'short description is not available', 'Granny Smith Apple Totes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (175768727, 'Missing Key Attributes : This title includes key attributes such as \'food condition\', but is missing others such as \'flavor notes\'.', 5.47, '033383300054', 'Treat yourself to the delicious, sweet taste of Fresh Anjou Pears.Enjoy one with breakfast or lunch or as a fresh snack any time of day. Best of all, these delicious pears have a dense flesh that holds up well when cooked. They can be used for baking, snacking, salads, pairing, or made into a delicious sauce that pairs perfectly with pork. Try incorporating them into soups and compotes or using to make yummy jam or juice. They are delicious when sliced fresh in salads or eaten out-of-hand for a refreshing snack. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Anjou Pears.', '- D\'Anjou pears are a classic variety known for their sweet, juicy flavor and smooth, firm texture - They are versatile and can be used in a variety of dishes, from salads to desserts - High in dietary fiber and vitamin C, making them a healthy snack option - The 3lb bag size is convenient for families and individuals looking for a larger supply of fresh pears - D\'Anjou pears are harvested at their peak ripeness and carefully packed to ensure maximum freshness and flavor - They have a long shelf life and can be stored in the refrigerator for up to 2-3 weeks - D\'Anjou pears are available year-round, making them a reliable choice for any occasion.', 'Unbranded', 'https://i5.walmartimages.com/asr/1768e8ef-865f-48d4-912f-b986d583fdf5.08b640e3e963a277c891bfd44fa1dbd6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1768e8ef-865f-48d4-912f-b986d583fdf5.08b640e3e963a277c891bfd44fa1dbd6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1768e8ef-865f-48d4-912f-b986d583fdf5.08b640e3e963a277c891bfd44fa1dbd6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (176153950, 'Freshness Guaranteed Red Grapes, 10 oz', 3.63, 'deleted_681131036603', 'Freshness Guaranteed Red Grapes, 10 oz', 'Red Grapes 10 Ounce Freshness Guaranteed Return the package for replacement or money back. 1-877-505-2267 or visit Walmart.com/help', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (176166715, 'Fuji Apples 3 Lb Bag', 3.42, '847473005718', 'short description is not available', 'Fuji Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (176179556, 'Red Delicious Apples 5 Lb Bag', 4.93, '405559310042', 'short description is not available', 'Red Delicious Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (176509402, 'Jicama Slices W/ Tajin 10 Oz', 2.58, '074641012661', 'short description is not available', 'Jicama Slices W/ Tajin 10 Oz', 'Country Fresh', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (176531588, 'Organic Bartlett Pears, Each', 1.58, '000000944090', 'Our Organic Bartlett Pears come in a full bag of delicious and juicy fresh produce. Each pear is whole and ready to be consumed as a healthy snack or used in your favorite recipes. These pears are hand-picked to ensure only the highest quality, giving you a sweet flavor with a soft texture. Order now and enjoy the taste of a perfectly ripened Bartlett Pear!', 'Each pear is medium to large in size, with a bell-shaped body that tapers towards the stem. The skin of the Organic Bartlett Pear is thin, smooth, and bright green-yellow in color, with occasional red blushes. The flesh of the pear is aromatic, with a creamy, white color that is tender and juicy. The flavor of the Organic Bartlett Pear is sweet and mellow, with a subtle hint of citrus. These pears are certified organic, which means that they are grown without the use of synthetic pesticides, fertilizers, or genetically modified organisms (GMOs). Organic Bartlett Pears are a good source of fiber, vitamin C, and antioxidants, making them a healthy and delicious addition to any diet. Whether eaten fresh or cooked, Organic Bartlett Pears are a tasty and nutritious choice for pear lovers. The skin of the Organic Bartlett Pear is thin, smooth, and bright green-yellow in color, with occasional red blushes. The flesh of the pear is aromatic, with a creamy, white color that is tender and juicy. The flavor of the Organic Bartlett Pear is sweet and mellow, with a subtle hint of citrus. These pears are certified organic, which means that they are grown without the use of synthetic pesticides, fertilizers, or genetically modified organisms (GMOs). Organic Bartlett Pears are a good source of fiber, vitamin C, and antioxidants, making them a healthy and delicious addition to any diet. Whether eaten fresh or cooked, Organic Bartlett Pears are a tasty and nutritious choice for pear lovers. The flesh of the pear is aromatic, with a creamy, white color that is tender and juicy. The flavor of the Organic Bartlett Pear is sweet and mellow, with a subtle hint of citrus. These pears are certified organic, which means that they are grown without the use of synthetic pesticides, fertilizers, or genetically modified organisms (GMOs). Organic Bartlett Pears are a good source of fiber, vitamin C, and antioxidants, making them a healthy and delicious addition to any diet. Whether eaten fresh or cooked, Organic Bartlett Pears are a tasty and nutritious choice for pear lovers. The flavor of the Organic Bartlett Pear is sweet and mellow, with a subtle hint of citrus. These pears are certified organic, which means that they are grown without the use of synthetic pesticides, fertilizers, or genetically modified organisms (GMOs). Organic Bartlett Pears are a good source of fiber, vitamin C, and antioxidants, making them a healthy and delicious addition to any diet. Whether eaten fresh or cooked, Organic Bartlett Pears are a tasty and nutritious choice for pear lovers.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/816d781a-3b62-4c72-9cd2-1f2d7a319a3d_1.ca76075635d3893113edaf1998aab3c7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/816d781a-3b62-4c72-9cd2-1f2d7a319a3d_1.ca76075635d3893113edaf1998aab3c7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/816d781a-3b62-4c72-9cd2-1f2d7a319a3d_1.ca76075635d3893113edaf1998aab3c7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (176985086, 'Taylor Fresh Gold Pears, Each', 1.67, '000000045537', 'Indulge in the freshness of Taylor Gold Pears, the perfect choice for a healthy lifestyle. Our premium quality pears are sourced from the best farms and are made with whole, organic ingredients. These juicy and delicious pears contain essential nutrients that make them a must-have in your daily diet. Whether you enjoy them as a snack or a part of your meal, Taylor Gold Pears are a great addition to any fresh produce basket.', 'Each pear is hand-selected for its crisp texture, juicy sweetness, and beautiful appearance. With their smooth, golden skin and delicate flavor, these pears are a true delight for the senses. Their firm texture makes them great for snacking on the go, while their natural sweetness makes them an excellent addition to your favorite recipes. Plus, they\'re packed with fiber, vitamin C, and other essential nutrients, making them a healthy choice for any time of day. Whether you\'re enjoying them as a quick snack or using them in a gourmet dish, our Taylor Gold Pears are sure to impress. So why wait? Grab one (or more!) today and experience the delicious taste and health benefits of this amazing fruit! Their firm texture makes them great for snacking on the go, while their natural sweetness makes them an excellent addition to your favorite recipes. Plus, they\'re packed with fiber, vitamin C, and other essential nutrients, making them a healthy choice for any time of day. Whether you\'re enjoying them as a quick snack or using them in a gourmet dish, our Taylor Gold Pears are sure to impress. So why wait? Grab one (or more!) today and experience the delicious taste and health benefits of this amazing fruit! Whether you\'re enjoying them as a quick snack or using them in a gourmet dish, our Taylor Gold Pears are sure to impress. So why wait? Grab one (or more!) today and experience the delicious taste and health benefits of this amazing fruit!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/56c85257-bd4e-457b-9e4d-3b595303ed8e.e80f2c313060ecb125ef1a4314858d69.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56c85257-bd4e-457b-9e4d-3b595303ed8e.e80f2c313060ecb125ef1a4314858d69.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56c85257-bd4e-457b-9e4d-3b595303ed8e.e80f2c313060ecb125ef1a4314858d69.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (177004160, 'Fresh White Peaches, 2 lb Bag', 3.98, '078742037462', 'Discover the delightful sweetness of these Fresh White Peaches. Enjoy them on their own as a sweet snack or use them in a variety of recipes. For breakfast, you could slice them to put into your oatmeal or use them to make a delicious yogurt parfait. You can also use these fresh peaches in several baking recipes including a comforting crisp topped with ice cream, a tasty upside-down cake, or a scrumptious tart. You can even use them to make a jam or a smooth sorbet. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Fresh White Peaches.', 'Fresh White Peaches, 2 lb Bag Enjoy on their own as a satisfying snack Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Slice as a sweet topping for waffles or pancakes Add to iced tea to create a refreshing summertime flavor', 'Unbranded', 'https://i5.walmartimages.com/asr/e22a5d89-835d-4b67-a72b-470c5cca1195.e535703db2ee9e3508f75572c6eb49c5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e22a5d89-835d-4b67-a72b-470c5cca1195.e535703db2ee9e3508f75572c6eb49c5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e22a5d89-835d-4b67-a72b-470c5cca1195.e535703db2ee9e3508f75572c6eb49c5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (177144025, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094659304', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (177249446, 'Watermelon With Tajin Spice 32 Oz', 7.78, '717524409126', 'short description is not available', 'Watermelon With Tajin Spice 32 Oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (177421246, 'Jonagold Apples 5 Lb Bag', 5.29, '847473005879', 'short description is not available', 'Jonagold Apples 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (177823154, 'Gala Apples, 5 lb Tote', 0.98, '681131124171', 'Apples Gala 5# Tote', 'Gala 5 Pound Tote Satisfaction guaranteed. For more information call 1-877-505-2267 or visit Walmart.com/help', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d07ac182-4c8b-49ef-9654-83be0c52d2e2_1.c439c71883e000343a50e709a5660df4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d07ac182-4c8b-49ef-9654-83be0c52d2e2_1.c439c71883e000343a50e709a5660df4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d07ac182-4c8b-49ef-9654-83be0c52d2e2_1.c439c71883e000343a50e709a5660df4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (178283560, 'Fresh Aloe Leaf, Each', 1.67, '045255117264', 'Renowned for its versatility, Aloe Vera Leaves are sure to be a must-have in your home. Aloe Vera is known for its ability to help soothe sunburn and treat skin irritation with its cooling abilities. Its packed with vitamins and minerals that are great for your skin and even your hair. But it doesn\'t stop there! Aloe Vera is also edible and perfect for blending into smoothies and shakes for added nutrients. All you need to do is carefully slice the leaf open to reveal the clear gel inside. Scrape it out with a spoon and apply it to your skin or hair, or blend into your favorite drink. The possibilities are endless with Aloe Vera Leaves.', '1 piece per unit Fresh aloe vera is only available within the store\'s produce section 100% natural plant material Used as both a home remedy and for food and drink Also known as Sábila and Aloe Vera around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8e286b82-c071-46f8-a956-2462b685847d.242620a41b08ac767ca346350f56b39e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e286b82-c071-46f8-a956-2462b685847d.242620a41b08ac767ca346350f56b39e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e286b82-c071-46f8-a956-2462b685847d.242620a41b08ac767ca346350f56b39e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (178285011, 'Fresh Organic Nectarines, 2 lb Bag', 5.66, '849315000394', 'Savor the irresistible taste of these Fresh Organic Nectarines in 2# Bags. With a red and yellow coloration, these juicy nectarines are round, slightly heart-shaped with smooth skin. The flesh is soft and yellow with a sweet flavor and a slightly acidic taste. Certified USDA organic, these nectarines have a firm bite with juicy flesh. These are a great quick, healthy snack for on-the-go people. You could also slice them for kids\' snacks and lunches. These also make a great addition to the grill for a delicious summer barbeque. Treat the entire family to the sweet flavor of Fresh Organic Nectarines.', 'Fresh Organic Nectarines, 2 lb Bag Certified USDA organic Packaged in a resealable bag to maintain freshness Add to baked goods for a unique flavor Use to top your salad for extra flavor or make a tasty fruit salad Pair with meat, poultry, and fish Slice as a sweet topping for waffles or pancakes Add to iced tea to create a refreshing summertime flavor', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f42523cf-104d-40d8-8ab2-e9fd59af1dbd.f37a1b293b03fa5f369807b8431de7aa.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f42523cf-104d-40d8-8ab2-e9fd59af1dbd.f37a1b293b03fa5f369807b8431de7aa.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f42523cf-104d-40d8-8ab2-e9fd59af1dbd.f37a1b293b03fa5f369807b8431de7aa.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (178326488, 'Watermelon Seedless', 4.98, '400094408568', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (178655432, 'Ida Red Apple Totes', 0.98, '681131124270', 'short description is not available', 'Ida Red Apple Totes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (178786074, 'Garden Highway Watermelon 16oz Rfg', 3.88, '826766255160', 'short description is not available', 'Garden Highway Watermelon 16oz Rfg', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (178839795, '120pc Apl Red Del 5#', 656.4, '405667978424', 'short description is not available', '120pc Apl Red Del 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (179052840, 'Good Foods Tableside Greek Yogurt Guacamole', 3.56, '736798901884', 'with simple, kitchen fresh ingredients, Good Foods Tableside Guacamole delivers superior tastes without compromise. We believe that real ingredients make really good foods; no need to add sugar, preservatives, dehydrated vegetables like some competitive offerings. Good Foods Tableside Guacamole is never heated – preserves the product flavor and nutrients. Good Foods harnesses the power of cold water pressure to give us a preservative-free way to keep our guacamole fresher, longer.', 'Good Foods Tableside Greek Yogurt Guacamole, 7 oz. Made with Hand-Scooped, Fresh Hass Avocados and rBST-Free Greek Yogurt No Artificial Colors, Flavors or Preservatives', 'Good Foods', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (179099824, 'Fresh Black Seedless Grapes, lb', 6.98, '850859002034', 'Treat yourself to the delicious, juicy flavor of Fresh Black Seedless Grapes. These grapes are bursting with flavor and are completely seedless, so you can easily enjoy a handful as a fresh snack any time of day. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the fresh taste of Fresh Black Seedless Grapes.', 'Fresh Black Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (179493152, 'Fresh Papaya Chunks, 24oz', 7.67, '794504174823', 'Fresh Papaya is a tropical fruit that originated in the tropics of the Americas and is known to be a great source of vitamins C, A, fiber, and antioxidants. When ripe, this fruit has a butter-like texture with a fairly sweet flavor similar to cantaloupe and can be eaten raw.', 'Creamy, butter-like flavor when ripe Rich in vitamins A, C, fiber, and antioxidants Fairly sweet flavor like cantaloupe and mango Great addition to smoothies, salads, salsa, and more Delicious and nutritious', 'PRICO', 'https://i5.walmartimages.com/asr/72bfc24e-1bda-4bc4-aa2a-b25392dd537d.1b456f7450c3449fabe62df265577943.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/72bfc24e-1bda-4bc4-aa2a-b25392dd537d.1b456f7450c3449fabe62df265577943.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/72bfc24e-1bda-4bc4-aa2a-b25392dd537d.1b456f7450c3449fabe62df265577943.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (179637288, 'Pineapple Cut 12oz', 2.47, '826766217083', 'Pineapple Chunks 12 oz (340 g) No preservatives. Packed in its own juice. Product of Costa Rica. Keep refrigerated. 12 oz (340 g) Rancho Cordova, CA 95670 888-4-HWYFUN', 'Pineapple Chunks No preservatives. Packed in its own juice. Product of Costa Rica.', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (179839918, 'Regent Apple Totes', 0.98, '681131124386', 'short description is not available', 'Regent Apple Totes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (180088917, 'Rainier Cherries Frescos, 16 oz', 5.98, '852908002798', 'Cherries, Rainier 1 lb (454 g) World famous fruit. www.stemilt.com. Fruits & Veggies: More matters. Family owned since 1964. Facebook. Produce of USA. 1 lb (454 g) Wenatchee, WA 98801', 'Produce Unbranded Cherries Frescos 16 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/22d3a265-4cf7-4ab8-9a43-bf54c407b3b5.89711ba2a756bacf1dc4c2e26b842d40.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/22d3a265-4cf7-4ab8-9a43-bf54c407b3b5.89711ba2a756bacf1dc4c2e26b842d40.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/22d3a265-4cf7-4ab8-9a43-bf54c407b3b5.89711ba2a756bacf1dc4c2e26b842d40.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (180275380, 'Mixed Fruit 3 Lb Bag', 6.67, '810506011758', 'short description is not available', 'Mixed Fruit 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (180400255, 'Seedless Green Grapes, 2 lb bag', 3.96, 'deleted_813686010016', 'short description is not available', 'Green Grapes Seedless Bag, 2 lbs.', '', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (180576354, 'Motts Apples, 12 Count', 4.97, '095829201462', 'Apples, Sliced, Red 6 - 2 oz (57 g) bags [12 oz (340 g)] Hand-picked goodness. 6 individual bags. Ready to eat. Grown in USA. Keep refrigerated. 6 - 2 oz (57 g) bags [12 oz (340 g)] Eden Prairie, MN 55347 800-487-3245 2011 Mott\'s LLP', 'Mott\'s Sliced Red Apples - 6 CT.Motts is a Trademark of Mott\'s LLP.If you have any questions or comments abouts Mott\'s branded products please callGrown in Chile.1-800-487-3245.www.mottsfresh.com.©2011 Mott\'s LLP.', 'Mott\'s', 'https://i5.walmartimages.com/asr/3b6bb468-58bb-4d15-8916-edf6b7bb4a4e.0edf7b4d90814b8f43ec3bed949bea46.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3b6bb468-58bb-4d15-8916-edf6b7bb4a4e.0edf7b4d90814b8f43ec3bed949bea46.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3b6bb468-58bb-4d15-8916-edf6b7bb4a4e.0edf7b4d90814b8f43ec3bed949bea46.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (180842553, 'Yellow Flesh Peaches, per Pound', 1.58, '400094457054', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (180917271, 'China Nebo', 1.37, '400094287606', 'China Nebo', 'China Nebo 56', 'China Nebo', 'https://i5.walmartimages.com/asr/a134f2a1-2bb0-4e5c-a594-f84b63ab5928.22241f295458186b2ba0e4ed7d460d52.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a134f2a1-2bb0-4e5c-a594-f84b63ab5928.22241f295458186b2ba0e4ed7d460d52.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a134f2a1-2bb0-4e5c-a594-f84b63ab5928.22241f295458186b2ba0e4ed7d460d52.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (181108256, 'Fresh Lychees, 12 oz clamshell', 3.28, '037842054748', 'Also known as ?Lychee Nuts,? these small, unmistakably sweet fruits have rough, bumpy rinds that vary from red to pale-green blush. Inside, Lychees have perfumy, juicy, grape-like flesh that surrounds a single large, inedible seed.', 'Peel away outer skin; enjoy the juicy white flesh; discard inner seed; Keep refrigerated, wrapped in plastic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b5f75f25-17a2-4b7f-b3d4-bb835fa046c9.5bfbb286548ea8cc7f62921918290852.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b5f75f25-17a2-4b7f-b3d4-bb835fa046c9.5bfbb286548ea8cc7f62921918290852.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b5f75f25-17a2-4b7f-b3d4-bb835fa046c9.5bfbb286548ea8cc7f62921918290852.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (181116726, 'Large Avocado 4 Count Bag', 4.48, 'deleted_010612042251', 'short description is not available', 'Large Avocado 4 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (181474285, 'Walmart Produce Watermelon Quarters 2.5 Lb', 3.28, '074641012609', 'short description is not available', 'Walmart Produce Watermelon Quarters 2.5 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (181937951, 'Seedless Green Grapes, 2 lb bag', 3.96, 'deleted_885282001583', 'short description is not available', 'Green Grapes Seedless Bag, 2 lbs.', '', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (182168416, 'Fresh Dark Sweet California Cherries, Half Pint', 2.98, '845762088886', 'Fresh Dark Sweet California Cherries, Half Pint', 'Fresh Dark Sweet California Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (182199131, 'Organic Tropical Divine Grapes 1lb', 3.98, '816426013049', 'short description is not available', 'Organic Tropical Divine Grapes 1lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (182199330, 'Snack Fresh Red Grapes, 4ct, 12oz', 3.78, '074641070012', 'short description is not available', 'Snack Fresh Red Grapes, 4ct, 12oz', 'Snack Fresh', 'https://i5.walmartimages.com/asr/f8b9b0ce-edd8-425d-b628-8079742e2dfe.245e22e82c4f4d34934d92813d9f5af0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f8b9b0ce-edd8-425d-b628-8079742e2dfe.245e22e82c4f4d34934d92813d9f5af0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f8b9b0ce-edd8-425d-b628-8079742e2dfe.245e22e82c4f4d34934d92813d9f5af0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (182237089, 'Fresh Gala Apples, 5 lb Bag', 5, '033383087016', 'Gala apples are the perfect snack for anyone who loves fresh produce. These whole, juicy apples make for a sweet and satisfying treat. With no added sugar, you can feel good about snacking on these crisp and delicious fruits. Great for lunchboxes or as a midday snack, Gala apples are a must-have for anyone looking for a healthy and delicious snack option.', 'Fresh Gala Apples, 5 lb Bag: Sweet and mild with a subtle floral aroma Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidityFresh Gala Apples, 5 lb Bag: Includes 5 pounds of crisp apples Pair them with sharp cheeses and crackers for a stunning appetizer board Can be enjoyed fresh or cooked into both savory and sweet dishes Meets or exceeds U.S. Extra Fancy Minimum diameter: 2.25\"', 'Generic', 'https://i5.walmartimages.com/asr/c3a11866-043d-4cc2-88e1-994b0ef03d6c.468c36bb784022682bf220a2f872335c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3a11866-043d-4cc2-88e1-994b0ef03d6c.468c36bb784022682bf220a2f872335c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3a11866-043d-4cc2-88e1-994b0ef03d6c.468c36bb784022682bf220a2f872335c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (182434677, 'Braeburn Apples 3 Lb Bag', 3.42, '405559309732', 'short description is not available', 'Braeburn Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (182649342, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094007822', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (182777975, 'Fresh Concord Grapes, Bag', 2.98, '708174102000', 'short description is not available', 'Fresh Concord Grapes, Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (182930825, 'Fresh Apples, 3 lb Bag', 5.97, '741839007173', 'Our fresh produce of Fuji apples are a delicious variety belonging to the genus epithat \"Malus\". Bursting with sweetness and a crisp texture, these whole apples are perfect for snacking or cooking up a storm in the kitchen. Packed with flavor and nutrition, our Fuji apples are a must-have addition to your healthy lifestyle. Order now and savor the taste of these amazing fruits!', 'Our Delicious Whole Fuji Apples are great for snacking or a side to lunch! Pairs well with caramel or any fresh produce or organic ingredients. Sure to be a crowd pleaser with the crisp texture and sweet flavor! Grab some at your local store today!', 'Fresh', 'https://i5.walmartimages.com/asr/20408dce-424e-401f-a14f-45dfef314fae.5492c0eec7d4c544d59dbd2c903f6f8a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20408dce-424e-401f-a14f-45dfef314fae.5492c0eec7d4c544d59dbd2c903f6f8a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20408dce-424e-401f-a14f-45dfef314fae.5492c0eec7d4c544d59dbd2c903f6f8a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (183648377, 'Fieldpack Unbranded Chocolate Dipped Strawberries 8pack', 7.28, '204253000002', 'short description is not available', 'Fieldpack Unbranded Chocolate Dipped Strawberries 8pack', 'Fresh Produce', 'https://i5.walmartimages.com/asr/84a00c32-800d-48d9-8dc4-52cab770e5fe.d65255f5d4d4123aaa2aa1b0b41b0e57.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/84a00c32-800d-48d9-8dc4-52cab770e5fe.d65255f5d4d4123aaa2aa1b0b41b0e57.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/84a00c32-800d-48d9-8dc4-52cab770e5fe.d65255f5d4d4123aaa2aa1b0b41b0e57.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (183694367, 'Van Zyverden Grape Seedless Concord (1 Dormant Bare Plant Root) Full Sun, Blue, Perennial', 6.88, '030641780511', 'Grow your own fresh fruit! Grape Seedless Concord Dormant Plant Root is the perfect addition to your edible garden that will reap benefits for years to come! Plant Grapes in full sun. Grapes will grow in a variety of soils. Grapes are excellent when used as an ornamental and can be trained onto arbors, or on pergolas to provide a unique addition to the landscape. Once established, care consists entirely of annual pruning and picking the fruit. Grapes contain antioxidants that may help prevent heart disease and some cancers. Grapes are also an excellent source of vitamins A, C, and K. Grapes need deep, well-drained, loose soil with pH levels 5.5 to 6.5. Add 2-3\" of mulch to maintain soil moisture. Pruning is important. Don\'t be afraid to remove at least 90% of the previous season\'s growth when vines are dormant. Perennial', 'Grape Seedless Concord Edible Grow your own fruit Garden to table freshness! Plant in a full sun location Harvest Mid Season Excellent source of vitamins A, C, and K Can be eaten fresh or used to make wine, jam, juice, or raisins GMO Free Perennial', 'Van Zyverden', 'https://i5.walmartimages.com/asr/c0c7ff3c-b963-4655-9589-1f384e5c2b55.33b95a2d00b113260075f20bf3c0f13d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0c7ff3c-b963-4655-9589-1f384e5c2b55.33b95a2d00b113260075f20bf3c0f13d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0c7ff3c-b963-4655-9589-1f384e5c2b55.33b95a2d00b113260075f20bf3c0f13d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (183826277, 'Dragon Fruit', 4.98, '333835710586', 'Dragon fruit is a beautiful fruit grown in Southeast Asia, Mexico, Central and South America and Israel. The plant is actually a type of cactus. Dragon fruit is low in calories and offers numerous nutrients, including Vitamin C, phosphorus, and calcium, plus fiber and antioxidants.', 'Dragon Fruit', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cecadce6-c516-475b-8d2a-f4f8a63bf489_1.edd7181e4bc48c5abf58e16b135c374d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cecadce6-c516-475b-8d2a-f4f8a63bf489_1.edd7181e4bc48c5abf58e16b135c374d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cecadce6-c516-475b-8d2a-f4f8a63bf489_1.edd7181e4bc48c5abf58e16b135c374d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (184131762, 'Premium Polished Rose Pink Snap On Hard Shell Case for Motorola CLIQ MB200', 12.88, '033383109213', 'Looking for a case that protects your phone without adding bulk then this is the perfect solution for all of your worries. It fits like second skin to your phone and protect it from scratches, dust, drops and keep your phone new. The case has all required cut outs to charge, listen to music without removing.', 'The new Amzer Snap On Case is designed specifically for your Motorola CLIQ MB200, hugging every curve. Made of lightweight yet durable plastic material, it will safeguard your Motorola without adding extra bulk. So say good-bye to accidental bumps and scratches on your Motorola CLIQ MB200. Exact cutouts allow speedy access to critical controls. Protecting your new gadget has never been this easy. On the back. Get your Snap On Case for your Motorola CLIQ MB200 today! Product Features: Made of lightweight yet durable Hard Plastic material. Perfect to showcase your device. Precise Cutouts for Charging, Audio. Charge, Listen to music without removing case Provide best protection from bumps and dust Easy Installation and Removal', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5503d1cb-dcb2-458d-84c0-8f136f7a5c97.cbdac16d2d5f56e8027438ec69ab2edc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5503d1cb-dcb2-458d-84c0-8f136f7a5c97.cbdac16d2d5f56e8027438ec69ab2edc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5503d1cb-dcb2-458d-84c0-8f136f7a5c97.cbdac16d2d5f56e8027438ec69ab2edc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (184786729, 'Kiwi Picado, 4 Count', 2.47, '204925000002', 'Kiwi Picado, 4 Count', 'Hypermart Kiwi Picado 4ct', 'Fresh Produce', 'https://i5.walmartimages.com/asr/25c22e47-d2a3-4043-a4a2-3e3b5e4709ff.bb13816c8e0e0508c6e1e1a912e881d9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25c22e47-d2a3-4043-a4a2-3e3b5e4709ff.bb13816c8e0e0508c6e1e1a912e881d9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25c22e47-d2a3-4043-a4a2-3e3b5e4709ff.bb13816c8e0e0508c6e1e1a912e881d9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (184872867, 'Seedless Green Grapes, 2 lb bag', 7.92, 'deleted_850550002715', 'short description is not available', 'Green Grapes Seedless Bag, 2 lbs.', '', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (184910024, 'Kanzi (nikita) Apples 3 Lb Bag', 3.42, '847473005985', 'short description is not available', 'Kanzi (nikita) Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (184936689, 'Zestar Apples, Each', 1.47, '000000036252', 'short description is not available', 'Zestar Apples, Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (185123933, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094208441', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (185612868, 'Mixed Fruit', 3.42, '893268001038', 'short description is not available', 'Mixed Fruit', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (185626623, 'Manzana Roja, 3 Lb.', 4.97, '033383002804', 'Manzana Roja, 3 Lb.', 'Manzana Red Rome Wxf 3 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/20408dce-424e-401f-a14f-45dfef314fae.5492c0eec7d4c544d59dbd2c903f6f8a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20408dce-424e-401f-a14f-45dfef314fae.5492c0eec7d4c544d59dbd2c903f6f8a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20408dce-424e-401f-a14f-45dfef314fae.5492c0eec7d4c544d59dbd2c903f6f8a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (185660950, 'Watermelon Seedless', 4.48, '400094475751', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (185865524, 'Melorange Melon, each', 3.98, '885674000439', 'short description is not available', 'Melorange Melon, each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4421d2a2-59f0-41d0-8e19-6b607bf36575.d211e0b684e27d345eabd8031c801986.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4421d2a2-59f0-41d0-8e19-6b607bf36575.d211e0b684e27d345eabd8031c801986.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4421d2a2-59f0-41d0-8e19-6b607bf36575.d211e0b684e27d345eabd8031c801986.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (185869511, 'Fresh Manzana (Apples) Roja, 1 lb Bag Whole, Fresh', 1.57, '400094433683', 'Introducing the Jazz apple, a crisp and juicy variety with a sweet, tangy flavor. These apples are perfect for snacking, baking, and adding a burst of flavor to salads. With their beautiful red and yellow striped appearance, they are also a visually appealing addition to any fruit bowl. Grown in orchards across the USA, Jazz apples are a delicious and nutritious choice for any occasion. Fresh Produce that is made with organic ingredients.', 'Manzana Red Premium A delicious fresh and crispy apple A nutritious and whole food that is fresh produce Great for any occasion', 'Unbranded', 'https://i5.walmartimages.com/asr/ada31246-1c45-4c41-aec7-e2d607500bdf.38553668d16b287cd56e935e3f043740.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ada31246-1c45-4c41-aec7-e2d607500bdf.38553668d16b287cd56e935e3f043740.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ada31246-1c45-4c41-aec7-e2d607500bdf.38553668d16b287cd56e935e3f043740.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (186115783, 'Seedless Green Grapes, 2 lb bag', 3.96, 'deleted_850550002210', 'short description is not available', 'Green Grapes Seedless Bag, 2 lbs.', '', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (186220624, 'Watermelon Seedless', 4.48, '405503752416', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (186366439, 'Honeydew Slices 16oz Rfg', 6.88, '826766254200', 'short description is not available', 'Honeydew Slices 16oz Rfg', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (186548189, 'Fresh Organic Mangoes, Size Varies', 0.96, '000000949590', 'Get ready for big flavor with our Fresh Organic Mangoes. This sweet, juicy tropical fruit originated in South Asia and has a soft, buttery texture and naturally sweet taste that the whole world has grown to love. They\'re delicious and nutritious, containing loads of vitamin C, which may act as an antioxidant and contribute to healthy immunity. They also have vitamin A, calcium, iron and fiber, so you can feel good about eating them. Slice up a mango and enjoy as a healthy, sweet snack, use it to make fresh mango salsa, or add it to sweet treats like creamy mango-lime bars or mango sorbet! The sky is the limit with this versatile fruit. Life is better when you have Fresh Organic Mangoes.', 'Soft, buttery texture and naturally sweet taste Rich in vitamins A, C, calcium, iron, and fiber Makes a healthy snack Great addition to smoothies, salads, salsa, and more Can also be used to cook and bake with Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/49e5128f-8d9e-477d-8f8e-2e619d55c101.69d7f91ed746f894aac7ddbb65978487.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/49e5128f-8d9e-477d-8f8e-2e619d55c101.69d7f91ed746f894aac7ddbb65978487.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/49e5128f-8d9e-477d-8f8e-2e619d55c101.69d7f91ed746f894aac7ddbb65978487.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (186560626, 'Mineolas', 1.86, '400094292990', 'Mineolas', 'Mineolas', 'Unbranded', 'https://i5.walmartimages.com/asr/f045e684-51cf-402a-9f18-dfb2fd606a4d.cb9d28972bb86b364aa09b97aeddb498.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f045e684-51cf-402a-9f18-dfb2fd606a4d.cb9d28972bb86b364aa09b97aeddb498.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f045e684-51cf-402a-9f18-dfb2fd606a4d.cb9d28972bb86b364aa09b97aeddb498.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (186590709, 'Green Banana, 1 Lb Individual Unit', 0.97, '400094021323', 'Green Banana, 1 Lb.', 'Platano Verde Platano Verde Platano Verde', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ce39766e-ebf1-4923-810f-3a013337279d.7fc21d8dee14b8feda43214ff58c3a66.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce39766e-ebf1-4923-810f-3a013337279d.7fc21d8dee14b8feda43214ff58c3a66.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce39766e-ebf1-4923-810f-3a013337279d.7fc21d8dee14b8feda43214ff58c3a66.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (186737523, 'Fresh Apple Snapdragon, Each', 2.47, '879329004422', 'Get ready for a crunch like no other with our Fresh Apple Snapdragon! This apple variety is known for its crisp texture and satisfying snap when bitten into. Our Snapdragons are hand-picked at peak ripeness and carefully selected for their size and quality. Perfect for snacking, baking, or adding to salads, our Apple Snapdragons are a versatile and delicious choice. Order now and experience the satisfying crunch of our Snapdragons!', 'Sweet Crunchy Fresh', 'TRICO', 'https://i5.walmartimages.com/asr/a0bb730d-2d53-498d-ae7c-f82d7439c74a.1b0c9c794b996baea40f94c736b6716e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a0bb730d-2d53-498d-ae7c-f82d7439c74a.1b0c9c794b996baea40f94c736b6716e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a0bb730d-2d53-498d-ae7c-f82d7439c74a.1b0c9c794b996baea40f94c736b6716e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (186979264, 'Fresh Red Apples, 3 lb Bag', 5.57, '033383002774', 'Apples, Red Rome, Bag 48 OZ US extra fancy - 2-1/2 inch min. Grown and packed by Fitzgerald\'s Orchards. Washed and coated with a food grade lac-resin based waxy to preserve freshness. Produce of USA. 48 oz (3 lb) 1.36 kg Tyro, VA 22976 434-277-5798. Savor the sweet taste of Red Apples that have a classic sweet flavor and are crisp and juicy with higher antioxidants due to the rich deep red skin. Perfect for snacking, they have a creamy white flesh with low acidity. Chop the apples up and add them to a slow cooker with lemon juice, water and cinnamon for a sweet and tasty apple sauce that everyone is sure to love. Add it to your favorite smoothie or juice blend for a morning pick me up to get your day started right. Serve with a dollop of peanut butter and enjoy as a healthy snack that both kids and adults will love. Enjoy the delicious taste of Red Apples.', 'Apples, Red Rome US extra fancy - 2-1/2 inch min. Grown and packed by Fitzgerald\'s Orchards. Washed and coated with a food grade lac-resin based waxy to preserve freshness. Produce of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/02b8a627-7446-4ddb-9802-24328c117b2c.a66b7ba953580f36a1b7cf618a58fee1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/02b8a627-7446-4ddb-9802-24328c117b2c.a66b7ba953580f36a1b7cf618a58fee1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/02b8a627-7446-4ddb-9802-24328c117b2c.a66b7ba953580f36a1b7cf618a58fee1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (187159123, 'Fresh Cranberries, 32 oz Bag', 3.58, '031200900111', 'Savor the tart taste of Fresh Cranberries. Cranberries have a wonderful tart flavor that can easily take on the sweetness of your favorite sweetener. Use them to make a tart cranberry sauce, bake them into delicious cranberry and orange scones, combine with baked Brie for a gooey, sweet appetizer, or reduce them for a glaze to use on grilled chicken or turkey. They contain essential vitamins and nutrients like vitamin C, vitamin B, fiber, and antioxidants making them perfect for a healthy diet. Prior to use simply gently wash them with cool water, drain, and enjoy the zesty taste. Refrigerate the berries to keep them fresh and ready for use. Pick up Fresh Cranberries today and relish the delectable flavor.', 'Fresh Cranberries, 32 oz: Enjoy with your favorite sweetener, baked good, or savory dish Light, tart taste Healthy treat Prior to use gently wash them with cool water Refrigerate your berries in the original container to maintain freshness Keep dry for optimal freshness Cranberries can be stored up to 4 weeks in the refrigerator and up to 1 year in the freezer', 'Unbranded', 'https://i5.walmartimages.com/asr/27b6e404-9171-4feb-a69e-3ae7e8b51fe2.16454745b2d2da4194075b1433d8212e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/27b6e404-9171-4feb-a69e-3ae7e8b51fe2.16454745b2d2da4194075b1433d8212e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/27b6e404-9171-4feb-a69e-3ae7e8b51fe2.16454745b2d2da4194075b1433d8212e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (187576586, 'Fresh Black Seedless Grapes bagged,2lb', 3.47, '405515367738', 'Indulge in the freshness of our juicy black grapes. Carefully handpicked, each grape is carefully inspected to ensure a whole and delectable fruit. Packed in a convenient bag, our grapes are perfect for a light and healthy snack. Savor the sweetness of every bite, bursting with flavors that will satisfy your taste buds. Order our fresh black grapes now for a healthier and happier you!', 'Fresh Black Seedless Grapes Bags Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/726cc348-eba5-40a7-85b5-7ec18fa52642.7205c13cc733c5b050b72d02d77f385a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/726cc348-eba5-40a7-85b5-7ec18fa52642.7205c13cc733c5b050b72d02d77f385a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/726cc348-eba5-40a7-85b5-7ec18fa52642.7205c13cc733c5b050b72d02d77f385a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (187743523, 'Fresh Dark Sweet Cherries, 1 Lb.', 5.47, 'deleted_888289402063', 'Fresh Dark Sweet Cherries, 1 Lb.', 'Fresh Dark Sweet Cherries', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (187943300, 'Orange Slices, 2.25 lbs', 5.98, '826766252251', 'Orange Slices 2/36oz', 'ORANGE SLICES 36Z RF', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a3f1d265-3cc9-44ad-b351-31fdbaac92ba_1.e52ff139e67785230894e85199c8a3d9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a3f1d265-3cc9-44ad-b351-31fdbaac92ba_1.e52ff139e67785230894e85199c8a3d9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a3f1d265-3cc9-44ad-b351-31fdbaac92ba_1.e52ff139e67785230894e85199c8a3d9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (188047527, 'Satsuma Mandarin Oranges, 1 Each', 9.98, '605049436751', 'Satsuma Mandarin Oranges, 1 Each', 'Orange Satsuma', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (188211987, 'Fresh Bananas, 3 lb Bunch', 1.47, '949228266570', 'Our fresh bananas are made with organic ingredients and are the perfect healthy snack! These sweet and delicious fruits are filled with essential vitamins and minerals that provide energy and help maintain a balanced diet. Enjoy them as a quick on-the-go snack or add them to smoothies and desserts for a delicious treat. Trust us, you won\'t be disappointed!', '3lb whole bananas, a staple fresh produce item, are renowned for their full, sweet flavor and versatility in various recipes, making them a popular and nutritious choice for consumers around the world. As a type of fresh produce, bananas are packed with essential nutrients like potassium, vitamin C, and vitamin B6, contributing to a well-rounded diet and promoting overall health. Enjoying a whole, ripe banana provides a satisfying and naturally sweet snack, while also allowing for easy incorporation into dishes such as smoothies, fruit salads, pancakes, and baked goods.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ed997ace-a601-48bb-8700-670d063577a3_1.f519cb22f8fc8dfcd0faea10c5c3b97f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed997ace-a601-48bb-8700-670d063577a3_1.f519cb22f8fc8dfcd0faea10c5c3b97f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed997ace-a601-48bb-8700-670d063577a3_1.f519cb22f8fc8dfcd0faea10c5c3b97f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (188649899, 'Stemilt Growers Stemilt Lil Snappers Apples, 3 lb', 4.99, 'deleted_741839005896', 'Apples, Braeburn, Lil Snappers, Kid Size, Bag 3 LB 2-1/2 inch min dia. Meets or exceeds US extra fancy. Robust, spicey-sweet. World famous fruit. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us: YouTube; Facebook; Twitter; Pinterest. For fun recipes, activities and more, visit www.lilsnappers.com. (Std. msg & data rates may apply). Responsible choice. Fruits & Veggies: More matters. Resealable. Produce of USA. 3 lb (1.36 kg) Wenatchee, WA 98801', 'Apples, Braeburn, Kid Size Fruit 2-1/2 inch min dia. Meets or exceeds US extra fancy. Robust, spicey-sweet. World famous fruit. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us: YouTube; Facebook; Twitter; Pinterest. For fun recipes, activities and more, visit www.lilsnappers.com. (Std. msg & data rates may apply). Responsible choice. Fruits & Veggies: More matters. Resealable. Produce of USA.', 'Stemilt', 'https://i5.walmartimages.com/asr/ccdca3ff-b2c2-43fd-b52e-561b1eaccea3_1.0ea87f279447fe052e2bfd1817fd5b03.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ccdca3ff-b2c2-43fd-b52e-561b1eaccea3_1.0ea87f279447fe052e2bfd1817fd5b03.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ccdca3ff-b2c2-43fd-b52e-561b1eaccea3_1.0ea87f279447fe052e2bfd1817fd5b03.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (188889007, 'Fresh Mamey, Each', 2.47, '000000043106', 'Fresh Mamey fruit is a tropical delight known for its rich, creamy flavor and impressive nutritional benefits. Packed with vitamins A, C, and E, along with powerful antioxidants, it supports healthy skin, strong immunity, and clear vision. Its natural sugars and dietary fiber promote sustained energy and smooth digestion, while minerals like potassium, iron, and magnesium contribute to heart health and overall vitality. With its abundance of nutrients and naturally sweet taste, fresh mamey is not only delicious but also a wholesome, energy-boosting fruit that enhances wellness and supports a balanced lifestyle.', 'Packed with Vitamins A & C Naturally Sweet and Creamy Flavor Boosts Energy and Vitality Supports Eye and Skin Health Aids in Healthy Digestion Rich in Dietary Fiber and Antioxidants Helps Strengthen the Immune System Also known as Mamey Sapote, Zapote, and Mamey Colorado around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6c5ee02b-8f69-4940-9aa7-f6aada45231f.70086e33d42f39d7c09afbfa89721f11.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6c5ee02b-8f69-4940-9aa7-f6aada45231f.70086e33d42f39d7c09afbfa89721f11.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6c5ee02b-8f69-4940-9aa7-f6aada45231f.70086e33d42f39d7c09afbfa89721f11.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (189271316, 'Fresh Organic Gala Apples, Each', 2.46, '405561020045', 'Our Gala Apples are grown with care, hand-picked at peak ripeness, and delivered straight to your doorstep. Each bite bursts with the sweet, juicy flavor characteristic of the Gala variety. Perfect for snacking on-the-go, baking into a pie, or adding to your favorite salad recipe. Stock up on these delicious, healthy apples today! This is some delicious organic fresh produce, available for you!', 'Organic Gala Apples, Each: Take home pounds of crisp apples! USDA organic Pair them with sharp cheeses and crackers for a stunning appetizer board Can be enjoyed fresh or cooked into both savory and sweet dishes Meets or exceeds U.S. Extra Fancy Minimum diameter: 2.25\"', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ad66fe2b-9c82-49cc-97c6-9c98e986287b.0eb55708071a4e14b8ffed5ebe0b345b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ad66fe2b-9c82-49cc-97c6-9c98e986287b.0eb55708071a4e14b8ffed5ebe0b345b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ad66fe2b-9c82-49cc-97c6-9c98e986287b.0eb55708071a4e14b8ffed5ebe0b345b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (189295778, 'Fresh Pineapple, Each', 3.97, 'deleted_689466403350', 'Enjoy a burst of tropical flavor with this Fresh Pineapple. This pineapple can be a satisfying afternoon snack, or you can use it in a variety of recipes. For breakfast, use this pineapple to make a rich and creamy smoothie or serve it alongside your pancakes, sausage, and eggs. Slice it up and use to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. For dessert, you could make a crowd-pleasing pineapple upside down cake or a comforting pineapple crisp. However you choose to use it, this Fresh Pineapple will add flavor to any meal or beverage.', 'Use the pineapple to make a rich and creamy smoothie Slice it up and use to add flavor to a lunchtime salad This pineapple can be a satisfying afternoon snack', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1d2b3723-b31f-481d-ae30-c82fcbb59e20.d2e4de8d8b987f98a6e9da93a7e8c752.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d2b3723-b31f-481d-ae30-c82fcbb59e20.d2e4de8d8b987f98a6e9da93a7e8c752.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d2b3723-b31f-481d-ae30-c82fcbb59e20.d2e4de8d8b987f98a6e9da93a7e8c752.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (189460586, '10# Bag Grapefruit', 9.56, '852453002083', 'short description is not available', '10# Bag Grapefruit', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (189558397, 'Organic White Grapes, 1 Lb.', 4.97, '400094307625', 'Organic White Grapes, 1 Lb.', 'Organic Uva Blanca', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/48f39cfd-558f-49cc-9dcc-9647d3a1bb9a.2892d620e7c34c7da1ab59479dcf5421.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48f39cfd-558f-49cc-9dcc-9647d3a1bb9a.2892d620e7c34c7da1ab59479dcf5421.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48f39cfd-558f-49cc-9dcc-9647d3a1bb9a.2892d620e7c34c7da1ab59479dcf5421.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (190011757, '308pc Pomegranate Ca', 702.24, '400094292143', 'short description is not available', '308pc Pomegranate Ca', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (190397400, 'Jonagold Apples 3 Lb Bag', 3.42, '847473005756', 'short description is not available', 'Jonagold Apples 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (190716908, 'Fresh Caramel Apple with Nuts, Each', 1.97, '035266002413', 'Experience the ultimate indulgence with our artisanal Fresh Caramel Apple with Nuts, various brands. We have expertly combined the crisp flavors of apple with rich, velvety caramel, creating a decadent masterpiece that\'s sure to tantalize your taste buds. Infused with a medley of fresh, crunchy nuts (allergens), this exquisitely crafted delicacy is a true feast for the senses. From the sharp, tangy top notes to the buttery base, each bite reveals a symphony of flavors. Perfect for any occasion.', 'Grab yourself a genus epithet fresh caramel apple today!! Simply Caramel, Due to the nature of this sticky, delicious, no-frills flavor, Simply Caramel is delicious. Fresh Apples handpicked, dipped on a special-recipe caramel for a taste that’s so simple, so delicious! The perfect healthy treat for the season.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/19fffe3d-bdc0-4e88-b7e7-410f2441a159_2.c186cf0fd89eeb2a860d10adef8c1c32.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19fffe3d-bdc0-4e88-b7e7-410f2441a159_2.c186cf0fd89eeb2a860d10adef8c1c32.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19fffe3d-bdc0-4e88-b7e7-410f2441a159_2.c186cf0fd89eeb2a860d10adef8c1c32.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (190768689, 'Granny Smith Apples 4 Pack', 3.98, '033383098524', 'short description is not available', 'Granny Smith Apples 4 Pack', 'Unbranded', 'https://i5.walmartimages.com/asr/fffe8009-58ce-4612-a363-07bca49e2f3c_1.0434d6d02aa20faef48fd4325b8b3259.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fffe8009-58ce-4612-a363-07bca49e2f3c_1.0434d6d02aa20faef48fd4325b8b3259.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fffe8009-58ce-4612-a363-07bca49e2f3c_1.0434d6d02aa20faef48fd4325b8b3259.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (191417752, 'Solo Papaya, 2 Count', 2.98, '852652006066', 'Solo Papaya, 2 Count', 'Solo Papaya, 2 pack', 'Unbranded', 'https://i5.walmartimages.com/asr/8d59132e-e32a-4053-a0ea-3db6146bd2b4.46b4be8e7b4a7f3193614c37517a23de.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d59132e-e32a-4053-a0ea-3db6146bd2b4.46b4be8e7b4a7f3193614c37517a23de.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d59132e-e32a-4053-a0ea-3db6146bd2b4.46b4be8e7b4a7f3193614c37517a23de.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (191481898, 'Melon Honeydew', 4.47, '400094058411', 'Melon Honeydew', 'Melon Honeydew', 'Unbranded', 'https://i5.walmartimages.com/asr/516f5aca-a745-40ac-a613-29e40b932d00.3d2901bc19ffd14d19045ee50f1437f8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/516f5aca-a745-40ac-a613-29e40b932d00.3d2901bc19ffd14d19045ee50f1437f8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/516f5aca-a745-40ac-a613-29e40b932d00.3d2901bc19ffd14d19045ee50f1437f8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (191809905, 'Fuji Apples Bulk', 1.47, '405521322257', 'short description is not available', 'Fuji Apples Bulk', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (192049973, '2# Bag Limes', 4.58, 'deleted_744430275507', 'short description is not available', '2# Bag Limes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (192337511, 'Fresh Organic Grapefruit, 4 lb Bag', 5.88, '095829310744', 'Organic Grapefruit is the perfect balance between tart and sweet. The balance between tart and sweet is great for both savory and sweet dishes any time of day. Enjoy half of an organic grapefruit sprinkled with sugar, beside some eggs and toast in the morning for a light, sweet breakfast. Slice it up and put in a salad with spinach, avocado, and red onion topped with a mustard and balsamic vinegar dressing for lunch or dinner. Make delicious grapefruit bars that showcase the sweet and tartness of this versatile fruit. For an adult recipe juice the grapefruit and pair with some simple syrup and alcohol for a refreshing cocktail. This fruit is the perfect addition to a healthy diet as it is a great source of vitamin C and vitamin A. With such versatility, Organic Grapefruit will become a pantry staple in your home.', 'Great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a grapefruit sprinkled with sugar in the morning, slice it up and put it in salad for lunch or dinner, or make grapefruit bars Great source of vitamin C and vitamin A', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f273fed7-a174-407c-8de0-4e6d5aff9082.21299a4242760c135764eed9fe4b8195.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f273fed7-a174-407c-8de0-4e6d5aff9082.21299a4242760c135764eed9fe4b8195.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f273fed7-a174-407c-8de0-4e6d5aff9082.21299a4242760c135764eed9fe4b8195.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (192484644, 'Fresh Miscellaneous Pears, per Pound', 1.97, '000000044141', 'Miscellaneous Pears, per Pound', 'Misc Pears, Each Pears in bulk are fresh and of high quality Nutritious fruit packed with fiber, vitamins, and minerals Aiding digestion, boosting immunity, and supporting heart health, Pears in bulk are an eco-friendly option, as buying in bulk reduces packaging waste Adds flavor to a variety of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/91e9b535-1d59-4a79-8f9d-0175db92b355.2d3cac9509807a265a9177c2bc1758db.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/91e9b535-1d59-4a79-8f9d-0175db92b355.2d3cac9509807a265a9177c2bc1758db.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/91e9b535-1d59-4a79-8f9d-0175db92b355.2d3cac9509807a265a9177c2bc1758db.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (192692241, 'Stemilt Lil Snappers Apples Honeycrisp', 9.87, '741839005926', 'Apples, Honey Crisp, Lil Snappers, Bag 3 LB 2-1/2 inch min dia. Juicy and honey-sweet. Kid size fruit. Meets or exceeds US Extra Fancy. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. World famous fruit. Responsible choice. Fruits & Veggies: More matters. Follow Us: YouTube; Facebook; Twitter; Pinterest. For fun recipes, activities and more, visit www.lilsnappers.com. Std. msg & data rates may apply. Resealable. Scan me! Product of USA. 3 lb (1.36 kg) Wenatchee, WA 98801', 'Apples, Honeycrisp 2-1/2 inch min dia. Juicy and honey-sweet. Kid size fruit. Meets or exceeds US Extra Fancy. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. World famous fruit. Responsible choice. Fruits & Veggies: More matters. Follow Us: YouTube; Facebook; Twitter; Pinterest. For fun recipes, activities and more, visit www.lilsnappers.com. Std. msg & data rates may apply. Resealable. Scan me! Product of USA.', 'Lil Snappers', 'https://i5.walmartimages.com/asr/f45e4efb-bcfb-48be-b9ab-59c67d8c551e_1.bfbe4313d25692801b4e5a7f180e5ef2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f45e4efb-bcfb-48be-b9ab-59c67d8c551e_1.bfbe4313d25692801b4e5a7f180e5ef2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f45e4efb-bcfb-48be-b9ab-59c67d8c551e_1.bfbe4313d25692801b4e5a7f180e5ef2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (193644713, 'Genuine Coconut Refrigerated Fresh Organic Coconut Chunks, All-Natural Vanilla, 2 oz', 1.97, '856048008115', 'Genuine Coconut Organic Coconut Chunks are the perfect snack. They are ready to snack straight from the bag. Made with organic coconut chunks, this snack has a natural vanilla flavor that makes it excellent for satisfying your sweet tooth. Eat them as is, add them to a granola, or a fruit salad for a sweet and tropical addition. The resealable bag helps to maintain freshness, so you can enjoy these coconut chunks for longer. They are USDA certified organic, so you can feel good about buying these for your family. They are a good source of fiber and other nutrients. Treat yourself and your family to the Genuine Coconut Organic Coconut Chunks.', 'Genuine Coconut Organic Coconut Chunks, All Natural Vanilla, 2 oz Ready to snack straight from the bag Has natural vanilla flavor that makes it excellent for satisfying your sweet tooth Enjoy them as is, added to a granola, or in a fruit salad Resealable bag helps maintain freshness USDA certified organic Good source of fiber and other nutrients', 'Genuine Coconut', 'https://i5.walmartimages.com/asr/6f33eec3-0c61-4b83-8063-ea9f7c0af03d.de18c57645ef11312f6928eb659e140e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6f33eec3-0c61-4b83-8063-ea9f7c0af03d.de18c57645ef11312f6928eb659e140e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6f33eec3-0c61-4b83-8063-ea9f7c0af03d.de18c57645ef11312f6928eb659e140e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (194020572, 'Fieldpack Unbranded Watermelon Seedless', 5.67, 'deleted_858840007235', 'short description is not available', 'Fieldpack Unbranded Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (194194386, 'Carrot Grape & Pretzel Snack Tray 6 Oz', 2.5, '074641300560', 'short description is not available', 'Carrot Grape & Pretzel Snack Tray 6 Oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (194244879, 'Fresh Bosc Pears, 1 lb Bag', 2.47, '400094434031', 'Enjoy the sweet, juicy flavor and delicate texture of Fresh Bosc Pears. With their distinctive elongated shape and brownish-yellow skin, these pears are perfect for snacking, baking, or adding to salads. Grown in orchards and hand-picked for optimum freshness, each pear is bursting with natural goodness and nutritional benefits. With Bosc Pears, you can savor the taste of nature\'s bounty in every bite.', 'Bosco pears are a unique variety known for their distinctive shape and sweet, juicy flavor - They have a tender, buttery texture that makes them ideal for eating fresh or using in cooking and baking - High in dietary fiber and vitamin C, making them a healthy snack option - The 3lb bag size is convenient for families and individuals looking for a larger supply of fresh pears Bosco pears are harvested at their peak ripeness and carefully packed to ensure maximum freshness and flavor - They have a long shelf life and can be stored in the refrigerator for up to 2-3 weeks - Whole Bosco pears are available seasonally, making them a special treat to enjoy during their peak harvest time. Made with organic ingredients.', 'Unbranded', 'https://i5.walmartimages.com/asr/c98914c5-5c35-4240-9391-48236b252f48.be13451793917c57ecf99a1c43b26eb1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c98914c5-5c35-4240-9391-48236b252f48.be13451793917c57ecf99a1c43b26eb1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c98914c5-5c35-4240-9391-48236b252f48.be13451793917c57ecf99a1c43b26eb1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (194308159, 'Gala Apples 3 Lb Bag', 2.62, 'deleted_811857020581', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (194505867, 'Fresh Black Seedless Grapes bagged,2lb', 3.47, '400094434451', 'Indulge in the freshness of our juicy black grapes. Carefully handpicked, each grape is carefully inspected to ensure a whole and delectable fruit. Packed in a convenient bag, our grapes are perfect for a light and healthy snack. Savor the sweetness of every bite, bursting with flavors that will satisfy your taste buds. Order our fresh black grapes now for a healthier and happier you!', 'Fresh Black Seedless Grapes Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/94bf557c-b713-414a-bada-55eda039c35f.47094b314a59658a66e0ae4c74648f04.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/94bf557c-b713-414a-bada-55eda039c35f.47094b314a59658a66e0ae4c74648f04.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/94bf557c-b713-414a-bada-55eda039c35f.47094b314a59658a66e0ae4c74648f04.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (194783028, 'Summer Splash', 7.33, '893268001847', 'short description is not available', 'Summer Splash', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (196498007, 'Sicilia Lemon Squeeze, 4 Oz.', 2.18, '030849000046', 'Lemon Squeeze, Bottle 4 OZ Made with organic lemon juice and organic lemon oil. www.sicilia.us. Use like fresh lemons. Bottler: SIDAG AG, Switzerland. Certified organic by IMOswiss, AG. Product of Italy. Keep refrigerated after opening. Use by date stamped. 4 fl oz (118 ml) 777 Passaic Avenue Suite 488 Clifton, NJ 07012', 'Lemon SqueezeMade with organic lemon juice and organic lemon oil. www.sicilia.us. Use like fresh lemons. Bottler: SIDAG AG, Switzerland. Certified organic by IMOswiss, AG. Product of Italy.', 'Sicilia', 'https://i5.walmartimages.com/asr/c2f1e9a3-6969-4b7c-b9c1-e619826d8305_1.663970bbf5d49fc5288f7bc491312ccc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c2f1e9a3-6969-4b7c-b9c1-e619826d8305_1.663970bbf5d49fc5288f7bc491312ccc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c2f1e9a3-6969-4b7c-b9c1-e619826d8305_1.663970bbf5d49fc5288f7bc491312ccc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (196777487, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_400094103937', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (196788535, 'Ready Pac Foods Ready Pac Fruit Blend, 10.5 oz', 2.97, '077745237466', 'Fruit Blend, Super Fruit Melody 10.5 oz Perishable. No preservatives. Ingredients may vary by season. Keep refrigerated. 10.5 oz Irwindale, CA 91706 800-800-7822', 'Fruit Blend, Super Fruit Melody Perishable. No preservatives. Ingredients may vary by season.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (196871294, 'Cut Watermelon 1.5 Lbs', 1.5, '211566000001', 'short description is not available', 'Cut Watermelon 1.5 Lbs', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (196955294, 'Watermelon Seedless', 4.48, '400094138700', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (197097098, 'Fresh Multi Color Grapes, 3 Lb', 3.22, '814326010182', 'short description is not available', 'Fresh Multi Color Grapes, 3 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (197461287, 'Fresh Navel Oranges, 10 lb Box', 9.98, '095829500213', 'Introducing our fresh produce of sweet and juicy oranges, packaged full and ready to enjoy in a convenient bag. Bursting with vitamin C and antioxidants, each whole orange provides a flavorful snack that is both healthy and delicious. Perfect for on-the-go or as a refreshing addition to any meal, our oranges are the perfect choice for those seeking wholesome, full-bodied produce. Order your bag of oranges today and taste the difference of high-quality, farm-fresh fruit!', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes Use as a garnish for your favorite cocktail Make sweet desserts like ambrosia, orange bars, and orange pie Available in a 10-pound box', 'Fresh Produce', 'https://i5.walmartimages.com/asr/da5dc133-8ac8-43e0-ad3a-5f6113dfcd24.25d2ffe88b1908ec0fe0922f58144769.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/da5dc133-8ac8-43e0-ad3a-5f6113dfcd24.25d2ffe88b1908ec0fe0922f58144769.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/da5dc133-8ac8-43e0-ad3a-5f6113dfcd24.25d2ffe88b1908ec0fe0922f58144769.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (197606488, 'Apricot, 1 lb Pack', 3.12, 'deleted_847081000464', 'short description is not available', 'Fresh Grown Apricots 16oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (197642988, '120pc Apl Granny 5#', 600, '405671839254', 'short description is not available', '120pc Apl Granny 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (198006071, 'Pineapple 9 Oz', 2.5, '826766255856', 'short description is not available', 'Pineapple 9 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (198209611, 'Rubberized Protector Hard Shell Snap On Case for HTC EVO V 4G, HTC EVO 3D, Sprint HTC EVO 3D - 3D Love', 4.24, '033383106007', 'Looking for a case that protects your phone without adding bulk then this is the perfect solution for all of your worries. It fits like second skin to your phone and protect it from scratches, dust, drops and keep your phone new. The case has all required cut outs to charge, listen to music without removing.', 'Personalize your handheld while you protect it! 3D Love Protector cases are fashioned from a durable hard shell and topped off with a soft rubberized finish. The 3D Love protector case is able to resist shock from accidental bumps and drops, providing the ultimate in phone protection. The 2 piece protector case snaps perfectly around your HTC and features precise cutouts for all ports and controls. So add a layer of fun and a layer of protection to your HTC EVO 3D with a 3D Love Protector Case! Product Features: Smooth to the touch. Definitive fit for maximum protection Resist shock from accidental bumps and drops Preserve from scratches, dirt or anything else that arrives into contact with your device Allow you to plug your charger, cable, headset without removing the case', 'Unbranded', 'https://i5.walmartimages.com/asr/919a01e0-2f04-4587-8c40-b4bfa618dc19.b7514fc2f42b99a71715d0fce3979ed9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/919a01e0-2f04-4587-8c40-b4bfa618dc19.b7514fc2f42b99a71715d0fce3979ed9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/919a01e0-2f04-4587-8c40-b4bfa618dc19.b7514fc2f42b99a71715d0fce3979ed9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (198291386, 'Viva Tierra Organic Pear, 3 Lb.', 8.97, '033383300825', 'Viva Tierra Organic Pear, 3 Lb.', 'Viva Tierra Pear Organic 3 Lb', 'Viva Tierra', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (198294985, 'Stemilt Lil Snappers Apples Fuji', 5.97, '741839005889', 'Apples, Fuji, Lil Snappers, Bag 3 LB 2-1/2 inch min dia. Crisp, juicy and sugary-sweet. Resealable. World famous fruit. Kid size fruit. Meets or exceeds US extra fancy. Coated with food grade vegetable and/or shellac based wax resin to maintain freshness. Follow us: YouTube; Facebook; Twitter; Pinterest. For fun recipes, activities and more, visit www.lilsnappers.com. World famous fruit. Fruits & Veggies: More matters. Produce of USA. 3 lb (1.36 kg) Wenatchee, WA 98801', 'Apples, Fuji 2-1/2 in min. dia. Crisp, juicy & sugary-sweet. Kid size fruit. World famous fruit. May have been treated with food grade vegetables and/or shellac based wax resin to maintain freshness. Meets or exceeds US extra fancy. Have a plant. Responsible choice. Follow us YouTube; Facebook; Twitter; Pinterest. For fun recipes activities and more, visit www.lilsnappers.com. Resealable. (Std. Msg & data rates may apply). Product of USA.', 'Lil Snappers', 'https://i5.walmartimages.com/asr/b49a683e-bd5e-435b-91e9-9f0ef7b73094.2a81f91ebadf460781a7be9520759dd1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b49a683e-bd5e-435b-91e9-9f0ef7b73094.2a81f91ebadf460781a7be9520759dd1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b49a683e-bd5e-435b-91e9-9f0ef7b73094.2a81f91ebadf460781a7be9520759dd1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (198386740, 'Candy Apples w/o Nuts, 3 Pack', 2.98, 'deleted_035266000112', 'Wanting a treat without Nuts? The 3 pack of Candy Apples without Nuts is the perfect way to get into the Fall season!', '3 Pack Candy Apple without Nuts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/41fc9e08-c1b3-416d-b006-8ce2f6894d3c_1.5fed48b33a2cb43837b6cd540211eb2a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41fc9e08-c1b3-416d-b006-8ce2f6894d3c_1.5fed48b33a2cb43837b6cd540211eb2a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41fc9e08-c1b3-416d-b006-8ce2f6894d3c_1.5fed48b33a2cb43837b6cd540211eb2a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (198420939, 'Yellow Flesh Peaches, per Pound', 1.58, '405513708649', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (198456300, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094033067', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (198700570, 'Fresh Magenta Melon, Each', 2.68, '000000031028', 'Treat yourself to the refreshing flavor of a fresh Magenta Melons. Enjoy this tasty melon on its own as a healthy snack or incorporate it into a variety of delicious recipes. For breakfast, you can make a sweet fruit bowl with sliced Magenta, strawberries, pineapple, and kiwi. For an extra special treat, top with a dollop of whipped cream. Cut it into small pieces and put it in a fresh salad along with chicken, cucumbers, tomatoes, and a light dressing. You can even use the magenta melons to make a refreshing summer cocktail, a spreadable jam or a light sorbet. Enjoy the sweet and juicy taste of fresh Magenta Melon.', 'Fresh Magenta Melons, Each: Ideal addition to every kitchen Flavorful addition to many recipes Enjoy on its own or add to a mixed fruit salad Add to your fresh garden salad Get creative & make a melon cocktail or a refreshing sorbet Explore all the delicious ways to add fresh melon to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (198777382, 'Stayman Apples, Each', 1.47, '898205002062', 'short description is not available', 'Stayman Apples, Each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (198819926, 'Fresh Manzana (Apples) Roja, 1 lb.', 1.57, 'deleted_400094433751', 'Our Gala Apples are grown with care, hand-picked at peak ripeness, and delivered straight to your doorstep. Each bite bursts with the sweet, juicy flavor characteristic of the Gala variety. Perfect for snacking on-the-go, baking into a pie, or adding to your favorite salad recipe. Stock up on these delicious, healthy apples today! This is some delicious organic fresh produce, available for you!', 'Red apples are a classic variety loved for their sweet, juicy flavor and crisp texture. These apples are versatile and can be used in a variety of dishes, from salads to desserts. They are also a great source of dietary fiber and vitamin C, making them a healthy snack option. Our red apples are carefully selected and packed at the peak of their freshness to ensure maximum flavor and quality. Whether you\'re biting into one for a quick snack or using them to create a delicious apple pie, our red apples are sure to satisfy with their delicious taste and satisfying crunch. Perfect for families and individuals looking for a healthy and delicious addition to their diet, these red apples are a staple in any kitchen.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/72bba039-d136-4929-a22b-bf6168248e81.4f906c353fe8bce2de49f18dd60f7600.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/72bba039-d136-4929-a22b-bf6168248e81.4f906c353fe8bce2de49f18dd60f7600.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/72bba039-d136-4929-a22b-bf6168248e81.4f906c353fe8bce2de49f18dd60f7600.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (199196212, 'Super Fresh Kids Red Apple, 2lb Pouch', 4.47, '883391000787', 'The Super fresh Kids Red 2lb apples offer a vibrant and healthy option for sharing with the whole family. Packed in a convenient 2-pound bag, these red apples have been selected for their mildly sweet flavor, crisp bite, and ideal size for young hands. The packaging features colorful and fun graphics designed especially for children, making them perfect as a snack, to take to school or work, or simply to have at home ready to enjoy. The brand combines quality and presentation to encourage the daily consumption of fresh fruit in an easy and appealing way for kids.', 'Convenient 2lb bag of fresh red apples. Mildly sweet flavor with a crisp, crunchy texture. Ideal for snacks: perfect for school, work, or at-home consumption. Encourages healthy eating: promotes daily fruit consumption among children. Ready-to-use: easy to slice or eat on the go.', 'Superfresh Kids', 'https://i5.walmartimages.com/asr/7e18e0c0-3fb9-43f2-8b8e-71168e1d5ab0.c863336d54e1add79aaa77032f6f230a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7e18e0c0-3fb9-43f2-8b8e-71168e1d5ab0.c863336d54e1add79aaa77032f6f230a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7e18e0c0-3fb9-43f2-8b8e-71168e1d5ab0.c863336d54e1add79aaa77032f6f230a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (199507043, 'Fresh Sugar Kiss Melon, Each', 2.78, '000000043762', 'Each Fresh Sugar Kiss Melon will be a delight to eat. This variety of this fruit originated in Taiwan and is one of the sweetest. Choose a sweet melon that has a firm rind. The soft orange flesh is delicious at room temperature, and any uneaten, cut melon should be refrigerated. Delightful for nearly any meal, it can be eaten by itself, in smoothies, salads or paired with cured meant for an appetizer. Plus, melons have no container. Sugar Kiss Melons are a good source of vitamins A and C.', 'Fresh Sugar Kiss Melon, Each Sweet and juicy taste that is pleasant Sugar melon provides vitamins A and C One of the sweetest varieties for you to enjoy Sure to please the whole family Melons have no container', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fe880c46-de66-48b1-b882-8b5df2e5a9a9.a433268d7cedb81e6ac949c8a4652bf9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fe880c46-de66-48b1-b882-8b5df2e5a9a9.a433268d7cedb81e6ac949c8a4652bf9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fe880c46-de66-48b1-b882-8b5df2e5a9a9.a433268d7cedb81e6ac949c8a4652bf9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (199628002, '75pc Orange Navel 8#', 589.5, '405870770884', 'short description is not available', '75pc Orange Navel 8#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (200164713, 'Fresh Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094357552', 'Fresh Grown Yellow Nectarines, 1 Lb.', 'Fresh Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (201050232, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '405516118704', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (201522834, 'Fresh Dark Sweet Red Cherries, 3 Lb.', 5.98, '850764002006', 'Fresh Dark Sweet Red Cherries, 3 Lb.', 'Fresh Dark Sweet Red Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (201859746, 'Yellow Peach, Each', 0.01, '405842619197', 'short description is not available', 'Yellow Peach, Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (202568645, 'Watermelon Seedless', 4.48, '400094403372', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (202871160, 'Bowery Salad Spinach Blend 4.5oz', 3.48, '851536007380', 'short description is not available', 'Bowery Salad Spinach Blend 4.5oz', 'Bowery Farming', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (203654116, 'Organic Sweet Potatoes 3 Lb Bag', 5.68, 'deleted_095829400193', 'short description is not available', 'Organic Sweet Potatoes 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (204469541, '90pc Pto Rst 10# Bm', 399.6, '405530514544', 'short description is not available', '90pc Pto Rst 10# Bm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (204518138, 'Fresh Grape Tomato, 2.5 oz Cup', 2.98, '751666778856', 'Bring the fresh, delicious taste of Grape Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Grape Tomatoes.Fair Trade Certified tomatoes are the best way to have a positive impact on the lives of farmers, workers, and their communities. Through fair wages, enhanced health and safety on the job, and Community Development Funds that workers invest to solve their most pressing needs, every Fair Trade purchase you make has an impact. And you get to enjoy great quality tomatoes while making a difference!', 'Grape Tomatoes, 2.5 oz: Lower water content and longer shelf-life than cherry tomatoes Hardier and more resistant to bruising than traditional tomatoes Flavor in each bite Conveniently bite-sized Quick and excellent addition to salads and snack trays Best stored at room temperature out of sunlight Fresh produce', 'Fresh Produce', 'https://i5.walmartimages.com/asr/44b85fa9-33c6-4723-aac5-16d0f972e57c.3742aa7e897a91931c525ae5478ac756.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44b85fa9-33c6-4723-aac5-16d0f972e57c.3742aa7e897a91931c525ae5478ac756.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44b85fa9-33c6-4723-aac5-16d0f972e57c.3742aa7e897a91931c525ae5478ac756.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (204578374, 'Mini Cucumber Pk', 2.48, 'deleted_626074005569', 'short description is not available', 'Mini Cucumber Pk', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (204642102, 'AVO BAG 8/4 32 MX NR', 3.28, 'deleted_852324007278', 'Avocados', 'Large Avocado 4 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (205057333, 'Freshness Guaranteed Whole White Mushrooms 8oz', 4.97, '890445001249', 'short description is not available', 'Freshness Guaranteed Whole White Mushrooms 8oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (205177857, 'Fresh Mandarins, Each', 1.86, '405874101813', 'Enjoy the juicy goodness of citrus when you eat a Clementine. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, clementines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, clementines are now available year-round in most markets. Clementines are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the mandarins hang out in a bowl on your counter or table to breathe. Compact and portable, clementines are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious Clementines on hand for an easy, healthy treat.', 'Delicious, sweet, juicy citrus Pleasing sweet-tart flavor Easy to peel and segment Excellent source of vitamin C, potassium, and folic acid For maximum flavor, do not refrigerate Typically seedless You\'ll have plenty for everyone with this 5-pound bag Fresh Mandarin', 'Unbranded', 'https://i5.walmartimages.com/asr/bd763dda-b163-438e-ba60-79d19ecfd261.f1a7381116ace62844e1d4f7f4de1fc0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd763dda-b163-438e-ba60-79d19ecfd261.f1a7381116ace62844e1d4f7f4de1fc0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd763dda-b163-438e-ba60-79d19ecfd261.f1a7381116ace62844e1d4f7f4de1fc0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (205480599, 'Freshness Guaranteed Pineapple Large', 3.77, '262830000005', 'Experience a burst of tropical flavors with these Freshness Guaranteed Pineapple Chunks. The pre-cut slices of ripe pineapple are juicy and sweet to taste and are packed in its own juice. Carry them with you and eat them straight out of the tray any time you want, at home or on-the-go. You can also use them to top desserts and ice creams, in a fruit salad or blend them with milk to make milkshakes. Pineapples are known to have a number of nutrients, and they are especially rich in vitamin C. Add some fresh fruits to your daily menu today with these Freshness Guaranteed Pineapple Chunks.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Pineapple Large', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (205801054, 'Green Seedless Grapes, 2 lb', 1.88, '014668760176', 'short description is not available', 'Green Seedless Grapes, 2 lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (205945431, 'Sunset Sugar Bombs Grape Tomatoes on the Vine, 12 oz', 3.98, 'deleted_057836021907', 'Flavor Rocks™', 'An Explosion of Flavor!', 'Sunsets', 'https://i5.walmartimages.com/asr/04b11f7c-04b7-497c-b4d8-020037dca9ce.1e1738f97e5c65d29ea4eece36d6e4b4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/04b11f7c-04b7-497c-b4d8-020037dca9ce.1e1738f97e5c65d29ea4eece36d6e4b4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/04b11f7c-04b7-497c-b4d8-020037dca9ce.1e1738f97e5c65d29ea4eece36d6e4b4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (206062390, 'Yellow Flesh Peaches, per Pound', 1.58, '400094344255', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (206284148, 'Fresh Grape Tomato, 10 oz Package', 2.48, 'deleted_691529040198', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (206396964, 'Freshness Guaranteed Cantaloupe Blueberry Blend 14 Oz', 5.48, '681131305464', 'short description is not available', 'Freshness Guaranteed Cantaloupe Blueberry Blend 14 Oz', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (206507006, 'Fresh Green Seedless Grapes', 1.78, 'deleted_850794002045', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (206816763, 'Warty Bumpy Pumpkins', 3.98, '823298001593', 'short description is not available', 'Warty Bumpy Pumpkins', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (207086614, 'Fresh Huerto Isleno Romain Lettuce, Each', 2.97, '860205000102', 'Treat yourself to the healthy, delicious taste of Fresh Romaine Lettuce. This romaine is perfect for a variety of healthy and delicious meals and is packed with vitamins, minerals and antioxidants. You can use it to whip up a classic Caesar salad with all the fixings or let your creativity run wild.', 'Extremely low-calorie content and high-water volume Packed full of vitamins, minerals, and antioxidants Use for salads, smoothies, lettuce wraps, sandwiches, and more', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ef9bbde3-5ffa-435b-8006-6371885fdc91.acc6c300749c683f4b0ed2ff8edda5c0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ef9bbde3-5ffa-435b-8006-6371885fdc91.acc6c300749c683f4b0ed2ff8edda5c0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ef9bbde3-5ffa-435b-8006-6371885fdc91.acc6c300749c683f4b0ed2ff8edda5c0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (207381470, 'Fresh Yautia Lila Root Bulk', 1.27, '000000047302', 'Purple Taro is rich in fiber, which contributes to good digestive and intestinal health. It provides complex carbohydrates, potassium, copper, and other minerals. It is gluten-free, making it a good option for people with intolerances. Versatile for Puerto Rican cuisine: it is used in stews, mashed dishes, and other traditional recipes. High in potassium and other minerals such as magnesium and iron. Its carbohydrates are complex, providing sustained energy rather than sharp spikes. Naturally gluten-free, making it suitable for people with gluten intolerance.', 'Fresh Yautia Lila, 1 Pound Is a good source of vitamin C Potassium Phosphorus Magnesium and also contains some iron and calcium', 'Fresh Produce', 'https://i5.walmartimages.com/asr/68863667-b638-492f-bf83-6be4ac17e475.31d6209af006675f6bbbbd4e0216b65b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68863667-b638-492f-bf83-6be4ac17e475.31d6209af006675f6bbbbd4e0216b65b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68863667-b638-492f-bf83-6be4ac17e475.31d6209af006675f6bbbbd4e0216b65b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (207672292, 'Yellow Flesh Peaches, per Pound', 1.58, '405515959834', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (207709377, 'Tasteful Selections Fingerling Gold Potato Bag 24 oz', 4.68, '826088710125', 'Honey gold potatoes bag 24 oz org', 'Creamy textures and tender skins, create this blend’s flavor fusion. The union of two of our two most popular varieties has created this great potato offering, Sunburst Blend™ potatoes! Creamy textures and tender skins create this blend’s flavor fusion that will satisfy your household. Copy Right Tasteful Selections', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/f89beb03-eabf-4d01-9a24-789b898ad6d5.7c89ec12fab2927a6dcc4ef6efa5797f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f89beb03-eabf-4d01-9a24-789b898ad6d5.7c89ec12fab2927a6dcc4ef6efa5797f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f89beb03-eabf-4d01-9a24-789b898ad6d5.7c89ec12fab2927a6dcc4ef6efa5797f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (207963955, 'Yellow Flesh Peaches, per Pound', 1.58, '400094219508', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (208599377, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_405502886853', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (209205654, 'Pepper Green Bell', 1.47, 'deleted_823874000736', 'short description is not available', 'Pepper Green Bell', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/c9dff244-10f7-498a-b8d8-cfc377f678a7.f3b821354e1347f7371d699909e8e0f4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c9dff244-10f7-498a-b8d8-cfc377f678a7.f3b821354e1347f7371d699909e8e0f4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c9dff244-10f7-498a-b8d8-cfc377f678a7.f3b821354e1347f7371d699909e8e0f4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (209231950, '50pc Pto Idaho 20#', 324, '405888293528', 'short description is not available', '50pc Pto Idaho 20#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (209233878, 'Fieldpack Unbranded Fresh Strawberries 2#', 3.42, 'deleted_405512239090', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 2#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (209569031, 'Tasteful Selections Purple Potato Bag, 24oz', 4.88, '826088549152', 'Purple potato can be made in the blender for a nutritious drink with a sneaky ingredient for that lush purple color.', 'Tasteful Selections Purple Mesh Bag, 24oz powerhouse food full of nutrients full of flavor to fuel your everyday.', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/26f7e8b0-5d27-4d3d-b27e-5199a788ebc1.001fae1cde94924b1b07cee14a875123.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/26f7e8b0-5d27-4d3d-b27e-5199a788ebc1.001fae1cde94924b1b07cee14a875123.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/26f7e8b0-5d27-4d3d-b27e-5199a788ebc1.001fae1cde94924b1b07cee14a875123.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (209858600, 'Fieldpack Unbranded Celery Stalk', 1.28, 'deleted_664781701008', 'short description is not available', 'Fieldpack Unbranded Celery Stalk', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/40c4a102-8a92-4011-963f-5a06bfd69cb8.4769616f7f2499dcd862c14814d9bbf3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/40c4a102-8a92-4011-963f-5a06bfd69cb8.4769616f7f2499dcd862c14814d9bbf3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/40c4a102-8a92-4011-963f-5a06bfd69cb8.4769616f7f2499dcd862c14814d9bbf3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (210604981, 'Lechuga Hidroponica Mezclum, Each', 2.17, '036446046920', 'This a is an excellent variety of lettuce and mustard, they provide a good balance on flavor, texture and color. This mezclum grow fast and can be harvested several times.', 'High in Vitamin A Iron Good balance on flavor and texture', 'Unbranded', 'https://i5.walmartimages.com/asr/e7419d7c-799e-4c31-b81d-4e35ac2f1ae8.e8915ce9b8aa187f52295e09953d766b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e7419d7c-799e-4c31-b81d-4e35ac2f1ae8.e8915ce9b8aa187f52295e09953d766b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e7419d7c-799e-4c31-b81d-4e35ac2f1ae8.e8915ce9b8aa187f52295e09953d766b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (210668370, 'Flamingo Pear, 2 Lb.', 3.67, '848768000180', 'Flamingo Pear, 2 Lb.', 'Pear Bag 2lb Flamingo', 'Fresh Produce', 'https://i5.walmartimages.com/asr/319a9ad3-b80c-41d7-91e7-518d9bc8d8c6_1.ceb80fb4b20c2662caff9aa5ce80476c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/319a9ad3-b80c-41d7-91e7-518d9bc8d8c6_1.ceb80fb4b20c2662caff9aa5ce80476c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/319a9ad3-b80c-41d7-91e7-518d9bc8d8c6_1.ceb80fb4b20c2662caff9aa5ce80476c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (210987662, 'Fresh Premium Grape Tomato, 2 lb Package', 4.98, '606105437781', 'Premium Grape Tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily complements your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Premium Grape Tomatoes are the perfect choice.', 'Premium Grape Tomato, 2 lb Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ef2dcbc7-1fc9-40cd-bf3e-09d72a0218d9.1d2f7b812b05175eccc5c66761b3fa2e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ef2dcbc7-1fc9-40cd-bf3e-09d72a0218d9.1d2f7b812b05175eccc5c66761b3fa2e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ef2dcbc7-1fc9-40cd-bf3e-09d72a0218d9.1d2f7b812b05175eccc5c66761b3fa2e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (211501420, 'California Grown Peaches, per Pound', 1.58, '400094203163', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (211607292, 'Gala Apples 3 Lb Bag', 3.97, 'deleted_080153341342', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (211749748, 'That\'s Tasty Classic Crunch Organic Iceberg Lettuce, 5 oz', 2.18, '768573710077', 'That\'s Tasty Classic Crunch Organic Iceberg Lettuce gives you truly delicious organic flavor that you can trust. This lettuce has a medium sweetness is highly crisp for a perfect bite every time. It is locally and sustainably grown in the USA, free from pesticides, and Non-GMO. Use it to make delicious salads topped with your favorite croutons, nuts, cheese, vegetables, protein and dressing for a fresh taste in every bite. Use it to top sandwiches and burgers or make delicious lettuce wraps. Fill the wraps with hummus and vegetables for a vegetarian option or use your favorite deli meat slices, condiments and vegetables for healthier lunch alternative. Enjoy freshness you can see with That\'s Tasty Classic Crunch Organic Iceberg Lettuce.', 'That\'s Tasty Classic Crunch Organic Iceberg Lettuce, 5 oz: Pure USDA certified organic flavor Locally and sustainably grown in the USA Medium sweetness and high crispness Free from pesticides and Non-GMO Top burgers and sandwiches, make tasty lettuce wraps, or make delicious salads', 'That\'s Tasty', 'https://i5.walmartimages.com/asr/c4466294-0ca2-49ca-96dd-6de98ee45adb.1c95db0a11f0e6ad1ec9ae51aef39560.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c4466294-0ca2-49ca-96dd-6de98ee45adb.1c95db0a11f0e6ad1ec9ae51aef39560.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c4466294-0ca2-49ca-96dd-6de98ee45adb.1c95db0a11f0e6ad1ec9ae51aef39560.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (212495582, 'Sunset Sweet Bites Snacking Tomatoes on the Vine, 12 oz', 3.27, 'deleted_057836022553', 'Sunset Sweet Bites Snacking Tomatoes on the Vine, 12 oz', 'Sweet Bites Cherry Tomatoes, 12 oz: Grown with seed Exclusively sourced from the south of France Award-winning tomatoes Explosion of flavor in every bite Excellent addition to your homemade salads', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/75729a92-22bc-4918-a0e7-3eab4746237b.b02f40e144d9b37c15ec25e7316afd22.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75729a92-22bc-4918-a0e7-3eab4746237b.b02f40e144d9b37c15ec25e7316afd22.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75729a92-22bc-4918-a0e7-3eab4746237b.b02f40e144d9b37c15ec25e7316afd22.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (212566816, 'Sweet Earth Asian Salad Kit', 4.98, '016741000612', 'short description is not available', 'Sweet Earth Asian Salad Kit', 'Unbranded', 'https://i5.walmartimages.com/asr/7617b261-cceb-4922-bd71-67d5e719c747_1.2092f0782724c239dff98f0cc80ff20c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7617b261-cceb-4922-bd71-67d5e719c747_1.2092f0782724c239dff98f0cc80ff20c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7617b261-cceb-4922-bd71-67d5e719c747_1.2092f0782724c239dff98f0cc80ff20c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (212907454, 'Services Reduced Program Dept 94', 0.01, '251743000004', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (213704883, 'Butternut Squash', 1.18, '850003165059', 'short description is not available', 'Butternut Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1357a9ae-97d2-4592-9705-57d743e6edab.91d20598c9bb3d5124aba5968e642d91.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1357a9ae-97d2-4592-9705-57d743e6edab.91d20598c9bb3d5124aba5968e642d91.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1357a9ae-97d2-4592-9705-57d743e6edab.91d20598c9bb3d5124aba5968e642d91.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (214210246, 'Fieldpack Unbranded Fresh Green Onions', 0.78, '073064406804', 'short description is not available', 'Fieldpack Unbranded Fresh Green Onions', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (214720987, 'Organic Sweet Potatoes 3 Lb Bag', 6.28, 'deleted_859246004514', 'short description is not available', 'Organic Sweet Potatoes 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (215642748, 'Fresh Bartlett Pears, Each', 1.39, '845736040247', 'Savor the sweet taste of Fresh Bartlett Pears. Bartlett Pears are aromatic and have a definitive pear flavor that make them great for breakfast, lunch, dinner, and dessert. Chop the pears up and add them to muffins with walnuts and vanilla for a sweet treat that?s great for breakfast to get your morning started on a high note. Slice them up and top a pizza with prosciutto, goat cheese, and arugula for a mouthwatering meal perfect for a family dinner or dinner party. Cut the pear in half and cook it in a skillet with butter, brown sugar, and vanilla and serve with a scoop of vanilla ice cream for a decadent dessert. Enjoy tasty meals any time of day with Fresh Bartlett Pears.', 'Fresh Bartlett Pear, Each: Sweet,crisp and aromatic with a definitive pear flavor Great for breakfast, lunch, dinner, and dessert Versatile ingredient perfect for both savory and sweet dishes Chop them up and add to muffins with walnuts and vanilla, slice and add to pizza with prosciutto, goat cheese, and arugula, or cut in half and cook in a skillet with butter, brown sugar, and vanilla', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6689d57d-1612-439e-8bf0-84670e942819.21f4f05ece3924be6986e91179ce571b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6689d57d-1612-439e-8bf0-84670e942819.21f4f05ece3924be6986e91179ce571b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6689d57d-1612-439e-8bf0-84670e942819.21f4f05ece3924be6986e91179ce571b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (216027643, 'Pepper Mini Sweet', 2.98, 'deleted_699058454516', 'short description is not available', 'Pepper Mini Sweet', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (216218066, 'Fresh Yellow Peach, Each', 0.98, '857362002018', 'Discover the delightful sweetness of these Fresh Yellow Peaches. Enjoy them on their own as a sweet snack or use them in a variety of recipes. For breakfast, you could slice them to put into your oatmeal or use them to make a delicious yogurt parfait. You can also use these fresh peaches in several baking recipes including a comforting crisp topped with ice cream, a tasty upside-down cake, or a scrumptious tart. You can even use them to make a jam or a smooth sorbet. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Fresh Yellow Peaches.', 'Fresh Yellow Peach, Each Enjoy on their own as a satisfying snack Bag Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Slice as a sweet topping for waffles or pancakes Add to iced tea to create a refreshing summertime flavor', 'Fresh Produce', 'https://i5.walmartimages.com/asr/97ffb3d9-2252-4d6b-955a-7f757b8befeb.5ed4fcdd6046842d35e72de00994c642.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/97ffb3d9-2252-4d6b-955a-7f757b8befeb.5ed4fcdd6046842d35e72de00994c642.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/97ffb3d9-2252-4d6b-955a-7f757b8befeb.5ed4fcdd6046842d35e72de00994c642.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (216397615, '190pc On Vid 3# Bg', 566.2, '405540188926', 'short description is not available', '190pc On Vid 3# Bg', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (216561753, 'California Grown Peaches, per Pound', 1.58, '400094434390', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (217139418, 'Services Reduced Program Dept 94', 0.01, '251742000005', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (217376390, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094345863', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (217381647, 'Fresh Red Seedless Grapes', 1.98, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (217491720, 'Freshness Guaranteed Seasonal Blend Medium', 4.87, '262827000001', 'Enjoy the sweet, refreshing taste of Freshness Guaranteed Seasonal Blend. This pre-cut Seasonal Blend is great for breakfast, lunch, dessert, or when you want a snack. You can eat them right out of the container, use them to infuse water for a refreshing drink. This Seasonal Blend is great for sharing with friends and family or keeping it for yourself. It comes in a reclosable container to help maintain freshness. Bring home Freshness Guaranteed seasonal blend today for a refreshing, healthy treat.Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Seasonal Blend Medium', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (217551922, '120pc Apple Fuji 5#', 600, '405876835457', 'short description is not available', '120pc Apple Fuji 5#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (217613592, 'Cucumber', 0.74, 'deleted_863533000035', 'short description is not available', 'Cucumber', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (217769206, '200pc Pto Ykn/red Id', 824, '405503116454', 'short description is not available', '200pc Pto Ykn/red Id', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (218049696, 'Freshness Guaranteed Fresh Black Seedless Grapes', 2.78, 'deleted_681131377287', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (218307939, 'Freshness Guaranteed Fajita Blend Fresh Vegetables 8 oz', 2.88, '030223023203', 'Spare yourself the prep work and pick up a pack of our Freshness Guaranteed Fajita Mix to make your famous homemade fajitas in a flash! Yellow onion, green and red bell pepper come pre-prepared in perfect slices in every pack for you to bring home and toss right into the pan. Just coat them in your favorite fajita blend spices, add your favorite meats and garnishes, cook them until seared, and you\'ll be ready to dig in. Be sure to pair them up with your favorite toppings and style of tortillas to make it your own. Fresh flavors are just what your fajita night needs and our Freshness Guaranteed Fajita Mix is here to deliver.Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Fresh fajita vegetables mix consisting of yellow onions, green bell peppers, and red bell peppers Ingredients come pre-sliced for your convenience Perfect accompaniment to your family fajita nights Great way to add color, flavor, and texture to a wide variety of dishes Resealable container makes it easy to use as much or as little at a time as you need', 'Fresh Produce', 'https://i5.walmartimages.com/asr/aa18993e-b01f-4ac8-8bfc-1c504af14f11.6d93bce53692cda9cda29b850052e667.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa18993e-b01f-4ac8-8bfc-1c504af14f11.6d93bce53692cda9cda29b850052e667.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa18993e-b01f-4ac8-8bfc-1c504af14f11.6d93bce53692cda9cda29b850052e667.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (218314263, 'Mclane Company Red Delicious Apples, Each', 0.98, 'deleted_717524802286', 'short description is not available', 'Mclane Company Red Delicious Apples', 'McLane Company', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (218613183, 'Watermelon Seedless', 4.48, '400094408285', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (219153219, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_400094632253', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (219197481, 'Collard Greens, one bunch', 0.98, 'deleted_885435999859', 'Collard Greens', 'Collards’ wide leaves have a cabbage-like flavor. It is seldom served raw and is usually cooked or boiled to achieve tenderness. Traditionally, collards are cooked with salt pork, either fried in a skillet or boiled. Garlic, onion, chili peppers, ginger or curry are good complementary spices.', 'Ratto Bros.', 'https://i5.walmartimages.com/asr/0ef972bf-50bd-4b23-9aae-c27ecc4cdfd7.3d88fec12a2a1457bfeb254fbad1bc5f.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ef972bf-50bd-4b23-9aae-c27ecc4cdfd7.3d88fec12a2a1457bfeb254fbad1bc5f.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ef972bf-50bd-4b23-9aae-c27ecc4cdfd7.3d88fec12a2a1457bfeb254fbad1bc5f.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (219724744, 'Brown Beech Mushrooms, 2.5 Oz.', 3.98, '070475660634', 'Brown Beech Mushrooms, 2.5 Oz.', '2.5 Oz Brown Beech Mushroom', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (219743145, 'Dragonfly Seedless Tamarind', 6.25, '721557214480', 'Wet Seedless Tamarind Soft. Premium Quality.', 'Dragonfly Seedless Tamarind', 'Dragonfly', 'https://i5.walmartimages.com/asr/2e7f3f9e-cedd-4e76-b2ef-87001ada076b.725e6af2e1bfc0df82c5a451bc081d84.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2e7f3f9e-cedd-4e76-b2ef-87001ada076b.725e6af2e1bfc0df82c5a451bc081d84.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2e7f3f9e-cedd-4e76-b2ef-87001ada076b.725e6af2e1bfc0df82c5a451bc081d84.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (219786579, 'Apple, Dried Crnbrry, Grld Chicken 6.5z', 3.78, '074641073082', 'short description is not available', 'Apple, Dried Crnbrry, Grld Chicken 6.5z', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (219999431, 'Rainier Cherry 1 Lb Clam', 7.48, '813200013639', 'short description is not available', 'Rainier Cherry 1 Lb Clam', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (220156051, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094274880', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (220991572, 'Yellow Flesh Peaches, per Pound', 1.58, '400094358092', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (221180726, 'Seedless Watermelon', 4.98, 'deleted_813648010009', 'watermelon seedless', 'Seedless Watermelon', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2a225701-68dc-4495-96fc-3cf45b862d37.11f15337465cc530f4392de8d398d5f6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a225701-68dc-4495-96fc-3cf45b862d37.11f15337465cc530f4392de8d398d5f6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a225701-68dc-4495-96fc-3cf45b862d37.11f15337465cc530f4392de8d398d5f6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (221334931, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094275238', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (221372857, 'Louisiana Pepper Exchange 4oz Red Habanero Pepper Puree Sauce', 6.63, '850014104047', 'Louisiana Pepper Exchange 4oz Red Habanero Pepper Puree Sauce Ignite your taste buds with the bold heat and fruity twist of our Red Habanero Pepper Puree. This spicy habanero pepper sauce delivers intense heat while elevating your dishes with its rich, flavorful essence. From BBQ sauces and curries to Thai rice dishes and even Bloody Marys, this versatile puree adds the perfect kick to any meal. A convenient alternative to fresh peppers, our habanero salsa offers consistent flavor without the hassle of chopping or deseeding. Made with just red habanero peppers and a pinch of salt, it\'s gluten-free, calorie-free, and packed with natural flavor. Pair this habanero seasoning with mango, pineapple, seafood, or peaches to explore its dynamic flavor combinations. Whether you\'re a home cook or an aspiring chef, our habanero hot sauce will bring the heat to your culinary creations.', 'HOT, FRUITY FLAVOR – Experience the fiery heat and fruity essence of our red habanero pepper seasoning perfect for salsas, marinades, and more. NO CHOPPING NEEDED – Our super hot habanero sauce provides instant flavor like minced garlic, making cooking easier. SIMPLE INGREDIENTS – Made with just red habanero peppers and a pinch of salt, this gluten-free, calorie-free spicy sauce offers pure, guilt-free heat. EASY PEPPER SUBSTITUTE – One spoon of our habanero puree equals one whole habanero pepper, providing effortless recipe conversion. VERSATILE HEAT – Perfect for enhancing curries, BBQ sauces, fried chicken, and more, this habanero spicy seasoning brings bold heat to any dish.', 'Louisiana Pepper Exchange', 'https://i5.walmartimages.com/asr/64ce6a35-68db-4ae2-a1ec-b18b65390839.c4e7d5f76937d7ae6f2dc8e04dc32624.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/64ce6a35-68db-4ae2-a1ec-b18b65390839.c4e7d5f76937d7ae6f2dc8e04dc32624.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/64ce6a35-68db-4ae2-a1ec-b18b65390839.c4e7d5f76937d7ae6f2dc8e04dc32624.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (221539463, 'Mangoes, 1 Each', 0.65, '025838049595', 'Mangoes, 1 Each', 'Mango', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/855116ad-74e1-4d3e-8f1d-560c4be14b09_1.998844861241f4c338187565b7bae980.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/855116ad-74e1-4d3e-8f1d-560c4be14b09_1.998844861241f4c338187565b7bae980.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/855116ad-74e1-4d3e-8f1d-560c4be14b09_1.998844861241f4c338187565b7bae980.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (221934563, 'SUNSET Sweet Bites Cherry Tomatoes, 13 oz, Fresh, On-the-Vine', 3.48, '057836021778', 'SUNSET Sugar Sweets Tomatoes are 13 ounces of premium snacking tomatoes! Perfect for snacking, lunch, or dinner. Try them in salads, pastas, omelets, flatbreads, and more. Jam-packed flavor in a bite-size tomato. Hothouse grown to ensure consistent quality and freshness. Certified non-GMO tomatoes grown. Store at room temperature for optimal flavor, and wash before enjoying.. Enjoy SUNSET Sweet Bites Tomatoes all year long.', 'SUNSET fresh Sweet Bites snacking tomatoes Jam-packed flavor in a bite-sized tomato Perfect for snacking, lunch, or dinner Try them in salads, pastas, omelets, flatbreads, and more Wash and enjoy Available all-year-long Non-GMO verified Hothouse grown to ensure consistent quality and freshness Store at room temperature for optimal flavor', 'SUNSET', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (222752059, 'Brussels Sprouts, 16 Oz.', 2.98, 'deleted_060556602103', 'Brussels Sprouts, 16 Oz.', 'Brussel Sprouts', 'Queen Victoria', 'https://i5.walmartimages.com/asr/b46dc6c6-bf29-4acc-afb4-78f994a824bb_1.5bdc69e72f081cadb0e00fa94ca7ecb0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b46dc6c6-bf29-4acc-afb4-78f994a824bb_1.5bdc69e72f081cadb0e00fa94ca7ecb0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b46dc6c6-bf29-4acc-afb4-78f994a824bb_1.5bdc69e72f081cadb0e00fa94ca7ecb0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (222835430, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094659090', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (223172762, '2# Bag Calabacita', 2.98, '095829098086', 'short description is not available', '2# Bag Calabacita', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (223349494, '164pc On Vid Kit Bf', 546.72, '405505437083', 'short description is not available', '164pc On Vid Kit Bf', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (223592987, 'Fresh Tamarillo, Each', 1.97, '000000047937', 'Indulge in the sweet and tangy flavor of fresh tamarillo, a unique and exotic fruit from south america. with its vibrant red skin and juicy pulp, this small but mighty fruit is perfect for snacking, adding to salads, or using in recipes. try it today and discover a new world of flavors!', 'Unique Fruit: Tamarillos are a unique and exotic fruit that\'s not commonly found in most supermarkets, making them a great addition to any fruit platter. Sweet and Tart Flavor: Tamarillos have a unique sweet and tart flavor profile, making them a great addition to salads, smoothies, or desserts. High in Antioxidants: Tamarillos are a good source of antioxidants, which can help protect against cell damage and support overall health. Perfect for Snacking: Enjoy Fresh Tamarillos as a healthy snack on their own or add them to salads, smoothies, or desserts.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/074f10b1-d88d-4d67-b6cd-ff666de67a2d.bdf3ab41536192507b75bcad00ed96cf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/074f10b1-d88d-4d67-b6cd-ff666de67a2d.bdf3ab41536192507b75bcad00ed96cf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/074f10b1-d88d-4d67-b6cd-ff666de67a2d.bdf3ab41536192507b75bcad00ed96cf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (223614815, 'Fresh Green Seedless Grapes, 2 Lb', 5.48, 'deleted_813552010577', 'short description is not available', 'Fresh Green Seedless Grapes, 2 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (224971549, 'Services Reduced Program Dept 94', 0.01, '251714000002', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (225131330, 'Fresh Green Seedless Grapes', 1.99, 'deleted_786066002003', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (225454127, 'Freshness Guaranteed Pineapple 42 Oz', 9.52, 'deleted_681131036566', 'short description is not available', 'Freshness Guaranteed Pineapple 42 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (225625757, 'Fresh Multi Color Grapes, 3lb Clamshell', 5.98, '887271000003', 'Enjoy the best of both worlds with Fresh Multi Color Grapes. This three-pound clamshell contains both red and green seedless grapes for delicious, juicy flavor. Bursting with flavor and completely seedless, you can easily enjoy a handful as a fresh snack any time of the day. Create stunning cheese boards and charcuterie plates by pairing these grapes with fresh cheeses, crackers, or delectable meats like prosciutto. Freeze the grapes and use them as ice cubs that won\'t melt and release water into your favorite drinks. Or incorporate them into a delicious fresh fruit salad for the perfect side dish for your meal. Treat yourself to the delicious taste of Fresh Multi Color Grapes.', 'Fresh Multi Color Grapes, 3lb Clamshell: Clamshell contains both red and green seedless grapes Bursting with flavor and completely seedless Enjoy a handful as a fresh snack any time of day pair with your favorite meats and cheeses for a charcuterie appetizer Incorporate into fruit salad Perfect for a quick, easy, and healthy snack', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a53f3bc1-7db7-4697-bc92-c1a5db9c2c14.ed91dd2c54f478d3e741b214e7b4ffef.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a53f3bc1-7db7-4697-bc92-c1a5db9c2c14.ed91dd2c54f478d3e741b214e7b4ffef.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a53f3bc1-7db7-4697-bc92-c1a5db9c2c14.ed91dd2c54f478d3e741b214e7b4ffef.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (225642643, 'Fresh Green Beans, bagged', 1.68, 'deleted_711069040660', 'Add fresh flavor to your meal with Green Beans. These beans are an excellent source of vitamin A and vitamin C. Serve as is or add your favorite spices for additional flavor. Roast them with oil and spices for a rich and flavorful dish or add butter, shallots, salt and pepper to green beans to create a yummy side dish. Serve with pork chops, chicken breasts, and other meats for a well-rounded meal. With so many uses, these greens beans will become a pantry staple for your home. Green Beans are a quick and healthy side dish and a great addition to any meal.', 'Green Beans, Per lb: Excellent source of vitamin A and C Roast with oil and spices or add butter, shallots, salt, and pepper the perfect side dish Versatile ingredient Serve with pork chops, chicken breasts, and other meats for a well-rounded meal Will become a pantry staple', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/9b80006b-97e0-46e9-b76f-911db42e55f2_3.dcfcd8dd0dcf9c21eb31a9f1c7572d77.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b80006b-97e0-46e9-b76f-911db42e55f2_3.dcfcd8dd0dcf9c21eb31a9f1c7572d77.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b80006b-97e0-46e9-b76f-911db42e55f2_3.dcfcd8dd0dcf9c21eb31a9f1c7572d77.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (226168734, 'Fresh Organic Medley Tomatoes, 10 oz Package', 3.46, 'deleted_684924900280', 'Organic Medley Tomatoes are an exciting summer treat, and they\'re the perfect size for skewers, salads and roasting. These bite-sized medley tomatoes look and taste great. Medley tomatoes are a low-calorie treat that are also low in sodium and are a good source of fiber. Whether you are snacking or adding them to your favorite dish. their uses are almost limitless. Try these grape tomatoes with feta cheese, fresh dill and a drizzle of olive oil for a light and delicious Mediterranean treat. Or make a caprese salad with medley tomatoes, fresh basil, fresh mozzarella and balsamic vinegar. With 10-ounces of tomatoes in each package, you\'ll have plenty to make mouthwatering meals. Use your imagination to create delicious dishes with Organic Medley Tomatoes.', 'Organic Medley Tomatoes, 10 oz Package: Perfect size for skewers, salads and roasting Low-calorie, low in sodium, and a good source of fiber Pair with feta cheese, fresh dill, and a drizzle of olive oil for a Mediterranean dish Certified organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d89fbddf-e7a5-4dfa-aaa8-9de2080146d9_1.649ce383bc8d6b2758468cffe627d28d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d89fbddf-e7a5-4dfa-aaa8-9de2080146d9_1.649ce383bc8d6b2758468cffe627d28d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d89fbddf-e7a5-4dfa-aaa8-9de2080146d9_1.649ce383bc8d6b2758468cffe627d28d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (226422698, 'Watermelon Seedless', 4.98, '405504889647', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (226603944, 'Yellow Flesh Peaches, per Pound', 1.58, '400094619889', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (226963670, 'Dole Bacon Blu Salad Kit 11.8 Oz', 3.63, '714300003042', 'short description is not available', 'Dole Bacon Blu Salad Kit 11.8 Oz', 'Dole', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (227261707, 'Fresh Tomatillos, 1 lb', 4.57, '750455000031', 'Add rich flavor and color to your meals with fresh Tomatillos. Most cooks use this versatile ingredient as you would a vegetable even though it is actually a fruit. They have a tart flavor that adds a delicious tang to salsas, moles, and stews. The tomatillo is most commonly used to create a zesty and delicious salsa verde. Serve the salsa verde with chips or use it to enhance the flavors of your meal. Use these tomatillos to make tasty chicken tamales verdes. Tomatillos are also a great source of vitamin C, and they are low in calories. Explore all the delicious possibilities with fresh Tomatillos.', 'Tomatillos, 1 lb: Tart & tangy Make tasty chicken tamales verdes Perfect for salsas, moles & stews Use to make a zesty salsa verde Good source of vitamin C Low in calories 1 lb bag Explore delicious new recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5510837c-06f9-410d-9a26-d3a798426815_2.840b8d1bbac92ab814d2164200607109.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5510837c-06f9-410d-9a26-d3a798426815_2.840b8d1bbac92ab814d2164200607109.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5510837c-06f9-410d-9a26-d3a798426815_2.840b8d1bbac92ab814d2164200607109.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (227455052, 'Watermelon Seedless', 4.68, '852121003008', 'short description is not available', 'Watermelon Seedless', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (227986585, 'Freshness Guaranteed Whole White Mushrooms 16oz', 3.64, 'deleted_699058820052', 'short description is not available', 'Freshness Guaranteed Whole White Mushrooms 16oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (228010582, 'Potato Lemon & Garden Herb Micro Kit 16z', 3.39, '629307017445', 'The Little Potato Co.-lemon & Garden Herb', 'Fresh creamer potatoes paired with lemon and garden herb seasoning Ready-to-cook format for quick meal preparation Light and zesty flavor suitable for side dishes Convenient portion size for family meals or gatherings', 'Fresh Produce', 'https://i5.walmartimages.com/asr/77bced33-5b60-46c7-a2b1-eae25d1e7bd8.f14f2eebdcc85d70425326eca0a2f11e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77bced33-5b60-46c7-a2b1-eae25d1e7bd8.f14f2eebdcc85d70425326eca0a2f11e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77bced33-5b60-46c7-a2b1-eae25d1e7bd8.f14f2eebdcc85d70425326eca0a2f11e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (228558911, 'Snap Peas 16z', 5.98, '782796009022', 'short description is not available', 'Snap Peas 16z', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (228732767, '90pc Pto Rst 10# Ptd', 399.6, '405531145044', 'short description is not available', '90pc Pto Rst 10# Ptd', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (229403342, 'Terrasoul superfoods organic camu camu powder, 3.5 oz', 48, '083409801515', 'Terrasoul superfoods organic camu camu powder, 3.5 oz', 'Sun Date Premium Organic California Medjool Dates 2 lbs. (Pack of 2) Freshly handpicked Grown in Coachella Valley, California 2 lbs each', 'Sun Date', 'https://i5.walmartimages.com/asr/d824ec26-b4b4-4c4f-8057-c0e560eea4ee_1.942561081831c574a125d0be5fa2a4bb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d824ec26-b4b4-4c4f-8057-c0e560eea4ee_1.942561081831c574a125d0be5fa2a4bb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d824ec26-b4b4-4c4f-8057-c0e560eea4ee_1.942561081831c574a125d0be5fa2a4bb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (229493410, 'Marketside Crn Dog/hny Must/crt/apl/gummy Bears', 3.98, '859216007255', 'short description is not available', 'Marketside Crn Dog/hny Must/crt/apl/gummy Bears', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (229527741, 'Fresh Green Seedless Grapes', 1.78, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (229598900, 'Mks Organic Pineapple', 2.98, '681131428651', 'short description is not available', 'Mks Organic Pineapple', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (229645254, 'Freshness Guaranteed Fresh Red Seedless Grapes', 1.98, 'deleted_681131377263', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (229772737, 'Medley Tomato, 12 oz Package', 4.48, '626074919293', 'Bring the fresh, delicious taste of Medley Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Medley Tomatoes.', 'Medley Tomato, 12 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/114aa65a-601d-43bd-be7a-ca357d821a18.ef98efe2f7ed66e720145ded0b09dbed.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/114aa65a-601d-43bd-be7a-ca357d821a18.ef98efe2f7ed66e720145ded0b09dbed.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/114aa65a-601d-43bd-be7a-ca357d821a18.ef98efe2f7ed66e720145ded0b09dbed.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (229780007, 'Freshness Guaranteed Sunshine Trio Medium', 8.47, '262829000009', 'Freshness Guaranteed Medium Sunshine Trio in a plastic container. This delicious fresh cut Medium Sunshine Trio is a great snack and is ready to eat.', 'Freshness Guaranteed Sunshine Trio Medium', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (229970570, 'Organic Red Globe Grapes, 2 Lb', 6.97, 'deleted_638550012060', 'Treat yourself to the delicious, juicy flavor of Fresh Organic Red Globe Whole Seeded Grapes. These organic grapes are bursting with sweet flavor and known for their large size. Enjoy a handful as a fresh snack any time of day or dry them for scrumptious raisins. You can even use them to make refreshing organic grape juice. They are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with cheese, crackers, or delectable meats like prosciutto. If you want to be creative, you can freeze them and use them as ice cubes in your favorite drinks. Treat yourself to the whole fresh taste of Organic Red Globe Whole Seeded Grapes.', 'Organic Red Globe Grapes, 2 Lb Bursting with flavor and known for their large size Enjoy a handful as a fresh snack', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b041db3b-5145-4e28-99f0-f57f90e279fe_2.05260a3612d96115eb0fb3fe9f0cf599.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b041db3b-5145-4e28-99f0-f57f90e279fe_2.05260a3612d96115eb0fb3fe9f0cf599.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b041db3b-5145-4e28-99f0-f57f90e279fe_2.05260a3612d96115eb0fb3fe9f0cf599.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (230476122, 'Marketside Ruby Grapefruit Segments, 7 oz', 1.97, '681131161374', 'Marketside Ruby Grapefruit Segments are peeled and soaked in a slightly sweetened water to lock in all their delicious fruit flavors. This tasty citrus fruit is perfect for fruit cocktails, salsas, desserts, salads and can also be used as a garnish for meat and vegetable dishes. Enjoy them chilled for a refreshing snack that you can have any time of the day. They also offer a nutritional benefit as they are a low calorie source of vitamin C. These segments come in a ready-to-eat container making it easy to enjoy your favorite fruit on the go. Enjoy a healthy and delicious snack with the wholesome taste of Marketside Ruby Grapefruit Segments. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Ruby grapefruit segments soaked in slightly sweetened water Great in salads High in vitamin C Ready-to-eat container', 'Marketside', 'https://i5.walmartimages.com/asr/fb241d06-2643-4a47-8860-40457e452028_2.75bab3fde4f89142f98e2a6368066dd3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb241d06-2643-4a47-8860-40457e452028_2.75bab3fde4f89142f98e2a6368066dd3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb241d06-2643-4a47-8860-40457e452028_2.75bab3fde4f89142f98e2a6368066dd3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (230651706, 'Spice World Easy Onion, 9.5 oz Jar', 7.33, '070969004173', 'Spice World Squeezable 9.5oz Minced Onion is the perfect addition to pack in your picnic basket for an outdoor party, add to your cooler for a tailgate this fall, or keep in your fridge to make meal prep easy! Delicious on burgers, chicken, fish, steak, veggies, and hot dogs! It is ready-to-use and comes in a convenient plastic squeeze bottle to use just the right amount for your dish. No peeling, chopping, or tears. Remember that while this Fresh Produce item is Shelf-Stable, it should be refrigerated after opening and always shake well before using Latex-Free.', 'Ready-to-use Minced onion in a convenient squeeze bottle to be easily added to any dish Makes picnics and tailgating a breeze \'Fresh Produce\', \'Latex-Free\', \'Fresh\', and \'Plastic\' No peeling, chopping, or tears', 'Fresh Produce', 'https://i5.walmartimages.com/asr/75fa4342-00c1-4c02-944c-f95dc49c614d.5071a8f6dd102db49225b9831afa7cf2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75fa4342-00c1-4c02-944c-f95dc49c614d.5071a8f6dd102db49225b9831afa7cf2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75fa4342-00c1-4c02-944c-f95dc49c614d.5071a8f6dd102db49225b9831afa7cf2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (230708263, 'Viva Tierra Cubanelle Pepper', 1.97, '405966084239', 'short description is not available', 'Viva Tierra Cubanelle Pepper', 'Viva Tierra', 'https://i5.walmartimages.com/asr/6d7f08f0-453e-4938-95bd-96b172158bbe.98fc8e4fccc70e112f303761a3a2964c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6d7f08f0-453e-4938-95bd-96b172158bbe.98fc8e4fccc70e112f303761a3a2964c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6d7f08f0-453e-4938-95bd-96b172158bbe.98fc8e4fccc70e112f303761a3a2964c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (230831397, 'Homeboy Caliente Guacamole, 8oz', 3.58, '855420002666', 'Homeboy provides much more than flavor for your chips. It fuels transformation for thousands of former gang members on a journey to recovery through Homeboy Industries. Father Greg Boyle, \"G\", founded Homeboy Industries 27 years ago to provide hope, training, and support to formerly gang-involved and recently incarcerated men and women, allowing them to redirect their lives and become contribution members of our community. With every purchase you join a virtuous circle helping men and women develop the strength and skills to change for the better. We heal families. We create thriving communities. We provide the Strength to Change. Thank you for being a part of the Strength to Change at Homeboy Industries. Enjoy our Homeboy Caliente Guacamole!', 'Homeboy Caliente Guacamole, 8oz.', 'Homeboy', 'https://i5.walmartimages.com/asr/5b22c331-a194-4013-99c1-92cc474ead9d.26891323d1d4483dcf31c98ac1d6f2ba.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b22c331-a194-4013-99c1-92cc474ead9d.26891323d1d4483dcf31c98ac1d6f2ba.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b22c331-a194-4013-99c1-92cc474ead9d.26891323d1d4483dcf31c98ac1d6f2ba.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (231329978, 'Fresh Blueberries, Organic, 6 oz Package', 3.66, 'deleted_850003425276', 'Fresh Blueberries, Organic, 6 oz', 'Fresh Organic Blueberries, 6 oz: Best when enjoyed at room temperature Light, refreshing taste Healthy sweet treat Certified organic Prior to serving gently wash them with cool water Refrigerate your berries in the original container to maintain freshness, they should approximately last 3-5 days after purchase Keep dry for optimal freshness', 'Fresh Produce', 'https://i5.walmartimages.com/asr/17b4c389-769c-4ee4-b65e-ee26af1068da.7cc3cbe22bb30d9d6bda899a3117f656.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/17b4c389-769c-4ee4-b65e-ee26af1068da.7cc3cbe22bb30d9d6bda899a3117f656.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/17b4c389-769c-4ee4-b65e-ee26af1068da.7cc3cbe22bb30d9d6bda899a3117f656.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (231367138, 'Fresh Blends Herb & Peppercorn Medley Potatoes', 2.97, '134344010071', 'short description is not available', 'Herb And Peppercorn Potato Medley', 'Fresh Produce', 'https://i5.walmartimages.com/asr/10c30f42-2168-4df6-b774-7ca57bd360bc_1.def71d03816a582c9d7eddf766483d1f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/10c30f42-2168-4df6-b774-7ca57bd360bc_1.def71d03816a582c9d7eddf766483d1f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/10c30f42-2168-4df6-b774-7ca57bd360bc_1.def71d03816a582c9d7eddf766483d1f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (231671576, 'Premium Bananas', 0.49, 'deleted_204237000004', 'short description is not available', 'Premium Bananas', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (231946892, 'Taylor Farms® Snack Pack Fruit, Nuts & Cheese 5oz', 2.97, '030223060154', 'A snack pack worth going nuts about, well we will join you there! Our Fruit, Nuts and Cheese snack tray is packed with sweet crisp apples, creamy cheese, almonds, and dried cranberries making a tasty mid-morning snack.', 'Washed and ready to enjoy Perfect snack for all ages Fits perfectly in lunch boxes Easy to pack on-the-go Enjoy at school, work, in the car, outside or anywhere else you need a snack!', 'Taylor Farms', 'https://i5.walmartimages.com/asr/dbde0452-f9ef-4ee7-be4b-f23394a6e472.5bb14f8090e0bc74298d5299ea0f1967.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dbde0452-f9ef-4ee7-be4b-f23394a6e472.5bb14f8090e0bc74298d5299ea0f1967.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dbde0452-f9ef-4ee7-be4b-f23394a6e472.5bb14f8090e0bc74298d5299ea0f1967.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (231971901, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094008591', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (232487656, '(6 pack) (6 Pack) New Mexico Corn Husks, 15 oz', 0.98, '661389690482', 'short description is not available', '15OZ SNM CORN HUSKS', '505 Southwestern', 'https://i5.walmartimages.com/asr/86c037f6-6962-48ea-a1c6-0c7224f3c3d4_2.c82da1d7692cf78c4d2e356e5103eabe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/86c037f6-6962-48ea-a1c6-0c7224f3c3d4_2.c82da1d7692cf78c4d2e356e5103eabe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/86c037f6-6962-48ea-a1c6-0c7224f3c3d4_2.c82da1d7692cf78c4d2e356e5103eabe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (232492299, 'Fresh Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094357279', 'Fresh Grown Yellow Nectarines, 1 Lb.', 'Fresh Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (232554221, 'Honeydew Melon', 4.47, '405755137375', 'short description is not available', 'Melon Honeydew', 'Unbranded', 'https://i5.walmartimages.com/asr/6b14a8d0-5629-46d3-9ad7-e05250726c97.61e76de918c3cac1e24c73adf88ac106.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6b14a8d0-5629-46d3-9ad7-e05250726c97.61e76de918c3cac1e24c73adf88ac106.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6b14a8d0-5629-46d3-9ad7-e05250726c97.61e76de918c3cac1e24c73adf88ac106.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (232658327, 'Pepper Mini Sweet', 2.98, '', 'short description is not available', 'Pepper Mini Sweet', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (233156014, '192pc On Vid 3# Lg', 756.48, '405554688337', 'short description is not available', '192pc On Vid 3# Lg', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (233218166, 'Services Reduced Program Dept 94', 0.01, '251907000000', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (233692118, 'Melissas Organic Mini Swt Peppers 8oz', 3.46, '826920002012', 'short description is not available', 'Peppers, Mini, Sweet USDA organic. Certified organic by CCOF. Organic series. Greenhouse vegetables. Mini marvelous morsels. redsunfarms.com. Product of Mexico.', 'RedSun', 'https://i5.walmartimages.com/asr/4805e451-6857-4a69-a409-ef9f32765761.dd58c2c3c9832e5a6345e48c4062b260.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4805e451-6857-4a69-a409-ef9f32765761.dd58c2c3c9832e5a6345e48c4062b260.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4805e451-6857-4a69-a409-ef9f32765761.dd58c2c3c9832e5a6345e48c4062b260.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (233949940, 'Daikon', 2.84, 'deleted_045255181838', 'Daikon, also called Chinese radish, is an essential ingredient in a wide variety of Asian dishes. The origin of the radish can be traced back to ancient China, but the word Daikon actually comes from two Japanese words: dai (meaning large) and kon (meaning root). As one of the largest radishes, daikon is characterized by its long, narrow appearance and crisp texture. It can range in length from 6 to 15 inches and can average 2 to 3 inches in diameter. The skin is usually white but can also be black. Although it may look similar to a carrot in appearance, its flavor is anything but. It has been described as mildly sweet and juicy with a slightly spicy, peppery bite. This is one versatile Asian vegetable and its fresh flavor is delicious served raw or pickled. It is often used as a condiment, garnish or ingredient in soups, stews, salads and more. Besides enjoying them raw, you can also cook them in many different ways from roasting to steaming and more. They can also be thrown into classic braise with meat, since they absorb their braising liquid beautifully and take on the texture of turnips once cooked. Daikon should be scrubbed with a brush under running water, prior to use. Peel before using or grate with a sharp metal grater', 'Contains: Vitamin C Potassium Phosphorus', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/bc5f1a84-30cb-4796-a258-d3112fa3beec_1.dc4e700cc293daa7e0fe599d0fb2cc77.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc5f1a84-30cb-4796-a258-d3112fa3beec_1.dc4e700cc293daa7e0fe599d0fb2cc77.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc5f1a84-30cb-4796-a258-d3112fa3beec_1.dc4e700cc293daa7e0fe599d0fb2cc77.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (234074824, 'Fresh Green Bell Pepper 2ct', 1.47, '711069001593', 'Discover the crisp and refreshing taste of our fresh green bell peppers! Grown with care and harvested at perfect ripeness, these vibrant peppers are bursting with flavor and nutrients. Their crunchy texture adds a delightful crunch to salads, stir-fries, and sandwiches. Packed with vitamin C and antioxidants, our green bell peppers are a healthy and delicious addition to any recipe. Elevate your meals with the vibrant taste of our premium quality green bell peppers!', 'Green Bell Pepper 2ct Discover the crisp and refreshing taste of our fresh green bell peppers! Grown with care and harvested at perfect ripeness, these vibrant peppers are bursting with flavor and nutrients. Their crunchy texture adds a delightful crunch to salads, stir-fries, and sandwiches. Packed with vitamin C and antioxidants, our green bell peppers are a healthy and delicious addition to any recipe. Elevate your meals with the vibrant taste of our premium quality green bell peppers! Find this in your local Walmart!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c9dff244-10f7-498a-b8d8-cfc377f678a7.f3b821354e1347f7371d699909e8e0f4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c9dff244-10f7-498a-b8d8-cfc377f678a7.f3b821354e1347f7371d699909e8e0f4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c9dff244-10f7-498a-b8d8-cfc377f678a7.f3b821354e1347f7371d699909e8e0f4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (234771130, 'Fresh Medley Tomato, 12 oz Package', 3.98, '885773044020', 'Bring the fresh, delicious taste of Medley Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Medley Tomatoes.', 'Medley Tomato, 12 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/114aa65a-601d-43bd-be7a-ca357d821a18.ef98efe2f7ed66e720145ded0b09dbed.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/114aa65a-601d-43bd-be7a-ca357d821a18.ef98efe2f7ed66e720145ded0b09dbed.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/114aa65a-601d-43bd-be7a-ca357d821a18.ef98efe2f7ed66e720145ded0b09dbed.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (234987363, 'California Grown Peaches, per Pound', 1.58, '400094006078', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (235141397, 'California Grown Peaches, per Pound', 1.58, '400094867136', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (235875743, 'Fresh Red Seedless Grapes', 3.12, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (236052404, 'Fresh Pole Beans', 4.48, '033383910956', 'short description is not available', 'Fresh Pole Beans', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (236465477, 'Jalapeno Pepper 2 Lb Bag', 2.98, '095289098060', 'short description is not available', 'Jalapeno Pepper 2 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (236569829, 'California Grown Peaches, per Pound', 1.58, '400094859438', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (236746439, 'Avocado Per Each', 0.78, 'deleted_856397002529', 'short description is not available', 'Avocado Per Each', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/f0719810-325f-4415-85aa-3414018f80c9.69f50393a1d291661736387d4498fd10.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f0719810-325f-4415-85aa-3414018f80c9.69f50393a1d291661736387d4498fd10.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f0719810-325f-4415-85aa-3414018f80c9.69f50393a1d291661736387d4498fd10.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (236764320, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094586563', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (237001734, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094260944', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (237164916, 'Florida Grown Peaches, per Pound', 1.58, '405513530943', 'Florida Grown Peaches, per Pound', 'Fresh Florida Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (237957352, 'Watermelon Seedless', 4.48, '400094398340', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (237958112, 'Fresh Whole Grape Tomatoes, 10 oz Package', 4.98, '606105801575', 'Enjoy the refreshing taste of Fresh Whole Grape Tomatoes. They are an exciting summer treat, and they\'re the perfect size for skewers, salads and roasting. These bite-sized grape tomatoes look and taste great. Grape tomatoes are a low-calorie treat that are also low in sodium and are a good source of fiber. Whether you are snacking or adding them to your favorite dish. their uses are almost limitless. Try these grape tomatoes with feta cheese, fresh dill, and a drizzle of olive oil for a light and delicious Mediterranean treat. Or make a caprese salad with grape tomatoes, fresh basil, fresh mozzarella, and balsamic vinegar. With 10-ounces of tomatoes in each package, you\'ll have plenty to make mouthwatering meals. Use your imagination to create delicious dishes with Fresh Whole Grape Tomatoes.', 'Fresh Whole Grape Tomatoes, 10 oz Package Perfect size for skewers, salads and roasting Low-calorie, low in sodium, and a good source of fiber Pair with feta cheese, fresh dill, and a drizzle of olive oil for a Mediterranean dish Make a caprese salad with grape tomatoes, fresh basil, fresh mozzarella, and balsamic vinegar', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (238411570, '225pc Pto Idaho 8#', 1332, '405518789063', 'short description is not available', '225pc Pto Idaho 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (238561182, 'Watermelon Seedless', 4.48, '400094983676', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (238627435, 'Fresh Slicing Tomato, 3 Pack', 1.5, '811857020512', 'Create something wholesome and delicious with 3pk tomatoes. These fresh tomatoes are the perfect ingredient for a variety of tasty dishes. Use them to make a decadent tomato sauce for a pasta dish; try slicing them up and pairing with mozzarella cheese, basil and balsamic vinegar; or simply enjoy them on their own as a nutritious snack. They would make a comforting and appetizing tomato soup and a flavorful salsa. You could also slice them up and use them to top burgers and pizza or use them to make a delicious grilled cheese and tomato sandwich. However you choose to use them, these tomatoes will add flavor and taste to any meal. Be sure to add these fresh tomatoes to your Walmart purhase today.', 'Slicing Tomatoes, 3 Count: Pack of 3 whole slicing tomatoes Firm and thick-skinned Large size is perfect for slicing up and garnishing sandwiches and burgers Classic tomato flavor lends itself to a wide variety of recipes Delicious base for making salsas, soups, sauces, and more', 'Fresh Produce', 'https://i5.walmartimages.com/asr/66a57190-3844-4a00-8135-3466bbfce8b0.d49d3461c8a0b731cc67c52cceea0bb9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/66a57190-3844-4a00-8135-3466bbfce8b0.d49d3461c8a0b731cc67c52cceea0bb9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/66a57190-3844-4a00-8135-3466bbfce8b0.d49d3461c8a0b731cc67c52cceea0bb9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (238720430, 'Good Healthy Organic Superfood Blend Microgreens Salad, 3 oz Clam Shell, Fresh', 3.48, '856642007224', 'GoodHealthy Organic Superfood Blend is the perfect mix of protein-rich kale and organic tender beetroot to ensure you get all the veggie goodness you need! Perfect to top off your family’s favorite pasta dish, a warm winter soup, or burgers from the grill. Make every recipe GoodHealthy with our Superfood Blend! At GoodHealthy, we’re changing the way you think about farming! Every seed we plant is nurtured in organic soil, rich in nutrients, and cared for by our sustainable SmartFarm technology. Grown locally 365 days a year, our AI-driven farms are turning less into more; using less water, less land, and less energy to produce more of the farm-fresh organic veggies you love! Going beyond organic, our regenerative greenhouses restore nutrients to the soil with every harvest, reducing our carbon footprint and supporting the local environment. Making the world GoodHealthy, one plant at a time!', 'GoodHealthy Organic Superfood Blend 3oz', 'Good Healthy', 'https://i5.walmartimages.com/asr/b787d27c-e9a5-42eb-b338-ba9e563f3f0e.336e699fd8a9d7f447807be376a7adbe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b787d27c-e9a5-42eb-b338-ba9e563f3f0e.336e699fd8a9d7f447807be376a7adbe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b787d27c-e9a5-42eb-b338-ba9e563f3f0e.336e699fd8a9d7f447807be376a7adbe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (238885812, 'Granny Smith Apples 3 Lb Bag', 3.96, 'deleted_841190103665', 'short description is not available', 'Granny Smith Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (238959223, 'Simply Perfect Microwaveable Sweet Potato, 8 Oz', 1.18, 'deleted_819614010066', 'These delicious sweet potatoes are microwavable and cook in 5-8 minutes, making it easy to cook a quick and healthy meal. They are thoroughly washed and ready to microwave for you to enjoy! This sweet potato is orange on the outside and orange on the inside, delivering a sweet and earthy flavor. What are you waiting for? Pop it in the microwave and enjoy!m Designed to accommodate the individual on the go, our microwaveable sweet potato is nutritious, earthy, and delicious, these singles can complement any dish throughout the day or offer a snack in itself. Sweet potatoes are a pantry essential that you should have always in your kitchen. Just one sweet potato is an excellent source of vitamin containing 368% Vitamin A daily value. They are loaded with beta carotene which acts as a potent antioxidant, making it easy to feel good about what you are about to enjoy!', 'Microwaveable Sweet Potatoes Per Each', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/75f4050a-0e69-4bc0-8604-11f44ec405b3.8481ac97edd8fe483b8ec619a7f3458b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75f4050a-0e69-4bc0-8604-11f44ec405b3.8481ac97edd8fe483b8ec619a7f3458b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75f4050a-0e69-4bc0-8604-11f44ec405b3.8481ac97edd8fe483b8ec619a7f3458b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (239092183, 'Fresh Candy Dream Grapes, 1 Lb', 30, '', 'short description is not available', 'Fresh Candy Dream Grapes, 1 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (239512458, 'Organic Grape Tomato', 2.76, '400094027936', 'short description is not available', 'Organic Grape Tomato', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (240269413, '200pc Pto Red 5# Ff', 794, '405505737602', 'short description is not available', '200pc Pto Red 5# Ff', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (240386310, 'California Chopped Dates (Pack of 2)', 27.35, '100412721408', 'Feel revitalized with the fresh taste of sun-ripened dole all natural fruit. Rich in nutrients, fruit gives you healthy energy so you feel refreshed and ready to shine. Grown under the california sun. Dole dates are picked at the peak of ripeness for maximum sweetness and flavor. They\'re delicious, 100% natural, and contain more nutritious antioxidants than many other common fruits! For more than 100 years, dole has been committed to our environment, our employees and the communities in which we operate.', 'Includes two 8 oz packages of Dole California Chopped Dates,Great for snacking and Toppings!,Eat them right out of the package or top your favorite salad!,Gluten Free.,Comes in convenient, resealable pouch.', 'Dole', 'https://i5.walmartimages.com/asr/c75b2912-cce4-4dd4-aa2e-1657c3deb5aa.7ed7f89c9e89dc88d798d42a4d791c59.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c75b2912-cce4-4dd4-aa2e-1657c3deb5aa.7ed7f89c9e89dc88d798d42a4d791c59.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c75b2912-cce4-4dd4-aa2e-1657c3deb5aa.7ed7f89c9e89dc88d798d42a4d791c59.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (240406334, 'Indian Bittermelon', 3.48, '000000243193', 'short description is not available', 'Indian Bittermelon', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (240966206, 'Fieldpack Unbranded Fresh Strawberries 1#', 2.24, 'deleted_715756200498', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (241137723, 'Melon Honeydew 8 Ct', 4.98, '405873138407', 'short description is not available', 'Melon Honeydew 8 Ct', 'Fresh Produce', 'https://i5.walmartimages.com/asr/28ce1e41-6388-47c9-976f-b5cea1d46f40.4ba7bd174ffb53b01bf3540de6bb3f7b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28ce1e41-6388-47c9-976f-b5cea1d46f40.4ba7bd174ffb53b01bf3540de6bb3f7b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28ce1e41-6388-47c9-976f-b5cea1d46f40.4ba7bd174ffb53b01bf3540de6bb3f7b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (241481004, 'Yellow Bell Pepper, each', 1.68, 'deleted_699058046896', 'Naturally low in calories Exceptionally rich in vitamin C and other antioxidants Delicious cooked or uncooked', 'Yellow Bell Pepper, each', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/20d76a56-9908-4163-a6d7-ace44d153c32.e0c356ae8149a2683b203576a7d039af.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20d76a56-9908-4163-a6d7-ace44d153c32.e0c356ae8149a2683b203576a7d039af.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20d76a56-9908-4163-a6d7-ace44d153c32.e0c356ae8149a2683b203576a7d039af.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (241818845, '240pc On Swt 3# Nv', 787.2, '405555388670', 'short description is not available', '240pc On Swt 3# Nv', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (241950406, 'Granny Smith Apples 5 Lb Bag', 5.53, '847473005947', 'short description is not available', 'Granny Smith Apples 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (242103463, 'Marketside Organic Fresh Sugar Snap Peas, 8 oz', 3.77, '681131161572', 'Marketside Organic Sugar Snap Peas are packed fresh, washed and ready to eat for your convenience. They have a delicious crisp texture and a vibrant green color that is sure to add a pop to all your dishes. Enjoy them as a healthy side or use them in all your favorite recipes. They are a great addition to stir fry and other Asian cuisines. Season them with salt, pepper and butter and serve with grilled chicken breast, grilled squash and bread for a filling dinner. Toss them with fresh cut carrot sticks for a tasty snack at the office. They are USDA organic and also offer a nutritional benefit as they are a rich source of iron. Snacking is made healthy with Marketside Organic Sugar Snap Peas. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Washed and ready to eat 2.5 servings per container USDA certified organic Great as a healthy side or snack', 'Marketside', 'https://i5.walmartimages.com/asr/62eed721-98b8-4e6b-bd1b-6919eb1536b0.8fe13f3d5c61ebbb98c5752109285e56.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/62eed721-98b8-4e6b-bd1b-6919eb1536b0.8fe13f3d5c61ebbb98c5752109285e56.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/62eed721-98b8-4e6b-bd1b-6919eb1536b0.8fe13f3d5c61ebbb98c5752109285e56.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (242307944, 'Green Seedless Grapes, 2 lb', 3.76, 'deleted_014668760121', 'short description is not available', 'Green Seedless Grapes, 2 lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (242386410, 'Fresh Peruvian Grown Black Grapes', 1.96, '', 'short description is not available', 'Fresh Peruvian Grown Black Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (243061563, 'SUNSET Wild Wonders Medley Tomato, 1.5 lb Package, Fresh', 4.98, '057836021174', 'Premium Wild Wonders Medley Tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily complements your recipes. Juicy and delicious, medley tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain Vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Premium Medley Tomatoes are the perfect choice.', 'Wild Wonders Premium Medley Tomatoes Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'SUNSET', 'https://i5.walmartimages.com/asr/20f46179-9a7c-4a56-9a3e-33ffd4158ee8.5197e09e3ff8cc2427d7ac2973389dfc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20f46179-9a7c-4a56-9a3e-33ffd4158ee8.5197e09e3ff8cc2427d7ac2973389dfc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20f46179-9a7c-4a56-9a3e-33ffd4158ee8.5197e09e3ff8cc2427d7ac2973389dfc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (243111863, 'Marketside Gala Apples/almond Pro-2 Snax', 1.38, '681131161107', 'short description is not available', 'Marketside Gala Apples/almond Pro-2 Snax', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (243844975, 'Mann\'s Sesame Srirache Saute Bowl, 8.5oz', 4.98, '716519007835', 'Get the perfect combination of Asian flavors with our Sesame Sriracha Sauté Style Nourish Bowl® packed with broccoli, kohlrabi, cabbage, carrots, snap peas, brown rice and a spicy sesame sriracha sauce.', 'Mann\'s Sesame Srirache Saute Bowl, 8.5oz Microwaveable in just 3 minutes 5 grams of protein 270 calories Vegan Soy, Wheat and sesame', 'Mann\'s', 'https://i5.walmartimages.com/asr/218b9e14-40cc-4b7d-8983-c605c02e61ea.30d8837ca4eb9692c1fa436d0444b168.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/218b9e14-40cc-4b7d-8983-c605c02e61ea.30d8837ca4eb9692c1fa436d0444b168.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/218b9e14-40cc-4b7d-8983-c605c02e61ea.30d8837ca4eb9692c1fa436d0444b168.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (244607665, 'Fresh Red Seedless Grapes', 2.88, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (244674957, '175pc On Swt 4# Cfv', 689.5, '405512733475', 'short description is not available', '175pc On Swt 4# Cfv', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (244901640, '120pc Apl Gala 5# Wa', 600, '400094619803', 'short description is not available', '120pc Apl Gala 5# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (245094489, 'Valencia Oranges', 0.98, 'deleted_073150043821', 'short description is not available', 'Valencia Oranges', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (245379472, 'Fresh Green Seedless Grapes', 1.78, '083477010307', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (245531026, 'Marketside Spinach Artichoke Stfd Mushrooms', 6.24, 'deleted_678286614060', 'short description is not available', 'Marketside Spinach Artichoke Stfd Mushrooms', 'Marketside', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (245786482, 'Tomato on the Vine, Bag', 1.98, '', 'Keep your recipes simple and classic with fresh tomatoes on the vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, this fresh produce item is sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Walmart\'s Tomatoes On The Vine and keep your dishes looking great and tasting equally as excellent.', 'Tomato on the Vine, Bag: Wholesome, versatile, and delicious Ideal ingredient for a variety of dishes Make a zesty tomato sauce to go along with your favorite pasta Enjoy on their own as a nutritious snack Make a flavorful salsa or add some pop to your guacamole', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (246000129, '200pc Pto Ylw 5# Ff', 994, '400094040553', 'short description is not available', '200pc Pto Ylw 5# Ff', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (246232835, 'Minced Garlic 4.5 Oz Jar', 1.97, 'deleted_718940001840', 'short description is not available', 'Garlic, Minced Fat free. Cholesterol free. Since 1992. Ready to use.', 'Garland Food', 'https://i5.walmartimages.com/asr/79fa661d-8854-43ed-a5a6-fc2c91afa42c.067aee5132203cf02eae185e9dbc0b42.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/79fa661d-8854-43ed-a5a6-fc2c91afa42c.067aee5132203cf02eae185e9dbc0b42.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/79fa661d-8854-43ed-a5a6-fc2c91afa42c.067aee5132203cf02eae185e9dbc0b42.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (246317393, 'Watermelon Seedless', 4.48, '400094575864', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (246741490, 'Earthbound Farm® Organic Spring Mix 10oz Tray', 8.93, '032601900182', 'In 1984, on a 2 ½ acres in California’s verdant Carmel Valley, our founders started Earthbound Farm. Rooted on that tiny farm, our commitment to organic has grown stronger every year. Thank you for choosing organic!', 'Organic Salad Organic Lettuce Blend A super-versatile mix of tender baby spinach, baby red and green chards, and baby kale.', 'Earthbound Farm', 'https://i5.walmartimages.com/asr/89d7821a-0ab9-4cdb-a76c-090bff390b5d.973b0bf5c828dae84c62e1dc22c34a56.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/89d7821a-0ab9-4cdb-a76c-090bff390b5d.973b0bf5c828dae84c62e1dc22c34a56.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/89d7821a-0ab9-4cdb-a76c-090bff390b5d.973b0bf5c828dae84c62e1dc22c34a56.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (246907370, '125pc Pto Rst Jmb 8#', 721.25, '405546022446', 'short description is not available', '125pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (247241026, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '405526537793', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (247826009, '100pc Pto Rst 10# Sc', 444, '405565996971', 'short description is not available', '100pc Pto Rst 10# Sc', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (248260406, 'Marketside Kosher Ruby Grapefruit Bites Segments, 64 oz Jar', 8.97, '681131161442', 'Marketside Ruby Grapefruit Segments are peeled and soaked in a slightly sweetened water to lock in all their delicious fruit flavors. This tasty citrus fruit is perfect for fruit cocktails, salsas, desserts, salads and can also be used as a garnish for meat and vegetable dishes. Enjoy them chilled for a refreshing snack that you can enjoy at anytime of the day. They also offer a nutritional benefit as they are a rich low calorie source of vitamin C. This large four pound container makes it easy to stock up on your favorite fresh fruit. Enjoy a healthy and delicious snack with the wholesome taste of Marketside Ruby Grapefruit Segments. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Kosher Ruby Grapefruit Bites Segments, 64 oz Jar Ruby grapefruit segments soaked in slightly sweetened water Great in salads High in vitamin C 1 plastic cup container has 15 servings Net weight: 4 pounds Keep refrigerated until ready to enjoy', 'Marketside', 'https://i5.walmartimages.com/asr/8bc86217-b71c-4263-a29c-eb81a43769b0_3.aa27b4db730405ef392d90f78a6324d7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8bc86217-b71c-4263-a29c-eb81a43769b0_3.aa27b4db730405ef392d90f78a6324d7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8bc86217-b71c-4263-a29c-eb81a43769b0_3.aa27b4db730405ef392d90f78a6324d7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (248275652, 'Snap Peas 8z', 2.68, '782796009176', 'short description is not available', 'Snap Peas 8z', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (248513200, 'Heirloom Tomato, 2 Pack', 3.98, 'deleted_689259003460', 'Fresh Heirloom Tomatoes are the time tested, never modified, reminder of the quality eating experience that can only come from a tomato grown in your own backyard and picked at the peak of perfedtion! Whether chopping to add into a salad, or sliced as part of a burger, these fresh heirloom tomatoes will not dissapoint. Be sure to add fresh heirloom tomatoes to our Walmart produce purchase today', 'Tomatoes Heirloom 2 Pk', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (248745453, 'Fresh Pineapple, Each', 0.88, '405810385161', 'Enjoy a burst of tropical flavor with this Fresh Pineapple. This pineapple can be a satisfying afternoon snack, or you can use it in a variety of recipes. For breakfast, use this pineapple to make a rich and creamy smoothie or serve it alongside your pancakes, sausage, and eggs. Slice it up and use to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. For dessert, you could make a crowd-pleasing pineapple upside down cake or a comforting pineapple crisp. However you choose to use it, this Fresh Pineapple will add flavor to any meal or beverage.', 'Aside from its sweetness, pineapple is abundant in potassium, iodine and vitamins A, B and C. It contains 85% water, carbohydrates and fiber, and provides great nutritional and health benefits. It is excellent for weight loss diets.', 'Pina Corona De Pr', 'https://i5.walmartimages.com/asr/32f4cb1f-71f8-4cbb-9539-e9c6718ca645.51d59e41d011e0a4fc92bc7bcd210c6a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32f4cb1f-71f8-4cbb-9539-e9c6718ca645.51d59e41d011e0a4fc92bc7bcd210c6a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32f4cb1f-71f8-4cbb-9539-e9c6718ca645.51d59e41d011e0a4fc92bc7bcd210c6a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (248783048, 'Manzana Mcintosh', 3.78, '072182002226', 'Manzana Mcintosh', 'Manzana Mcintosh Fcy 12/3', 'Manzana', 'https://i5.walmartimages.com/asr/1a5f3fb3-b19a-427a-bde3-00791668ecc9.caa10db611acf1d10999e3f8546e6d7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a5f3fb3-b19a-427a-bde3-00791668ecc9.caa10db611acf1d10999e3f8546e6d7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a5f3fb3-b19a-427a-bde3-00791668ecc9.caa10db611acf1d10999e3f8546e6d7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (249300669, 'Lunds & Byerlys Choice Premium Chili Meat Beef 1 ea', 0.01, '251701000008', 'Lunds & Byerlys Choice Beef Prm', 'Tradition; service; quality since 1939. Quality & value. Seal fresh - stays fresh longer. U.S. inspected and passed by Department of Agriculture. Product of USA. Beef, Chili Meat, Premium', 'SERVICES', 'https://i5.walmartimages.com/asr/1ee27183-1eea-41be-9528-4877e693426a.e1a3508b1968832d8e781a7779cf8316.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1ee27183-1eea-41be-9528-4877e693426a.e1a3508b1968832d8e781a7779cf8316.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1ee27183-1eea-41be-9528-4877e693426a.e1a3508b1968832d8e781a7779cf8316.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (249473755, 'Yellow Peach, 1.5 lb Carton', 3.48, '854378002162', 'short description is not available', 'Yellow Peach, 1.5 lb Carton', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (249565267, 'Simply Fresh Salad - Ultimate Blt', 3.98, '851125002505', 'short description is not available', 'Salad with Chicken, with Creamy Ranch Dressing, Ultimate BLT Romaine lettuce and tomatoes, bacon crumbles, seasoned chicken breast with rib meat and sea salt bagel chips. 280 calories. Loaded with toppings. 1 Fork included. Chicken raised without antibiotics. Inspected for Wholesomeness by U.S. Department of Agriculture. FivestarGourmetFoods.com. Follow us Facebook. Instagram. Pinterest. Twitter. This salad bowl is made from two recycled water bottles.', 'Simply Fresh', 'https://i5.walmartimages.com/asr/ac374f47-28c6-4599-9002-52c66e3003bb_3.b447ecf0fff669f16914eadaa812f902.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac374f47-28c6-4599-9002-52c66e3003bb_3.b447ecf0fff669f16914eadaa812f902.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac374f47-28c6-4599-9002-52c66e3003bb_3.b447ecf0fff669f16914eadaa812f902.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (250086645, 'NatureFresh Farms Sweet Bell Peppers, 12 Oz, 3 Count', 3.37, 'deleted_689259000582', 'Sweet Bell Peppers are a grills best friend and can add the extra flare your BBQ needs. Excellent color contrast in salads, sauce, dips, dressings, and stuffing. Don’t forget them in your juice/smoothie for the Vitamin C blast! Vitamin C is important in helping the body to better absorb iron. Try juicing a bell pepper with apple, lime and a splash of ginger for an excellent pre and post workout boost!', 'Mixed Bell Peppers (Selection May Vary) 3 count', 'Produce Unbranded', 'https://i5.walmartimages.com/asr/44b3d98e-5076-4720-a0e3-a1ea1471abcd.4063b270d6248fae43f21774f6fe1cfa.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44b3d98e-5076-4720-a0e3-a1ea1471abcd.4063b270d6248fae43f21774f6fe1cfa.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44b3d98e-5076-4720-a0e3-a1ea1471abcd.4063b270d6248fae43f21774f6fe1cfa.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (250231005, 'Freshness Guaranteed Seasonal Blend Small', 4.97, '262820000008', 'Enjoy the sweet, refreshing taste of Freshness Guaranteed Seasonal Blend. This pre-cut Seasonal Blend is great for breakfast, lunch, dessert, or when you want a snack. You can eat them right out of the container, use them to infuse water for a refreshing drink. This Seasonal Blend is great for sharing with friends and family or keeping it for yourself. It comes in a reclosable container to help maintain freshness. Bring home Freshness Guaranteed seasonal blend today for a refreshing, healthy treat.Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Seasonal Blend Small', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (250546773, 'Del Monte Red Grapefruit in 100% Juice, 20 oz Bowl', 4.28, '024000008385', 'Del Monte Red Grapefruit in 100% Juice, 20 oz Bowl makes it easy to enjoy high quality fruit in minutes. Del Monte Red Grapefruit in 100% Juice is packed with delicious, ripe grapefruit in 100% juice for a ready to eat fruit snack you can feel good about. Del Monte grapefruit offers a good source of Vitamin C, making them a convenient, wholesome and ready to eat citrus fruit option for busy nights. Picked and packed at the peak of freshness, peeled and sectioned, and immersed in extra light syrup, the jarred fruit slices are ideal as part of a quick lunch snack or as a flavorful addition to fruit cocktail. Each jar is easy to open, reseal, and store for a convenient fruit snack whenever you need delicious fruit on-the-go. Bring the wholesome goodness of the Earth to your family with Del Monte Jarred Grapefruit.', 'Juicy red grapefruit segments in 100% juice. 20 oz bowl, convenient and ready-to-eat. Naturally sweet with no artificial preservatives. Good source of Vitamin C for daily nutrition. Perfect for breakfast, snacks, or recipes.', 'Del Monte', 'https://i5.walmartimages.com/asr/abebd4fd-c862-44bc-b06c-527377cf0d70.95c881c34adeb7e8671cdabad002b696.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/abebd4fd-c862-44bc-b06c-527377cf0d70.95c881c34adeb7e8671cdabad002b696.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/abebd4fd-c862-44bc-b06c-527377cf0d70.95c881c34adeb7e8671cdabad002b696.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (252043056, 'Fresh Black Seedless Grapes', 2.78, '', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (252936575, 'Watermelon Seedless', 4.48, '400094476666', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (253758383, 'Little Leaf Farms Baby Crispy Green Leaf Lettuce Salad, 8 oz Clam Shell, Fresh', 4.97, '857394006138', 'Little Leaf Farms Baby Crispy Green Leaf lettuce is the perfect addition to any salad or sandwich. Our deliciously crisp, wonderfully fresh, and uniquely long-lasting greens are grown in a state-of-the-art, sustainable greenhouse that harnesses sunlight and fresh rainwater. With an a fully automated, hands-free growing process to seeding to packaging, there’s no need to wash. Just open the container and enjoy!', 'Greenhouse Grown ensures optimal growing conditions year-round Delicate, fresh, and crisp Pesticide, Herbicide, and Fungicide Free Naturally cultivated without genetic modification No Need to Wash Pristine and vibrant, perfect for salads, sandwiches, and garnishes', 'Little Leaf Farms', 'https://i5.walmartimages.com/asr/437970cf-a881-48e2-8a3e-19dde2a8aa4b.89ebfdbde10cf42de313bb040314604a.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/437970cf-a881-48e2-8a3e-19dde2a8aa4b.89ebfdbde10cf42de313bb040314604a.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/437970cf-a881-48e2-8a3e-19dde2a8aa4b.89ebfdbde10cf42de313bb040314604a.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (254074704, 'Fresh Dark Sweet Cherries', 84.5, '', 'short description is not available', 'Fresh Dark Sweet Cherries', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (254201565, 'California Grown Saturn Peaches, per Pound', 3.68, 'deleted_400094521816', 'California Grown Saturn Peaches, per Pound', 'Fresh California Grown Saturn Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (254451920, 'California Grown Peaches, per Pound', 1.58, '400094032756', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (254601066, 'Yellow Flesh Peaches, per Pound', 1.58, '400094145777', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (254642460, 'Fresh Slicing Tomato, 4 Pack', 2.48, '856441005001', 'Create something wholesome and delicious with Fresh Slicing Tomatoes. These fresh tomatoes are the perfect ingredient for a variety of tasty dishes. Use them to make a decadent tomato sauce for a pasta dish; try pairing with mozzarella cheese, basil, and balsamic vinegar for a delectable caprese salad; or simply enjoy them on their own as a nutritious snack. They would make a comforting and delicious tomato soup or a flavorful homemade salsa. You could also slice them up and use them to top burgers and pizza or use them to make a delicious grilled cheese and tomato sandwich. No matter how you choose to use them, these tomatoes will add flavor and taste to any meal. Be sure to add Fresh Slicing Tomatoes to your Walmart produce purchase today.', 'Slicing Tomatoes, Each: Wholesome, versatile, and delicious Large size with a juicy, delicious flavor Meaty texture makes them perfect for slicing Enjoy on burgers, sandwiches and more Enjoy on its own seasoned with salt and pepper as a heathy snack Create a mouthwatering salad or appetizer', 'Fresh Produce', 'https://i5.walmartimages.com/asr/596ed5a2-6558-42d6-9a5b-c318bc9f4ae2.4927131d05c00312cf51744e17e11473.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/596ed5a2-6558-42d6-9a5b-c318bc9f4ae2.4927131d05c00312cf51744e17e11473.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/596ed5a2-6558-42d6-9a5b-c318bc9f4ae2.4927131d05c00312cf51744e17e11473.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (254834665, 'Marketside Spring Mix Salad Blend, 11 oz Clam Shell, Fresh', 3.98, '681131355001', 'Marketside Spring Mix delivers a smooth, tender texture and great fresh taste with baby lettuce blend and baby greens blend. This mix comes loaded with nutrients and is packed, washed and ready to eat for your convenience. Use it to create your very own personalized salad that is tossed with your favorite vegetables, protein, nuts and dressing. Use it as a topping on sandwiches and pizzas or simply enjoy it as a healthy side. It offers nutritional benefits as it is a rich source of dietary fiber, calcium, iron and vitamins A and C. Enjoy fresh from the farm taste and bring home Marketside Spring Mix. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Spring Mix, 11 oz: Baby greens blend and baby lettuce blend Conveniently packaged to maintain freshness Loaded with nutrients and is packed, washed and ready to eat for your convenience Use it to create your very own personalized salad that is tossed with your favorite vegetables, protein, nuts and dressing Use it as a topping on sandwiches and pizzas or simply enjoy it as a healthy side', 'Marketside', 'https://i5.walmartimages.com/asr/60a7a38e-c6fd-48e9-83a1-f54d6dd08cbe.2621f189097ebab8659777c777cf9f2c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/60a7a38e-c6fd-48e9-83a1-f54d6dd08cbe.2621f189097ebab8659777c777cf9f2c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/60a7a38e-c6fd-48e9-83a1-f54d6dd08cbe.2621f189097ebab8659777c777cf9f2c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (255081551, 'Fresh Red Seedless Grapes', 2.58, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (255456870, 'Pompeii Lemon Juice 4 oz.', 1.37, '075879251877', 'Lemon juice Extract', 'Juices are made with only premium ingredients and freshly produced. Perfect for all cooking needs…sauces, salads, entrees and desserts have a fine quality of taste. 100% Juice concentrate', 'Pompeii Products', 'https://i5.walmartimages.com/asr/f810e3a5-5123-4dd8-a009-8f495cdd0369.f569a2b5d6330aa15231462a283bca44.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f810e3a5-5123-4dd8-a009-8f495cdd0369.f569a2b5d6330aa15231462a283bca44.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f810e3a5-5123-4dd8-a009-8f495cdd0369.f569a2b5d6330aa15231462a283bca44.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (256100431, 'Services Reduced Program Dept 94', 0.01, '252014000006', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (256156425, 'Fruit Medley 16oz', 4.38, '717524777164', 'short description is not available', 'Fruit Medley 16oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (256413023, 'Fresh Apio Root , lb', 1.77, '405872466884', 'Celery (Apio) is a root vegetable that you must try! Its flavor is buttery and its smell is very distinctive and rich. You peel it like a potato and you can do everything you would do with any other root. You can mash it and add a little butter like eating mash potato. Dice it to add to beans, stews, boil, sauté, and mash). Grown in Puerto Rico, Nicaragua, Honduras.', 'Carbohydrate Fiber, vitamin C, Zinc y vitamin Betacaroten,potassium, magnesium y calcium', 'Unbranded', 'https://i5.walmartimages.com/asr/77d96570-08b8-47de-a05a-39d08411c35d.5e7fe8ed254fd22869e4ffa91f609213.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77d96570-08b8-47de-a05a-39d08411c35d.5e7fe8ed254fd22869e4ffa91f609213.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77d96570-08b8-47de-a05a-39d08411c35d.5e7fe8ed254fd22869e4ffa91f609213.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (256492878, 'Fresh Organic Grape Tomato, 4 oz Cup', 0.01, 'deleted_751666770751', 'With the perfect balance of sweetness and acidity, these Organic Grape Tomatoes deliver fresh, versatile flavor to take you from sauces to salads and beyond. These grape tomatoes are certified organic, meaning that you can enjoy a healthy, flavorful addition to elevate the taste and texture of any meal. You can combine these tasty little tomatoes with fresh mozzarella and basil drizzled with olive oil or slice them up and add them to a freshly tossed salad. If you\'re feeling something classic, you can always cut one up to add that fresh tomato taste to a sandwich or dice up a few to make a delightful pizza topping. Be sure to add Organic Grape Tomatoes to your inventory of fresh ingredients today.', 'Organic Grape Tomato, 4 oz Cup: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches USDA organic Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (256569486, '150pc Pto Ykn 5# Co', 520.5, '405519876571', 'short description is not available', '150pc Pto Ykn 5# Co', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (256712932, 'Mangoes, 1 Each', 0.88, '', 'Although generally not considered to be the best in terms of sweetness and flavor, it is valued for its very long shelf life and tolerance of handling and transportation with little or no bruising or degradation.', 'Mango', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e75fbdb8-891a-483e-a48b-41da6099cddd_3.a040dcea704a1a361b37cfc7ec1323b4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e75fbdb8-891a-483e-a48b-41da6099cddd_3.a040dcea704a1a361b37cfc7ec1323b4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e75fbdb8-891a-483e-a48b-41da6099cddd_3.a040dcea704a1a361b37cfc7ec1323b4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (256763782, 'Name Root Per Pound', 1.72, 'deleted_847380000684', 'short description is not available', 'Name Root Per Pound', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/2e7cecd4-6650-43c5-8550-4d9e911f0b46_1.52b518732dc7c4be24b42df691aa3325.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2e7cecd4-6650-43c5-8550-4d9e911f0b46_1.52b518732dc7c4be24b42df691aa3325.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2e7cecd4-6650-43c5-8550-4d9e911f0b46_1.52b518732dc7c4be24b42df691aa3325.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (257183195, '100pc Pto Rst 10# Ph', 444, '405564156048', 'short description is not available', '100pc Pto Rst 10# Ph', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (258004738, 'Sweet Potato Oriental Yam', 1.28, '851502006393', 'short description is not available', 'Sweet Potato Oriental Yam', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (258401148, 'Services Reduced Program Dept 94', 0.01, '251862000008', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (258908097, 'Fresh Green Lime, 2lb', 3.67, '826594105170', 'Stock up on several of these juicy, Fresh Limes to enjoy with everyday meal planning. Freshly squeezed limes provide a healthy dose of vitamin C to your diet and are a key ingredient in many recipes, from homemade salsa to chicken dishes. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. Limes are sold at a per unit price, so you can stock up on as many as you need. You can even buy just one single lime at a time. Enjoy the refreshing, tart flavor of Fresh Limes.', 'Juicy and fresh, packed with vitamin C Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies and tarts Refreshing, tart flavor', 'Fresh', 'https://i5.walmartimages.com/asr/7722c1e3-7bd1-4d24-899a-508e9b5af0b9.6b3561b7951fe249d5c5dc8634e4a010.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7722c1e3-7bd1-4d24-899a-508e9b5af0b9.6b3561b7951fe249d5c5dc8634e4a010.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7722c1e3-7bd1-4d24-899a-508e9b5af0b9.6b3561b7951fe249d5c5dc8634e4a010.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (259016357, '240pc On Swt 3# Ca', 787.2, '405542115364', 'short description is not available', '240pc On Swt 3# Ca', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (259059986, 'Yellow Flesh Peaches, per Pound', 1.58, '400094344323', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (259107783, 'Krinos Giardiniera', 4.84, '075013255006', 'A classic component of antipasti platters, Krinos Giardiniera is a vibrant mixture of cauliflower, carrots, celery and peppers – marinated in vinegar brine. Our crunchy, pickled salad is delicious and ready-to-serve on its own. For variety, coat the colorful vegetables with your favorite salad dressing and a sprinkle of cheese or toss into a cold pasta salad. We recommend rinsing Krinos Giardineria before using.', 'Krinos Giardiniera 1lb A classic component of antipasti platters, Krinos Giardiniera is a vibrant mixture of cauliflower, carrots, celery and peppers – marinated in vinegar brine. Ready to Eat For variety, coat the colorful vegetables with your favorite salad dressing and a sprinkle of cheese or toss into a cold pasta salad. We recommend rinsing Krinos Giardineria before using.', 'Krinos', 'https://i5.walmartimages.com/asr/a9ed8ce2-a89b-4861-8441-64a310692c1b.7f5ea600a6d8429865efe9331f636539.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9ed8ce2-a89b-4861-8441-64a310692c1b.7f5ea600a6d8429865efe9331f636539.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9ed8ce2-a89b-4861-8441-64a310692c1b.7f5ea600a6d8429865efe9331f636539.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (259332076, 'Moby Grape Tomato Plant - Distinctively Sweet - 2.5\" Pot', 7.99, '810096733771', 'Determinate. Distinctively sweet 2 inch red grape tomatoes are delicious eaten by the handful right off the vine or added to salads. Suitable for large containers. F1, Large 2\" x 1½\" grape, unusually sweet 1 oz fruit, compact plant for patio pot. 70-80 days from transplant.', 'Distinctively sweet 2 inch red grape tomatoes Delicious eaten by the handful right off the vine Indeterminate Add to salads', 'Hirt\'s Gardens', 'https://i5.walmartimages.com/asr/c3d0bd1f-60f4-4f3b-b4f1-0a0918362977.3462ef3845873659412cd77dcc571259.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3d0bd1f-60f4-4f3b-b4f1-0a0918362977.3462ef3845873659412cd77dcc571259.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3d0bd1f-60f4-4f3b-b4f1-0a0918362977.3462ef3845873659412cd77dcc571259.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (259394295, '180pc Apple Mac 3#', 624.6, '405671428601', 'short description is not available', '180pc Apple Mac 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (259513938, 'Sun-Dried Pitted Dates – 5 Pound Bulk Bag by Sunbest Natural – Naturally Chewy Deglet Noor Dates, No Sugar Added, Vegan Digestive Support', 25.99, '872224770218', 'Naturally Sweet Delight Experience the deliciously natural sweetness and delightful chewiness of Sunbest Natural Sun-Dried Dates. Our premium quality, pitted dates are packed with an intense flavor that only nature can provide. Each 80 oz (5 lbs) pack is a treasure trove of nutrients, rich in fiber, protein, calcium, iron, and vitamin A, making it not just a tasty treat but a healthful one as well. Diet-Friendly Snacking Sunbest Natural\'s dates are a perfect fit for various dietary needs. Whether you adhere to a keto, vegan, or paleo diet, our sun-dried dates are an excellent, guilt-free alternative to sugary snacks. Naturally gluten-free, non-GMO, and kosher certified, they support your health without compromising taste. Long-Lasting Freshness Packaged for maximum freshness, our dates maintain their chewy goodness down to the last bite. For optimal longevity, store them in an airtight container in the refrigerator, where they will keep fresh for up to 16 months. Enjoy the lasting natural flavor of Sunbest dates at your convenience. Versatile Culinary Ingredient Beyond their snack-worthy appeal, Sunbest Natural\'s dates offer versatile culinary uses. Whether eaten straight from the bag or incorporated into recipes, they add a naturally sweet and chewy dimension to salads, desserts, and baked goods. Explore the flavorful potential of our sun-dried dates in your kitchen and discover new ways to enhance your dishes.', 'Naturally Sweet & Chewy - Premium-quality Deglet Noor pitted dates, sun-dried for natural sweetness without added sugar or preservatives. Wholesome dried fruit snacks - a clean, satisfying option for everyday energy and meal prep. Versatile pantry staple - great for baking, smoothies, oatmeal, salads, and homemade bars; better than processed dry fruits. Clean label - dried dates no sugar added; nothing artificial. Bulk value - 5 lb (80 oz) resealable bag keeps dates pitted fresh and chewy. Diet-friendly - Vegan, Non-GMO, Kosher; convenient dry fruit for many lifestyles.', 'Sunbest Natural', 'https://i5.walmartimages.com/asr/d5c927d1-efb6-459c-854a-2251f35ea7df.94fd0914fbdef8901c8b43a86cfeb91f.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d5c927d1-efb6-459c-854a-2251f35ea7df.94fd0914fbdef8901c8b43a86cfeb91f.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d5c927d1-efb6-459c-854a-2251f35ea7df.94fd0914fbdef8901c8b43a86cfeb91f.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (259634077, 'California Grown Peaches, per Pound', 1.58, '400094859360', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (259842087, 'POM Wonderful Pomegranate Arils, Ready to Eat Pomegranate Seeds, 4 oz', 4.97, '824150910015', 'One 4 Ounce Cup of POM Wonderful Pomegranate Arils, Ready to Eat Pomegranate Seeds. Best Snack Award Winner: POM Wonderful Pomegranate Arils offer a deliciously convenient way to enjoy the sweet and tart flavor of fresh pomegranates anytime, anywhere. Each cup is packed with juicy, ruby-red arils that are bursting with flavor and naturally rich in antioxidants. Whether you\'re looking for a healthy snack between meetings, a vibrant topping for your morning yogurt, or a flavorful addition to your favorite salad, these arils deliver versatility and taste in every bite. You can even melt dark chocolate and sprinkle the arils on top for a decadent, antioxidant-rich treat. Their bold flavor complements both savory and sweet dishes, making them a must-have ingredient in your kitchen. The resealable, cup-like container is designed for freshness and portability, perfect for busy lifestyles. With POM Wonderful, you’re not just snacking, you’re choosing a smart, flavorful option that supports your wellness goals while satisfying your cravings.', 'One cup of 4 oz ready to eat POM Wonderful Pomegranate Arils (also known as pomegranate seeds) Pomegranates are known for their unique antioxidants and sweet, tart taste Conveniently packed in individual fruit cups with an easy peel lid. So simple for an on-the-go snack, lunch boxes, road trip or to enjoy at home Eat straight from the cup, or add a refreshing crunch to salads, smoothies, charcuterie boards or any of your favorite dishes Pomegranate arils (seeds) are a good source of fiber and vitamin C. A healthy treat Non-GMO, certified Kosher and Gluten Free', 'POM Wonderful', 'https://i5.walmartimages.com/asr/a266b2cf-b77a-45c0-aa2a-0a3c35cdd234.c6b1e198234376c7489f651ba2f46090.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a266b2cf-b77a-45c0-aa2a-0a3c35cdd234.c6b1e198234376c7489f651ba2f46090.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a266b2cf-b77a-45c0-aa2a-0a3c35cdd234.c6b1e198234376c7489f651ba2f46090.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (260162791, '200pc Pto Rst Jmb 8#', 1284, '405518789827', 'short description is not available', '200pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (260223661, 'Fieldpack Unbranded Fresh Strawberries 2#', 4.74, 'deleted_811334020172', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 2#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/19e5eec4-4ff0-4dc6-97d0-ae0d16d8f2b1.a0b683f83258e19335d29f622b44b8c3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19e5eec4-4ff0-4dc6-97d0-ae0d16d8f2b1.a0b683f83258e19335d29f622b44b8c3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19e5eec4-4ff0-4dc6-97d0-ae0d16d8f2b1.a0b683f83258e19335d29f622b44b8c3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (260595029, 'Freshness Guaranteed Pineapple 32 Oz', 8.46, 'deleted_681131036597', 'short description is not available', 'Freshness Guaranteed Pineapple 32 Oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (260739665, 'Fresh Black Seedless Grapes, Bag', 4.24, '681131433662', 'Treat yourself to the delicious, juicy flavor of Freshness Guaranteed Fresh Black Seedless Grapes. These grapes are bursting with flavor and are completely seedless, so you can easily enjoy a handful as a fresh snack any time of day. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the fresh taste of Freshness Guaranteed Fresh Black Seedless Grapes. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Spark Fresh item.', 'Fresh Black Seedless Grapes, Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f7d4ea27-1479-4ca8-b526-c16766ab8741_2.1067c57d4630bbc11557ab28a24f02cd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7d4ea27-1479-4ca8-b526-c16766ab8741_2.1067c57d4630bbc11557ab28a24f02cd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7d4ea27-1479-4ca8-b526-c16766ab8741_2.1067c57d4630bbc11557ab28a24f02cd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (260878081, '200pc Pto Rst 5# Sch', 554, '405507557444', 'short description is not available', '200pc Pto Rst 5# Sch', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (260992644, 'Gem Avocado 4 Count Bag', 6.94, 'deleted_887214001555', 'short description is not available', 'Gem Avocado 4 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (261656379, 'Fresh Red Seedless Grapes', 2.88, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (261993371, 'Pummelo Bulk', 2.97, '405999176482', 'short description is not available', 'Pummelo Bulk', 'Unbranded', 'https://i5.walmartimages.com/asr/ac5251b6-128c-4e59-9be8-3a2d5201ab08.b8c48f63c60e676284ad30adb8328401.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac5251b6-128c-4e59-9be8-3a2d5201ab08.b8c48f63c60e676284ad30adb8328401.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac5251b6-128c-4e59-9be8-3a2d5201ab08.b8c48f63c60e676284ad30adb8328401.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (262409313, '200pc Pto Id 5# Bm', 584, '405508051897', 'short description is not available', '200pc Pto Id 5# Bm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (262587825, 'Seedless Medley Grapes 10oz', 2.98, '681131433587', 'short description is not available', 'Seedless Medley Grapes 10oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (262669766, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094470145', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (262705188, 'Services Reduced Program Dept 94', 0.01, '251876000001', 'short description is not available', 'Services Reduced Program Dept 94', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (262972056, 'Freshness Guaranteed Fresh Red Seedless Grapes', 2, '405992274949', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (263115974, 'Stuffed Baby Bella Mushrooms, Artichoke, Spinach, and Cheese Blend, 8.5 oz, 6 Count', 4.97, 'deleted_070475657238', 'Artichoke, Spinach, and Cheese Blend Stuffed Fresh Baby Bella Mushrooms are stuffed with a tasty combination of manchego and parmesan cheeses, spinach, artichokes, and garlic. These stuffed mushrooms are perfect for both grilling and baking and can even be cooked in the microwave. The stuffed caps are great as an appetizer or as a delicious side dish. Serve with tender New York strip steak and broccoli florets for an unforgettably delicious dinner the whole family will enjoy. They also offer nutritional benefits as they are a good source of dietary fiber, protein, calcium, and iron. Spice up your routine sides with Artichoke, Spinach, and Cheese Blend Stuffed Baby Bella Mushrooms.', 'Fresh Stuffed Baby Bella Mushrooms, Artichoke, Spinach, and Cheese Blend, 8.5 oz, 6 Count: Baby bella mushrooms stuffed with a tasty combination of manchego and parmesan cheeses, spinach, artichokes, and garlic Cooks in the tray Oven safe and microwavable tray Great as an appetizer or side item Good source of protein Net weight 8.5 oz', 'Giorgio', 'https://i5.walmartimages.com/asr/3d04cf59-21e7-47dc-88e0-91e5c67e8fbe.e5c15d9339f06879975091b52e742f53.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d04cf59-21e7-47dc-88e0-91e5c67e8fbe.e5c15d9339f06879975091b52e742f53.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d04cf59-21e7-47dc-88e0-91e5c67e8fbe.e5c15d9339f06879975091b52e742f53.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (263307588, 'Fresh Yellow Potatoes, Each', 0.98, '000000047272', 'Yellow Potatoes, per Pound', 'Yellow Potatoes Per Pound', 'Fresh Produce', 'https://i5.walmartimages.com/asr/342ca162-82a6-4976-bfa5-dc8cd584a908.5dcc0a10da8effda100024f76f8a6ad3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/342ca162-82a6-4976-bfa5-dc8cd584a908.5dcc0a10da8effda100024f76f8a6ad3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/342ca162-82a6-4976-bfa5-dc8cd584a908.5dcc0a10da8effda100024f76f8a6ad3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (264186630, 'Apple Waldorf Fruit Salad', 5.5, '681131436564', 'short description is not available', 'Apple Waldorf Fruit Salad', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (264302942, 'Bowery Farming Baby Kale Mix Pesticide-Free Lettuce, Locally Grown Salad Greens, Non-GMO, 10oz', 3.98, '851536007632', 'Baby Kale Mix has a hearty, sweet, and well-rounded flavor. It\'s great as a salad base and sauteed with your favorite veggies. Bowery Farming grows positively tasty, fresh produce in a cleaner, more sustainable way: in local, indoor smart farms. Every Bowery leaf is grown and handled with care, without pesticides. Bowery\'s smart farms use less water & create less waste on less land. Because Bowery\'s farms are local, you can trust that your produce is freshly harvested, picked at peak freshness 365 days a year, and available on shelf in just a few days.', 'Bowery Farming Baby Kale Mix Pesticide-Free, Locally Grown Salad Greens, 10oz: 100% Pesticide-free 100% Locally grown 100% Fully traceable Indoor-grown Protected Produce Clean & ready to eat Non-GMO Project Verified Recycled Packaging', 'Bowery Farming', 'https://i5.walmartimages.com/asr/96372864-605e-462e-ad66-30f6afbf2462.2034472fd93858983f709eef9d3ba5cf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96372864-605e-462e-ad66-30f6afbf2462.2034472fd93858983f709eef9d3ba5cf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96372864-605e-462e-ad66-30f6afbf2462.2034472fd93858983f709eef9d3ba5cf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (264341252, 'Bagged Serrano Pepper', 1.58, 'deleted_812181022197', 'short description is not available', 'Bagged Serrano Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (265105313, 'Spice World, ORGANIC MINCED GARLIC - LARGE Container - 32 OZ', 14.99, '070969000182', 'READY-TO-USE FRESH GARLIC – Add bold garlic flavor to a meal without the hassle of chopping or mincing. Spice World’s Organic Minced Garlic in jar is always just a spoonful away, offering an easy way to flavor your favorite dishes. DELICIOUS HEALTH FOOD – Our organic garlic minced is fresh, delicious, and good for you! It’s grown, processed, and handled naturally with no use of synthetic chemicals, preservatives, or sodium. Our garlic cloves are fat-free, non-GMO, and Kosher. BULK CONTAINER – There are so many ways to use our organic minced garlic, such as in pasta sauces, salsas, marinades, garlic bread, soups, and much more! Always have flavor on hand with this 32oz bulk-sized seasoning container. 1 TEASPOON EQUALS 1 CLOVE – Make meal prep a snap while adding savory flavor with minced garlic seasoning. Simply spoon straight from the minced garlic jar to amplify any meal. One teaspoon of pre minced garlic equals approximately one garlic clove. FLAVOR WITHOUT BOUNDARIES – It’s time to stir up adventure in your kitchen! Spice World grows our garlic fresh all year long. We make bringing bold flavor even easier for busy home chefs with our fresh minced, peeled, and squeezable flavors and blends.', 'Garlic, Organic, Minced USDA Organic. Certified Organic by CCOF. Non-GMO ingredients. Est 1949. Ready to use. Bold savory flavor! 1 tsp = 1 clove of garlic. spiceworldinc.com.', 'Spice World', 'https://i5.walmartimages.com/asr/f774f9d4-8181-4ab7-96ad-127efafc1ddb.35dc45e6bab33a8e28116fbc9f67ad00.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f774f9d4-8181-4ab7-96ad-127efafc1ddb.35dc45e6bab33a8e28116fbc9f67ad00.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f774f9d4-8181-4ab7-96ad-127efafc1ddb.35dc45e6bab33a8e28116fbc9f67ad00.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (265522069, '5# Bag Grapefruit', 5.98, 'deleted_860003045091', 'short description is not available', '5# Bag Grapefruit', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (265702938, 'Fresh Strawberries 1#', 1.56, '400094583913', 'short description is not available', 'Fresh Strawberries 1#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (266453017, 'Fresh Whole Squash, Pound', 2.47, '405854077329', 'Add some fresh flavor to your meal with Squash. This versatile vegetable can be used in a variety of dishes to create delicious and decadent meals. Roast the whole squash for a simple and flavorful side dish, chop it into cubes and put it in the slow cooker with chicken breast, kidney beans, and spices, or make noodles for a gluten-free pasta alternative. For a sweet treat turn the squash into a rich and spicy pie, perfect for the holiday season. With so many uses, this vegetable will become a pantry staple. Create tasty and flavorful meals with Squash', 'Versatile ingredient Roast the whole squash for the perfect side dish or chop into cubes, put into a slow cooker, and mix with chicken breast, beans, and spices for a flavorful dish Use it to create a sweet and decadent pie Make butternut squash noodles for a gluten free pasta alternative Will become a pantry staple', 'Unbranded', 'https://i5.walmartimages.com/asr/f57a6cdc-89ed-40bc-87d7-4f99067ee489.0b975be7fa233a234711a62552c2bf7a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f57a6cdc-89ed-40bc-87d7-4f99067ee489.0b975be7fa233a234711a62552c2bf7a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f57a6cdc-89ed-40bc-87d7-4f99067ee489.0b975be7fa233a234711a62552c2bf7a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (266917173, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094273302', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (267228575, 'Fresh Manns Veggie Bits Broccoli 12 oz', 4.47, '716519009877', 'Introducing Mann\'s Veggie Bits Broccoli, a convenient and delicious way to incorporate the goodness of nutrient-packed broccoli into your meals and snacks. Made from fresh, high-quality broccoli, these bite-sized bits are carefully chopped and ready to use, saving you precious time in the kitchen. Perfect for adding to salads, stir-fries, omelettes, or as a topping for your favorite pizza, Mann\'s Veggie Bits Broccoli provides a versatile and hassle-free solution for busy, health-conscious individuals. Enjoy the natural flavors and essential nutrients of broccoli with Mann\'s Veggie Bits Broccoli, your go-to choice for a balanced and vibrant diet.', 'Manns Veggie Bits Broccoli 12 Oz Introducing Mann\'s Veggie Bits Broccoli, a convenient and delicious way to incorporate the goodness of nutrient-packed broccoli into your meals and snacks. Made from fresh, high-quality broccoli, these bite-sized bits are carefully chopped and ready to use, saving you precious time in the kitchen. Perfect for adding to salads, stir-fries, omelettes, or as a topping for your favorite pizza, Mann\'s Veggie Bits Broccoli provides a versatile and hassle-free solution for busy, health-conscious individuals. Enjoy the natural flavors and essential nutrients of broccoli with Mann\'s Veggie Bits Broccoli, your go-to choice for a balanced and vibrant diet.', 'Mann\'s', 'https://i5.walmartimages.com/asr/98723136-d7b8-4710-bf0c-e73d70d2979b.c4bf47ae38ad85496b0f2d86f0cab7fe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/98723136-d7b8-4710-bf0c-e73d70d2979b.c4bf47ae38ad85496b0f2d86f0cab7fe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/98723136-d7b8-4710-bf0c-e73d70d2979b.c4bf47ae38ad85496b0f2d86f0cab7fe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (267265556, 'Dallas Cowboys Original Guacamole with Hass Avocados, Gluten-Free, 15 oz', 4.98, '810041599223', 'Our “classic original” guacamole is made with hand scooped avocados and the perfect blend of spices. Enjoy with chips or on your favorite sandwich. ¡Yo Quiero! and the Dallas Cowboys partnered up to bring easy snacks, easy lunches, and easy dinners to life. Whether you\'re planning for tailgating, Friday night dinners or prepping a vegan lunch, the Original Guacamole is sure to satisfy your cravings and delight your guests. Made with the freshest ingredients from real Hass Avocados to jalapeno peppers, this convenient snack or appetizer is perfect for your lunch menu, parties, packed lunch, vegan dinner, or whatever else you might crave. The Dallas Cowboys Original Guacamole pairs wonderfully with chips, sandwhiches, tacos, and snacks. You can even turn it into your own version of avocado toast or use as dip for carrots and other vegetables. Game day snacking just got better.', 'Our “classic original” guacamole is made with hand scooped avocados and the perfect blend of spices. Enjoy with chips or on your favorite sandwich. ¡Yo Quiero! and the Dallas Cowboys partnered up to bring easy snacks, easy lunches, and easy dinners to life. Whether you\'re planning for tailgating, Friday night dinners or prepping a vegan lunch, the Original Guacamole is sure to satisfy your cravings and delight your guests. Made with the freshest ingredients from real Hass Avocados to jalapeno peppers, this convenient snack or appetizer is perfect for your lunch menu, parties, packed lunch, vegan dinner, or whatever else you might crave. The Dallas Cowboys Original Guacamole pairs wonderfully with chips, sandwhiches, tacos, and snacks. You can even turn it into your own version of avocado toast or use as dip for carrots and other vegetables. Game day snacking just got better.', 'Yo Quiero', 'https://i5.walmartimages.com/asr/c93540a4-0821-4545-83b4-711c39ee08b9.411a9b938c74963319b7a36f8b9dcbdd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c93540a4-0821-4545-83b4-711c39ee08b9.411a9b938c74963319b7a36f8b9dcbdd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c93540a4-0821-4545-83b4-711c39ee08b9.411a9b938c74963319b7a36f8b9dcbdd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (267284788, 'Bowery Green Leaf Salad Mix - Locally Grown with No Pesticides, 4.5oz', 2.98, '851536007311', 'short description is not available', 'Bowery Green Leaf Salad Mix - Locally Grown with No Pesticides, 4.5oz', 'Bowery Farming', 'https://i5.walmartimages.com/asr/7c3d1614-1f9f-4ffd-ac4c-b57c59bd2c67_1.29acb43684083ca02dd28d7b2e25008c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c3d1614-1f9f-4ffd-ac4c-b57c59bd2c67_1.29acb43684083ca02dd28d7b2e25008c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c3d1614-1f9f-4ffd-ac4c-b57c59bd2c67_1.29acb43684083ca02dd28d7b2e25008c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (267417001, 'Peeled Natural Tamarind, El Gustazo', 7.98, '610395789000', 'Our peeled natural Tamarind is a versatile and flavorful ingredient perfect for a variety of culinary creations. This tangy, sweet, and sour fruit is hand-selected and carefully peeled to ensure the highest quality product. Use it to add a burst of flavor to sauces, marinades, chutneys, and more. It’s also a popular addition in desserts and beverages. Each bag contains perfectly ripe and soft tamarind that’s ready to use. Discover the incredible taste and benefits of this tropical fruit today!', 'Field packed Unbranded El Gustavo Peeled Natural Tamarind. This is a tangy, sweet, and sour fruit that will add a burst of flavor to any meal! Each package is filled with ripe tamarind that is ready to use! Find this in your local stores!', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/015cbb91-f3fb-4268-bb69-29d3a70a87e7.e34ceda3de6875580726d2e000e71fbd.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/015cbb91-f3fb-4268-bb69-29d3a70a87e7.e34ceda3de6875580726d2e000e71fbd.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/015cbb91-f3fb-4268-bb69-29d3a70a87e7.e34ceda3de6875580726d2e000e71fbd.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (267732198, 'Produce Unbranded Cucumber Snacking Cocktail', 2.78, 'deleted_057836168374', 'short description is not available', 'Produce Unbranded Cucumber Snacking Cocktail', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (268154018, 'Fresh Pear Bulk, per Pound Tote', 1.47, '000000044257', 'Indulge in nature\'s bounty with our Fresh Pear Bulk, available per Pound in a handy Tote. These pears are meticulously handpicked from the finest orchards, ensuring you receive nothing but the best. This diverse selection includes various varieties, each one boasting its own unique flavor profile. Whether you prefer the sweet, juicy crunch of the Bartlett, the subtly spicy Bosc, or the buttery smooth Anjou, our Fresh Pear Bulk has it all. Every pear is carefully inspected for quality, ripeness, and freshness before being packaged. The tote packaging not only ensures the safety and integrity of the pears but also makes it convenient for you to carry and store. Perfect for home use, parties, or even as a healthy snack at work. Enjoy these pears on their own, sliced into salads, baked into desserts, or used in cooking - the possibilities are endless. Indulge in the scrumptious taste of our fresh pears and experience the true flavor of nature. Buy our Fresh Pear Bulk per Pound Tote today and add a dash of wholesome goodness to your daily diet.', 'Fresh Pear Bulk, per Pound Tote Sweet, crisp, and juicy Excellent snacking pear Make a creamy smoothie or a nutritious juice blend Add to your salad for extra crunch and flavor Adds flavor to a variety of recipes Make pear butter or poached pears Make sweet desserts like pear cobbler, pear crisp or pear tarts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0039e8fe-9fd3-45e9-a4e3-ba5a49d3d9a4.a2f2806080b5f6e94ea11458020db16e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0039e8fe-9fd3-45e9-a4e3-ba5a49d3d9a4.a2f2806080b5f6e94ea11458020db16e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0039e8fe-9fd3-45e9-a4e3-ba5a49d3d9a4.a2f2806080b5f6e94ea11458020db16e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (268297825, 'Fieldpack Unbranded Turnip Greens', 1.14, 'deleted_659389000318', 'short description is not available', 'Fieldpack Unbranded Turnip Greens', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (268313129, 'Services Reduced Program Dept 94', 0.01, '251861000009', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (269299076, 'Fresh Green Seedless Grapes', 1.98, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (269323363, 'Fresh Poblano Peppers, 16 oz bag', 2.64, '711069541174', 'Enjoy the fresh and delicious flavor of Poblano Peppers. Poblano peppers are known for their mild heat and rich flavor. Best of all this versatile pepper can be used in a myriad of recipes. Use them to make delicious Mexican-inspired recipes like chile relleno. Stuff some with sausage, rice, and spices to make a hearty, healthy and delicious dinner. Pan roast some with your favorite cheese and herbs for a yummy side, add them to your hearty chili recipes or turn some into a wonderful autumn soup. Any way you slice, dice, or cook them, Poblano Peppers are a refreshing, healthy addition to any meal. Also know as Chile Poblano, Mild Greeb Chili, Mild Green Pepper and Bhavnagri Mirch around the world.', 'Poblano Peppers, 16 oz: Includes 1 pound of poblano peppers Known for their mild heat and rich flavor Versatile pepper can be used in a myriad of recipes Use them to make delicious Mexican-inspired recipes like chile relleno Stuff some with sausage, rice, and spices to make a hearty, healthy and delicious dinner', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fa7312e7-f5c6-4762-8003-2b958a10a9ad.ff6d8a61a9e33f4261fc327524c66242.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa7312e7-f5c6-4762-8003-2b958a10a9ad.ff6d8a61a9e33f4261fc327524c66242.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa7312e7-f5c6-4762-8003-2b958a10a9ad.ff6d8a61a9e33f4261fc327524c66242.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (269332781, 'Bulk Grapefruit', 1.18, 'deleted_814683010412', 'short description is not available', 'Bulk Grapefruit', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (270308434, 'Green Pepper 3-pack', 1.98, '795631229868', 'short description is not available', 'Green Pepper 3-pack', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (270884033, 'Fresh Muscadine Black Grapes, Whole, 1 lb Tray', 3.88, '033383250762', 'Enjoy the sweet taste of these Fresh Muscadine Black Grapes. Native to the southern United States, these muscadine grapes have a thick, tough skin and a sweet, juicy interior. These large, round grapes come in various shades of purple to bronze and are known for their unique musky whole flavor. Rich in antioxidants and vitamins, muscadine grapes are enjoyed fresh, as well as in jams, jellies, and wines. With a sweet flavor, they\'re great for snacking and can be used in salads, smoothies, and desserts, making them a perfect addition to any meal. Bring home some Fresh Muscadine Black Grapes today.', 'Fresh Muscadine Black Grapes, Whole, 1 lb Tray Tasty, nutritious fruit ideal for snacking or adding to recipes Muscadine grapes have a high concentration of antioxidants These grapes provide dietary fiber, supporting digestive health, cholesterol regulation, and weight maintenance With a sweet flavor, they\'re great for snacking and can be used in salads, smoothies, and desserts, making them a perfect addition to any meal Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/29385b13-e2e5-4c88-b8ad-f7ed872349fc.7229afd5a49d7875b8a066e250ab31e4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/29385b13-e2e5-4c88-b8ad-f7ed872349fc.7229afd5a49d7875b8a066e250ab31e4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/29385b13-e2e5-4c88-b8ad-f7ed872349fc.7229afd5a49d7875b8a066e250ab31e4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (271432121, 'Services Reduced Program Dept 94', 0.03, '251703000006', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (271634435, 'Organic Arugula - Living Herb', 2.48, '768573031400', 'short description is not available', 'Organic Arugula - Living Herb', 'Unbranded', 'https://i5.walmartimages.com/asr/e35c7336-e185-48b4-935a-28b372cb6d97_1.81ecd1bb6614a625597132c5024e64f0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e35c7336-e185-48b4-935a-28b372cb6d97_1.81ecd1bb6614a625597132c5024e64f0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e35c7336-e185-48b4-935a-28b372cb6d97_1.81ecd1bb6614a625597132c5024e64f0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (272362595, 'Fresh Green Seedless Grapes', 1.88, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (272617979, 'Tasteful Selections Ruby Red Organic Potatoes bag 3lb', 6.51, '826088489304', 'Ruby sensation organic potatoes. Light fresh flavor with creamy flesh and tender skin. Seasoning suggestion. Tasteful Selections®, the absolute leader and pioneer in the category of best-quality potatoes, offers an expanded, year-round organics program. More varieties, more pack sizes, same great taste and quality. Our three-pound bags are available in Honey Gold®, Ruby Sensation® and the new offering, Tasteful Selections organic russet potato. copy right tasteful selections', 'Red potato Organics Great taste and quality Light fresh flavor Source of potassium NON GMO Low Cal', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/ca970f29-8584-425d-90ce-3555396a3397.c4ef21fe750d05c89fe772c9166b14c1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ca970f29-8584-425d-90ce-3555396a3397.c4ef21fe750d05c89fe772c9166b14c1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ca970f29-8584-425d-90ce-3555396a3397.c4ef21fe750d05c89fe772c9166b14c1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (272937652, 'Red Potatoes, 5 Lb.', 5.47, '071430510124', 'Red Potatoes, 5 Lb.', 'Red Potatoes 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (272999622, 'Pineapple Chunks 32 oz Tray', 14.58, '045009891235', '32oz container of cut pineapple', 'Pineapple Chunks 32 Oz', 'Unbranded', 'https://i5.walmartimages.com/asr/59f111dc-0547-43d0-9f8e-4137658ef5d1.edd9ddbdc051957bc05734c089b240b7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59f111dc-0547-43d0-9f8e-4137658ef5d1.edd9ddbdc051957bc05734c089b240b7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59f111dc-0547-43d0-9f8e-4137658ef5d1.edd9ddbdc051957bc05734c089b240b7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (273252178, '90pc Pto Rst 10# Wa', 408.6, '405531146126', 'short description is not available', '90pc Pto Rst 10# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (274751027, 'Red Bell Pepper, each', 1.38, 'deleted_699058046889', 'short description is not available', 'Mucci Pepper Red 11lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/2204b55a-26bb-4379-86b2-cc9c2d77bf80_1.dfc7792ed8d7b08d3d7613aea359f09e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2204b55a-26bb-4379-86b2-cc9c2d77bf80_1.dfc7792ed8d7b08d3d7613aea359f09e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2204b55a-26bb-4379-86b2-cc9c2d77bf80_1.dfc7792ed8d7b08d3d7613aea359f09e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (275160088, 'Fruta Deli Kiwi Clamshell 2lb', 3.97, '', 'short description is not available', 'Fruta Deli Kiwi Clamshell 2lb', 'Unbranded', 'https://i5.walmartimages.com/asr/638e209c-f390-4048-a369-77e5bb79673b.83f07cfe6e9edad7fb12a4bfc8f8b2bb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/638e209c-f390-4048-a369-77e5bb79673b.83f07cfe6e9edad7fb12a4bfc8f8b2bb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/638e209c-f390-4048-a369-77e5bb79673b.83f07cfe6e9edad7fb12a4bfc8f8b2bb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (275543198, 'Paula Red Apples 5 Lb Bag', 4.92, '080153541575', 'short description is not available', 'Paula Red Apples 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (275832533, 'Freshness Guaranteed Whole White Mushrooms 16oz', 3.74, 'deleted_084348675038', 'short description is not available', 'Freshness Guaranteed Whole White Mushrooms 16oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (276026355, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094232569', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (276178794, 'Cebolla Pearl White 12/8oz', 4.04, '823215005734', 'short description is not available', 'Cebolla Pearl White 12/8oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/c9b61bfb-0788-4b67-a25b-7ded13154b88.bfa6a827a198890c45ab3f3cb300dd56.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c9b61bfb-0788-4b67-a25b-7ded13154b88.bfa6a827a198890c45ab3f3cb300dd56.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c9b61bfb-0788-4b67-a25b-7ded13154b88.bfa6a827a198890c45ab3f3cb300dd56.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (276370805, 'Fresh Green Seedless Grapes', 3.3, 'deleted_814563011171', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (276700169, 'Marketside Organic Pink Apples 2 Lb Bag', 3.98, 'deleted_011110189998', 'short description is not available', 'Marketside Organic Pink Apples 2 Lb Bag', 'Marketside', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (276823423, 'Freshness Guaranteed Fresh Green Seedless Grapes', 2.98, '', 'short description is not available', 'Freshness Guaranteed Fresh Green Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (277010990, 'Slofoodgroup Dried Porcini Mushrooms Gourmet Boletus Edulis Grade-a - 2oz', 12.95, '810023052678', 'Found growing naturally in the wild hidden amongst the forest under bushes and pines, Porcini mushrooms are beloved by chefs, cooks, and food lovers alike. The Porcini is a versatile mushroom that is used in soups, stews, stocks, sauces, pastas, rice, you name it. The prized boletus edulis fungi is used in recipes the world over from Italy, France, Spain, and all throughout Asia. The meaty umami-ness of Porcini makes these mushrooms a must have for any mushroom lover. What do Porcini taste like? Often described as meaty, earthy, woody and umami porcini are a favorite in many cuisines. Try for yourself and see what everyone is talking about and enjoy the rich, chewy, nutty and earth flavor profile that makes these mushrooms so darn good. BPA free stand up pouch. In each 100g serving of these Dried Porcini Mushrooms, you\'re treated to a burst of nutritional goodness. With just 370 calories, they\'re low in energy while delivering a solid 25g of protein, making them an excellent source for plant-based protein intake. Carbohydrates come in at 68g, including 9g of beneficial fiber, helping to maintain healthy digestion. The total fat content is 3g, with minimal saturated fat at 0.6g, and there\'s no cholesterol or sodium to worry about. Impressively, these mushrooms offer a substantial 3,700mg of potassium, essential for various bodily functions, along with 100mg of calcium and 3mg of iron, contributing to overall health. Truly a nutritional powerhouse, adding both flavor and wellness to your culinary endeavors. Not only do these mushrooms enhance the taste, but they also bring a wealth of nutrition to your meals. With a low-calorie count, high protein content, and a notable presence of essential minerals like potassium, calcium, and iron, these porcini mushrooms are not just a flavorful choice, but also a wholesome one. Experience the culinary magic of Slofoodgroup\'s Dried Porcini Mushrooms, a must-have for any food enthusiast looking to elevate their dishes with the finest gourmet ingredients.', '2oz Grade A Dried Porcini Mushrooms Our dried porcini are grade A sliced, dried naturally and uniform in thickness. Using Porcini or any dried mushrooms in cooking is really quite easy. Simply rehydrate the mushrooms in warm water until just tender and cook as you would normally with fresh mushrooms. Porcini Mushrooms can add umami flavor to your risottos, stews, stroganoff and more.', 'Slofoodgroup', 'https://i5.walmartimages.com/asr/7ed03fc4-8e0c-430c-b15b-a0bdc4ac6d14.63d8db524900cae3eb7f13831ab9622c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7ed03fc4-8e0c-430c-b15b-a0bdc4ac6d14.63d8db524900cae3eb7f13831ab9622c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7ed03fc4-8e0c-430c-b15b-a0bdc4ac6d14.63d8db524900cae3eb7f13831ab9622c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (277086752, 'Sunset Kaboom! Black Jalapenos, 8 oz', 1, '057836000322', 'Inspired by Flavor®', 'Chef Gourmet Inspired', 'Fresh Produce', 'https://i5.walmartimages.com/asr/71b4287a-021f-4b13-8cfd-ecc217303594.6c3d89ca83c041946baa7251df27e03e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71b4287a-021f-4b13-8cfd-ecc217303594.6c3d89ca83c041946baa7251df27e03e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71b4287a-021f-4b13-8cfd-ecc217303594.6c3d89ca83c041946baa7251df27e03e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (277270957, 'Watermelon Seedless', 4.48, '400094373415', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (277446521, '75pc Orange Navel 8#', 459, '405880650756', 'short description is not available', '75pc Orange Navel 8#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (277610654, '180pc Apple Gala 3#', 561.6, '405665850463', 'short description is not available', '180pc Apple Gala 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (277761735, 'Peeled Apple Slices 5/2 Oz', 3.58, '077745250601', 'short description is not available', 'Peeled Apple Slices 5/2 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (277774859, '192pc On Swt 3# Pe', 756.48, '405534641024', 'short description is not available', '192pc On Swt 3# Pe', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (278226445, '200pc Pto Rst 5# Ef', 654, '405547375572', 'short description is not available', '200pc Pto Rst 5# Ef', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (279576546, 'Fieldpack Unbranded Anaheim Peppers', 2.58, 'deleted_810083650197', 'short description is not available', 'Fieldpack Unbranded Anaheim Peppers', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (280565512, 'Org Avo 4ct Bag', 3.76, 'deleted_845857001097', 'short description is not available', 'Org Avo 4ct Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/29d89ba2-e74e-4c89-923c-caf76f81077f.6db6c3f3b04e20b57e685262469d365a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/29d89ba2-e74e-4c89-923c-caf76f81077f.6db6c3f3b04e20b57e685262469d365a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/29d89ba2-e74e-4c89-923c-caf76f81077f.6db6c3f3b04e20b57e685262469d365a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (280991117, 'Large Avocado 3 Count Bag', 4.48, 'deleted_136651097325', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (281122693, 'Red Globe Seeded Grapes, Bag', 2.48, '', 'short description is not available', 'Red Globe Seeded Grapes, Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (281195208, 'Green Bell Pepper', 0.76, '095829807169', 'short description is not available', 'Green Bell Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (281268926, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094673935', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (281401094, 'Freshness Guaranteed Fruit Trio Blend Bowl', 7.97, '263036000004', 'Enjoy a healthy snack with an assortment of refreshing fruits in this Berry Blend. Arranged in a transparent tray with a lid. Tender and sweet, these different fruits provide you with many essential nutrients you need every day, along with a blend of different flavors. The pre-cut fruits also make it a convenient option for snacking. For a special treat, use them to make a delicious yogurt parfait or a tasty fruit salad. Keep refrigerated until ready to enjoy. Add some fresh fruit to your daily menu today with this Berry Blend.', 'Freshness Guaranteed Fruit Trio Blend Bowl', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (281885264, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094358238', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (282536137, 'Taylor Farms Club Salad with Chicken & Bacon, 5.4 oz', 2.97, '030223035114', 'This Taylor Farms Club Salad with Chicken and Bacon is a fresh all-in-one meal that you can take on the go. This salad has a crispy lettuce blend, roasted white chicken meat, cheddar cheese, bacon, and blue cheese dressing. Some of the ingredients are packaged separately for maximum freshness. Everything is included for a delicious and healthy lunch, even the fork. With 14 grams of protein, this salad is made without synthetic colors or high fructose corn syrup. Keep refrigerated until ready to enjoy. Have a hearty, no-fuss meal with this Taylor Farms Club Salad with Chicken and Bacon.', 'Taylor Farms Club Salad with Chicken & Bacon, 5.4 oz: Crispy lettuce blend, roasted white chicken meat, cheddar cheese, bacon, and blue cheese dressing 1 serving per container Reclosable container to maintain freshness 380 calories per serving 14 grams of protein No synthetic colors or high fructose corn syrup Fork included Keep refrigerated', 'Taylor Farms', 'https://i5.walmartimages.com/asr/864447ce-3ecf-4ca0-b3f4-80c059e995d0.147027174e30f3c76adc317c25d48ba1.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/864447ce-3ecf-4ca0-b3f4-80c059e995d0.147027174e30f3c76adc317c25d48ba1.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/864447ce-3ecf-4ca0-b3f4-80c059e995d0.147027174e30f3c76adc317c25d48ba1.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (283428374, '200pc Pto Idaho 5#', 588, '405551518866', 'short description is not available', '200pc Pto Idaho 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (283723347, 'Yellow Flesh Peaches, per Pound', 1.63, '400094362143', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (283893431, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094859018', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (284198111, 'Yellow Flesh Peaches, per Pound', 1.58, '400094710050', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (284199528, '75pc Orange Navel 8#', 778.5, '400094963241', 'short description is not available', '75pc Orange Navel 8#', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (284554432, 'Quince, 4 ct', 5.98, '851362002061', 'short description is not available', 'Quince 4ct', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2f28f64b-c661-4275-ad4c-90ce93d54c5c_3.5337055eaf672a68adb0860e2d54ac25.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f28f64b-c661-4275-ad4c-90ce93d54c5c_3.5337055eaf672a68adb0860e2d54ac25.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f28f64b-c661-4275-ad4c-90ce93d54c5c_3.5337055eaf672a68adb0860e2d54ac25.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (285109998, '200pc Pto Idaho 5#', 794, '405551613226', 'short description is not available', '200pc Pto Idaho 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (285548673, 'Fresh Sumo Orange Each', 1.98, '000000036320', 'Fresh Sumo Citrus® is an enormously delicious mandarin originally from Japan. Distinguished for its Top Knot® and bumpy skin, this incredibly sweet, seedless hybrid is considered the ultimate citrus experience. Through passion and ambitious growing standards, Sumo Citrus has delivered its legendary taste to fans for over a decade.', 'Incredibly sweet Easy-to-peel No mess Enormous Naturally seedless Kid friendly Great for on-the-go snacking', 'Fresh Produce', 'https://i5.walmartimages.com/asr/115f27b2-52bb-4e94-b14e-807deb2a2b18.bb01b540795339fef4fd20b8d92760cc.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/115f27b2-52bb-4e94-b14e-807deb2a2b18.bb01b540795339fef4fd20b8d92760cc.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/115f27b2-52bb-4e94-b14e-807deb2a2b18.bb01b540795339fef4fd20b8d92760cc.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (285982241, 'Yellow Flesh Peaches, per Pound', 1.58, '400094233122', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (286503734, 'Jalapeno Peppers Bulk', 1.32, 'deleted_812181022210', 'short description is not available', 'Jalapeno Peppers Bulk', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (286717416, 'That\'s Tasty Organic Spring Mix 4.5oz', 2.18, '768573710145', 'short description is not available', 'That\'s Tasty Organic Spring Mix 4.5oz', 'That\'s Tasty', 'https://i5.walmartimages.com/asr/db6992a8-9726-47df-94b4-eb3849e7451e.30b4b97353c8efd63333923436cebc67.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/db6992a8-9726-47df-94b4-eb3849e7451e.30b4b97353c8efd63333923436cebc67.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/db6992a8-9726-47df-94b4-eb3849e7451e.30b4b97353c8efd63333923436cebc67.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (286846442, 'Crunch Pak Fresh Sweet Peeled Apple Slices, 24 oz Resealable Bag', 5.97, '732313001725', 'Savor the sweet taste of Crunch Pak Fresh Sweet Peeled Apple Slices. These perfectly peeled and sliced apples are the ultimate quick, easy, and healthy treat. Serve with a dollop of peanut butter and enjoy as a healthy snack that both kids and adults will love. Chop the apples up and add them to a salad with walnut, mixed greens, and a poppy seed vinaigrette for a crunchy delicious salad that you can enjoy for lunch or dinner. Add it to your favorite smoothie or juice blend for a morning pick me up to get your day started right. Throw some in a bag in with your lunch for a healthy side, take with you as you go travel or pack a couple of bags and take on a picnic with your family. Only 80 calories per serving and no added sugars. Enjoy the convenience and taste of Crunch Pak Fresh Peeled Sweet Apple Slices.', 'Crunch Pak Fresh Peeled Apple Slices Perfect on-the-go healthy snack Good source of vitamin C Equals 2.25 lbs of whole apples 80 calories per serving Family Size No added sugars', 'Crunch Pak', 'https://i5.walmartimages.com/asr/dfa419aa-fbcb-4bda-be03-06981403c391.e5d13a45fb9eb81fda2f2f73e9ad43ac.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dfa419aa-fbcb-4bda-be03-06981403c391.e5d13a45fb9eb81fda2f2f73e9ad43ac.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dfa419aa-fbcb-4bda-be03-06981403c391.e5d13a45fb9eb81fda2f2f73e9ad43ac.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (286974795, 'Fresh Tejocote Fruit, 1 lb Clamshell', 3.98, '861863000374', 'Fresh Tejocote Fruit brings vibrant, seasonal flavor to your kitchen with small golden fruits that offer a naturally sweet tart taste perfect for a wide range of recipes. These firm, aromatic fruits are widely used in traditional Latin cooking, especially for simmering in syrup, preparing homemade jams, or adding depth to festive fruit punch during the holiday season. Their mild sweetness, bright aroma, and versatile texture make them a great ingredient for both sweet and savory dishes. Conveniently packaged in a one pound clamshell, Fresh Tejocote Fruit is easy to store, simple to prep, and ready to inspire your next culinary creation.', 'Fresh Tejocote Fruit, 1 lb Clamshell Small golden fruits with a naturally sweet tart flavor Great for syrups, jams, fruit punch, and seasonal dishes Versatile texture suitable for sweet and savory recipes Convenient 1 lb clamshell for easy storage and use Also known as Mexican hawthorn and manzanita', 'Unbranded', 'https://i5.walmartimages.com/asr/577c3547-e431-4b18-9426-664684c9548f.9b07b6240ac718672265af6b14431240.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/577c3547-e431-4b18-9426-664684c9548f.9b07b6240ac718672265af6b14431240.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/577c3547-e431-4b18-9426-664684c9548f.9b07b6240ac718672265af6b14431240.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (287933596, 'Fresh Red Seedless Grapes', 1.84, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (288517283, '75pc Orange Navel 8#', 597.75, '400094592649', 'short description is not available', '75pc Orange Navel 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (288529694, 'Fresh Pineapple, Each', 3.57, '051497137458', 'Enjoy a burst of tropical flavor with this Fresh Pineapple. This pineapple can be a satisfying afternoon snack, or you can use it in a variety of recipes. For breakfast, use this pineapple to make a rich and creamy smoothie or serve it alongside your pancakes, sausage, and eggs. Slice it up and use to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. For dessert, you could make a crowd-pleasing pineapple upside down cake or a comforting pineapple crisp. However you choose to use it, this Fresh Pineapple will add flavor to any meal or beverage.', 'Fresh Pineapple To make juices Add flavor to meals', 'Unbranded', 'https://i5.walmartimages.com/asr/0ca9811e-fe6d-4410-880a-e7a82901e4ac.20a195a0038bb3075d8bc23a7b477e03.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ca9811e-fe6d-4410-880a-e7a82901e4ac.20a195a0038bb3075d8bc23a7b477e03.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ca9811e-fe6d-4410-880a-e7a82901e4ac.20a195a0038bb3075d8bc23a7b477e03.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (288610949, 'Fresh Grape Tomato, 10 oz Package', 2.48, 'deleted_038259117002', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (288802883, 'Fresh Korean Pears, 3 Count, Sweet', 7.44, '851511007039', 'Looking for fresh produce that is delicious and healthy? Try our Korean pears! These beautiful fruits are grown using organic ingredients, which means they are free from harmful pesticides and chemicals. Each pear is carefully hand-picked and packed whole, ensuring that you receive only the best quality. With their sweet taste and juicy flesh, these pears are the perfect addition to any meal or snack. Order yours today and taste the difference!', 'Looking for fresh produce that is delicious and healthy? Try our Korean pears! These beautiful fruits are grown using organic ingredients, which means they are free from harmful pesticides and chemicals. Each pear is carefully hand-picked and packed whole, ensuring that you receive only the best quality. With their sweet taste and juicy flesh, these pears are the perfect addition to any meal or snack. Order yours today and taste the difference! Find these in your local store!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/08ee0c5c-699a-4636-9c5e-ec496e556f30.db76790d55b8e320b767ed0fb9092179.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/08ee0c5c-699a-4636-9c5e-ec496e556f30.db76790d55b8e320b767ed0fb9092179.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/08ee0c5c-699a-4636-9c5e-ec496e556f30.db76790d55b8e320b767ed0fb9092179.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (288816722, 'Seeded Red Grapes, 2 lb clamshell', 5.76, 'deleted_405504786595', 'short description is not available', 'Red Seeded Grapes, 1lb', '', 'https://i5.walmartimages.com/asr/7236f72a-079e-486a-9ca3-f905a00f6317_1.cee7f10b4d62ca9683e11658ac7d83cb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7236f72a-079e-486a-9ca3-f905a00f6317_1.cee7f10b4d62ca9683e11658ac7d83cb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7236f72a-079e-486a-9ca3-f905a00f6317_1.cee7f10b4d62ca9683e11658ac7d83cb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (288832177, 'Sweet Spark Melon Demo', 0.01, '074641300287', 'short description is not available', 'Sweet Spark Melon Demo', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (289162604, '125pc Pto Rst Jmb 8#', 802.5, '400094045398', 'short description is not available', '125pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (289212253, 'GoVerden Classic Guacamole 12oz', 4.43, '850002858037', 'GoVerden Classic Guacamole 12oz is all natural and non-GMO certified. So, no artificial ingredients, no preservatives... nothing added that you wouldn\'t use at home. Our love and care for avocados is evident in every bite, taking special care to the selection, harvesting, ripening, and handling of each avocado. Try it today, it guactually goes with everything. Nachos? Hamburgers? Chips and Guac? Go natural, go for more, GoVerden.', 'GoVerden Classic Guacamole 12oz is as creamy and chunky as you want it to be. All natural ingredients and non-GMO certified. Ready to eat. Keep it refrigerated.', 'GoVerden', 'https://i5.walmartimages.com/asr/beec75a0-b4ba-47af-856c-cdaa7344be5f.c4841f3e441b74ce12a0eb9288b21725.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/beec75a0-b4ba-47af-856c-cdaa7344be5f.c4841f3e441b74ce12a0eb9288b21725.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/beec75a0-b4ba-47af-856c-cdaa7344be5f.c4841f3e441b74ce12a0eb9288b21725.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (289425324, 'Mann\'s Veggie Ranch Snack Tray, 16.5oz', 7.97, '716519020575', 'Veggie snack tray comes with rach dip perfect for serving in a famliy or friends reunion. This is a great way to get your daily dose of vegetables. They are washed and ready to eat, featuring all of your favorite vegetables. Great for snacking and entertaining all year.', 'Mann\'s Fresh Veggie Ranch Snack Tray, 16.5ozContains: Carrots Sticks Celery Broccoli Ranch Dip 16.oz', 'Mann\'s', 'https://i5.walmartimages.com/asr/2ed7b115-6bff-44d6-97a0-255bb9149c00.86105b817b114e575c42658935fa4eaa.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ed7b115-6bff-44d6-97a0-255bb9149c00.86105b817b114e575c42658935fa4eaa.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ed7b115-6bff-44d6-97a0-255bb9149c00.86105b817b114e575c42658935fa4eaa.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (289952741, 'Green Leaf Lettuce Filets', 2.97, 'deleted_605806122132', 'short description is not available', 'Green Leaf Lettuce Filets', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ce407a5e-71f3-4ea9-825a-d5728857b48a.f6134c153f6c19b0c97f8a9fd0cd5ddf.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce407a5e-71f3-4ea9-825a-d5728857b48a.f6134c153f6c19b0c97f8a9fd0cd5ddf.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce407a5e-71f3-4ea9-825a-d5728857b48a.f6134c153f6c19b0c97f8a9fd0cd5ddf.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (290087483, 'Fieldpack Unbranded Mixed Bell Pepper 3 Pack', 2.98, 'deleted_727908738803', 'short description is not available', 'Fieldpack Unbranded Mixed Bell Pepper 3 Pack', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (290125736, 'THE LITTLE POTATO PAPAS LITTLE TRIOS 1360 G', 5.48, '629307042041', 'short description is not available', 'Potatoes, Fresh Creamer, Terrific Trio, Holiday Blend, Party Size Cheerful color blend, harmonious flavor. Easy to prepare. 8 cups vegetable per bag. We\'re thankful to be invited to your table. A family-based company since 1996, we honor the special time that food helps provide at the table together. I hope you\'ll enjoy serving our Holiday Blend to your family and friends as much as we do - simple to prepare, yet elegant on the table. - Angela Santiago Co-Founder and CEO. Pre-washed. No Peeling. Enter for a chance to win $3,333 (win 1 of 3 prizes of $3,333 cash. See reverse for details) (No purchase necessary. Purchasing does not improve your chances of winning. The Terrific Trio sweepstakes is open to legal residents of the 48 contiguous U.S. D.C, and Canada, who are the age of 18 or older. Void in AK, HI, and where prohibited by law. Sweepstakes begins at 12:00:01 am ET on 10/05/21 and ends at 11:59:59 pm ET on 01/26/21. To enter online, For entry periods and official rules, see terrifictriosweepstakes.com The total ARV of all prizes for US residents is: $9,999 USD. The total ARV of all prizes for Canadian residents is $9,999 CAN. The odds of winning depend on the number of eligible entries received per entry period. Sponsor: The Little Potato Company USA, Inc., 801 Little Potato Way, Deforest, WI 53532 and The Little Potato Company Ltd. 11749-180 Street, Edmonton, AB T5S 2H6) Terrific Trio Sweepstakes.', 'The Little Potato Company', 'https://i5.walmartimages.com/asr/592d278e-0124-4833-81d7-9e9252585903.eb3c3645b7469999ceac510299410e40.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/592d278e-0124-4833-81d7-9e9252585903.eb3c3645b7469999ceac510299410e40.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/592d278e-0124-4833-81d7-9e9252585903.eb3c3645b7469999ceac510299410e40.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (290260484, 'Mann\'s Veggie Hummus Snack Tray, 16.5oz', 7.48, '716519014758', 'Veggie snack tray comes with hummus perfect for serving in a famliy or friends reunion. This is a great way to get your daily dose of vegetables. They are washed and ready to eat, featuring all of your favorite vegetables. Great for snacking and entertaining all year.', 'Mann\'s Fresh Veggie Hummus Snack Tray 16.5oz Carrots Celery Broccoli Hummus Sticks Dips 16.5oz', 'Mann\'s', 'https://i5.walmartimages.com/asr/463c906d-dc5a-4153-b5f4-71d9ed905a32.0db9dbba42f314268e99e6f58cc86681.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/463c906d-dc5a-4153-b5f4-71d9ed905a32.0db9dbba42f314268e99e6f58cc86681.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/463c906d-dc5a-4153-b5f4-71d9ed905a32.0db9dbba42f314268e99e6f58cc86681.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (290550246, 'Honeycrisp Apples 2.5 Lb Bag', 6.47, '879329007249', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (290656622, 'Shrink Cap | Fawn Green w/Midnight Black Grapes (100/Pack)', 19.95, '776982330908', 'Elevate Your Wine Experience with Our European Crafted Shrink Caps Enhance Bottle Presentation and Ensure Freshness with Our Shrink Caps! Our Premium Shrink Caps are the perfect addition to any wine bottle, combining elegance with functionality. These caps, expertly crafted in Europe, not only enhance the visual appeal of your bottles but also play a crucial role in maintaining the cork\'s integrity. Our shrink caps are ideal for winemakers, wine enthusiasts, or those who love to gift homemade wine. They are a simple yet effective way to elevate your wine\'s presentation and ensure freshness. Key Features: High-Quality Material:Manufactured in Europe, guaranteeing premium quality and durability. Universal Fit:Designed to fit 375ml, 750ml, and 1500ml wine bottles perfectly. Easy Tear-Off Design:Facilitates a smooth bottle-opening experience. Precise Dimensions:Measuring 30.5mm x 55mm for a flawless fit. Elevated Presentation:Adds a sophisticated touch to any wine bottle. Usage Guide: Slide the Cap:Place the shrink cap over the neck of the wine bottle. Apply Heat:Use a heat gun or steam to shrink the cap around the bottleneck securely. Tear & Pour:Enjoy the easy tear-off design for quick access to your wine. FAQs: Q:Can these shrink caps be used for beverages other than wine?A:They are versatile for any bottled beverage with compatible dimensions. Q:How resistant are these caps to external factors like moisture?A:Crafted with high-quality materials, they resist moisture and other external elements effectively. Q:Are special tools required for application?A:A heat gun or steam source is needed to secure the cap\'s shrinking. Q:Do these caps leave any residue upon removal?A:No, they are designed for clean and residue-free removal.', 'High-Quality Corks and Stoppers for Wine Bottles – Designed to provide a secure seal, preserving the freshness and flavor of your wine with every use. Perfect for Home and Professional Winemakers – Whether for DIY projects or commercial bottling, our corks and stoppers ensure reliable performance and a professional finish. Durable and Easy to Use – Made from premium materials, our wine corks and stoppers are easy to insert and remove, making them ideal for sealing and storing your homemade beverages.', 'ABC Cork', 'https://i5.walmartimages.com/asr/e24691a7-6680-425d-a61a-7f7761d42eed.a900168bf15b590b176370a362d07209.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e24691a7-6680-425d-a61a-7f7761d42eed.a900168bf15b590b176370a362d07209.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e24691a7-6680-425d-a61a-7f7761d42eed.a900168bf15b590b176370a362d07209.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (290660074, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094843314', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (290711372, 'Fresh Red Sweet Bell Peppers', 1.36, 'deleted_826920000056', 'Our vine-ripened red bell peppers, are produced under the best growing conditions. Vibrant in color with a consistent uniform shape and firmness, these peppers are picked and processed with the stem attached, allowing them to continue to absorb moisture and ripen for several days.', 'Red Bell Pepper', 'Red Sun Farms', 'https://i5.walmartimages.com/asr/3ccf0fd3-ed09-4328-b5f5-56930c68660e.c2f7040a91a5a92c5a642e3c4c39408e.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3ccf0fd3-ed09-4328-b5f5-56930c68660e.c2f7040a91a5a92c5a642e3c4c39408e.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3ccf0fd3-ed09-4328-b5f5-56930c68660e.c2f7040a91a5a92c5a642e3c4c39408e.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (291209105, 'Fresh California Grown Red Grapes', 1.98, '', 'short description is not available', 'Fresh California Grown Red Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/7cb6d44e-c980-49be-80e2-6a16bf916a46_2.e224342fd4723f77fae1c279872cd756.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7cb6d44e-c980-49be-80e2-6a16bf916a46_2.e224342fd4723f77fae1c279872cd756.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7cb6d44e-c980-49be-80e2-6a16bf916a46_2.e224342fd4723f77fae1c279872cd756.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (291347031, 'Fresh Dark Sweet Cherries, 1 Lb.', 8.73, 'deleted_860003000601', 'Fresh Dark Sweet Cherries, 1 Lb.', 'Fresh Dark Sweet Cherries', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (291770874, 'Malanga Root Per Pound', 3.27, '', 'short description is not available', 'Malanga Root Per Pound', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (292229235, 'Fieldpack Unbranded 8ct Chocolate Dipped Strawberry', 12.48, '869510000388', 'short description is not available', 'Fieldpack Unbranded 8ct Chocolate Dipped Strawberry', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (292720335, 'Fresh Organic Bartlett Pears, 2lb Bag - Sweet & Juicy', 4.12, 'deleted_818544022873', 'Crisp, sweet & refreshingly juicy—our Organic Bartlett Pears, 2 lb bag brings tree-ripened flavor straight to your kitchen. Grown without synthetic pesticides or GMOs, each pear offers delicate floral notes, a buttery-smooth bite, and plenty of vitamin C and fiber. Perfect for snacking, tossing into salads, or baking into cozy crumbles—just rinse, slice, and enjoy nature’s candy in every bite.', 'Organic Bartlett Pears in a 2 lb Bag, Fresh Condition Hand-Selected for Quality; Pre-Portioned for Convenience Classic Bartlett Juiciness with Delicate Floral Notes Grown Without Synthetic Pesticides or GMOs Rich in Vitamin C and Dietary Fiber Ideal for Snacking, Salads, or Baked Desserts', 'Produce', 'https://i5.walmartimages.com/asr/8903a0a2-c63c-4fd1-85cf-1f796d7eb3da.36d112cdc03c34a0e00025c966f46a14.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8903a0a2-c63c-4fd1-85cf-1f796d7eb3da.36d112cdc03c34a0e00025c966f46a14.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8903a0a2-c63c-4fd1-85cf-1f796d7eb3da.36d112cdc03c34a0e00025c966f46a14.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (292835452, 'Autumn Glory Fresh Apples, Each', 2.22, '000000036016', 'Indulge in the crisp sweetness of Autumn Glory Apples, the perfect Fresh autumn treat! These apples are grown in the Pacific Northwest where the unique climate and soil create the perfect environment for the apples to thrive. Bursting with juicy, caramel flavor, these apples are perfect for snacking, baking or as an addition to your favorite fall recipes. Grab a bag today and savor the taste of the season!', 'Autumn Glory apples are a distinct variety with a unique flavor profile that sets them apart from other apples. Autumn Glory apples are high in dietary fiber and contain antioxidants, making them a healthy snacking choice. The 2lb bag size is convenient for families and individuals looking for a longer-lasting supply of fresh apples .Autumn Glory apples are harvested at their peak ripeness and packed immediately for maximum freshness, ensuring a delicious and crisp eating experience.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/42fad949-7cf9-43ee-b5be-3ea67cb987fe.72abc25b01aa7824a1a69229b82f0015.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42fad949-7cf9-43ee-b5be-3ea67cb987fe.72abc25b01aa7824a1a69229b82f0015.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42fad949-7cf9-43ee-b5be-3ea67cb987fe.72abc25b01aa7824a1a69229b82f0015.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (293160234, '200pc Pto Rst 5# Ptd', 594, '405507964716', 'short description is not available', '200pc Pto Rst 5# Ptd', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (293818040, 'Fresh Grape Tomato, 10 oz Package', 23.92, 'deleted_751666771505', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (294366981, 'Fresh Red Seedless Grapes', 1.84, 'deleted_881006000702', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (294912972, 'Kale, one bunch', 0.98, 'deleted_885435999750', 'Kale', 'The attractive, ruffly-edged and richly-colored leaves of kale make it an excellent garnish. It can also add a rich and festive quality to salads. When used raw as a salad green, kale has a slightly sweet taste. Young leaves work best in salads. When cooked, kale can be a little bitter, but is excellent when sauteed with a little butter, lemon and crumbled bacon.', 'Ratto Bros.', 'https://i5.walmartimages.com/asr/a0903561-f005-4be1-ba96-0df4d8b67f36.a5e7cf31c3966b1fc0449a24bd4ac4e4.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a0903561-f005-4be1-ba96-0df4d8b67f36.a5e7cf31c3966b1fc0449a24bd4ac4e4.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a0903561-f005-4be1-ba96-0df4d8b67f36.a5e7cf31c3966b1fc0449a24bd4ac4e4.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (295586673, 'Grown Yellow Peaches, per Pound', 1.58, '405505064838', 'Grown Yellow Peaches, per Pound', 'Fresh Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (295752540, '60pc Apl Atmn Glory', 236.4, '405724879176', 'short description is not available', '60pc Apl Atmn Glory', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (295906333, 'Queen Victoria Organic Celery Stalk', 1.76, 'deleted_060556120805', 'Organic celery stalk', 'Queen Victoria Organic Celery Stalk', 'Queen Victoria', 'https://i5.walmartimages.com/asr/cb71ef31-5436-4e94-aa5e-ff4ddd010116.f2812b09685a11f9a446349ee1b7960e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb71ef31-5436-4e94-aa5e-ff4ddd010116.f2812b09685a11f9a446349ee1b7960e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb71ef31-5436-4e94-aa5e-ff4ddd010116.f2812b09685a11f9a446349ee1b7960e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (296353326, 'Services Reduced Program Dept 94', 0.01, '251689000007', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (296459011, 'White Sweet Potatoes 2 Lb Bag', 2.78, '740121570043', 'short description is not available', 'White Sweet Potatoes 2 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (296546006, 'Taylor Farms Cheddar Ranch Grilled Chicken Chopped Salad Kit, 15.25 oz.', 5.28, '681131276559', 'Our Taylor Farms Cheddar Ranch Grilled Chicken Chopped Salad Kit includes everything you need to prepare a delicious, easy meal in less than 3 minutes. Every bite is packed with flavor thanks to this dream team of crisp veggies combined with grilled chicken, shredded cheddar cheese, crispy uncured bacon and a creamy ranch dressing to top it all off! With 8 grams of protein and 4.5 servings per bag, that’s 36 grams of protein in one convenient kit!', 'Taylor Farms Cheddar Ranch Grilled Chicken Chopped Salad, 15.25 oz. 36 grams of protein per bag Dressings and toppings included ready in less than 3 minutes Full entree salad', 'Taylor Farms', 'https://i5.walmartimages.com/asr/61b2daec-4921-4b95-8026-a7e7e42216a9_1.34c20d14144b2440897e723e63120a69.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/61b2daec-4921-4b95-8026-a7e7e42216a9_1.34c20d14144b2440897e723e63120a69.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/61b2daec-4921-4b95-8026-a7e7e42216a9_1.34c20d14144b2440897e723e63120a69.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (297013641, 'Freshness Guaranteed Fresh Green Seedless Grapes', 1.64, '', 'short description is not available', 'Freshness Guaranteed Fresh Green Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (297067674, 'California Grown Peaches, per Pound', 1.58, '400094950296', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (297414240, '300pc Bumpy Pumpkins', 594, '405954930258', 'short description is not available', '300pc Bumpy Pumpkins', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (297539613, 'Celery Sticks', 2.94, 'deleted_052867149507', 'short description is not available', 'Celery Sticks', 'Fresh Produce', 'https://i5.walmartimages.com/asr/20fda9d5-2ca2-4988-b8f2-f9f9b6b0da9e.375983a0f372263bce29699d6353534c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20fda9d5-2ca2-4988-b8f2-f9f9b6b0da9e.375983a0f372263bce29699d6353534c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20fda9d5-2ca2-4988-b8f2-f9f9b6b0da9e.375983a0f372263bce29699d6353534c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (298169339, 'Services Reduced Program Dept 94', 0.01, '251676000003', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (298268888, 'Aprium, 1 lb Pack', 4.88, '847081000532', 'short description is not available', 'Fresh California Grown Apriums 16oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (298500215, 'Satsumas, 5 Lb.', 6.97, '000195003015', 'Satsumas, 5 Lb.', 'Satsuma 5# Box', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (298759923, 'California Grown Peaches, per Pound', 1.58, '400094272343', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (299053128, 'Fresh Driscoll\'s Strawberries, 15 oz Heart-Shaped Container', 7.97, '715756200320', 'The sweet, juicy flavor of Fresh Strawberries make them a refreshing and delicious treat. The heart-shaped clamshell makes the perfect gift for special occasions. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like, vitamin C, dietary fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Strawberries today and savor the delectable flavor.', 'Served in a Heart-Shaped Container Prior to serving gently wash the fruit and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'Driscoll\'s', 'https://i5.walmartimages.com/asr/1e9bd70c-17fe-4ec1-b0d8-125caca67bc1.7a4b44a2e7f752bc9d40e4e6172e7527.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1e9bd70c-17fe-4ec1-b0d8-125caca67bc1.7a4b44a2e7f752bc9d40e4e6172e7527.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1e9bd70c-17fe-4ec1-b0d8-125caca67bc1.7a4b44a2e7f752bc9d40e4e6172e7527.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (299394301, 'Fresh Tomato on the Vine, Bag', 1.98, 'deleted_684924020056', 'Keep your recipes simple and classic with fresh tomatoes on the vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, this fresh produce item is sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Walmart\'s Tomatoes On The Vine and keep your dishes looking great and tasting equally as excellent.', 'Tomato on the Vine, Bag: Wholesome, versatile, and delicious Ideal ingredient for a variety of dishes Make a zesty tomato sauce to go along with your favorite pasta Enjoy on their own as a nutritious snack Make a flavorful salsa or add some pop to your guacamole', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (299846524, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094858875', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (300123577, 'Fresh Black Seedless Grapes', 2.08, '', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/a9d04025-42f4-48d8-a01a-434e1f62e773_2.c8dd77bf8f29c84ab0ccfacd2bc0e004.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9d04025-42f4-48d8-a01a-434e1f62e773_2.c8dd77bf8f29c84ab0ccfacd2bc0e004.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9d04025-42f4-48d8-a01a-434e1f62e773_2.c8dd77bf8f29c84ab0ccfacd2bc0e004.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (300639831, 'Big Green Organic Food- Organic Millet Macaroni, 8.8 oz', 5.99, '678452142779', 'Big Green Organic Food- Organic Millet Macaroni, 8.8 oz. Millet is one of two grains which is considered lectin-free. According to Steven Gundry, MD, who is credited with the development of the lectin-free diet, lectins disrupt cell communication and increase inflammation, causing poor gut health that leads to a host of ills, including digestive problems (bloating, gas, diarrhea), and weight gain, per Dr. Gundry\'s website.', 'Single Ingredient Macaroni Produced using 100% millet flour and no salts or artificial ingredients added. Certified Organic', 'Big Green Organic', 'https://i5.walmartimages.com/asr/e132b60b-63f8-4a16-9a4d-f6f09edc6810.6b51d842e999a87b8e2a3f6a5469c337.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e132b60b-63f8-4a16-9a4d-f6f09edc6810.6b51d842e999a87b8e2a3f6a5469c337.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e132b60b-63f8-4a16-9a4d-f6f09edc6810.6b51d842e999a87b8e2a3f6a5469c337.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (300737024, 'Organic Micro Kale', 1.98, '768573417570', 'short description is not available', 'Organic Micro Kale', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (301124266, 'Yellos 2ct White Grapefruit', 2.72, '848163004653', 'short description is not available', 'Yellos 2ct White Grapefruit', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1d45113c-0a69-4410-b815-444acbdc54d5.968e904d396bb056a7ca3df45eb3a256.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d45113c-0a69-4410-b815-444acbdc54d5.968e904d396bb056a7ca3df45eb3a256.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d45113c-0a69-4410-b815-444acbdc54d5.968e904d396bb056a7ca3df45eb3a256.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (301870520, 'Fresh Blood Oranges, 1 lb Bag', 3.98, '000000043816', 'Blood Oranges', 'Great source of vitamin C, Use to add zest and flavor to your meals and beverages, Enjoy on their own or in a variety of recipes Great source of vitamin C, Use to add zest and flavor to your meals and beverages, Enjoy on their own or in a variety of recipes Great source of vitamin C, Use to add zest and flavor to your meals and beverages, Enjoy on their own or in a variety of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1ec1e29c-2e43-4706-b045-d017d995fc81.a4661c23345b52faee9ce8bedefe7b06.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1ec1e29c-2e43-4706-b045-d017d995fc81.a4661c23345b52faee9ce8bedefe7b06.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1ec1e29c-2e43-4706-b045-d017d995fc81.a4661c23345b52faee9ce8bedefe7b06.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (302234817, 'Stir Fry Mushrooms, 4 oz', 3.48, '084348273043', 'Experience the fresh taste of Stir Fry Mushrooms. This convenient mix of mushrooms features a blend of sliced mushrooms including shiitake, baby bella, white, and portabella. Pre-sliced, the hearty, full-bodied taste of this mushroom blend makes them an excellent addition to beef, wild game, and vegetable dishes. Or add this hearty blend to broths, soups, stews, pizzas, or pasta sauces for a pleasing flavor and texture. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try Stir Fry Mushrooms.', 'Stir Fry Mushrooms, 4 oz: 4-ounce package of sliced mushrooms Blend of sliced mushrooms including shiitake, baby bella, white, and portabella Naturally fat-free Cholesterol-free Low in calories, carbs and sodium Fresh and all natural Best if kept refrigerated Wash before use Natural source of the antioxidant selenium Excellent addition to beef, wild game and vegetable dishes', 'Unbranded', 'https://i5.walmartimages.com/asr/d2f44286-90b8-46ea-a3b7-ad6366b02c1f.78a3c8dc89f092447c8a9b68eb933704.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d2f44286-90b8-46ea-a3b7-ad6366b02c1f.78a3c8dc89f092447c8a9b68eb933704.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d2f44286-90b8-46ea-a3b7-ad6366b02c1f.78a3c8dc89f092447c8a9b68eb933704.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (302642339, 'Fresh Candy Dream Grapes, 1 Lb', 3.98, '854957001289', 'short description is not available', 'Fresh Candy Dream Grapes, 1 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (302728619, 'Peach Pie Donut Peach', 3.68, '813187010317', 'short description is not available', 'Peach Pie Donut Peach', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ec9062fe-a556-49d2-895f-ee4ea3ba7410.3620454ae412399e02bd262f8cc3b7da.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec9062fe-a556-49d2-895f-ee4ea3ba7410.3620454ae412399e02bd262f8cc3b7da.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec9062fe-a556-49d2-895f-ee4ea3ba7410.3620454ae412399e02bd262f8cc3b7da.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (303239650, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094418291', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (303278953, 'Great Value Potato Salad, American Style, 5.4 oz', 1.48, '078742237978', 'Great Value American Style Potato Salad is made with traditional tangy russel potatoes, red bell peppers, green bell peppers, carrots, shallots, celery and a touch of mustard. This American classic is packed with mouthwatering flavors your whole family will enjoy. It is perfect for dozens of occasions whether it be a summer barbecue or a family picnic at the park. Serve it with juicy meatloaf and a garden fresh salad or simply enjoy on its own. It\'s great for health conscious individuals as it contains no trans-fat and cholesterol and is made with no artificial flavors. Boil, mix and serve in minutes to enjoy delicious American Style Potato Salad. Great Value products provide families with affordable, high quality grocery and household consumable options. With our wide range of product categories spanning grocery and household consumables, we offer you a variety of products for your family\'s needs. Our products are conveniently available online and in Walmart stores nationwide, allowing you to stock up and save money at the same time. Stovetop Instructions: in a large pot, bring 6 cups water to a boil. Add sliced potatoes and vegetable blend; boil for 15-17 minutes. Drain. Use a colander to rinse under cold water until potatoes are cold. Drain for 2-3 minutes until completely free from water. Add drained potatoes to a large mixing bowl; add the seasoning blend and mix until well blended. Refrigerate for 1 hour and mix before serving.', 'Great Value American Style Potato Sala: Traditional tangy russel potatoes and a touch of mustard No artificial flavors Made with real potatoes Net weight 5.4 oz', 'Great Value', 'https://i5.walmartimages.com/asr/966c6d02-9214-4417-a1d2-37ec48636044_4.6fe960675003be6ff9e38d58dfa9a7c7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/966c6d02-9214-4417-a1d2-37ec48636044_4.6fe960675003be6ff9e38d58dfa9a7c7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/966c6d02-9214-4417-a1d2-37ec48636044_4.6fe960675003be6ff9e38d58dfa9a7c7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (303353879, 'Hot House Cucumber', 1.18, 'deleted_826920000179', 'short description is not available', 'Hot House Cucumber', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (304224213, 'Fresh Peruvian Grown Red Grapes', 30, '', 'short description is not available', 'Fresh Peruvian Grown Red Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/045d4529-cf49-4439-bf9e-b75c1932deed_2.13295e53b94b5672b3854e20f37908b9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/045d4529-cf49-4439-bf9e-b75c1932deed_2.13295e53b94b5672b3854e20f37908b9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/045d4529-cf49-4439-bf9e-b75c1932deed_2.13295e53b94b5672b3854e20f37908b9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (304855330, 'Fresh Graprefruit, Each', 2.97, '000000042796', 'Grapefruit is the perfect balance between tart and sweet. The balance between tart and sweet is great for both savory and sweet dishes any time of day. Enjoy half of a grapefruit sprinkled with sugar with some eggs in the morning for a light, sweet breakfast. Slice it up and put in a salad with spinach, avocado, and red onion topped with a mustard and balsamic vinegar dressing for lunch or dinner. Make delicious grapefruit bars that showcase the sweet and tartness of this versatile fruit. For an adult recipe juice the grapefruit and pair with some simple syrup and alcohol for a refreshing cocktail. This fruit is the perfect addition to a healthy diet as it is a great source of vitamin C and vitamin A. With such versatility, Grapefruit will become a pantry staple in your home.', 'Great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a fresh grapefruit sprinkled with sugar in the morning, slice it up and put it in salad for lunch or dinner, or make grapefruit bars Great source of vitamin C and vitamin A', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9b886c2a-7fc2-4dbd-98fe-99c8e48e6944.f2698681c6f777003cfd13d7c6086d09.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b886c2a-7fc2-4dbd-98fe-99c8e48e6944.f2698681c6f777003cfd13d7c6086d09.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b886c2a-7fc2-4dbd-98fe-99c8e48e6944.f2698681c6f777003cfd13d7c6086d09.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (305458076, 'Apricot, 1 lb Pack', 3.98, 'deleted_896460002797', 'Fresh California Grown Apricots are a treat for the entire family. With a wonderfully sweet and smooth flavor, these apricots are a great snack at any time of the day. For breakfast, you could slice them and put them in your oatmeal or use them to make a satisfying yogurt parfait. You can also incorporate them into a variety of recipes. Use them to make a delectable apricot crisp or apricot cobbler and serve warm topped with ice cream. You can even use them to make a nutritious smoothie or a tasty adult beverage. However you choose to enjoy them, these apricots will satisfy everyone\'s sweet tooth. Enjoy the sweet and refreshing taste of Fresh California Grown Apricots.', 'Fresh California Grown Apricots, 16 oz: Wonderfully smooth and sweet flavor Great snack at any time of the day Use to make a delicious yogurt parfait Make a decadent apricot crisp and top with your favorite ice cream Wonderful addition to smoothies', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4b1fd233-b92f-4557-8c16-d9de02eafde2.cb4e49d4db2c636f20058c32dc26a658.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4b1fd233-b92f-4557-8c16-d9de02eafde2.cb4e49d4db2c636f20058c32dc26a658.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4b1fd233-b92f-4557-8c16-d9de02eafde2.cb4e49d4db2c636f20058c32dc26a658.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (306142909, '200pc Pto Rst 5# Wa', 554, '405529426087', 'short description is not available', '200pc Pto Rst 5# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (306169918, 'Microwave in Bag Yellow Potatoes, 12 Oz.', 2.77, '854419002168', 'Microwave in Bag Yellow Potatoes, 12 Oz.', 'Microwave In Bag Yellow Potatoes 12 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (306312437, 'Ivory Bell Bumpy Pumpkins', 2.48, '850781007510', 'short description is not available', 'Ivory Bell Bumpy Pumpkins', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (306357731, 'Freshness Guaranteed Pineapple Rings', 4.58, '681131036924', 'short description is not available', 'Freshness Guaranteed Pineapple Rings', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (306500611, 'Fresh Black Seedless Grapes', 1.88, 'deleted_014668760206', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (307114818, 'Fresh Nectarines, 2 lb Bag', 3.97, '095829210860', 'Fresh nectarines are a juicy and flavorful fruit with a smooth skin that ranges in color from pale yellow to vibrant orange-red. These stone fruits have a sweet and tangy taste, similar to peaches but with a slightly firmer texture. With their refreshing and aromatic qualities, fresh nectarines are perfect for enjoying as a healthy snack, adding a burst of flavor to summer salads, or using in a variety of culinary creations. Whether eaten on their own or incorporated into recipes, fresh nectarines are a delicious and nutritious choice for fruit lovers.', 'In terms of nutrition, fresh nectarines are a great choice. They are low in calories and fat, making them a guilt-free indulgence. Additionally, they are an excellent source of vitamins A and C, which are important for maintaining healthy skin, boosting the immune system, and promoting overall well-being. Nectarines also provide dietary fiber, which aids digestion and helps keep you feeling full and satisfied. Whether you\'re looking for a healthy snack, a burst of flavor in your salad, or a versatile ingredient for your culinary creations, fresh nectarines are a fantastic choice. Their juicy sweetness and vibrant color make them a true summer treat that will leave you craving more. So go ahead, savor the taste of these luscious fruits and experience the joy they bring to your palate.', 'Welch\'s', 'https://i5.walmartimages.com/asr/be4ba06a-2659-4db4-99e2-da039bfd1997.2db0b58f2a22bf66bb9e9eae0f74cb30.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/be4ba06a-2659-4db4-99e2-da039bfd1997.2db0b58f2a22bf66bb9e9eae0f74cb30.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/be4ba06a-2659-4db4-99e2-da039bfd1997.2db0b58f2a22bf66bb9e9eae0f74cb30.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (307142371, 'Ollieroo Olympic Barbell Rack Bar Storage, Weight Bar Holder, Barbell Storage, Horizontal Barbell Wall Mount Bar Plate Storage Rack, Holds 6 Barbells, Holds 6 Bars', 4.34, '643126071983', 'Our fresh produce pineapple is a must-try for anyone who loves sweet, juicy fruits! Grown with organic ingredients, this tropical fruit is bursting with flavor and health benefits. Perfect for snacking, adding to smoothies, or grilling for a delicious twist on dessert. Our pineapples are harvested at peak ripeness and ready to be enjoyed. Don\'t settle for anything less than the best - try our organic pineapple today!', '- Freshly picked from the farm, our pineapple is a delicious addition to any meal or snack - With its naturally sweet flavor, our pineapple is the perfect choice for a healthy and flavorful treat Made with only the best organic ingredients, our pineapple is a fresh produce option you can feel good about Whether eaten on its own or used in a recipe, our pineapple is guaranteed to add a burst of tropical flavor to any dish Find this in your local Stores!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/95803a67-5ca1-4e3b-b86f-529b0d4b3f53.a18ad378a3602c9368be70dce594a803.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95803a67-5ca1-4e3b-b86f-529b0d4b3f53.a18ad378a3602c9368be70dce594a803.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95803a67-5ca1-4e3b-b86f-529b0d4b3f53.a18ad378a3602c9368be70dce594a803.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (307465078, 'Red Bell Pepper, each', 1.38, 'deleted_626074040034', 'short description is not available', 'Red Bell Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/2204b55a-26bb-4379-86b2-cc9c2d77bf80_1.dfc7792ed8d7b08d3d7613aea359f09e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2204b55a-26bb-4379-86b2-cc9c2d77bf80_1.dfc7792ed8d7b08d3d7613aea359f09e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2204b55a-26bb-4379-86b2-cc9c2d77bf80_1.dfc7792ed8d7b08d3d7613aea359f09e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (307582080, 'Marketside Organic Zucchini', 1.34, 'deleted_681131091053', 'short description is not available', 'Marketside Organic Zucchini', 'Marketside', 'https://i5.walmartimages.com/asr/d032c4b8-a1b1-42eb-874d-ed853b58340f_1.ba31804ca36fdc082ccec6ddff0dbe2f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d032c4b8-a1b1-42eb-874d-ed853b58340f_1.ba31804ca36fdc082ccec6ddff0dbe2f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d032c4b8-a1b1-42eb-874d-ed853b58340f_1.ba31804ca36fdc082ccec6ddff0dbe2f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (307766043, 'Watermelon Seedless', 4.48, '400094985007', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (307878856, '170pc Pto Ykn/red 5#', 887.4, '400094044971', 'short description is not available', '170pc Pto Ykn/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (308680092, 'Ogp Red Cherry Samples', 0.01, '405836139342', 'short description is not available', 'Ogp Red Cherry Samples', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (308680116, 'Slicer Tomato', 1.98, '405794256686', 'short description is not available', 'Slicer Tomato', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (309339459, 'York Apples 5 Lb Bag', 4.92, '033383076478', 'short description is not available', 'York Apples 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (309548261, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_400094646182', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (309656313, '90pc On Vid 4# Ga Bf', 309.6, '400094369036', 'short description is not available', '90pc On Vid 4# Ga Bf', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (309762096, 'Fresh Rockit, Crisp Sweet Miniature Apples, 3lb Tub', 9.18, '888289403510', 'Experience the perfect combination of sweetness and crispness with our Fresh Rockit Miniature Apples. Naturally grown to be miniature, these apples are rich in flavor and high in energy. Ideal for snacking, baking, and adding a burst of taste to salads or charcuterie boards. Enjoy the benefits of consuming fewer calories with just two apples totaling 70 calories. Packaged sustainably in 80% rPET containers that can be recycled, it\'s a great choice for conscious consumers who value freshness and environmental responsibility. Available while stocks last.', 'Sweet, crisp and juicy with every bite Conveniently sized for on-the-go snacking Perfect as a healthy treat or seasonal baking ingredient Excellent source of fiber and vitamin C Two apples = 70 calories 80% rPET packaging that can be upcycled or recycled Adds flavor to a variety of recipes Fresh and ready-to-eat food condition Includes Rockit plant variety for a unique taste', 'Rock It', 'https://i5.walmartimages.com/asr/de6d6d44-507a-43e4-9bd9-d86286473870.4d6dbcb5c200885859982510d4314077.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/de6d6d44-507a-43e4-9bd9-d86286473870.4d6dbcb5c200885859982510d4314077.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/de6d6d44-507a-43e4-9bd9-d86286473870.4d6dbcb5c200885859982510d4314077.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (310071420, 'Sunset One Sweet Tomatoes, 16 oz Flavor Bowl Package, Fresh', 3.5, '057836022577', 'SUNSET One Sweet Tomatoes are 16 ounces of premium cherry snacking tomatoes! Garden inspired flavor perfect for snacking, lunch, or dinner. Try them in salads, pastas, omelets, flatbreads, and more. Mellow juiciness, and the ideal crunch, these tomatoes are perfectly balanced with just the right amount of acidity. Hothouse grown to ensure consistent quality and freshness. Certified non-GMO tomatoes grown without pesticides or herbicides. Store at room temperature for optimal flavor, and wash before enjoying. Plastic football shaped bowl is fun for parties. Enjoy SUNSET One Sweet Tomatoes Flavor Bowl for every game.', 'SUNSET fresh One Sweet cherry snacking tomatoes Mellow juiciness, and the ideal crunch Perfectly balanced with just the right amount of acidity Garden inspired flavor, perfect for snacking, lunch, or dinner Try them in salads, pastas, dips, flatbreads, and more Wash and enjoy Available all-year-long Non-GMO certified Hothouse grown to ensure consistent quality and freshness No pesticides or herbicides 16 oz. plastic footballed shaped bowl is run for parties Store at room temperature for optimal flavor', 'SUNSET', 'https://i5.walmartimages.com/asr/314139fe-54ff-4a08-9f54-0fc154897ac2.89b8253dde0e95a6bc6f2b4ccef83306.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/314139fe-54ff-4a08-9f54-0fc154897ac2.89b8253dde0e95a6bc6f2b4ccef83306.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/314139fe-54ff-4a08-9f54-0fc154897ac2.89b8253dde0e95a6bc6f2b4ccef83306.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (310567004, 'Revol Greens Organic Romaine Cunch Salad, 4.0 oz Clam Shell, Fresh', 2.98, '850024486034', 'Revol Greens® Organic Romaine Crunch is a blend of crisp romaine and green leaf lettuce. All Revol Greens® lettuce is grown inside a greenhouse and harvested daily, 365 days a year. Our regional greenhouse locations allow us to reach nearly all our customers within 24-48 hours of harvest, so that our greens arrive incredibly fresh and at peak nutritional value.', 'USDA Organic Certified Grown in a protected greenhouse environment Sustainably grown with 90% less water than field grown lettuce', 'Revol Greens', 'https://i5.walmartimages.com/asr/e10ae26f-429e-442d-b866-7bbe37395175.b32ed21a59ee4ecf88902690e51ce8a4.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e10ae26f-429e-442d-b866-7bbe37395175.b32ed21a59ee4ecf88902690e51ce8a4.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e10ae26f-429e-442d-b866-7bbe37395175.b32ed21a59ee4ecf88902690e51ce8a4.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (310655948, 'Organic Green Leaf, 1 Each', 1.96, '000651967011', 'Organic Green Leaf', 'Organic Green Leaf', 'Ocean Mist Farms', 'https://i5.walmartimages.com/asr/cc406b35-c39d-4e2c-859c-806386eb4c49_1.559f673d818e2673ca38b2825651e114.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc406b35-c39d-4e2c-859c-806386eb4c49_1.559f673d818e2673ca38b2825651e114.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc406b35-c39d-4e2c-859c-806386eb4c49_1.559f673d818e2673ca38b2825651e114.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (310765960, 'Fresh Grape Tomato, 9 oz Cup', 3.1, '626074674512', 'Bring the fresh, delicious taste of Grape Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this convenient cup of Grape Tomatoes.', 'Grape Tomato, 9 oz Cup: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient cup Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/dea2ab29-f27f-4316-b259-b0d076509043.c2aa675524913f14104f23b65651d6ab.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dea2ab29-f27f-4316-b259-b0d076509043.c2aa675524913f14104f23b65651d6ab.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dea2ab29-f27f-4316-b259-b0d076509043.c2aa675524913f14104f23b65651d6ab.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (310803459, 'Red Potatoes 5 Lb Bag', 5.77, 'deleted_826088510107', 'short description is not available', 'Red Potatoes 5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (310952772, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094275511', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (311089372, 'Gala Apples 3 Lb Bag', 3.37, 'deleted_087434007416', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (312079145, 'Fresh Grape Tomato, 10 oz Package', 2.78, '811857021625', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (312360048, 'Bowery Farming Bowery Salad Spring Mix 4oz', 2.98, '851536007519', 'short description is not available', 'Bowery Farming Bowery Salad Spring Mix 4oz', 'Bowery Farming', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (312399109, '90pc Pto Rst 10# Rpe', 537.3, '405531363417', 'short description is not available', '90pc Pto Rst 10# Rpe', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (312402314, 'Fresh Green Beans', 1.68, '073064200846', 'short description is not available', 'Fresh Green Beans', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/8fff6584-fd94-448c-b7c9-ac53d7d60a54_3.5a5c9ad547e83fcfacd478358f73518a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8fff6584-fd94-448c-b7c9-ac53d7d60a54_3.5a5c9ad547e83fcfacd478358f73518a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8fff6584-fd94-448c-b7c9-ac53d7d60a54_3.5a5c9ad547e83fcfacd478358f73518a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (313382466, 'Mutsu Apples 3 Lb Bag', 4.47, '033383068527', 'short description is not available', 'Mutsu Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (313490509, 'Fresh Peruvian Grown Black Grapes', 4.46, '', 'short description is not available', 'Fresh Peruvian Grown Black Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (314344585, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094422700', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (315271701, 'Russet Potatoes 5 Lb Bag', 3.84, 'deleted_826088530105', 'short description is not available', 'Russet Potatoes 5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (315288799, 'Freshness Guaranteed Fresh Black Seedless Grapes', 2.98, 'deleted_841139100137', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (315379233, 'BELLAFINA Mini Bell Pepper, 1lb', 4.97, '750455000413', 'Enhance your meals with the delicious flavor of Fresh Color Bell Peppers. Dice these colorful bell peppers and put them in a hearty chili, slice them and add to a deli sandwich, saute them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly sliced steak and serve with rice. A hollowed-out bell pepper can be filled with sausage, mushrooms, and rice to create a delicious stuffed pepper that will have the family asking for seconds. With so many ways to prepare them, Fresh Color Bell Peppers are an excellent fresh produce vegetable to have on hand.', 'Dice them and put them in chili Add to a deli sandwich Slice and serve with your favorite dip Loaded with vitamin C High in vitamin A Wash before eating', 'Bailey Farms', 'https://i5.walmartimages.com/asr/06d77c4c-2eae-4375-87c5-2f262e050366.fa84056ae53fb5bf1fb5d1cb63625fe0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/06d77c4c-2eae-4375-87c5-2f262e050366.fa84056ae53fb5bf1fb5d1cb63625fe0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/06d77c4c-2eae-4375-87c5-2f262e050366.fa84056ae53fb5bf1fb5d1cb63625fe0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (315626899, 'Cucumber Salad/pickling Bagged', 3.68, '859660051682', 'short description is not available', 'Cucumber Salad/pickling Bagged', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (316072301, '90pc Pto Rst 10# Wd', 399.6, '405531027883', 'short description is not available', '90pc Pto Rst 10# Wd', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (316094207, 'Walmart Produce Cantaloupe Berry Medley 10 Oz', 2.98, '826766254255', 'short description is not available', 'Walmart Produce Cantaloupe Berry Medley 10 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (316613830, 'Saturn Peach, 2 lb Carton', 3.98, '847081000242', 'short description is not available', 'Saturn Peach, 2 lb Carton', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ec9062fe-a556-49d2-895f-ee4ea3ba7410.3620454ae412399e02bd262f8cc3b7da.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec9062fe-a556-49d2-895f-ee4ea3ba7410.3620454ae412399e02bd262f8cc3b7da.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec9062fe-a556-49d2-895f-ee4ea3ba7410.3620454ae412399e02bd262f8cc3b7da.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (316834212, 'Fieldpack Unbranded Fresh Strawberries 2#', 4.74, 'deleted_885443200305', 'BEACH SIDE PRDC SNGL FRT STRWB MLDD TRY', 'BEACH SIDE PRDC SNGL FRT STRWB MLDD TRY FRESH FRUIT', 'Fresh Produce', 'https://i5.walmartimages.com/asr/19e5eec4-4ff0-4dc6-97d0-ae0d16d8f2b1.a0b683f83258e19335d29f622b44b8c3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19e5eec4-4ff0-4dc6-97d0-ae0d16d8f2b1.a0b683f83258e19335d29f622b44b8c3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19e5eec4-4ff0-4dc6-97d0-ae0d16d8f2b1.a0b683f83258e19335d29f622b44b8c3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (317205480, '120pc Grapefruit 5#', 717.6, '405785573266', 'short description is not available', '120pc Grapefruit 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (317348334, 'Acorn Squash', 1.18, '667859047503', 'Acorn Squash', 'Acorn Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/daf77412-3612-43bc-bfaf-5ef228abae6d.834dcfdb96f9856e465e5718fe558dd3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/daf77412-3612-43bc-bfaf-5ef228abae6d.834dcfdb96f9856e465e5718fe558dd3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/daf77412-3612-43bc-bfaf-5ef228abae6d.834dcfdb96f9856e465e5718fe558dd3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (317386581, 'Fresh Cherubs Grape Tomatoes, 24 oz Package', 5.38, '751666776050', 'Bring the fresh, delicious taste of NatureSweet Cherubs Grape Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Cherubs Grape Tomatoes. Fair Trade Certified tomatoes are the best way to have a positive impact on the lives of farmers, workers, and their communities. Through fair wages, enhanced health and safety on the job, and Community Development Funds that workers invest to solve their most pressing needs, every fair trade purchase you make has an impact. And you get to enjoy great quality tomatoes while making a difference!', 'Great for Snacking Great for Salads Fair Trade Certified We build them good homes, we protect and nurture them, and the struggle is worth it when the outcome is so fresh and sweet Our associates give our tomatoes the best chance for success Tomatoes raised right', 'NatureSweet', 'https://i5.walmartimages.com/asr/d14b0ded-6657-45bd-b5dd-25f25b815d02.b514981226b2bf924f4f2fe8629d6002.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d14b0ded-6657-45bd-b5dd-25f25b815d02.b514981226b2bf924f4f2fe8629d6002.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d14b0ded-6657-45bd-b5dd-25f25b815d02.b514981226b2bf924f4f2fe8629d6002.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (317953932, 'Services Reduced Program Dept 94', 0.01, '251680000006', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (318134528, 'Yellow Flesh Peaches, per Pound', 1.58, '400094345726', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (318460628, 'Fresh Sweet Twister Peppers, 12 Ounce Bag', 3.98, '057836000179', 'Enjoy the satisfying crunch and flavor of Sweet Twister Peppers. Slice them up and roast for a sweeter, smoky flavor that goes well with your choice of protein. For an appetizer, cut the peppers in half and stuff with a mixture of ground sausage and cream cheese topped with a sprinkle of shredded cheese. You can also eat them on their own for a satisfying crunch or dipped in some ranch for a hint of savory flavors. They\'re an excellent source for vitamin C, low in calories, have no fat or cholesterol, making them perfect as part of a healthy diet. Simply wash the the fresh produce before use and keep refrigerated. Savor the sweet taste of this 12-ounce bag of Sweet Twister Peppers.', 'Fresh Sweet Twister Peppers, 12 Ounce Bag Sweet, crunchy mini bell pepper Roast, bake, or enjoy alone Great for stuffing, sauteing, or dipping in dressing Excellent source for vitamin C, low in calories, have no fat or cholesterol USDA certified organic fresh produce', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e0a44938-aee5-48ea-94d8-6ebec8f467bb_2.cb7ef34fd51165845f91c979202ff17d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e0a44938-aee5-48ea-94d8-6ebec8f467bb_2.cb7ef34fd51165845f91c979202ff17d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e0a44938-aee5-48ea-94d8-6ebec8f467bb_2.cb7ef34fd51165845f91c979202ff17d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (318627578, 'Freshness Guaranteed Fresh Black Seedless Grapes', 2.28, '', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (318662748, 'Ruby Frost Apple, Each', 2.67, '000000034432', 'short description is not available', 'Produce Unbranded Ruby Frost Apple Each', 'Unbranded', 'https://i5.walmartimages.com/asr/76236378-0a6b-4079-9814-d54bbc1acc2c.a90342d4fd27fbb80bd09d14da092858.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/76236378-0a6b-4079-9814-d54bbc1acc2c.a90342d4fd27fbb80bd09d14da092858.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/76236378-0a6b-4079-9814-d54bbc1acc2c.a90342d4fd27fbb80bd09d14da092858.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (319424649, 'Watermelon Seedless', 4.98, '400094407448', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (319609531, 'Fresh Green Seedless Grapes', 1.98, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (319961814, 'Fresh Cut Bell Peppers & Onions', 2.98, '262512000002', 'short description is not available', 'Fresh Cut Bell Peppers & Onions', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (320006487, 'Halo 2ct Sample', 0.01, '072240434785', 'short description is not available', 'Halo 2ct Sample', 'WONDERFUL', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (320507482, 'Green Giant Red Creamer Potato, 1.5 Lb.', 3.77, 'deleted_605806003691', 'Green Giant Red Creamer Potato, 1.5 Lb.', 'Red Green Giant Creamer Potato 1.5 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (321054346, 'Freshness Guaranteed Fresh Green Seedless Grapes', 1.78, 'deleted_681131377270', 'short description is not available', 'Freshness Guaranteed Fresh Green Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (321240297, 'Jimmy\'s Sea Salt Caramel Dip 16 Oz', 3.98, '086824228202', 'short description is not available', 'Jimmy\'s Sea Salt Caramel Dip 16 Oz', 'Jimmy\'s', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (321375149, 'Purple Eggplant', 1.42, '819800010177', 'Eggplant', 'Purple Eggplant', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/f7399661-3d47-4ba7-9792-249286158ea9.78955c98fbb1a2424cdf601e5bd2431a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7399661-3d47-4ba7-9792-249286158ea9.78955c98fbb1a2424cdf601e5bd2431a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7399661-3d47-4ba7-9792-249286158ea9.78955c98fbb1a2424cdf601e5bd2431a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (321667740, 'Pink Cripps Apples 3 Lb Bag', 3.42, '847473005817', 'short description is not available', 'Pink Cripps Apples 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (322557892, 'Gala Apples 3 Lb Bag', 3.37, 'deleted_879329007386', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (322626189, 'Services Reduced Program Dept 94', 0.01, '251741000006', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (322648027, '300pc Bumpy Pumpkins', 954, '405973284301', 'short description is not available', '300pc Bumpy Pumpkins', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (323104668, '1# Kale Greens', 2.94, 'deleted_060556140124', 'Fresh chopped and thoroughly washed kale 1lb bag', '1# Kale Greens', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a383830b-138b-4bb8-afd5-b3e34264dd75.e8b511b2979eaaa9c49fba11861dbfd6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a383830b-138b-4bb8-afd5-b3e34264dd75.e8b511b2979eaaa9c49fba11861dbfd6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a383830b-138b-4bb8-afd5-b3e34264dd75.e8b511b2979eaaa9c49fba11861dbfd6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (323410338, 'Fieldpack Marketside Organic Cauliflower', 2.96, 'deleted_405978093311', 'short description is not available', 'Fieldpack Marketside Organic Cauliflower', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (323513652, 'Gold Delicious Apples, 3lb Bag', 2.97, 'deleted_080153340208', 'short description is not available', 'Gold Delicious Apples, 3lb Bag', '', 'https://i5.walmartimages.com/asr/18a3ca48-62f6-42c5-9637-b04394ded669_1.5a234bb1d7bd5799a31dfe59ee4e8532.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18a3ca48-62f6-42c5-9637-b04394ded669_1.5a234bb1d7bd5799a31dfe59ee4e8532.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18a3ca48-62f6-42c5-9637-b04394ded669_1.5a234bb1d7bd5799a31dfe59ee4e8532.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (324079516, 'Freshness Guaranteed Berry Trio', 4.28, '263031000009', 'short description is not available', 'Freshness Guaranteed Berry Trio', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (324927090, '240pc On Ylw 3# Sp', 465.6, '400094915783', 'short description is not available', '240pc On Ylw 3# Sp', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (325522837, 'California Grown Peaches, per Pound', 1.58, '400094859155', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (326095954, '200pc Pto Rst 5# Co', 654, '405519742661', 'short description is not available', '200pc Pto Rst 5# Co', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (326470327, 'Red Delicious Apples 5 Lb Bag', 4.98, 'deleted_859125002556', 'short description is not available', 'Red Delicious Apples 5 Lb Bag', 'Mountainland', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (326994732, 'Little Potato Company Dynamic Duo Medley Baby Potatoes, 1.5 lb Bag', 3.48, 'deleted_629307122545', 'Epitomizing balance on a plate, Dynamic Duo offers the perfect sized helping of both red and yellow Creamer varietals. Each bag packs a charming color combination to double the fun and delight at mealtime. The potatoes play beautifully together, delivering silky smooth textures and subtle, harmonious flavors. Dynamic Duo is highly receptive to different seasonings, cuisines and cooking methods, and can be easily adapted to any potato recipe. With excellent color retention, these Creamers are a wonderful culinary pair and hold great presentation.', 'Dynamic Duo Fresh Creamer Potatoes, 1.5 lbs bag', 'The Little Potato Company', 'https://i5.walmartimages.com/asr/133a02d7-7806-41b6-b929-729d8d491757.353b204493f82fafc78eaf3795ce1617.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/133a02d7-7806-41b6-b929-729d8d491757.353b204493f82fafc78eaf3795ce1617.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/133a02d7-7806-41b6-b929-729d8d491757.353b204493f82fafc78eaf3795ce1617.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (327119133, 'Marketside Organic Granny Smith Apples 2 Lb Bag', 5.97, 'deleted_883391003825', 'short description is not available', 'Marketside Organic Granny Smith Apples 2 Lb Bag', 'Marketside', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (327591319, 'Dried Ancho Chile 8 oz', 4.58, '712810008052', 'Packaged Ancho Chili Dried 8oz', 'Dried Ancho Chile 8 Oz', 'Miravalle', 'https://i5.walmartimages.com/asr/e007a34b-422c-4f6f-8b2f-714fc54060ad_1.f9df5dba2a2916de4917960c75f496d5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e007a34b-422c-4f6f-8b2f-714fc54060ad_1.f9df5dba2a2916de4917960c75f496d5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e007a34b-422c-4f6f-8b2f-714fc54060ad_1.f9df5dba2a2916de4917960c75f496d5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (328023329, 'Fieldpack Unbranded Mini Cucumbers 16 Oz', 1.97, '021130984367', 'short description is not available', 'Fieldpack Unbranded Mini Cucumbers 16 Oz', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (328684044, 'Fresh Medley Tomato, 10 oz Package', 3.98, '885773044037', 'Bring the fresh, delicious taste of Medley Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Medley Tomatoes.', 'Medley Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (328705329, 'MO QUA SQUASH', 1.94, 'deleted_045255264128', 'short description is not available', 'Mo Qua Squash', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (329474972, 'Fresh California Grown Red Grapes', 1.36, '014668760145', 'short description is not available', 'Fresh California Grown Red Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (330549107, 'Gala Apples Bulk', 1.67, '', 'short description is not available', 'Gala Apples Bulk', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (331591487, 'Yellow Flesh Peaches, per Pound', 1.58, '400094357538', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (331907043, 'Lemon Juice Squeeze 4.5oz Each', 0.98, '787359252013', 'short description is not available', 'Lemon Juice Squeeze 4.5oz Each', 'Fresh Gourmet', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (332067591, 'Bowery Farming Bowery Salad Kale Mix 4oz', 2.98, '851536007557', 'short description is not available', 'Bowery Farming Bowery Salad Kale Mix 4oz', 'Bowery Farming', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (332379433, '180pc Apl Granny 3#', 822.6, '405667988898', 'short description is not available', '180pc Apl Granny 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (332486501, 'Organic Sweet Potatoes Whole Fresh, 3 lb Bag', 5.28, 'deleted_617620000091', 'Create something wholesome and delicious with these Organic Sweet Potatoes. Sometimes referred to as yams, these versatile fresh produce vegetables can be used multiple ways: to make savory sides or sweet treats. Try them roasted or baked for a tasty addition to any dish. You could also use them to make seasoned sweet potato fries or a flavorful hummus dip for your next party. If you want to satisfy your sweet tooth, try them in a traditional sweet potato casserole or use them to make sweet potato and brown sugar ice cream. The mouthwatering possibilities are endless with this hearty vegetable. Add something amazing to your meals with this three-pound bag of Organic Sweet Potatoes.', 'Wholesome, versatile, and delicious Ideal ingredient for a variety of dishes Make seasoned sweet potato fries or a flavorful hummus dip Use them for a sweet potato casserole or sweet potato and brown sugar ice cream USDA organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cc735c8e-c879-4d23-9106-fc368083ca5b.2782af171e4e55af086ddb970f2fbe0d.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc735c8e-c879-4d23-9106-fc368083ca5b.2782af171e4e55af086ddb970f2fbe0d.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc735c8e-c879-4d23-9106-fc368083ca5b.2782af171e4e55af086ddb970f2fbe0d.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (332530153, 'Watermelon Seedless', 4.98, '400094400371', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (332962405, 'Freshness Guaranteed Mango 16 Oz', 6.97, 'deleted_681131036542', 'short description is not available', 'Freshness Guaranteed Mango 16 Oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (333211449, 'Whole Cello Carrots 1 Lb Bag', 0.82, 'deleted_864098000003', 'short description is not available', 'Whole Cello Carrots 1 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (333706752, 'Yellow Flesh Peaches, per Pound', 1.58, '400094791806', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (334060795, 'Fresh Grown Black Grapes 1lb', 2.98, '', 'short description is not available', 'Fresh Grown Black Grapes 1lb', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (335478602, 'Spring Mix Salad, 4 Oz.', 2.98, '405642700408', 'Spring Mix Salad, 4 Oz.', 'Sald Spring Mix 4 Oz.', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (335616654, 'Chocomaker Natural Display', 3.98, '879826015952', 'short description is not available', 'Chocomaker Natural Display', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5ebaa98d-2ab6-4649-a190-d5d8b834cada.9fcc775b3248055d2df68ecc31b8de85.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5ebaa98d-2ab6-4649-a190-d5d8b834cada.9fcc775b3248055d2df68ecc31b8de85.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5ebaa98d-2ab6-4649-a190-d5d8b834cada.9fcc775b3248055d2df68ecc31b8de85.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (335843834, 'Freshness Guaranteed Red Grapes Small, 0.5-1 lbs', 3.31, '262816000005', 'Freshness Guaranteed Red Grapes in a small plastic container ready to be opened and shared.', 'Freshness Guaranteed Red Grapes Small', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (336420149, 'Fresh Organic Gala Apples, 2 lb Bag', 4.36, '847473003790', 'Treat yourself to the delicious, crisp taste of Organic Gala Apples. Enjoy one with breakfast or lunch or as a fresh snack any time of day. Best of all, these delicious apples hold up well when cooked and can be used in both savory and sweet dishes. They can be used for baking, snacking, salads, pairing, or made into a delicious sauce that pairs perfectly with pork. Try incorporating them into soups and compotes or using to make yummy jam or juice. Use them to create apple crisp, pie, and strudel for a sweet treat. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Organic Gala Apples.', 'Organic Gala Apples, 2 lb Bag: Includes 2 pounds of crisp apples USDA organic Pair them with sharp cheeses and crackers for a stunning appetizer board Can be enjoyed fresh or cooked into both savory and sweet dishes Meets or exceeds U.S. Extra Fancy Minimum diameter: 2.25\"', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bea96770-c117-4fe8-9d65-070240d40b8c.806bfdc237bdaab49588c964a266e615.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bea96770-c117-4fe8-9d65-070240d40b8c.806bfdc237bdaab49588c964a266e615.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bea96770-c117-4fe8-9d65-070240d40b8c.806bfdc237bdaab49588c964a266e615.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (336773042, 'Fresh Organic Envy Apples, Each', 2.96, '000000936163', 'Envy is the ultimate apple experience with its extraordinary texture and crunch, balanced sweetness and beautiful golden red colors, Envy apples can be enjoyed anywhere, anytime! Best served fresh or paired with cheese boards, sandwiches, mocktails and more. Envy is an invitation to enjoy a small moment to savor and raise your expectations of what an apple can be. Bite & believe!', 'Beautifully balanced sweetness Uplifting fresh aroma Delightfully satisfying crunch Slices naturally stay white longer', 'Fresh Produce', 'https://i5.walmartimages.com/asr/49997c35-c16a-410e-85ee-ffedd7385f29.67d777ec4e44b5ecbba8d3aada282ee5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/49997c35-c16a-410e-85ee-ffedd7385f29.67d777ec4e44b5ecbba8d3aada282ee5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/49997c35-c16a-410e-85ee-ffedd7385f29.67d777ec4e44b5ecbba8d3aada282ee5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (337004274, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.68, '400094011126', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (337101534, 'Produce Unbranded Avocado 5 Ct Bag', 2.98, '761010098769', 'short description is not available', 'Produce Unbranded Avocado 5 Ct Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (337735413, 'Fresh Cherry Tomato, 10 oz Package', 3.28, '751666104754', 'Bring the fresh, delicious taste of Cherry Tomatoes into your home. Because of their notable flavor and thicker skin, they are a versatile tomato that\'s great for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, cherry tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with these fresh Cherry Tomatoes.', 'Cherry Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3789d7c1-d802-413a-8d4b-edfd908fc357.8cdcf5028266c80a66dae0dd627b6868.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3789d7c1-d802-413a-8d4b-edfd908fc357.8cdcf5028266c80a66dae0dd627b6868.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3789d7c1-d802-413a-8d4b-edfd908fc357.8cdcf5028266c80a66dae0dd627b6868.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (337792129, 'Expert Gardener 4Pk Cherry Tomato', 3.48, '008462306098', 'Expert Gardener cherry tomatoes are a perfect addition to any garden! Plant Tomatoes in your spring garden and enjoy them during the growing season. Plant themin full sun.', 'Bell PepperÃÃÃÃÂ', 'Expert Gardener', 'https://i5.walmartimages.com/asr/e751a678-642b-4dad-a6ed-486dd139a4f0.f22ea29443dc5fcecee534f7eaeaa60c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e751a678-642b-4dad-a6ed-486dd139a4f0.f22ea29443dc5fcecee534f7eaeaa60c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e751a678-642b-4dad-a6ed-486dd139a4f0.f22ea29443dc5fcecee534f7eaeaa60c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (338588000, 'Fresh Organic Clementines, 2 lb Bag', 3.98, '014668410019', 'Enjoy the juicy goodness of citrus when you eat a Fresh Organic Clementine. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, clementines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, clementines are now available year-round in most markets. Clementines are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the mandarins hang out in a bowl on your counter or table to breathe. Compact and portable, clementines are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious Fresh Organic Clementines on hand for an easy, healthy treat.', 'Delicious, sweet, juicy fresh citrus Pleasing sweet-tart flavor Easy to peel and segment Excellent source of vitamin C, potassium, and folic acid For maximum flavor, do not refrigerate Typically seedless USDA organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/19ae05d6-ea3b-4ac0-ae57-7166e37dca18_3.b04fb12f9b7fd7a78a5bb358420c6ad2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19ae05d6-ea3b-4ac0-ae57-7166e37dca18_3.b04fb12f9b7fd7a78a5bb358420c6ad2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19ae05d6-ea3b-4ac0-ae57-7166e37dca18_3.b04fb12f9b7fd7a78a5bb358420c6ad2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (339066125, 'Watermelon Seedless', 4.48, '405504835996', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (339109644, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094624159', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (339378466, '200pc Pto Ykn/red 5#', 1044, '405536422188', 'short description is not available', '200pc Pto Ykn/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (339810351, 'Medley Tomato, 10 oz Package', 4.48, 'deleted_057836020788', 'Bring the fresh, delicious taste of fresh Medley Tomatoes to your kitchen. These tomatoes are greenhouse grown and non-GMO giving them sweet, juicy flavor in every bite. These multi-colored tomatoes come in hues of orange, red, and yellow, which adds a nice bit of vibrant color to your meals. Use them to top salads at lunch or dinner, mix them into pasta salads, or add them to omelets for a fresh bite. They are bite sized, which makes them easy to enjoy as a snack, if desired. With a delicious, juicy flavor, be sure to make Medley Tomatoes part of your purchase today!', 'Medley Tomato, 10 oz Package: Sweet, juicy flavor in every bite Greenhouse grown and non-GMO Use them to top salads at lunch or dinner, mix them into pasta salads, or add them to omelets Perfect size to enjoy as a snack Adds vibrant colors to your meals Comes in hues of orange, red, and yellow', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (339900074, 'Fresh Slicing Tomato, 2 Pack', 2.48, '005783662001', 'Bring the fresh, delicious taste of Slicing Tomatoes into your home. These tomatoes deliver sweet and juicy flavor with each bite and are an ideal ingredient in a variety of recipes. They would make a tasty, garden-inspired addition to salads, burgers, gourmet sandwiches, and so much more. They are picked at peak freshness and specially bred for deep red color, intense flavor, and higher lycopene content than standard tomatoes. Whether you slice or dice them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with these fresh Slicing Tomatoes.', 'Slicing Tomato, 2 Pack: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, burgers, gourmet sandwiches, and more Add to party trays or school lunches Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e648291f-0ccf-4ef5-a8f8-7fbe8d8686bb.192e42a5f946db220a42352ce18ef6f8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e648291f-0ccf-4ef5-a8f8-7fbe8d8686bb.192e42a5f946db220a42352ce18ef6f8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e648291f-0ccf-4ef5-a8f8-7fbe8d8686bb.192e42a5f946db220a42352ce18ef6f8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (340219237, 'Expert Gardens 4 PK Cherry Tomato Red (4 pack) Grower pot', 3.48, '743425203556', 'short description is not available', 'EG 4PK CHERRY TOMATO', 'Expert Gardener', 'https://i5.walmartimages.com/asr/9b086723-80a0-4041-bc36-a62c1472cfee.01414c90a49f30451c300371d9479452.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b086723-80a0-4041-bc36-a62c1472cfee.01414c90a49f30451c300371d9479452.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b086723-80a0-4041-bc36-a62c1472cfee.01414c90a49f30451c300371d9479452.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (340253747, 'Consalo Family Farms Fresh Blueberries, 6 Oz', 2.98, 'deleted_813618020502', 'Fresh Blueberries. Enjoy them for breakfast, lunch, dinner, or dessert. Use them make a lemon, blueberry galette, bake them into delicious blueberry muffins, or a sweet and savory pizza topped with blueberries and bacon, or reduce them for a sauce to use on grilled chicken or cheesecake. They contain essential vitamins and nutrients like, vitamin C, vitamin K, antioxidants, and manganese making them perfect for a healthy diet. Prior to serving simply gently wash them with cool water and enjoy the fresh taste. Refrigerate the berries to keep them fresh and ready for use. Pick up Fresh Blueberries today and savor the delectable flavor.', 'Best when enjoyed at room temperature Light, refreshing taste Healthy sweet treat Prior to serving gently wash them with cool water Refrigerate your berries in the original container to maintain freshness, they should approximately last 3-5 days after purchase Keep dry for optimal freshness', 'Consalo Family Farms', 'https://i5.walmartimages.com/asr/2ab1b06d-47d5-4ff0-9658-eaf18c978f30_1.8099d7b50c1d9e0d4faaf910ed9b22db.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ab1b06d-47d5-4ff0-9658-eaf18c978f30_1.8099d7b50c1d9e0d4faaf910ed9b22db.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ab1b06d-47d5-4ff0-9658-eaf18c978f30_1.8099d7b50c1d9e0d4faaf910ed9b22db.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (340870665, 'Fresh Red Banana, Each', 1.58, '000000042369', 'Our fresh bananas are made with organic ingredients and are the perfect healthy snack! These sweet and delicious fruits are filled with essential vitamins and minerals that provide energy and help maintain a balanced diet. Enjoy them as a quick on-the-go snack or add them to smoothies and desserts for a delicious treat. Trust us, you won\'t be disappointed!', 'Selected and stored full fresh, Sourced with high quality standards. Recommended to wash before consuming. Delicious on their own as a healthy snack or as part of a recipe. Fresh and whole banana. Made with Organic Ingredients, Sweet Flavor. Also known as Red Dacca banana, Cuban Red Banana, Jamaican Red banana around the world.', 'Del Monte', 'https://i5.walmartimages.com/asr/055c13d0-d50a-4ead-8ddb-d0cea1daac99_3.2be929e955e855643720e31f437cb819.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/055c13d0-d50a-4ead-8ddb-d0cea1daac99_3.2be929e955e855643720e31f437cb819.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/055c13d0-d50a-4ead-8ddb-d0cea1daac99_3.2be929e955e855643720e31f437cb819.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (341377451, '200pc Pto Red 5# Mf', 794, '405536848728', 'short description is not available', '200pc Pto Red 5# Mf', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (341387079, 'Fresh Cocktail Medley Tomato, 1 lb Package', 3.98, '816239013489', 'Bring the fresh, delicious taste of Cocktail Medley Tomatoes on the Vine to your kitchen. These vibrant tomatoes are greenhouse grown and non-GMO giving them sweet, juicy flavor in every bite. They come in a variety of multi-colored hues, including orange, red and yellow, which adds a nice bit of vibrant color to your meals. Use them to top salads at lunch or dinner, mix them into a roasted tomato risotto, or add them to your morning omelet for a fresh, garden-inspired taste. They are small and bite sized, which makes them easy to enjoy as a healthy snack, if desired. Get creative in the kitchen with Cocktail Medley Tomatoes on the Vine.', 'Cocktail Medley Tomatoes on the Vine: Sweet, juicy flavor with each bite Greenhouse grown Ideal for salads, pasta salads, flatbreads, omelets, and many other delicious recipes Multicolored: orange, red and yellow Bite sized; perfect for snacking Non-GMO Project Verified Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/48b45c07-a61c-41af-9ab2-5807a35a9a86.96ea107793cb1f6081f4103786cecb29.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48b45c07-a61c-41af-9ab2-5807a35a9a86.96ea107793cb1f6081f4103786cecb29.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48b45c07-a61c-41af-9ab2-5807a35a9a86.96ea107793cb1f6081f4103786cecb29.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (341759435, 'Baker Farms Organic Collard Greens, 10oz, Bagged, Fresh', 3.97, '813098020382', 'Baker Farms Organic Collard Greens, 10 oz: Tripled Washed Chopped Fresh Bagged', 'Baker Farms Organic Collard Greens, 10 oz: Tripled Washed Chopped Fresh', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f620ec83-e20c-414b-89bb-8bf197d966da.fa452889e78319f3f9b35f6a0f5088af.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f620ec83-e20c-414b-89bb-8bf197d966da.fa452889e78319f3f9b35f6a0f5088af.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f620ec83-e20c-414b-89bb-8bf197d966da.fa452889e78319f3f9b35f6a0f5088af.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (341982081, 'Tasteful Selections Fingerling Sunset Potato Bag 24 oz', 4.68, '826088740139', 'A medley of our delicious fingerling potatoes, ranging from buttery to nutty. Something for everyone, Sunset Fingerlings™ bring a medley of our delicious fingerling potatoes to your table. Serve your guests a bouquet of flavors and textures, ranging from buttery to nutty. Sunset Fingerlings are available in a variety of packaging types and sizes. Copy Right Tasteful Selection', 'Tasteful Selections Fingerling Sunset Gusset Bag', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/e32b47ad-111e-45c2-8e9c-1e8bc23186ca.ce2c0f494d4ddc8f10e69d7057da4501.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e32b47ad-111e-45c2-8e9c-1e8bc23186ca.ce2c0f494d4ddc8f10e69d7057da4501.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e32b47ad-111e-45c2-8e9c-1e8bc23186ca.ce2c0f494d4ddc8f10e69d7057da4501.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (342422471, 'Freshness Guaranteed Whole Portabella Caps 6oz', 2.58, 'deleted_084348676028', 'short description is not available', 'Freshness Guaranteed Whole Portabella Caps 6oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (342695748, 'Yellow Onions, 3 Lb.', 1.94, '400094182628', 'Yellow Onions, 3 Lb.', 'Yellow Onions 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (342932021, 'Crunch Pak Peeled Apple Slices, 2oz Count', 3.98, '732313001312', 'Convenient format of 6 individual 2oz packs (6ct / 2oz). Designed as a grab-and-go snack pack with pre-sliced fresh apples for convenience and immediate consumption. Ideal for school snacks, office, or keeping in the refrigerator ready to eat. Ingredients: Apples, calcium ascorbate (a blend of calcium and vitamin C to maintain freshness and color). Suitable for vegans. Ready to eat, no washing or cutting required. Perfect format for easy and healthy snacking, especially for kids or when you’re on the go. Provides fresh fruit conveniently, helping to include apples as a daily snack.', 'Crunch Pak Peeled Apple Slices, 2 oz, 6 Count Perfect for breakfast, lunch, dinner, and dessert, Fresh Produce\', and \'No Added Sugar\' Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Individual bags make them perfect for snacking Throw a bag in with your lunch for a healthy side, take with you as you go out door, or pack a couple of bags and take on a picnic with your family', 'Fresh Produce', 'https://i5.walmartimages.com/asr/686c1f5f-861a-4248-8e31-02e4c5176c40.e2e2cbff168ded0855bb2952aa19beb4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/686c1f5f-861a-4248-8e31-02e4c5176c40.e2e2cbff168ded0855bb2952aa19beb4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/686c1f5f-861a-4248-8e31-02e4c5176c40.e2e2cbff168ded0855bb2952aa19beb4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (343737604, 'Sunset Organic Tomatoes on-The-Vine, 1lb Package, Fresh', 2.46, '057836921009', 'SUNSET Organic Tomatoes On-the-Vine are 1 lb of 4 flavorful and fresh tomatoes! Perfect for salads, sandwiches, and burgers. Hand-picked and packed on-the-vine, these tomatoes have flavor and aroma as fresh as grandma\'s garden. Hothouse grown to ensure consistent quality and freshness. Certified organic and non-GMO tomatoes. Store at room temperature for optimal flavor, and wash before enjoying. Enjoy SUNSET Organics Tomatoes On-the-Vines all year long.', 'SUNSET fresh Organic Tomatoes On-the-Vine, grown in a certified organic environment Hand-picked and packed on-the-vine, enjoy the garden fresh flavor and aroma Perfect for salads, sandwiches, burgers, and more Wash and enjoy Available all-year-long Non-GMO certified Hothouse grown to ensure consistent quality and freshness Store at room temperature for optimal flavor', 'SUNSET', 'https://i5.walmartimages.com/asr/2984816e-95ce-4e04-845b-89dd5340baaa.6326a68f2f2c9fd2eaa5192fa80ad56e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2984816e-95ce-4e04-845b-89dd5340baaa.6326a68f2f2c9fd2eaa5192fa80ad56e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2984816e-95ce-4e04-845b-89dd5340baaa.6326a68f2f2c9fd2eaa5192fa80ad56e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (343863604, '180pc Apple Mac 3#', 709.2, '405667988638', 'short description is not available', '180pc Apple Mac 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (344032065, 'Yellow Flesh Peaches, per Pound', 1.58, '400094763957', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (344246387, 'Fresh Kiku Apple, Each', 1.67, '847473004582', 'Grown with care and picked at the peak of ripeness, our Red Apples are sure to satisfy your cravings. With their sweet and juicy taste, they make for a perfect snack any time of the day. Graced with a classic, vibrant red color, these apples are full of nutrients such as fiber, vitamin C, and antioxidants. Get your daily dose of health and deliciousness with our Red Apples.', 'The Kiku Fresh Apple is a premium apple variety known for its exceptional sweetness, juiciness, and crisp texture. Each apple is medium to large in size, with a round shape and a bright, reddish-orange color. The flesh of the Kiku apple is firm and dense, with a creamy white color that resists browning when cut. The flavor is a perfect balance of sweetness and tartness, with hints of honey and cinnamon. These apples are ideal for snacking, baking, and cooking, and are a great source of fiber, vitamin C, and antioxidants. Whether eaten fresh or used in your favorite recipe, the Kiku apple is a delicious and healthy choice for any apple lover.', 'Unbranded', 'https://i5.walmartimages.com/asr/b0bfd0e9-7888-4463-85d1-fd74defbb5d8.b6aa27465cb48e21debff2c4b1a8c2f2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b0bfd0e9-7888-4463-85d1-fd74defbb5d8.b6aa27465cb48e21debff2c4b1a8c2f2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b0bfd0e9-7888-4463-85d1-fd74defbb5d8.b6aa27465cb48e21debff2c4b1a8c2f2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (344288928, 'Fresh Cut Wrapped Squash, Each', 0.77, '405874800709', 'Add some fresh flavor to your meal with Squash. This versatile vegetable can be used in a variety of dishes to create delicious and decadent meals. Roast the whole squash for a simple and flavorful side dish, chop it into cubes and put it in the slow cooker with chicken breast, kidney beans, and spices, or make noodles for a gluten-free pasta alternative. For a sweet treat turn the squash into a rich and spicy pie, perfect for the holiday season. With so many uses, this vegetable will become a pantry staple. Create tasty and flavorful meals with Squash', 'Versatile ingredient Roast the whole squash for the perfect side dish or chop into cubes, put into a slow cooker, and mix with chicken breast, beans, and spices for a flavorful dish Use it to create a sweet and decadent pie Make butternut squash noodles for a gluten free pasta alternative Will become a pantry staple', 'Unbranded', 'https://i5.walmartimages.com/asr/b47fe6e6-c49f-4d09-b116-3f98189cac58.4483800345a33f2526ceeee1f5a31453.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b47fe6e6-c49f-4d09-b116-3f98189cac58.4483800345a33f2526ceeee1f5a31453.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b47fe6e6-c49f-4d09-b116-3f98189cac58.4483800345a33f2526ceeee1f5a31453.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (344574482, 'Cece’s® Veggie Co. Organic Summer Squash Grillerz', 4.98, '852287006592', 'At Cece’s® Veggie Co., we believe in simple nutrition. Grillerz are a hot new twist on your favorite grilling fare- 100% organic veggies, crinkle-cut to the ideal size and thickness for flame-kissed flavor. Finished with savory herb butter, Grillerz can be paired with dip for healthy finger food snacking or served as a tasty accompaniment to your favorite protein. Your daily dose of veggies is just a hot rack away! Less prep. Less mess. More veggies. More fun', 'Grillerz are 100% Organic Zucchini and Yellow Squash, crinkle-cut to the ideal size and thickness for flame-kissed flavor. Ready to go from the package straight to the grill, Grillerz will add a healthy sizzle to your summer gatherings!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f95fdc42-8414-4f4d-a893-70bb84303a6e.42d523cfe30c2adb3e7ef0c0f0182b75.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f95fdc42-8414-4f4d-a893-70bb84303a6e.42d523cfe30c2adb3e7ef0c0f0182b75.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f95fdc42-8414-4f4d-a893-70bb84303a6e.42d523cfe30c2adb3e7ef0c0f0182b75.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (344581238, 'Jackfruit', 2.48, '000000034548', 'short description is not available', 'Jackfruit', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5935b9ad-25d5-4ac8-a41a-d2ec94efdcb5.4b5e993f70ac444e7761782badefb8ad.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5935b9ad-25d5-4ac8-a41a-d2ec94efdcb5.4b5e993f70ac444e7761782badefb8ad.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5935b9ad-25d5-4ac8-a41a-d2ec94efdcb5.4b5e993f70ac444e7761782badefb8ad.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (344728564, 'Marketside Fresh Cauliflower Florets, 12 oz', 2.47, '681131221740', 'Mealtime just got easier with Marketside Cauliflower Florets. You and your dinner guests will love the fresh flavor of these washed and ready-to-eat florets. Each bag contains four 1-cup servings that can be cooked in minutes on the stovetop or in the microwave. Eat them straight from the bag, serve them steamed with a touch of butter and a dash of salt and pepper, or add them to a vegetable soup or casserole. You can even whirl these florets in the food processor to make a low-carb, gluten-free rice alternative. Marketside Cauliflower Florets are bound to be a family favorite! Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Steams right in the bag Keep refrigerated Washed and ready to eat 20 calories per serving 4 servings per bag', 'Marketside', 'https://i5.walmartimages.com/asr/0c6b8a74-e546-4804-bf83-2b35c98aa1b2.5265d9b1455c737239360c6e19cedbbd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0c6b8a74-e546-4804-bf83-2b35c98aa1b2.5265d9b1455c737239360c6e19cedbbd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0c6b8a74-e546-4804-bf83-2b35c98aa1b2.5265d9b1455c737239360c6e19cedbbd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (344741006, 'General Fs Produce Rack Square Basket', 0.01, '405672296063', 'short description is not available', 'General Fs Produce Rack Square Basket', 'General', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (345616932, 'Fresh Green Seedless Grapes', 3.27, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (345710050, 'Fresh Beefsteak Tomatoes, 4 Count', 1.88, '811717030033', 'Create something wholesome and delicious with 3pk tomatoes. These fresh tomatoes are the perfect ingredient for a variety of tasty dishes. Use them to make a decadent tomato sauce for a pasta dish; try slicing them up and pairing with mozzarella cheese, basil and balsamic vinegar; or simply enjoy them on their own as a nutritious snack. They would make a comforting and appetizing tomato soup and a flavorful salsa. You could also slice them up and use them to top burgers and pizza or use them to make a delicious grilled cheese and tomato sandwich. However you choose to use them, these tomatoes will add flavor and taste to any meal. Be sure to add these fresh tomatoes to your Walmart purhase today.', 'Slicing Tomatoes, 4 Count Pack of 4 fresh, whole slicing tomatoes Firm and thick-skinned Large size is perfect for slicing up and garnishing sandwiches and burgers Classic tomato flavor lends itself to a wide variety of recipes Delicious base for making salsas, soups, sauces, and more', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0bb92ae5-d721-4661-a582-2774bec1369b.cbfff5fef192c1e3c3d9b1851c3eca88.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0bb92ae5-d721-4661-a582-2774bec1369b.cbfff5fef192c1e3c3d9b1851c3eca88.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0bb92ae5-d721-4661-a582-2774bec1369b.cbfff5fef192c1e3c3d9b1851c3eca88.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (346589706, 'Fresh Red Seedless Grapes', 1.84, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (346775804, 'Delaio Delallo Provolini Antipasti', 4.67, '072368394237', 'An Italian-inspired antipasto featuring bite-sized cubes of provolone, button mushrooms, black and green Manzanilla olives and sweet red peppers. DeLallo Provolini Antipasti is a brilliant Italian-inspired mix of savory black and green Manzanilla olives, creamy bite-sized cubes of provolone, tender button mushrooms and sweet red peppers in a light marinade. - Well-rounded antipasto medley featuring cubes of provolone cheese. - Features tart and briny black and green olives. - Pitted for DELAIO convenient snacking, entertaining and cooking. - Ready-to-serve antipasto and gourmet ingredient.', '7oz Container Well-rounded antipasto medley featuring cubes of provolone cheese Perfect for entertaining', 'DELAIO', 'https://i5.walmartimages.com/asr/d892d428-a1ea-4c17-b42d-6391c0d6bfea.4190a5cff211da3b8a437b38f9e53fa8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d892d428-a1ea-4c17-b42d-6391c0d6bfea.4190a5cff211da3b8a437b38f9e53fa8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d892d428-a1ea-4c17-b42d-6391c0d6bfea.4190a5cff211da3b8a437b38f9e53fa8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (346912188, 'AVO BAG 40 10/4 MXMP', 3.28, 'deleted_761010147627', 'AVO BAG 40 10/4 MXMP', 'Large Avocado 4 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (346925976, 'Fresh Organic Lady Alice Apple, 2 Lb Bag', 2.5, '804305001256', 'The Organic Lady Alice Apple 2 Lb Bag is a delightful and healthful choice for apple enthusiasts. These apples are organically grown, ensuring they are free from harmful pesticides and chemicals. Each bag contains approximately 8 to 10 apples, offering a perfect snack or addition to any meal. The Lady Alice apple variety is known for its crisp texture and sweet-tart flavor, making it a favorite among apple lovers. With its beautiful red and yellow skin, this apple is not only delicious but also visually appealing. Enjoy the natural goodness and freshness of Organic Lady Alice Apples in this convenient 2 lb bag.', 'Organic Lady Alice Apple 2 Lb Bag The Lady Alice apples in this 2 lb bag are organically grown, ensuring that they are free from harmful pesticides and chemicals. You can enjoy these apples with peace of mind, knowing that they have been produced in an environmentally friendly and sustainable manner. Crisp Texture and Sweet-Tart Flavor: Lady Alice apples are known for their delightful combination of a crisp texture and a sweet-tart flavor. Each bite is a refreshing and satisfying experience, making these apples a favorite among apple enthusiasts. Whether eaten on their own or used in various recipes, these apples are sure to please your taste buds.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b3358f48-ae9c-4136-95ec-b22a32990f45.80007481161d6bb9c080a8104b2e3b3c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3358f48-ae9c-4136-95ec-b22a32990f45.80007481161d6bb9c080a8104b2e3b3c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3358f48-ae9c-4136-95ec-b22a32990f45.80007481161d6bb9c080a8104b2e3b3c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (347162430, 'Dole California Chopped Dates 8 oz (Pack of 2)', 14.99, '783399664212', 'Feel revitalized with the fresh taste of sun-ripened Dole all-natural fruit. Rich in nutrients, fruit gives you healthy energy so you feel refreshed and ready to shine. They are grown under the California sun. Dole dates are picked at the peak of ripeness for maximum sweetness and flavor. They\'re delicious, 100% natural, and contain more nutritious antioxidants than many other common fruits! For more than 100 years, Dole has been committed to our environment, our employees and the communities in which we operate.', 'California Chopped Dates', 'Dole', 'https://i5.walmartimages.com/asr/45dceb04-af06-4668-8713-c30d927b6e48.2740a43480d2cff8dfa1ccc6866961ff.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/45dceb04-af06-4668-8713-c30d927b6e48.2740a43480d2cff8dfa1ccc6866961ff.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/45dceb04-af06-4668-8713-c30d927b6e48.2740a43480d2cff8dfa1ccc6866961ff.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (347284488, 'GRAPE TOMATOES', 1.97, '824660200132', 'GRAPE TOMATOES', '', '', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (347458336, '180pc Grapefruit 3#', 896.4, '405743308343', 'short description is not available', '180pc Grapefruit 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (347767616, '2# Bag Lemons', 3.92, 'deleted_072240753541', 'short description is not available', '2# Bag Lemons', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (348086663, 'Fresh Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094357699', 'Fresh Grown Yellow Nectarines, 1 Lb.', 'Fresh Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (348791995, 'Fresh Whole Daikon', 2.84, 'deleted_037842024307', 'Introducing our crisp and refreshing Daikon, a staple in Asian cuisine. This slender and elongated radish boasts a mild and slightly sweet flavor, making it a versatile ingredient in salads, stir-fries, and pickles. Packed with fiber, antioxidants, and essential nutrients, it supports a healthy and balanced diet. Elevate your culinary experience with this vibrant and nutritious addition to your kitchen.', 'Selected and stored fresh,Sourced with high quality standards,Recommended to wash before consuming,Delicious on their own as a healthy snack or as part of a recipe', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/ea38345a-ae5b-4f67-9af8-98061283e53e.a7e5bc0ea55eb7c76df65aced9da5500.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea38345a-ae5b-4f67-9af8-98061283e53e.a7e5bc0ea55eb7c76df65aced9da5500.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea38345a-ae5b-4f67-9af8-98061283e53e.a7e5bc0ea55eb7c76df65aced9da5500.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (349305148, 'Fresh Premium Grape Tomato, 1.5 lb Package', 4.98, '057836021495', 'Premium Grape Tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily complements your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Premium Grape Tomatoes are the perfect choice.', 'Premium Grape Tomato, 24 oz Wholesome, versatile, and delicious Greenhouse grown for a sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and snacking Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/41c02210-fe4f-45ab-8926-d9c9725e9e3c.a829a05a0264881ece358da94679204e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41c02210-fe4f-45ab-8926-d9c9725e9e3c.a829a05a0264881ece358da94679204e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41c02210-fe4f-45ab-8926-d9c9725e9e3c.a829a05a0264881ece358da94679204e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (349351812, 'Fresh Bosc Pears, Each', 1.21, '804305044130', 'Savor the sweet taste of Fresh Bosc Pears. Bosc Pears are juicy with a honey-sweet flavor that makes them great for breakfast, lunch, dinner, and dessert. Chop the pears up and add them to muffins with walnuts and vanilla for a sweet treat that\'s great for breakfast to get your morning started on a high note. Slice them up and top a pizza with prosciutto, goat cheese, and arugula for a mouthwatering meal perfect for family dinner or dinner party. You could even cut the pear in half and cook it in a skillet with butter, brown sugar, and vanilla for a decadent dessert. Enjoy tasty meals any time of day with Bosc Pears.', 'Fresh Bosc Pear, Each with a honey-sweet flavor Great for breakfast, lunch, dinner, and dessert Chop them up and add to muffins with walnuts and vanilla, slice and add to pizza with prosciutto, goat cheese, and arugula, or cut in half and cook in a skillet with butter, brown sugar, and vanilla Versatile ingredient perfect for both savory and sweet dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d888a776-9b9f-4137-b2ec-b685e82ac033.705c44014f935231537c862a7a551e92.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d888a776-9b9f-4137-b2ec-b685e82ac033.705c44014f935231537c862a7a551e92.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d888a776-9b9f-4137-b2ec-b685e82ac033.705c44014f935231537c862a7a551e92.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (349371197, 'Misionero Vegetables Garden Life Fresh Lettuce Wraps, 7 oz', 3.12, '818431000083', 'These super sweet and super crunchy Garden Life Lettuce Wraps are great for quick and easy meals from burgers to salads and more! A naturally bred proprietary seed variety, we took the best attributes of romaine and iceberg and married them up to produce this great tasting mouthwatering lettuce. There are no additives or preservatives - just great tasting lettuce. Bring home some Garden Life Lettuce Wraps today.', 'Lettuce Wraps Naturally cross bred romaine and iceberg lettuces Triple washed No additives, no preservatives - Just great tasting lettuce Great for quick and easy meals from burgers to salads and more A naturally bred proprietary seed variety, we took best attributes of romaine and iceberg and married them up to produce this great tasting mouthwatering lettuce For recipes and additional information, visit us at: www.misionero.com. Grown in the USA. Product of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ac4dac59-82d6-49a7-adeb-92c528de0292.319110dfa655b49db7d97150f70b75e7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac4dac59-82d6-49a7-adeb-92c528de0292.319110dfa655b49db7d97150f70b75e7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac4dac59-82d6-49a7-adeb-92c528de0292.319110dfa655b49db7d97150f70b75e7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (349397941, 'Crunch Pak Dipperz Snack with Baby Carrots & Everything Bagel Ranch', 1.47, '732313000858', 'This Crunch Pak Dipperz Snack with Baby Carrots and Everything Bagel Ranch is a great option for a quick snack or for packing in lunches. This snack tray comes in a convenient package that makes it an ideal option to take with you to work or to school. With only 130 calories per serving, it would also make a tasty after-school snack for the kids. Check out all the other Crunch Pak Snacks to find your favorite. Keep refrigerated until ready to enjoy. Pick up a Crunch Pak Dipperz Snack with Baby Carrots and Everything Bagel Ranch today.', 'Great option for a quick snack or for packing in lunches Snack pack with baby carrots and everything bagel ranch Good source of vitamin C 130 calories per serving Keep refrigerated', 'Crunch Pak', 'https://i5.walmartimages.com/asr/e9333e15-f6b2-40cf-86ce-5fc6a30f10f3.352023491f46ac1f3283c1354b48dbb1.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9333e15-f6b2-40cf-86ce-5fc6a30f10f3.352023491f46ac1f3283c1354b48dbb1.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9333e15-f6b2-40cf-86ce-5fc6a30f10f3.352023491f46ac1f3283c1354b48dbb1.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (349708630, 'Fieldpack Unbranded Pasilla Pepper', 2.98, '000000047012', 'Discover the bold, smoky flavor of our Fresh Pasilla Peppers, a versatile ingredient that adds depth and warmth to your favorite dishes. These dark green, mildly spicy peppers are ideal for roasting, grilling, or sautéing and are perfect for making authentic Mexican cuisine or adding a kick to your everyday meals. Locally sourced and hand-picked for quality, our Pasilla Peppers provide a unique, delicious taste that will elevate your culinary creations.', 'Field pack Unbranded Pasilla Pepper Discover the bold, smoky flavor of our Fresh Pasilla Peppers, a versatile ingredient that adds depth and warmth to your favorite dishes. These dark green, mildly spicy peppers are ideal for roasting, grilling, or sautéing and are perfect for making authentic Mexican cuisine or adding a kick to your everyday meals. Locally sourced and hand-picked for quality, our Pasilla Peppers provide a unique, delicious taste that will elevate your culinary creations.', 'Fieldpack Unbranded', 'https://i5.walmartimages.com/asr/e829a10e-d4ee-40cc-a857-51afe6150665.642f7f87b3261b35bf055a983194a74a.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e829a10e-d4ee-40cc-a857-51afe6150665.642f7f87b3261b35bf055a983194a74a.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e829a10e-d4ee-40cc-a857-51afe6150665.642f7f87b3261b35bf055a983194a74a.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (349763385, 'Fresh Organic Grape Tomatoes, 10 oz Package', 2.96, '751666567054', 'Organic Medley Tomatoes are an exciting summer treat, and they\'re the perfect size for skewers, salads and roasting. These bite-sized medley tomatoes look and taste great. Medley tomatoes are a low-calorie treat that are also low in sodium and are a good source of fiber. Whether you are snacking or adding them to your favorite dish. their uses are almost limitless. Try these grape tomatoes with feta cheese, fresh dill and a drizzle of olive oil for a light and delicious Mediterranean treat. Or make a caprese salad with medley tomatoes, fresh basil, fresh mozzarella and balsamic vinegar. With 10-ounces of tomatoes in each package, you\'ll have plenty to make mouthwatering meals. Use your imagination to create delicious dishes with Organic Medley Tomatoes.', 'Organic Medley Tomatoes, 10 oz Package: Perfect size for skewers, salads and roasting Low-calorie, low in sodium, and a good source of fiber Pair with feta cheese, fresh dill, and a drizzle of olive oil for a Mediterranean dish Certified organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c12abd1f-2dcc-48ec-8f2f-7ae68c5c7191.f5ee8743ba711fe48df16e3eadf72686.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c12abd1f-2dcc-48ec-8f2f-7ae68c5c7191.f5ee8743ba711fe48df16e3eadf72686.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c12abd1f-2dcc-48ec-8f2f-7ae68c5c7191.f5ee8743ba711fe48df16e3eadf72686.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (350018260, 'Marketside Fresh Halved Brussels Sprouts, 12 oz', 3.47, '681131221764', 'Marketside Halved Brussels Sprouts are packed fresh, washed and ready to eat for your convenience. These brussels sprouts are loaded with nutrients and have a great fresh taste. They are halved and packaged in a convenient microwave safe bag that allows you to steam them in just three minutes. Enjoy them as a wholesome side or use them in all your favorite recipes. They are also delicious roasted, grilled, sauteed, or steamed and will add a great pop of color to your meals. For a quick and easy addition to any dish, bring home Marketside Halved Brussels Sprouts today! Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Washed and ready to eat 4 servings per container Steams in the microwave in minutes Great as a healthy side or snack', 'Marketside', 'https://i5.walmartimages.com/asr/397fe05c-e020-4294-bcad-29f9c82b6c5f.6384d688bbaf2ee63db5fd4981416dd4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/397fe05c-e020-4294-bcad-29f9c82b6c5f.6384d688bbaf2ee63db5fd4981416dd4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/397fe05c-e020-4294-bcad-29f9c82b6c5f.6384d688bbaf2ee63db5fd4981416dd4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (350034574, '2# Bag Lemons', 3.98, 'deleted_095829500060', 'short description is not available', '2# Bag Lemons', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (350435409, 'Red Mangoes, 1 Each', 0.94, 'deleted_852186003074', 'Red Mangoes, 1 Each', 'Red Mango', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/f8adb81c-19bf-41a0-aca9-1217ee2c7f2e_3.43999e25157d81ead4a6abbe648372c9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f8adb81c-19bf-41a0-aca9-1217ee2c7f2e_3.43999e25157d81ead4a6abbe648372c9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f8adb81c-19bf-41a0-aca9-1217ee2c7f2e_3.43999e25157d81ead4a6abbe648372c9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (351030106, 'Fresh Whole Cocktail Tomato, 1 lb Package', 2.98, 'deleted_751666611054', 'Holding the ideal balance of sweetness and acidity, it\'s easy to see why Fresh Whole Cocktail Tomatoes are called the tomato lover\'s tomato. Cocktail tomatoes are small, making them an ideal choice for appetizers to pair with your everyday meals and for when you\'re entertaining guests. You can combine these tasty little tomatoes with fresh mozzarella and basil drizzled with olive oil or slice them up and add them to a freshly tossed salad. If you\'re feeling something classic, you can always cut one up to add that fresh tomato taste to a sandwich or dice up a few to make a delightful pizza topping. Be sure to add Fresh Whole Cocktail Tomatoes to your inventory of ingredients today.', 'Fresh Whole Cocktail Tomato, 1 lb Package The tomato lover\'s tomato Small size is great for salads and appetizers Ideal ingredient for a variety of dishes Greenhouse-grown and vine-ripened Pesticide and herbicide free 16-ounce package of cocktail tomatoes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (351417573, 'Services Reduced Program Dept 94', 0.01, '251867000003', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (351517604, 'Premium Bananas', 0.49, 'deleted_405821601458', 'short description is not available', 'Premium Bananas', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (351559598, 'Papaya 10 Division 1', 2.88, '405748433460', 'short description is not available', 'Papaya 10 Division 1', 'Unbranded', 'https://i5.walmartimages.com/asr/e8bc1b1b-4c9c-4b8e-a3d5-8ef4f8987e7c.7636cfde4b6ebb43dfde1a7080789890.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e8bc1b1b-4c9c-4b8e-a3d5-8ef4f8987e7c.7636cfde4b6ebb43dfde1a7080789890.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e8bc1b1b-4c9c-4b8e-a3d5-8ef4f8987e7c.7636cfde4b6ebb43dfde1a7080789890.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (352170206, 'Watermelon Seedless', 4.48, '400094762332', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (352180620, 'Fresh California Grown Red Grapes', 1.98, '', 'short description is not available', 'Fresh California Grown Red Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/108723d1-993f-4ef0-bc2c-b7817704a2a6_2.8a970b8f226b10dd5bc3df912d153cf4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/108723d1-993f-4ef0-bc2c-b7817704a2a6_2.8a970b8f226b10dd5bc3df912d153cf4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/108723d1-993f-4ef0-bc2c-b7817704a2a6_2.8a970b8f226b10dd5bc3df912d153cf4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (352180642, '75pc Orange Navel 8#', 589.5, '405870771393', 'short description is not available', '75pc Orange Navel 8#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (352694932, 'Freshness Guaranteed Fuji Apples 3 Lb Bag', 3.97, '', 'short description is not available', 'Freshness Guaranteed Fuji Apples 3 Lb Bag', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (352788914, 'Mirepoix 8oz', 2.58, 'deleted_074641015495', 'short description is not available', 'Mirepoix 8oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3fe0c5d7-2bef-451d-812d-f016d6fa60e4.7ff6269d46efb7b706ba96a4d974f075.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3fe0c5d7-2bef-451d-812d-f016d6fa60e4.7ff6269d46efb7b706ba96a4d974f075.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3fe0c5d7-2bef-451d-812d-f016d6fa60e4.7ff6269d46efb7b706ba96a4d974f075.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (353450930, 'Green Bell Pepper', 0.76, '', 'Green Bell Pepper', 'Green Bell Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (353738144, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094516089', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (353767624, 'Dallas Cowboys On-The-Go Guacamole Dip Mini Cups, Gluten-Free, 6 Ct', 4.98, '810041599247', 'Our Original Guacamole is now available in an easy-to-grab cup that is perfect to pack for school lunches, snacking on the go, or topping your tacos, big veggie salads, turkey burgers, and everything in between! ¡Yo Quiero! and the Dallas Cowboys partnered up to bring easy snacks, easy lunches, and easy dinners to life. Whether you\'re planning for tailgating, Friday night dinners or prepping a vegan lunch, the Original Guacamole Mini Cups are sure to satisfy your cravings and delight your guests. Made with the freshest ingredients from real Hass Avocados to jalapeno peppers, this convenient snack or appetizer is perfect for your lunch menu, parties, packed lunch, vegan dinner, or whatever else you might crave. ¡Yo Quiero! Original Guacamole Mini Cups pair wonderfully with chips, sandwhiches, tacos, salads, burgers, and more. You can even turn it into your own version of avocado toast or a dip on the go for vegetables such as carrots. Game day snacking just got better.', 'Our Original Guacamole is now available in an easy-to-grab cup that is perfect to pack for school lunches, snacking on the go, or topping your tacos, big veggie salads, turkey burgers, and everything in between! ¡Yo Quiero! and the Dallas Cowboys partnered up to bring easy snacks, easy lunches, and easy dinners to life. Whether you\'re planning for tailgating, Friday night dinners or prepping a vegan lunch, the Original Guacamole Mini Cups are sure to satisfy your cravings and delight your guests. Made with the freshest ingredients from real Hass Avocados to jalapeno peppers, this convenient snack or appetizer is perfect for your lunch menu, parties, packed lunch, vegan dinner, or whatever else you might crave. ¡Yo Quiero! Original Guacamole Mini Cups pair wonderfully with chips, sandwhiches, tacos, salads, burgers, and more. You can even turn it into your own version of avocado toast or a dip on the go for vegetables such as carrots. Game day snacking just got better.', 'Yo Quiero', 'https://i5.walmartimages.com/asr/0bf6cfa6-28a4-4c27-9d95-5d4f3aa33508.ca2207f73ba74078dce12ece7099164f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0bf6cfa6-28a4-4c27-9d95-5d4f3aa33508.ca2207f73ba74078dce12ece7099164f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0bf6cfa6-28a4-4c27-9d95-5d4f3aa33508.ca2207f73ba74078dce12ece7099164f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (354020550, '200pc Pto Ykn/red 5#', 1296, '405539015516', 'short description is not available', '200pc Pto Ykn/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (354144489, '200pc Pto Ykn 5# Bw', 694, '405508922272', 'short description is not available', '200pc Pto Ykn 5# Bw', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (354298074, '150pc Pto Ykn 5# Or', 745.5, '405516946352', 'short description is not available', '150pc Pto Ykn 5# Or', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (354454525, 'Services Reduced Program Dept 94', 0.01, '251744000003', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (354621290, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094342435', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (354639124, 'Services Reduced Program Dept 94', 0.01, '251707000002', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (354841357, 'Black Seedless Grapes, 2 lb clamshell', 3.96, '899734002165', 'short description is not available', 'GRAPE BLK SDLS 2# WK', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1d25614b-ac42-4438-b5a7-6e7529e58cc2_1.ec8c5f229a0e0e3375476f38bb7d34c7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d25614b-ac42-4438-b5a7-6e7529e58cc2_1.ec8c5f229a0e0e3375476f38bb7d34c7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d25614b-ac42-4438-b5a7-6e7529e58cc2_1.ec8c5f229a0e0e3375476f38bb7d34c7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (354906466, 'Bowery Farming Baby Butter Lettuce, 4 oz Clam Shell, Fresh Salad Lettuce', 2.98, '851536007175', 'How can something so leafy be so buttery? Well, this baby butter lettuce is a case in point. Sweet, smooth, and oh-so-buttery, it’ll go with pretty much anything. Every Bowery leaf is grown and handled with care, without pesticides. Bowery\'s smart farms use less water and create less waste on less land. All Bowery salad produce is freshly harvested, picked at peak freshness 365 days a year, and available on shelf in just a few days.', 'Produce grown smarter for better flavor: less wasteful, more tasteful. Vertically Grown Fresher Longer Zero-Pesticide Greens No Need to Wash Bowery Farming Lettuce Salad Greens', 'Bowery Farming', 'https://i5.walmartimages.com/asr/f3a8b494-f2c7-4180-84ea-7e2817a106b5.30965535893bdbe31f6f83255ab65bab.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3a8b494-f2c7-4180-84ea-7e2817a106b5.30965535893bdbe31f6f83255ab65bab.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3a8b494-f2c7-4180-84ea-7e2817a106b5.30965535893bdbe31f6f83255ab65bab.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (355262059, 'Freshness Guaranteed Pineapple Chunks 10 Oz', 3.48, 'deleted_681131036573', 'short description is not available', 'Freshness Guaranteed Pineapple Chunks 10 Oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (355562127, 'Green Giant Fresh Brussels Sprouts & Asparagus, 16 oz', 3.98, '605806000546', 'Green Giant™ Fresh Halved Brussels Sprouts & Asparagus.Great for roasting, sauteing & more!Washed & ready to eat!Gluten free.Per serving:25 Calories.0g Sat fat, 0% DV.15mg Sodium, 1% DV.2g Sugars.Net Wt 16 oz (1 lb) 454 g. Perishable keep refrigerated.', 'Brussels Sprouts & Asparagus, Halved Great for roasting, sauteing & more! Per Serving: 25 calories; 0 g sat fat (0% DV); 15 mg sodium (1% DV); 2 g sugars. Gluten free. Non GMO. Washed & ready to eat! Find delicious recipes: GreenGiantFresh.com. Questions or comments? 1-800-998-9996. Follow us on: Facebook and Twitter. Facebook. Twitter. Box Tops for Education. Recycle.', 'Green Giant', 'https://i5.walmartimages.com/asr/d6bf88f8-b4eb-4c41-9466-a8a9bf9cd671_1.f19491bea1713226d52afa97c6479974.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d6bf88f8-b4eb-4c41-9466-a8a9bf9cd671_1.f19491bea1713226d52afa97c6479974.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d6bf88f8-b4eb-4c41-9466-a8a9bf9cd671_1.f19491bea1713226d52afa97c6479974.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (356079112, 'Orange Cherry Tomato, 12 oz Package', 2.98, '689259004085', 'Bring the fresh, delicious taste of Orange Cherry Tomatoes into your home. Because of their notable flavor and thicker skin, they are a versatile tomato that\'s great for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, orange cherry tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with these fresh Orange Cherry Tomatoes.', 'Orange Cherry Tomato, 12 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1b00a5d0-81db-4899-a159-9eff72f6dea9.6ba2b4e416def4f2b57223a96d10c4a4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b00a5d0-81db-4899-a159-9eff72f6dea9.6ba2b4e416def4f2b57223a96d10c4a4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b00a5d0-81db-4899-a159-9eff72f6dea9.6ba2b4e416def4f2b57223a96d10c4a4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (356250509, 'Fresh Produce, Whole Bok Choy Shanghai, 1 Bundle', 2.77, '000000031639', 'Introducing our Whole Refrigerated Bok Choy, a versatile and nutritious addition to your meals. Handpicked at the peak of freshness, these vibrant green leaves and crisp stalks are packed with vitamins and minerals. Our 1bundle package of Whole Refrigerated Bok Choy ensures you have an abundant supply of the freshest and most tender bok choy to enhance stir-fries, soups, and salads. Elevate your culinary creations with this flavorful and healthy ingredient.', 'Fresh Produce, Whole Bok Choy Shanghai, 1 Bundle Handpicked at the peak of freshness, these vibrant green leaves and crisp stalks are packed with vitamins and minerals. Our 1 bundle package of Whole Refrigerated Bok Choy ensures you have an abundant supply of the freshest and most tender bok choy to enhance stir-fries, soups, and salads. Elevate your culinary creations with this flavorful and healthy ingredient. Also known as col china Shanghai, Shànghǎi qīng, chingensai and sanghai cheonggyeongchae around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8e4305e5-1b2a-4e12-950d-edfa8ec063ab_1.be56e34ceed0c92cefb51ece6b283f7d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e4305e5-1b2a-4e12-950d-edfa8ec063ab_1.be56e34ceed0c92cefb51ece6b283f7d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e4305e5-1b2a-4e12-950d-edfa8ec063ab_1.be56e34ceed0c92cefb51ece6b283f7d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (356341844, 'Bako Sweet Organic Orange Skin Sweet Potatoes, 14 Oz', 4.47, '819614010400', 'Grown from the sweet spot of California, our Organic Orange Sweet Potatoes are the sweetest you have ever tasted. This organic sweet potato is orange on the outside and orange on the inside, delivering a sweet and earthy flavor. Sweet potatoes are a superfood and can be enjoyed in many ways, making it easy to feed your family the best.', 'Ready to enjoy Loaded with Vitamin A Good source of fiber Nutritious Superfood Triple Washed Non-GMO', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0af934a7-0b0c-4755-9d90-44d2eb8f3d20.98c0ca38c26345a40f0d5c131e758bca.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0af934a7-0b0c-4755-9d90-44d2eb8f3d20.98c0ca38c26345a40f0d5c131e758bca.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0af934a7-0b0c-4755-9d90-44d2eb8f3d20.98c0ca38c26345a40f0d5c131e758bca.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (356354152, 'Fresh Radish White Daikon', 2.97, '000000045988', 'Add the spicy taste of a Fresh white daikon radish to your next stir fry or salad. Also known as winter radish or Oriental radish, this white root vegetable has a mild flavor and is used in a variety of food dishes. Some cultures pickle it while others grate it and mix it with soy sauce and citrus juice to create a condiment. This white radish has a mild flavor after being boiled and is an excellent addition to soups and stews.', 'Also known as Winter Radish Mild Flavor Great pickled or grated Excellent addition to soups and stews', 'Fresh Produce', 'https://i5.walmartimages.com/asr/29c52535-d2ab-4909-b4f8-c5e1dc0999b2_1.dc4e700cc293daa7e0fe599d0fb2cc77.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/29c52535-d2ab-4909-b4f8-c5e1dc0999b2_1.dc4e700cc293daa7e0fe599d0fb2cc77.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/29c52535-d2ab-4909-b4f8-c5e1dc0999b2_1.dc4e700cc293daa7e0fe599d0fb2cc77.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (358175290, 'French Green Beans 8 Oz', 3.28, 'deleted_854026006344', 'short description is not available', 'French Green Beans 8 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (358748543, 'Sweet Potatoes 3 Lb Bag', 2.84, '785580100301', 'short description is not available', 'Sweet Potatoes 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (358830021, 'ORGANIC GRAPE TOMATO', 2.68, '033383001302', 'ORGANIC GRAPE TOMATO', '', '', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (358852261, 'Ogp Red Cherry Samples', 0.01, '405836139335', 'short description is not available', 'Ogp Red Cherry Samples', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2a68e6fb-204f-4598-862d-d1b2ad5be91d.b760cfee608cfcbc638a54ff5f800025.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a68e6fb-204f-4598-862d-d1b2ad5be91d.b760cfee608cfcbc638a54ff5f800025.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a68e6fb-204f-4598-862d-d1b2ad5be91d.b760cfee608cfcbc638a54ff5f800025.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (359183113, 'Fresh Grape Tomato, 4 oz Cup', 3.48, '751666418950', 'Add color and flavor to your next meal with Grape Tomatoes. Similar to larger Roma tomatoes, grape tomatoes have a lower water content than cherry tomatoes, making them meatier, more flavorful, and even a little tidier with every bite. They are hardier and less fragile than a traditional tomato as well, so there\'s no need to worry about bruising either. Perfectly bite-sized, grape tomatoes are not only a simple and delicious addition to salads and pasta, but also serve as a quick and convenient snack all on their own. Plus, grape tomatoes have a longer shelf-life, which means it\'s perfectly fine to keep them in storage for several days at a time. All you have to do is grab and enjoy to experience the class tomato taste of Grape tomatoes.', 'Fresh Grape Tomatoes, 3 Pack: Lower water content and longer shelf-life than cherry tomatoes Hardier and more resistant to bruising than traditional tomatoes Conveniently bite-sized Quick and excellent addition to salads and snack trays Best stored at room temperature out of sunlight', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2ff3c060-1f0b-42fb-9dda-6a55cd8a6195.9b473449043488ad84406f3495c0bdaa.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ff3c060-1f0b-42fb-9dda-6a55cd8a6195.9b473449043488ad84406f3495c0bdaa.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ff3c060-1f0b-42fb-9dda-6a55cd8a6195.9b473449043488ad84406f3495c0bdaa.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (359815064, 'Gourmet212 Oven Roasted Cherry Tomatoes 8.11oz (6 Pack), Glass, Jarred', 74.95, '191822007084', 'Have you tried semi dried cherry tomatoes? If your answer is no, you should try our product to not to miss out. Sun dried tomatoes are highly recommended just as semi dried tomatoes if it is not the season of fresh tomatoes, however, oven semi dried tomatoes are closer to natural tomato taste than sun dried tomatoes. The semi dried tomatoes are juicier and lighter in color and are also sliced. They are then put in high quality ovens for 6-7 hours with low temperatures. Dehydrated slowly, semi dried tomatoes preserve their taste in flavored oil for long time without any additives. This product is packed with so high quality that keeps fresh for one year on the shelf without oxygen exposure. Some reasons to buy our semi dried cherry tomatoes: It is Halal Certified It is Kosher Certified It?s made with seasonal tomatoes It?s the perfect product for any meat or chicken dish It?s a delicious ingredient for antipasti, pizza, salad, sandwich and pasta Ingredients: sun dried tomatoes (57%), canola oil, salt, sugar, vinegar, garlic powder, spices, acidity regulator (citric acid), antioxidant (ascorbic acid) If you like cherry tomatoes, you shouldn?t miss this product.', 'Gourmet212 Oven Roasted Cherry Tomatoes 8.11 oz (6 Pack), Stuffed, Airtight Glass Jar The semi-dried tomatoes are juicier and lighter in color. They are put in high-quality ovens for 6-7 hours with low temperatures. Dehydrated slowly, semi-dried tomatoes preserve their taste in flavored oil for a long time without any additives. It is Halal and Kosher Certified. Ingredients: sun-dried tomatoes (57%), canola oil, salt, sugar, vinegar, garlic powder, spices, acidity regulator (citric acid), antioxidant (ascorbic acid).', 'Gourmet212', 'https://i5.walmartimages.com/asr/770067a7-88a3-4f16-b19a-de30287ed2d0.35f332d483fde4ae40a3b344022d8220.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/770067a7-88a3-4f16-b19a-de30287ed2d0.35f332d483fde4ae40a3b344022d8220.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/770067a7-88a3-4f16-b19a-de30287ed2d0.35f332d483fde4ae40a3b344022d8220.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (360380923, 'Marketside Sugar Snap Peas with Ranch Dip, 3.25 oz, 4 Count', 4.98, '030223026846', 'Marketside Sugar Snap Peas with Ranch Dip is a fun and healthy way to snack. This container comes with four individually wrapped packages of sugar snap peas with creamy ranch dressing for dipping. It\'s perfect for snacking at the office, home, school or even on-the-go. With 140 calories per serving, this duo is great for health-conscious individuals. Add a healthy crunch to your break time with Marketside Sugar Snap Peas with Ranch Dressing. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Sugar Snap Peas with Ranch Dip, 3.25 oz, 4 Count: 4 individually wrapped packages Crunchy sugar snap peas with creamy ranch dip Ideal for packing in a lunch Healthy pre-portioned snack Keep refrigerated', 'Marketside', 'https://i5.walmartimages.com/asr/1fd4ce6e-3e57-4b50-9371-2ee02d838e39_1.1de48aa4bbb772ed1954e34e32cffa86.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1fd4ce6e-3e57-4b50-9371-2ee02d838e39_1.1de48aa4bbb772ed1954e34e32cffa86.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1fd4ce6e-3e57-4b50-9371-2ee02d838e39_1.1de48aa4bbb772ed1954e34e32cffa86.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (360427766, '2# RED ONIONS', 2.58, '039186601015', '2# RED ONIONS', 'ALSUM RED ONN WHL BAG FRESH VEGETABLE AND HERB', 'Alsum', 'https://i5.walmartimages.com/asr/f3f3e895-4270-4239-9054-3aba1b21fbbb.5319a5ab6eb42948ee84db536f8f0c4c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3f3e895-4270-4239-9054-3aba1b21fbbb.5319a5ab6eb42948ee84db536f8f0c4c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3f3e895-4270-4239-9054-3aba1b21fbbb.5319a5ab6eb42948ee84db536f8f0c4c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (360477573, '200pc Pto Ykn/red 5#', 945, '405503439737', 'short description is not available', '200pc Pto Ykn/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (360634988, 'Fresh Red Seedless Grapes', 2.48, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (361278697, 'Granny Smith Apples 3 Lb Bag', 3.94, '818290020147', 'short description is not available', 'Granny Smith Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (361667051, 'Fresh Grown Plums', 1.98, 'deleted_683953040424', 'short description is not available', 'Fresh Grown Plums', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/f373b4d7-d6fb-4799-a25b-0c4a27b6bfac.ebab1bcedce8e090685ee94e19fc2bd9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f373b4d7-d6fb-4799-a25b-0c4a27b6bfac.ebab1bcedce8e090685ee94e19fc2bd9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f373b4d7-d6fb-4799-a25b-0c4a27b6bfac.ebab1bcedce8e090685ee94e19fc2bd9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (361933568, '200pc Pto Rst 5# Sch', 554, '405507557505', 'short description is not available', '200pc Pto Rst 5# Sch', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (362358681, 'Fieldpack Unbranded Fresh Red Seedless Grapes', 2.37, '', 'short description is not available', 'Fieldpack Unbranded Fresh Red Seedless Grapes', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (362775813, '120pc Apple Gala 5#', 600, '400094578575', 'short description is not available', '120pc Apple Gala 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (363061411, 'Bako Sweet Organic White Skin Sweet Potatoes, 14 Oz', 2.99, '819614010424', 'Grown from the sweet spot of California, these Organic O’Henry White Sweet Potatoes are white on the outside and white on the inside. These O’Henry white sweet potatoes are smooth and dry with a medium firmness. They are mildly sweet with a nutty and earthy flavor. Sweet potatoes are a superfood and can be enjoyed in many ways, making it easy to feed your family the best.', 'Ready to enjoy Loaded with Vitamin A Good source of fiber Nutritious Superfood Triple Washed Non-GMO', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ffcbea13-23c3-4b01-905a-fded016d7841.02953e5613303ac53d0a7352bd00da61.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ffcbea13-23c3-4b01-905a-fded016d7841.02953e5613303ac53d0a7352bd00da61.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ffcbea13-23c3-4b01-905a-fded016d7841.02953e5613303ac53d0a7352bd00da61.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (363076952, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094358023', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (363506348, '240pc On Ylw 3# Nv', 465.6, '405555351179', 'short description is not available', '240pc On Ylw 3# Nv', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (363734492, 'Garland Organic Peeled Garlic 6oz cloves bag', 3.97, '718940002120', 'Came in convenient zip bag. Ready to use. Garland Organic Peeled Garlic makes your everyday cooking more enjoyable. Garlands peeled garlic is carefully prepared with fresh garlic peeled for an authentic flavor. It is enriched with olive oil to give it a smooth and creamy texture, and a touch of lemon juice for freshness. Have the quality you can count on and the traceability that comes with it. Full transparency from farm to table.', 'Garlic is also known for its health benefits Including ability to boost the immune system Reduce inflammation make into pure Rub in and season any meat or even meal Ready to use Rich in antioxidants Non GMO', 'Garland Food', 'https://i5.walmartimages.com/asr/958c3da6-7c58-4434-946a-d58e262eb793.2548f79d11ec34b037a31c3d341f305b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/958c3da6-7c58-4434-946a-d58e262eb793.2548f79d11ec34b037a31c3d341f305b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/958c3da6-7c58-4434-946a-d58e262eb793.2548f79d11ec34b037a31c3d341f305b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (363800188, 'Fresh Red Delicious Apples, 5 lb Bag', 6.68, '818679004263', 'Treat yourself to the delicious, sweet taste of Freshness Guaranteed Red Delicious Apples. These apples are known for their classic sweet flavor with mild acidity and creamy white flesh with low acidity. Crisp and juicy, these apples have higher levels of antioxidants due to the rich, deep red skin. Enjoy one with breakfast or lunch or as a fresh snack any time of day. An excellent snacking or juicing apple, the Red Delicious is an excellent addition to green, fruit, and chopped salads, or an unexpected twist to sandwiches, quesadillas, or burgers. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Freshness Guaranteed Red Delicious Apples. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Red Delicious Apples, 5 lb Bag: Sweet, crisp, and juicy Creamy white flesh with low acidity Excellent snacking apple Higher antioxidants due to the rich, deep red skin Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp, and apple pie Make a creamy smoothie or a nutritious juice blend Perfect as a healthy treat or seasonal baking ingredient Great for packing in lunches Make a creamy smoothie or a nutritious juice blend Adds flavor to a variety of recipes', 'Marketside', 'https://i5.walmartimages.com/asr/f0a69ccc-0684-4ae7-8567-04f2578e4149.94fe00d1a454a9a6092fbd102baead59.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f0a69ccc-0684-4ae7-8567-04f2578e4149.94fe00d1a454a9a6092fbd102baead59.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f0a69ccc-0684-4ae7-8567-04f2578e4149.94fe00d1a454a9a6092fbd102baead59.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (363807299, 'Fresh Whole Grape Tomato, 10 oz Bag', 2.98, '684924010392', 'Take your favorite tomato dishes to the next level with Fresh Whole Grape Tomatoes. They are an exciting summer treat, and they\'re the perfect size for skewers, salads and roasting. These bite-sized grape tomatoes look and taste great. Grape tomatoes are a low-calorie treat that are also low in sodium and are a good source of fiber. Whether you are snacking or adding them to your favorite dish. their uses are almost limitless. Try these grape tomatoes with feta cheese, fresh dill, and a drizzle of olive oil for a light and delicious Mediterranean treat. Or make a caprese salad with grape tomatoes, fresh basil, fresh mozzarella, and balsamic vinegar. With 10-ounces of tomatoes in each package, you\'ll have plenty to make mouthwatering meals. Use your imagination to create delicious dishes with Fresh Whole Grape Tomatoes.', 'Fresh Whole Grape Tomatoes, 10 oz Package Perfect size for skewers, salads and roasting Low-calorie, low in sodium, and a good source of fiber Pair with feta cheese, fresh dill, and a drizzle of olive oil for a Mediterranean dish Make a caprese salad with grape tomatoes, fresh basil, fresh mozzarella, and balsamic vinegar Certified organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (363931949, 'California Grown Peaches, per Pound', 1.58, '400094135976', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (365037085, 'California Chile Pod', 5.97, '794660150266', 'short description is not available', 'California Chile Pod', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (366136650, 'California Grown Peaches, per Pound', 1.58, '400094275306', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (366245373, 'Plenty Greens Mizuna Mix Salad, 4.5 oz Clam Shell, Fresh', 2.48, '810567030507', 'short description is not available', 'Plenty Mizuna Mix Salad 4oz', 'PLENTY', 'https://i5.walmartimages.com/asr/86cd5600-4a1c-4341-932a-9873ca6e1d28.1f39abdfab55a8f94020d8a57e709fd4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/86cd5600-4a1c-4341-932a-9873ca6e1d28.1f39abdfab55a8f94020d8a57e709fd4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/86cd5600-4a1c-4341-932a-9873ca6e1d28.1f39abdfab55a8f94020d8a57e709fd4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (366347376, 'Organic Way Shatavari Powder (Asparagus Racemosus) Herbal Tea- Organic & Kosher Certified | Raw, Vegan, Non GMO & Gluten Free | USDA Certified | Origin - India (1/4 lbs / 4 oz)', 23.07, '781584828579', 'Organic Way Shatavari Powder (Asparagus Racemosus) Herbal Tea- Organic & Kosher Certified | Raw, Vegan, Non GMO & Gluten Free | USDA Certified | Origin - India (1/4 lbs / 4 oz) Shatavari, scientifically known as Asparagus racemosus, is an herb in Ayurvedic medicine that is a complete health tonic that boosts energy and overall health. This amazing herb supports many bodily functions so it’s a must have in any natural health regime. At Organic Way we go above and beyond to provide products that are authentic and potent. We source high quality, organically grown herbs from around the world and process them in the USA to meet the American market needs. Our commitment to quality is reflected in the fact that all our products are USDA and Kosher certified so you can be sure they are safe to consume. Trust Organic Way for your wellness journey, you know you’re getting the best.', 'Authentic Ayurvedic Tradition: Our Shatavari herbal supplement is a tribute to the time-honored practices of Ayurveda, where Shatavari has been cherished for centuries for its profound benefits. Ethical and Eco-Friendly: We are committed to sustainability and ethical practices. By choosing our organic Shatavari powder, you support responsible farming and the preservation of traditional herbal knowledge. Rejuvenating and Nourishing: Embrace the rejuvenating power of Shatavari as it aids in revitalizing the body and promoting a natural sense of vitality and energy. Resealable Packaging: Our product is packaged in a resealable bag, preserving the shatavari powder freshness and aroma. Enjoy the convenience of portioning out what you need and sealing the rest for later. Satisfaction Guarantee: We are confident with the quality of our product which is why we offer a satisfaction guarantee. This means that if you are not satisfied (although this is highly unlikely to happen), we will give you back your money with no questions asked.', 'Organic Way', 'https://i5.walmartimages.com/asr/77713827-15b8-40e9-b358-c830006abeb7.b5a9d0364326d8d1c40e36f12793becd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77713827-15b8-40e9-b358-c830006abeb7.b5a9d0364326d8d1c40e36f12793becd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77713827-15b8-40e9-b358-c830006abeb7.b5a9d0364326d8d1c40e36f12793becd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (366779633, 'Fresh Jazz Apples, 3 lb Bag', 4.76, '006602200084', 'Bring home the amazing taste of Freshness Guaranteed Jazz Apples. Tantalizingly crisp, these apples have a fruity-sweet tartness with dense flesh. The mild lemon-citrus undertones invigorate your taste buds like sweet lemonade. These are excellent snacking apples, but you can also use them in a variety of recipes. For breakfast, use these apples to make a rich and creamy yogurt parfait or a nutritious juice blend. Slice these apples and use them to add flavor to a lunchtime salad or spread peanut butter on them for a protein-filled snack. Jazz Apples can also be used in many tasty desserts like apple cobbler, apple crisp, and apple pie. Get creative in the kitchen and make your great-granny\'s homemade apple butter or cinnamon applesauce. However you choose to use them, Freshness Guaranteed Jazz Apples add flavor to any meal. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Jazz Apples, 3 lb Bag: Sweet, crisp & juicy Mild lemon-citrus undertones Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie Sweet, crisp & juicy Mild lemon-citrus undertones Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie Sweet, crisp & juicy Mild lemon-citrus undertones Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie Make a creamy smoothie or a nutritious juice blend Perfect as a healthy treat or seasonal baking ingredient Great for packing in lunches Make a creamy smoothie or a nutritious juice blend Adds flavor to a variety of recipes', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/ec343e65-963d-4f6d-9da8-6fc7bc5cbb7e.22657c5ab1909715610a8f5bb0e5553f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec343e65-963d-4f6d-9da8-6fc7bc5cbb7e.22657c5ab1909715610a8f5bb0e5553f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec343e65-963d-4f6d-9da8-6fc7bc5cbb7e.22657c5ab1909715610a8f5bb0e5553f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (366820616, '256pc On Ylw 3# Tf', 496.64, '405566876210', 'short description is not available', '256pc On Ylw 3# Tf', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (368259372, 'California Grown Peaches, per Pound', 1.58, '400094272831', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (369732855, '192pc On Swt 3# Bf', 756.48, '405532624760', 'short description is not available', '192pc On Swt 3# Bf', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (369896680, 'Butternut Squash', 1.18, '850003165011', 'short description is not available', 'Butternut Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (370087167, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094225943', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (370180308, 'Freshness Guaranteed Watermelon 38 Oz', 9.97, 'deleted_681131036917', 'short description is not available', 'Freshness Guaranteed Watermelon 38 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (370637319, 'Taylor Farms® Garden Salad 12oz Bag', 5.48, '030223011262', 'Taylor Farms Garden Salad is the next best thing to having your own backyard garden, full of fresh and nutritious veggies to eat at any time. With iceberg lettuce, carrot, and red cabbage, we have your salad basics ready to go when you are. So forget pulling weeds and let Taylor Farms Garden Salad do the work.', 'Classic Salads Includes Iceberg Lettuce, Red Cabbage & Carrots', 'Taylor Farms', 'https://i5.walmartimages.com/asr/7c02c7b6-48ec-4cc5-96d0-9316664e6b3c.a47f6739be49ea6a195388509b5836d1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c02c7b6-48ec-4cc5-96d0-9316664e6b3c.a47f6739be49ea6a195388509b5836d1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c02c7b6-48ec-4cc5-96d0-9316664e6b3c.a47f6739be49ea6a195388509b5836d1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (370914671, 'Green Bell Pepper', 0.92, 'deleted_863533000080', 'short description is not available', 'Green Bell Pepper', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (371613414, 'Granny Smith Apples 3 Lb Bag', 60, 'deleted_333830015310', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (372107328, 'California Grown Peaches, per Pound', 1.58, '400094429303', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (372635590, 'Pomegranate 3ct Bag', 2.92, '851362002085', 'short description is not available', 'Pomegranate 3ct Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (372813467, 'Green Seedless Grapes, 2 lb', 3.56, 'deleted_014668760114', 'short description is not available', 'Green Seedless Grapes, 2 lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (373016572, 'Freshness Guaranteed Cantaloupe Medium', 4.27, '262824000004', 'Discover the sweet and juicy flavor of Freshness Guaranteed Cantaloupe, a delicious and refreshing fruit that\'s perfect for any occasion. Our Cantaloups are carefully selected to ensure the highest quality and freshness. Whether you\'re adding it to a fruit salad or enjoying it as a healthy snack, Cantaloup is the perfect choice for anyone who loves the taste of fresh, natural fruit. Order now and experience the irresistible flavor of Cantaloup for yourself!', 'Freshness Guaranteed Cantaloupe Medium Contains Cantaloupe Packed in a secure plastic bowl with lid Portable and convenient Provides many essential nutrients', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (373238289, 'Fresh Limes, 1 lb Bag', 2.48, '729062142724', 'Add zest and flavor to your meals and beverages with these Marketside Organic Limes. Limes are a key ingredient in many recipes, from homemade salsa to chicken dishes. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. These limes are sold in a one-pound bag, so you\'ll have plenty for all your culinary creations. Enjoy the refreshing, tart flavor of Marketside Organic Limes.Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Limes, 1 each: Juicy and fresh, packed with vitamin C Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies and tarts Refreshing, tart flavor', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f072f9e2-a6a0-4eaa-af29-7c2a03f7a91a.106bb77212a805ddc392bdd73180acd9.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f072f9e2-a6a0-4eaa-af29-7c2a03f7a91a.106bb77212a805ddc392bdd73180acd9.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f072f9e2-a6a0-4eaa-af29-7c2a03f7a91a.106bb77212a805ddc392bdd73180acd9.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (373294615, 'Fresh Fieldpack Unbranded Japanese Eggplant', 3.48, '000000046015', 'Savor the unique flavor and texture of our Fresh Whole Japanese Eggplant, a versatile and delectable addition to your culinary adventures. These slender, glossy purple eggplants boast a delicate, mildly sweet taste, and a tender, creamy texture when cooked. Ideal for a variety of dishes, from traditional Japanese cuisine to modern fusion recipes, our Japanese Eggplant can be grilled, roasted, or stir-fried to perfection. Elevate your meals with the exceptional taste and versatility of our exquisite Japanese Eggplant.', 'Fieldpack Unbranded Japanese Eggplant Savor the unique flavor and texture of our Fresh Whole Japanese Eggplant, a versatile and delectable addition to your culinary adventures. These slender, glossy purple eggplants boast a delicate, mildly sweet taste, and a tender, creamy texture when cooked. Ideal for a variety of dishes, from traditional Japanese cuisine to modern fusion recipes, our Japanese Eggplant can be grilled, roasted, or stir-fried to perfection. Elevate your meals with the exceptional taste and versatility of our exquisite Japanese Eggplant.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7cdc4c15-cec9-40f7-95f3-92171c36cf31.f7fb6b8fb72fbf416a1eb47bfbec9f3d.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7cdc4c15-cec9-40f7-95f3-92171c36cf31.f7fb6b8fb72fbf416a1eb47bfbec9f3d.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7cdc4c15-cec9-40f7-95f3-92171c36cf31.f7fb6b8fb72fbf416a1eb47bfbec9f3d.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (373349665, 'Fieldpack Unbranded Collard Greens', 2.88, 'deleted_659389000301', 'short description is not available', 'Fieldpack Unbranded Collard Greens', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (374006257, 'Crunch Pak Fresh Sweet Apple Slices, Family Size, 14 oz Resealable Bag', 3.97, '732313001701', 'Savor the fresh sweet taste of Crunch Pak Sweet Apple Slices. These perfectly sweet, sliced apples are the ultimate quick, easy, and healthy treat. Serve with a dollop of peanut butter and enjoy as a healthy snack that both kids and adults will love. Chop the apples up and add them to a salad with walnut, mixed greens, and a poppy seed vinaigrette for a crunchy delicious salad that you can enjoy for lunch or dinner. Add it to your favorite smoothie or juice blend for a morning pick me up to get your day started right. Throw some in a bag in with your lunch for a healthy side, take with you as you go travel or pack a couple of bags and take on a picnic with your family. Enjoy the convenience and taste of Crunch Pak Sweet Apple Slices in a Resealable Bag. Only 80 calories per serving. No added sugars.', 'Crunch Pak Fresh Sweet Apple Slices Perfect on-the-go healthy snack Good source of vitamin C Equals 1.3 lbs of whole apples 80 calories per serving No added sugars Conveniently Sliced', 'Crunch Pak', 'https://i5.walmartimages.com/asr/31107388-55e1-4f11-ab07-1b8d71532953.ed1d75cd1d8bcedda1fb600b03234061.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/31107388-55e1-4f11-ab07-1b8d71532953.ed1d75cd1d8bcedda1fb600b03234061.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/31107388-55e1-4f11-ab07-1b8d71532953.ed1d75cd1d8bcedda1fb600b03234061.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (374134157, 'Fresh Red Seedless Grapes', 2.88, 'deleted_810232031006', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (374733287, 'Orange Bell Pepper', 1.48, 'deleted_850010807027', 'short description is not available', 'Orange Bell Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (374758099, 'Fresh Green Seedless Grapes 32oz', 3.48, 'deleted_813526013030', 'short description is not available', 'Fresh Green Seedless Grapes 32oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (374791412, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094696477', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (374906078, 'Spaghetti Squash', 1.18, '814563016558', 'short description is not available', 'Spaghetti Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/a92f2211-55c1-46af-8bbe-27fb4c96cc13_2.c5a1e54ea0d4625f5368e032ffe9c091.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a92f2211-55c1-46af-8bbe-27fb4c96cc13_2.c5a1e54ea0d4625f5368e032ffe9c091.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a92f2211-55c1-46af-8bbe-27fb4c96cc13_2.c5a1e54ea0d4625f5368e032ffe9c091.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (375150384, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094208793', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (375455604, 'Fieldpack Unbranded Fresh Strawberries 1#', 3.27, '400094992715', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (375482396, 'Services Reduced Program Dept 94', 0.03, '251999000001', 'short description is not available', 'Services Reduced Program Dept 94', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (376807222, '256pc On Ylw 3# Nv', 496.64, '405564999324', 'short description is not available', '256pc On Ylw 3# Nv', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (378097295, 'Fresh Red Seedless Grapes', 1.99, 'deleted_786066002010', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (378691364, '220pc On Vid 3# Bf', 721.6, '405540721888', 'short description is not available', '220pc On Vid 3# Bf', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (378931643, 'Sunset® Lolli Bombs® Tomatoes 12oz', 3.98, 'deleted_699058241802', 'Sunset® Lolli Bombs® Tomatoes 12oz', 'On the Vine', 'Sunsets', 'https://i5.walmartimages.com/asr/71dfe590-2d7b-4f86-8d17-4cf8fd13e6fb.43f98f988ce6c7013929357a01b5db90.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71dfe590-2d7b-4f86-8d17-4cf8fd13e6fb.43f98f988ce6c7013929357a01b5db90.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71dfe590-2d7b-4f86-8d17-4cf8fd13e6fb.43f98f988ce6c7013929357a01b5db90.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (378975500, 'AVO BAG 10/4 40 MXGF', 3.28, 'deleted_850758006584', 'Avocados aren’t just great-tasting fresh produce, but they are a nutrient-dense food enjoyed around the world. Because of the creamy texture and mild flavor of Hass avocados, they are a versatile ingredient that can be used in many different types of recipes and dishes. Not only are our jumbo avocado a great ingredient to use in numerous ways, but it is also a healthy food that contributes unsaturated “good” fats and almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9. Jumbo ripe avocados will have dark green to nearly black skin color, a bumpy skin texture and should yield to gentle pressure without leaving indentations or feeling mushy. Avocados with a slightly bumpy texture should be ripe in 1 to 2 days. They will also be somewhat firm and have a dark green and black speckled color. You’ll be ready to enjoy tasty avocados on their own or as part of a salad, fresh guacamole, taco, burrito or avocado toast. The possibilities are deliciously endless.', 'Large Avocado 4 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (379562771, 'Mini Cucumbers 16 Oz', 2.23, '033383001449', 'short description is not available', 'Mini Cucumbers 16 Oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (380396374, 'Sweet Potatoes Whole Fresh, 3 lb Bag', 4.88, 'deleted_819614010059', 'Create something wholesome and delicious with these Sweet Potatoes. Sometimes referred to as yams, these versatile vegetables can be used multiple ways: to make savory sides or sweet treats. Try them roasted or baked for a tasty addition to any dish. You could also use them to make seasoned sweet potato fries or a flavorful hummus dip for your next party. If you want to satisfy your sweet tooth, try them in a traditional sweet potato casserole or use them to make sweet potato and brown sugar ice cream. The mouthwatering possibilities are endless with this hearty fresh produce vegetable. Add something amazing to your meals with this three-pound bag of Sweet Potatoes.', 'Sweet Potatoes Whole Fresh, 3 lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d6ffc4ab-e36b-43d4-886c-5e5e022d32a6_2.9eb8a55e9bbca5ef2220ed8d9562a9fe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d6ffc4ab-e36b-43d4-886c-5e5e022d32a6_2.9eb8a55e9bbca5ef2220ed8d9562a9fe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d6ffc4ab-e36b-43d4-886c-5e5e022d32a6_2.9eb8a55e9bbca5ef2220ed8d9562a9fe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (380524066, 'Tasteful Selection Organic Honey Gold Potatoes 3 lb', 5.97, '826088479305', 'Plastic bag. Tasteful Selections®, the absolute leader and pioneer in the category of best-quality, bite-size baby potatoes, offers an expanded, year-round organics program. More varieties, more pack sizes, same great taste and quality. Our three-pound bags are available in Fresh Honey Gold®, Ruby Sensation® and the new offering, Tasteful Selections organic russet potato. Find this at your local Walmart, cook as you would like.', 'Organic 80 Calories 2grams Fresh and Whole Protein Source of potassium NON GMO', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/19507099-3645-48ee-b9d5-48f8d314c124.1bf1156d4b3f5fb5f80c187cd3270ea4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19507099-3645-48ee-b9d5-48f8d314c124.1bf1156d4b3f5fb5f80c187cd3270ea4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19507099-3645-48ee-b9d5-48f8d314c124.1bf1156d4b3f5fb5f80c187cd3270ea4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (381105260, 'Fresh Black Seedless Grapes, Bag (2.25 lbs/Bag Est.)', 4.23, '895397001187', 'Treat yourself to the delicious, juicy flavor of Fresh Black Seedless Grapes. These grapes are bursting with flavor and are completely seedless, so you can easily enjoy a handful as a fresh snack any time of day. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Black Seedless Grapes.', 'Fresh Black Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/eb0a9b77-42c5-48ca-9571-779cd360ffa2.49484d60f95a009eb2be78d40af6694a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eb0a9b77-42c5-48ca-9571-779cd360ffa2.49484d60f95a009eb2be78d40af6694a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eb0a9b77-42c5-48ca-9571-779cd360ffa2.49484d60f95a009eb2be78d40af6694a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (381125064, 'Garlic Bulb Per Each', 4.98, 'deleted_070969003305', 'short description is not available', 'Garlic Bulb Per Each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1485c5d3-d9ec-4653-94da-8efb197f6aa8.43926b1e056c8ed3d5682ffbe6f050c2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1485c5d3-d9ec-4653-94da-8efb197f6aa8.43926b1e056c8ed3d5682ffbe6f050c2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1485c5d3-d9ec-4653-94da-8efb197f6aa8.43926b1e056c8ed3d5682ffbe6f050c2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (381290351, 'Athena Cantaloupe', 3.28, 'deleted_850212002152', 'short description is not available', 'Athena Cantaloupe', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (381973379, 'Sunripe Yellow Grape Tomatoes, 10.0 OZ', 2.19, '033383655970', 'Sunripe Yellow Grape Tomatoes. Sun Ripe® Yellow Grape Tomatoes. Following the Sun. Leading in Quality®. I US dry pint (10 oz). www.sunripeproduce.com.', 'Sunripe Yellow Grape Tomatoes, 10.0 OZ', 'Sunripe', 'https://i5.walmartimages.com/asr/998a195b-4b1f-4ee5-bbec-64c6881bbd4e_1.1115da65814ea65a26219bf17e1e5ffe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/998a195b-4b1f-4ee5-bbec-64c6881bbd4e_1.1115da65814ea65a26219bf17e1e5ffe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/998a195b-4b1f-4ee5-bbec-64c6881bbd4e_1.1115da65814ea65a26219bf17e1e5ffe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (383005295, 'Freshness Guaranteed Sliced Brown Mushrooms 16oz', 4.24, 'deleted_699058820113', 'short description is not available', 'Freshness Guaranteed Sliced Brown Mushrooms 16oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (383156618, 'Organic Gummyberries Grapes, 1 Lb', 3.48, 'deleted_816426012790', 'short description is not available', 'Organic Gummyberries Grapes, 1 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (383769191, 'Chopped Red/yellow/green Bell Peppers', 2.58, '705393300231', 'short description is not available', 'Chopped Red/yellow/green Bell Peppers', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (384075474, 'Golden Russet Potatoes 10 Lb Bag', 3.77, '021130530564', 'short description is not available', 'Golden Russet Potatoes 10 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (384271244, 'Premium Bananas', 0.49, 'deleted_405821600871', 'short description is not available', 'Premium Bananas', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (384392993, 'Services Reduced Program Dept 94', 0.01, '260615000004', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', 'https://i5.walmartimages.com/asr/06992888-0679-4f54-a914-97768c43ac40.278cc0fe5237173d372d79524379274d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/06992888-0679-4f54-a914-97768c43ac40.278cc0fe5237173d372d79524379274d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/06992888-0679-4f54-a914-97768c43ac40.278cc0fe5237173d372d79524379274d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (384521299, 'Fresh Kiwi Puerto Rico, Each', 0.57, '405980551571', 'Kiwi, or kiwifruit, is a small fruit native to China with a unique tart-sweet flavor and a vibrant green flesh covered by a fuzzy brown skin. It is highly nutritious, packed with essential nutrients like vitamins C and E, potassium, and dietary fiber. Kiwi is often enjoyed raw, in salads, smoothies, or desserts. Its high vitamin C content surpasses the daily recommended intake, and it also contains beneficial antioxidants and serotonin.', 'Fresh kiwi, also known as kiwifruit or Chinese gooseberry, is a small, fuzzy, brown-skinned fruit native to China but now primarily grown in New Zealand, Italy, and California (Genus Epithet). Its vibrant green flesh offers a unique tart-sweet flavor and is encased by a thin, edible skin. Kiwi is highly nutritious and is often enjoyed raw in salads, smoothies, or simply scooped straight from the skin. Taste and Culinary Uses: Kiwi has a distinctive tart-sweet flavor, often described as a mix of strawberries, melons, and bananas. Its bright green flesh and black seeds make it visually appealing, and it can be used in salads, desserts, smoothies, or served with yogurt. Kiwi can also be used as a tenderizer for meats due to its high content of the enzyme actinidin. Health Benefits: Kiwi is packed with essential nutrients such as vitamins C and E, potassium, and dietary fiber. It is particularly known for its high vitamin C content, with just one kiwi providing more than the daily recommended intake. Kiwi also contains antioxidants and serotonin, which can improve sleep quality. Cultivation and Harvest: Kiwi plants are vine-grown, often requiring trellising for support. They thrive in temperate climates with plenty of sunshine and well-drained soil. Kiwi fruit is typically harvested before it is fully ripe, as it continues to ripen after being picked. The fruit is ready to eat when it yields to gentle pressure, similar to a ripe peach.', 'Unbranded', 'https://i5.walmartimages.com/asr/da37e01a-625d-449f-b01b-ec9cac9ae320.d0a65591ed49fbd83843a2b9434eb2c1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/da37e01a-625d-449f-b01b-ec9cac9ae320.d0a65591ed49fbd83843a2b9434eb2c1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/da37e01a-625d-449f-b01b-ec9cac9ae320.d0a65591ed49fbd83843a2b9434eb2c1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (385190443, 'Fresh Organic Limes, 1 lb Bag', 2.98, 'deleted_744430275514', 'Add zest and flavor to your meals and beverages with these Marketside Organic Limes. Limes are a key ingredient in many recipes, from homemade salsa to chicken dishes. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. These limes are sold in a one-pound bag, so you\'ll have plenty for all your culinary creations. Enjoy the refreshing, tart flavor of Marketside Organic Limes.Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Fresh and juicy limes USDA organic Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies, and tarts Refreshing, tart flavor', 'Fresh Produce', 'https://i5.walmartimages.com/asr/99fcff31-ba31-463d-b48e-a1a4bae790e6.5f21184a1be56cc76c91d42deb49313d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/99fcff31-ba31-463d-b48e-a1a4bae790e6.5f21184a1be56cc76c91d42deb49313d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/99fcff31-ba31-463d-b48e-a1a4bae790e6.5f21184a1be56cc76c91d42deb49313d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (385678898, '170pc Pie Pumpkin', 445.4, '405954196524', 'short description is not available', '170pc Pie Pumpkin', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (385888497, 'Freshness Guaranteed Pineapple Chunks 16oz', 4.97, 'deleted_681131036580', 'short description is not available', 'Freshness Guaranteed Pineapple Chunks 16oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (385893392, 'Organic Potato Tray Kit Zesty Southwest', 4.96, '097419041182', 'Organic Southwest Fresh Potato Kit, 1 Each', 'Organic Potato Tray Kit Southwest Fresh', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b376c185-2447-4e18-9ec2-50f2ccbf426b_1.b2489a7a009459ee493fcbafe89c8319.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b376c185-2447-4e18-9ec2-50f2ccbf426b_1.b2489a7a009459ee493fcbafe89c8319.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b376c185-2447-4e18-9ec2-50f2ccbf426b_1.b2489a7a009459ee493fcbafe89c8319.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (386140135, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094987520', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (386164726, 'Sailing, Dried Black Fungus, 5 Pound', 17.7, '023452800424', 'Black/White Fungus Strip', 'Sailing, Dried Black Fungus, 5 Pound', 'Sailing', 'https://i5.walmartimages.com/asr/83b30129-4b86-43f2-9241-e786c26654c9_1.7db764965ada69394050bb8ad22a1b8f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/83b30129-4b86-43f2-9241-e786c26654c9_1.7db764965ada69394050bb8ad22a1b8f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/83b30129-4b86-43f2-9241-e786c26654c9_1.7db764965ada69394050bb8ad22a1b8f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (386250869, 'Fresh Washington Grown Ruby Cherries, 12 Oz.', 5.98, '888289403169', 'Fresh Washington Grown Ruby Cherries, 12 Oz.', 'Fresh Washington Grown Ruby Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (386341349, 'Fresh Cotton Candy Grapes, 1 lb Package', 3.48, '814563010716', 'Fresh Cotton Candy Grapes are a delightful and unique natural treat, offering a mouthwatering cotton candy flavor in every bite. These specially grown grapes perfectly capture the essence of the classic fairground treat, providing a sweet and satisfying experience that will surprise and delight both children and adults alike. Enjoy the whimsical taste sensation of cotton candy grapes - a fun, healthy, and deliciously indulgent snack that brings joy to your taste buds.', 'Fresh Produce Cotton Candy Green Grapes Grapes Candy Variety Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/17dc95aa-4c36-43cc-8ba9-620d5e40fa7a.9c91b646b33a734d6401d5caeae395dd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/17dc95aa-4c36-43cc-8ba9-620d5e40fa7a.9c91b646b33a734d6401d5caeae395dd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/17dc95aa-4c36-43cc-8ba9-620d5e40fa7a.9c91b646b33a734d6401d5caeae395dd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (386372690, 'Services Reduced Program Dept 94', 0.01, '251996000004', 'short description is not available', 'Services Reduced Program Dept 94', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (386513758, 'Freshness Guaranteed Whole Brown Mushrooms 8oz', 2.28, 'deleted_084348675649', 'short description is not available', 'Freshness Guaranteed Whole Brown Mushrooms 8oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (386600698, 'Ogp Apple Cosmic Crisp Sample', 0.03, '405929726329', 'short description is not available', 'Ogp Apple Cosmic Crisp Sample', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ec4ef448-98bc-4f90-b1ea-f1175ca8896c.e377c23707f42b1c057eef7a5f650a15.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec4ef448-98bc-4f90-b1ea-f1175ca8896c.e377c23707f42b1c057eef7a5f650a15.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec4ef448-98bc-4f90-b1ea-f1175ca8896c.e377c23707f42b1c057eef7a5f650a15.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (386603598, 'Organic Peach, 2 lb Bag', 5.66, 'deleted_788814322050', 'Fresh Organic Peaches 2lb Bag', 'Fresh Organic Peaches 2lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (386660935, '150pc On Vid 4# Ga', 591, '405504068950', 'short description is not available', '150pc On Vid 4# Ga', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (386973081, 'California Grown Peaches, per Pound', 1.58, '400094834503', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (387515724, 'Avo Mex HA LB 8/4 32 1', 3.48, 'deleted_887214001470', 'Bag of 4 Avocados', 'Large Avocado 4 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (387924353, 'Organic Yellow Squash', 2.96, '741243003020', 'Organic Yellow Squash is an extremely versatile vegetable that is a must-have for every cook. This yellow squash is USDA certified organic, so you know you are getting a wholesome vegetable. You can prepare the squash in many different ways. Saute it with butter and serve with your choice of protein, like pork chops or grilled chicken breast. You can slice it and fry it up Southern-style, or you can incorporate it into a casserole for a little comfort food. For a sweet treat use the squash to bake a decadent lemon and yellow squash muffins, you can through in some blueberries for a fresh addition. The culinary possibilities are endless with Organic Yellow Squash.', 'Organic Yellow Squash', 'Wholesum', 'https://i5.walmartimages.com/asr/95621439-ba87-4d86-949f-9439f6d1cd94.4ae5136ff13cc71e137af2c9fab4192d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95621439-ba87-4d86-949f-9439f6d1cd94.4ae5136ff13cc71e137af2c9fab4192d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95621439-ba87-4d86-949f-9439f6d1cd94.4ae5136ff13cc71e137af2c9fab4192d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (388072498, '840pc Pomegranate', 1663.2, '405719819156', 'short description is not available', '840pc Pomegranate', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (388472287, 'Earthbound Farms Fresh Organic Vegetable Medley Blend, 9 oz', 3.98, '032601952754', 'What\'s better than organic vegetables? Earthbound Farms Organic Vegetable Medley, a medley of three organic vegetables! All washed, prepped, and ready to eat, this organic medley contains fresh broccoli florets, fresh cauliflower florets, and fresh baby carrots. The nine-ounce package contains about three servings. Each three-ounce serving is only 30 calories and gives you two grams of fiber and two grams of protein. To serve, use this versatile mix as the single easiest way to lay out your own vegetable tray the next time you\'re expecting company, or simply eat it right out of the bag with your favorite dip. This combination is also great in colorful stir fry recipes. Toss into a hot pan or wok with oil and your favorite tangy stir fry sauce, and serve over rice. Or, for a cheesier side dish, try baking the Earthbound Farms Organic Vegetable Medley with a white sauce or cheese sauce and feel great about the dish you\'re serving up tonight.', 'Earthbound Farms Fresh Organic Vegetable Medley Blend in a 9-ounce bag Ready to eat on the go Recipe-ready vegetables Washed and ready to enjoy Fresh organic snack Make your own veggie tray', 'Earthbound Farm', 'https://i5.walmartimages.com/asr/a65f2c68-5a88-4ada-8f12-1184306f59a3.5bbb011cd33a5d92a64c58e37cb40ad8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a65f2c68-5a88-4ada-8f12-1184306f59a3.5bbb011cd33a5d92a64c58e37cb40ad8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a65f2c68-5a88-4ada-8f12-1184306f59a3.5bbb011cd33a5d92a64c58e37cb40ad8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (388605463, 'Yellow Flesh Peaches, per Pound', 1.58, '400094385937', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (388803367, 'Fresh Medley Tomato, 10 oz Package', 3.48, 'deleted_669058801245', 'Bring the fresh, delicious taste of Medley Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Medley Tomatoes.', 'Medley Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (389113239, 'Easy Creations, Garlic Parsley Parmesan Potato Tray', 1.97, '847597010476', 'Easy Creations, Garlic Parsley Parmesan Potato Tray', 'Garlic Parsley Parmesan Potato Tray Microwavable and ready in 7 min! Freshly packed Idaho potatoes Seasoning Packet included', 'Fresh Produce', 'https://i5.walmartimages.com/asr/19bb8c75-a634-4a65-b5fd-98f30fbf3c30.41d7ac64864949078a1b662803764c33.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19bb8c75-a634-4a65-b5fd-98f30fbf3c30.41d7ac64864949078a1b662803764c33.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19bb8c75-a634-4a65-b5fd-98f30fbf3c30.41d7ac64864949078a1b662803764c33.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (389166848, 'Med Apcc 5pk', 3.98, '732313001558', 'short description is not available', 'Med Apcc 5pk', 'Unbranded', 'https://i5.walmartimages.com/asr/83c2d36a-644f-445f-a816-6004e1e0b527.3828cc236370c7339f87d713a2cbead4.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/83c2d36a-644f-445f-a816-6004e1e0b527.3828cc236370c7339f87d713a2cbead4.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/83c2d36a-644f-445f-a816-6004e1e0b527.3828cc236370c7339f87d713a2cbead4.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (390010898, 'ORG AVO 10/3 60 PE', 3.23, 'deleted_761010112823', 'ORG AVO 10/3 60 PE', 'ORG AVO 10/3 60 PE', 'Mission Produce', 'https://i5.walmartimages.com/asr/82973198-5372-4345-a074-3a84defb8890.d0d7ad4ce1446c8fa17099765a91aef5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/82973198-5372-4345-a074-3a84defb8890.d0d7ad4ce1446c8fa17099765a91aef5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/82973198-5372-4345-a074-3a84defb8890.d0d7ad4ce1446c8fa17099765a91aef5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (390125991, 'SWEET MINI PEPPERS', 2.88, 'deleted_689259003453', 'Whether you’re looking for a healthy and simple on-the-go snack, or a fresh new ingredient to brighten up an appetizer, Mini Sweet Peppers are a nutritious and delicious option you are sure to enjoy. These vibrant, snack-size Peppers are easy to add to school lunches, appetizers, salads, and so much more. It takes so little time to prepare Mini Sweet Peppers for snacking or serving that they will easily become your favorite fresh ingredient! Their crisp bite, sweet flavor, and satisfying crunch will always hit the spot (even for the pickiest eaters). Although Mini Sweet Peppers are on the smaller end of the Sweet Pepper family, they are still a great source of essential nutrients including vitamin C. And we can’t forget about where they come from: greenhouse-grown in a controlled environment, Mini Sweet Peppers are given the utmost care before being picked, packed, and shipped to your local Walmart store', 'Sweet Mini Peppers', 'Produce Unbranded', 'https://i5.walmartimages.com/asr/8157ba8c-67d0-44fc-acd4-e1d3ce9e4c38.9ff81bf52c35fd82f0039571bdd6db5f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8157ba8c-67d0-44fc-acd4-e1d3ce9e4c38.9ff81bf52c35fd82f0039571bdd6db5f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8157ba8c-67d0-44fc-acd4-e1d3ce9e4c38.9ff81bf52c35fd82f0039571bdd6db5f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (390408133, 'Walmart Produce Seasonal Fruit Salad Blend 10 Oz', 2.98, '826766254262', 'short description is not available', 'Walmart Produce Seasonal Fruit Salad Blend 10 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (390701600, 'Diced Yellow Onions', 2, 'deleted_705393300224', 'short description is not available', 'Diced Yellow Onions', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (390793983, 'Services Reduced Program Dept 94', 0.01, '251866000004', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (391165890, 'Fresh Dark Sweet Oregon Cherries, Half Pint', 2.98, '850023002136', 'Fresh Dark Sweet Oregon Cherries, Half Pint', 'Fresh Dark Sweet Oregon Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (391524014, 'Watermelon Seedless', 4.48, '405504859862', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (391727075, 'Watermelon Seedless', 5.48, 'deleted_851354002321', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (392853789, 'Revol Greens Romaine Crunch Salad, 4.0 oz Clam Shell, Fresh', 2.98, '865638000439', 'Revol Greens® Romaine Crunch is a blend of crisp romaine and green leaf lettuces. All Revol Greens® lettuce is grown inside a greenhouse and harvested daily, 365 days a year. Our regional greenhouse locations allow us to reach nearly all our customers within 24-48 hours of harvest, so that our greens arrive incredibly fresh and at peak nutritional value. Find this at your local Walmart.', 'Locally grown in a protected greenhouse environment Sustainably grown with 90% less water than field grown lettuce Non-GMO', 'Revol Greens', 'https://i5.walmartimages.com/asr/da1b3545-0363-44c6-bf67-a6488d8c89c3.b5fbe5956680888d78074502d5df6cbd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/da1b3545-0363-44c6-bf67-a6488d8c89c3.b5fbe5956680888d78074502d5df6cbd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/da1b3545-0363-44c6-bf67-a6488d8c89c3.b5fbe5956680888d78074502d5df6cbd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (392866102, 'Pink Apples, Each', 1.68, '', 'short description is not available', 'Pink Apples, Each', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (393028407, 'Corn Bulk', 0.5, 'deleted_860001826838', 'short description is not available', 'Corn Bulk', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (393109916, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, '400094459997', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (393611135, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094467015', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (393863679, 'Walmart Produce Pineapple Blueberry 16 Oz', 4.48, '826766252121', 'short description is not available', 'Walmart Produce Pineapple Blueberry 16 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (394081986, 'Services Reduced Program Dept 94', 0.03, '251992000008', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (395005783, 'Large Avocado 3 Count Bag', 4.48, 'deleted_636442400025', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (395044591, 'Sunset You Make Me Spicy Arrabbiata Pasta Kit, 1.5 lb Package', 4.98, '057836840010', 'Eco flavor bowl™', 'Cook time 11 minutes Serves 2 Hot! Tomatoes, pasta, spices & infused oil Chef Gourmet Inspired', 'Fresh Produce', 'https://i5.walmartimages.com/asr/792b4d6e-b17e-41e2-aebc-75bc51b56faa.6d563efdde32f3a8dc410677e323a582.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/792b4d6e-b17e-41e2-aebc-75bc51b56faa.6d563efdde32f3a8dc410677e323a582.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/792b4d6e-b17e-41e2-aebc-75bc51b56faa.6d563efdde32f3a8dc410677e323a582.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (395175198, 'Granny Smith Apples 3 Lb Bag', 3.88, '', 'short description is not available', 'Granny Smith Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (395538498, 'Marketside Fresh Cut Pineapple, 10 oz Tray', 3.72, '681131180429', 'Experience a burst of tropical flavors with these Marketside Pineapple Chunks. The pre-cut chunks of ripe pineapple are juicy and sweet to taste and are packed in its own juice. Carry them with you and eat them straight out of the tray any time you want, at home or on-the-go. You can also use them to top desserts and ice creams, in a fruit salad or blend them with milk to make milkshakes. Add some fresh fruit to your daily menu today with these Marketside Pineapple Chunks. Marketside provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Marketside item.', 'Marketside Pineapple 10 oz Comes in a re-closable container to help maintain freshness Great for breakfast, lunch, dessert, or when you want a snack No preservatives, artificial colors or artificial flavors Convenient and portable Share with friends and family or keep for yourself Make a fruit bowl topped with whipped cream or a yogurt parfait Enjoy on their own or in a variety of recipes', 'Marketside', 'https://i5.walmartimages.com/asr/d370fb9e-85ea-41f2-9521-ea0457694fde.606024c46189cc90a16e547c839ca17a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d370fb9e-85ea-41f2-9521-ea0457694fde.606024c46189cc90a16e547c839ca17a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d370fb9e-85ea-41f2-9521-ea0457694fde.606024c46189cc90a16e547c839ca17a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (396023615, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094693469', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (396378609, 'Red Bell Pepper, each', 1.38, 'deleted_856745008043', 'Enhance your meals with the delicious flavor of Red Bell Peppers. This vegetable contains essential vitamins such as A and C, and minerals including calcium and magnesium. Red bell pepper, also known as red capsicum, has a crisp flavor that enhances a variety of recipes. Dice bell peppers and put them in a hearty chili, slice them and add to a deli sandwich, saute them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out red bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper that will have the family asking for seconds. Lunches and dinners are more scrumptious when fresh red peppers are part of the meal. They also taste delicious raw alongside other vegetables. Add your favorite dip for a healthy, crunchy crudite. Cooked or uncooked, Red Bell Peppers are an excellent item to have on hand.', 'Red Bell Pepper, 1 each: Naturally low in calories Exceptionally rich in vitamin C and other antioxidants Delicious cooked or uncooked Create delicious recipes with fresh red peppers', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/3e7798c2-b396-47ca-af17-78dfa3ce2b4a_2.013ab2925acb792bc065227f97aac0da.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e7798c2-b396-47ca-af17-78dfa3ce2b4a_2.013ab2925acb792bc065227f97aac0da.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e7798c2-b396-47ca-af17-78dfa3ce2b4a_2.013ab2925acb792bc065227f97aac0da.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (396556953, 'Fresh Opal Apples, 2 lb Bag', 3.97, '885880029637', 'These sunny fruits are like no other! Opal® apples are beautifully bright yellow with a distinctively crunchy texture and a sweet, tangy flavor. Sweet, crisp, and naturally non-browning, Opal® apples won\'t brown after cutting making them snack time heroes by staying fresh all day long. Opal® apples are also known as the apple that gives back, as they sponsor the Youth Make a Difference initiative to address food issues in communities across the U.S. Taste the difference and make a difference with your purchase of Opal® apples.', 'Crisp and Sweet Naturally Non-Browning Non-GMO Certified Bright Golden Color', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4fd38e8b-b132-437c-9033-fb23bdafd879.e8761603ae728940f2bcd989fa0c04e8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4fd38e8b-b132-437c-9033-fb23bdafd879.e8761603ae728940f2bcd989fa0c04e8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4fd38e8b-b132-437c-9033-fb23bdafd879.e8761603ae728940f2bcd989fa0c04e8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (396771743, 'Organic Yellow Squash 2pk', 2.96, 'deleted_810083650296', 'short description is not available', 'Organic Yellow Squash 2pk', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (396803200, 'Fresh Purple Cauliflower, Each', 8.47, '405779412335', 'Fresh Colorful Cauliflower - a vibrant twist on the classic white variety. With the same great taste, this cauliflower offers an extra antioxidant boost from its purple pigment. Add a pop of color to your plate effortlessly with this nutritious and delicious option. Brighten up your meals and enjoy the benefits of a colorful and nutritious addition to your diet. Try our Colorful Cauliflower today and elevate your culinary experience.', 'Protein, carbohydrates Ample Vitamin C antioxidant contains fiber', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (396955945, 'Orange Cara Cara', 1.37, '405997197786', 'short description is not available', 'Orange Cara Cara', 'Unbranded', 'https://i5.walmartimages.com/asr/d07d095b-7b4e-4417-a16f-419371845419.ca8d3d6fc5075f1203613e3b19f50f69.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d07d095b-7b4e-4417-a16f-419371845419.ca8d3d6fc5075f1203613e3b19f50f69.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d07d095b-7b4e-4417-a16f-419371845419.ca8d3d6fc5075f1203613e3b19f50f69.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (397097321, '100pc Pto Rst 10# Bw', 494, '405522651080', 'short description is not available', '100pc Pto Rst 10# Bw', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (397430273, 'White Beech Mushroom, 2.5 Oz.', 3.98, 'deleted_070475659669', 'White Beech Mushroom, 2.5 Oz.', '2.5 Oz White Beech Mushroom', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (397537342, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094226964', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (397638417, 'Fresh Black Seedless Grapes', 1.64, '', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (397643767, '200pc Pto Ykn/red Co', 824, '405501527962', 'short description is not available', '200pc Pto Ykn/red Co', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (398088540, 'Freshness Guaranteed Fresh Black Seedless Grapes', 1.88, '', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (398400923, 'Russet Potatoes 10 Lb Bag', 4.94, 'deleted_045009241269', 'short description is not available', 'Russet Potatoes 10 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (398496442, 'Freshness Guaranteed Kiwi Pineapple Grape Strawberry Blend, 16 oz', 5.98, '681131355124', 'Enjoy the sweet, tropical flavor of Freshness Guaranteed Kiwi Pineapple Grape Strawberry Blend. These precut fruits are great for breakfast, lunch, dessert, or when you want a snack. A delicious blend of pineapple, strawberries, kiwis, and grapes this container of fruit is the perfect mix of both sweet and tart . You can eat the fruit right out of the container or infuse them with water and mint for a refreshing drink. With 16-ounces in each container, this fruit is great for sharing with friends and family or keep it for yourself. It comes in a reclosable container to help maintain freshness. Bring home Freshness Guaranteed Pineapple Chunks today for a refreshing, healthy treat. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Spark Fresh item.', 'Freshness Guaranteed Kiwi Pine Grape Strawberry Blend, 16 oz: Sweet and tart treat Great for breakfast, lunch, dessert, or when you want a snack delicious blend of pineapple, strawberries, kiwis, and grapes Enjoy right out of the container or infuse with water and mint Share with friends and family or keep for yourself Comes in a reclosable container to help maintain freshness', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8de7bcb1-53b7-4790-9cc3-8f6cddbb2358.351f8dccfb1da06990642573ef857cb8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8de7bcb1-53b7-4790-9cc3-8f6cddbb2358.351f8dccfb1da06990642573ef857cb8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8de7bcb1-53b7-4790-9cc3-8f6cddbb2358.351f8dccfb1da06990642573ef857cb8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (398550220, 'Manzana Lil Empire Manzana Smitten 2lbs', 3.37, '847473005510', 'Smitten® apples have a dense, crunchy texture and sweet-tart flavor suited for a wide array of fresh and cooked preparations.', 'Apples 2-3/8 inch min. dia. Once bitten, forever smitten. Be Ready to Fall in Love: Great taste; sweet and juicy; crisp and crunchy. From our orchards with love. - Xoxo. Coated with food grade vegetable and/or shellac based wax to maintain freshness. Meets or exceeds US extra fancy. www.cmiorchards.com. www.smittenapple.com. Twitter: (at)smittenapple. Product of USA.', 'Lil Empire', 'https://i5.walmartimages.com/asr/f56d0396-cf99-4c92-84c6-3af64b72c4ea.112831b09c059141ff3a41237e0ba879.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f56d0396-cf99-4c92-84c6-3af64b72c4ea.112831b09c059141ff3a41237e0ba879.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f56d0396-cf99-4c92-84c6-3af64b72c4ea.112831b09c059141ff3a41237e0ba879.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (398982868, 'Yellow Flesh Peaches, per Pound', 1.58, '400094782996', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (399274441, 'Yellow Flesh Peaches, per Pound', 1.58, '400094347782', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (399353122, 'Seasonal Fruit Medley 14 Oz', 4.68, '795631805024', 'short description is not available', 'Seasonal Fruit Medley 14 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (399528184, 'Sweet Corn Mais Sucre', 3.97, 'deleted_073150170664', 'short description is not available', 'Sweet Corn Mais Sucre', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/0af42011-b20a-4738-92e3-c04b0ceb061e.2e1583e8a8a1bd9998d2a099047f52fe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0af42011-b20a-4738-92e3-c04b0ceb061e.2e1583e8a8a1bd9998d2a099047f52fe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0af42011-b20a-4738-92e3-c04b0ceb061e.2e1583e8a8a1bd9998d2a099047f52fe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (399765699, '192pc On Vid 3# Sh', 788, '405540187967', 'short description is not available', '192pc On Vid 3# Sh', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (400143235, 'Sweet Potatoes 3 Lb Bag', 2.58, '811857021106', 'short description is not available', 'Sweet Potatoes 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (400156750, 'Orange Bell Pepper', 1.78, '400094225356', 'short description is not available', 'Orange Bell Pepper', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (400191967, 'Tomato Magic Ground Tomatoes No. 10 Can - Pack From Fresh Tomatoes - NOT From Concentrate - 6 LB 10 OZ (3.01 kg) - Case of 6 Cans', 107.94, '765552706069', 'This time tested product adds a touch of magic to \"la cucina Italiana\" of all regions. Made from fresh-picked peeled ground tomatoes in puree, Tomato Magic is the chef\'s choice for use in many regional favorites. Stanislaus Food Products is proud to unconditionally guarantee the quality of all our products - every day, can after can, year after year. Since our beginnings in 1942, we at Stanislaus Food Products have prided ourselves on packing the very best quality tomato products available. Down through the years, every employee in our company has maintained an unwavering commitment to quality, in the belief that quality products attract quality customers. We have not been disappointed. Thank you for your knowing enough to buy the very best!', 'Tomato Magic Ground Tomatoes No. 10 Can - 6 LB 10 OZ (3.01 kg) - Case of 6 Cans Package Size: # 10 Can Type: Ground Tomatoes Gluten Free Packed from fresh tomatoes and not from concentrate.', 'Stanislaus Imports', 'https://i5.walmartimages.com/asr/c2b41053-40b5-427c-87c7-0c5e8eaa1f2f_1.41b3607ce85e9c77f53820c90af59fd8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c2b41053-40b5-427c-87c7-0c5e8eaa1f2f_1.41b3607ce85e9c77f53820c90af59fd8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c2b41053-40b5-427c-87c7-0c5e8eaa1f2f_1.41b3607ce85e9c77f53820c90af59fd8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (400312721, 'Fieldpack Unbranded 448pc Berry Big Strw', 2007.04, '405953115366', 'short description is not available', 'Fieldpack Unbranded 448pc Berry Big Strw', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (400470855, 'Nm Hatch Chili Hot 10# Sold By Box Only', 16, '824206001858', 'short description is not available', 'Nm Hatch Chili Hot 10# Sold By Box Only', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (401446405, 'Watermelon Seedless', 4.98, 'deleted_896315001265', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (401615335, 'Fresh Organic Black Grapes 32oz', 4.96, 'deleted_813552010270', 'short description is not available', 'Fresh Organic Black Grapes 32oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (401638324, 'Fresh Dark Sweet Cherries, per Pound', 3.97, '405651484627', 'Fresh Dark Sweet Cherries, per Pound', 'Fresh Dark Sweet Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (402006970, 'Fresh Sliced Mushrooms, 16 oz', 3.28, '021706160973', 'Experience the fresh taste of our Sliced White Mushrooms. If you\'re looking for a traditional mushroom with a mild earthy taste, white mushrooms are just what you need. They\'ve remained the most popular mushroom for several decades, and although all mushrooms are versatile, white mushrooms are the most versatile of them all. Pre-cleaned and pre-sliced, they are the perfect finishing touch for adding to salads, pizzas and so much more. They are free of fat and cholesterol and are low in calories and sodium. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try out our Sliced White Mushrooms.', '16-ounce package of sliced white mushrooms Naturally fat free Cholesterol free Low in calories, carbs and sodium Fresh and all natural Pre-cleaned Natural source of the antioxidant selenium Great for salads, pizzas and much more', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/3cd37e98-1f78-47d7-a560-284a7d73cbce.d36eccfe8295989dde04d7cfb7c4801b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cd37e98-1f78-47d7-a560-284a7d73cbce.d36eccfe8295989dde04d7cfb7c4801b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cd37e98-1f78-47d7-a560-284a7d73cbce.d36eccfe8295989dde04d7cfb7c4801b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (402095407, 'Golden Delicious Apples 5 Lb Bag', 5.29, '847473005893', 'short description is not available', 'Golden Delicious Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (402657010, 'Organic Fuji Apples 3lbs', 5.98, '887434012089', 'Organic Fuji Apple 3LB CTN', 'Organic Fuji Apples 3lb CTN - PRODUCE', 'VTUWYM', 'https://i5.walmartimages.com/asr/8d718fad-439f-421a-b3e0-992b6903d98c.5034674707798b94f90703e930bca963.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d718fad-439f-421a-b3e0-992b6903d98c.5034674707798b94f90703e930bca963.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d718fad-439f-421a-b3e0-992b6903d98c.5034674707798b94f90703e930bca963.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (402934225, 'Organic Nectatrines, 2 lbs Bag', 3.96, 'deleted_683953001432', '2# Clamshell', 'NECT ORG 2# WA SNAP', '', 'https://i5.walmartimages.com/asr/c738a243-b560-4b4b-8e74-eca46e6867f0_1.c01d50aef1d518b90b44d6feed9cc6a1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c738a243-b560-4b4b-8e74-eca46e6867f0_1.c01d50aef1d518b90b44d6feed9cc6a1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c738a243-b560-4b4b-8e74-eca46e6867f0_1.c01d50aef1d518b90b44d6feed9cc6a1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (403176292, 'Organic Granny Smith Apples 3Lb Ctn', 4.97, '887434012096', 'Organic Granny Smith Apples 3Lb Ctn', 'Organic Granny Smith Apples 3Lb Ctn', 'STARR RANCH', 'https://i5.walmartimages.com/asr/bb550973-9bbb-48d1-b51d-4e699b07325b.dd8ca37a60769bd0c2de961aff53da18.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bb550973-9bbb-48d1-b51d-4e699b07325b.dd8ca37a60769bd0c2de961aff53da18.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bb550973-9bbb-48d1-b51d-4e699b07325b.dd8ca37a60769bd0c2de961aff53da18.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (403314241, 'Organic Red Leaf, 1 Each Ocean Mist', 1.96, '000651967028', 'Organic Red Leaf Ocean Mist Farms', 'Organic Red Leaf Bunch Ocean Mist Farms', 'Ocean Mist Farms', 'https://i5.walmartimages.com/asr/1a67574a-a1aa-4d82-be7a-cd000d83a708_1.1441345079af98def3bd23114d6de57d.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a67574a-a1aa-4d82-be7a-cd000d83a708_1.1441345079af98def3bd23114d6de57d.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a67574a-a1aa-4d82-be7a-cd000d83a708_1.1441345079af98def3bd23114d6de57d.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (405454976, 'Premium Bananas', 0.49, 'deleted_405821601120', 'short description is not available', 'Premium Bananas', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (405812593, 'Marketside Org Cauliflower Florets 12oz', 3.77, 'deleted_803944307040', 'Organic Cauliflower Florets 12oz', 'Organic Cauliflower Florets 12oz', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (406472125, 'Pure Green Farms Baby Green Leaf Lettuce Salad, 4 oz Clam Shell, Fresh', 2.98, '850014580025', 'Our hydroponic Baby Green Leaf lettuce is a crispy baby green lettuce with brilliant flavor', 'Keep Refridgerated, Greenhouse Grown in the USA, Pesticide Free', 'Pure Green Farms', 'https://i5.walmartimages.com/asr/51085631-985b-4466-a0b4-273c0abc5ac2.52b3261d631456549d7bdf498992945e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/51085631-985b-4466-a0b4-273c0abc5ac2.52b3261d631456549d7bdf498992945e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/51085631-985b-4466-a0b4-273c0abc5ac2.52b3261d631456549d7bdf498992945e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (406492972, 'Fresh Green Seedless Grapes', 1.78, 'deleted_816426012516', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (406513048, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, '400094471753', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (406804369, '100PC PTO RST 10# FF', 494, '097419020019', 'short description is not available', '100PC PTO RST 10# FF', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (407156730, 'Yellow Flesh Peaches, per Pound', 1.58, '400094280515', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (407273198, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094639191', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (407279898, 'Organic Whole Brown Mushrooms 8oz', 2.96, 'deleted_631661999848', 'short description is not available', 'Organic Whole Brown Mushrooms 8oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (407404556, 'Santa Fe Salad Bowl, 6.25 Oz.', 2.98, '024562006324', 'Santa Fe Salad Bowl, 6.25 Oz.', 'Salad Bowl Santa Fe', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (407828257, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094280652', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (408053397, 'Fresh Premium Grape Tomato, 4 oz Package', 0.01, '751666772458', 'Bring the fresh, delicious taste of Premium Grape Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Premium Grape Tomatoes.', 'Premium Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8c3423a6-d5f1-4e00-926a-41f316288808.89ce7b3f27c9a70b987d7c19edc72f1a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8c3423a6-d5f1-4e00-926a-41f316288808.89ce7b3f27c9a70b987d7c19edc72f1a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8c3423a6-d5f1-4e00-926a-41f316288808.89ce7b3f27c9a70b987d7c19edc72f1a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (408384428, 'Fresh Samba Papaya, Each', 1.14, '858335003285', 'Fresh Samba Papaya is a delightful variety of the tropical fruit, known for its sweetness and vibrant color. This variety is native to South America but has gained popularity across the globe due to its unique flavor and health benefits. The fruit is oval-shaped and has a rich, orange hue when ripe. Its flesh is juicy, sweet, and loaded with a wealth of health-enhancing nutrients. The taste is often compared to melons, but with a more exotic, tropical twist. The texture is incredibly soft and buttery, melting in your mouth with every bite. The fruit\'s black seeds are edible but have a bitter flavor, so they are usually removed before eating. Samba Papayas are a powerhouse of nutrients. They are rich in vitamin C, vitamin A, folate, and dietary fiber. The fruit is also an excellent source of antioxidants which help to combat free radicals in the body. Additionally, Samba Papayas contain a unique enzyme called papain, known for its digestive benefits and ability to break down proteins. Samba Papaya trees are usually grown in tropical and subtropical climates, requiring ample sunlight and well-drained soil. The trees start bearing fruit within a year of planting and can be harvested year-round. The fruits are picked when they show hints of changing from green to yellow, as they continue to ripen even after being picked.', 'Fresh Samba Papaya, Each Known for its sweetness and vibrant color Juicy, sweet, and loaded with a wealth of health-enhancing nutrients Rich in vitamin C, vitamin A, folate, and dietary fiber Taste is often compared to melons, but with a more exotic, tropical twist Also known as Hawaiian Papaya, Solo Papaya, and Samba Papaya', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1502c948-f96e-4266-a437-43fd24410d85.66080b9b6b123c13cda48a40e4ef49cd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1502c948-f96e-4266-a437-43fd24410d85.66080b9b6b123c13cda48a40e4ef49cd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1502c948-f96e-4266-a437-43fd24410d85.66080b9b6b123c13cda48a40e4ef49cd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (408435428, 'Fresh Tangerine, Each', 1.86, '405717637660', 'Enjoy the juicy goodness of citrus when you eat a Fresh Tangerine. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, tangerines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, tangerines are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the tangerines hang out in a bowl on your counter or table to breathe. Compact and portable, tangerines are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious Fresh Tangerines on hand for an easy, healthy treat.', 'Delicious, sweet, juicy citrus Pleasing sweet-tart flavor Easy to peel and segment Excellent source of vitamin C, potassium, and folic acid For maximum flavor, do not refrigerate Typically seedless Enjoy by the each.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/e1b8f441-4bf5-41f8-a70f-351a43586ba3.a21ce8e0a5c89e75f4ffcb40bb0c2144.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e1b8f441-4bf5-41f8-a70f-351a43586ba3.a21ce8e0a5c89e75f4ffcb40bb0c2144.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e1b8f441-4bf5-41f8-a70f-351a43586ba3.a21ce8e0a5c89e75f4ffcb40bb0c2144.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (408486369, 'Winesap Apples, Each', 1.47, '000000041928', 'short description is not available', 'Winesap Apples, Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (408545255, '1# Bag Limes', 2.48, '033074800115', 'short description is not available', '1# Bag Limes', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (409058232, '125pc Pto Rst Jmb 8#', 802.5, '405521539624', 'short description is not available', '125pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (409437225, 'Fresh Navel Oranges, 8 lb Bag', 8.94, 'deleted_845963110089', 'Enjoy the juicy goodness of these Large Bagged Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, these Large Bagged Oranges will add flavor to any meal or beverage.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes Use as a garnish for your favorite cocktail Make sweet desserts like ambrosia, orange bars, and orange pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9620d207-bf74-4dc0-a4d6-c3a4cfba9673.6b99ac0a6eb8d3ac87c83df2e7b72d6f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9620d207-bf74-4dc0-a4d6-c3a4cfba9673.6b99ac0a6eb8d3ac87c83df2e7b72d6f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9620d207-bf74-4dc0-a4d6-c3a4cfba9673.6b99ac0a6eb8d3ac87c83df2e7b72d6f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (409650864, '180pc Apple Fuji 3#', 894.6, '405668325869', 'short description is not available', '180pc Apple Fuji 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (410113226, 'Grape Tomato Montesino - Naturally Grown - 4.5\" Pot', 5.99, '810018063832', 'Montesino is a ‘Santa’ type grape tomato for production in open field and unheated greenhouses. Sweet, tasty fruits with medium to early maturity. Strong plant habit that easily sets high yields of fruit. Mini-plum shaped fruits.', '60-65 days, 1.5 \" long and 1 \" wide Flavor is rich and delicious Very disease resistant and easy to grow Great in salads and for salsas and sauces', 'Hirt\'s Gardens', 'https://i5.walmartimages.com/asr/7faa7505-e21b-4258-9e1d-d67d3c9dbf38.d9bf009e91deda28311ee46c5ff3c395.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7faa7505-e21b-4258-9e1d-d67d3c9dbf38.d9bf009e91deda28311ee46c5ff3c395.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7faa7505-e21b-4258-9e1d-d67d3c9dbf38.d9bf009e91deda28311ee46c5ff3c395.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (410196416, 'Fresh Red Seedless Grapes', 3.12, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (410524857, 'Seedless Cucumber', 1.18, 'deleted_673992045931', 'short description is not available', 'Seedless Cucumber', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (410839305, 'Microwave in Bag Yellow Potatoes, 1 Each', 2.94, '834344001320', 'Microwave in Bag Yellow Potatoes, 1 Each', '1 Lb. Microwave In Bag Yellow Potatoes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (410857279, 'Grape Tomato', 2.48, '853693005056', 'Grape Tomato', '', 'MYRICK', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (411238286, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094032671', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (411321047, 'Fresh Red Seedless Grapes', 1.98, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (411358147, 'Fresh Organic Roma Tomatoes, 1 lb Bag', 2.46, '885773045195', 'Bring the fresh, delicious taste of Organic Roma Tomatoes into your home. These tomatoes deliver rich and juicy flavor with each bite and are an ideal ingredient in a variety of recipes. Use them to make a tasty homemade pasta sauce, a comforting tomato soup, or fresh salsa. You could also use them to make a delicious pesto or bruschetta that you can serve at your next dinner party. Whether you slice or dice them, these organic tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with these fresh Organic Roma Tomatoes.', 'Wholesome, versatile, and delicious Rich, juicy flavor in each bite Ideal ingredient for a variety of dishes Use to make pasta sauce, tomato soup, or fresh salsa Make a tasty pesto or bruschetta to serve at your next dinner party USDA organic Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e5cd9099-5b09-4cec-bf7b-2d63171f2a34.5f61dc1fc2b1fa276fbdc2e1158994a3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5cd9099-5b09-4cec-bf7b-2d63171f2a34.5f61dc1fc2b1fa276fbdc2e1158994a3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5cd9099-5b09-4cec-bf7b-2d63171f2a34.5f61dc1fc2b1fa276fbdc2e1158994a3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (411848671, 'White Sweet Potatoes 2 Lb Bag', 2.98, '832298009515', 'short description is not available', 'White Sweet Potatoes 2 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (411996850, 'Fresh Blueberries, 5 lb Box', 11.98, '033383220260', 'Fresh Blueberries, 5 lb Box', 'Fieldpack Unbranded Fresh Blueberries 5lb Box', 'Fresh Produce', 'https://i5.walmartimages.com/asr/090b380e-757e-4c5d-ba58-14573049dbfb.4b6eafd423c998cb6fd847da1ab4fe3d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/090b380e-757e-4c5d-ba58-14573049dbfb.4b6eafd423c998cb6fd847da1ab4fe3d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/090b380e-757e-4c5d-ba58-14573049dbfb.4b6eafd423c998cb6fd847da1ab4fe3d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (412362563, 'Fresh Marquis Grapes', 2.98, '708174107005', 'short description is not available', 'Fresh Marquis Grapes', 'Spiech Farms', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (412509991, 'Marketside Organic Spring Mix Salad Blend, 16 oz Clam Shell (Fresh)', 5.74, '681131354769', 'Marketside Organic Spring Mix has a smooth, tender texture and great fresh taste that is loaded with nutrients. This spring mix is packed fresh, washed and ready to eat for your convenience. Use it to create your very own personalized salad tossed with your favorite vegetables, protein, nuts and dressing. Use it as a topping on sandwiches and pizzas or simply enjoy it as a healthy side. This USDA certified organic spring mix is great for health-conscious individuals, as it offers nutritional benefits such as being a rich source of dietary fiber, calcium, iron and vitamins A and C. It comes inside a resealable plastic container, keeping your spinach fresh after every use. Enjoy fresh from the farm taste with Marketside Organic Spring Mix. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Wholesome mix of baby lettuce blend and baby greens Washed and ready to eat USDA certified organic 20 calories per serving 5 servings per package Fresh vegetables in a plastic clam shell', 'Marketside', 'https://i5.walmartimages.com/asr/0ea5856a-e3b5-40b6-aa7b-432937d3e72f.1f2505be130c56b95dd620d1c9d89fb6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ea5856a-e3b5-40b6-aa7b-432937d3e72f.1f2505be130c56b95dd620d1c9d89fb6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ea5856a-e3b5-40b6-aa7b-432937d3e72f.1f2505be130c56b95dd620d1c9d89fb6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (412710770, 'Seasonal Berries - Summer 10 Oz', 7.24, '045009891181', 'short description is not available', 'Seasonal Berries - Summer 10 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/921de6bc-ffbb-455f-beb9-dd7d3e4c7be4.9a66bd15ae7bc4810e435ec1e3a18f50.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/921de6bc-ffbb-455f-beb9-dd7d3e4c7be4.9a66bd15ae7bc4810e435ec1e3a18f50.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/921de6bc-ffbb-455f-beb9-dd7d3e4c7be4.9a66bd15ae7bc4810e435ec1e3a18f50.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (412743682, 'Fresh Blueberries, 6 oz', 3.97, 'deleted_042808346096', 'Fresh Blueberries, 6 oz', 'Fresh Blueberries 6oz Freshly picked and hand-selected blueberries 6oz package filled with plump and juicy berries Bursting with sweet and tangy flavors, perfect for snacking or adding to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/268303f5-fc97-42aa-918a-196ae1788a89.42916db89075095356dab1ee956330ea.jpeg?odnHeight=100&odnWidth=100&odnBg=FFFFFF', 'https://i5.walmartimages.com/asr/268303f5-fc97-42aa-918a-196ae1788a89.42916db89075095356dab1ee956330ea.jpeg?odnHeight=180&odnWidth=180&odnBg=FFFFFF', 'https://i5.walmartimages.com/asr/268303f5-fc97-42aa-918a-196ae1788a89.42916db89075095356dab1ee956330ea.jpeg?odnHeight=450&odnWidth=450&odnBg=FFFFFF'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (413305472, '140pc Pto Ykn/red 5#', 730.8, '405503124527', 'short description is not available', '140pc Pto Ykn/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (413369420, '240pc On Tx1015 3#', 787.2, '405536709333', 'short description is not available', '240pc On Tx1015 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (413661513, 'Eastern Cantaloupe Bag', 3.28, 'deleted_605951042002', 'short description is not available', 'Eastern Cantaloupe Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (413803952, 'Fresh Rome Apple, Puerto Rico, Each', 1.97, '000000041713', 'Grown with care and picked at the peak of ripeness, our Red Fresh Apples are sure to satisfy your cravings. With their sweet and juicy taste, they make for a perfect snack any time of the day. Graced with a classic, vibrant red color, these apples are full of nutrients such as fiber, vitamin C, and antioxidants. Get your daily dose of health and deliciousness with our Red Apples.', 'Item Type: Brand: TE-CO Manufacturer Part Number: 41706', 'Fresh Produce', 'https://i5.walmartimages.com/asr/35f25653-a516-4b84-ab14-8a2d841e769d.0b1c00c02cb3d9d05f80101cd38db764.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35f25653-a516-4b84-ab14-8a2d841e769d.0b1c00c02cb3d9d05f80101cd38db764.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35f25653-a516-4b84-ab14-8a2d841e769d.0b1c00c02cb3d9d05f80101cd38db764.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (413927900, '160pc On Vid 4# Ger', 630.4, '405525303511', 'short description is not available', '160pc On Vid 4# Ger', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (414154651, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094272763', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (414192259, '728pc Pomegranate', 1441.44, '405770834136', 'short description is not available', '728pc Pomegranate', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (414472968, '180pc Apple Fuji 3#', 678.6, '405665856274', 'short description is not available', '180pc Apple Fuji 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (414745820, 'Fresh Green Seedless Grapes', 2.52, 'deleted_014668790012', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (415124332, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094274743', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (415323591, '200pc Pto Ykn/red 5#', 824, '405582473677', 'short description is not available', '200pc Pto Ykn/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (415478552, 'Fresh Peeled White Onions, 1 lb Bag', 1.18, '000000046701', 'Add flavor to your next meal with these Fresh, Whole White Onions. For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. You can dice these onions and add them to a fresh garden salad for a satisfying crunch or sprinkle them on top of your fish tacos. White onions also make delicious golden onion rings to serve alongside juicy hamburgers and hot dogs at your next backyard barbecue. You can keep these onions at room temperature until ready to use. Stock your pantry with several Fresh, Whole, White Onions.', 'Fresh whole white onions Ideal ingredient in a variety of recipes Can be sauteed and put in your favorite foods for added flavor Use to top sandwiches, hamburgers, and hot dogs Fresh onions can be stored in a cabinet or pantry and are easy to prepare', 'Fresh Produce', 'https://i5.walmartimages.com/asr/430eda9e-19b9-4b3b-963c-2e0d76fdabf8_1.0ff3b246327cf0c310ea1a16ea11e02c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/430eda9e-19b9-4b3b-963c-2e0d76fdabf8_1.0ff3b246327cf0c310ea1a16ea11e02c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/430eda9e-19b9-4b3b-963c-2e0d76fdabf8_1.0ff3b246327cf0c310ea1a16ea11e02c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (415654166, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094583395', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (415830579, 'Fieldpack Unbranded Fresh Organic Strawberries 1#', 7.5, '899062002578', 'short description is not available', 'Fieldpack Unbranded Fresh Organic Strawberries 1#', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/0329119a-00fe-4230-ab22-f502477e7cf7.99ba422098369d428c1b8794656a36f6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0329119a-00fe-4230-ab22-f502477e7cf7.99ba422098369d428c1b8794656a36f6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0329119a-00fe-4230-ab22-f502477e7cf7.99ba422098369d428c1b8794656a36f6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (416128436, 'Cocktail Tomatoes, 10 oz', 2.98, '057836020641', 'Sunset® Campari® Tomatoes.', 'Sunset® Campari® Tomatoes. Inspired chef. The tomato lover?s Tomato®. Greenhouse Grown. Product of Mexico. 454 g 1 Lb.', 'Sunsets', 'https://i5.walmartimages.com/asr/e4170a50-863c-486a-b727-fe05a2385164_1.9bb1ced03fd9a1dacf026b5cd1261fdb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4170a50-863c-486a-b727-fe05a2385164_1.9bb1ced03fd9a1dacf026b5cd1261fdb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4170a50-863c-486a-b727-fe05a2385164_1.9bb1ced03fd9a1dacf026b5cd1261fdb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (416191938, 'Marketside Ruby Grapefruit Segments, No Sugar Added, 7 oz', 1.68, 'deleted_681131161381', 'Marketside Ruby Grapefruit Segments are peeled and soaked in water and sweetened with monk fruit and stevia extract. This tasty citrus fruit is perfect for fruit cocktails, salsas, desserts, salads and can also be used as a garnish for meat and vegetable dishes. Enjoy them chilled for a refreshing snack that you can enjoy any time of the day. They have only 45 calories per serving and have no added sugars. They offer a nutritional benefit as they are a low calorie source of vitamin C. These segments come in a ready-to-eat container making it easy to enjoy your favorite fruit on the go. Enjoy a healthy and delicious snack with the wholesome taste of Marketside Ruby Grapefruit Segments. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Ruby Grapefruit Segments, No Sugar Added, 7 oz Ruby grapefruit segments soaked in water and sweetened with monk fruit and stevia extract Serve chilled for a refreshing snack High in vitamin C Ready-to-eat', 'Marketside', 'https://i5.walmartimages.com/asr/b4214c6f-5b1d-49ce-b7da-0b21f65b7153.f24396c4b39f6345c33e2db0e8f4460f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b4214c6f-5b1d-49ce-b7da-0b21f65b7153.f24396c4b39f6345c33e2db0e8f4460f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b4214c6f-5b1d-49ce-b7da-0b21f65b7153.f24396c4b39f6345c33e2db0e8f4460f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (416673056, '160pc Pto Red 3#', 694, '405671536771', 'short description is not available', '160pc Pto Red 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (416791890, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094380550', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (416805653, 'Yellow Flesh Peaches, per Pound', 1.58, '400094662243', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (416974854, 'Fresh Kiwi Puerto Rico, Each', 4.68, '405699466128', 'Kiwi, or kiwifruit, is a small fruit native to China with a unique tart-sweet flavor and a vibrant green flesh covered by a fuzzy brown skin. It is highly nutritious, packed with essential nutrients like vitamins C and E, potassium, and dietary fiber. Kiwi is often enjoyed raw, in salads, smoothies, or desserts. Its high vitamin C content surpasses the daily recommended intake, and it also contains beneficial antioxidants and serotonin.', 'The kiwi, also known as kiwifruit or Chinese gooseberry, is a small, fuzzy, brown-skinned fruit native to China but now primarily grown in New Zealand, Italy, and California. Its vibrant green flesh offers a unique tart-sweet flavor and is encased by a thin, edible skin. Kiwi is highly nutritious and is often enjoyed raw in salads, smoothies, or simply scooped straight from the skin.• Taste and Culinary Uses: Kiwi has a distinctive tart-sweet flavor, often described as a mix of strawberries, melons, and bananas. Its bright green flesh and black seeds make it visually appealing, and it can be used in salads, desserts, smoothies, or served with yogurt. Kiwi can also be used as a tenderizer for meats due to its high content of the enzyme actinidin.• Health Benefits: Kiwi is packed with essential nutrients such as vitamins C and E, potassium, and dietary fiber. It is particularly known for its high vitamin C content, with just one kiwi providing more than the daily recommended intake. Kiwi also contains antioxidants and serotonin, which can improve sleep quality.• Cultivation and Harvest: Kiwi plants are vine-grown, often requiring trellising for support. They thrive in temperate climates with plenty of sunshine and well-drained soil. Kiwi fruit is typically harvested before it is fully ripe, as it continues to ripen after being picked. The fruit is ready to eat when it yields to gentle pressure, similar to a ripe peach.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/7015d197-f527-4e1f-93c7-fe5261625da2_1.db3520db33d6509cbf440d3f3b8a08ba.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7015d197-f527-4e1f-93c7-fe5261625da2_1.db3520db33d6509cbf440d3f3b8a08ba.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7015d197-f527-4e1f-93c7-fe5261625da2_1.db3520db33d6509cbf440d3f3b8a08ba.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (416978641, 'Organic Tuscan Kale 5oz', 2.27, '688962002241', 'Organic Tuscan Kale', 'Organic Tuscan Kale 5oz', 'Unbranded', 'https://i5.walmartimages.com/asr/29aa1d97-89d6-4abc-a655-46e176ef47d2_1.163dec358020426d69c02e0257a55b44.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/29aa1d97-89d6-4abc-a655-46e176ef47d2_1.163dec358020426d69c02e0257a55b44.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/29aa1d97-89d6-4abc-a655-46e176ef47d2_1.163dec358020426d69c02e0257a55b44.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (417074465, 'California Grown Peaches, per Pound', 1.58, '400094210338', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (417135988, 'Fresh Green Beans', 1.68, '077512040664', 'short description is not available', 'Fresh Green Beans', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/8ca64c2c-fb96-447c-8c35-3c791f4a4b7d_3.30716b9d3fce72b9a4927f672f7ba385.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ca64c2c-fb96-447c-8c35-3c791f4a4b7d_3.30716b9d3fce72b9a4927f672f7ba385.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ca64c2c-fb96-447c-8c35-3c791f4a4b7d_3.30716b9d3fce72b9a4927f672f7ba385.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (417867770, 'Gourmet Demi Long Shallots Mesh Bag, 1 Lb.', 2.47, '', 'Gourmet Demi Long Shallots Mesh Bag, 1 Lb.', 'Gourmet Demi Long Shallots 1 Lb Mesh Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/44d51be9-b2df-4d41-b7fd-95282101391b_4.586c4b8e324afb5e1d65a7a5ba8d96e3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44d51be9-b2df-4d41-b7fd-95282101391b_4.586c4b8e324afb5e1d65a7a5ba8d96e3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44d51be9-b2df-4d41-b7fd-95282101391b_4.586c4b8e324afb5e1d65a7a5ba8d96e3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (418590455, '300pc Clementine 3#', 1434, '405669143783', 'short description is not available', '300pc Clementine 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (419395056, 'Services Reduced Program Dept 94', 0.01, '251705000004', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (419806077, 'Yellow Flesh Peaches, per Pound', 1.58, '400094343487', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (420346289, 'Fresh Green Seedless Grapes', 2.98, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (421017933, 'Freshness Guaranteed Tropical Mixture', 5.68, '681131003612', 'short description is not available', 'Freshness Guaranteed Tropical Mixture', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (421204708, 'Yellow Flesh Peaches, per Pound', 1.58, '400094227459', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (421259493, 'Brussels Sprouts, 12 Oz.', 2.48, '605806122354', 'Brussles Sprouts, Bag 12 OZ Steams in pack. Per Serving: 35 calories; 0 g sat fat (0% DV); 20 mg sodium (1% DV); 2 g sugars; vitamin C (120% DV); vitamin K (190% DV). Find Delicious Recipes: GreenGiantFresh.com. Questions or comments? 1-800-998-9996. Follow us on: Facebook and Twitter. Facebook. Twitter. Find delicious recipes, helpful tips & more: Scan code with app; greengiantfresh.com/value-added. Product of USA. Perishable. Keep refrigerated. Microwave in Bag Directions: 1. Pierce bag with fork. 2. Place bag on microwavable plate. 3. Microwave on high for 2-3 minutes. For softer texture, add up to 1 minute. Let sit for 1 minute. Caution: Contents and bag hot! 4. Open bag, pour contents into serving dish and enjoy. Because microwaves vary, cook times are approximate. Saute Directions: 1. Cut 12 oz Brussels Sprouts in half. 2. Heat 2 tbsp olive oil in a skillet on medium-high. Add Brussels Sprouts, 1/2 tsp salt and 1/4 tsp pepper; toss to coat. 3. Pan roast for 8-10 minutes or until nicely browned and tender. 4. Serve and enjoy. Oven-Roast Directions: 1. In a bowl, toss to coat 12 oz Brussels Sprouts, halved, in 2 tbsp olive oil, 1/2 tsp salt, 1/4 tsp pepper. 2. Place on a baking sheet. 3. Roast at 400 degrees F for 25-35 minutes or until nicely browned and tender. 4. Serve and enjoy. Serving Suggestions: Roast according to recipe above adding 2 oz diced pancetta until golden brown. Sprinkle with grated parmesan cheese and serve. Shred (thinly sliced) Brussels Sprouts for a salad or slaw. Make a crunchy topping for cooked meats and side dishes. Lightly toss thinly sliced Brussels Sprouts with olive oil, a pinch of salt and pepper, or your favorite seasonings. Bake at 450 degrees F stirring often until crispy, about 10-15 minutes. 12 oz (340 g) Salinas, CA 93901 800-998-9996 2013 Growers Marketing, LLC', 'Brussels SproutsSteams in pack. Per Serving: 35 calories; 0 g sat fat (0% DV); 20 mg sodium (1% DV); 2 g sugars; vitamin C (120% DV); vitamin K (190% DV). Find Delicious Recipes: GreenGiantFresh.com. Questions or comments? 1-800-998-9996. Follow us on: Facebook and Twitter. Facebook. Twitter. Find delicious recipes, helpful tips & more: Scan code with app; greengiantfresh.com/value-added. Product of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/db46c4f4-45f3-44d0-adab-1a2f475f13bc.bd54e0f5870b1c8483dd6dcec7f211d0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/db46c4f4-45f3-44d0-adab-1a2f475f13bc.bd54e0f5870b1c8483dd6dcec7f211d0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/db46c4f4-45f3-44d0-adab-1a2f475f13bc.bd54e0f5870b1c8483dd6dcec7f211d0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (421620406, 'Fieldpack Unbranded Mini Cucumbers 16 Oz', 1.97, 'deleted_057836168350', 'short description is not available', 'Fieldpack Unbranded Mini Cucumbers 16 Oz', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (422142647, 'Fresh Marketside Organic Limes, 1 lb Bag', 2.98, 'deleted_717524510433', 'Add zest and flavor to your meals and beverages with these Marketside Organic Limes. Limes are a key ingredient in many recipes, from homemade salsa to chicken dishes. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. These limes are sold in a one-pound bag, so you\'ll have plenty for all your culinary creations. Enjoy the refreshing, tart flavor of Marketside Organic Limes. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Fresh and juicy limes USDA organic Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies, and tarts Refreshing, tart flavor', 'Marketside', 'https://i5.walmartimages.com/asr/22e42896-bb82-4660-aebf-44f1cd17a699.f8504daafa30bc557b332dd2ac348435.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/22e42896-bb82-4660-aebf-44f1cd17a699.f8504daafa30bc557b332dd2ac348435.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/22e42896-bb82-4660-aebf-44f1cd17a699.f8504daafa30bc557b332dd2ac348435.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (422290813, 'Red Delicious Apples Bulk', 1.36, 'deleted_023157040163', 'short description is not available', 'Red Delicious Apples Bulk', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/f672c83f-f0e7-4a72-9bbf-4610f131157a_1.be773648faef50deabe98fff5de19d47.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f672c83f-f0e7-4a72-9bbf-4610f131157a_1.be773648faef50deabe98fff5de19d47.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f672c83f-f0e7-4a72-9bbf-4610f131157a_1.be773648faef50deabe98fff5de19d47.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (422540238, 'Cocktail Cucumbers', 2.48, 'deleted_699058073090', 'CuteCumber Poppers are a convenient one-bite snack that are crunchy and refreshing. These mini cocktail cucumbers are great for dipping and snacking at parties. Geared towards any age, this versatile product is ideal for kids lunches or desk snacks!', 'Cucumbers, Snack-Sized, CuteCumber Poppers The one-bite snack. No cutting or chopping required. muccifarms.com. Facebook. Twitter. Pinterest. Instagram / Muccinfarms. Product of Canada. Greenhouse grown.', 'Mucci Farms', 'https://i5.walmartimages.com/asr/abd2c2ae-5b84-4986-b780-d13bc0625c56.ed0c5744342dac4e82e7a12edc480494.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/abd2c2ae-5b84-4986-b780-d13bc0625c56.ed0c5744342dac4e82e7a12edc480494.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/abd2c2ae-5b84-4986-b780-d13bc0625c56.ed0c5744342dac4e82e7a12edc480494.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (423141841, 'Services Reduced Program Dept 94', 0.01, '251989000004', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (423321970, 'Organic Sweet Corn 2/count', 3.48, '810071020452', 'short description is not available', 'Organic Sweet Corn 2/count', 'Branche', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (423459629, 'Fresh Grown Plums', 1.98, '845792040427', 'short description is not available', 'Fresh Grown Plums', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/65b4b243-ab07-4e3d-8076-8111fad5268d.c978aa241a9b85ab53b69b9928bf96dc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/65b4b243-ab07-4e3d-8076-8111fad5268d.c978aa241a9b85ab53b69b9928bf96dc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/65b4b243-ab07-4e3d-8076-8111fad5268d.c978aa241a9b85ab53b69b9928bf96dc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (423782197, 'Fresh Red Seedless Grapes', 1.74, 'deleted_814563011270', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (423932400, 'Haralson Apples 5 Lb Bag', 4.92, '033383044316', 'short description is not available', 'Haralson Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (423948971, 'Fresh Papaya De Puerto Rico, Each', 2.98, '000000045513', 'The sweet, juicy flavor of Fresh Papaya De Puerto Rico makes them a refreshing and delicious treat. When ripe, this whole fruit has a butter-like texture with a sweet flavor like cantaloupe and can be eaten raw, without skin or seeds. Papaya can be prepared in a variety of ways; you can mix them with grapefruit and avocado for a bright summer salad, add them to a zesty salsa for some sweetness, freeze them and turn them into refreshing popsicle spears, or bake them in the oven with a melted brown sugar mixture. Pick up Fresh Papaya De Puerto Rico today and savor the delectable flavor.', 'Fresh Papaya De Puerto Rico, Each Creamy, butter-like flavor when ripe Rich in vitamins A, C, fiber, and antioxidants Fairly sweet flavor like cantaloupe and mango Great addition to smoothies, salads, salsa, and more Delicious and nutritious whole fruit', 'Hypermart', 'https://i5.walmartimages.com/asr/2b05f1c5-8e47-45e9-93ba-8267394f3cd5.3dab1a0daf11e1c714ebf3d365d813c1.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2b05f1c5-8e47-45e9-93ba-8267394f3cd5.3dab1a0daf11e1c714ebf3d365d813c1.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2b05f1c5-8e47-45e9-93ba-8267394f3cd5.3dab1a0daf11e1c714ebf3d365d813c1.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (424026006, 'Yellow Flesh Peaches, per Pound', 1.58, '400094138083', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (424154547, 'Watermelon Seeded', 8.12, 'deleted_850212002022', 'short description is not available', 'Watermelon Seeded', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (424746703, 'Freshness Guaranteed Pineapple Small', 4.67, '262818000003', 'Experience a burst of tropical flavors with these Freshness Guaranteed Pineapple Chunks. The pre-cut slices of ripe pineapple are juicy and sweet to taste and are packed in its own juice. Carry them with you and eat them straight out of the tray any time you want, at home or on-the-go. You can also use them to top desserts and ice creams, in a fruit salad or blend them with milk to make milkshakes. Pineapples are known to have a number of nutrients, and they are especially rich in vitamin C. Add some fresh fruits to your daily menu today with these Freshness Guaranteed Pineapple Chunks.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Pineapple Small', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (424859894, 'Mother Earth Products Freeze Dried Corn, 1 Full Quart Mylar Bag', 14.2, '850636008570', 'Mother Earth Products Freeze Dried Super Sweet Corn: a healthy & convenient addition to every area of your life without the headache: emergency preparedness, snacking, long and short term storage, traveling, everyday cooking, hiking, backpacking, spicing up your recipes, etc. use it now or later. Mother Earth Products Freeze Dried Corn are made with real, Non-GMO Corn, no additives or preservatives, & is kosher - a guilt-free, robust food that makes eating tasty & rewarding, without the hassle of weekly trips to the store or the worry of spoiling. It?s so delicious you won?t store it away and hope you never have to use it. Taste the Goodness of Mother Earth Products', '100% sweet corn; long term storage; short term storage; pantry; portable; convenient; nothing added; emergency preparedness; great flavor; easy to cook with; can eat straight from container without reconstituting', 'Mother Earth Products', 'https://i5.walmartimages.com/asr/a5cf54cd-7b8a-48df-9a12-b7fd54c3100b.eaa96fc7247e464639824312f7049547.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a5cf54cd-7b8a-48df-9a12-b7fd54c3100b.eaa96fc7247e464639824312f7049547.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a5cf54cd-7b8a-48df-9a12-b7fd54c3100b.eaa96fc7247e464639824312f7049547.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (424866340, '200pc Pto Ykn/red 5#', 824, '405536312656', 'short description is not available', '200pc Pto Ykn/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (424904010, 'Sweet Tamarinds, 1 lb Package', 4.97, '037842000110', 'Sweet Tamarinds can be eaten completely raw. It has a long brown, hard shell on the outside. Inside this shell lies the fruit itself which is quite sticky and sweet. Ripened tamarinds can be used in desserts and the fruit can also be dried up in the sun and ground into a delicious spice that you can sprinkle into your food while cooking.', 'Selected and stored fresh Sourced with high quality standards Delicious on their own as a healthy snack or as part of a recipe Also known as Tamarindo and Imli around the world', 'Unbranded', 'https://i5.walmartimages.com/asr/2066f2d6-b632-477b-97cb-1054a712b50b.4b01468ce3faf911ddc2d002e98fd82b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2066f2d6-b632-477b-97cb-1054a712b50b.4b01468ce3faf911ddc2d002e98fd82b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2066f2d6-b632-477b-97cb-1054a712b50b.4b01468ce3faf911ddc2d002e98fd82b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (425018735, 'Freshness Guaranteed Sliced White Mushrooms 16oz', 3.84, 'deleted_699058820076', 'short description is not available', 'Freshness Guaranteed Sliced White Mushrooms 16oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (425185942, 'Green Bell Pepper', 0.98, 'deleted_852713002501', 'short description is not available', 'Green Bell Pepper', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (425411469, 'Microwave in Bag Red Potatoes, 1 Lb.', 2.48, 'deleted_033383004587', 'Microwave in Bag Red Potatoes, 1 Lb.', 'Microwave In Bag Red Potatoes 1 Lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/97d5db19-f91d-4fc9-920b-cdd66ddf3754.3c1dcee39214b9658a07c22c33758a8e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/97d5db19-f91d-4fc9-920b-cdd66ddf3754.3c1dcee39214b9658a07c22c33758a8e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/97d5db19-f91d-4fc9-920b-cdd66ddf3754.3c1dcee39214b9658a07c22c33758a8e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (425894904, 'Services Reduced Program Dept 94', 0.01, '251710000006', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (426845523, 'Ruby Tango Red Mandarin Oranges, 12 Oz.', 2.98, '092148142261', 'Ruby Tango Red Mandarin Oranges, 12 Oz.', 'Ruby Tango Red Mandarins 12 Oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (426992388, '75pc Orange Navel 8#', 597.75, '400094962336', 'short description is not available', '75pc Orange Navel 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (427058826, 'Expert Gardener 3.25 gal Avocado Live Tree', 39.97, '758333801527', '3.25G AVOCADO TREE', 'Expert Gardener 3.25 gal Avocado Live Tree Live avocado tree in a 3.25-gallon container Ideal for home gardening and landscaping Provides fresh avocados for your culinary needs Requires full sun and well-drained soil for optimal growth Suitable for indoor or outdoor planting', 'Expert Gardener', 'https://i5.walmartimages.com/asr/bc8ad615-1753-4efb-8221-ae5dc3c7f45d.806b94ca9ed1c6b82c96196a7892ed29.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc8ad615-1753-4efb-8221-ae5dc3c7f45d.806b94ca9ed1c6b82c96196a7892ed29.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc8ad615-1753-4efb-8221-ae5dc3c7f45d.806b94ca9ed1c6b82c96196a7892ed29.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (427647035, 'Fresh Organic Collard Greens, 5 oz', 2.47, '028764001705', 'Savor the goodness of nature with our Fresh Organic Collard Greens, a nutrient-rich and versatile leafy green that brings a hearty and flavorful addition to your meals. Grown without any synthetic pesticides or fertilizers, these vibrant, deep green leaves are not only delicious but also packed with essential vitamins and minerals. Perfect for braising, sautéing, or adding to soups and stews, our Fresh Organic Collard Greens offer a robust taste and tender texture that complements a wide array of dishes. Embrace the wholesomeness of our Fresh Organic Collard Greens and elevate your culinary creations with the power of nature.', 'Fieldpack Unbranded Org Collard 5oz Savor the goodness of nature with our Fresh Organic Collard Greens, a nutrient-rich and versatile leafy green that brings a hearty and flavorful addition to your meals. Grown without any synthetic pesticides or fertilizers, these vibrant, deep green leaves are not only delicious but also packed with essential vitamins and minerals. Perfect for braising, sautéing, or adding to soups and stews, our Fresh Organic Collard Greens offer a robust taste and tender texture that complements a wide array of dishes. Embrace the wholesomeness of our Fresh Organic Collard Greens and elevate your culinary creations with the power of nature.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4ac8bb86-32c0-4d19-bd9d-cd68f09faf91_1.2aee799f294a23a1a4960bc76e9c56e5.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ac8bb86-32c0-4d19-bd9d-cd68f09faf91_1.2aee799f294a23a1a4960bc76e9c56e5.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ac8bb86-32c0-4d19-bd9d-cd68f09faf91_1.2aee799f294a23a1a4960bc76e9c56e5.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (427800718, 'BELMONT: Garlic Paste, 8 fo', 11.97, '859174003795', '\" BELMONT: Garlic Paste, 8 fo \"', 'Garlic Paste Questions or Comments: 1-888-780-9290. www.belmontfoodsperu.com. Product of Peru.', 'Belmont Bruins', 'https://i5.walmartimages.com/asr/1399d865-b4a1-4d26-bfcd-e1f41b0cb171.a3decaebfc3ded27d6d0131fcd5ad0ce.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1399d865-b4a1-4d26-bfcd-e1f41b0cb171.a3decaebfc3ded27d6d0131fcd5ad0ce.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1399d865-b4a1-4d26-bfcd-e1f41b0cb171.a3decaebfc3ded27d6d0131fcd5ad0ce.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (428387648, 'Fresh Organic Plums, 2 lb Bag', 5.97, '681131161534', 'Discover the delightful sweetness of Fresh Organic Plums. Enjoy them on their own as a sweet snack or use them in a variety of recipes. For breakfast, you could slice them to put into your oatmeal or use them to make a delicious yogurt parfait. You can also use these organic plums in several baking recipes including a comforting crisp topped with ice cream, a tasty upside-down cake, or a scrumptious tart. You can even use them to make a jam or a smooth sorbet. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Fresh Organic Plums.', 'Fresh Organic Plums, 2 lb Bag Sweet and juicy organic plums Enjoy on their own as a satisfying snack Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Ideal snack to take to work or on a road trip No GMO ingredients No prohibited synthetic ingredients No prohibited chemical pesticides', 'Fresh Produce', 'https://i5.walmartimages.com/asr/68381398-a29e-47e7-bfa7-f6f7175e9d84.0a0467f436aedbae0665d2a145e7a875.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68381398-a29e-47e7-bfa7-f6f7175e9d84.0a0467f436aedbae0665d2a145e7a875.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68381398-a29e-47e7-bfa7-f6f7175e9d84.0a0467f436aedbae0665d2a145e7a875.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (428847289, 'Yellow Flesh Peaches, per Pound', 1.58, '400094987599', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (428961530, 'Gills Onions Gills Celery & Onions, 7 oz', 2.88, '643550000429', 'Celery & Onions, Fresh Diced 7 oz (198 g) 7 oz. stuffing mix. Quality. Convenience. Grower Direct. Product of USA. Keep refrigerated. 7 oz (198 g) Oxnard, CA 93030', 'Celery & Onions, Fresh Diced 7 oz. stuffing mix. Quality. Convenience. Grower Direct. Product of USA.', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (429124591, 'Fresh Black Seedless Grapes', 2.78, 'deleted_000000034975', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (429881625, 'Carbsmart Yellow Potatoes, 5 Lb.', 3.88, '605806003790', 'Carbsmart Yellow Potatoes, 5 Lb.', 'Carbsmart Yellow Potatoes 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (430493004, '52lb Apple Sugarbee', 118.04, '405877046760', 'short description is not available', '52lb Apple Sugarbee', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (430797610, 'Ciruelas 2#', 5.37, '881006023107', 'short description is not available', 'Ciruelas 2#', 'Unbranded', 'https://i5.walmartimages.com/asr/0a5dffd1-b77e-49e3-8ee6-ebc37c949452.f3202fa20364886dfa607ce9223cfb47.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a5dffd1-b77e-49e3-8ee6-ebc37c949452.f3202fa20364886dfa607ce9223cfb47.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a5dffd1-b77e-49e3-8ee6-ebc37c949452.f3202fa20364886dfa607ce9223cfb47.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (430906516, 'Robinson Fresh Anaheim Peppers, 1 Pound Bag', 2.68, '883616005054', 'Discover the Anaheim pepper, a culinary delight! With its narrow, round-tipped shape and vibrant pale to glossy green color, this pepper measures approximately 6-8 inches in length. Named after its birthplace, Anaheim, California, it is cherished for its sweet and mild flavor. Elevate your dishes with the irresistible taste of the Anaheim pepper - a true culinary gem. Find this Whole and Fresh pepper at Walmart.', 'Anaheim’s may be used as a slightly hotter pepper substitute for bell peppers. > For a more mild, smoky flavor, roast before using. For a fresh, hot flavor, consume raw. If used in Latin American recipes, pair with cilantro, lime, mole sauce, beans, tomatillos and tomatoes. For Asian dishes, pair with coconut milk, fish sauce, ginger, limes, peanuts, sesame oil and soy sauce. To store, refrigerate in its original packaging for up to one week. Wash well before using. Peppers are a great way to add flavor into one\'s diet and lessen the need to add salt. Anaheim’s may be used as a slightly hotter pepper substitute for bell peppers. > For a more mild, smoky flavor, roast before using. For a fresh, hot flavor, consume raw. If used in Latin American recipes, pair with cilantro, lime, mole sauce, beans, tomatillos and tomatoes. For Asian dishes, pair with coconut milk, fish sauce, ginger, limes, peanuts, sesame oil and soy sauce. To store, refrigerate in its original packaging for up to one week. Wash well before using. Enjoy the crisp fresh flavor. Wash before eating', 'Robinson Fresh', 'https://i5.walmartimages.com/asr/12beb1a4-4e51-49b2-a646-ab31e9370691.3a8257fe3a3f62914e2b5df63d313a52.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/12beb1a4-4e51-49b2-a646-ab31e9370691.3a8257fe3a3f62914e2b5df63d313a52.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/12beb1a4-4e51-49b2-a646-ab31e9370691.3a8257fe3a3f62914e2b5df63d313a52.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (431005487, 'Freshness Guaranteed Granny Smith Apples 3 Lb Bag', 4.12, 'deleted_847081000280', 'short description is not available', 'Freshness Guaranteed Granny Smith Apples 3 Lb Bag', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (431691571, 'Aprium, 1.5 lb Carton', 5.38, '847081000419', 'Any fan of plums or apricots should experience the hybrid taste of Apriums. Combining all your favorite parts of an apricot with a healthy touch of plum, apriums are small and juicy with a velvety exterior, firm texture, and sweet taste that makes them excellent for creating a variety of homemade goods. Chutneys, desserts, and fruity garnishes are all perfect recipes to test out the aprium\'s unique flavor profile, and you can simply swap them for apricots in any of your current favorites. For a quick snack on the go, apriums are also enjoyable when eaten raw, just like any apricot or plum. Expand your stone fruit experience and be sure to try out Apriums.', 'Apriums, 1.5 lbs, 9 Count: 9-pack of fresh apriums Hybrid stone fruit created from a mixture of apricots and plums Firm texture with smooth skin and slight fuzz Sweet taste Can be substituted in recipes in the place of apricots Enjoyable in homemade bakes or when eaten raw', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6f47b32f-e4f8-4f49-823a-be261b540d7d.61ee9f038b819d848a9cbf5af23fa022.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6f47b32f-e4f8-4f49-823a-be261b540d7d.61ee9f038b819d848a9cbf5af23fa022.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6f47b32f-e4f8-4f49-823a-be261b540d7d.61ee9f038b819d848a9cbf5af23fa022.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (431817661, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '405519740056', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (431946908, 'Lady Alice Fresh Apples, Each', 2.97, '804305036043', 'Lady Alice Apples are a premium variety of fresh apples known for their sweet and tangy flavor. These apples are firm and juicy with a unique texture that is perfect for snacking, baking, and cooking. They have a beautiful deep red color with yellow speckles that make them an elegant choice for fruit bowls and centerpieces. Lady Alice Apples are available seasonally and make a great addition to any fall recipe or festive occasion. Order now to enjoy the delicious taste of this exquisite fruit.', 'Lady Alice Apples are a premium apple variety known for their unique flavor, firm texture, and beautiful appearance. Each apple is medium to large in size, with a round shape and a striking orange-red color that fades into yellow-green at the stem. The flesh of the Lady Alice apple is firm and crisp, with a juicy and sweet flavor that has notes of honey and vanilla. This apple variety is perfect for snacking, but also holds up well in cooking and baking, maintaining its shape and flavor. Lady Alice Apples are a good source of fiber, vitamin C, and antioxidants, and can be enjoyed as a healthy and flavorful addition to any meal. With their distinctive taste and appearance, Lady Alice apples are a premium choice for apple lovers and foodies alike.', 'Lady Alice', 'https://i5.walmartimages.com/asr/7a837d0e-c919-42d4-a8a4-ce24412eff56.5f1b91e333e15f50cfc86bd6da505af9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a837d0e-c919-42d4-a8a4-ce24412eff56.5f1b91e333e15f50cfc86bd6da505af9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a837d0e-c919-42d4-a8a4-ce24412eff56.5f1b91e333e15f50cfc86bd6da505af9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (432303686, '120pc Apple Gala 5#', 600, '405539759410', 'short description is not available', '120pc Apl Gala 5# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (432310290, '54lb Apl Kanzi Bulk', 79.38, '405787526215', 'short description is not available', '54lb Apl Kanzi Bulk', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (432797637, 'Yukon Potatoes, 5 Lb.', 3.96, 'deleted_882645010008', 'Yukon Potatoes, 5 Lb.', 'Yukon Potatoes 5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (433001810, 'Grapefruit Gift Carton', 9.88, '852453002328', 'short description is not available', 'Grapefruit Gift Carton', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (433450924, 'Fresh Gala Apples, 3 lb. Bag', 3.97, '855857005179', 'Savor the sweet taste of Gala Apples. Gala apples are sweet and mild with a subtle floral aroma making them perfect for breakfast, lunch, dinner, and dessert. Perfect for snacking, they have a creamy white flesh with low acidity. Chop the apples up and add them to a salad with walnut, mixed greens, and a poppy seed vinaigrette for a crunchy delicious salad that you can enjoy for lunch or dinner. Add it to your favorite smoothie or juice blend for a morning pick me up to get your day started right. Serve with a dollop of peanut butter and enjoy as a healthy snack that both kids and adults will love. Enjoy the delicious taste of Gala Apples.', 'Sweet and mild with a subtle floral aroma Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidity', 'Unbranded', 'https://i5.walmartimages.com/asr/af429a77-d9b3-492c-bdce-a37a1352127d.cb79424e07c374f20a2a09991c28b4bd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af429a77-d9b3-492c-bdce-a37a1352127d.cb79424e07c374f20a2a09991c28b4bd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af429a77-d9b3-492c-bdce-a37a1352127d.cb79424e07c374f20a2a09991c28b4bd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (433455201, 'Freshness Guaranteed Fresh Green Seedless Grapes', 2.2, '', 'short description is not available', 'Freshness Guaranteed Fresh Green Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (433865151, 'Navel Oranges, 3 lb Bag', 3.94, 'deleted_033383110011', 'Fresh Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 4 lb package.', 'Oranges, 4 lb: A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/fc1cfe6a-5af9-475b-8e91-069089a6deef_1.09eeca82e9774dd2cde2f764ccd30d35.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fc1cfe6a-5af9-475b-8e91-069089a6deef_1.09eeca82e9774dd2cde2f764ccd30d35.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fc1cfe6a-5af9-475b-8e91-069089a6deef_1.09eeca82e9774dd2cde2f764ccd30d35.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (434197061, '160pc On Vid 4# Cci', 656, '405512873461', 'short description is not available', '160pc On Vid 4# Cci', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (434942988, '180pc Apple Pink 3#', 714.6, '405739090634', 'short description is not available', '180pc Apple Pink 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (435135877, 'Freshness Guaranteed Fresh Green Seedless Grapes', 2.08, 'deleted_855625004014', 'short description is not available', 'Freshness Guaranteed Fresh Green Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (435224016, 'Fresh Cherry on the Vine Tomato, 12 oz Package', 3.98, 'deleted_684924011290', 'Fresh Cherry on the Vine Tomatoes are the perfect cooking tomato. Because of their notable flavor and thicker skin, they are a versatile tomato option that\'s fit for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, cherry on the vine tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with Cherry on the vine Tomatoes from Walmart.', 'Cherry on the Vine Tomato, 12 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (435230929, '24oz Cut Watermelon', 3.88, '400094910924', 'short description is not available', '24oz Cut Watermelon', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (435383167, 'Tri Pepper Diced 7oz', 2.58, '030223023227', 'short description is not available', 'Tri Pepper Diced 7oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (435493842, 'Fresh Green Seedless Grapes', 1.78, 'deleted_816426013636', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (435615245, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094274606', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (435804145, 'Watermelon Seedless', 4.98, '400094575932', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (436044616, 'Fresh Washington Skylar Rae Cherries', 5.98, '847473007507', 'short description is not available', 'Fresh Washington Skylar Rae Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (436273424, 'Red Globe Seeded Grapes, Bag', 22, '', 'short description is not available', 'Red Globe Seeded Grapes, Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (436668745, 'Pineapple 12 Oz', 3.24, '717524513656', 'short description is not available', 'Pineapple 12 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (436975604, 'Fresh Organic Cranberries, 12 oz', 2.76, '071207000025', 'Fresh Organic Cranberries, 12 oz', 'Fresh Organic Cranberries, 12 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a73bc0c6-aa53-4b69-bf19-5f85839b5fed.492a04229ba4448ae3173712f0462ebd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a73bc0c6-aa53-4b69-bf19-5f85839b5fed.492a04229ba4448ae3173712f0462ebd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a73bc0c6-aa53-4b69-bf19-5f85839b5fed.492a04229ba4448ae3173712f0462ebd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (437207793, '100pc Pto Russet 10#', 494, '405862216024', 'short description is not available', '100pc Pto Russet 10#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (437223400, 'Ready Pac Costa Brava Salad Blend, 7 Oz.', 3.74, '400094556382', 'Ready Pac Costa Brava Salad Blend, 7 Oz.', 'Ready Pac Costa Brava Salad Blend 7 Oz', 'Ready Pac Foods', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (437337866, 'Ogp Red Cherry Samples', 0.01, '405836139328', 'short description is not available', 'Ogp Red Cherry Samples', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (437442565, 'Earthbound Farms Fresh Organic Cauliflower Florets, 9 oz, Fresh', 3.98, '032601952792', 'Enjoy Organic Cauliflower Florets from Earthbound Farms -- versatile, healthy, and satisfyingly crunchy. Pre-washed, cut, and ready to serve or eat, these packaged veggies can be enjoyed right out of the package with a nice dip or be added to your favorite recipe. This nine-ounce package of Earthbound Farms Organic Cauliflower Florets contains about three servings. With only 25 calories and loads of nutrients per one cup serving, you can have a healthy side dish on the table in no time. Each serving gives you six percent of your daily recommended intake of potassium, and they even have two grams of protein and two grams of fiber! To serve these Organic Cauliflower Florets from Earthbound Farms, simply place them raw on a vegetable tray with assorted fresh vegetables and your favorite dip. They look great next to carrots, red pepper, and broccoli. To cook cauliflower, try roasting them on a sheet pan with other firm vegetables like sweet potato, carrots, mushrooms, and broccoli. Simply toss them with olive oil or coconut oil first, then roast for about 20 minutes at 400 to 425 degrees.', 'Earthbound Farms Fresh Organic Cauliflower Florets are versatile, healthy, and satisfyingly crunchy Ready to eat on the go Fresh organic snack Recipe-ready vegetables Washed and ready to enjoy 9-ounce package has about 3 servings', 'Earthbound Farm', 'https://i5.walmartimages.com/asr/5496099c-2115-474a-89dd-f3035cb8c020.8d16b16d5c69a6abbd8496165177fa90.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5496099c-2115-474a-89dd-f3035cb8c020.8d16b16d5c69a6abbd8496165177fa90.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5496099c-2115-474a-89dd-f3035cb8c020.8d16b16d5c69a6abbd8496165177fa90.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (437666389, 'Snack Fresh Orange Wedges 4.7 Oz', 0.98, '074641010131', 'short description is not available', 'Snack Fresh Orange Wedges 4.7 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (437708856, 'Vegetable Tray with Meat And Cheese 35 oz, Fresh', 11.97, '709351302787', 'The PRODUCE UNBRANDED Vegetable Tray with Meat and Cheese is a versatile and delicious option for those looking for a convenient and healthy appetizer or snack. This 35 oz. (2.19 lbs) tray offers an assortment of fresh vegetables, meats, and cheeses to cater to a range of tastes and preferences. The Vegetable Tray with Meat and Cheese is perfect for parties, picnics, or as a quick and healthy snack for the whole family. To maintain the freshness and quality of the ingredients, store the tray in the refrigerator and consume within a few days of purchase. Once opened, it is best to cover the tray with plastic wrap or transfer the remaining items to an airtight container to keep them fresh.', 'Vegetable Tray With Meat And Cheese 35oz The Vegetable Plastic Tray with Meat and Cheese is perfect for parties, picnics, or as a quick and healthy snack for the whole family. To maintain the freshness and quality of the ingredients, store the tray in the refrigerator and consume within a few days of purchase. Once opened, it is best to cover the tray with plastic wrap or transfer the remaining items to an airtight container to keep them fresh.', 'Unbranded', 'https://i5.walmartimages.com/asr/f2a02344-708b-4b63-b72c-ac363d3ffe16_3.172bd0ab1da3f6b5312b42384251e32a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f2a02344-708b-4b63-b72c-ac363d3ffe16_3.172bd0ab1da3f6b5312b42384251e32a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f2a02344-708b-4b63-b72c-ac363d3ffe16_3.172bd0ab1da3f6b5312b42384251e32a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (437884243, 'Navel Oranges, 4 lb Bag', 4.96, 'deleted_845963016268', 'Fresh Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 4 lb package.', 'Oranges, 4 lb: A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5fa99ca0-ae7b-4030-ae4e-8ac4e1621eb3_1.d784bf085b7b2b98c065fded42d727f1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5fa99ca0-ae7b-4030-ae4e-8ac4e1621eb3_1.d784bf085b7b2b98c065fded42d727f1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5fa99ca0-ae7b-4030-ae4e-8ac4e1621eb3_1.d784bf085b7b2b98c065fded42d727f1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (437958795, 'Fresh Jammers Thomcord Grapes, Bag', 2.98, '799424381009', 'Concord grapes have a jammy aroma and punchy flavor with a mild, sweet taste. Concord grapes are especially beautiful and dramatic-looking with their powdery royal-blue coloring.', 'Fresh Jammers Thomcord Grapes, Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (438578009, 'Coleslaw, 16 Oz.', 1.77, '400094397275', 'Coleslaw, 16 Oz.', 'Coleslaw', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (438635115, 'Fresh Red Seedless Grapes', 1.98, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (439015220, 'Freshness Guaranteed Sliced Portabella Mushroom Caps 6oz', 3.14, 'deleted_699058820137', 'short description is not available', 'Freshness Guaranteed Sliced Portabella Mushroom Caps 6oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (439401504, 'Organic Micro Arugula', 1.98, '768573417556', 'You’ll love this leafy green for its spicy and peppery bite! Microgreens are baby greens only 7-14 days old. Why do we harvest them so young? When they are harvested that young, all of the flavor potential of that plant is condensed into the young microgreen. This means you get a TON of flavor in the smallest tiny green! Talk about bang for your buck!', 'Organic Micro Arugula', 'Fresh Produce', 'https://i5.walmartimages.com/asr/68a3a815-9107-45f7-b526-cbaf6605ddca_2.a427ea017a809781d085e623f03a9731.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68a3a815-9107-45f7-b526-cbaf6605ddca_2.a427ea017a809781d085e623f03a9731.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68a3a815-9107-45f7-b526-cbaf6605ddca_2.a427ea017a809781d085e623f03a9731.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (439930244, 'Fresh California Grown Nectarines, 1 Lb.', 1.78, 'deleted_400094220481', 'Fresh California Grown Nectarines, 1 Lb.', 'Fresh California Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (440599899, 'Deser Pride Watermelon', 3.97, '817050014372', 'short description is not available', 'Deser Pride Watermelon', 'Deser Pride', 'https://i5.walmartimages.com/asr/8ccc32bf-c3e2-46c8-83e7-428c3c7f4114.f5e95016450bfdc2cd3c51fc422c711e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ccc32bf-c3e2-46c8-83e7-428c3c7f4114.f5e95016450bfdc2cd3c51fc422c711e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ccc32bf-c3e2-46c8-83e7-428c3c7f4114.f5e95016450bfdc2cd3c51fc422c711e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (440660197, 'Sweet Potatoes 5 Lb Bag', 5.98, '', 'short description is not available', 'Sweet Potatoes 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (440731033, 'Mann\'s Family Favorites Snow Peas', 2.47, '045388512400', 'Mann\'s® Family Favorites Snow Peas.Three generations, EST. 1939.This delicious, snackable treat comes washed and ready to eat! Keep refrigerated.Washed and ready to eat.Perishable.', 'Snow Peas Fresh. Steams in pack. Per Serving: 35 calories; 0 g sat fat (0% DV); 0 mg sodium (0% DV); 3 g sugars; vitamin C (90% DV); vitamin K (25% DV). Questions or Comments? 1-800-998-9996. Follow Us On: Facebook and Twitter. Product of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8e1c3a44-0940-474f-bcec-a20cfdea858e.882b9448457bda75e1ca2052ef2b3cec.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e1c3a44-0940-474f-bcec-a20cfdea858e.882b9448457bda75e1ca2052ef2b3cec.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e1c3a44-0940-474f-bcec-a20cfdea858e.882b9448457bda75e1ca2052ef2b3cec.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (440891999, 'Large Avocado 4 Count Bag', 4.48, 'deleted_845857001066', 'short description is not available', 'Large Avocado 4 Count Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (441248059, '125pc Pto Rst Jmb 8#', 802.5, '405518966884', 'short description is not available', '125pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (441516239, 'Butter Lettuce, each', 2.94, '865755000213', 'Butter lettuce, with its tender texture and vibrant green or rich reddish-purple hue, is a versatile addition to your culinary creations. Its scrumptious leaves are perfect for crafting delicate lettuce wraps, refreshing salads, or adding a layer of crispness to sandwiches. Elevate your meals with the delightful taste of butter lettuce and enjoy a healthy and visually stunning ingredient in your dishes.', 'Explora Greens Butter Lettuce EXCELLENT SOURCE OF VITAMIN K GOOD SOURCE OF FOLATE AND VITAMIN A LUTEIN AND ZEAXANTHIN', 'Explora Greens', 'https://i5.walmartimages.com/asr/39d236dd-2db6-43f7-a7d3-2dd44f5adafa.783a95e64a8466cbb438cbf6cef047d6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39d236dd-2db6-43f7-a7d3-2dd44f5adafa.783a95e64a8466cbb438cbf6cef047d6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39d236dd-2db6-43f7-a7d3-2dd44f5adafa.783a95e64a8466cbb438cbf6cef047d6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (442067920, 'Fresh Roma Tomato, 2 lb Bag', 1.28, '086009105205', 'With Roma Tomatoes, it\'s easy to make a wholesome, delicious meal. Roma tomatoes are an ideal ingredient for whipping up a variety of wonderful dishes. You can use them to create a zesty tomato sauce for stirring into a homemade pasta dish, crush them up to make a delightful Roma tomato bruschetta, or simply enjoy them on their own as a nutritious snack or as a party platter option for dipping in your favorite vegetable dipping sauce. If you\'re feeling a classic tomato dish, Roma tomatoes can even lend themselves in making a comforting and appetizing tomato soup or a flavorful salsa. No matter how you choose to use them, these tomatoes will add stunning flavor to any meal. Just find the recipe and experience the tasty results for yourself! Elevate your recipes and add fresh Roma Tomatoes to your Walmart produce purchase today.', 'Roma Tomatoes, 2 lb Bag: Wholesome and delicious Ideal ingredient for a variety of dishes Flavor in each bite Perfect for making zesty tomato sauces Enjoyable as a nutritious snack Excellent for homemade salsa', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (442907373, 'Fresh Mandarin, 2lb', 4.88, 'deleted_096704001412', 'Sweet, seedless and easy to peel. Mandarins are the coveted leader of the citrus category high in Vitamin C, and an immunity boosting superfood.', 'High in Vitamin C Immunity Boosting System Sweet and Seedless Easy to peel', 'Fresh Produce', 'https://i5.walmartimages.com/asr/902bc979-ecc0-4f60-a0a1-6ae0261ae72f.35376657f9a2746540c9b6ad2ec84bfb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/902bc979-ecc0-4f60-a0a1-6ae0261ae72f.35376657f9a2746540c9b6ad2ec84bfb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/902bc979-ecc0-4f60-a0a1-6ae0261ae72f.35376657f9a2746540c9b6ad2ec84bfb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (443695685, 'Fresh Feijoas - Sweet Tropical Fruits', 1.5, '000000042659', 'Feijoas, or pineapple guavas, are fresh fruits with a sweet, tangy flavor profile reminiscent of pineapple, guava, and mint. As fresh fruits, they can be enjoyed directly or incorporated into a variety of culinary creations like smoothies, desserts, and chutneys. Grown in South America\'s tropical climate, these fruits are not just delicious but also high in vitamin C and fiber. Their jelly-like center adds a unique texture, making them a tasty and nutritious addition to any meal or snack.', 'Fresh fruit known as Feijoas or pineapple guavas. Sweet, tangy flavor with hints of pineapple, guava, and mint. High in vitamin C and dietary fiber. Perfect for fresh eating, smoothies, baking, and making chutneys. Grown in tropical climates of South America. Notable for their jelly-like center and fragrant aroma.', 'Hypermart', 'https://i5.walmartimages.com/asr/c8141e4b-6adf-4051-9c69-6f652dffbb7b.c25e60a929a74812e66604e7fb0e3184.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8141e4b-6adf-4051-9c69-6f652dffbb7b.c25e60a929a74812e66604e7fb0e3184.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8141e4b-6adf-4051-9c69-6f652dffbb7b.c25e60a929a74812e66604e7fb0e3184.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (443840508, 'Fresh Pineberries, 10 oz Container', 4.72, '769197000094', 'The sweet, juicy flavor of Fresh Pineberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. These juicy berries have a tropical pineapple flavor with the texture and feel of strawberries making them an irresistible treat. Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful salad, or puree them to make a delicious cocktail. They contain essential vitamins and nutrients like vitamin C and dietary fiber, making them perfect for a healthy diet. Prior to serving simply gently wash them and remove the leafy caps, then enjoy the fresh taste. Refrigerate the berries in original clam shell tray to keep them fresh and ready for use. Pick up Fresh Pineberries today and savor the delectable flavor.', 'Fresh Pineberries, 10 oz Light, refreshing pineapple taste Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail Prior to serving gently wash them and remove leafy cap Refrigerate your strawberries in the original clam shell container to maintain freshness Keep dry for optimal freshness', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3734fbb9-ba73-40a0-82f0-1e87b883e489.33d535fdf245abdf14bbc31347b64ed7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3734fbb9-ba73-40a0-82f0-1e87b883e489.33d535fdf245abdf14bbc31347b64ed7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3734fbb9-ba73-40a0-82f0-1e87b883e489.33d535fdf245abdf14bbc31347b64ed7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (443892488, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_400094718506', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (444522162, 'Yellow Flesh Peaches, per Pound', 1.58, '405528783952', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (445255635, 'Welch\'s Bi-Color Fresh Seedless Grapes, 2 lb Package', 6.97, '095829210198', 'Treat yourself to the delicious, juicy flavor of Fresh Bicolor Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the fresh taste of Fresh Red Seedless Grapes.', 'Fresh Bicolor Grapes Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/53cd4e2b-8636-48c5-8466-b248c3042f58.41044e74e6bc2553e4cde6f1ed9614c1.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/53cd4e2b-8636-48c5-8466-b248c3042f58.41044e74e6bc2553e4cde6f1ed9614c1.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/53cd4e2b-8636-48c5-8466-b248c3042f58.41044e74e6bc2553e4cde6f1ed9614c1.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (445368978, 'Gourmet Demi Long Shallots 1 Lb Mesh Bag', 2.47, '', 'short description is not available', 'Gourmet Demi Long Shallots 1 Lb Mesh Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (445516436, '(4 pack) (4 Pack) Gefen Organic Vacuum Pack Beets, 17.6 Oz', 29.56, '710069011014', 'Salad ready', 'Gefen Organic Vacuum Pack Beets, 17.6 Oz', 'Gefen', 'https://i5.walmartimages.com/asr/0a9405f5-63eb-4849-9de2-debcc156ac9f_1.c00291e6af5df99f138f828e0ef756a8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a9405f5-63eb-4849-9de2-debcc156ac9f_1.c00291e6af5df99f138f828e0ef756a8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a9405f5-63eb-4849-9de2-debcc156ac9f_1.c00291e6af5df99f138f828e0ef756a8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (445641092, 'Fieldpack Unbranded Fresh Strawberries 2#', 5.86, 'deleted_066022003634', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 2#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/19e5eec4-4ff0-4dc6-97d0-ae0d16d8f2b1.a0b683f83258e19335d29f622b44b8c3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19e5eec4-4ff0-4dc6-97d0-ae0d16d8f2b1.a0b683f83258e19335d29f622b44b8c3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19e5eec4-4ff0-4dc6-97d0-ae0d16d8f2b1.a0b683f83258e19335d29f622b44b8c3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (445780415, 'Chopped Green Onions', 2.88, 'deleted_705393300200', 'short description is not available', 'Chopped Green Onions', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (445940901, '1# Bag Keylimes', 2.98, 'deleted_095829600555', 'short description is not available', '1# Bag Keylimes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (446115932, 'Homeboy Hatch Chile Guacamole', 3.34, '855420002635', 'Homeboy provides much more than flavor for your chips. It fuels transformation for thousands of former gang members on a journey to recovery through Homeboy Industries.Father Greg Boyle, \"G\", founded Homeboy Industries 27 years ago to provide hope, training, and support to formerly gang-involved and recently incarcerated men and women, allowing them to redirect their lives and become contribution members of our community. With every purchase you join a virtuous circle helping men and women develop the strength and skills to change for the better. We heal families. We create thriving communities. We provide the Strength to Change. Thank you for being a part of the Strength to Change at Homeboy Industries. Enjoy our Homeboy Hatch Chilies Guacamole!', 'Homeboy Hatch Chile Guacamole,', 'Homeboy', 'https://i5.walmartimages.com/asr/894a35d5-70e7-470b-ac4e-84215d48abd8_4.b42f3116ade51d9ae9b1c12174a6de1f.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/894a35d5-70e7-470b-ac4e-84215d48abd8_4.b42f3116ade51d9ae9b1c12174a6de1f.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/894a35d5-70e7-470b-ac4e-84215d48abd8_4.b42f3116ade51d9ae9b1c12174a6de1f.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (446441158, 'Small Bagged Oranges', 3.98, 'deleted_725422110501', 'short description is not available', 'Small Bagged Oranges', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (446628572, 'Lupitas Tamarindo 7oz', 7.11, '788269098531', 'Tamarind', 'Lupitas Tamarindo 7oz', 'Lupitas', 'https://i5.walmartimages.com/asr/0ac473d6-77c7-45cd-b62e-a74c900dc01c.bb399b0f2411895ce266126f2ce5dc6b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ac473d6-77c7-45cd-b62e-a74c900dc01c.bb399b0f2411895ce266126f2ce5dc6b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ac473d6-77c7-45cd-b62e-a74c900dc01c.bb399b0f2411895ce266126f2ce5dc6b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (446747641, 'Cabo Fresh Squeeze Mild Guacamole, 12oz', 7.67, '811892028801', 'Cabo Fresh Guacamole avocado are made with the highest standards of excellence. Stays green for up to 14 days with our airlock technology. Squeeze fresh guacamole on your favorite nachos, quesadillas, tacos and more. Yucatan guacamole is chunky, chip-breaking guacamole made with 95% avocado. Simply put, we’re the best tasting, most authentic guacamole you can buy.', 'Guacamole Squeeze, 12 oz Pouch Squeeze it on a burger, sandwich, or toast, or swap it for mayo in an upgraded version of chicken salad. A bold new way to enjoy your guac! Avocados are 100% non-GMO;', 'Cabo Fresh', 'https://i5.walmartimages.com/asr/3faf19a7-0942-4454-864d-2ada2ada409f_4.9ca443592cb63f89b2a225bba1059284.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3faf19a7-0942-4454-864d-2ada2ada409f_4.9ca443592cb63f89b2a225bba1059284.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3faf19a7-0942-4454-864d-2ada2ada409f_4.9ca443592cb63f89b2a225bba1059284.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (446897881, 'Red Potatoes 5 Lb Bag', 5.77, 'deleted_826088510114', 'short description is not available', 'Red Potatoes 5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (446914379, 'Fresh Green Seedless Grapes, 2 Lb', 5.47, 'deleted_885282001958', 'short description is not available', 'Fresh Green Seedless Grapes, 2 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (447001384, 'Avo Mex HA LB 9/4 36 1', 3.48, 'deleted_887214000213', 'Bag of 4 Avocados', 'Large Avocado 4 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (447093133, 'Cupid Grape Hybrid Tomato Plant - 3.5\" Pot - Beats Other Grape Tomatoes in Taste - Indoors/Out', 4.99, '811332037370', 'TOMATO: Tomatoes are rich in vitamins and antioxidants, and the seeds are high in fiber. The green parts are mildly poisonous, which is not surprising, as tomatoes are closely related to both nightshade and tobacco. The tomato was originally believed to be poisonous when introduced into Europe, and was used solely as an ornamental plant during the 16th and 17th centuries. The first traces of its use as a food date back to the first half of the 18th century. Tomatoes are now a tasty ingredient in many dishes, and are used fresh, canned, stewed or even sun-dried. Tip-top tomato taste! Our exclusive grape tomato sets a high standard. Consistently the top choice in our summer taste tests, ‘Cupid\' maintains a higher sugar content than any other grape tomato—and the sweetness doesn\'t fade in late summer. The elongated, shiny red 1\" globes produce in abundance on the vigorous vines. One of the best tomatoes to grow indoors in a sunny window.', '1 ounce fruit. Midseason High sugar content Indeterminate- Grow indoors or out Easy to grow. Very productive.', 'Hirt\'s Gardens', 'https://i5.walmartimages.com/asr/ea0d66f9-8d0b-4d3d-b039-73fdac800662_1.5175d2155acbd5fd9bee6671d80890ae.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea0d66f9-8d0b-4d3d-b039-73fdac800662_1.5175d2155acbd5fd9bee6671d80890ae.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea0d66f9-8d0b-4d3d-b039-73fdac800662_1.5175d2155acbd5fd9bee6671d80890ae.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (447097252, 'Sweet Potatoes, 5 lb, Bag', 4.48, '617620000114', 'These versatile vegetables can be used to make savory sides or sweet treats. Try them roasted, baked, or grilled for a tasty addition to any dish or try them in a traditional sweet potato pie for a sweet dessert. The mouthwatering possibilities are endless with this hearty vegetable. Add something amazing to your meals with sweet potatoes!', 'Sweet Potatoes 5 lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8933bd9d-2b42-4ec1-ac71-b19adb06b70f.c15c7aa37ba358dc3951cdd13016a888.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8933bd9d-2b42-4ec1-ac71-b19adb06b70f.c15c7aa37ba358dc3951cdd13016a888.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8933bd9d-2b42-4ec1-ac71-b19adb06b70f.c15c7aa37ba358dc3951cdd13016a888.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (447146911, 'Yellow Grape Tomato, 10 oz Package', 4.28, 'deleted_689259000483', 'A unique spin on the time-tested grape tomato, these colorful cousins of the grape tomato boast unique citrusy, floral notes. Refreshingly vibrant and versatile, you can enjoy it for snacking, salads, grilling, roasting or sautéing. Try this tomato roasted in a chunky sauce, grilled on kabobs, or chopped into a zesty salsa.', 'Orange Grape Tomatoes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (447446580, 'Fresh Organic Mini Cucumbers', 2.98, 'deleted_816426013131', 'Enjoy the crisp, delicious flavor of Fresh Organic Mini Cucumbers. You can use this tasty vegetable in a variety of recipes. Use these cucumbers to make healthy treats such as a cucumber salad with tomatoes and onions in a vinaigrette dressing; mix diced cucumbers with Greek yogurt, lemon, dill, and garlic for a refreshing tzatziki sauce for gyros or veggies; add to a crisp, fresh veggie salad; or thinly slice and add to a vinegar brine for quick pickles. Any way you slice, dice, or spiralize them, Fresh Organic Mini Cucumbers are a refreshing, healthy addition to any meal.', 'These fresh organic mini cucumbers are crisp and delicious Use in a variety of recipes or enjoy on its own Make a cucumber salad with tomatoes and onions in a vinaigrette dressing Thinly slice and add to a vinegar brine for quick pickles', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9728c1de-d9aa-4f3a-8c5c-14a9dbed5173.1017666711f6bd17872dad2b6c42b851.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9728c1de-d9aa-4f3a-8c5c-14a9dbed5173.1017666711f6bd17872dad2b6c42b851.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9728c1de-d9aa-4f3a-8c5c-14a9dbed5173.1017666711f6bd17872dad2b6c42b851.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (447882834, 'Tasteful Selections Sunburst Blend Organic Bite Size Potatoes, 24oz Mesh Bag', 4.88, '826088523107', 'Experience the delicious blend of creamy textures and tender skins with our organic Sunburst Blend Potatoes. These bite-size wonders are a delightful fusion of honey gold and red potatoes, offering a flavorful and healthy addition to your meals. Conveniently packaged in a 24oz mesh bag, these fresh vegetables are perfect for quick and easy storage. Add a nutritious touch to your diet with these versatile potatoes that deliver a satisfying culinary experience. Ideal for steaming, roasting, or mashing, they are a healthy food choice, brought to you fresh and ready-to-cook.', 'Creamy textures and tender skins for the ultimate flavor fusion Includes a mix of honey gold and red potatoes Organic and fresh from farm to table Convenient bite-size potatoes for easy cooking Packaged in a 24oz mesh bag for freshness and storage ease Ideal for a variety of cooking methods and meal options, ensuring a healthy food choice', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/83f1f162-ff87-4376-9ad9-fafd711f4050.861b4395a4ef2d4cd2b8c265d1b2d64c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/83f1f162-ff87-4376-9ad9-fafd711f4050.861b4395a4ef2d4cd2b8c265d1b2d64c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/83f1f162-ff87-4376-9ad9-fafd711f4050.861b4395a4ef2d4cd2b8c265d1b2d64c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (448046001, '180pc Pto Idaho 10#', 1074.6, '405500007885', 'short description is not available', '180pc Pto Idaho 10#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (448620955, 'Walmart Produce Red Apple Slices 5/2 Oz', 3.58, '717524720290', 'short description is not available', 'Walmart Produce Red Apple Slices 5/2 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (448827481, 'Medium Avocado 5 Count Bag', 3.28, '', 'short description is not available', 'Medium Avocado 5 Count Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (448898165, 'Org Bell Green Pepper', 3.97, 'deleted_823874000187', 'Organic Green Bell Peppers are an extremely versatile vegetable that is a must-have for every cook. Naturally low in calories, bell peppers are exceptionally rich in vitamin C and other antioxidants, and our green bell peppers are certified organic by the U.S. Department of Agriculture. You can choose to eat them raw and dip them in ranch, or you can incorporate them into a variety of recipes. Dice them and put them in a hearty chili, slice them and add to a deli sandwich, saute them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out green bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper that will have the family asking for seconds. The culinary possibilities are endless with Organic Green Bell Peppers.', 'Organic Green Bell Peppers, 2 Pack: 2-pack of organic bell peppers Naturally low in calories Exceptionally rich in vitamin C and other antioxidants Create delicious recipes with these organic bell peppers', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/f5a05d30-e54c-4fd3-951a-25a0e67e2047_1.2ff1b683c796a3f03a79077fbb3c6e2d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f5a05d30-e54c-4fd3-951a-25a0e67e2047_1.2ff1b683c796a3f03a79077fbb3c6e2d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f5a05d30-e54c-4fd3-951a-25a0e67e2047_1.2ff1b683c796a3f03a79077fbb3c6e2d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (449076457, 'Services Reduced Program Dept 94', 0.01, '251686000000', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (449292174, '180pc Apple Gala 3#', 561.6, '405665854485', 'short description is not available', '180pc Apple Gala 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (449339781, 'Fresh Slicing Tomato, 2 Pack', 2.98, 'deleted_679508011032', 'Bring the fresh, delicious taste of Slicing Tomatoes into your home. These tomatoes deliver sweet and juicy flavor with each bite and are an ideal ingredient in a variety of recipes. They would make a tasty, garden-inspired addition to salads, burgers, gourmet sandwiches, and so much more. They are picked at peak freshness and specially bred for deep red color, intense flavor, and higher lycopene content than standard tomatoes. Whether you slice or dice them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with these fresh Slicing Tomatoes.', 'Slicing Tomato, 2 Pack: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, burgers, gourmet sandwiches, and more Add to party trays or school lunches Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e648291f-0ccf-4ef5-a8f8-7fbe8d8686bb.192e42a5f946db220a42352ce18ef6f8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e648291f-0ccf-4ef5-a8f8-7fbe8d8686bb.192e42a5f946db220a42352ce18ef6f8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e648291f-0ccf-4ef5-a8f8-7fbe8d8686bb.192e42a5f946db220a42352ce18ef6f8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (449447343, 'Fresh Buttercup Squash, Each', 5.27, '000000047586', 'Add rich flavor and color to your meals with fresh Buttercup Squash. If you like pumpkin, then you\'re sure to love the sweet taste of buttercup squash. Try using it to make a comforting soup that will warm you up when it\'s cold outside, or try it cubed and roasted with your favorite spices for a satisfying side dish. You can also use this versatile winter squash to make something sweet. Try stuffing it with pecans, apples, cinnamon, brown sugar, and butter for a delicious dessert. Be sure to save the seeds because you can roast them just like you would pumpkin seeds for a tasty snack. Create your next culinary masterpiece with fresh Buttercup Squash.', 'Buttercup Squash, 1 Each: Sweet winter squash Great to use in a comforting soup to warm you up Roast with your favorite spices for a tasty side dish Stuff with apples, cinnamon and brown sugar for a delicious dessert Great source of beta-carotene Good source of vitamins and minerals', 'Fresh Produce', 'https://i5.walmartimages.com/asr/279ce8b7-8c67-4e67-a186-fcf706ffe185.a5e85714fa59323777c20c5c7d3aec4f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/279ce8b7-8c67-4e67-a186-fcf706ffe185.a5e85714fa59323777c20c5c7d3aec4f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/279ce8b7-8c67-4e67-a186-fcf706ffe185.a5e85714fa59323777c20c5c7d3aec4f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (449532894, 'Fresh Yellow Nectarines, 1 Lb.', 3.98, '405508575751', 'Fresh Yellow Nectarines, 1 Lb.', 'Fresh Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (449561554, 'Colored Bell Pepper 2pk', 3.4, '699058000232', 'short description is not available', 'Colored Bell Pepper 2pk', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (449806182, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094949450', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (449811321, 'Red Globe Seeded Grapes, Bag', 22, '', 'short description is not available', 'Red Globe Seeded Grapes, Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (449822160, 'Freshness Guaranteed Watermelon Bowl', 4.97, '263035000005', 'Experience a burst of summertime goodness with this delicious Freshness Guaranteed Watermelon. This pre-cut ripe watermelon is juicy, sweet, and refreshing to the taste. In addition, watermelons are a great natural source of vitamins A and C. Carry them with you and eat them straight out of the tray any time you want, at home, or on-the-go. Pair them with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use them as a naturally sweet ingredient in a fruit salad. Add some fresh fruit to your daily menu with this Freshness Guaranteed Watermelon.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Watermelon, 16 oz: Pre-cut watermelon chunks Convenient take-and-go packaging Good source of vitamins A and C No preservatives, artificial colors or artificial flavors Perfect for your next backyard cookout Net weight: 16 oz Sweet and Juicy', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (449832336, 'Fresh Dark Sweet Washington Cherries, per Pound', 3.98, '400094426340', 'Fresh Dark Sweet Washington Cherries, per Pound', 'Fresh Dark Sweet Washington Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (450422835, 'Medley Tomato, 10 oz Package', 4.97, '689259001558', 'Bring the fresh, delicious taste of Medley Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Medley Tomatoes.', 'Medley Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (450527821, 'California Grown Peaches, per Pound', 1.58, '400094950227', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (451054153, 'Snow Peas 8oz', 3.98, 'deleted_033383703022', 'short description is not available', 'Snow Peas 8oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (451248079, 'Freshly Diced Red Onions', 2.58, '705393300217', 'short description is not available', 'Freshly Diced Red Onions', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (451641787, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094005866', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (451757652, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094454480', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (452294672, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094470565', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (452617375, 'Yellow Flesh Peaches, per Pound', 1.58, '400094804452', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (452744396, 'Fresh Color Bell Peppers, 3 Count', 3.24, 'deleted_033383701776', 'Enhance your meals with the delicious flavor of Fresh Color Bell Peppers (Tricolor Pimiento Morron). Dice these colorful bell peppers and put them in a hearty chili, slice them and add to a deli sandwich, saute them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly sliced steak and serve with rice. A hollowed-out bell pepper can be filled with sausage, mushrooms, and rice to create a delicious stuffed pepper that will have the family asking for seconds. With so many ways to prepare them, Fresh Color Bell Peppers are an excellent fresh produce vegetable to have on hand.', 'Fresh Color Bell Peppers are an excellent addition to any meal Dice them and put them in chili Add to a deli sandwich Slice and serve with your favorite dip Loaded with vitamin C High in vitamin A Wash before eating', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/5a48f422-798a-445d-b93f-0e7542635607.5b6279bf203b58e61293db96e9b6bee9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a48f422-798a-445d-b93f-0e7542635607.5b6279bf203b58e61293db96e9b6bee9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a48f422-798a-445d-b93f-0e7542635607.5b6279bf203b58e61293db96e9b6bee9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (452944178, 'Diced Yellow Onions', 2.58, '782796022342', 'short description is not available', 'Diced Yellow Onions', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (452966017, '200pc Pto Red 3# Lm', 868, '405555987248', 'short description is not available', '200pc Pto Red 3# Lm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (453028786, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '405500014654', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (453426276, 'Fresh California Grown Nectarines, 1 Lb.', 1.78, '400094810224', 'Fresh California Grown Nectarines, 1 Lb.', 'Fresh California Grown Yellow Nectarines', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (453791517, 'Fresh Envy Apples 2lb Bag', 3.94, '066022003283', 'Experience the delicious taste of Fresh Envy Apples, known for their crisp texture and balanced sweetness. Featuring a beautiful golden red color, these apples are perfect for snacking or pairing with your favorite cheeses and sandwiches. Simple and easy to enjoy any time, Envy apples stay fresh and white longer, making them ideal for mocktails or adding brightness to any dish. Discover the ultimate apple experience with Envy.', 'Plant variety: Envy Beautifully balanced sweetness Uplifting fresh aroma Delightfully satisfying crunch Naturally stays white longer when sliced Perfect for snacking or pairing in recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f5e256c4-63a6-4d2b-a5a8-6204b2b01a48.d57fde364e7c19d2aa658c4194e4631c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f5e256c4-63a6-4d2b-a5a8-6204b2b01a48.d57fde364e7c19d2aa658c4194e4631c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f5e256c4-63a6-4d2b-a5a8-6204b2b01a48.d57fde364e7c19d2aa658c4194e4631c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (453801512, 'Fortune Brand Dried Black Fungus, Shredded, 4 Oz, 50 Ct', 68.97, '022652206944', 'DRIED BLACK FUNGUS SHREDDED', 'Fortune Brand Dried Black Fungus, Shredded, 4 Oz, 50 Ct', 'FORTUNE BRAND', 'https://i5.walmartimages.com/asr/0fb9bf30-1866-43a2-9b89-8e7aa7504fcc.34347583015ab406cbabb7672fcb2854.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0fb9bf30-1866-43a2-9b89-8e7aa7504fcc.34347583015ab406cbabb7672fcb2854.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0fb9bf30-1866-43a2-9b89-8e7aa7504fcc.34347583015ab406cbabb7672fcb2854.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (454351185, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, '400094473085', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (454746658, 'Fresh Cassava , Pound', 0.88, 'deleted_405878099840', 'Create something delicious with this fresh Yuca (Cassava). Yuca, also known as Cassava, is a tuber cultivated throughout Latin America and Asia. Its flesh is hard, dense and white like a coconut, and has a hard, waxy bark-like covering. Yuca has a starchy, slightly sweet flavor, and must be cooked before eating. They may be prepared in a variety of ways, such as mashed, baked, boiled, fried, and more. Use it to make crispy fries, a comforting stew, or even a sweet cake. It\'s also naturally gluten-free, cholesterol-free, and fat-free. Make your next culinary masterpiece with Yuca (Cassava).', 'Naturally gluten-free, cholesterol-free, and fat-free Rich in vitamin C and vitamin B Mash with garlic and butter or add to soups and stews Fresh and whole Peel and cook before eating (do not eat raw) Versatile and delicious', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/6fe438f2-111f-4431-a3a2-8b0111ee4356.74ff54b4b426043928320ff9a2a1f6d7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6fe438f2-111f-4431-a3a2-8b0111ee4356.74ff54b4b426043928320ff9a2a1f6d7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6fe438f2-111f-4431-a3a2-8b0111ee4356.74ff54b4b426043928320ff9a2a1f6d7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (455270189, 'Yellow Flesh Peaches, per Pound', 1.58, '400094987803', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (455677475, 'Bowery Farming Bowery Salad Spinach Mix 10oz', 3.98, '851536007601', 'short description is not available', 'Bowery Farming Bowery Salad Spinach Mix 10oz', 'Bowery Farming', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (456230450, 'Manzana Granny Smith de Estados Unidos, 1 Lb.', 1.77, '203284000005', 'Manzana Granny Smith de Estados Unidos, 1 Lb.', 'Manzana Granny Smith Estados Unidos', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (456442029, 'Leeks', 2.98, 'deleted_885435999651', 'Leeks', 'A mild-flavored member of the onion family, Leeks are excellent in stir-fry, soup and provide an exotic substitute—in increased quantities—in recipes that call for traditional onions. Leeks are distinguished by long, sturdy green stems with a thick white root end.', 'Ratto Bros.', 'https://i5.walmartimages.com/asr/1f883782-196f-4091-a1e6-8175f4c4ba1f.b402c6b7fc938d968e1bfc0b165f9603.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f883782-196f-4091-a1e6-8175f4c4ba1f.b402c6b7fc938d968e1bfc0b165f9603.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f883782-196f-4091-a1e6-8175f4c4ba1f.b402c6b7fc938d968e1bfc0b165f9603.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (456527059, '225pc Pto Rst Jmb 8#', 1444.5, '405518791226', 'short description is not available', '225pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (456838850, 'Dark Sweet Cherries, Half Pint', 2.98, '813200013646', 'Dark Sweet Cherries, Half Pint', 'Dark Sweet Cherries 1/2 Dry Pint', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (457186108, 'Walmart Produce Melon Trio 10 Oz', 2.48, '717524415387', 'short description is not available', 'Walmart Produce Melon Trio 10 Oz', 'WALMART PRODUCE', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (457191372, 'Fieldpack Unbranded Poblano Peppers', 0.68, '812181022128', 'short description is not available', 'Fieldpack Unbranded Poblano Peppers', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (458425784, 'Fresh Green Seedless Grapes', 3.27, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (458484271, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094554357', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (458511849, 'Fresh Apple Red, Each, Sweet', 4.47, '', 'Grown with care and picked at the peak of ripeness, our Red Fresh Apples are sure to satisfy your cravings. With their sweet and juicy taste, they make for a perfect snack any time of the day. Graced with a classic, vibrant red color, these apples are full of nutrients such as fiber, vitamin C, and antioxidants. Get your daily dose of health and deliciousness with our Red Apples.', 'Sweet, crisp, and juicy Creamy white flesh with low acidity Excellent snacking apple Higher antioxidants due to the rich, deep red skin Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp, and apple pie', 'Unbranded', 'https://i5.walmartimages.com/asr/ada31246-1c45-4c41-aec7-e2d607500bdf.38553668d16b287cd56e935e3f043740.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ada31246-1c45-4c41-aec7-e2d607500bdf.38553668d16b287cd56e935e3f043740.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ada31246-1c45-4c41-aec7-e2d607500bdf.38553668d16b287cd56e935e3f043740.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (459276880, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094032237', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (459862052, 'Hass Avocados, each', 1.18, '', 'Avocados aren’t just great-tasting fresh produce items, but they are a nutrient-dense fruit that can be enjoyed throughout the year. Hass avocados are a versatile ingredient with a creamy texture and mild flavor that can be used in many different types of recipes and dishes that are perfect for enjoying at barbecues and outdoor gatherings with friends and family during the summer. Enjoy avocados in countless ways that will make those barbecues and gatherings with family and friends even more exciting. Use avocados in flavorful recipes that everybody can share and enjoy while being together outside. Try avocados in individual Mexican food items like tacos or burritos, as part of appetizers like avocado crostini, or in a fresh guacamole or avocado dip so everybody can dip tortilla chips into something delicious. The possibilities are deliciously endless if you need additional food options for barbecues. Not only is a avocado a great ingredient to use in numerous ways, but it is also a healthy food that contributes unsaturated “good” fats and almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9. A ripe avocado will have a dark green to nearly black skin color, a bumpy skin texture and should yield to gentle pressure without leaving indentations or feeling mushy. Avocados with a slightly bumpy texture should be ripe in 1 to 2 days. They will also be somewhat firm and have a dark green and black speckled color. Once you’ve selected the perfect bag of avocados, you’ll be ready to enjoy all kinds of different healthy foods and recipes for the next time you’re enjoying an outdoor gathering with friends and families.', '● One Hass Avocado ● Fresh fruit with a creamy texture and mild flavor ● Fresh avocados are great for using in tacos, burritos, appetizers, avocado dip and fresh guacamole so that you have delicious food to share and enjoy during Cinco De Mayo ● A cholesterol free fruit that contains almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9 ● Small hass avocados are the lowest sugar fruit and provide unsaturated “good fats” that help absorb Vitamin A, Vitamin D, Vitamin K and Vitamin E ● Small ripe avocados will have dark green to nearly black skin color, a bumpy texture and should yield to gentle pressure without leaving indentations', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0b27dfbf-7446-495a-9169-7a4870dca6e4.8dc71e65fc81b403186e3f7bc997aa63.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b27dfbf-7446-495a-9169-7a4870dca6e4.8dc71e65fc81b403186e3f7bc997aa63.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b27dfbf-7446-495a-9169-7a4870dca6e4.8dc71e65fc81b403186e3f7bc997aa63.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (460156026, 'Mango', 0.58, '', 'short description is not available', 'Mango', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c79e38a2-f6d9-470d-887e-6559f7094755.803178daa4572c5d577be070187651e4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c79e38a2-f6d9-470d-887e-6559f7094755.803178daa4572c5d577be070187651e4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c79e38a2-f6d9-470d-887e-6559f7094755.803178daa4572c5d577be070187651e4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (460255490, 'Sweet Onions, each', 0.66, 'deleted_811289020043', 'short description is not available', 'Bulk Sweet Onions', 'Fresh Produce', 'https://i5.walmartimages.com/asr/20e2cec5-74da-4481-ba2f-437a37f574a0_1.58a77675997b6e7da785398e536c8c1a.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20e2cec5-74da-4481-ba2f-437a37f574a0_1.58a77675997b6e7da785398e536c8c1a.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20e2cec5-74da-4481-ba2f-437a37f574a0_1.58a77675997b6e7da785398e536c8c1a.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (460314643, 'Aurora Natural Products Australian Naked Ginger, 11 Oz.', 11.49, '655852005521', 'Aurora Natural Products - Australian Naked Ginger', 'Aurora Natural Products Australian Naked Ginger, 11 Oz.', 'Aurora GB', 'https://i5.walmartimages.com/asr/a2eccccf-3397-4f44-81cb-6572f4f13e3e.b09664a49caa6515ddf5103860072647.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a2eccccf-3397-4f44-81cb-6572f4f13e3e.b09664a49caa6515ddf5103860072647.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a2eccccf-3397-4f44-81cb-6572f4f13e3e.b09664a49caa6515ddf5103860072647.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (460584856, '240pc On Swt 3# Ds', 787.2, '405542362560', 'short description is not available', '240pc On Swt 3# Ds', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (460694475, 'Fresh Kiwi, 32 oz, Package', 4.48, '898249002387', 'Treat yourself to the delicious and refreshing taste of kiwi. Kiwi are known for their sweet, tangy, and soft flesh and nutritional benefits. They are packed with vitamin C, fiber, and antioxidants. They\'re also fat-free and have a low glycemic index. Enjoy a fresh kiwi with your breakfast to start your day off on the right foot or bring one to work and treat yourself to a scrumptious healthy snack at the office. You can also serve them up in a big fresh fruit salad with all your favorite fruits like strawberries, apples, blueberries and more. They\'re even perfect for topping pies, tres leches cakes, tarts and more for dessert. The possibilities are endless when you bring home Kiwi', 'Delicious sweet and tangy kiwi fruit Packed with Vitamin C, fiber and antioxidants with a scrumptious fruit taste Enjoy a fresh kiwi with your breakfast to start your day off on the right foot Bring one to work and treat yourself to a scrumptious healthy snack at the office Great for school lunches Perfect for topping desserts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e0d53c8e-9ea9-49b6-8ac7-ddaba6c0a43d_1.abad639a10a36369a7aa5033dbebf8a0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e0d53c8e-9ea9-49b6-8ac7-ddaba6c0a43d_1.abad639a10a36369a7aa5033dbebf8a0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e0d53c8e-9ea9-49b6-8ac7-ddaba6c0a43d_1.abad639a10a36369a7aa5033dbebf8a0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (460830555, 'Bulk Collard Greens', 0.98, 'deleted_405810350824', 'short description is not available', 'Bulk Collard Greens', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (461781980, 'California Grown Peaches, per Pound', 1.58, '400094390207', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (461908556, 'Diced Nopalitos 12.5oz', 2.38, '812181022265', 'short description is not available', 'Diced Nopalitos 12.5oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (462350881, '125pc Pto Rst Jmb 8#', 802.5, '405518789902', 'short description is not available', '125pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (462475047, 'Watermelon Seedless', 4.48, '400094920671', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (462487970, 'Spinach & Lettuce', 3.48, '860001516463', 'Tender and crispy. Elevate your everyday salad with the perfect blend of our sweet baby spinach and crispy lettuce.', 'Pesticide-free, local, ultra fresh', 'Fresh Produce', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (462558926, 'Freshness Guaranteed Fresh Black Seedless Grapes', 2.48, 'deleted_816426012493', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (462568163, 'All Purpose Potatoes, 3 Lb.', 3.48, '405505674884', 'All Purpose Potatoes, 3 Lb.', 'All Purpose Potatoes 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (462629488, 'Crunch Pak Family Sized Tart Apple Slice Bag 32oz', 4.98, '732313001107', 'A Healthy Crunch Pak Family Sized 32oz Bag of Tart Sliced Apples. Provides an optimal choice in your favorite recipes, on-the-go, between meals, lunchtime, or anytime during the day snack! Pick your family treat up today!', 'Crunch Pak Family Sized 32oz Bag of Tart Sliced Apples 80 Calories per serving Excellent Souce of Vitamin C', 'Fresh Produce', 'https://i5.walmartimages.com/asr/15dd1510-d970-42a1-afe6-40ea9a6dbed4.2df9c9888c9b52b7498fe2a687af0bbe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/15dd1510-d970-42a1-afe6-40ea9a6dbed4.2df9c9888c9b52b7498fe2a687af0bbe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/15dd1510-d970-42a1-afe6-40ea9a6dbed4.2df9c9888c9b52b7498fe2a687af0bbe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (463253675, '10oz Spinach For Demo', 0.01, '040094397433', 'short description is not available', '10oz Spinach For Demo', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (463335835, 'Marketside Peas/ranch 4pk', 4.98, '681131305426', 'short description is not available', 'Marketside Peas/ranch 4pk', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (463552742, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.98, 'deleted_400094240076', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (463813432, 'Rapini Fresh Produce Vegetable', 2.84, 'deleted_000651881065', 'Rapini Fresh Produce Vegetable', 'Rapini cooking vegetable - Fresh Produce', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (463826240, 'Watermelon Seedless', 4.98, '400094221600', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (464196364, 'Reichel Foods Sweet Apples with Gummy Rings, 2.2 oz', 1.28, '649632001667', 'short description is not available', 'Reichel Foods Sweet Apples with Gummy Rings, 2.2 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fa10d7cf-a748-4ca1-b0da-8f013d9278f7_1.50ad17f005c3baf8563c22d44c44f47c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa10d7cf-a748-4ca1-b0da-8f013d9278f7_1.50ad17f005c3baf8563c22d44c44f47c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa10d7cf-a748-4ca1-b0da-8f013d9278f7_1.50ad17f005c3baf8563c22d44c44f47c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (464233878, '2# Salad Cucumber', 2.98, 'deleted_605949000021', 'short description is not available', '2# Salad Cucumber', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (464315522, 'Fresh Sliced Baby Bella Mushrooms, 8 oz package', 2.38, 'deleted_021706200105', 'Experience the fresh taste of our Sliced Baby Bella Mushrooms. Baby bella mushrooms look similar in size and shape to white mushrooms, but they\'re hardier and provide a deeper earthy taste. They are just like the large portabella mushrooms you know and love but have been harvested just a few days before becoming large enough to fit a burger. This means they have that same firm, meaty texture you love about portabella caps, just in a tasty bite-size form. Pre-cleaned and pre-sliced, their hearty, full-bodied taste makes them an excellent addition to beef, wild game, and vegetable dishes. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try out our Sliced Baby Bella Mushrooms. Comes in a Light Tray.', 'Fresh Sliced Baby Bella Mushrooms, 8 oz tray: 8-ounce package of sliced baby bella mushrooms Naturally fat free Cholesterol free Low in calories, carbs and sodium Fresh and all natural Pre-cleaned Natural source of the antioxidant selenium Excellent addition to beef, wild game and vegetable dishes', 'Utah', 'https://i5.walmartimages.com/asr/700c52ac-1020-459e-936d-0fe6004ff6c3.8edf7423c90239a7d4e004acb8f50c64.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/700c52ac-1020-459e-936d-0fe6004ff6c3.8edf7423c90239a7d4e004acb8f50c64.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/700c52ac-1020-459e-936d-0fe6004ff6c3.8edf7423c90239a7d4e004acb8f50c64.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (465093022, 'Fresh Whole White Onion 2lb, Bag', 3.27, '819255020950', 'Add flavor to your next meal with Fresh White Onions ( Cebolla Blanca). For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. You can dice these onions and add them to a fresh garden salad for a satisfying crunch or sprinkle them on top of your fish tacos. White onions also make delicious golden onion rings to serve alongside juicy hamburgers and hot dogs at your next backyard barbecue. You can keep these onions at room temperature until ready to use. Stock your pantry with this three-pound bag of Fresh White Onions', 'Fresh whole white onions, 2-lb bag Ideal ingredient in a variety of recipes Can be sauteed and put in your favorite foods for added flavor Use to top sandwiches, hamburgers, and hot dogs Fresh onions can be stored in a cabinet or pantry and are easy to prepare', 'Unbranded', 'https://i5.walmartimages.com/asr/22e70759-b86f-4a5b-bfc9-304ecbe7bd55.f44d867bf1a837b6d1885ffe46040bee.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/22e70759-b86f-4a5b-bfc9-304ecbe7bd55.f44d867bf1a837b6d1885ffe46040bee.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/22e70759-b86f-4a5b-bfc9-304ecbe7bd55.f44d867bf1a837b6d1885ffe46040bee.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (465229924, 'Organic Lemons, each', 4.74, '000000940535', 'Produce', 'Selected and stored fresh,Sourced with high quality standards,Recommended to wash before consuming,Delicious on their own as a healthy snack or as part of a recipe', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4dd93938-8b09-4b95-8c3b-4974abd2be27.25e9e4090dcf1959eab88597e83ee1cf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4dd93938-8b09-4b95-8c3b-4974abd2be27.25e9e4090dcf1959eab88597e83ee1cf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4dd93938-8b09-4b95-8c3b-4974abd2be27.25e9e4090dcf1959eab88597e83ee1cf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (465368073, 'California Grown Peaches, per Pound', 1.58, '400094525944', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (465841657, 'Aerofarms Arugula Microgreens Salad, 2 oz Clam Shell, Fresh', 3.98, '815063021240', 'Peppery and bright, AeroFarms arugula microgreens add a bold spice to any dish. Our Micro Arugula falls in the light green and yellow portions of the AeroFarms FlavorSpectrum™, representing an intensely peppery profile with light vegetal notes. Microgreens can contain considerably higher levels of vitamins and carotenoids—about 5X greater—than their mature plant counterparts, according to the United States Department of Agriculture. AeroFarms greens are grown with zero pesticides and are ready to enjoy right out of the container. Taste the AeroFarms difference - enjoy Micro Arugula by adding a heaping handful to boost any meal including sandwiches, wraps, soups, salads, takeout, and more.', 'Bursting With Flavor No Pesticides Ever No Washing Needed', 'AeroFarms', 'https://i5.walmartimages.com/asr/0d19de3f-fd85-41d1-be43-85f1431dd9a8.e703b4d3ad7348ff02b30b13eba9399c.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d19de3f-fd85-41d1-be43-85f1431dd9a8.e703b4d3ad7348ff02b30b13eba9399c.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d19de3f-fd85-41d1-be43-85f1431dd9a8.e703b4d3ad7348ff02b30b13eba9399c.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (465896238, 'Fresh Organic Green Kiwi, 2 lb Clamshell', 6.94, '756110900104', 'Treat yourself to the refreshing flavor of Fresh Organic Green Kiwi. Enjoy this tasty kiwi on its own as a healthy snack or incorporate it into a variety of delicious recipes. For breakfast, you can make a sweet fruit bowl with sliced kiwi, strawberries, pineapple, and cantaloupe. For an extra special treat, top with a dollop of whipped cream. Cut it into small pieces and put it in a fresh salad along with chicken, cucumbers, tomatoes, and a light dressing. You can even use kiwi to make a sweet sorbet or scrumptious muffins. Enjoy the sweet and juicy taste of Fresh Organic Green Kiwi.', 'Fresh Organic Green Kiwi is a flavorful addition to many recipes Enjoy on its own or add to a mixed fruit salad Add to your fresh garden salad Get creative and make a refreshing sorbet Explore all the delicious ways to add fresh kiwi to your favorite recipes', 'Unbranded', 'https://i5.walmartimages.com/asr/3342798d-ea58-4782-87a7-aefc5068f3ac.6ea154d1827290e061d78a1776a4f284.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3342798d-ea58-4782-87a7-aefc5068f3ac.6ea154d1827290e061d78a1776a4f284.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3342798d-ea58-4782-87a7-aefc5068f3ac.6ea154d1827290e061d78a1776a4f284.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (465958629, 'Organic Sugar Snap Peas 6 Oz', 3.98, '716519009051', 'Snap Pea, Sugar, Stringless, Bag 6 OZ Organic. Washed and ready to eat. Three generations. Est. 1939. Perfect for healthy snacking. Mann\'s Stringless Sugar Snap Peas are a unique cross between English peas and snow peas. They are sweet, crunchy and delicious and can be enjoyed right out of the bag! For Nutrition Facts and Recipes, Please Visit: Veggiesmadeeasy.com. USDA organic. Certified organic by CCOF. We are dedicating to providing the highest quality organic vegetables to your family. Farming has been a third generation family business since 1939. All our vegetables are grown on family-owned farms. Rest assured - sustainable methods are utilized while growing these great tasting veggies that help keep you happy and healthy! Product of Mexico. Keep refrigerated. Perishable. 6 oz (170 g) Salinas, CA 93901 800-285-1002', 'Snap Peas, Sugar, Stringless Organic. Washed and ready to eat. Three generations. Est. 1939. Perfect for healthy snacking. Mann\'s Stringless Sugar Snap Peas are a unique cross between English peas and snow peas. They are sweet, crunchy and delicious and can be enjoyed right out of the bag! For Nutrition Facts and Recipes, Please Visit: Veggiesmadeeasy.com. USDA organic. Certified organic by CCOF. We are dedicating to providing the highest quality organic vegetables to your family. Farming has been a third generation family business since 1939. All our vegetables are grown on family-owned farms. Rest assured - sustainable methods are utilized while growing these great tasting veggies that help keep you happy and healthy! Product of Mexico.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/838175d7-7ae8-4fcd-b27d-46de92a23760.bc507da1d9098731e9595424468e5a6e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/838175d7-7ae8-4fcd-b27d-46de92a23760.bc507da1d9098731e9595424468e5a6e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/838175d7-7ae8-4fcd-b27d-46de92a23760.bc507da1d9098731e9595424468e5a6e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (466044741, 'Jumbo Red Onions per Pound, Whole', 1.58, 'deleted_405873145078', 'Introducing Jumbo Red Onions, sold by the pound for your culinary convenience. Our impressively large onions boast a robust flavor and striking color, making them the ideal choice for enhancing your favorite recipes. Perfect for salads, salsas, grilling, or caramelizing, these versatile red onions offer endless possibilities in the kitchen. Hand-selected for their size and quality, our Jumbo Red Onions ensure freshness and exceptional taste in every dish you prepare.', 'Jumbo Red Onions Per Pound Introducing Jumbo Red Onions, sold by the pound for your culinary convenience. Our impressively large onions boast a robust flavor and striking color, making them the ideal choice for enhancing your favorite recipes. Perfect for salads, salsas, grilling, or caramelizing, these versatile red onions offer endless possibilities in the kitchen. Hand-selected for their size and quality, our Jumbo Red Onions ensure freshness and exceptional taste in every dish you prepare. Bag\', and \'No Artificial Colors;No Artificial Flavors', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/25b57eb9-0750-4b51-b3cf-056501939195.6501ab4eda72c2e10f0cd1be33198dd6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25b57eb9-0750-4b51-b3cf-056501939195.6501ab4eda72c2e10f0cd1be33198dd6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25b57eb9-0750-4b51-b3cf-056501939195.6501ab4eda72c2e10f0cd1be33198dd6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (466063272, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094240427', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (466120411, 'Fingerling Potatoes, 1.5 Lb.', 3.47, '826429000779', 'Fingerling Potatoes, 1.5 Lb.', 'Fingerling Potatoes 1.5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (466512187, 'Small Bagged Oranges', 4.96, 'deleted_845963110003', 'Enjoy the juicy goodness of these Small Bagged Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, these Small Bagged Oranges will add flavor to any meal or beverage.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes Use as a garnish for your favorite cocktail Make sweet desserts like ambrosia, orange bars, and orange pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b431a5dd-223c-46d3-8326-26a4ff5fed56.08562544f9c9c34fb1b6c309efc5cf87.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b431a5dd-223c-46d3-8326-26a4ff5fed56.08562544f9c9c34fb1b6c309efc5cf87.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b431a5dd-223c-46d3-8326-26a4ff5fed56.08562544f9c9c34fb1b6c309efc5cf87.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (466557995, 'Watermelon Seedless', 4.48, '405504885540', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (466638840, 'Fresh Ginger Root', 1.98, '851720003150', 'short description is not available', 'Fresh Ginger Root', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (466868123, 'Marketside Beyond Baby Kale & Crispy Leaf Lettuce, 4 oz Clam Shell, Fresh', 2.98, '194346001484', 'Enjoy the fresh flavor of Marketside Beyond Baby Kale and Crispy Leaf Lettuce. These greens are indoor and vertically grown for peak-season freshness all year long. Indoor vertical farms are a controlled growing environment giving each plant the optimal amount of light and nutrients for fresh and flavorful produce any time of the year. Farming vertically means our produce can be grown using significantly less water and land than traditional outdoor farms. Create something delicious with Marketside Beyond Baby Kale and Crispy Leaf Lettuce. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Fresh baby kale and crispy leaf lettuce Indoor and vertically grown for peak-season freshness all year long No pesticides, herbicides or fungicides applied to our greens Convenient peel and reseal packaging Keep refrigerated until ready to enjoy', 'Marketside Beyond', 'https://i5.walmartimages.com/asr/d99f731e-6ca9-44ee-9c18-3f9c55c87407.f809f23f517f2a6d07331145d9656725.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d99f731e-6ca9-44ee-9c18-3f9c55c87407.f809f23f517f2a6d07331145d9656725.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d99f731e-6ca9-44ee-9c18-3f9c55c87407.f809f23f517f2a6d07331145d9656725.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (467396410, 'Fresh Mango Puerto Rico, Each', 0.98, '405673947872', 'Savor the irresistible taste of a fresh Mango. Mangoes are an excellent fruit to add to your breakfast, lunch, dinner, or dessert. For breakfast, you can chop the mango up and add it to yogurt or a smoothie for a sweet treat that\'s sure to get your morning started on a high note. For dessert, you could use a mango to make a refreshing sorbet or put a tropical twist on a cobbler. You can also use it to make creamy milkshakes or delicious juices that everyone is sure to enjoy. The culinary possibilities are endless when you keep your kitchen stocked with fresh Mangoes.', 'Irresistibly sweet and juicy Delicious on its own or in a variety of recipes Make a creamy milkshake or a nutritious juice blend Add mango to yogurt or a smoothie Use to top your salad for a tropical twist', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d4993498-cb0a-4539-bee5-b3c0db4a6702.ee3057845556133bab8fb2cd8e56b1a1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4993498-cb0a-4539-bee5-b3c0db4a6702.ee3057845556133bab8fb2cd8e56b1a1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4993498-cb0a-4539-bee5-b3c0db4a6702.ee3057845556133bab8fb2cd8e56b1a1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (468313248, 'Organic Fresh and Bold Ginger, 8 oz Bag', 4.87, '045255154283', 'Fresh organic Ginger is a great addition to your favorite foods, teas & soups. Organic ginger can be used shredded to spice up your food or as an ingredient. It is packed with vitamins, minerals and a healthy organic addition to your diet.', 'Organic Fresh and Bold Ginger, 8 oz bag Great addition to any meal or as an ingredient when cooking Packed with vitamins and minerals Rinse when ready to use Best if refrigerated', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6920d02a-c0c6-4882-aaad-233cb0e51fe1.d851d34351744b2e12d937809c2d9a0c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6920d02a-c0c6-4882-aaad-233cb0e51fe1.d851d34351744b2e12d937809c2d9a0c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6920d02a-c0c6-4882-aaad-233cb0e51fe1.d851d34351744b2e12d937809c2d9a0c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (468362626, 'Avocado Bag', 5.94, 'deleted_deleted_856893002399', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (468414675, 'Yellow Flesh Peaches, per Pound', 1.58, '400094615409', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (469553357, 'Roma Tomato, 2 lb Bag', 1.28, 'deleted_711069004587', 'With fresh Roma Tomatoes, it\'s easy to make a wholesome, delicious meal. Roma tomatoes are a fresh produce ingredient for whipping up a variety of wonderful dishes. You can use them to create a zesty tomato sauce for stirring into a homemade pasta dish, crush them up to make a delightful Roma tomato bruschetta, or simply enjoy them on their own as a nutritious snack or as a party platter option for dipping in your favorite vegetable dipping sauce. If you\'re feeling a classic tomato dish, Roma tomatoes can even lend themselves in making a comforting and appetizing tomato soup or a flavorful salsa. However you choose to use them, each Roma tomato will add stunning flavor to your meal. Elevate your recipes with Roma Tomatoes.', 'Roma Tomato, 2 lb Bag: Wholesome, versatile, and delicious Rich, juicy flavor in each bite Ideal ingredient for a variety of dishes Use to make pasta sauce, tomato soup, or fresh salsa Make a tasty pesto or bruschetta to serve at your next dinner party Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (469806788, 'Large Bagged Oranges', 6.78, 'deleted_072240757808', 'short description is not available', 'Large Bagged Oranges', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (469828175, 'Cucumber Salad/pickling', 3.48, 'deleted_072404000139', 'short description is not available', 'Cucumber Salad/pickling', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (470155170, 'Grape Tomato, 10 oz Package', 2.48, '815512010115', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Grape Tomatoes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (470486919, 'Bagged Jalapeno', 0.97, 'deleted_812181022227', 'short description is not available', 'Bagged Jalapeno', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (470724848, 'Fresh Yellow Bell Pepper, 1Each', 2.47, '000000049245', 'Enhance your meals with the delicious flavor of Fresh Yellow Bell Peppers. This fresh vegetable contains essential vitamins such as A and C, and minerals including calcium and magnesium. Yellow bell pepper, also known as red capsicum, has a crisp flavor that enhances a variety of recipes. Dice bell peppers and put them in a hearty chili, slice them, sauté them with onions or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out red bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper that will have the family asking for seconds. They also taste delicious raw alongside other vegetables. Add your favorite dip for a healthy, crunchy crudité. Cooked or uncooked, Yellow Bell Peppers are an excellent item to have on hand.', 'Fresh High on Vitamin A Large amounts of Vitamin E', 'Fresh Produce', 'https://i5.walmartimages.com/asr/133de766-420b-43ac-a9b7-9a85392131b6.b61c13709a2e3abc008873564ebee329.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/133de766-420b-43ac-a9b7-9a85392131b6.b61c13709a2e3abc008873564ebee329.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/133de766-420b-43ac-a9b7-9a85392131b6.b61c13709a2e3abc008873564ebee329.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (470872901, 'Mandarins 2lb', 4.67, 'deleted_091636000069', 'short description is not available', 'Mandarins 2lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/17069c40-767c-43d4-afbb-55fa19ab7c69_1.ace4117a7ae02ffe3f231246aeea4a03.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/17069c40-767c-43d4-afbb-55fa19ab7c69_1.ace4117a7ae02ffe3f231246aeea4a03.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/17069c40-767c-43d4-afbb-55fa19ab7c69_1.ace4117a7ae02ffe3f231246aeea4a03.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (471168085, 'Fresh Marketside Sweet Potato Cubes, 24 oz', 3.98, '681131377379', 'Marketside Sweet Potato Cubes are a delicious and easy dish that the entire family will enjoy. Use them to whip up a delicious side or incorporate them into your favorite meals from soups and casseroles to stir fries and more. Try the recipe for Roasted Sweet Potato Risotto on the back of the bag. Easy to prepare, these sweet potatoes may be cooked in the microwave or on the stovetop. There are about six servings per bag and each serving has only 90 calories. Add Marketside Sweet Potato Cubes to your next nutritious meal.Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Sweet Potato Cubes, 24 oz: Microwaves in bag in 6 minutes Washed and ready to cook Make a tasty casserole or add to a delicious soup Cook in the microwave or on the stovetop About 6 servings per bag Keep refrigerated', 'Marketside', 'https://i5.walmartimages.com/asr/6812e8fd-8913-4bf8-95a3-6b467fbc627c.9105776022e56d014d0f22a20bf327a4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6812e8fd-8913-4bf8-95a3-6b467fbc627c.9105776022e56d014d0f22a20bf327a4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6812e8fd-8913-4bf8-95a3-6b467fbc627c.9105776022e56d014d0f22a20bf327a4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (471179527, '6pk Tomato Beefsteak', 5.98, '024719388921', 'short description is not available', '6pk Tomato Beefsteak', '', 'https://i5.walmartimages.com/asr/eeb32f3b-1e37-446b-928e-570015aaf211.965f24f33a62008eceed63a88f10779a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eeb32f3b-1e37-446b-928e-570015aaf211.965f24f33a62008eceed63a88f10779a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eeb32f3b-1e37-446b-928e-570015aaf211.965f24f33a62008eceed63a88f10779a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (471208656, 'Great Value Frozen Sliced Mushrooms, 10 oz', 2.74, '078742350950', 'Experience the earthy goodness of Great Value Frozen Sliced Mushrooms. These mushrooms are frozen at peak freshness, ensuring you receive a product that maintains its robust flavor and texture. Known for their savory umami taste, they are perfect for enhancing meat dishes or serving as a delicious meat alternative. Add them to your favorite recipes or roast with Parmesan and garlic for an impressive appetizer. These ready-in-minutes mushrooms offer versatility and convenience, making them a staple in any kitchen. With Great Value, enjoy affordable, high-quality groceries that meet your family\'s needs.', 'Great Value Frozen Sliced Mushrooms Incorporate into your favorite recipes. Frozen to maintain freshness Frozen to maintain freshness Ready in minutes. Enjoy in a recipe or on its own Frozen to maintain freshness Frozen to maintain freshness Frozen to maintain freshness Frozen to maintain freshness', 'Great Value', 'https://i5.walmartimages.com/asr/9811b331-bb44-4fcc-9562-942eb71955e8_1.de9bf35b8fe44cc28643a3bac026f988.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9811b331-bb44-4fcc-9562-942eb71955e8_1.de9bf35b8fe44cc28643a3bac026f988.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9811b331-bb44-4fcc-9562-942eb71955e8_1.de9bf35b8fe44cc28643a3bac026f988.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (471269636, 'Plum, Each', 0.5, '405753578064', 'short description is not available', 'Plum, Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (471337232, 'Fresh Red Seedless Grapes', 1.84, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/4c5284a7-f42c-48d5-9aef-69ba7418c466_2.9be47203debdb29d3750aaa41a313a0f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4c5284a7-f42c-48d5-9aef-69ba7418c466_2.9be47203debdb29d3750aaa41a313a0f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4c5284a7-f42c-48d5-9aef-69ba7418c466_2.9be47203debdb29d3750aaa41a313a0f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (471404444, 'Freshness Guaranteed Sliced Brown Mushrooms 16oz', 4.42, 'deleted_631661999862', 'short description is not available', 'Freshness Guaranteed Sliced Brown Mushrooms 16oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (471413152, '120pc Apple Red 5#', 716.4, '400094581582', 'short description is not available', '120pc Apple Red 5#', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (471787160, 'Freshness Guaranteed Pink Apples 3lb Bag', 4.24, 'deleted_847473006746', 'short description is not available', 'Freshness Guaranteed Pink Apples 3lb Bag', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (472217781, '180pc Apple Gold 3#', 804.6, '405673064715', 'short description is not available', '180pc Apple Gold 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (472440025, 'Freshness Guaranteed Watermelon 24oz', 4.98, '681131377256', 'short description is not available', 'Freshness Guaranteed Watermelon 24oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (472560100, 'Red Seedless Grapes', 1.84, '', 'short description is not available', 'Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (472882921, 'Pineberry Blend 16oz', 8.97, '045009891228', 'Fresh cut pineapple, strawberries, and grapes in a medley', 'Pineberry Blend 16oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b7201a36-bff9-435d-9e3e-138d865efe8b.2bdbf58edd6077ee2a5a91beec1aa8a9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b7201a36-bff9-435d-9e3e-138d865efe8b.2bdbf58edd6077ee2a5a91beec1aa8a9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b7201a36-bff9-435d-9e3e-138d865efe8b.2bdbf58edd6077ee2a5a91beec1aa8a9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (473371112, '240pc On Ylw 3# Bp', 465.6, '400094993767', 'short description is not available', '240pc On Ylw 3# Bp', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (473715339, '27pc Val Choc Apple', 214.92, '405856205034', 'short description is not available', '27pc Val Choc Apple', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (473721140, 'NY SPICE SHOP Sour Tamarind Whole - 5 Pound - Tamarind Pods - Thai Sour Tamarind - Tamarind Candy', 51.99, '768253242430', 'NY Spice Shop sour tamarind is light brown in color sweet, tangy, and sour in taste. There are two special kinds of tamarinds “Sweet Tamarinds & Sour Tamarinds”, both are available at our NY Spice Shop. It is used to add in biryani, sweet and sour rice, and a variety of chickpeas chats. It is a strong base for varieties of chutneys, squashes, BBQ stew, and sauces. Sour tamarind is also used in Thai and other cuisines.', 'All-Natural Whole Tamarind Pods – NY Spice Shop sour tamarind pods are covered the fresh, delicious, edible fruit which is packed with healthy fibers, and antioxidants. Versatile Meal Enhancer – Our tamarind can be used for creating Thai pasts, Mexican candies or Agua Fresca, traditional Asian meals, amazing curry, Malaysian satay, and other exciting options friends and family will enjoy. HEALTHY & DELICIOUS – Sour tamarind chutney is naturally sour, no sugar added whole pods can make savory dishes and snacks. Delivered Fresh in Resealable Bag – Our tamarind comes in a resealable bag to ensure they’re fresh and taste great from start to finish. And because we’re focused on natural, organic ingredients you can trust they’re perfect. Trusted Quality in Every Bite – We want to make your meals, snacks, and sweet treats more memorable which is why we carefully source all our products to ensure they reach you ready to eat and with a stable shelf life.', 'NY Spice Shop', 'https://i5.walmartimages.com/asr/ad4bccea-9e8c-4399-8307-bcada98b33b8.196aef56f42b877a41afcfddcf6c3a7b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ad4bccea-9e8c-4399-8307-bcada98b33b8.196aef56f42b877a41afcfddcf6c3a7b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ad4bccea-9e8c-4399-8307-bcada98b33b8.196aef56f42b877a41afcfddcf6c3a7b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (474128385, 'Fieldpack Unbranded Romaine Hearts', 3.48, 'deleted_652953651626', 'short description is not available', 'Fieldpack Unbranded Romaine Hearts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (474438514, '120pc Apl Granny 5#', 600, '405672893507', 'short description is not available', '120pc Apl Granny 5#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (475442863, 'Green Giant Fresh Cello Lettuce, 1 Each', 1.84, 'deleted_723525400000', 'Green Giant Fresh Cello Lettuce, 1 Each', 'Cello Lettuce Green Giant Fresh', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (475493768, 'Freshness Guaranteed Fresh Red Seedless Grapes', 2.28, '', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (476113119, 'Fresh Chinese Long Beans, Bunch', 4.42, '000000045278', 'Our fresh Chinese Long Beans are the perfect veggie to balance out any meal. Also known as the asparagus bean and the long-podded cowpea, this vegetable has a unique beany taste. You can steam these long beans and serve as a side to any meal. FIELD PACK UNBRANDED. You can also incorporate them into your next stir fry or stew. This tasty vegetable is a very popular ingredient in traditional Chinese cuisine. Explore new recipes and discover all the delicious ways to prepare this tasty and nutritious vegetable. With our fresh Chinese Long Beans, you know you\'re getting the bounty of nature\'s goodness.', 'Chinese Long Beans, Bunch: Extremely versatile vegetable Also known as the asparagus bean & long-podded cowpea Perfect ingredient for Chinese cuisine Try them steamed as a delicious side dish Good source of vitamins Explore delicious new recipes', 'FIELD PACK UNBRANDED', 'https://i5.walmartimages.com/asr/8b0ffdbc-2bce-48d7-beda-ba64d1c10555.fd3adc22f67e5b08653385aaa4dbe2d0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8b0ffdbc-2bce-48d7-beda-ba64d1c10555.fd3adc22f67e5b08653385aaa4dbe2d0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8b0ffdbc-2bce-48d7-beda-ba64d1c10555.fd3adc22f67e5b08653385aaa4dbe2d0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (476215106, '192pc On Walla 3#', 572.16, '405537116819', 'short description is not available', '192pc On Walla 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (476364362, 'Marketside Beyond Baby Spinach, 8 oz Clam Shell, Fresh', 4.98, '194346001521', 'Enjoy the fresh flavor of Marketside Beyond Baby Spinach. These greens are indoor and vertically grown for peak-season freshness all year long. Indoor vertical farms are a controlled growing environment giving each plant the optimal amount of light and nutrients for fresh and flavorful produce any time of the year. Farming vertically means our produce can be grown using significantly less water and land than traditional outdoor farms. Create something delicious with Marketside Beyond Baby Spinach. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Fresh and flavorful baby spinach Indoor and vertically grown for peak-season freshness all year long No pesticides, herbicides or fungicides applied to our greens Convenient peel and reseal packaging Keep refrigerated until ready to enjoy', 'Marketside Beyond', 'https://i5.walmartimages.com/asr/5b15edfc-6ee0-4784-abaf-1f6283e00f22.45c2b037aa079a43b6ebdf39b535e471.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b15edfc-6ee0-4784-abaf-1f6283e00f22.45c2b037aa079a43b6ebdf39b535e471.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b15edfc-6ee0-4784-abaf-1f6283e00f22.45c2b037aa079a43b6ebdf39b535e471.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (476781362, 'Cauliflower Florets 12oz', 2.58, 'deleted_854026006290', 'short description is not available', 'Cauliflower Florets 12oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (477571587, 'Manzana Gala de Mountaineer, 3 Lb.', 4.57, '038082087046', 'Manzana Gala de Mountaineer, 3 Lb.', 'Manzana Gala 12/3 Mountaineer', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/8d883673-bcdc-4d0e-a377-bc0ef667c26e.6020cde76cad8270758f69c6a7638a7f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d883673-bcdc-4d0e-a377-bc0ef667c26e.6020cde76cad8270758f69c6a7638a7f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d883673-bcdc-4d0e-a377-bc0ef667c26e.6020cde76cad8270758f69c6a7638a7f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (477864427, 'Organic Red Leaf Lettuce, 1 Each', 1.96, '768573710015', 'Organic Red Leaf Lettuce, 1 Each', 'Org Lettuce Red Leaf', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (478297186, 'Fresh Green Onions, 1 Each', 0.78, '848218000005', 'Fresh Green Onions, 1 Each', 'Fresh Green Onions', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (478332301, 'Watermelon Seedless', 4.48, '400094408421', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (478498425, 'Freshness Guaranteed Cantaloupe 16 Oz', 4.84, 'deleted_681131036528', 'short description is not available', 'Freshness Guaranteed Cantaloupe 16 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (478648006, 'Services Reduced Program Dept 94', 0.01, '252013000007', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (478943893, 'Asian Snack Gourd', 1.78, '000000049443', 'short description is not available', 'Asian Snack Gourd', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (479084873, 'Organic Mini Sweet Bell Peppers, 8 oz', 3.46, 'deleted_729062143714', 'Organic Mini Sweet Bell Peppers, 8 Oz.', 'Organic Mini Sweet Pepper', 'Fresh Produce', 'https://i5.walmartimages.com/asr/18756ff7-6c02-4666-8921-660d5a495772.d2f7454af2738abb960d530a610f4200.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18756ff7-6c02-4666-8921-660d5a495772.d2f7454af2738abb960d530a610f4200.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18756ff7-6c02-4666-8921-660d5a495772.d2f7454af2738abb960d530a610f4200.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (479396825, 'Marketside Organic Cauliflower Florets, 10 oz', 3.98, '681131161589', 'Marketside Organic Cauliflower Florets are packed fresh, washed and ready to eat for your convenience. These florets have a great fresh taste that is loaded with nutrients. Enjoy them as a healthy side or use them in all your favorite recipes. They are a great addition to pastas and casseroles. Season them with salt, pepper and garlic and serve with grilled steak, grilled Brussel sprouts and bread rolls for a filling dinner. Get creative and use it to make a cauliflower crust pizza that is a healthier alternative to traditional pizza or make homemade cauliflower rice. They come packaged inside a microwaveable bag that cooks in less than five minutes. Dinner sides are made easy with Marketside Organic Cauliflower Florets. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes. Microwave in bag: Pierce bag with fork. Microwave on high for 3 to 4 minutes or until desired tenderness. Carefully remove bag from microwave. Be cautious when opening the bag as the vegetables and steam will be very hot. Season to taste and enjoy.', 'Microwave in bag Washed and ready to eat Use to make cauliflower pizza crust or cauliflower rice 20 calories per serving Net weight 10 oz', 'Marketside', 'https://i5.walmartimages.com/asr/546ff9d7-43f4-429f-a799-d896847a281b_2.2f555e9db60555dfb077b9546fd96ead.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/546ff9d7-43f4-429f-a799-d896847a281b_2.2f555e9db60555dfb077b9546fd96ead.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/546ff9d7-43f4-429f-a799-d896847a281b_2.2f555e9db60555dfb077b9546fd96ead.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (479851882, 'Sabra Mexican Street Corn Inspired Guacamole from Hass Avocados, 16 oz', 5.88, '040822345477', 'Sabra Mexican Street Corn Inspired Guacamole will be the go-to appetizer for every summer occasion. Inspired by the delicious flavors of Mexico, our newest guacamole features juicy sweet corn, lime, and chipotle powder and is combined with hand-picked, Mexican-grown Hass avocados. This flavor-packed guacamole dip tastes just like homemade but is easy to store until serving. Whether you\'re enjoying summer fun by the pool, Memorial Day, or July 4th celebrations, it won\'t be long before Sabra Mexican Street Corn Inspired Guacamole becomes the snacking staple at every summer event.In addition to Mexican Street Corn Inspired Guacamole, Sabra offers chunky guacamole dip in a variety of irresistible flavors, including Classic, Spicy, and Classic with Lime.', 'Inspired by the flavors of Mexico, juicy sweet corn, lime, and chipotle powder are combined with hand-picked, Mexican-grown Hass avocados to create a flavorful guacamole experience. Sabra Mexican Street Corn Inspired Guacamole is served best with tortilla chips, tacos, and more for summer entertaining, BBQs or as an everyday snack. Made with ripe, hand-scooped, Mexican-grown Hass avocados (see product image for list of ingredients). Vegetarian; Kosher; GMO-free', 'Sabra', 'https://i5.walmartimages.com/asr/a36e3817-509f-46ad-86e7-9a3ace56d6fd.3625d500fb0973ea20ed0bd8b5ba050d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a36e3817-509f-46ad-86e7-9a3ace56d6fd.3625d500fb0973ea20ed0bd8b5ba050d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a36e3817-509f-46ad-86e7-9a3ace56d6fd.3625d500fb0973ea20ed0bd8b5ba050d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (479944661, 'Mann\'s Soutwest Chipotley Saute Bowl, 7.5oz', 4.98, '716519007859', 'Wam up your taste buds with the delicious blend of cauliflower, kale, kohlrabi, sweet potato, black beans, chipotle corn salsa and shredded cheddar cheese.', 'Microwaveable in just 3 minutes 9 grams of protein 180 calories Vegetarian contains Milk', 'Mann\'s', 'https://i5.walmartimages.com/asr/91507bc0-5cd0-464d-baa0-117255fd026e.f1b55a33ec39b2d965794122d21b81bb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/91507bc0-5cd0-464d-baa0-117255fd026e.f1b55a33ec39b2d965794122d21b81bb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/91507bc0-5cd0-464d-baa0-117255fd026e.f1b55a33ec39b2d965794122d21b81bb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (480123157, 'Butternut Squash', 1.18, '857610005488', 'Butternut Squash', 'Butternut Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (480188316, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094275160', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (480913027, 'Juici Apple, Each', 0.83, 'deleted_887434034678', 'short description is not available', 'Juici Apple Each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/13c7870e-6cc8-4307-badc-6053e43f5e71.227f1ff605e18c1b8e7c287107c63ea0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13c7870e-6cc8-4307-badc-6053e43f5e71.227f1ff605e18c1b8e7c287107c63ea0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13c7870e-6cc8-4307-badc-6053e43f5e71.227f1ff605e18c1b8e7c287107c63ea0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (480997704, 'Fortune Brand Dried Black Fungus, Cloud Ear, 2.5 Oz, 50 Ct', 76.73, '022652207026', 'DRIED BLACK FUNGUS (CLOUD EAR)', 'Fortune Brand Dried Black Fungus, Cloud Ear, 2.5 Oz, 50 Ct', 'FORTUNE BRAND', 'https://i5.walmartimages.com/asr/8172bfb3-b127-43d9-a696-41b61fb4fdcd.404a512b7565cce9abf12bd9c6acfd54.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8172bfb3-b127-43d9-a696-41b61fb4fdcd.404a512b7565cce9abf12bd9c6acfd54.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8172bfb3-b127-43d9-a696-41b61fb4fdcd.404a512b7565cce9abf12bd9c6acfd54.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (481074721, 'Watermelon Seedless', 4.98, '400094249864', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (481135155, 'Tomatillos, 2 lb', 2.98, '095829098079', 'short description is not available', 'Tomatillos, 2 lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f8d73b72-430f-4ad7-8ad5-2ae28a64d0c2.8d1bf1a7b580a12e415da2c55b2101bd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f8d73b72-430f-4ad7-8ad5-2ae28a64d0c2.8d1bf1a7b580a12e415da2c55b2101bd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f8d73b72-430f-4ad7-8ad5-2ae28a64d0c2.8d1bf1a7b580a12e415da2c55b2101bd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (481388369, 'Fresh Hami Melons, Each', 4.98, '098843043759', 'Treat yourself to the delicious flavor of a Fresh Hami Melon. Enjoy this tasty melon on its own as a healthy snack or incorporate it into a variety of delicious recipes. For breakfast, you can make a sweet fruit bowl with sliced melon, strawberries, pineapple, and kiwi. For an extra special treat, top with a dollop of whipped cream. Cut it into small pieces and put it in a fresh salad along with chicken, cucumbers, tomatoes, and a light dressing. You can even use this melon to make a refreshing summer cocktail, a spreadable jam, or a light sorbet. Enjoy the sweet and juicy taste of Fresh Hami Melon.', 'Fresh Hami Melons, Each Flavorful addition to many recipes Enjoy on its own or add to a mixed fruit salad Add to your fresh garden salad Get creative and make a melon cocktail or a refreshing sorbet Explore all the delicious ways to add fresh Hami melon to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e8025e6d-6a43-4c7b-aa5e-01b2bf957698.b38f4a3f90f6caffdeb598864f6d4e8f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e8025e6d-6a43-4c7b-aa5e-01b2bf957698.b38f4a3f90f6caffdeb598864f6d4e8f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e8025e6d-6a43-4c7b-aa5e-01b2bf957698.b38f4a3f90f6caffdeb598864f6d4e8f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (481738943, 'Acorn Squash', 1.18, '850489008871', 'Acorn Squash', 'Acorn Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/42805330-9346-4dd4-9362-9b71d0491d13.47ac454488713e49f4a0d82c51449b00.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42805330-9346-4dd4-9362-9b71d0491d13.47ac454488713e49f4a0d82c51449b00.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42805330-9346-4dd4-9362-9b71d0491d13.47ac454488713e49f4a0d82c51449b00.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (481931566, 'Fieldpack Unbranded Fresh Strawberries 3#', 11.68, '671704000124', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (481964956, 'Yellow Onions, 3 Lb.', 1.94, '405500157931', 'Yellow Onions, 3 Lb.', 'Yellow Onions 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (482146001, 'Fieldpack Unbranded Organic Butter Lettuce', 3.26, '716582017700', 'Fieldpack Unbranded Organic Butter Lettuce provides a fresh leafy green choice perfect for a variety of dishes. This mild-flavored butter lettuce includes Bibb and Boston varieties, known for their tender, sweet leaves forming loose, round-shaped heads. This organic lettuce is freshly sourced and provides an ideal base for salads, sandwiches, and wraps, or served alone as a fresh vegetable dish. Packaged in a recyclable bag, please wash before use for the best experience. Suitable for a wide range of diets, it\'s a must-have vegetable staple.', 'Ideal for salads and wraps providing a mild, unique flavor Packaged fresh to maintain quality and crispness Sourced with high quality and organic standards Incorporate into recipes or enjoy as a healthy snack Arrives in a recyclable and sustainable package Vegetable Type: Butter Lettuce, Container Type: Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7c6bfde8-1c27-4502-929c-684406587507.77058127e9688929bcaa54d922594751.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c6bfde8-1c27-4502-929c-684406587507.77058127e9688929bcaa54d922594751.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c6bfde8-1c27-4502-929c-684406587507.77058127e9688929bcaa54d922594751.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (482251424, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094896518', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (482348305, 'Spaghetti Squash', 1.54, 'deleted_851734005157', 'short description is not available', 'Spaghetti Squash', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (482567174, 'Yellow Flesh Peaches, per Pound', 1.58, '400094925492', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (483436025, '240pc On Ylw 3# Nv', 465.6, '400094992227', 'short description is not available', '240pc On Ylw 3# Nv', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (484232680, 'Idaho Potatoes 5 Lb Bag', 2.94, '605806001284', 'short description is not available', 'Idaho Potatoes 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (486016828, 'Walmart Produce Vegetable Tray With No Dip 38 Oz', 10.97, '824862004156', 'short description is not available', 'Walmart Produce Vegetable Tray With No Dip 38 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (486073864, 'Fieldpack Unbranded Fresh Strawberries 1#', 3.61, '', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (486082625, '90pc Pto Idaho 10#', 537.3, '405531027968', 'short description is not available', '90pc Pto Idaho 10#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (486582872, 'Freshness Guaranteed Fresh Green Seedless Grapes', 2.28, '', 'short description is not available', 'Freshness Guaranteed Fresh Green Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (486824080, 'Chili Verde Potato Tray', 3.52, '826088936013', 'short description is not available', 'Chili Verde Potato Tray', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (486929843, '1# Bag Keylimes', 2.98, 'deleted_744430275729', 'short description is not available', '1# Bag Keylimes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (486952004, 'Fresh Strawberries, 3 lb Container', 5.92, '033383200606', 'The sweet, juicy flavor of Fresh Strawberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like, vitamin C, dietary fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Strawberries today and savor the delectable flavor.', 'Fresh Strawberries, 3 lb Clamshell: Prior to serving gently wash the strawberries and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'University at Buffalo', 'https://i5.walmartimages.com/asr/b55a6c9b-6212-422e-ab0a-14750f029a94.7088d1695522e0f6442a1d5f73a40350.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b55a6c9b-6212-422e-ab0a-14750f029a94.7088d1695522e0f6442a1d5f73a40350.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b55a6c9b-6212-422e-ab0a-14750f029a94.7088d1695522e0f6442a1d5f73a40350.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (487389193, 'Fieldpack Unbranded Cello Lettuce', 2.16, 'deleted_405815733905', 'short description is not available', 'Fieldpack Unbranded Cello Lettuce', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (487442490, 'Fresh California Grown Nectarines, 1 Lb.', 1.78, 'deleted_400094805534', 'Fresh California Grown Nectarines, 1 Lb.', 'Fresh California Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (487454717, 'Fresh Green Seedless Grapes', 30, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (488227828, 'Walmart Produce Melon Berry Medley 10 Oz', 2.98, '826766254248', 'short description is not available', 'Walmart Produce Melon Berry Medley 10 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (489202983, 'Fresh Red Grapefruit, Each', 1.18, 'deleted_082202042859', 'The ideal balance between tart and sweet, this Fresh Red Grapefruit is great for both savory and sweet dishes any time of day. Enjoy half of a grapefruit sprinkled with sugar with some eggs in the morning for a light, sweet breakfast. Slice it up and put in a salad with spinach, avocado, and red onion topped with a mustard and balsamic vinegar dressing for lunch or dinner. Make delicious grapefruit bars that showcase the sweet and tartness of this versatile fruit. In addition, it\'s a great source of vitamin C and vitamin A. With such versatility, Fresh Red Grapefruit will become a pantry staple in your home.', 'Great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a grapefruit sprinkled with sugar in the morning Slice it up and put it in salad for lunch or dinner Make delicious grapefruit bars Great source of vitamin C and vitamin A', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c23d870b-225f-4818-afe3-0b4add48afe6.b78126a7bd277fd29afbeb21dac10e04.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c23d870b-225f-4818-afe3-0b4add48afe6.b78126a7bd277fd29afbeb21dac10e04.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c23d870b-225f-4818-afe3-0b4add48afe6.b78126a7bd277fd29afbeb21dac10e04.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (489671406, 'ONETANG Natural Dried Shiitake Mushrooms - Premium Flavors |AAA Grade Extra Dry Mushrooms for Soups, Sauces, Pasta and Risotto, Rehydrate Quickly, All Natural & Vegan | 16 Oz', 21.99, '', 'ONETANG Dried Shiitake Mushrooms 16 oz Shiitake mushroom is known as the king of delicacies with high protein and low fat. Dried mushroom, add no preservatives, process without sulfur fumigation, best-selling in European and American markets for more than ten years, safe and delicious, is your best choice for health. In order to secure quality, we strictly control every aspect from cultivation to the finished product. Product Net Content Uom: Ounces (oz)', 'Dried mushrooms 16.00 oz of vacuum packing keep the freshness of products and prolong the shelf life of products. Mushroom raw material selection Xixia mushroom of China National Geographical Indications Products. Shiitake mushroom is fragrant and rich, the meat is thick and thin, the species is authentic and the source is selected. Conform to the laws of nature and pick them in time, 100% New Crop. No Fumigation Sulfur, No Artificial Additive, mushroom foot length control less Than 1cm, strict control of the water standards, moisture content less Than 13%. BRC, ISO22000, HACCP certificated factory.', 'ONETANG', 'https://i5.walmartimages.com/asr/58abaacf-b90b-479d-a9bd-cb7ddd01d88a.f11ec2244e11f0d6f470b9148de405d5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58abaacf-b90b-479d-a9bd-cb7ddd01d88a.f11ec2244e11f0d6f470b9148de405d5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58abaacf-b90b-479d-a9bd-cb7ddd01d88a.f11ec2244e11f0d6f470b9148de405d5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (490594701, 'Fresh Bicolor Grapes, 2lb', 5.88, '854957001760', 'short description is not available', 'Four Star Fruit Bicolor Grapes 2lb', 'Unbranded', 'https://i5.walmartimages.com/asr/48c81eac-d62f-4059-9fc8-1fbdd6c35be7.7c0fab2724e9604d4f1ebff2fef422ac.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48c81eac-d62f-4059-9fc8-1fbdd6c35be7.7c0fab2724e9604d4f1ebff2fef422ac.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48c81eac-d62f-4059-9fc8-1fbdd6c35be7.7c0fab2724e9604d4f1ebff2fef422ac.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (490974576, 'BrightFarms Sweet Baby Butter Leaf Lettuce, 4 oz Salad', 2.48, '857062004848', 'BrightFarms Sweet Baby Butter is the perfect base for any salad, burger or sandwich. It is delicate and sweet, while having a satisfying crunch. Grown nearby in a state-of-the-art greenhouse, the salad greens go from farm to store in as little as 24 hours ensuring they are fresh, crunchy and long-lasting in your fridge -- in fact we guarantee it! By growing indoors using a hands-free growing process, we eliminate the use of pesticides on our produce so that the greens are ready to eat from the container, with no need to wash. At BrightFarms, we are on a mission to grow salads in a way that is better for people and the planet, transforming the way people eat and enjoy fresh produce - and shaping a more sustainable future for food.', 'Pesticide, herbicide and fungicide free greens Greenhouse grown, for guaranteed fresh greens year-round No need to wash Responsibly grown, harnessing the power of technology to do more with less: less water, less land, less shipping fuel to produce more Non-GMO', 'BrightFarms', 'https://i5.walmartimages.com/asr/08f8d57c-6ee7-488b-9a78-aafc501cf589.8c17c737e1bbf3c6c08080b0e618223a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/08f8d57c-6ee7-488b-9a78-aafc501cf589.8c17c737e1bbf3c6c08080b0e618223a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/08f8d57c-6ee7-488b-9a78-aafc501cf589.8c17c737e1bbf3c6c08080b0e618223a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (490994170, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094226612', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (491080312, '200pc Pto Ykn/red Wa', 1074, '405536360398', 'short description is not available', '200pc Pto Ykn/red Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (492068757, 'Anjou Pears, 4 lb', 4.97, '741839007005', 'Anjou Pears, 4 Lb.', '4lb Bag Of Danjou Pears', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9c58b4e3-6dee-44fa-9489-4b8056bfb81b_1.77992124e814dfb65dcbefb14d277f1c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c58b4e3-6dee-44fa-9489-4b8056bfb81b_1.77992124e814dfb65dcbefb14d277f1c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c58b4e3-6dee-44fa-9489-4b8056bfb81b_1.77992124e814dfb65dcbefb14d277f1c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (492079621, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094244333', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (492157309, 'California Grown Peaches, per Pound', 1.58, '400094272695', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (492728125, 'Ogp Red Cherry Samples', 0.01, '405836031615', 'short description is not available', 'Ogp Red Cherry Samples', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (492826017, 'Services Reduced Program Dept 94', 0.01, '251688000008', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (492909841, 'Marketside Fresh Cut Watermelon, 16 oz Tray', 3.84, '681131180665', 'Enjoy the sweet, refreshing taste of Marketside Watermelon. This pre-cut watermelon is great for breakfast, lunch, dessert, or when you want a snack. Watermelon is a good source of vitamin C, vitamin A, and potassium making them an excellent healthy treat. You can eat them right out of the container, infuse them with water for a refreshing drink, or chop them up and make a mouthwatering watermelon salad with feta and mint. With 16-ounces in each container, this watermelon is great for sharing with friends and family or keeping it for yourself. It comes in a re-closable container to help maintain freshness. Bring home Marketside Cut Watermelon today for a refreshing, healthy treat. Marketside provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Marketside item.', 'Marketside Cut Watermelon, 16 oz Sweet and Juicy Pre-cut watermelon spears in a convenient resealable package to keep fruit fresh and allow for easy storage. Ideal for busy lifestyles, picnics, road trips school lunches, quick snacks or salads. Good source of vitamins A and C No preservatives, artificial colors or artificial flavors Perfect for your next backyard cookout Net weight: 16 oz', 'Marketside', 'https://i5.walmartimages.com/asr/8d2dca33-59ca-4dbf-bc01-b9ecee0088e4.75cb490cee40ed3f873adce45d567e9d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d2dca33-59ca-4dbf-bc01-b9ecee0088e4.75cb490cee40ed3f873adce45d567e9d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8d2dca33-59ca-4dbf-bc01-b9ecee0088e4.75cb490cee40ed3f873adce45d567e9d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (493382771, 'California Grown Peaches, per Pound', 1.58, '400094032831', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (493939971, 'Watermelon Seedless', 4.98, '405503747672', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (494269858, 'Sweet Potatoes 3 Lb Bag', 4.24, 'deleted_859061002092', 'short description is not available', 'Sweet Potatoes 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (494841739, 'Fresh Raspberries, 6 Oz.', 2.68, 'deleted_400094529850', 'Fresh Raspberries, 6 Oz.', 'Fresh Raspberries 6 Oz.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/294af397-a9f6-496c-ac4c-39b78883f091.ae76131c0ace8707ec7a1768df95e83f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/294af397-a9f6-496c-ac4c-39b78883f091.ae76131c0ace8707ec7a1768df95e83f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/294af397-a9f6-496c-ac4c-39b78883f091.ae76131c0ace8707ec7a1768df95e83f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (495221568, '128pc Grapefruit 5#', 765.44, '405735963871', 'short description is not available', '128pc Grapefruit 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (495468034, 'Watermelon Seedless', 4.98, '400094341001', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (495594427, 'Yellow Onions, 4 Lb.', 2.58, '061061000231', 'Yellow Onions, 4 Lb.', 'Yellow Onions 4 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (496579767, 'Cantaloupe', 0.01, '717524414427', 'short description is not available', 'Cantaloupe', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (496705033, 'Cucumber', 0.62, '405966230384', 'short description is not available', 'Cucumber', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (496710622, 'Nm Hatch Chili Hot 10# Sold By Box Only', 12.98, '851533003767', 'short description is not available', 'Nm Hatch Chili Hot 10# Sold By Box Only', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (496747410, 'Produce Unbranded Snack Fresh Red Apples With Grapes 2.5oz', 0.98, '074641026101', 'short description is not available', 'Snack Fresh Red Apples With Grapes 2.5oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (496873341, '240pc On Ylw 3# Rio', 465.6, '405500887364', 'short description is not available', '240pc On Ylw 3# Rio', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (497286341, '90pc Pto Rst 10# Bw', 444.6, '405530523775', 'short description is not available', '90pc Pto Rst 10# Bw', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (497633427, 'Services Reduced Program Dept 94', 0.01, '251685000001', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (498377886, 'Watermelon Seedless', 4.48, '400094234303', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (498803758, 'Watermelon Seedless', 4.48, '400094984864', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (498897689, 'Sweet Tearless Onion Sample', 0.01, '405790162882', 'short description is not available', 'Sweet Tearless Onion Sample', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (499008313, 'Organic Microwavable Potatoes, 1 Each', 1.28, '834344000460', 'Organic Microwavable Potatoes, 1 Each', 'Organic Microwavable Potatoes Per Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (499409360, 'Services Reduced Program Dept 94', 0.01, '251696000007', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (499673207, 'Freshness Guaranteed Berry Blend Medium', 7.71, '262823000005', 'short description is not available', 'Freshness Guaranteed Berry Blend Medium', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (500152257, 'Fresh Organic Mandarin Oranges, 2 lb Bag', 5.36, 'deleted_849315000417', 'Enjoy the fresh sweetness of Organic Mandarin Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these mandarin oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are also used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. However you choose to use them, Organic Mandarin Oranges add flavor to any meal or beverage.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes Use as a garnish for your favorite cocktail Make sweet desserts like ambrosia, orange bars, and orange pie Grown, harvested, and packed without chemicals, pesticides or preservatives Available in a 2-pound bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/19ae05d6-ea3b-4ac0-ae57-7166e37dca18_3.b04fb12f9b7fd7a78a5bb358420c6ad2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19ae05d6-ea3b-4ac0-ae57-7166e37dca18_3.b04fb12f9b7fd7a78a5bb358420c6ad2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19ae05d6-ea3b-4ac0-ae57-7166e37dca18_3.b04fb12f9b7fd7a78a5bb358420c6ad2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (500238731, 'Freshness Guaranteed Strawberry Blueberry Blend, 16 oz', 6.97, '681131180641', 'short description is not available', 'Freshness Guaranteed Strawberry Blueberry Blend 16 Oz', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (500464351, 'Fresh White Peaches', 1.88, 'deleted_896460002087', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (500897525, 'Watermelon Seedless', 4.48, '400094408353', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (501342734, '180pc Apple Pink 3#', 889.2, '405671384662', 'short description is not available', '180pc Apple Pink 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (501968584, 'Fresh Cauliflower Florets', 2.47, '000000045667', 'short description is not available', 'Fresh Cauliflower Florets', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (502955747, '180pc Pto Rst 10# Ff', 889.2, '405532891636', 'short description is not available', '180pc Pto Rst 10# Ff', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (503293508, '210pc On Vid 3# Ps', 827.4, '405539562461', 'short description is not available', '210pc On Vid 3# Ps', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (503325294, 'Fresh Green Seedless Grapes, 2lb', 7.47, '', 'Treat yourself to the delicious, juicy flavor of Fresh Red Grapes. These grapes are bursting with sweet flavor, so you can easily enjoy a handful as a fresh snack any time of day. Enjoy them for breakfast, lunch, dinner, or dessert. They are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Red Grapes.', 'Fresh Green Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (503710389, 'Fresh Pluots, 2 lb Bag', 4.97, '683953001173', 'Fresh Plumcots are the perfect blend of flavor and texture of a plum and an apricot. There are more than 20 different plumcot varieties, each one with its own distinct appearance, color, and size. You can use them as a substitute in recipes with plums for a sweet twist. Bake a mouthwatering plumcot cake, plumcot and blueberry crisp, or roast them with honey and goat cheese for a decadent dish. Enjoy it as is as a healthy snack, add it to your lunch for a healthy side, or pack multiple and take on a picnic with friends and family. Enjoy the delicious flavor of Fresh Plumcots.', 'Fresh Plumcots, 2 lb Bag Perfect blend of a plum and an apricot Use as a substitute in recipes using plums Bake a mouthwatering plumcot cake, plumcot and blueberry crisp, or roast them with honey and goat cheese Enjoy it as is as a healthy snack, add it to your lunch for a healthy side, or pack multiple and take on a picnic More than 20 different plumcot varieties', 'Produce UB', 'https://i5.walmartimages.com/asr/14136e15-a1ea-4b02-ab6b-66000369a6d7.6e0e5eeedc6ec892f6a5f000ba057ff8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/14136e15-a1ea-4b02-ab6b-66000369a6d7.6e0e5eeedc6ec892f6a5f000ba057ff8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/14136e15-a1ea-4b02-ab6b-66000369a6d7.6e0e5eeedc6ec892f6a5f000ba057ff8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (503943948, '256pc On Ylw 3# Ca', 496.64, '405564999386', 'short description is not available', '256pc On Ylw 3# Ca', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (504212237, 'Kamo Komo Bumpy Pumpkin', 4.98, '823298001609', 'short description is not available', 'Kamo Komo Bumpy Pumpkin', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (504822926, 'Fresh Green Seedless Grapes', 3.27, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (505135856, 'Greens Greens Trop', 2.98, 'deleted_060556606019', 'short description is not available', 'Greens Greens Trop', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5a3fb5f8-4fd5-4388-9a24-3f26b09f40d7.38119a8e6433dd5486c047958015de6d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a3fb5f8-4fd5-4388-9a24-3f26b09f40d7.38119a8e6433dd5486c047958015de6d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a3fb5f8-4fd5-4388-9a24-3f26b09f40d7.38119a8e6433dd5486c047958015de6d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (505172181, 'BBQ Ranch', 3.63, '071279309071', 'BBQ Ranch Chopped Kit contains cauliflower, kale, red cabbage, green cabbage, carrot and a master pack containing BBQ Ranch dressing, roasted soy nuts, bacon, freeze dried corn, and chia seeds packed in a 11.3-ounce polyethylene bag. Product has the typical flavor and crispness of smoky BBQ salads with shades of green, white, orange and purple colors depending on the individual ingredient.', 'BBQ Ranch Chopped Kit contains cauliflower, kale, red cabbage, green cabbage, carrot and a master pack containing BBQ Ranch dressing, roasted soy nuts, bacon, freeze dried corn, and chia seeds packed in a 11.3-ounce polyethylene bag. Product has the typical flavor and crispness of smoky BBQ salads with shades of green, white, orange and purple colors depending on the individual ingredient.', 'Fresh Express', 'https://i5.walmartimages.com/asr/4adf89af-044c-4108-ba90-e277a8f5129b.3339e3a93862571bdd1082964b61ffa4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4adf89af-044c-4108-ba90-e277a8f5129b.3339e3a93862571bdd1082964b61ffa4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4adf89af-044c-4108-ba90-e277a8f5129b.3339e3a93862571bdd1082964b61ffa4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (505467900, 'Fresh Strawberries, 2 lb', 5.84, '862264000178', 'short description is not available', 'Fresh Strawberries, 2 lb', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/d848296e-0770-439e-8437-aa945df49859_1.77691e3b66c66fc357d69ed2bef7db42.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d848296e-0770-439e-8437-aa945df49859_1.77691e3b66c66fc357d69ed2bef7db42.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d848296e-0770-439e-8437-aa945df49859_1.77691e3b66c66fc357d69ed2bef7db42.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (505746814, 'Marketside Fresh Chopped Cauliflower, 12 oz', 2.98, '681131221818', 'Add fresh and ready to eat chopped cauliflower to your meal with Marketside Chopped Cauliflower. Serve as is, or add your favorite spices for additional flavor. Add onion, thyme, garlic, olive oil, parmesan cheese, salt and pepper to cauliflower to create a yummy side dish, use as a substitute for rice in stir fries and skillet meals, or steam and mash as a change of pace from mashed potatoes. As a good source of calcium, potassium, and dietary fiber and a quick cooking time of 3-4 minutes in the microwave, Marketside Chopped Cauliflower is an easy and nutritious addition to any meal. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Washed and ready to eat Great addition to any meal Healthy side Net weight 12 oz', 'Marketside', 'https://i5.walmartimages.com/asr/f475f0c2-93ac-40b0-a8af-1c7242c2d679_1.701a98638269130e137cfc0109eff257.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f475f0c2-93ac-40b0-a8af-1c7242c2d679_1.701a98638269130e137cfc0109eff257.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f475f0c2-93ac-40b0-a8af-1c7242c2d679_1.701a98638269130e137cfc0109eff257.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (505869327, 'Fresh Dark Sweet Cherries', 84.5, '', 'short description is not available', 'Fresh Dark Sweet Cherries', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (506071035, 'HI Green Giant Fresh Cut and Harvested Produce Asparagus, 12 oz', 5.92, '605806124242', 'Provide your family with a healthy serving of nutritious vegetables when you serve up a steaming hot dish of Asparagus. This asparagus is loaded with nutrients and has a great fresh taste. This versatile vegetable can be prepared in a myriad of different ways. Saute the spears with olive oil, salt, pepper, and a hint of lemon juice for a healthy and flavorful vegetable side that will pair well with a wide array of main dishes. Add these asparagus spears to pasta, salads, casseroles, and other inventive meal options. You can even incorporate them into quiches and frittatas for brunch. Get creative in the kitchen while fueling your body with nutrient-dense vegetables when you bring home a bunch of Asparagus.', 'Asparagus, Bunch: Loaded with nutrients and have a great fresh taste Saute them with olive oil, salt, pepper, and a hint of lemon juice for a healthy and flavorful vegetable side that will pair well with a wide array of main dishes Get creative in the kitchen Add these asparagus spears to pasta, salads, casseroles, and other inventive meal options Add to quiches and frittatas for brunch', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1b335dfb-660f-4fdb-8265-8a2c7e24fc66.473fed3769f358f01d9541cd196c1d27.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b335dfb-660f-4fdb-8265-8a2c7e24fc66.473fed3769f358f01d9541cd196c1d27.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b335dfb-660f-4fdb-8265-8a2c7e24fc66.473fed3769f358f01d9541cd196c1d27.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (507748869, 'Earthbound Farm® Organic Pure Veggie Snack Tray 7oz', 2.5, '032601952785', 'Our Earthbound Farm Organic Pure Veggies Snack Tray is all fresh, organic, and deliciously ready to snack on! We are proud to provide the freshest, most delicious organic produce to your table, and we stand behind our freshness guarantee. Especially happy? Not quite? Get in touch: 800-690-3200 or www.earthboundfarm.com.', 'Organic vegetables Organic snack tray with ranch dip Ready to eat Easy to enjoy on the go', 'Earthbound Farm', 'https://i5.walmartimages.com/asr/790a892b-2bac-408b-ab75-0d83c77d2d41.ca0272ac18f814b395c68a4fb12d447a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/790a892b-2bac-408b-ab75-0d83c77d2d41.ca0272ac18f814b395c68a4fb12d447a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/790a892b-2bac-408b-ab75-0d83c77d2d41.ca0272ac18f814b395c68a4fb12d447a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (508008977, 'Osg Sq. End Mill,Single End,Cobalt,1/2\"', 1.98, '000000045001', 'short description is not available', 'Osg Sq. End Mill,Single End,Cobalt,1/2\"', 'Fresh Produce', 'https://i5.walmartimages.com/asr/76b7849a-4c6f-40bd-852e-668cd9bc68fb_1.1eb6383f99a0221ba31ddd3e46d917a0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/76b7849a-4c6f-40bd-852e-668cd9bc68fb_1.1eb6383f99a0221ba31ddd3e46d917a0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/76b7849a-4c6f-40bd-852e-668cd9bc68fb_1.1eb6383f99a0221ba31ddd3e46d917a0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (509045623, '180pc Pto Ykn 5# Bg', 894.6, '400094040621', 'short description is not available', '180pc Pto Ykn 5# Bg', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (509140943, 'Fresh Explora Greens Butter Lettuce, Each', 3.37, '860003148709', 'Butter lettuce, with its tender texture and vibrant green or rich reddish-purple hue, is a versatile addition to your culinary creations. Its scrumptious leaves are perfect for crafting delicate lettuce wraps, refreshing salads, or adding a layer of crispness to sandwiches. Elevate your meals with the delightful taste of butter lettuce and enjoy a healthy and visually stunning ingredient in your dishes.', 'Explora Greens Butter Lettuce EXCELLENT SOURCE OF VITAMIN K GOOD SOURCE OF FOLATE AND VITAMIN A LUTEIN AND ZEAXANTHIN', 'Unbranded', 'https://i5.walmartimages.com/asr/ceaa08d6-65be-416d-83ef-73134ab8ee4a.00573136366abf6242edc0b6eede4ead.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ceaa08d6-65be-416d-83ef-73134ab8ee4a.00573136366abf6242edc0b6eede4ead.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ceaa08d6-65be-416d-83ef-73134ab8ee4a.00573136366abf6242edc0b6eede4ead.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (509675803, 'Yellow Flesh Peaches, per Pound', 1.58, '400094137666', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (510053660, 'Watermelon Seedless', 4.48, '400094132753', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/80e452f5-b8cf-4153-aece-3be7089fe8ba.3368806e6c74c9618f1c6305a5b16339.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/80e452f5-b8cf-4153-aece-3be7089fe8ba.3368806e6c74c9618f1c6305a5b16339.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/80e452f5-b8cf-4153-aece-3be7089fe8ba.3368806e6c74c9618f1c6305a5b16339.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (510263564, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094183991', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (510372066, 'Turnip Greens', 0.98, 'deleted_073064000996', 'short description is not available', 'Turnip Greens', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (510430339, 'Green Bell Pepper', 0.78, 'deleted_852713002013', 'short description is not available', 'Green Bell Pepper', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (510596888, 'Fieldpack Unbranded Pepper Mini Sweet', 2.98, 'deleted_733821200808', 'short description is not available', 'Fieldpack Unbranded Pepper Mini Sweet', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (511188322, 'Aroma One Organics Garlic Puree', 2.98, '750448908658', 'Aroma One Organics Garlic Puree 80G Transform your dishes with the Aroma One Organics Garlic Puree 80G, an essential pantry item for any home cook. Made from organically grown, carefully selected garlic, this puree brings a potent, bold flavor to any recipe. Whether you’re preparing garlic bread, a flavorful stir-fry, or a savory marinade, this puree offers the perfect balance of convenience and authenticity.', '100% Organic: Pure garlic with no additives or chemicals, for a clean and natural taste. Convenient and Time-Saving: Ready-to-use, eliminating the need for peeling and mincing fresh garlic. Bold and Robust Flavor: Adds a rich and intense garlic taste that will elevate your dishes instantly. Versatile: Ideal for sauces, dressings, soups, dips, and more No Artificial Ingredients: Free from preservatives, colors, or flavor enhancers, making it a clean choice for health-conscious consumers. Packed with Health Benefits: Garlic is renowned for its immune-boosting properties and heart-healthy benefits. Eco-Friendly: Produced in sustainable conditions, supporting environmentally responsible farming practices. Long-Lasting Freshness: Enjoy fresh garlic flavor year-round with a long shelf life. Ideal for Quick Meals: Perfect for busy cooks who want the full flavor of garlic without the preparation time. Make every meal a standout with the bold, pungent flavor of Aroma One Organics Garlic Puree 80G. Whether you\'re cooking up a quick weeknight dinner or creating a gourmet dish, this garlic puree is the perfect way to enhance your recipes in no time.', 'Aroma One', 'https://i5.walmartimages.com/asr/926b69c7-a163-4f0f-832e-a062f4614c54.a657216bd89bf415c90454517f4e4fa3.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/926b69c7-a163-4f0f-832e-a062f4614c54.a657216bd89bf415c90454517f4e4fa3.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/926b69c7-a163-4f0f-832e-a062f4614c54.a657216bd89bf415c90454517f4e4fa3.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (511593628, 'Melon Agua Sin Semilla', 0.68, '405859527126', 'Introducing Melon Agua Sin Semilla, the seedless watermelon that delivers a refreshing and hydrating experience like no other! This delicious fruit boasts a vibrant, juicy interior packed with naturally sweet flavors, perfect for satisfying your cravings on a hot summer day. With its seedless feature, you can enjoy hassle-free snacking without interruptions. Ideal for smoothies, fruit salads, or simply eating on its own, Melon Agua Sin Semilla provides a healthy, mouthwatering, and convenient option for everyone in the family.', 'Melon Agua Sin Semilla Introducing Melon Agua Sin Semilla, the seedless watermelon that delivers a refreshing and hydrating experience like no other! This delicious fruit boasts a vibrant, juicy interior packed with naturally sweet flavors, perfect for satisfying your cravings on a hot summer day. With its seedless feature, you can enjoy hassle-free snacking without interruptions. Ideal for smoothies, fruit salads, or simply eating on its own, Melon Agua Sin Semilla provides a healthy, mouthwatering, and convenient option for everyone in the family.', 'Unbranded', 'https://i5.walmartimages.com/asr/d85d5fc1-b53e-4fbf-88e1-b1c90ab4a5a0.cf9c8c3ed26b901081a195d2bf794ecb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d85d5fc1-b53e-4fbf-88e1-b1c90ab4a5a0.cf9c8c3ed26b901081a195d2bf794ecb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d85d5fc1-b53e-4fbf-88e1-b1c90ab4a5a0.cf9c8c3ed26b901081a195d2bf794ecb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (511896139, 'Tomato on the Vine, Bag', 2.48, '405545141070', 'Keep your recipes simple and classic with fresh tomatoes on the vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, this fresh produce item is sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Walmart\'s Tomatoes On The Vine and keep your dishes looking great and tasting equally as excellent.', 'Tomatoes On The Vine Per Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (512375019, 'Fresh Bells Nursery Hot House Cucumber', 4.34, '045009853820', 'Introducing our fresh hot house cucumbers - a crispy and refreshing addition to your meals. Grown in controlled environments, these cucumbers boast a vibrant green color and unparalleled flavor. Enjoy them sliced in salads, as a healthy snack, or add them to sandwiches for a satisfying crunch. With their firm texture and delicious taste, our hot house cucumbers are a must-have for any kitchen.', 'Bells Nursery Hot House Cucumber Introducing our fresh hot house cucumbers - a crispy and refreshing addition to your meals. Grown in controlled environments, these cucumbers boast a vibrant green color and unparalleled flavor. Enjoy them sliced in salads, as a healthy snack, or add them to sandwiches for a satisfying crunch. With their firm texture and delicious taste, our hot house cucumbers are a must-have for any kitchen.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a64a9fa0-a464-4b36-8a09-4443dce4274c.cbbf75c953a480bd4c4d466d513095ad.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a64a9fa0-a464-4b36-8a09-4443dce4274c.cbbf75c953a480bd4c4d466d513095ad.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a64a9fa0-a464-4b36-8a09-4443dce4274c.cbbf75c953a480bd4c4d466d513095ad.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (512436619, 'Limon, 2 Lb.', 2.98, '', 'Limon, 2 Lb.', 'Limon 2 Libra', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/d2a57a4d-81dd-4642-9a6c-34034c47e854.dd0ad7a462637eb25c491f9aa19edaec.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d2a57a4d-81dd-4642-9a6c-34034c47e854.dd0ad7a462637eb25c491f9aa19edaec.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d2a57a4d-81dd-4642-9a6c-34034c47e854.dd0ad7a462637eb25c491f9aa19edaec.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (512640325, 'Mandarin Oranges, 5 Lb.', 6.67, '405509867718', 'Mandarin Oranges, 5 Lb.', '5# Mandarins', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (513117019, 'Grape Tomatoes', 2.48, '405565638079', 'short description is not available', 'Grape Tomatoes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (513117651, 'Shrink Cap | Fawn Green w/Large Midnight Black Grapes (100/Pack)*', 29.95, '776982330953', 'Elevate Your Wine Experience with Our European Crafted Shrink Caps Enhance Bottle Presentation and Ensure Freshness with Our Shrink Caps! Our Premium Shrink Caps are the perfect addition to any wine bottle, combining elegance with functionality. These caps, expertly crafted in Europe, not only enhance the visual appeal of your bottles but also play a crucial role in maintaining the cork\'s integrity. Our shrink caps are ideal for winemakers, wine enthusiasts, or those who love to gift homemade wine. They are a simple yet effective way to elevate your wine\'s presentation and ensure freshness. Key Features: High-Quality Material:Manufactured in Europe, guaranteeing premium quality and durability. Universal Fit:Designed to fit 375ml, 750ml, and 1500ml wine bottles perfectly. Easy Tear-Off Design:Facilitates a smooth bottle-opening experience. Precise Dimensions:Measuring 30.5mm x 55mm for a flawless fit. Elevated Presentation:Adds a sophisticated touch to any wine bottle. Usage Guide: Slide the Cap:Place the shrink cap over the neck of the wine bottle. Apply Heat:Use a heat gun or steam to shrink the cap around the bottleneck securely. Tear & Pour:Enjoy the easy tear-off design for quick access to your wine. FAQs: Q:Can these shrink caps be used for beverages other than wine?A:They are versatile for any bottled beverage with compatible dimensions. Q:How resistant are these caps to external factors like moisture?A:Crafted with high-quality materials, they resist moisture and other external elements effectively. Q:Are special tools required for application?A:A heat gun or steam source is needed to secure the cap\'s shrinking. Q:Do these caps leave any residue upon removal?A:No, they are designed for clean and residue-free removal.', 'High-Quality Corks and Stoppers for Wine Bottles – Designed to provide a secure seal, preserving the freshness and flavor of your wine with every use. Perfect for Home and Professional Winemakers – Whether for DIY projects or commercial bottling, our corks and stoppers ensure reliable performance and a professional finish. Durable and Easy to Use – Made from premium materials, our wine corks and stoppers are easy to insert and remove, making them ideal for sealing and storing your homemade beverages.', 'ABC Cork', 'https://i5.walmartimages.com/asr/f66194ef-68c5-4a8f-9f6e-e3797a5bf0a0.52a604284f469b3ecc4a35ff1d9866be.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f66194ef-68c5-4a8f-9f6e-e3797a5bf0a0.52a604284f469b3ecc4a35ff1d9866be.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f66194ef-68c5-4a8f-9f6e-e3797a5bf0a0.52a604284f469b3ecc4a35ff1d9866be.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (513678639, 'Cebolla Pearl Red 12/8oz', 2.98, '018513018078', 'Red Pearl Onion', 'Produce', 'Panda Farms', 'https://i5.walmartimages.com/asr/eee2b4b6-853c-4ddb-a016-b1cf970e325f_1.d169f8631d8fa9fc647253a38edac5d9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eee2b4b6-853c-4ddb-a016-b1cf970e325f_1.d169f8631d8fa9fc647253a38edac5d9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eee2b4b6-853c-4ddb-a016-b1cf970e325f_1.d169f8631d8fa9fc647253a38edac5d9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (513717552, 'Yellow Flesh Peaches, per Pound', 1.58, '400094343906', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (514767156, 'Fresh Green Seedless Grapes', 1.78, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (514780839, 'Yellow Flesh Peaches, per Pound', 1.58, '400094343418', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (514990308, 'Fresh Dark Sweet Cherries', 7.98, '', 'short description is not available', 'Fresh Dark Sweet Cherries', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (515024184, 'Fresh Valencia Orange, Each', 1.37, '405878099826', 'Fresh Valencia Orange is a juicy and vibrant citrus fruit with a sweet and tangy flavor. Known for its bright orange color and refreshing taste, it is a popular choice for both eating and juicing. With its high vitamin C content and refreshing aroma, Fresh Valencia Orange is a healthy and delicious addition to any meal or snack.', 'Fresh Valencia Orange is a delightful citrus fruit that offers a burst of juicy goodness with every bite. Its vibrant and enticing bright orange color is a feast for the eyes, while its sweet yet tangy flavor is a treat for the taste buds. This versatile fruit is widely recognized for its refreshing taste, making it a perfect choice for both eating and juicing. What sets Fresh Valencia Orange apart is its exceptional juiciness, which makes it an ideal candidate for extracting fresh and flavorful orange juice. The juice of this variety is known for its distinct sweetness and tang, offering a refreshing and invigorating experience with every sip. Whether enjoyed on its own or mixed in with other fruits, this orange variety is a fantastic way to quench your thirst and revitalize your senses. In addition to its delectable taste, Fresh Valencia Orange is also packed with nutritional benefits. One of its standout qualities is its high vitamin C content, which is essential for boosting the immune system and promoting overall health. This vitamin not only helps protect against common illnesses but also aids in collagen production, contributing to healthy skin and connective tissues. The aroma of Fresh Valencia Orange is equally enticing, filling the air with a citrusy and invigorating scent. The mere whiff of this fruit can instantly uplift your mood and transport you to a sunny orchard, creating a sensory experience that is truly delightful. Whether enjoyed as a snack on its own, squeezed into a refreshing glass of juice, or incorporated into various recipes, Fresh Valencia Orange offers a burst of flavor and a dose of health benefits. Its juicy and tangy nature, coupled with its vibrant color and refreshing aroma, make it a must-have addition to any culinary repertoire. So, embrace the zestiness and indulge in the delightful flavors of Fresh Valencia Orange for a truly invigorating and enjoyable experience.', 'Unbranded', 'https://i5.walmartimages.com/asr/51f232ae-5f25-4c84-938e-a09f4bee8278.6363c8bd69cafa25a7a57d16039fa8ac.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/51f232ae-5f25-4c84-938e-a09f4bee8278.6363c8bd69cafa25a7a57d16039fa8ac.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/51f232ae-5f25-4c84-938e-a09f4bee8278.6363c8bd69cafa25a7a57d16039fa8ac.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (515076572, 'Fresh Lemons, 2 lb Bag', 3.92, 'deleted_842586100138', 'Enjoy the juicy goodness of citrus when you eat a Lemon. Deliciously tart and juicy, these lemons are very easy to squeeze. Among the fruits in the citrus family, lemons have a pleasing tart flavor with few seeds. Generally a winter fruit, lemons are now available year-round. Lemons are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the lemons hang out in a bowl on your counter or table to breathe. Lemons are great to cook, bake, add a twist to your water or your after hours favorite drink. Available in a 2 lb bag.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Add to your iced or hot tea Make a satisfying and refreshing strawberry lemonade Use lemon zest to make lemon cookies or lemon loaf Adds flavor to a variety or recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/03038099-488e-4089-9289-df46ee43fe7a.55fc8dfe15cdf98e017420d5cd6b61e3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/03038099-488e-4089-9289-df46ee43fe7a.55fc8dfe15cdf98e017420d5cd6b61e3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/03038099-488e-4089-9289-df46ee43fe7a.55fc8dfe15cdf98e017420d5cd6b61e3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (515121290, 'Fresh Black Seedless Grapes, Bag (2.25 lbs/Bag Est.)', 2.98, '073748111116', 'Treat yourself to the delicious, juicy flavor of Fresh Black Seedless Grapes. These grapes are bursting with flavor and are completely seedless, so you can easily enjoy a handful as a fresh snack any time of day. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the fresh taste of Fresh Black Seedless Grapes.', 'Fresh Black Seedless Grapes Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e2391f14-e952-4a96-bfc0-f03caee053e2_2.f62f0f07bb7f152d0b4a1df00d1de457.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2391f14-e952-4a96-bfc0-f03caee053e2_2.f62f0f07bb7f152d0b4a1df00d1de457.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2391f14-e952-4a96-bfc0-f03caee053e2_2.f62f0f07bb7f152d0b4a1df00d1de457.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (515884505, 'Baker Potatoes, 3 Count', 2.98, '333835701348', 'Baker Potatoes, 3 Count', 'Baker Potatoes 3 Pack Tray', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (515996857, 'Fresh Grown Yellow Peaches', 1.78, 'deleted_845792040441', 'short description is not available', 'Fresh Grown Yellow Peaches', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/66649401-25ab-4f9c-8a92-bca8dbf3c2a2.486be8ce6d081ae871e90e945fa28e20.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/66649401-25ab-4f9c-8a92-bca8dbf3c2a2.486be8ce6d081ae871e90e945fa28e20.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/66649401-25ab-4f9c-8a92-bca8dbf3c2a2.486be8ce6d081ae871e90e945fa28e20.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (516204117, 'Organic Broccoli Florets 12 Oz', 3.77, 'deleted_854026006276', 'short description is not available', 'Organic Broccoli Florets 12 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (516468253, '125pc Pto Rst Jmb 8#', 802.5, '405546023276', 'short description is not available', '125pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (516786666, 'Freshness Guaranteed Gala Apples 3 Lb Bag', 3.74, 'deleted_883391003726', '2lb bag of Gala apples. Grown in the U.S.', 'Grown in the US', 'POPCHOSE', 'https://i5.walmartimages.com/asr/55f13b78-45a2-4545-9de5-268c3bf2190b.730ba90f791243b6d13a5bd08719cf88.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/55f13b78-45a2-4545-9de5-268c3bf2190b.730ba90f791243b6d13a5bd08719cf88.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/55f13b78-45a2-4545-9de5-268c3bf2190b.730ba90f791243b6d13a5bd08719cf88.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (517140426, 'Fresh Black Seedless Grapes', 4, '', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (517227731, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094274675', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (517244735, 'Organic Limes 1# Bag', 2.98, 'deleted_744430275637', 'short description is not available', 'Organic Limes 1# Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (517349127, 'Sliced Apples & Grapes 5/2 Oz', 3.68, '077745250588', 'short description is not available', 'Sliced Apples & Grapes 5/2 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (517739917, '2# Bag Lemons', 3.48, 'deleted_852389004960', '2# Bag Lemon', '2# Bag Lemons', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (518438231, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_400094468623', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (518486131, 'Tomatoes On The Vine Per Lb', 1.98, '898859002050', 'short description is not available', 'Tomatoes On The Vine Per Lb', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (518625257, 'Fresh Premium Grape Tomato, 2 lb Package', 4.98, '684924050077', 'Premium Grape Tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily complements your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Premium Grape Tomatoes are the perfect choice.', 'Premium Grape Tomato, 2 lb Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ef2dcbc7-1fc9-40cd-bf3e-09d72a0218d9.1d2f7b812b05175eccc5c66761b3fa2e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ef2dcbc7-1fc9-40cd-bf3e-09d72a0218d9.1d2f7b812b05175eccc5c66761b3fa2e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ef2dcbc7-1fc9-40cd-bf3e-09d72a0218d9.1d2f7b812b05175eccc5c66761b3fa2e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (518642894, 'Organic Cucumber 2 Pack', 2.98, 'deleted_810083650302', 'short description is not available', 'Organic Cucumber 2 Pack', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (519088035, 'Mustard Greens, one bunch', 0.98, 'deleted_885435999613', 'Mustard Greens', 'Mustard greens are the most pungent of the cooking greens and lend a peppery flavor to food. Curly mustard is distinctive for its frilly leaf edges. Mustard leaves are a versatile kitchen green and source of both vitamins A and C and contain several other vitamins and minerals as well as fiber and protein. Ideal Temperature: 33 F. Ethylene sensitive. Cracked ice around and in packages may help extend shelf life. Keep at proper humidity levels (90-95%) to prevent wilting. It is normal for mustard greens to show a slight bronze tint.', 'Ratto Bros.', 'https://i5.walmartimages.com/asr/b3fd3ef8-09eb-4ac4-ae1c-db4d037646b9.528bceb31cc3c7eb3fb63507034725b2.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3fd3ef8-09eb-4ac4-ae1c-db4d037646b9.528bceb31cc3c7eb3fb63507034725b2.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3fd3ef8-09eb-4ac4-ae1c-db4d037646b9.528bceb31cc3c7eb3fb63507034725b2.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (519123431, 'Fresh Whole Okra', 2.87, '405911181617', 'Experience the unique taste and texture of Fresh Whole Okra, a versatile and nutritious addition to your culinary repertoire. This vibrant green vegetable boasts a delicious, slightly sweet flavor and a delightfully tender crunch. Rich in fiber, vitamins, and antioxidants, Fresh Whole Okra offers numerous health benefits, making it a wholesome choice for any meal. Savor its delightful taste in a variety of dishes, from traditional gumbo to stir-fries, and elevate your culinary creations with the distinctive charm of Fresh Whole Okra.', 'Fresh Whole Okra Experience the unique taste and texture of Fresh Whole Okra, a versatile and nutritious addition to your culinary repertoire. This vibrant green vegetable boasts a delicious, slightly sweet flavor and a delightfully tender crunch. Rich in fiber, vitamins, and antioxidants, Fresh Whole Okra offers numerous health benefits, making it a wholesome choice for any meal. Savor its delightful taste in a variety of dishes, from traditional gumbo to stir-fries, and elevate your culinary creations with the distinctive charm of Fresh Whole Okra.', 'Unbranded', 'https://i5.walmartimages.com/asr/2b0804bd-21ca-41fd-abec-51c5b91d0178.87dac13cfd80ad715d9c9a6193e9d0ec.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2b0804bd-21ca-41fd-abec-51c5b91d0178.87dac13cfd80ad715d9c9a6193e9d0ec.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2b0804bd-21ca-41fd-abec-51c5b91d0178.87dac13cfd80ad715d9c9a6193e9d0ec.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (519262713, 'Fresh Red Seedless Grapes, Bag', 3.96, 'deleted_083477200944', 'short description is not available', 'Fresh Red Seedless Grapes, Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (519629689, 'Organic Kale, 1 bunch', 2.46, '000000930956', 'Greens Kale Red Organic', 'Organic Kale, 1 bunch', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b956283c-542a-4494-b46d-6681f0bcb45e_1.473f028cc1ea235c76d9de4b59243504.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b956283c-542a-4494-b46d-6681f0bcb45e_1.473f028cc1ea235c76d9de4b59243504.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b956283c-542a-4494-b46d-6681f0bcb45e_1.473f028cc1ea235c76d9de4b59243504.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (519944906, 'White Sweet Potatoes 2 Lb Bag', 2.78, '033383001326', 'short description is not available', 'White Sweet Potatoes 2 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (520669453, '840pc Pomegranate', 1663.2, '405770833955', 'short description is not available', '840pc Pomegranate', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (520925392, 'Avocado Caesar with Grilled Herb Chicken, Chopped Salad Kit', 4.88, '071279302058', 'Twisted Avocado Caesar Chopped Kit contains romaine lettuce, and a masterpack containing Avocado Caesar dressing, tortilla strips, freeze dried corn, parmesan cheese packed in a 9.7-ounce polyethylene bag. Product has the typical flavor and crispness of Avocado Caesar salad with a light to dark green, white, and light brown color depending on the individual ingredients.', 'Avocado Caesar with Grilled Herb Chicken, Chopped Salad Kit', 'Fresh Express', 'https://i5.walmartimages.com/asr/6d53e664-8d8a-4a50-836a-fad9db2f2404_3.097dfaa4a3bbd792bcdff21b5b4c4e3e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6d53e664-8d8a-4a50-836a-fad9db2f2404_3.097dfaa4a3bbd792bcdff21b5b4c4e3e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6d53e664-8d8a-4a50-836a-fad9db2f2404_3.097dfaa4a3bbd792bcdff21b5b4c4e3e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (521043348, 'Stuffed Mushroom with Fresh Peppers, 8 Oz.', 4.98, '037102275128', 'Stuffed Mushroom with Fresh Peppers, 8 Oz.', 'Mushroom Stuffed Fresh Peppers 8 Oz.', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (521156164, 'Watermelon Seedless', 4.48, '400094407585', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (521691483, 'Dried Mushroom Kibble by Its Delish, 4 Oz Bag Dark Chilean Dehydrated and Chopped Boletus Luteus Mushrooms for Cooking and Flavoring', 26.99, '799137109259', 'Dried Kibbled Mushrooms by Its Delish Boletus Luteus mushrooms is a wild-grown dark mushroom with a deep and earthy flavor, commonly called the brown or Chilean mushroom, sorted, washed, trimmed, and air-dried. There are a good source of vitamin, minerals and protein. These are 100% all-natural with no added ingredients or preservatives. These chopped mushroom flakes are used in a wide variety of applications for rich-flavored mushroom for including sauces, gravy, soups, vegetable stock, broth and stews, pasta products, meats and sausages, seasoning blends, salad products, pot pies, and casseroles and ready meals. Prep Instruction Ideas: Add these mushrooms while slow cooking soups, stews, sauces, casseroles and other foods with sufficient liquid content. In other applications, hydrate by using 1 part dried mushroom and 5 parts water. Simmer for 10-15 minutes. Add water if necessary. Yields 1 oz equals about 1/2 cup dry. Generally, air dried vegetables double in volume when hydrated. Dry/Fresh Ratio 1 lb of air dried boletus luteus mushrooms, once rehydrated, equals approximately 6 lbs of fresh prepared boletus luteus mushrooms. Storage Suggestion Best if used within 18 months. Store tightly sealed in a dry location away from sunlight. Tip: For ready to use mushrooms, soak the dry mushrooms in a sealed container and store in the refrigerator. Stock up and enjoy! About It\'s Delish! It\'s Delish was established in 1992 and is located in North Hollywood, California. It\'s Delish is a food manufacturer and distributor who produces over 500 gourmet food products including licorice, sour belts, taffies, caramels, Jordan almonds, chocolates, nuts, fruits, trail mixes, spices, and the spice blends. It\'s Delish also produces organics and all-natural products. We give you the opportunity to order from the factory direct!', 'PREMIUM - Gourmet Dried Mushrooms Kibble Similar to Porcini and chopped into small dices VALUE SIZE - Quarter Pound Bag 4 oz, about two cups dry by the Its Delish brand ENHANCE your culinary experience with hearty flavor, bold taste and vibrant aroma. Add rich flavors paired with vitamins, minerals and protein to your favorite recipes and dishes AWESOME in sauces, gravy, soups, vegetable stock, broth and stews, pasta products, meats and sausages, seasoning blends, salad products, pot pies, risottos and casseroles and ready meals. QUALITY - Certified Kosher OU Parve, Non-Dairy, Vegan, All-Natural, No MSG, No preservatives, Gluten Free, Packaged in the USA and Shipped to you Direct!', 'It\'s Delish', 'https://i5.walmartimages.com/asr/3dfff43c-9e22-4dc1-836c-5695c1015375.83b92677bde7b4a648328e18edbab474.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3dfff43c-9e22-4dc1-836c-5695c1015375.83b92677bde7b4a648328e18edbab474.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3dfff43c-9e22-4dc1-836c-5695c1015375.83b92677bde7b4a648328e18edbab474.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (521862089, 'Freshness Guaranteed Granny Smith Apples 3 Lb Bag', 3.78, 'deleted_847081000273', 'short description is not available', 'Freshness Guaranteed Granny Smith Apples 3 Lb Bag', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (522000775, 'Yellow Flesh Peaches, per Pound', 1.58, '400094357958', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (522080372, 'Taylor Farms® Iceberg Lettuce 2ct Bag', 1.99, '030223011156', 'Taylor Farms Iceberg Lettuce is all natural with no preservatives. Harvested fresh from the field, iceberg lettuce can be chopped and used in a salad, or shredded for use in sandwiches, tacos & burgers to bring crisp freshness to every bite.', 'Classic Salads Includes Iceberg Lettuce', 'Taylor Farms', 'https://i5.walmartimages.com/asr/618813a5-d2df-4b2c-a62a-bb268ba6c29f.4065499ee99d46f84719e150aaa9fb05.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/618813a5-d2df-4b2c-a62a-bb268ba6c29f.4065499ee99d46f84719e150aaa9fb05.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/618813a5-d2df-4b2c-a62a-bb268ba6c29f.4065499ee99d46f84719e150aaa9fb05.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (522335651, '240pc On Ylw 3# Or', 475.2, '405509660289', 'short description is not available', '240pc On Ylw 3# Or', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (522409738, 'Marketside Butternut Noodles, 16 oz', 3.98, '681131305310', 'Add some fresh flavor to your meal with Marketside Butternut Squash Noodles. These butternut noodles are the perfect substitute for pasta. The noodles are made with butternut squash and are perfect for anyone wanting a vegan, gluten-free, or low-carb option or you just want to try something new. These noodles are washed and ready to cook. You can prepare these noodles in a variety of ways, season them with your favorite spices for a quick and easy meal or cook them in a pan for a few minutes and add your favorite pasta sauce for a delicious meal. Marketside Butternut Squash Noodles are a great addition to any meal. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Perfect substitute for pasta Great vegan, gluten-free or low-carb option Washed and ready to cook Only 45 calories per serving', 'Marketside', 'https://i5.walmartimages.com/asr/f51a1137-71fe-485b-bdfa-582b1b4f2724_1.b60f2d373b9e6d6dc04d16987fffa426.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f51a1137-71fe-485b-bdfa-582b1b4f2724_1.b60f2d373b9e6d6dc04d16987fffa426.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f51a1137-71fe-485b-bdfa-582b1b4f2724_1.b60f2d373b9e6d6dc04d16987fffa426.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (522524510, '200pc On Swt 3# Rio', 656, '405553686693', 'short description is not available', '200pc On Swt 3# Rio', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (522627207, 'Fieldpack Unbranded Candy Hearts Grapes 1lb Clamshell', 3.48, '827470003177', 'short description is not available', 'Fieldpack Unbranded Candy Hearts Grapes 1lb Clamshell', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (522691385, 'Fresh Green Beans', 1.48, '204530000008', 'short description is not available', 'Fresh Green Beans', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (522809792, '120pc Apple Gala 3#', 512.4, '405667198754', 'short description is not available', '120pc Apple Gala 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (523000556, 'Phillips Gourmet Organic Sliced Muchrooms, 4oz', 5.88, '021706642042', 'They are a variety of brown color, have a more intense texture and flavor.', 'Sliced Muchrooms Great source of protien Vitamin D, B Low in sodium Great soruce of potassium and riboflavina-B2 No colestrol Low in digestible carbohydrates', 'Phillips Gourmet', 'https://i5.walmartimages.com/asr/87366983-9e56-4844-95dd-a6d755a613fe.63943649dbfec1d1eb42bcb4dc8d6f82.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/87366983-9e56-4844-95dd-a6d755a613fe.63943649dbfec1d1eb42bcb4dc8d6f82.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/87366983-9e56-4844-95dd-a6d755a613fe.63943649dbfec1d1eb42bcb4dc8d6f82.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (523209178, 'Watermelon Seedless', 4.48, '400094476529', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (523273147, 'California Grown Saturn Peaches, per Pound', 3.68, 'deleted_400094521748', 'California Grown Saturn Peaches, per Pound', 'Fresh California Grown Saturn Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (523319413, 'Shrink Cap | Silver/Black Grapes (100/Pack)*', 29.95, '776982330052', 'Elevate Your Wine Experience with Our European Crafted Shrink Caps Enhance Bottle Presentation and Ensure Freshness with Our Shrink Caps! Our Premium Shrink Caps are the perfect addition to any wine bottle, combining elegance with functionality. These caps, expertly crafted in Europe, not only enhance the visual appeal of your bottles but also play a crucial role in maintaining the cork\'s integrity. Our shrink caps are ideal for winemakers, wine enthusiasts, or those who love to gift homemade wine. They are a simple yet effective way to elevate your wine\'s presentation and ensure freshness. Key Features: High-Quality Material:Manufactured in Europe, guaranteeing premium quality and durability. Universal Fit:Designed to fit 375ml, 750ml, and 1500ml wine bottles perfectly. Easy Tear-Off Design:Facilitates a smooth bottle-opening experience. Precise Dimensions:Measuring 30.5mm x 55mm for a flawless fit. Elevated Presentation:Adds a sophisticated touch to any wine bottle. Usage Guide: Slide the Cap:Place the shrink cap over the neck of the wine bottle. Apply Heat:Use a heat gun or steam to shrink the cap around the bottleneck securely. Tear & Pour:Enjoy the easy tear-off design for quick access to your wine. FAQs: Q:Can these shrink caps be used for beverages other than wine?A:They are versatile for any bottled beverage with compatible dimensions. Q:How resistant are these caps to external factors like moisture?A:Crafted with high-quality materials, they resist moisture and other external elements effectively. Q:Are special tools required for application?A:A heat gun or steam source is needed to secure the cap\'s shrinking. Q:Do these caps leave any residue upon removal?A:No, they are designed for clean and residue-free removal.', 'High-Quality Corks and Stoppers for Wine Bottles – Designed to provide a secure seal, preserving the freshness and flavor of your wine with every use. Perfect for Home and Professional Winemakers – Whether for DIY projects or commercial bottling, our corks and stoppers ensure reliable performance and a professional finish. Durable and Easy to Use – Made from premium materials, our wine corks and stoppers are easy to insert and remove, making them ideal for sealing and storing your homemade beverages.', 'ABC Cork', 'https://i5.walmartimages.com/asr/012a9ecd-4eae-4b5e-a138-4c2c9baed71c.152d71e684eff1287c4b7ffcf82a3b13.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/012a9ecd-4eae-4b5e-a138-4c2c9baed71c.152d71e684eff1287c4b7ffcf82a3b13.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/012a9ecd-4eae-4b5e-a138-4c2c9baed71c.152d71e684eff1287c4b7ffcf82a3b13.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (523387713, '160pc On Vid 4# Pl', 630.4, '400094163610', 'short description is not available', '160pc On Vid 4# Pl', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (523393741, 'Organic Zucchini 2 Pack', 2.26, 'deleted_810083650289', 'short description is not available', 'Organic Zucchini 2 Pack', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (524042598, 'Asparagus 10oz', 3.77, 'deleted_885206005673', 'short description is not available', 'Asparagus 10oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (524165112, 'Cotton Candy Green Sdls Grapes', 3.96, '', 'short description is not available', 'Cotton Candy Green Sdls Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (524300327, 'Tri Pepper Diced 7 Oz', 2.58, '643550000665', 'short description is not available', 'Tri Pepper Diced 7 Oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (524527593, 'Yellow Bell Pepper, each', 1.38, 'deleted_684924046896', 'short description is not available', 'Yellow Bell Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/170100a2-7ce0-432d-99f0-9ff1cd3312d2_1.d6b490916a1d77fd75a212af07b85e9b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/170100a2-7ce0-432d-99f0-9ff1cd3312d2_1.d6b490916a1d77fd75a212af07b85e9b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/170100a2-7ce0-432d-99f0-9ff1cd3312d2_1.d6b490916a1d77fd75a212af07b85e9b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (524751580, 'Clementines, 3 lb', 3.54, 'deleted_882648001331', 'Clementines, 3 lb', 'Clementines, 3 lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/41346d9b-ddc1-41a7-8093-35edc68c44fb_1.be72592d1d838c1dc7b156278cba3e1c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41346d9b-ddc1-41a7-8093-35edc68c44fb_1.be72592d1d838c1dc7b156278cba3e1c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41346d9b-ddc1-41a7-8093-35edc68c44fb_1.be72592d1d838c1dc7b156278cba3e1c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (524952352, 'Gourmet212 Grilled Artichokes Marinated In Oil 7.05oz, 6 Pack', 62.95, '191822007749', 'Aegean?s olive oil dishes are very famous. Taste of Mediterranean and light color artichokes will give with tasty broad bean or as a mezze The light color artichoke will give you Mediterranean taste with broad beans or serve as mezze. It is being served with potatoes, green beans and carrots at most fish restaurants.', 'Gourmet212 Grilled Artichokes Marinated In Oil 7.05oz (6 Pack), Glass, Jarred, Fresh The Aegean olive oil dishes are very famous. Taste of Mediterranean and light color artichokes will give with tasty broad bean or as a mezze. The light color artichoke will give you a Mediterranean taste with broad beans or serve as mezze. It is being served with potatoes, green beans, and carrots at most fish restaurants.', 'unknown', 'https://i5.walmartimages.com/asr/54b0f81a-2290-4253-b840-8755cb128eae.cb7499594a8a8956e15ff84e1b501f24.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54b0f81a-2290-4253-b840-8755cb128eae.cb7499594a8a8956e15ff84e1b501f24.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54b0f81a-2290-4253-b840-8755cb128eae.cb7499594a8a8956e15ff84e1b501f24.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (525075625, 'Red Seedless Grapes, bag', 3.69, 'deleted_814326010007', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/3199e597-c881-48bf-bf4c-eaac840ecbb2_2.7af452a9df42d6a3909c1d65859944ec.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3199e597-c881-48bf-bf4c-eaac840ecbb2_2.7af452a9df42d6a3909c1d65859944ec.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3199e597-c881-48bf-bf4c-eaac840ecbb2_2.7af452a9df42d6a3909c1d65859944ec.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (525223601, 'Services Reduced Program Dept 94', 0.01, '251995000005', 'short description is not available', 'Services Reduced Program Dept 94', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (525778239, 'Dried Japones Chile 8 Oz', 3.94, '045255150919', 'short description is not available', 'Dried Japones Chile 8 Oz', 'Melissa\'s', 'https://i5.walmartimages.com/asr/52589882-5add-408d-8f9f-16e78d2b09b9_3.62598a1152992821db174303f0229a7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/52589882-5add-408d-8f9f-16e78d2b09b9_3.62598a1152992821db174303f0229a7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/52589882-5add-408d-8f9f-16e78d2b09b9_3.62598a1152992821db174303f0229a7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (526153473, 'Fresh Red Seedless Grapes', 2.88, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (526284339, 'Fresh Green Onions, 1 Each', 0.98, 'deleted_405629331021', 'Fresh Green Onions, 1 Each', 'Fresh Green Onions Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (526591831, 'Family Size Taco Salad Kit', 5.98, '016741000476', 'short description is not available', 'Family Size Taco Salad Kit', 'Unbranded', 'https://i5.walmartimages.com/asr/5381d058-198d-4491-84f0-ab31b1962a4b_1.048b9391b5a7c2e1587f819f3825b41a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5381d058-198d-4491-84f0-ab31b1962a4b_1.048b9391b5a7c2e1587f819f3825b41a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5381d058-198d-4491-84f0-ab31b1962a4b_1.048b9391b5a7c2e1587f819f3825b41a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (526800091, 'Bowery Baby Kale - Locally Grown, Sustainable Salad Greens, 4.5oz', 2.98, '851536007168', 'Bowery\'s locally grown and pesticide-free Baby Kale is mellow and earthy with a great crunch. Since 2017, Bowery Farming has been growing the purest produce possible locally in New Jersey. Our indoor farms provide the ideal growing environment for a year-round assortment of pesticide free and non-GMO leafy greens & herbs. We are 100x more productive on the same footprint of land as traditional agriculture and use 95% less water. Bowery only distributes locally, ensuring our greens are delivered within just a few days of harvest.', 'Bowery Baby Kale, 4.5oz, Locally Grown with Zero Pesticides: Locally Grown Zero Pesticides Non-GMO Verified No Need to Wash Grown Indoors', 'Bowery Farming', 'https://i5.walmartimages.com/asr/61a3bf89-ccb2-4949-9a68-ed66c5d6c1c3_1.3ffa5c146e2da0096dc32187496955c4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/61a3bf89-ccb2-4949-9a68-ed66c5d6c1c3_1.3ffa5c146e2da0096dc32187496955c4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/61a3bf89-ccb2-4949-9a68-ed66c5d6c1c3_1.3ffa5c146e2da0096dc32187496955c4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (527510050, 'Stayman-winesap Apples 3 Lb Bag', 3.94, '033383082622', 'short description is not available', 'Stayman-winesap Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (528067471, 'Organic Gala Apples 3Lb Ctn', 4.97, '887434012102', 'Organic Gala Apples 3Lb Ctn - Organic Gala Apples 3Lb - Their beautiful red hue isn’t the only thing that makes the Gala such a wonderful, everyday apple. These are the perfect addition to add a pop of color or sweet treat in your next charcuterie board creation. Fragrant, juicy, and bright - this crisp red apple is best eaten fresh in a salad, as a snack or paired with cheeses and nuts.', 'Organic Gala Apples 3 Lb Ctn', 'VTUWYM', 'https://i5.walmartimages.com/asr/45dc3c46-4784-44b9-9d19-de73001d5d97.a8fb6d3a4da64d18f8ab7b84ff2729be.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/45dc3c46-4784-44b9-9d19-de73001d5d97.a8fb6d3a4da64d18f8ab7b84ff2729be.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/45dc3c46-4784-44b9-9d19-de73001d5d97.a8fb6d3a4da64d18f8ab7b84ff2729be.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (528094177, '200pc Pto Red 5# Bm', 794, '405509183337', 'short description is not available', '200pc Pto Red 5# Bm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (528284895, 'Meyer Lemons, 2 Lb.', 3.48, '885674000385', 'Enhance your recipes with the Meyer Lemons 2lb bag. Meyer lemons are a winter citrus fruit that\'s distinctively different than the average lemon. These organic Meyer lemons are bursting with flavor, with a unexpected sweetness. The variety is believed to be a hybrid of lemons and mandarin oranges, which give the fruit its unique flavor and color. Meyer lemon juice is fantastic for marinades, dressings and mixed drinks, as well as marmalades, desserts and sauces. The 2lb Meyer lemons bag needs no refrigeration. Meyer Lemons, 2lb Bag:', 'Organic Meyer lemons2 lb bagLighter, sweeter flavor than most lemonsSweet winter citrus fruit that tastes like a cross between a regular lemon and a mandarin orangeIdeal for marinades, marmalades, cocktails, dressings and more', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a9d2d5df-6df6-41de-9c48-693487089f47_1.37f24f4e5945e54cd674169517939a8b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9d2d5df-6df6-41de-9c48-693487089f47_1.37f24f4e5945e54cd674169517939a8b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9d2d5df-6df6-41de-9c48-693487089f47_1.37f24f4e5945e54cd674169517939a8b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (528441448, 'Services Reduced Program Dept 94', 0.01, '251746000001', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (528672575, 'Bowery Farming Bowery Salad Iceberg Crunch 4oz', 2.98, '851536007540', 'short description is not available', 'Bowery Farming Bowery Salad Iceberg Crunch 4oz', 'Bowery Farming', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (528786665, 'Org Red Kale', 2.46, '858959004064', 'short description is not available', 'Org Red Kale', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (529019786, 'Fresh Large Hass Avocado Bag, 3- 4 Count', 3.48, '887214001548', 'Avocados aren’t just great-tasting fresh produce items, but they are a nutrient-dense fruit that can be enjoyed throughout the year. Hass avocados are a versatile ingredient with a creamy texture and mild flavor that can be used in many different types of recipes and dishes that are perfect for enjoying at barbecues and outdoor gatherings with friends and family during the summer. Enjoy Large avocados in countless ways that will make those barbecues and gatherings with family and friends even more exciting. Use avocados in flavorful recipes that everybody can share and enjoy while being together outside. Try avocados in individual Mexican food items like tacos or burritos, as part of appetizers like avocado crostini, or in a fresh guacamole or avocado dip so everybody can dip tortilla chips into something delicious. The possibilities are deliciously endless if you need additional food options for barbecues. Not only is a Large avocado a great ingredient to use in numerous ways, but it is also a healthy food that contributes unsaturated “good” fats and almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9. A Large ripe avocado will have a dark green to nearly black skin color, a bumpy skin texture and should yield to gentle pressure without leaving indentations or feeling mushy. Avocados with a slightly bumpy texture should be ripe in 1 to 2 days. They will also be somewhat firm and have a dark green and black speckled color. Once you’ve selected the perfect bag of avocados, you’ll be ready to enjoy all kinds of different healthy foods and recipes for the next time you’re enjoying an outdoor gathering with friends and families.', 'Bag of 3 to 4 Large Hass Avocados Fresh fruit with a creamy texture and mild flavor Fresh avocados are great for using in tacos, burritos, appetizers, avocado dip and fresh guacamole so that you have delicious food to share and enjoy during barbecues and the summer months A cholesterol free fruit that contains almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9 Large hass avocados are the lowest sugar fruit and provide unsaturated “good fats” that help absorb Vitamin A, Vitamin D, Vitamin K and Vitamin E Large ripe avocados will have dark green to nearly black skin color, a bumpy texture and should yield to gentle pressure without leaving indentations', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5c798f29-e430-419a-b4aa-36c9ccc4ade2.0ac54bdc229519ee39f7188386f272d8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5c798f29-e430-419a-b4aa-36c9ccc4ade2.0ac54bdc229519ee39f7188386f272d8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5c798f29-e430-419a-b4aa-36c9ccc4ade2.0ac54bdc229519ee39f7188386f272d8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (529606845, 'City Farms Arugula Clam 4 Oz', 6.43, '850010794037', 'short description is not available', 'City Farms Arugula Clam 4 Oz', 'Fresh City Farms', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (529656618, 'Fresh Orange Cauliflower', 7.97, '027918034361', 'Introducing our Whole Fresh Orange Cauliflower, a vibrant twist on a classic favorite! Bursting with color and flavor, this cauliflower variety is a nutritional powerhouse. Packed with vitamin C, potassium, fiber, iron, calcium, and magnesium, it offers a wholesome addition to your meals. Whether roasted, steamed, or added to stir-fries, our Whole Fresh Orange Cauliflower brings a delightful pop of color and a nutritious boost to your plate. Experience the goodness of orange cauliflower today!', 'Excellent source of vitamin C Slightly nutty and a little sweet Crunchy texture', 'Tanimura & Antle', 'https://i5.walmartimages.com/asr/efd38d76-ef1d-482d-bb58-fbe62d24478e.8307f2eee28a795b37e05dab2d58be6d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/efd38d76-ef1d-482d-bb58-fbe62d24478e.8307f2eee28a795b37e05dab2d58be6d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/efd38d76-ef1d-482d-bb58-fbe62d24478e.8307f2eee28a795b37e05dab2d58be6d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (529935485, 'Fresh Cut In-Store Cucumber Slices, 1-1.75 lbs', 2.56, '262969000006', 'Enjoy the cool, refreshing taste of our Fresh Cut In-Store Cucumber Slices. Freshly prepared, each cucumber slice is carefully cut to the perfect thickness, promising high quality in every bite. Weighing between 1-1.75 pounds, these cucumbers are versatile and perfect for various culinary uses. Toss them in a salad for a refreshing crunch, add them to sandwiches for a burst of freshness, or snack on them for a healthy, hydrating option. The clear, sturdy container serves a dual purpose - it not only showcases the freshness and quality of the product, but also allows for easy storage and transport. Whether you\'re always on the go, meal prepping, or simply looking for a fresh, healthy snack, our Fresh Cut In-Store Cucumber Slices are a perfect choice.', 'Fresh Cut In-Store Cucumber Slices, 1-1.75 lbs Freshly cut in-store to ensure maximum freshness and quality Perfect for various culinary uses, such as in salads, sandwiches, or as a standalone snack Come in a clear, sturdy container for easy storage and transportation Ready to be enjoyed straight from the container', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bc4a57ec-da74-4176-98f0-6045a013fabd.3a3075df58d1845e58a5a17b22de3332.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc4a57ec-da74-4176-98f0-6045a013fabd.3a3075df58d1845e58a5a17b22de3332.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc4a57ec-da74-4176-98f0-6045a013fabd.3a3075df58d1845e58a5a17b22de3332.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (530346478, 'BrightFarms Spring Mix Lettuce, 8 oz Family Pack Salad Salad', 4.97, '857062004510', 'BrightFarms Spring Mix Lettuce is the perfect base for any salad, wrap or sandwich. It combines crunchy lettuces with sweet, tender baby lettuces for a mix that is versatile in texture, color and flavor. Grown nearby in a state-of-the-art greenhouse, the salad greens go from farm to store in as little as 24 hours ensuring they are fresh, crunchy and long-lasting in your fridge -- in fact we guarantee it! By growing indoors using a hands-free growing process, we eliminate the use of pesticides on our produce so that the greens are ready to eat from the container, with no need to wash. At BrightFarms, we are on a mission to grow salads in a way that is better for people and the planet, transforming the way people eat and enjoy fresh produce - and shaping a more sustainable future for food.', 'Pesticide, herbicide and fungicide free greens Greenhouse grown, for guaranteed fresh greens year-round No need to wash Responsibly grown, harnessing the power of technology to do more with less: less water, less land, less shipping fuel to produce more Non-GMO', 'BrightFarms', 'https://i5.walmartimages.com/asr/4362a557-f674-4e47-98a6-c6529a2181ea.c1bad3289a00faf1887b6c13bc75c9f6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4362a557-f674-4e47-98a6-c6529a2181ea.c1bad3289a00faf1887b6c13bc75c9f6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4362a557-f674-4e47-98a6-c6529a2181ea.c1bad3289a00faf1887b6c13bc75c9f6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (530643718, 'Sunset® Yowzers® Red Chili Peppers 8oz', 0.97, '057836000599', 'Sunset® Yowzers® Red Chili Peppers 8oz', 'Hot & sweet Chef Gourmet Inspired', 'Sunsets', 'https://i5.walmartimages.com/asr/5fdf6b2b-33ee-41e9-843a-43da5362c35e.e27e141503e404aca5daa09afc2c9c85.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5fdf6b2b-33ee-41e9-843a-43da5362c35e.e27e141503e404aca5daa09afc2c9c85.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5fdf6b2b-33ee-41e9-843a-43da5362c35e.e27e141503e404aca5daa09afc2c9c85.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (530753787, 'Organic Yellow Potatoes 3 Lb Bag', 4.46, '028733052608', 'short description is not available', 'Organic Yellow Potatoes 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (530797989, 'Dried Mushroom Kibble by Its Delish, 2 Oz Bag Dark Chilean Dehydrated and Chopped Boletus Luteus Mushrooms for Cooking and Flavoring', 21.99, '799137109242', 'Dried Kibbled Mushrooms by Its Delish Boletus Luteus mushrooms is a wild-grown dark mushroom with a deep and earthy flavor, commonly called the brown or Chilean mushroom, sorted, washed, trimmed, and air-dried. There are a good source of vitamin, minerals and protein. These are 100% all-natural with no added ingredients or preservatives. These chopped mushroom flakes are used in a wide variety of applications for rich-flavored mushroom for including sauces, gravy, soups, vegetable stock, broth and stews, pasta products, meats and sausages, seasoning blends, salad products, pot pies, and casseroles and ready meals. Prep Instruction Ideas: Add these mushrooms while slow cooking soups, stews, sauces, casseroles and other foods with sufficient liquid content. In other applications, hydrate by using 1 part dried mushroom and 5 parts water. Simmer for 10-15 minutes. Add water if necessary. Yields 1 oz equals about 1/2 cup dry. Generally, air dried vegetables double in volume when hydrated. Dry/Fresh Ratio 1 lb of air dried boletus luteus mushrooms, once rehydrated, equals approximately 6 lbs of fresh prepared boletus luteus mushrooms. Storage Suggestion Best if used within 18 months. Store tightly sealed in a dry location away from sunlight. Tip: For ready to use mushrooms, soak the dry mushrooms in a sealed container and store in the refrigerator. Stock up and enjoy! About It\'s Delish! It\'s Delish was established in 1992 and is located in North Hollywood, California. It\'s Delish is a food manufacturer and distributor who produces over 500 gourmet food products including licorice, sour belts, taffies, caramels, Jordan almonds, chocolates, nuts, fruits, trail mixes, spices, and the spice blends. It\'s Delish also produces organics and all-natural products. We give you the opportunity to order from the factory direct!', 'PREMIUM - Gourmet Dried Mushrooms Kibble Similar to Porcini and chopped into small dices VALUE SIZE - Two Ounces 2 Oz Bag, about one cup of dry by the Its Delish brand ENHANCE your culinary experience with hearty flavor, bold taste and vibrant aroma. Add rich flavors paired with vitamins, minerals and protein to your favorite recipes and dishes AWESOME in sauces, gravy, soups, vegetable stock, broth and stews, pasta products, meats and sausages, seasoning blends, salad products, pot pies, risottos and casseroles and ready meals. QUALITY - Certified Kosher OU Parve, Non-Dairy, Vegan, All-Natural, No MSG, No preservatives, Gluten Free, Packaged in the USA and Shipped to you Direct!', 'It\'s Delish', 'https://i5.walmartimages.com/asr/3dfff43c-9e22-4dc1-836c-5695c1015375.83b92677bde7b4a648328e18edbab474.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3dfff43c-9e22-4dc1-836c-5695c1015375.83b92677bde7b4a648328e18edbab474.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3dfff43c-9e22-4dc1-836c-5695c1015375.83b92677bde7b4a648328e18edbab474.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (531020875, '180pc Pto Rst 10# Wa', 1074.6, '400094858523', 'short description is not available', '180pc Pto Rst 10# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (531138917, 'McLane Company Fiesta Salad, 5.65 Oz.', 3.48, '717524772176', 'McLane Company Fiesta Salad, 5.65 Oz.', 'Mclane Company Fiesta Salad', 'McLane Company', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (531229006, 'Cherry Tomato, 10 oz Package', 2.98, 'deleted_884051050203', 'Bring the fresh, delicious taste of Cherry Tomatoes into your home. Because of their notable flavor and thicker skin, they are a versatile tomato that\'s great for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, cherry tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with these fresh Cherry Tomatoes.', 'Cherry Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/39585953-8ae1-4909-a68a-40c3288c87ba.b7af54eb72069bdaca0bd4d3d88f9d2b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39585953-8ae1-4909-a68a-40c3288c87ba.b7af54eb72069bdaca0bd4d3d88f9d2b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39585953-8ae1-4909-a68a-40c3288c87ba.b7af54eb72069bdaca0bd4d3d88f9d2b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (531468006, 'Fresh Red Seedless Grapes', 2.48, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (532035494, 'Garden Salad Mix, 6 Oz.', 1, '400094397206', 'Garden Salad Mix, 6 Oz.', 'Ta Garden Salad Mix 6 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (532114944, 'Fresh Guanabana, 20 lb Package', 5.97, '000000033817', 'The Fresh Guanabana, 20 lb Package is a delightful assortment of delicious and exotic guanabana fruits, carefully hand-picked and packaged to ensure maximum freshness and flavor. Guanabana, also known as soursop, is a tropical fruit with a unique taste that combines the flavors of pineapple, strawberry, and citrus, resulting in a truly refreshing and tangy experience. This 20 lb package is perfect for those who want to indulge in the heavenly taste of guanabana or for those who wish to share this exquisite fruit with friends and family. Each fruit is plump, juicy, and bursting with vitamins, minerals, and antioxidants, making it a healthy choice for a snack or a versatile ingredient for various culinary creations. Whether enjoyed on its own, blended into smoothies, or incorporated into salads and desserts, the Fresh Guanabana, 20 lb Package is a true tropical treasure that will transport your taste buds to paradise.', 'Item Type: Edge Clamp Brand: TE-CO Manufacturer Part Number: 33817 Made in the United States', 'TE-CO', 'https://i5.walmartimages.com/asr/b4685596-b822-4de4-b573-80d8e6e2a996.d85000087726f875fcc2107029387a34.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b4685596-b822-4de4-b573-80d8e6e2a996.d85000087726f875fcc2107029387a34.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b4685596-b822-4de4-b573-80d8e6e2a996.d85000087726f875fcc2107029387a34.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (532239432, 'Cabo Fresh Fiesta Refrigerated Guacamole, 12 Oz Tub', 3.98, '811892024896', 'Cabo Fresh Fiesta Refrigerated Guacamole in a 12 Oz Tub, with 95% avocado 5% spices', 'Cabo Fresh Fiesta Guacamole 12 Oz Tub, Refrigerated 95% avocado 5% spices A Gluten free Product of Mexico', 'Cabo Fresh', 'https://i5.walmartimages.com/asr/0312051b-6730-48ca-873e-e55e7bde0698.e5f7d8b05d4cf02349c4f8922d3a7fde.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0312051b-6730-48ca-873e-e55e7bde0698.e5f7d8b05d4cf02349c4f8922d3a7fde.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0312051b-6730-48ca-873e-e55e7bde0698.e5f7d8b05d4cf02349c4f8922d3a7fde.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (532259689, '180pc Pto Rst 10# Pt', 1074.6, '400094863145', 'short description is not available', '180pc Pto Rst 10# Pt', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (533125066, '75pc Orange Navel 8#', 597.75, '405791374475', 'short description is not available', '75pc Orange Navel 8#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (533554971, '180pc Apple Gala 3#', 561.6, '405668515642', 'short description is not available', '180pc Apple Gala 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (533631258, '240pc On Ylw 3# Chr', 475.2, '400094028544', 'short description is not available', '240pc On Ylw 3# Chr', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (533672189, 'Good Healthy Organic Mighty Mix Sunflower, Pea and Radish Microgreens Salad, 3 oz Clam Shell, Fresh', 2.98, '856642007422', 'GoodHealthy Organic Mighty Micro Mix features little plants with huge flavor! This perfectly curated blend of organic pea and sunflower microgreens delivers the vitamins and nutrients you’ve been missing in every bite. Nutty and crisp, the Mighty Micro Mix packs nutrition and flavor into any recipe! At GoodHealthy, we’re changing the way you think about farming! Every seed we plant is nurtured in organic soil, rich in nutrients, and cared for by our sustainable SmartFarm technology. Grown locally 365 days a year, our AI-driven farms are turning less into more; using less water, less land, and less energy to produce more of the farm-fresh organic veggies you love! Going beyond organic, our regenerative greenhouses restore nutrients to the soil with every harvest, reducing our carbon footprint and supporting the local environment. Making the world GoodHealthy, one plant at a time!', 'GoodHealthy Organic Mighty Micro Mix 3oz', 'Good Healthy', 'https://i5.walmartimages.com/asr/d4218082-994b-4e5d-b0ee-22a255927fa9.34bc8c9981c590898f5db57d6a6086b1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4218082-994b-4e5d-b0ee-22a255927fa9.34bc8c9981c590898f5db57d6a6086b1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4218082-994b-4e5d-b0ee-22a255927fa9.34bc8c9981c590898f5db57d6a6086b1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (534227389, 'Sweet Potatoes 5 Lb Bag', 4.27, '669660481651', 'short description is not available', 'Sweet Potatoes 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (534341349, 'Green Bell Pepper', 0.86, 'deleted_852713002068', 'short description is not available', 'Green Bell Pepper', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (534407671, 'Fresh Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094357484', 'Fresh Grown Yellow Nectarines, 1 Lb.', 'Fresh Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (535340334, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094511459', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (535750637, 'Mother Earth Products Dehydrated Mushrooms, 1 Quart Mylar Bag', 9.73, '810919032616', 'Mother Earth Products Dehydrated Champignon Mushrooms: a healthy & convenient addition to every area of your life without the headache: emergency preparedness, snacking, long and short term storage, traveling, everyday cooking, hiking, backpacking, spicing up your recipes, etc. use it now or later. Mother Earth Products Dehydrated Champignon Mushrooms are made with real, Non-GMO Champignon Mushrooms, no additives or preservatives, & is kosher - a guilt-free, robust food that makes eating tasty & rewarding, without the hassle of weekly trips to the store or the worry of spoiling. It?s so delicious you won?t store it away and hope you never have to use it. Taste the Goodness of Mother Earth Products', '100% champignon mushrooms; spice; good for all recipes, especially soups, stir fry, and pizza; long term storage; short term storage; pantry; portable; convenient; nothing added; emergency preparedness; great flavor; easy to cook with', 'Mother Earth Products', 'https://i5.walmartimages.com/asr/1a87e4b2-b885-498a-9002-bf21dc4c1bbd.7bc48a99ac77cc9565aa41c8cf443d18.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a87e4b2-b885-498a-9002-bf21dc4c1bbd.7bc48a99ac77cc9565aa41c8cf443d18.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a87e4b2-b885-498a-9002-bf21dc4c1bbd.7bc48a99ac77cc9565aa41c8cf443d18.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (535813427, 'California Grown Peaches, per Pound', 1.48, '405544455802', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (535830428, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094319123', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (536206355, 'Green Giant Broccoli Florets. 32 Oz', 5.98, 'deleted_605806122361', 'For 100+ years, Green Giant has produced the finest healthy canned & ; frozen vegetables. Perfect for healthy recipes & ; vegetable side dishes.', 'Green Giant Broccoli Florets. 32 Oz', 'Green Giant', 'https://i5.walmartimages.com/asr/2095f2ec-350e-4f2b-bffe-35f0277370e2_1.7944fd345602eafa1fda6a6a45ee9950.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2095f2ec-350e-4f2b-bffe-35f0277370e2_1.7944fd345602eafa1fda6a6a45ee9950.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2095f2ec-350e-4f2b-bffe-35f0277370e2_1.7944fd345602eafa1fda6a6a45ee9950.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (536665329, 'Yellow Flesh Peaches, per Pound', 1.58, '400094658468', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (536692461, 'China Impor', 6.47, '826594105088', 'short description is not available', 'China Impor', 'China Impor', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (536731444, 'Fresh Red Seedless Grapes 32oz', 4.98, 'deleted_817050010527', 'short description is not available', 'Fresh Red Seedless Grapes 32oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (536832313, 'Watermelon Seedless', 4.48, '400094371381', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (536965498, 'Fresh Cocktail Tomato, 1 lb Package', 2.98, 'deleted_813595010275', 'Holding the ideal balance of sweetness and acidity, it\'s easy to see why Cocktail Tomatoes are called the tomato lover\'s tomato. Cocktail tomatoes are small, making them an ideal choice for appetizers to pair with your everyday meals and for when you\'re entertaining guests. You can combine these tasty little tomatoes with fresh mozzarella and basil drizzled with olive oil or slice them up and add them to a freshly tossed salad. If you\'re feeling something classic, you can always cut one up to add that fresh tomato taste to a sandwich or dice up a few to make a delightful pizza topping. Plus, cocktail tomatoes are packed with nutrients, including vitamins A, B6, B12, C, D, E, K, phosphorous, magnesium and zinc, so you can feel good about adding some extra flavor to your meals. Be sure to add Cocktail Tomatoes to your inventory of fresh ingredients today.', 'Cocktail Tomato, 1 lb Package: The tomato lover\'s tomato Small size is ideal for salads and appetizers Ideal ingredient for a variety of dishes These European-style whole tomatoes are ideal all year long Add to party trays or school lunches Delicious and nutritious 16-ounce package of cocktail tomatoes To maintain sweetness, do not refrigerate', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (537037331, 'Gesex Fresh Red Seedlesss Grapes', 9.47, '', 'Gesex Fresh Red Seedlesss Grapes', 'Gesex Fresh Red Seedlesss Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (537508049, 'Royal Verano Pears', 34.99, '780994803138', 'Royal Verano Pears', 'Pears', 'Harry & David', 'https://i5.walmartimages.com/asr/f519b22b-47fe-47dd-acbb-7775afc140a5.522d32d140a130326be7230b2c1a859d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f519b22b-47fe-47dd-acbb-7775afc140a5.522d32d140a130326be7230b2c1a859d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f519b22b-47fe-47dd-acbb-7775afc140a5.522d32d140a130326be7230b2c1a859d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (537528046, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_400094563687', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (537606379, 'Forest-grown Japanese Dried Shiitake KOSHIN, 42-75mm, 70g', 29.99, '', 'Sugimoto shiitake are naturally cultivated outdoors on special sweet sap oak logs. Moreover, our drying and packaging process keeps the moisture content to less than 9% which enhances the Shiitake flavor and VitaminD content. Sugimoto Shiitake promotes 100% natural and sustainable cultivation using only carefully selected local cultivators. This Shiitake mushroom is called ?Koshin? and is picked after the cap of the Mushroom blooms into an umbrella. It is more large and flat than the ?Donko? Shiitake mushroom which is picked earlier while the cap is still in a bud form. Since Koshin is less thick than the Donko, it is easier and quicker to use requiring less time to rehydrate. Koshin is best used cut and in stir-fries, soups, sauces, where smaller pieces are used with other ingredients. Our products pass a yearly quality audit guaranteeing the consistency of the sourcing and production process of our Dried Shiitake mushroom. This Audit is conducted by the Japanese Ministry of Agriculture, Forestry, and Fisheries with the Japanese Consumers\' Co-operative Union. (JCCU)', 'Forest-grown shiitake mushroom Kosher certified Endorsed by famous Japanese chef Dr. Yukio Hattori and his show \'Iron Chef\' Sustainable cultivation methods Grown in collaboration with 600+ local cultivators', 'Sugimoto Co.', 'https://i5.walmartimages.com/asr/025f8e00-1df6-4bfb-9070-78dc433e6fd7.a425ac5af388e363ececf8282ee22bc8.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/025f8e00-1df6-4bfb-9070-78dc433e6fd7.a425ac5af388e363ececf8282ee22bc8.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/025f8e00-1df6-4bfb-9070-78dc433e6fd7.a425ac5af388e363ececf8282ee22bc8.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (537843405, '240pc Pto Red/ylw 3#', 878, '405500672212', 'short description is not available', '240pc Pto Red/ylw 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (538262492, 'Yellow Flesh Peaches, per Pound', 1.58, '400094845400', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (538365156, 'Cebolla Roja 24/2lb', 2.87, '405873145061', 'Introducing our Cebolla Roja 24/2lb pack - a bulk supply of premium-quality red onions that add a pop of color and rich flavor to your culinary creations. These versatile onions, known for their vibrant hue and distinct taste, come in 24 handy 2lb bags, ensuring you have ample supply for your recipes. Ideal for salads, salsas, or a variety of cooked dishes, Cebolla Roja 24/2lb offers convenience and consistent quality for your kitchen or food service needs.', 'Cebolla Roja 24/2lb Introducing our Cebolla Roja 24/2lb pack - a bulk supply of Whole Fresh premium-quality red onions that add a pop of color and rich flavor to your culinary creations. These versatile onions, known for their vibrant hue and distinct taste, come in 24 handy 2lb bags, ensuring you have ample supply for your recipes. Ideal for salads, salsas, or a variety of cooked dishes, Cebolla Roja 24/2lb offers convenience and consistent quality for your kitchen or food service needs.', 'Cebolla Roja', 'https://i5.walmartimages.com/asr/e7869246-c92d-4913-8bdd-eaef681b52d7.ba6b0e5f109105872b3af118e9d863f2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e7869246-c92d-4913-8bdd-eaef681b52d7.ba6b0e5f109105872b3af118e9d863f2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e7869246-c92d-4913-8bdd-eaef681b52d7.ba6b0e5f109105872b3af118e9d863f2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (538529296, 'Burpee Cherry Baby Tomato Vegetable Seed, 1-pack', 1.96, '041530543155', 'Here they come: cascading, jewel-like clusters of delectable ruby-red cherries. Tomatoes bursting with sweetness, light, and a tingly-tangy ‘pop’! ‘Cherry Baby’s super productive plants soon mass with dense clusters of up to 350 sweet 1 oz. cuties. In a large container or the garden, these tomatoes place a healthy snack within arm’s reach. Indeterminate.', 'Burpee exclusive. Red tomatoes bursting with sweetness, light, and a tingly-tangy \'pop\', with clusters of up to 350 Sweet, 1 oz. Tomatoes. Indeterminate Sow indoors 6-8 weeks before average last frost date using a Burpee seed starting kit. Transplant to the garden 4 weeks after the average last frost date. Harvest in 70 days Plant Height is 48\". plant spread is 48\". yields 1\" fruit Annual for all growing zones from 1-11. Sunlight exposure = full-sun', 'Burpee', 'https://i5.walmartimages.com/asr/9db680a9-1f58-4fc9-bd93-206eb2c16a7b.578ce30d1ceed7887bb27b3015860e7a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9db680a9-1f58-4fc9-bd93-206eb2c16a7b.578ce30d1ceed7887bb27b3015860e7a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9db680a9-1f58-4fc9-bd93-206eb2c16a7b.578ce30d1ceed7887bb27b3015860e7a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (538586500, 'California Grown Peaches, per Pound', 1.58, '400094006214', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (538961555, 'Earthbound Farms Fresh Organic Broccoli Florets, 9 oz', 3.48, '032601952693', 'Ready to eat or cook, Earthbound Farms Organic Broccoli Florets are deliciously fresh and organic. These packaged broccoli florets are washed and prepped, so they\'re ready to toss into your favorite recipe or to be dipped in your favorite veggie dip right from the package. One nine-ounce package contains three servings. With 35 calories and loads of nutrients per three-ounce serving, you can have a healthy side dish on the table in no time. Each serving gives you six percent of your daily recommended intake of potassium plus two grams of protein! Earthbound Farms Organic Broccoli Florets are also great in baked recipes like casseroles or in creamy soups like cream or broccoli or cream of potato soup.', 'Earthbound Farms Fresh Organic Broccoli Florets are ready for your favorite dips or recipes Ready to eat on the go Recipe-ready vegetables Washed and ready to enjoy Fresh organic snack Good source of Vitamin K Each 9-ounce package has 3 servings', 'Earthbound Farm', 'https://i5.walmartimages.com/asr/e0ecdf25-f74f-46ee-926e-8908dfa712ef.cde246cae27bbd04944f7f8356f95d5e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e0ecdf25-f74f-46ee-926e-8908dfa712ef.cde246cae27bbd04944f7f8356f95d5e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e0ecdf25-f74f-46ee-926e-8908dfa712ef.cde246cae27bbd04944f7f8356f95d5e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (539032328, 'Acorn Squash', 1.58, 'deleted_850003165028', 'short description is not available', 'Acorn Squash', 'Fresh Produce', 'https://i5.walmartimages.com/asr/daf77412-3612-43bc-bfaf-5ef228abae6d.834dcfdb96f9856e465e5718fe558dd3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/daf77412-3612-43bc-bfaf-5ef228abae6d.834dcfdb96f9856e465e5718fe558dd3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/daf77412-3612-43bc-bfaf-5ef228abae6d.834dcfdb96f9856e465e5718fe558dd3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (539409693, 'Fresh Green Seedless Grapes, Bag (2.25 lbs/Bag Est.)', 4, '681131433655', 'Treat yourself to the delicious, juicy flavor of Freshness Guaranteed Fresh Green Seedless Grapes. These grapes are bursting with flavor and are completely seedless, so you can easily enjoy a handful as a fresh snack any time of day. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Freshness Guaranteed Fresh Green Seedless Grapes.Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Spark Fresh item.', 'Fresh Green Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/706f6ddc-df9b-4f53-bb2f-9a25cc1f13d5.2a6406c8b0d696402a0478f87df6ef8a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/706f6ddc-df9b-4f53-bb2f-9a25cc1f13d5.2a6406c8b0d696402a0478f87df6ef8a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/706f6ddc-df9b-4f53-bb2f-9a25cc1f13d5.2a6406c8b0d696402a0478f87df6ef8a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (539569198, 'Freshness Guaranteed Pineapple Medium', 4.37, '262825000003', 'Experience a burst of tropical flavors with these Freshness Guaranteed Pineapple Chunks. The pre-cut slices of ripe pineapple are juicy and sweet to taste and are packed in its own juice. Carry them with you and eat them straight out of the tray any time you want, at home or on-the-go. You can also use them to top desserts and ice creams, in a fruit salad or blend them with milk to make milkshakes. Pineapples are known to have a number of nutrients, and they are especially rich in vitamin C. Add some fresh fruits to your daily menu today with these Freshness Guaranteed Pineapple Chunks.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Pineapple Medium', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (539700049, 'Organic Sweet Sapphire Grapes 1lb', 3.96, '816426013216', 'short description is not available', 'Organic Sweet Sapphire Grapes 1lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (539860003, 'Fresh Asian Pears, Each', 1.97, '000000044073', 'The 20th Century Asian pear smells like a pear, but, like an apple, the fruit is crisp, firm and round. The flavor is like a pear pumped up and sweeter. On the larger side, with smooth, green skin. The flesh of the fruit is crisp, white, and very juicy. Fresh Asian Pears are high in fiber, low in calories, and have many micronutrients. These micronutrients help to improve blood, bone, and cardiovascular health. They are great to add to a healthy diet plan!', 'Fresh Asian Pear, Each: Sweet,crisp and aromatic with a definitive pear flavor Great for breakfast, lunch, dinner, and dessert Versatile ingredient perfect for both savory and sweet dishes Chop them up and add to muffins with walnuts and vanilla, slice and add to pizza with prosciutto, goat cheese, and arugula, or cut in half and cook in a skillet with butter, brown sugar, and vanilla', 'Unbranded', 'https://i5.walmartimages.com/asr/08ee0c5c-699a-4636-9c5e-ec496e556f30.db76790d55b8e320b767ed0fb9092179.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/08ee0c5c-699a-4636-9c5e-ec496e556f30.db76790d55b8e320b767ed0fb9092179.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/08ee0c5c-699a-4636-9c5e-ec496e556f30.db76790d55b8e320b767ed0fb9092179.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (539878607, 'Sweet Apple, Chicken Nugget, Carrots, Dr', 3.94, '732313762510', 'short description is not available', 'Sweet Apple, Chicken Nugget, Carrots, Dr', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (539922855, 'Watermelon Seedless', 4.48, '400094479186', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (540209921, '240pc On Ylw 3# Bg', 465.6, '400094971857', 'short description is not available', '240pc On Ylw 3# Bg', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (540489393, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094225844', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (540801690, 'Freshness Guaranteed Honeycrisp Apples 3 Lb Bag', 7.67, 'deleted_033383047874', 'short description is not available', 'Freshness Guaranteed Honeycrisp Apples 3 Lb Bag', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (540917745, '200pc Pto Ykn 5#wabg', 994, '405529180224', 'short description is not available', '200pc Pto Ykn 5#wabg', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (540928658, 'Medallion Yellow Onions, 4 Count', 1.89, '661061000295', 'Medallion Yellow Onions, 4 Count', 'Medallion Yellow Onion 4 Ct Sleeve Pack', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (541142469, 'Marketside Organic Zucchini', 2.96, '681131091053', 'Marketside Organic Zucchini has a mild taste and a crisp texture that is great in recipes or enjoyed as a healthy snack. This nutrient dense vegetable is great in soups, casseroles, pot roasts and other tasty recipes. Slice it up and enjoy with baby carrots and ranch dressing for a healthy snack. Season with fresh chopped garlic, sauté and serve with grilled chicken breast and roasted carrots. It is great for health conscious individuals as they are USDA organic. Enjoy fresh from the farm taste with Marketside Organic Zucchini. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Zucchini USDA organic Great for you Healthy side item Summer squash/li>', 'Marketside', 'https://i5.walmartimages.com/asr/dd208c04-5bf7-4022-bbeb-4b30ae200bd5_2.ce992df2afc106b32bed95319680ac4a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd208c04-5bf7-4022-bbeb-4b30ae200bd5_2.ce992df2afc106b32bed95319680ac4a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd208c04-5bf7-4022-bbeb-4b30ae200bd5_2.ce992df2afc106b32bed95319680ac4a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (541543640, 'Freshness Guaranteed Fresh Red Seedless Grapes', 2.28, '', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (541813266, 'Fresh Whole Malanga Lila', 0.97, 'deleted_405854077343', 'Introducing Malanga Lila, a unique, nutrient-packed root vegetable that adds a delicious twist to your culinary creations. With its earthy flavor and starchy texture, Malanga Lila is perfect for adding substance to soups, stews, and side dishes. Rich in fiber, vitamins, and minerals, this versatile ingredient not only enhances your meals but also promotes a healthy lifestyle. Embrace the exotic taste of Malanga Lila and elevate your dishes to new heights of flavor and nutrition.', 'Introducing Fresh Malanga Lila, a unique, nutrient-packed root vegetable that adds a delicious twist to your culinary creations. With its earthy flavor and starchy texture, Malanga Lila is perfect for adding substance to soups, stews, and side dishes. Rich in fiber, vitamins, and minerals, this versatile ingredient not only enhances your meals but also promotes a healthy lifestyle. Embrace the exotic taste of Malanga Lila and elevate your dishes to new heights of flavor and nutrition.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/e2e839c8-d025-462a-af80-62845c2cbac8.6f50a627b9c1cd38f2ce4f00f273abaf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2e839c8-d025-462a-af80-62845c2cbac8.6f50a627b9c1cd38f2ce4f00f273abaf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2e839c8-d025-462a-af80-62845c2cbac8.6f50a627b9c1cd38f2ce4f00f273abaf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (542124612, 'Gala Apples 3 Lb Bag', 2.98, '818290020123', 'short description is not available', 'Gala Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (542806438, '200pc Pto Ykn 5# Rpe', 994, '405504307424', 'short description is not available', '200pc Pto Ykn 5# Rpe', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (542955132, 'Sunset Angel Sweet Tomatoes, 1 Pint Package, Fresh', 3.99, '057836655850', 'SUNSET Angel Sweet Tomatoes are 1 pint of premium grape snacking tomatoes! Perfect for snacking, lunch, or dinner - fresh or cooked. Try them in salads, pastas, omelets, flatbreads, and more. Miraculously sweet tomatoes! Sweet and juicy bite-size tomatoes packed with extra sweet flavor. Hothouse grown to ensure consistent quality and freshness. Certified non-GMO tomatoes. Store at room temperature for optimal flavor, and wash before enjoying. Plastic tray featuring a peel and reseal film to help keep tomatoes fresh. Enjoy SUNSET Angel Sweet Tomatoes all year long.', 'SUNSET fresh Angel Sweet grape snacking tomatoes Miraculously sweet tomatoes Sweet and juicy bite-size tomatoes packed with extra sweet flavor Perfect for snacking, lunch, or dinner - fresh or cooked Try them in salads, pastas, omelets, flatbreads, and more Wash and enjoy Available all-year-long Non-GMO certified Hothouse grown to ensure consistent quality and freshness 1 pint plastic container featuring a peel and reseal film to help keep tomatoes fresh Store at room temperature for optimal flavor', 'SUNSET', 'https://i5.walmartimages.com/asr/0dfd1dfe-2f36-4ddb-9bc1-59d462f34e53.52bed9d77148d13bb3e6b4891c0c41b1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0dfd1dfe-2f36-4ddb-9bc1-59d462f34e53.52bed9d77148d13bb3e6b4891c0c41b1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0dfd1dfe-2f36-4ddb-9bc1-59d462f34e53.52bed9d77148d13bb3e6b4891c0c41b1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (542966989, 'Yellow Potatoes 5 Lb Bag', 2.57, 'deleted_677176000174', 'short description is not available', 'Yellow Potatoes 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (543398045, 'Jammers Thomcord Grapes 1lb Bag', 2.98, 'deleted_799424381108', 'short description is not available', 'Jammers Thomcord Grapes 1lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (543806105, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094239933', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (544312793, '90pc Pto Rst 10# Ph', 399.6, '405531376035', 'short description is not available', '90pc Pto Rst 10# Ph', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (544362461, 'Fresh Green Seedless Grapes', 2.18, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (545035266, 'Yu Yee Dried Black Fungus,8.8 Oz', 18.89, '023452800226', 'black fungus mushroom premim dried all natural', 'Yu Yee Dried Black Fungus,8.8 Oz', 'Yu Yee', 'https://i5.walmartimages.com/asr/1a034e28-1fd2-44bc-b52f-5119f914a253_1.3d5a6c9bed7c5f5de63d0433039569c4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a034e28-1fd2-44bc-b52f-5119f914a253_1.3d5a6c9bed7c5f5de63d0433039569c4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a034e28-1fd2-44bc-b52f-5119f914a253_1.3d5a6c9bed7c5f5de63d0433039569c4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (545920335, 'Fuji Apples 3 Lb Bag', 3.97, 'deleted_080153341311', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (546677407, 'Organic Zucchini, Fresh, 2 Each', 2.96, 'deleted_823874000132', 'Add some fresh flavor to your meal with Organic Zucchini. This versatile vegetable can be used in a variety of dishes to create delicious and decadent meals. This nutrient dense vegetable. Slice it up and enjoy with baby carrots and ranch dressing for a healthy snack. Season with fresh chopped garlic, saute and serve with grilled chicken breast and roasted carrots. It is great for health-conscious individuals. With so many uses, this vegetable. Create tasty and flavorful meals with Organic Zucchini.', 'Versatile ingredient Slice it up and enjoy with baby carrots and ranch dressing for a healthy snack Great in soups, casseroles, pot roasts and other tasty recipes USDA organic Rich in vitamin C, calcium, and vitamin B-6 Will become a pantry staple', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/4c487bc4-83f4-43c6-ad33-da094986ad9e_1.75dfe24691d7fcea4b712883a53aee1b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4c487bc4-83f4-43c6-ad33-da094986ad9e_1.75dfe24691d7fcea4b712883a53aee1b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4c487bc4-83f4-43c6-ad33-da094986ad9e_1.75dfe24691d7fcea4b712883a53aee1b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (546740780, 'Organic Cucumber, 2 Each', 2.98, '095829400469', 'Wholesum\'s organic cucumbers are perfectly crisp and have a cool, mildly sweet and refreshing flavor. They are a top choice for slicing and eating fresh on a chef\'s salad or serving on a veggie tray with hummus. Keep hydrated with fresh cucumber infused water or slice one up for a quick on-the-go snack. As a low calorie and vitamin rich food, cucumbers also offer many nutritional benefits, helping support bone and cardiovascular health. Enjoy them along with other Wholesum organic fresh vegetables such as grape tomatoes and bell peppers and top with your favorite dressing. Wholesum is committed to bringing you a variety of premium organic produce that is fresh, flavorful, and responsibly grown.', 'Wholesum Organic Cucumbers Certified Organic 2 Count Cucumbers Great for salads Great for snacking Responsibly grown', 'Marketside', 'https://i5.walmartimages.com/asr/54e78389-436c-4823-af99-5aba6086a690.a5ede5f807a385faa636cc6eb9472161.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54e78389-436c-4823-af99-5aba6086a690.a5ede5f807a385faa636cc6eb9472161.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54e78389-436c-4823-af99-5aba6086a690.a5ede5f807a385faa636cc6eb9472161.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (546755038, 'Fresh Dark Sweet Cherries', 84.5, '', 'short description is not available', 'Fresh Dark Sweet Cherries', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (547038281, 'Pineapple Mango 10 Oz', 2.68, '717524782106', 'short description is not available', 'Pineapple Mango 10 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (547571575, 'Sun Dried Tomato Half, 1 Pound', 6.92, '204802000002', 'We’ll show you how to dry tomatoes in the sun, how to dry tomatoes in the oven, how to dry tomatoes in the dehydrator and how to store dried tomatoes. AND we’ll give you a list of ideas for delicious recipes using your sun dried tomatoes! We grow our own tomatoes every year and enjoy eating them fresh in salads, diced up for homemade canned tomatoes, transformed into our famous marinara sauce, spiced up in our restaurant-style salsa, made smooth and creamy in our perfect creamy tomato soup, and any other way we can think to use them. Another one of my favorite ways to use our tomatoes, especially when I’ve got a large end-of-season bumper crop, is to dry them. While I don’t often “sun dry” them, the tomatoes are sun-ripened on the vine and once they’re dried in the oven or the dehydrator, these “sun dried” tomatoes taste so incredible you’d never even know the difference!', 'Sun Dried Tomato Half, 1 Pound The possibilities are endless! Here are a few ideas to get you started. Use sun-dried tomatoes in or on: Pasta Salad Sauces Dips Salad Dressings Compound Butter Soups Sandwiches Burgers Antipasto/cheese/charcuterie platters Meatballs Risotto', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4cf2b3e3-0f8a-4a1e-933d-f201d21526fb.c37331aff05464e6edc511f635adf8d8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4cf2b3e3-0f8a-4a1e-933d-f201d21526fb.c37331aff05464e6edc511f635adf8d8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4cf2b3e3-0f8a-4a1e-933d-f201d21526fb.c37331aff05464e6edc511f635adf8d8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (547588303, 'Premium Bananas', 0.49, 'deleted_405821601113', 'short description is not available', 'Premium Bananas', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (548244449, '120pc Apple Gala 5#', 600, '405673556616', 'short description is not available', '120pc Apple Gala 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (548732869, '100pc Pto Rst 10# Pt', 444, '405566768737', 'short description is not available', '100pc Pto Rst 10# Pt', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (549151191, '75pc Orange Navel 8#', 778.5, '400094636206', 'short description is not available', '75pc Orange Navel 8#', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (549383840, 'Fresh Limes, 4 Count', 1.98, '820402299082', 'Stock up on several of these tart, juicy, Fresh Limes to enjoy with everyday meal planning. Freshly squeezed limes provide a healthy dose of vitamin C and antioxidants to your diet and are a key ingredient in many recipes, from homemade salsa to chicken dishes. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use the juice and the zest when baking cakes, cookies, and tarts. You can even use limes as a natural cleaning agent and to neutralize odors. Mix lime juice with vinegar and water and use as a surface spray for a nontoxic cleaning option. Limes are sold in a four-pack, so you can stock up on as many as you need. Enjoy the refreshing, tart flavor of Fresh Limes.', 'Fresh Limes, 4 Count: Juicy and fresh, packed with vitamin C and antioxidants Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use lime juice and zest when baking cakes, cookies, and tarts Refreshing, tart flavor', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8b76a74d-992c-4d8b-9583-e3bf32c1c1be.3e734700d313786a96eb7feab35c0996.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8b76a74d-992c-4d8b-9583-e3bf32c1c1be.3e734700d313786a96eb7feab35c0996.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8b76a74d-992c-4d8b-9583-e3bf32c1c1be.3e734700d313786a96eb7feab35c0996.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (549503714, 'Fresh Red Seedless Grapes', 1.84, 'deleted_095829211171', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (549598813, '183pc On Vid Kit Bf', 653.84, '405504156206', 'short description is not available', '183pc On Vid Kit Bf', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (549621957, 'Fresh Black Seedless Grapes', 2.22, 'deleted_814563011133', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (549657190, 'Dried Hot New Mexico Chile 12 Oz', 5.97, 'deleted_024059000088', 'short description is not available', 'Dried Hot New Mexico Chile 12 Oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bf7c3e08-c21d-453b-aef0-b1959fa64838_3.0990672c72a1d7ba00a49d1c74898278.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf7c3e08-c21d-453b-aef0-b1959fa64838_3.0990672c72a1d7ba00a49d1c74898278.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf7c3e08-c21d-453b-aef0-b1959fa64838_3.0990672c72a1d7ba00a49d1c74898278.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (550075239, 'Fresh Beets, 2 lb bag', 3.27, '033383449814', 'Beets (Remolacha) have been trimmed and bagged to make them more convenient to store and use. There is only one ingredient in this 16 oz. bag and that is beautiful red beets straight from the farm. There are many ways to enjoy the delicious taste and nutritional benefits that they offer.', 'Bag contains 16 oz of whole, unwashed beets Great for pickling, cooking, or enjoying raw Good source of fiber and vitamin C Refrigerate after washing', 'ATV Farms', 'https://i5.walmartimages.com/asr/fa2cf831-8917-4880-8f67-cebe9c79fd3e.c9b754f8d0261c1c255903fce2d1da88.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa2cf831-8917-4880-8f67-cebe9c79fd3e.c9b754f8d0261c1c255903fce2d1da88.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa2cf831-8917-4880-8f67-cebe9c79fd3e.c9b754f8d0261c1c255903fce2d1da88.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (550279144, 'Grizzly Bear Bumpy Pumpkins', 2.48, '850781007527', 'short description is not available', 'Grizzly Bear Bumpy Pumpkins', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (550470240, '180pc Apl Granny 3#', 822.6, '405665852801', 'short description is not available', '180pc Apl Granny 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (550698341, 'Fresh Lychees, Each', 1.48, '000000045100', 'In choosing a straight bit for any application, always select one with the shortest cutting edges and the shortest overall length that will reach the required CUT depth. Excessive length intensifies deflection and vibration, which degrade cut quality and Lead to tool breakage, A single-flute bit should be used where cut speed is more important than cut finish. Making one cut per revolution is faster than making two or three. Improved chip clearance is possible with a single flute configuration. The result: fast cuts, #45100, diameter (D): 1/8, cutting height (B): 7/16, shank (D): 1/4, overall length (L): 2, flutes: 1, carbide Tipped straight plunge single flute high production 1/8 dia x 7/16 x 1/4 inch shank.', 'Diameter (D) 1/8,Cutting height (B) 7/16,Shank (D) 1/4,Overall length (L) 2,Flutes High in Antioxidants: Lychees are a good source of antioxidants, which can help protect against cell damage and support overall health. Perfect for Snacking: Enjoy Fresh Lychees as a healthy snack on their own or add them to salads, smoothies, or desserts. Seasonal Availability: Fresh Lychees are available from May to October, making them a great summer treat.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f50a2e97-6eb4-40a3-8e76-1d2ee59d7f1e.9e607709f1b5d406e88c83ccd0b1f33f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f50a2e97-6eb4-40a3-8e76-1d2ee59d7f1e.9e607709f1b5d406e88c83ccd0b1f33f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f50a2e97-6eb4-40a3-8e76-1d2ee59d7f1e.9e607709f1b5d406e88c83ccd0b1f33f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (551253196, 'Fresh Red Seedless Grapes', 1.84, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (551315750, 'Fuji Apples 3 Lb Bag', 3.77, '400094484005', 'short description is not available', 'Fuji Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (551354729, 'AVO BAG 10/4 40 MXWP', 3.28, 'deleted_701080311092', 'Avocado Bagged', 'Large Avocado 4 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (551360646, 'Fingerling Potatoes 1.5 Lb Bag', 3.47, '826429000717', 'short description is not available', 'Fingerling Potatoes 1.5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (551999125, 'Ambrosia Apples 5 Lb Bag', 5.92, '847473005251', 'short description is not available', 'Ambrosia Apples 5 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (552061668, 'Ogp Red Cherry Samples', 0.01, '405836139311', 'short description is not available', 'Ogp Red Cherry Samples', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (552188824, 'Koru Apples, Each', 1.04, '000000036207', 'Bring home the amazing taste of Koru Apples. Tantalizingly crisp, this relatively new variety of apples has a complex, honey-like flavor. These are excellent snacking apples, but you can also use them in a variety of recipes. For breakfast, use these apples to make a rich and creamy yogurt parfait or a nutritious juice blend. Slice these apples and use them to add flavor to a lunchtime salad or spread peanut butter on them for a protein-filled snack. Koru Apples can also be used in many tasty desserts like apple cobbler, apple crisp, and apple pie. Get creative in the kitchen and make your great-granny\'s homemade apple butter or cinnamon applesauce. However you choose to use them, Koru Apples add flavor to any meal.', 'Koru Apples, each: Sweet, crisp & juicy Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie Slow to brown', 'Fresh Produce', 'https://i5.walmartimages.com/asr/81b735ce-76d7-4392-899b-c7d6dccb7a4d_3.de70ab236b17afc94fe313b92c6ea52e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/81b735ce-76d7-4392-899b-c7d6dccb7a4d_3.de70ab236b17afc94fe313b92c6ea52e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/81b735ce-76d7-4392-899b-c7d6dccb7a4d_3.de70ab236b17afc94fe313b92c6ea52e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (552321960, '200pc Pto Red 5# Cv', 1094, '405509147650', 'short description is not available', '200pc Pto Red 5# Cv', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (552502600, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_400094101964', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (552862787, 'Red Apple Bulk', 0.98, 'deleted_897049040162', 'short description is not available', 'Red Apple Bulk', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/151c39a0-9f66-4b11-906f-bd281f75c8df_1.24563d52f671c9313a13cfc1db0e4358.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/151c39a0-9f66-4b11-906f-bd281f75c8df_1.24563d52f671c9313a13cfc1db0e4358.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/151c39a0-9f66-4b11-906f-bd281f75c8df_1.24563d52f671c9313a13cfc1db0e4358.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (553070590, 'Gourmet212 Fried Eggplant 13.4oz (6 Pack), Fresh, Tin, Canned', 56.95, '191822007169', 'Have you ever tasted fried eggplant? Eggplant can offers you a bigger convenience than buying and preparing fresh eggplants. Eggplant has a unique taste but if you do not want to struggle cooking it, you can buy canned eggplant fries. Our product has a homemade taste like you just made it, so you open and serve any time you want. You can consume fried eggplants cold or warm as you like. We suggest you serve and eat eggplants with yoghurt. If you have never tried it before, it might be your new favorite. There are some features that may make you try our product: Fried eggplants are ready to serve and eat Our product has a homemade taste It is prepared with extra virgin olive oil It is Kosher Certified It is Halal Certified Ingredients: Eggplant 65%, Roasted Tomato Paste 16&, Extra Virgin Olive Oil 4%, Tomato Paste, Sunflower Oil, Garlic, Sugar, Salt, Spices. Just reading these features can make you buy our fried eggplant. It is delicious!', 'Gourmet212 Fried Eggplant 13.4 oz (6 Pack), Airtight Tin, Canned, Stainless Steel, Kosher, and Halal Certified. Our product has a homemade taste like you just made it. You can consume fried eggplants cold or warm as you like. Fried eggplants are ready to serve and eat. It is Kosher and Halal Certified Ingredients: Eggplant 65%, Roasted Tomato Paste 16%, Extra Virgin Olive Oil 4%, Tomato Paste, Sunflower Oil, Garlic, Sugar, Salt, Spices.', 'Gourmet212', 'https://i5.walmartimages.com/asr/a428a642-e76f-4e23-adac-d421e66b917a.7128eb4578d328329dc7d8889ab326bf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a428a642-e76f-4e23-adac-d421e66b917a.7128eb4578d328329dc7d8889ab326bf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a428a642-e76f-4e23-adac-d421e66b917a.7128eb4578d328329dc7d8889ab326bf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (553373599, 'Watermelon Seedless', 4.48, '400094407721', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (553575932, 'Gourmet212 Stuffed Cabbage Leaves 14.11oz., 12 Pack', 87.95, '191822005493', 'You might have loved cabbage. In fact, you might have searched ?cabbage rolls near me? or where can I buy cabbage rolls? on the Internet before; now, you are at the right place to buy some stuffed cabbage leaves. Stuffed cabbage leaves are a very popular dish in Turkey. They can be prepared with both olive oil and ground meat. To be able to offer you a vegan dish, we prefer to make it with olive oil. It is ready to serve so you can open and immediately serve the stuffed cabbage leaves to your guests. Also, you can take it with you to the workplace and enjoy this cheap and healthy meal during your lunch break. You can buy our product in inner peace because of the reasons given below: It is ready to serve It is prepared with extra virgin olive oil It is all natural It is Kosher Certified It is Halal Certified Ingredients: Cabbage 34,6%, Onion 26%, Rice 21,7%, Extra virgin olive oil 5%, Sunflower oil, Tomato paste 3%, Pepper Paste, Spice mix (mint, black pepper, dill, parsley), Salt, Water, Acidity Regulator (Citric acid). Enjoy the healthy stuffed cabbage leaves. Bon appetite!', 'Gourmet212 Stuffed Cabbage Leaves 14.11oz (Pack of 12), Fresh, Vegetable Preserved in Airtight Stainless Steel Tin Canned. The stuffed cabbage leaves are highly appreciated in Turkey. You can make them with olive oil and minced meat. It is all-natural and prepared with extra virgin olive oil. It is Kosher and Halal Certified. Ingredients: Rice 21.7%, Cabbage 34, 6%, Onion 26%, Extra virgin olive oil 5%, Tomato paste 3%, Sunflower oil, Pepper Paste, Spice mix (mint, black pepper, dill, parsley), Salt, Water, Acidity Regulator (Citric acid).', 'Gourmet212', 'https://i5.walmartimages.com/asr/82b23237-0eb2-4671-b09e-f4e6741d9b67.8d6eb397a252b72f64fc0351454bd612.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/82b23237-0eb2-4671-b09e-f4e6741d9b67.8d6eb397a252b72f64fc0351454bd612.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/82b23237-0eb2-4671-b09e-f4e6741d9b67.8d6eb397a252b72f64fc0351454bd612.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (553812743, 'Fresh Yellow Honey Mango, 1.5 lb Bag', 2.88, '810017700912', 'Treat yourself to a burst of tropical goodness when you bring home a bag of Yellow Honey Mangos. Mangoes boast a deliciously sweet fragrance and juicy flavor that is sure to wake up your taste buds. They are packed with over 20 vitamins and minerals including A and C, making them not only scrumptious but also a healthy treat. They can be used for everything from salads and smoothies to fresh salsas and luscious desserts. For the best experience, these mangos should be cut in half, sliced while in the peel and then scooped out. Bring home a bag of Yellow Honey Mangos today.', 'Deliciously fresh, sweet and juicy. Packed with sweet tropical flavor. Makes a healthy snack.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/38a39a5b-0cd9-41ec-9064-3303af2fa44f.44cc8da409d8c6ce44ed4297b789b693.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/38a39a5b-0cd9-41ec-9064-3303af2fa44f.44cc8da409d8c6ce44ed4297b789b693.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/38a39a5b-0cd9-41ec-9064-3303af2fa44f.44cc8da409d8c6ce44ed4297b789b693.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (554188011, 'Services Reduced Program Dept 94', 0.01, '251875000002', 'short description is not available', 'Services Reduced Program Dept 94', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (554581596, 'Bowery Farming Crispy Leaf Lettuce Salad, 4 oz Clam Shell, Fresh Salad Lettuce', 2.98, '851536007397', 'For those who crave a crunch, look no further. Our crispy leaf lettuce salad does it all: crispness with fresh frills for a perfect green that?ll take center stage in any salad or dish. Every Bowery leaf is grown and handled with care, without pesticides. Bowery\'s smart farms use less water and create less waste on less land. All Bowery produce salad is freshly harvested, picked at peak freshness 365 days a year, and available on shelf in just a few days.', 'Produce grown smarter for better flavor: less wasteful, more tasteful. Vertically Grown Fresher Longer Zero-Pesticide Greens No Need to Wash Bowery Farming Salad Leafy Greens', 'Bowery Farming', 'https://i5.walmartimages.com/asr/48eec4fb-0673-46b8-86e0-ca4aec671897.245ef5cc9007e635e06ce5d02cefe466.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48eec4fb-0673-46b8-86e0-ca4aec671897.245ef5cc9007e635e06ce5d02cefe466.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48eec4fb-0673-46b8-86e0-ca4aec671897.245ef5cc9007e635e06ce5d02cefe466.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (554666574, 'Fresh Red Seedless Grapes', 2.48, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (554843014, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094346143', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (554977611, '200pc On Swt 3# Gr', 788, '405532639610', 'short description is not available', '200pc On Swt 3# Gr', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (555521987, 'Red Delicious Apples Bulk', 1.38, 'deleted_736264040161', 'short description is not available', 'Red Delicious Apples Bulk', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/9728649b-4cb1-4280-bff6-85c15b034516_1.997f3b5f09708de3192ebadb3982c0b5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9728649b-4cb1-4280-bff6-85c15b034516_1.997f3b5f09708de3192ebadb3982c0b5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9728649b-4cb1-4280-bff6-85c15b034516_1.997f3b5f09708de3192ebadb3982c0b5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (555542616, 'Spice World Minced Ginger 4 oz', 2.7, '070969000045', 'Ginger adds a nice, undeniable flavor to your cooking—and Spice World has made it convenient as well, with our Ready-to-Use Minced Ginger. Simply add a spoonful of perfectly minced ginger to your dish. Nobody will believe it’s not fresh. And because our Ready-to-Use Minced Ginger comes in a jar, it’ll keep longer than fresh ginger.', 'No sodium Non-GMO Kosher', 'Spice World', 'https://i5.walmartimages.com/asr/39ab514a-b5c4-4c40-bbe9-60836490152c.016401576b3506a2a18820bf2b22938a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39ab514a-b5c4-4c40-bbe9-60836490152c.016401576b3506a2a18820bf2b22938a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39ab514a-b5c4-4c40-bbe9-60836490152c.016401576b3506a2a18820bf2b22938a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (555660764, 'Fresh Organic Sweet Potatoes, 3 Count Tray', 6.34, '819614010288', 'Create something wholesome and delicious with these Fresh Organic Sweet Potatoes. Sometimes referred to as yams, these versatile fresh produce vegetables can be used multiple ways: to make savory sides or sweet treats. Try them roasted or baked for a tasty addition to any dish. You could also use them to make seasoned sweet potato fries or a flavorful hummus dip for your next party. If you want to satisfy your sweet tooth, try them in a traditional sweet potato casserole or use them to make sweet potato and brown sugar ice cream. The mouthwatering possibilities are endless with this hearty vegetable. Add something amazing to your meals with these Organic Sweet Potatoes.', 'Fresh Organic Sweet Potatoes, 3 Count Tray Wholesome, versatile, and delicious Ideal ingredient for a variety of dishes Make seasoned sweet potato fries or a flavorful hummus dip Use them for a sweet potato casserole or sweet potato and brown sugar ice cream USDA organic Packaged in a plastic tray', 'Fresh Produce', 'https://i5.walmartimages.com/asr/096811c6-50c5-4b6b-8269-4d3dcf8fbff8.a8ff0b7331bd9bc03a94eb801aadec1e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/096811c6-50c5-4b6b-8269-4d3dcf8fbff8.a8ff0b7331bd9bc03a94eb801aadec1e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/096811c6-50c5-4b6b-8269-4d3dcf8fbff8.a8ff0b7331bd9bc03a94eb801aadec1e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (555872095, 'Freshness Guaranteed Vegetables With Guac Snack Cup', 2.98, '030223028314', 'short description is not available', 'Freshness Guaranteed Vegetables With Guac Snack Cup', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (556099499, 'California Grown Peaches, per Pound', 1.58, '400094008737', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (556596551, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094274538', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (557181732, 'Mann Packing Manns Culinary Cuts Brussels Sprouts, 9 oz', 2.98, '716519067013', 'Brussels Sprouts, Shaved, Culinary Cuts, bag 9 OZ Washed and ready to eat. Steam in bag. Microwave ready. Three generations. Est. 1939. Mann\'s Family Favorites: Farming has been a family business for three generations. We are dedicated to providing the highest quality and freshest produce. Gluten free. For information contact us: Mann\'s Customer Service, PO Box 690, Salinas, CA 93902 USA. CulinaryCutsClub.com. Product of Mexico. Keep refrigerated. Perishable. Healthy cooking made easy! Steaming is a healthy and convenient way to prepare fresh vegetables. Our innovative packaging allows you to steam these veggies in your microwave. Do not pierce bag. Place this side up, in microwave and heat for 2 minutes. Remove carefully as bag will be warm to the touch. Enjoy! Inspirational Ideas: Try the delicious Shaved Brussels Sprouts recipes from the front of our bag by visiting CulinaryCutsClub.com. Enjoy roasted Shaved Brussels Sprouts as a crispy, flavorful topping on rice, pasta, soup or salad. Saute Shaved Brussels Sprouts with sesame oil, ginger, garlic and soy sauce for an easy Asian side dish. 9 oz (255 g) Salinas, CA 93901 800-285-1002', 'Brussels Sprouts, Shaved Washed and ready to eat. Steam in bag. Microwave ready. Three generations. Est. 1939. Mann\'s Family Favorites: Farming has been a family business for three generations. We are dedicated to providing the highest quality and freshest produce. Gluten free. For information contact us: Mann\'s Customer Service, PO Box 690, Salinas, CA 93902 USA. CulinaryCutsClub.com. Product of Mexico.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fc39c939-b9e7-465c-9251-b01409214822.4a05515d7f0dbe10039ac91c6c5f6a17.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fc39c939-b9e7-465c-9251-b01409214822.4a05515d7f0dbe10039ac91c6c5f6a17.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fc39c939-b9e7-465c-9251-b01409214822.4a05515d7f0dbe10039ac91c6c5f6a17.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (557391433, 'Gourmet212 Grilled Artichokes Marinated In Oil 7.05oz', 24.95, '191822005066', 'Aegean?s olive oil dishes are very famous. Taste of Mediterranean and light color artichokes will give with tasty broad bean or as a mezze The light color artichoke will give you Mediterranean taste with broad beans or serve as mezze. It is being served with potatoes, green beans and carrots at most fish restaurants.', 'Gourmet212 Grilled Artichokes Marinated In Oil 7.05oz, Airtight Glass Jar, Kosher, and Halal Certified, Fresh Grilled Artichokes, being served with potatoes, green beans, and carrots at most fish restaurants. Store in Cold and Dry places, away from direct sunlight. Keep refrigerated after opening. Amount per serving Calories 30.', 'Gourmet212', 'https://i5.walmartimages.com/asr/78f145c6-4f59-45a0-8534-f5cb529886f4.e44faf737394b7cb230292618b3d1ec6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/78f145c6-4f59-45a0-8534-f5cb529886f4.e44faf737394b7cb230292618b3d1ec6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/78f145c6-4f59-45a0-8534-f5cb529886f4.e44faf737394b7cb230292618b3d1ec6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (557517234, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094680773', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (557689776, 'Fresh Cherry on the Vine Tomato, 9 oz Package', 4.98, '898859002074', 'Fresh Cherry on the Vine Tomatoes are the perfect cooking tomato. Because of their notable flavor and thicker skin, they are a versatile tomato option that\'s fit for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, cherry on the vine tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with these fresh Cherry on the Vine Tomatoes.', 'Wholesome, fresh, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/199a3092-34b2-400d-a70a-0e4a358eed0b.b3329ae13c215dc46addae50f72eabcd.webp?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/199a3092-34b2-400d-a70a-0e4a358eed0b.b3329ae13c215dc46addae50f72eabcd.webp?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/199a3092-34b2-400d-a70a-0e4a358eed0b.b3329ae13c215dc46addae50f72eabcd.webp?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (557839121, 'Services Reduced Program Dept 94', 0.01, '251908000009', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (557843539, 'Green Giant Mighty Medley Creamer Potato, 1.5 Lb.', 3.48, 'deleted_605806003783', 'Green Giant Mighty Medley Creamer Potato, 1.5 Lb.', 'Mighty Medley Green Giant Creamer Potato', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (557866898, '180pc Apl Granny 3#', 709.2, '405665851910', 'short description is not available', '180pc Apl Granny 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (558227072, 'Pepper Mini Sweet', 3.18, 'deleted_626074000212', 'short description is not available', 'Pepper Mini Sweet', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (558931994, 'Fresh Medley Tomatoes, 10oz', 2.5, '882035501277', 'Bring the fresh, delicious taste of Fresh Medley Tomatoes to your kitchen. These tomatoes are greenhouse grown giving them sweet, juicy flavor in every bite. These multi-colored medley tomatoes come in hues of orange, red and yellow, which adds a nice bit of vibrant color to your meals. Use them to top salads at lunch or dinner, mix them into pasta salads, or add them to omelets for a fresh bite. They are bite sized, which makes them easy to enjoy as a snack, if desired, and there\'s plenty to use in all your favorite recipes. Get creative in the kitchen with Nature Fresh Farms Medley Tomatoes today.', 'Fresh Medley Grape Tomato, 10 oz Package Colorful blend of fresh, high-flavor snacking tomatoes Great for Salads Great for snacking', 'Nature Fresh Farms', 'https://i5.walmartimages.com/asr/011fa0ce-3c53-4494-b3b4-2798de024da1.3be0ad53eb27c42cc0f6ac8f4d84c199.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/011fa0ce-3c53-4494-b3b4-2798de024da1.3be0ad53eb27c42cc0f6ac8f4d84c199.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/011fa0ce-3c53-4494-b3b4-2798de024da1.3be0ad53eb27c42cc0f6ac8f4d84c199.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (559013577, 'Crisply Sweet Greens Mixed Salad, 5 oz', 3.48, '857951008001', 'Crisply Sweet Greens Mixed Salad, 5 Oz.', 'Crisply Sweet Greens Mixed Salad, 5 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ad19d6eb-c0e2-4b11-8bea-139a3b86575e_3.c04941e04e24c7f4b451b51558cca917.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ad19d6eb-c0e2-4b11-8bea-139a3b86575e_3.c04941e04e24c7f4b451b51558cca917.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ad19d6eb-c0e2-4b11-8bea-139a3b86575e_3.c04941e04e24c7f4b451b51558cca917.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (559021789, 'Org Cucumbers, 1 Each', 2.96, 'deleted_711069008516', 'Org Cucumbers, 1 Each', 'Organic Cucumber', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/0a9ff4aa-e99b-4009-a952-e2cc8de33983_1.07f58edf4a7ee11c8159fe1e5ee9baf7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a9ff4aa-e99b-4009-a952-e2cc8de33983_1.07f58edf4a7ee11c8159fe1e5ee9baf7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a9ff4aa-e99b-4009-a952-e2cc8de33983_1.07f58edf4a7ee11c8159fe1e5ee9baf7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (559030886, 'Red Potatoes 5 Lb Bag', 5.77, 'deleted_851231005018', 'short description is not available', 'Red Potatoes 5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (559099231, 'Dark Sweet Cherries, Half Pint', 2.98, '887434320207', 'Dark Sweet Cherries, Half Pint', 'Dark Sweet Cherries 1/2 Dry Pint', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7a0b952e-a04b-4887-b3bf-1323704d01d1.c05b2e0ab969d083309c04b90a7b7ee7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a0b952e-a04b-4887-b3bf-1323704d01d1.c05b2e0ab969d083309c04b90a7b7ee7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a0b952e-a04b-4887-b3bf-1323704d01d1.c05b2e0ab969d083309c04b90a7b7ee7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (559113588, 'Fresh Mandarin Dekopon, 2 lb Bag', 5.74, '725422000086', 'This Fresh Mandarin Dekopon fruit is effortlessly peelable and seedless, making it accessible for all to enjoy. Bursting with a delightful sweetness and abundant in juice, these fruits are not only delicious but also provide a generous supply of dietary fiber, calcium, and vitamin C. Whether enjoyed on their own or combined with nuts or layered in yogurt, this Fresh Mandarin Dekopon offers a nourishing and delectable treat.', 'Fresh Mandarin Dekopon, 2 lb Bag Seedless and abundant in juice Easy to peel Intense sweetness Nourishing and delectable treat Great for the whole family', 'Unbranded', 'https://i5.walmartimages.com/asr/504ff3bb-bbdb-4add-b73d-06c328e335d6.ebe67b62082b69b5a9ce55291a94f043.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/504ff3bb-bbdb-4add-b73d-06c328e335d6.ebe67b62082b69b5a9ce55291a94f043.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/504ff3bb-bbdb-4add-b73d-06c328e335d6.ebe67b62082b69b5a9ce55291a94f043.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (559358463, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094138014', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (559375589, 'Organic Red Cherries, Half Pint', 2.98, '888289403930', 'Organic Red Cherries, Half Pint', 'Organic Red Cherries 1/2 Dry Pint', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (559573688, 'Corn Husk, 8 oz', 5.48, 'deleted_883616004309', 'corn husk', 'Corn Husk 8 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/81700b7c-7187-4fd1-b808-c75c996bd523_1.455aafeb071e5d4d6939b5a2ca2e7812.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/81700b7c-7187-4fd1-b808-c75c996bd523_1.455aafeb071e5d4d6939b5a2ca2e7812.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/81700b7c-7187-4fd1-b808-c75c996bd523_1.455aafeb071e5d4d6939b5a2ca2e7812.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (559754839, 'Freshness Guaranteed Fruit Medley Blend Bowl', 7.97, '263037000003', 'Freshness Guaranteed Fruit Medley Blend in a Plastic Bowl. This delicious Fruit Medley Blend is ready to eat and a healthy snack.', 'Freshness Guaranteed Fruit Medley Blend Bowl', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (559886303, 'Broccoli Florets, 12 oz', 2.68, 'deleted_854026006269', 'short description is not available', 'Broccoli Florets 12 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (559929266, 'Watermelon Seedless', 4.98, '400094237861', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (560162709, 'Fresh Garlic Mesh 10 count (15 units/case)', 7.6, '651973539112', 'Fresh Garlic Mesh 10 count (15 units/case)', 'Fresh garlic mesh, also known as garlic netting, is a practical tool for storing garlic bulbs Garlic products, whether fresh, peeled, or in paste form, offer a range of benefits that can enhance both your culinary creations and your health TIO PACO FRESH PRODUCE is a family business that has been importaing and distributing garlic to its valued customers across the country for over 20 years.', 'Tio Paco', 'https://i5.walmartimages.com/asr/e71a3a8f-1c35-452f-955f-640b3fc6247f.3a5843b82af6ddc7f432fb2116af9d54.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e71a3a8f-1c35-452f-955f-640b3fc6247f.3a5843b82af6ddc7f432fb2116af9d54.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e71a3a8f-1c35-452f-955f-640b3fc6247f.3a5843b82af6ddc7f432fb2116af9d54.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (560309953, 'Freshness Guaranteed Sliced White Mushrooms 8oz', 2.08, 'deleted_699058820069', 'short description is not available', 'Freshness Guaranteed Sliced White Mushrooms 8oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (560624166, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094274811', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (560815143, 'Tasteful Selections Tasteful Selection Hney Gld Mesh Org', 4.88, '826088583101', 'Produce', 'Potatoes, 2-Bite, Honey Gold US No. 1 (3/4 in min dia). USDA Organic. Certified Organic by CCOF. Field to fork fresh in every bite! Signature flavor. We appreciate your feedback: feedback(at)rpespud.com. For nutritional information, food pairing ideas and recipes please visit: tastefulselections.com/nutrition. Produce of USA.', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/75f25f00-a72c-4c31-9fe7-7bc7c2a544dd.c5997d13ee37a0ecc8fc3b8db1eedbbe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75f25f00-a72c-4c31-9fe7-7bc7c2a544dd.c5997d13ee37a0ecc8fc3b8db1eedbbe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75f25f00-a72c-4c31-9fe7-7bc7c2a544dd.c5997d13ee37a0ecc8fc3b8db1eedbbe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (560877417, '120pc Pto Ykn 5# Ca', 596.4, '405507399815', 'short description is not available', '120pc Pto Ykn 5# Ca', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (560989057, 'Fresh Black Seedless Grapes', 1.98, '', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (561637681, 'Marketside Organic Fuji Apples, 2lb Bag', 5.5, 'deleted_741839004301', 'There are lots of reasons why the Marketside Organic Fuji Apple is a fan favorite. The versatility of Fuji apples makes them a great choice for many different occasions. Developed by researches in Fujisaki, Japan in the 1930’s, Fuji apples are crisp and very juicy with a sugary-sweet flavor. Fuji apples store well, which makes them a great treat all year long! Use them for snacking, in salads, in fruit salads, and for baking; the Fuji apple is a great choice for any occasion! Pick up some Marketside Organic Fuji Apples today and have a handy snack you can feel good about. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Fuji Apples, 2lb Bag: One of the most popular apple varieties Crisp and juicy Use for snacking, salads, or for baking Organic', 'Marketside', 'https://i5.walmartimages.com/asr/11921682-7513-417d-b4e4-2056e21adf9e.d0b0b570aaa043c16dffcd74280a3147.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/11921682-7513-417d-b4e4-2056e21adf9e.d0b0b570aaa043c16dffcd74280a3147.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/11921682-7513-417d-b4e4-2056e21adf9e.d0b0b570aaa043c16dffcd74280a3147.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (561813433, 'Organic Pitted Deglet Noor Dates 19.8LB Sun-Dried/Certified NON-GMO/KOSHER/VEGAN', 69, '850023294043', 'These are the renowned authentic Algerian Deglet Noor Dates. They are blondish brown, of an amber hue. USDA Organic, taken straight from the Palm Tree into your hands. Chop chop and throw some in your salad, smoothie, pre-workout shake, or blend them with your cake mix, or eat them whole for a healthy nutritious snack. They are naturally sweet, packed with fiber, vitamins and minerals. We are passionate about these dates and we would really love for you to try them! 100% Certified USDA Organic – Our farms and plants are certified organic by the USDA. Our products are graded by USDA and approved by FDA Deglet Noor- a firmer date than Medjool Premium taste, color, and texture- Our dates have a translucent amber color and a unique mild caramel, honey flavor that is light sweet Freshly hand-picked- no additives, no preservatives, all you get is dates Can be eaten whole, added to cereal as a natural sweetener, a topping for salads, or made into delicious appetizers, baked goods, and smoothies', '19.8 lb bulk box of premium organic pitted Deglet Noor dates Naturally sweet with a smooth, caramel-like flavor Ready to use for baking, blending, meal prep, or food production No added sugar, no preservatives, nothing artificial USDA Organic, vegan, gluten-free, non-GMO, and kosher certified', 'Alya Foods', 'https://i5.walmartimages.com/asr/03fe3f7f-ece7-4f93-9970-9c9111a9cf6a.962bb96d15dab014fae7c2471c380cfc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/03fe3f7f-ece7-4f93-9970-9c9111a9cf6a.962bb96d15dab014fae7c2471c380cfc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/03fe3f7f-ece7-4f93-9970-9c9111a9cf6a.962bb96d15dab014fae7c2471c380cfc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (562159250, 'Cocktail Tomato, 1 lb Package', 2.98, 'deleted_057830020753', 'Holding the ideal balance of sweetness and acidity, it\'s easy to see why Cocktail Tomatoes are called the tomato lover\'s tomato. Cocktail tomatoes are small, making them an ideal choice for appetizers to pair with your everyday meals and for when you\'re entertaining guests. You can combine these tasty little tomatoes with fresh mozzarella and basil drizzled with olive oil or slice them up and add them to a freshly tossed salad. If you\'re feeling something classic, you can always cut one up to add that fresh tomato taste to a sandwich or dice up a few to make a delightful pizza topping. Plus, cocktail tomatoes are packed with nutrients, including vitamins A, B6, B12, C, D, E, K, phosphorous, magnesium and zinc, so you can feel good about adding some extra flavor to your meals. Be sure to add Cocktail Tomatoes to your inventory of fresh ingredients today.', 'Cocktail Tomato, 1 lb Package: The tomato lover\'s tomato Small size is ideal for salads and appetizers Ideal ingredient for a variety of dishes These European-style whole tomatoes are ideal all year long Add to party trays or school lunches Delicious and nutritious 16-ounce package of cocktail tomatoes To maintain sweetness, do not refrigerate', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (562888478, 'Fresh Green Seedless Grapes', 3.27, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (563300058, 'Lime 3 Count Package', 1.88, '820402249261', 'short description is not available', 'Lime 3 Count Package', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (563579151, 'Bulk Persian Limes', 0.28, 'deleted_744430275668', 'short description is not available', 'Bulk Persian Limes', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (564427135, 'Services Reduced Program Dept 94', 0.01, '251745000002', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (564539568, 'Cocktail Tomatoes', 3.48, 'deleted_699058231452', 'short description is not available', 'Cocktail Tomatoes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (564636574, '100pc Pto Rst 10# Ff', 454, '405500345048', 'short description is not available', '100pc Pto Rst 10# Ff', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (564708343, 'Organic Whole Brown Mushrooms 8oz', 3.12, 'deleted_699058820144', 'short description is not available', 'Organic Whole Brown Mushrooms 8oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (565225468, 'Yellow Nectarin, Each', 2.48, 'deleted_896460002148', 'short description is not available', 'Fresh Grown Yellow Nectarines', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (565328636, 'Gala Apples 3 Lb Bag', 3.37, 'deleted_818679006250', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (565653257, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, 'deleted_400094127292', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (565971721, 'Watermelon Seedless', 4.48, '400094675052', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (566207308, 'Yellow Flesh Peaches, per Pound', 1.58, '400094233191', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (566373326, 'Fresh Black Seedless Grapes', 2.78, '', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/133f2a1c-08c9-4b30-b58e-8f2dff824974_2.3094c5be225d26e09693a9fe995cab5f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/133f2a1c-08c9-4b30-b58e-8f2dff824974_2.3094c5be225d26e09693a9fe995cab5f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/133f2a1c-08c9-4b30-b58e-8f2dff824974_2.3094c5be225d26e09693a9fe995cab5f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (567173346, 'Red Onions, 3 lb Bag', 1.78, '883616601027', 'Red Onions, 3 lb Bag', 'Red Onions 3 Lb Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/b25ed630-6588-4f8e-88e9-b5653b539142.95023cb1bacef011578da0274a08d38f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b25ed630-6588-4f8e-88e9-b5653b539142.95023cb1bacef011578da0274a08d38f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b25ed630-6588-4f8e-88e9-b5653b539142.95023cb1bacef011578da0274a08d38f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (567749878, 'Fresh Red Seedless Grapes', 2.48, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (567926690, 'Grape Tomato, 10 oz', 1.97, '042808001810', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Grape Tomatoes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (568035406, 'Fresh Stuffed Baby Bella Mushrooms, Fiesta Cheese Blend, 8.5 oz, 6 Count', 4.97, '070475657245', 'Fiesta Cheese Blend Stuffed Baby Bella Mushrooms are stuffed with a tasty combination of pepper jack cheese, queso fresco, queso Gallego cheese, dried tomatoes, bell peppers, onion, garlic, and jalapenos. These stuffed mushrooms are perfect for both grilling and baking and can even be cooked in the microwave. The stuffed caps are great as an appetizer or as a delicious side dish. Serve with tender New York strip steak and broccoli florets for an unforgettably delicious dinner the whole family will enjoy. They also offer nutritional benefits as they are a good source of dietary fiber, protein, calcium, and iron. Spice up your routine sides with Fiesta Cheese Blend Stuffed Baby Bella Mushrooms.', 'Stuffed Baby Bella Mushrooms, Fiesta Cheese Blend, 8.5 oz, 6 Count: Baby bella mushrooms stuffed with a tasty combination of pepper jack cheese, queso fresco, queso Gallego cheese, dried tomatoes, bell peppers, onion, garlic, and jalapenos Cooks in the tray Oven safe and microwavable tray Great as an appetizer or side item Good source of protein Net weight 8.5 oz', 'Giorgio', 'https://i5.walmartimages.com/asr/35bdfb87-0927-4eb5-b02d-fa506413afc7.cf63f3dd7221a6731d9b749574b64a19.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35bdfb87-0927-4eb5-b02d-fa506413afc7.cf63f3dd7221a6731d9b749574b64a19.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35bdfb87-0927-4eb5-b02d-fa506413afc7.cf63f3dd7221a6731d9b749574b64a19.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (568120857, 'Ruby Tango Red Mandarins, 26 Oz.', 4.98, '092148142223', 'Ruby Tango Red Mandarins, 26 Oz.', 'Ruby Tango Red Mandarins 26 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (568257574, 'Marketside BBQ Chopped Salad, 13.35 oz, Fresh', 3.63, '681131055918', 'short description is not available', 'Marketside BBQ Chopped Salad 13.35z', 'Marketside', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (568483752, 'Tom Grape Amarillo', 4.68, '882035500805', 'short description is not available', 'Tom Grape Amarillo', 'Unbranded', 'https://i5.walmartimages.com/asr/f7fb13df-12a4-495b-8acd-a733f00d6fa2.277d151a07a9b043187a223651b4f32f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7fb13df-12a4-495b-8acd-a733f00d6fa2.277d151a07a9b043187a223651b4f32f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7fb13df-12a4-495b-8acd-a733f00d6fa2.277d151a07a9b043187a223651b4f32f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (568692868, 'Organic Red Leaf Lettuce', 1.96, 'deleted_033383904115', '', '', 'Produce Electronic ID', 'https://i5.walmartimages.com/asr/727018b1-ec51-4b2f-a88f-821092caa6af_1.b4a4206e12ab30acefc64f5c83870c64.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/727018b1-ec51-4b2f-a88f-821092caa6af_1.b4a4206e12ab30acefc64f5c83870c64.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/727018b1-ec51-4b2f-a88f-821092caa6af_1.b4a4206e12ab30acefc64f5c83870c64.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (568716241, 'Fieldpack Unbranded Fresh Strawberries 1#', 2.98, '400094503690', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (568879446, 'Romaine Salad, 9 Oz.', 2.48, '030223011293', 'Romaine Salad, 9 Oz.', 'Sld Romaine Bag 9 Oz.', 'Taylor Farms', 'https://i5.walmartimages.com/asr/6dde1bd6-3513-42f2-aa62-497d445ed1ab.c1174f873db6c7512bd3f290714d6fa4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6dde1bd6-3513-42f2-aa62-497d445ed1ab.c1174f873db6c7512bd3f290714d6fa4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6dde1bd6-3513-42f2-aa62-497d445ed1ab.c1174f873db6c7512bd3f290714d6fa4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (568983695, 'Yellow Flesh Peaches, per Pound', 1.58, '400094250921', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (569036612, '240pc On Ylw 3# Ca', 465.6, '405555351193', 'short description is not available', '240pc On Ylw 3# Ca', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (569305188, 'Services Reduced Program Dept 94', 0.01, '252011000009', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (569757172, 'California Grown Peaches, per Pound', 1.58, '400094896938', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (569988995, 'CHERRY TOMATOES', 2.5, '711068535075', 'CHERRY TOMATOES', '', '', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (570058437, 'Plenty Greens Kale Crunch Salad Blend, 4.5 oz Clam Shell, Fresh', 2.48, '810567030682', 'short description is not available', 'Plenty Crunchy Salad 4oz', 'PLENTY', 'https://i5.walmartimages.com/asr/b544406f-8d9d-470c-9474-09b6567c8208.21727d9a6240b74368fc48fd3bc69ddb.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b544406f-8d9d-470c-9474-09b6567c8208.21727d9a6240b74368fc48fd3bc69ddb.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b544406f-8d9d-470c-9474-09b6567c8208.21727d9a6240b74368fc48fd3bc69ddb.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (570172611, 'Bowery Farming Baby Kale Mix Pesticide-Free Lettuce, Locally Grown Salad Greens, Non-GMO 4oz', 2.98, '851536007366', 'Baby Kale Mix has a hearty, sweet, and well-rounded flavor. It\'s great as a salad base and sauteed with your favorite veggies. Bowery Farming grows positively tasty, fresh produce in a cleaner, more sustainable way: in local, indoor smart farms. Every Bowery leaf is grown and handled with care, without pesticides. Bowery\'s smart farms use less water & create less waste on less land. Because Bowery\'s farms are local, you can trust that your produce is freshly harvested, picked at peak freshness 365 days a year, and available on shelf in just a few days.', 'Bowery Farming Baby Kale Mix Pesticide-Free, Locally Grown Salad Greens, 4oz: 100% Pesticide-free 100% Locally grown 100% Fully traceable Indoor-grown Protected Produce Clean & ready to eat Non-GMO Project Verified Recycled Packaging', 'Bowery Farming', 'https://i5.walmartimages.com/asr/83603b3c-ae21-4fd5-b019-28a34b5cf1d9.c7e1344ea4e14084644e5bb2313daa34.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/83603b3c-ae21-4fd5-b019-28a34b5cf1d9.c7e1344ea4e14084644e5bb2313daa34.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/83603b3c-ae21-4fd5-b019-28a34b5cf1d9.c7e1344ea4e14084644e5bb2313daa34.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (570562294, 'Mother Earth Products Freeze Dried Sliced Mushrooms, Quart Mylar', 15.35, '810919031855', 'Mother Earth Products Freeze Dried Sliced Mushrooms: a healthy & convenient addition to every area of your life without the headache: emergency preparedness, snacking, long and short term storage, traveling, everyday cooking, hiking, backpacking, spicing up your recipes, etc. use it now or later. Mother Earth Products Freeze Dried Mushrooms are made with real, Non-GMO Mushrooms, no additives or preservatives, & is kosher - a guilt-free, robust food that makes eating tasty & rewarding, without the hassle of weekly trips to the store or the worry of spoiling. It’s so delicious you won’t store it away and hope you never have to use it. Taste the Goodness of Mother Earth Products', '100% mushrooms; long term storage; short term storage; pantry; portable; convenient; nothing added; emergency preparedness; great flavor; easy to cook with; can eat straight from container without reconstituting', 'Mother Earth Products', 'https://i5.walmartimages.com/asr/7c11b790-3f7d-4af9-be82-fd40e0f0ce9f.89c4b2849db3bad2fa8e6cf4c9ddce52.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c11b790-3f7d-4af9-be82-fd40e0f0ce9f.89c4b2849db3bad2fa8e6cf4c9ddce52.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c11b790-3f7d-4af9-be82-fd40e0f0ce9f.89c4b2849db3bad2fa8e6cf4c9ddce52.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (570892406, 'Yellow Flesh Peaches, per Pound', 1.58, '400094711736', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (571068728, 'Guava 16/14oz', 3.48, '851237004435', 'short description is not available', 'Guava 16/14oz', 'Unbranded', 'https://i5.walmartimages.com/asr/ccf72062-ac47-479f-aff8-5c896f58a0b2.7380ff0f22f71714e44a86b62511df37.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ccf72062-ac47-479f-aff8-5c896f58a0b2.7380ff0f22f71714e44a86b62511df37.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ccf72062-ac47-479f-aff8-5c896f58a0b2.7380ff0f22f71714e44a86b62511df37.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (571251131, 'Fresh Starfruit, Each', 1.48, '000000042567', 'Fresh Starfruit, also known as carambola, gets its name from its five-pointed shape, which yields slices of juicy, lush translucent stars when sliced. The fruit ripens to a bright, light yellow and begins to exude a light, tropical aroma. Browning on the tips of the ridges is simply a sign of ripeness. Sweet and mild, the flavor compares to plums, grapes, pineapple and pear, with notes of lemon. Enjoy for breakfast, lunch, dinner or dessert. Make a star fruit upside-down cake or slice for an elegant star fruit mosaic atop a frosted cake or glazed tart. For dinner, this tropical fruit also pairs well with seafood. Starfruit\'s pale yellow, juicy flesh contains a few small, flat seeds and has a distinctly tropical flavor. Except for the seeds, the entire starfruit is edible. The culinary possibilities are endless with Fresh Starfruit.', 'Fresh tropical Starfruit Delicious on its own or in a variety of recipes Keep refrigerated in a paper or plastic bag for up to one week Wash well before slicing Slices may also be frozen for later use Low in fat, saturated fat, cholesterol, and sodium Good source of fiber High in vitamin C, pantothenic acid, and copper Also known as Carambola and Five Finger Fruit around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1a2ccef0-a235-4666-89a4-a7b8efc7007e.fa905b18c5c95bf9e2ff40855595f99d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a2ccef0-a235-4666-89a4-a7b8efc7007e.fa905b18c5c95bf9e2ff40855595f99d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a2ccef0-a235-4666-89a4-a7b8efc7007e.fa905b18c5c95bf9e2ff40855595f99d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (571543228, 'Fresh Sweet Washington Rainier Cherries', 5.98, '888289402193', 'short description is not available', 'Fresh Sweet Washington Rainier Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (571789335, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '405521536678', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (571915678, 'Services Reduced Program Dept 94', 0.01, '252012000008', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (571915708, 'Yellow Flesh Peaches, per Pound', 1.58, '400094918630', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (571966917, 'Freshness Guaranteed Berry Blend Small', 8.97, '262822000006', 'Experience a burst of summertime goodness with this delicious Freshness Guaranteed Berry Blend. This pre-cut Berry Blend is juicy, sweet, and refreshing to the taste. In addition, the Berry Blend is a great natural source of vitamins A and C. Carry them with you and eat them straight out of the tray any time you want, at home, or on-the-go. Pair them with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use them as a naturally sweet ingredient in a fruit salad. Add some fresh fruit to your daily menu with this Freshness Guaranteed Berry Blend.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Berry Blend Small', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (572036823, 'Freshness Guaranteed Fresh Red Seedless Grapes', 2.98, '', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (572161311, 'Veggie Tray 20oz', 15.64, '045009891341', '20oz Veggie tray', 'Veggie Tray 20oz', 'Unbranded', 'https://i5.walmartimages.com/asr/c63399d6-418a-41a7-8c41-817d92ba46d4.62528572541331a6b097ca0fb681a5f7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c63399d6-418a-41a7-8c41-817d92ba46d4.62528572541331a6b097ca0fb681a5f7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c63399d6-418a-41a7-8c41-817d92ba46d4.62528572541331a6b097ca0fb681a5f7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (572749857, 'Fresh Red Seedless Grapes, per lb', 1.98, '895321002129', 'short description is not available', 'Fresh Red Seedless Grapes, per lb', '', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (572797917, 'Freshness Guaranteed Fresh Red Seedless Grapes', 1.98, '', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (572855704, 'Watermelon Seedless', 4.48, '400094374399', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (573037505, 'Miravalle Corn Husk, 8 oz Package', 8.88, '712810008151', 'Corn husks are thin, papery, and have a fibrous texture, also known as hojas de maíz, are a traditional and important ingredient used for preparing many dishes. They are most commonly used to make tamales, a popular dish made of corn masa dough filled with various meats, vegetables, or cheese, then wrapped in a corn husk and steamed. They can be used to wrap and steam food, imparting a subtle corn flavor and aroma. They are also an excellent natural alternative to aluminum foil or parchment paper for wrapping food for grilling or baking.', 'Elevate your culinary skills by using Corn Husks (hojas de maíz) to create authentic tamales, with the added bonus of a subtle corn flavor and aroma Choose an eco-friendly and natural alternative to aluminum foil or parchment paper by using Corn Husks to wrap and steam your favorite dishes Enjoy versatile Corn Husks for grilling or baking, as they not only provide a unique presentation but also keep your food moist and flavorful.', 'Miravalle', 'https://i5.walmartimages.com/asr/4c27a0a6-1578-4063-bc9b-bfe9f36b9d2d_1.7f4ea5b66e8d9752c0243467541339db.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4c27a0a6-1578-4063-bc9b-bfe9f36b9d2d_1.7f4ea5b66e8d9752c0243467541339db.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4c27a0a6-1578-4063-bc9b-bfe9f36b9d2d_1.7f4ea5b66e8d9752c0243467541339db.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (573172735, '(6 pack) (6 Pack) Gefen Organic Vacuum Pack Beets, 17.6 Oz', 18.78, '710069011014', 'Salad ready', 'Gefen Organic Vacuum Pack Beets, 17.6 Oz', 'Gefen', 'https://i5.walmartimages.com/asr/0a9405f5-63eb-4849-9de2-debcc156ac9f_1.c00291e6af5df99f138f828e0ef756a8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a9405f5-63eb-4849-9de2-debcc156ac9f_1.c00291e6af5df99f138f828e0ef756a8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a9405f5-63eb-4849-9de2-debcc156ac9f_1.c00291e6af5df99f138f828e0ef756a8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (574451647, 'Clementines, 1.5 lb', 2.14, '092148142124', 'short description is not available', 'Clementines, 1.5 lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5239bd74-c85d-4d08-b8da-c3bc7ef938c8.52a18c9d52147dd9c6402004a243dddd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5239bd74-c85d-4d08-b8da-c3bc7ef938c8.52a18c9d52147dd9c6402004a243dddd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5239bd74-c85d-4d08-b8da-c3bc7ef938c8.52a18c9d52147dd9c6402004a243dddd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (575190664, 'Services Reduced Program Dept 94', 0.01, '251976000000', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (575313443, 'Yellow Flesh Peaches, per Pound', 1.58, '400094343760', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (575550143, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094006283', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (575639399, '180pc Apple Gala 3#', 561.6, '405665855123', 'short description is not available', '180pc Apple Gala 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (575671694, 'Okra, 1 Lb.', 1.06, '000000046558', 'Okra, 1 Lb.', 'Okra, per lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d99c6334-3cce-4294-9dc0-a8244200c5b3.15b6a5f14e80be0537603b2fdc30d73d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d99c6334-3cce-4294-9dc0-a8244200c5b3.15b6a5f14e80be0537603b2fdc30d73d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d99c6334-3cce-4294-9dc0-a8244200c5b3.15b6a5f14e80be0537603b2fdc30d73d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (576134637, 'Gaea Marinated Carrots In Pouch 2.6oz', 2.47, '607959701370', 'Real carrot bites marinated in Gaea extra virgin olive oil & lemon. Vegan. Gluten free. A low calorie food. No preservatives. Non GMO Project verified. nongmoproject.org. 1/2 Serving of veggies. Nothing artificial. Liquid free. Crisp & tasty. Lightly pickled, bite-sized carrots marinated in Gaea extra virgin olive oil and lemon. A better for you, on-the-go, TSA approved snack brought to you from the makers of the Olive Snack. www.gaeaolive.com. nongmoproject.org. USA Customer Service Hotline: 1-844-883-GAEA, www.gaeaolive.com. Product of Greece.', 'Gaea Marinated Carrots In Pouch 2.6oz', 'Gaea', 'https://i5.walmartimages.com/asr/6ec949a3-345b-4b77-841a-68a8faed1edf.04259c4124a76832d8cd6445f54ef1e6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6ec949a3-345b-4b77-841a-68a8faed1edf.04259c4124a76832d8cd6445f54ef1e6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6ec949a3-345b-4b77-841a-68a8faed1edf.04259c4124a76832d8cd6445f54ef1e6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (576172782, 'Watermelon Seedless', 4.48, '400094985700', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (576285671, 'Marketside Vegetable Tray with Buttermilk Ranch Dip, 40 oz', 9.98, '681131388665', 'This Marketside Vegetable Tray is ideal for those who are short on time, yet want something that\'s flavorful and nutritious. It contains a healthy blend of fresh cut vegetables including baby carrots, grape tomatoes, celery, broccoli florets, sugar snap peas and sweet peppers. It also comes with a separate container of buttermilk ranch dip. This large vegetable tray is ideal for social gatherings, parties, game day, backyard barbecues and more. That\'s how Walmart helps you bring the best quality fresh foods to your table every day. Fresh, wholesome, guaranteed delicious.Marketside Vegetable Tray with Buttermilk Ranch Dip, 40 oz:', 'Fresh cut vegetables Hand-selected produce and classic buttermilk ranch dip Marketside: fresh ideas and honest ingredients Includes: baby carrots, grape tomatoes, broccoli florets, celery, sugar snap peas, sweet peppers Fresh vegetable tray, 40 oz', 'Marketside', 'https://i5.walmartimages.com/asr/48203257-da48-4501-be9c-3ebf900455e5.36f54f0fa35d27184477d907a92f7099.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48203257-da48-4501-be9c-3ebf900455e5.36f54f0fa35d27184477d907a92f7099.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48203257-da48-4501-be9c-3ebf900455e5.36f54f0fa35d27184477d907a92f7099.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (576361612, '100pc Pto Rst 10# Bm', 444, '405522977968', 'short description is not available', '100pc Pto Rst 10# Bm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (576735059, 'Green Seedless Grapes, per lb', 2.88, '405501060643', 'short description is not available', 'Green Seedless Grapes, per lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e3493b51-d859-4499-8a4f-985e8a281558.ec2345597c4287be07085da9c7d01d62.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3493b51-d859-4499-8a4f-985e8a281558.ec2345597c4287be07085da9c7d01d62.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3493b51-d859-4499-8a4f-985e8a281558.ec2345597c4287be07085da9c7d01d62.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (577395459, 'Habanero Peppers', 2.97, 'deleted_812181022081', 'short description is not available', 'Habanero Peppers', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (577445194, 'Fresh Green Seedless Grapes', 30, 'deleted_810232031051', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (577880017, 'Fresh Black Seedless Grapes, Bag (2.25 lbs/Bag Est.)', 3.97, '405873138360', 'Indulge in the freshness of our juicy black grapes. Carefully handpicked, each grape is carefully inspected to ensure a whole and delectable fruit. Packed in a convenient bag, our grapes are perfect for a light and healthy snack. Savor the sweetness of every bite, bursting with flavors that will satisfy your taste buds. Order our fresh black grapes now for a healthier and happier you!', 'Fresh Black Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/25456569-b8ad-4582-aaec-beda73333ca5.ece1c3a73ae64a1ba038269c2c1dd00c.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25456569-b8ad-4582-aaec-beda73333ca5.ece1c3a73ae64a1ba038269c2c1dd00c.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25456569-b8ad-4582-aaec-beda73333ca5.ece1c3a73ae64a1ba038269c2c1dd00c.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (578394521, '180pc Apl Granny 3#', 652, '405665855482', 'short description is not available', '180pc Apl Granny 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (579073627, 'Walmart Produce Freshly Diced Yellow Onions', 2.58, 'deleted_074641015938', 'short description is not available', 'Walmart Produce Freshly Diced Yellow Onions', 'WALMART PRODUCE', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (579292874, 'Fresh Red Seedless Grapes', 2.88, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (579500057, 'Cherry on the Vine Tomato, 12 oz Package', 0.01, '405674729798', 'Fresh Cherry on the Vine Tomatoes are the perfect cooking tomato. Because of their notable flavor and thicker skin, they are a versatile tomato option that\'s fit for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, cherry on the vine tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with Cherry on the vine Tomatoes from Walmart.', 'Cherry on the Vine Tomato, 12 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (579769461, 'Kale Greens 2# Bag', 4.56, '659389000202', 'short description is not available', 'Kale Greens 2# Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (580099197, 'Pac Rose Apples 2 Lb Bag', 3.47, '066022003504', 'short description is not available', 'Pac Rose Apples 2 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (580345968, '200pc Pto Red 5# Wa', 1094, '405505384837', 'short description is not available', '200pc Pto Red 5# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (580488601, 'California Grown Peaches, per Pound', 1.58, '400094220276', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (580582153, 'Freshness Guaranteed Fresh Red Seedless Grapes', 2, '', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (580753519, 'Marketside Organic Carrots & Broccoli 7 Oz', 2.5, '681131161343', 'short description is not available', 'Marketside Organic Carrots & Broccoli 7 Oz', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (580903790, 'Rockit Apple 5ct', 2.97, '888289403404', 'short description is not available', 'Rockit Apple 5ct', 'Rock It', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (582589310, '225pc Pto Rst Jmb 8#', 1444.5, '405518778753', 'short description is not available', '225pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (582958497, 'PictSweet Yam Patties, 16 ounce -- 18 per case', 128.45, '070560998604', 'The PictSweet Yam Patties can be baked to make a delicious snack, appetizer, and side dish sure to be liked by kids and adults alike. Prepared from fresh sweet potatoes, these ready-to-bake yam patties will save prep time and effort. This bulk pack of PictSweet yam patties will be great for diners, bistros, and restaurants.', 'PictSweet Yam Patties, 16 ounce -- 18 per case', 'Pictsweet Farms', 'https://i5.walmartimages.com/asr/f4807a47-006c-4801-bd31-d036cdbd9704.4a1af5132b9c406baf0d071ccbcd50e1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f4807a47-006c-4801-bd31-d036cdbd9704.4a1af5132b9c406baf0d071ccbcd50e1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f4807a47-006c-4801-bd31-d036cdbd9704.4a1af5132b9c406baf0d071ccbcd50e1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (583343980, 'Avocado Bag', 4.48, 'deleted_636442360091', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (583474633, 'Freshly Diced Red Onions', 2.58, '643550000610', 'short description is not available', 'Freshly Diced Red Onions', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (583592685, 'Fresh Red Seedless Grapes', 1.84, 'deleted_000000034968', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (584134844, 'Freshness Guaranteed Fresh Red Seedless Grapes', 2.82, '', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (584865702, 'Fresh Red Apple - Each, Plant Variety Included', 0.33, '000000040150', 'Experience the sweet and crisp flavor of our Fresh Red Apples available in the plant variety of an Enterprise and Honeycrisp cross. Perfect for casual snacking or a gourmet addition to salads, sandwiches, and desserts. Enjoy their juicy crunch and vibrant color as part of a healthy diet. Red apples contain antioxidants and contribute positively to your well-being. Perfect for baking or pairing with your favorite cheese. Discover the delicious versatility of these apples today.', 'Fresh Red Apple - Each, Featuring Plant Variety: Enterprise and Honeycrisp Cross Large, Juicy, and Red with a Perfect Balance of Flavor and Firm Texture Ideal for Snacking, Cooking, Baking, and Entertaining Excellent in Fresh Decor: Wreaths, Floral Arrangements, and Tablescapes Rich in Antioxidants Due to Deep Red Skin Versatile Usage in Salads, Desserts, or as a Snack', 'Unbranded', 'https://i5.walmartimages.com/asr/445b58b2-6000-461d-a717-aba4452b943a.48c5e49803af66b6229c088cd7018f4f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/445b58b2-6000-461d-a717-aba4452b943a.48c5e49803af66b6229c088cd7018f4f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/445b58b2-6000-461d-a717-aba4452b943a.48c5e49803af66b6229c088cd7018f4f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (585236417, 'Baker Farms Organic Tuscan Kale Greens, 10 oz: Tripled Washed Chopped Fresh Bagged', 2.97, '813098020399', 'Baker Farms Organic Tuscan Kale, 10oz, Bagged', 'Organic Tuscan Kale 10oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f22bffab-2dac-4b0d-b472-78d02665ede0.6a3d5d4afe7d81bcd8f6cb3d0cd5e23f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f22bffab-2dac-4b0d-b472-78d02665ede0.6a3d5d4afe7d81bcd8f6cb3d0cd5e23f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f22bffab-2dac-4b0d-b472-78d02665ede0.6a3d5d4afe7d81bcd8f6cb3d0cd5e23f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (585393758, 'Freshness Guaranteed Watermelon Medium', 4.77, '262826000002', 'Freshness Guaranteed fresh cut Watermelon in Plastic Tray ready to be opened and shared. It includes a medium sized amount of fresh sweet watermelon', 'Freshness Guaranteed Watermelon Medium', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (585825587, 'Jimmys Holy Smoke', 3.98, '086824923138', 'short description is not available', 'Jimmys Holy Smoke', 'Jimmy\'s', 'https://i5.walmartimages.com/asr/0709c576-14fc-4900-b572-6dde05bc965e_3.673776f44ed49a005007913542a8e334.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0709c576-14fc-4900-b572-6dde05bc965e_3.673776f44ed49a005007913542a8e334.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0709c576-14fc-4900-b572-6dde05bc965e_3.673776f44ed49a005007913542a8e334.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (586083289, 'Fresh Sliced Baby Bella Mushrooms, 8 oz', 2.17, '037102170102', 'Experience the fresh taste of Sliced Brown Mushrooms. Brown mushrooms look similar in size and shape to white mushrooms but they\'re heartier and provide a deep earthy taste. They are just like portabella mushrooms but have been harvested just a few days before becoming large enough to fit a burger. This means they have that same firm, meaty texture you love about portabella caps, just in a tasty bite-size form. Pre-sliced, their hearty, full-bodied taste makes them an excellent addition to beef, wild game, and vegetable dishes. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try Sliced Brown Mushrooms.', 'Sliced Brown Mushrooms, 8 oz tray: 8-ounce package of sliced Brown mushrooms Naturally fat-free Cholesterol-free Low in calories, carbs and sodium Fresh and all natural Best if kept refrigerated Wash before use Natural source of the antioxidant selenium Excellent addition to beef, wild game and vegetable dishes', 'Monterey', 'https://i5.walmartimages.com/asr/315fbff0-615f-4c06-b887-1a83cd430bc7.890878855c20c2f6fad3e7a4f4259a64.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/315fbff0-615f-4c06-b887-1a83cd430bc7.890878855c20c2f6fad3e7a4f4259a64.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/315fbff0-615f-4c06-b887-1a83cd430bc7.890878855c20c2f6fad3e7a4f4259a64.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (586267385, 'Sliced Gourmet Mushrooms, 16 oz', 3.74, 'deleted_037102686061', 'Experience the fresh taste of Sliced Gourmet Mushrooms. If you\'re looking for a traditional mushroom with a mild earthy taste, white mushrooms are just what you need. They\'ve remained the most popular mushroom for several decades and although all mushrooms are versatile, white mushrooms are the most versatile of them all. Pre-cleaned and sliced, they are perfect for adding to stir-frys, sauces, soups, pizzas, salads, and stews to create culinary works all your own. They are free of fat and cholesterol and are low in calories and sodium. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try out Sliced Gourmet Mushrooms.', 'Sliced Gourmet Mushrooms, 16 oz: 16-ounce package of sliced mushrooms Naturally fat-free Cholesterol-free Low in calories, carbs and sodium Fresh and all natural Natural source of the antioxidant selenium Great for salads, pizzas, and much more', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/91bbef7a-0662-41fa-9a28-2af086944a7e.418cd71daf42589d324111624fe2e79b.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/91bbef7a-0662-41fa-9a28-2af086944a7e.418cd71daf42589d324111624fe2e79b.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/91bbef7a-0662-41fa-9a28-2af086944a7e.418cd71daf42589d324111624fe2e79b.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (586785908, '200pc Pto Ykn 5# Bm', 694, '400094040461', 'short description is not available', '200pc Pto Ykn 5# Bm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (586789258, 'Fresh Red Seedless Grapes, Bag (2.25 lbs/Bag Est.)', 3.5, '681131433648', 'Treat yourself to the delicious, juicy flavor of Fresh Red Seedless Grapes. These grapes are bursting with flavor and are completely seedless, so you can easily enjoy a handful as a fresh snack any time of day. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Freshness Guaranteed Fresh Red Seedless Grapes.Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Spark Fresh item.', 'Fresh Red Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e55dbaa1-87c3-4b86-85de-202b84120f9e.2708c9466465f6a23cf47d8197fab9b6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e55dbaa1-87c3-4b86-85de-202b84120f9e.2708c9466465f6a23cf47d8197fab9b6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e55dbaa1-87c3-4b86-85de-202b84120f9e.2708c9466465f6a23cf47d8197fab9b6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (586823130, 'Fresh Sweet Rainier Cherries, 1.25 lb Pouch', 7.48, '850247002028', 'Treat yourself to the refreshing flavor of Fresh Sweet Rainier Cherries. This golden yellow cherry with a red blush has a crisp bite and delicate super-sweet flavor. Enjoy them on their own or add them to a variety of recipes. For breakfast, you could use them to make a filling parfait with yogurt, granola, and other fruit. Make a fresh cherry cobbler and serve with your favorite ice cream at your next party. Use them to top off your decadent cheesecake or classic ice cream sundae. Enjoy the satisfying taste of summer with Fresh Sweet Rainier Cherries.', 'Fresh Sweet Rainier Cherries, 1.25 lb Pouch have a crisp bite and delicate super-sweet flavor Enjoy on their own or add to a variety of recipes Make a filling yogurt parfait for breakfast Make a cherry cobbler and serve with your favorite ice cream Use to top a cheesecake or a classic ice cream sundae To enjoy fresh cherries: store in the refrigerator and wash just before eating Grown in US', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d7536075-5e54-44e3-8001-ab434911573f.12f15c0628985b8c1a64c9893a4ac7d1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d7536075-5e54-44e3-8001-ab434911573f.12f15c0628985b8c1a64c9893a4ac7d1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d7536075-5e54-44e3-8001-ab434911573f.12f15c0628985b8c1a64c9893a4ac7d1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (587047683, 'Services Reduced Program Dept 94', 0.01, '251880000004', 'short description is not available', 'Services Reduced Program Dept 94', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (587130338, 'Organic Whole Bulbs of Black Garlic - Black Garlic North America Brand - Quantity: 2 Packs of 2 Bulbs Each', 11.99, '637801971514', '2 Packs of 2 Bulbs of Whole Bulb Organic Black Garlic (total of 4 bulbs). Black Garlic is ready to eat and has exceptional sweetness with date, balsamic, and slight garlic undertones. The consistency is soft and chewy, and our black garlic is Vegan, Natural, Preservative-Free, Gluten-Free, Kosher and Organic-Certified! At Black Garlic North America Brand, we believe in treating our environment, bodies & conscience ethically, which is why we feel providing our customers with organic options is important. Try in: Sauces and Dressings, on Salads and in Soups, on top of Pizza, and even in Breads, Chocolate Chip Cookies and other Desserts for an explosion of flavor!', '2 Packs of 2 Bulbs (4 total bulbs). Adding a couple diced or crushed black garlic cloves improves even your best creations, both sweet AND savory! Contains 2X the antioxidants of fresh garlic. Vegan, Natural, Preservative-Free, Gluten-Free, Kosher and Organic-Certified!', 'Black Garlic North America', 'https://i5.walmartimages.com/asr/75c89b23-546b-4474-b08f-4ec8ea85addb.26478de85d40942c9d317d3bd524a77a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75c89b23-546b-4474-b08f-4ec8ea85addb.26478de85d40942c9d317d3bd524a77a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75c89b23-546b-4474-b08f-4ec8ea85addb.26478de85d40942c9d317d3bd524a77a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (587138110, 'Local Roots Royal Gems Mix, 4.5 oz', 2.98, '853911006261', 'An upgraded mix of heritage baby romaine lettuces.', 'Grown locallyGrown with zero pesticides or herbicidesGrown with up to 99% less waterHigh in Antioxidants, Chlorophyll, and Vitamins', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c19eb57b-5545-4e4a-83db-1c90f7329511.034d943cb27860dee0e5615bd1101390.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c19eb57b-5545-4e4a-83db-1c90f7329511.034d943cb27860dee0e5615bd1101390.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c19eb57b-5545-4e4a-83db-1c90f7329511.034d943cb27860dee0e5615bd1101390.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (587448590, 'Fresh Red Seedless Grapes, per lb', 1.84, '850414002240', 'short description is not available', 'Fresh Red Seedless Grapes, per lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (587633314, '240pc On Tx1015 3#tm', 984, '405537334282', 'short description is not available', '240pc On Tx1015 3#tm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (587641536, 'Yellow Flesh Peaches, per Pound', 1.58, '400094137802', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (587729866, 'Chilean Grown Plums, per Pound', 1.78, '405503681099', 'Chilean Grown Plums, per Pound', 'Fresh Chilean Grown Plums', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (587740000, '180pc Apple Fuji 3#', 678.6, '405665856458', 'short description is not available', '180pc Apple Fuji 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (588325183, 'Fieldpack Unbranded Fresh Strawberries 1#', 2.42, 'deleted_813882010582', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (588410091, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094261286', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (588643569, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094347997', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (588800917, 'Butternut Squash Whole Fresh, 1 Each', 4.48, '856862005093', 'Add some fresh flavor to your meal with Butternut Squash. This versatile vegetable can be used in a variety of dishes to create delicious and decadent meals. Roast the whole squash for a simple and flavorful side dish, chop it into cubes and put it in the slow cooker with chicken breast, kidney beans, and spices, or make butternut noodles for a gluten-free pasta alternative. For a sweet treat turn the squash into a rich and spicy pie, perfect for the holiday season. With so many uses, this vegetable will become a pantry staple. Create tasty and flavorful meals with Butternut Squash.', 'Produce Unbranded Butternut Squash Whole Fresh, 1 Each Natural food Versatile ingredient Will become a pantry staple Make butternut squash noodles for a gluten free pasta alternative', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bdcdc288-3e95-4321-b587-f5e4b4d07388.5a8a78f466b5605d67c7605ba12dc303.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bdcdc288-3e95-4321-b587-f5e4b4d07388.5a8a78f466b5605d67c7605ba12dc303.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bdcdc288-3e95-4321-b587-f5e4b4d07388.5a8a78f466b5605d67c7605ba12dc303.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (589664154, 'Marketside Mks Chnk Nug, Apl, Crt, Cran, Ban', 3.94, '030223023289', 'short description is not available', 'Marketside Mks Chnk Nug, Apl, Crt, Cran, Ban', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (590955053, 'Fresh Broccoli Bunch, Each', 1.97, '027918000083', 'Getting your daily servings of vegetables is tastier than ever with Braga Farms Broccoli. This bunch broccoli has everything a broccoli-lover could want, from its healthy green color to its even ratio of florets to stem. The consumption of broccoli has tripled over the past 25 years. Its popularity is due to an aesthetic appeal, delightful taste, versatile-culinary applications, and the fact that it is packed full of nutrition. Whether you are in the mood to steam, roast, or sauté, broccoli is a great way to get your daily dose of greens in for the day.', 'Bright-green color Healthy side to any meal Excellent steamed, roasted, sautéed, in soups or served raw with a favorite dip', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/ad4d1415-50d7-4cbc-ab1a-0231643c5927.b2e3a9be13deb50152324b75309b75df.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ad4d1415-50d7-4cbc-ab1a-0231643c5927.b2e3a9be13deb50152324b75309b75df.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ad4d1415-50d7-4cbc-ab1a-0231643c5927.b2e3a9be13deb50152324b75309b75df.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (591641859, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094454695', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (591833746, 'Freshness Guaranteed Diced Mirepoix Mix, 10 oz', 2.88, 'deleted_681131276511', 'Add a little color and texture to your next dish with our Freshness Guaranteed Diced Mirepoix Mix. With yellow onion, carrots, and celery all diced up and mixed together in this one convenient package, you can skip the prep work and have just what you need to create a flavorful soup stock or a savory sauce. Just throw this mix into a pan with some butter or oil, cook on low heat until beautifully carmelized, and you\'ll have the perfect base ready to enhance the flavor profile in a wide variety of recipes. Casseroles, chicken noodle soup, stews, and more are quickly and easily perfected when you use our Freshness Guaranteed Diced Mirepoix Mix.Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Spark Fresh item.', 'Freshness Guaranteed Diced Mirepoix Mix, 10 oz: Classic Mirepoix mix consisting of yellow onions, celery, and carrots Ingredients come pre-diced for your convenience Great way to add color, flavor, and texture to a wide variety of dishes Excellent for creating soups, stews, sauces, braises, and casseroles Resealable container makes it easy to use as much or as little at a time as you need', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6a49b487-08c1-4c61-9cd3-323ee4d599c4.1496bd974c811e9cdd42de5da8c1e440.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a49b487-08c1-4c61-9cd3-323ee4d599c4.1496bd974c811e9cdd42de5da8c1e440.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a49b487-08c1-4c61-9cd3-323ee4d599c4.1496bd974c811e9cdd42de5da8c1e440.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (591941856, 'Fresh California Grown Nectarines, 1 Lb.', 1.78, 'deleted_400094220344', 'Fresh California Grown Nectarines, 1 Lb.', 'Fresh California Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (592064430, 'Fresh Express Twisted Caesar Pesto, 9.5 oz Bag, Fresh', 3.98, '071279302164', 'Why choose between pesto and caesar when you can have it all? NEW Fresh Express Twisted Pesto Caesar Chopped Salad Kit, 9.7 oz is an incredible symphony of flavors you won’t want to miss! Crispy iceberg, green leaf lettuce, crunchy garlic brioche croutons, savory shredded Parmesan cheese and decadently creamy Pesto Caesar Dressing all come together in a magical symphony of flavors. Try it today for an unforgettable culinary experience. Look for it in the fresh produce section.', 'Thoroughly washed and ready to eat Premium, restaurant quality ingredients A refreshing and tasty meal that\'s perfect for any occasion', 'Fresh Express', 'https://i5.walmartimages.com/asr/79ffd81c-b7da-4212-acc1-09ad59a2b61a.4b7e2d6655b0764187b3a5c6854ee7e4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/79ffd81c-b7da-4212-acc1-09ad59a2b61a.4b7e2d6655b0764187b3a5c6854ee7e4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/79ffd81c-b7da-4212-acc1-09ad59a2b61a.4b7e2d6655b0764187b3a5c6854ee7e4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (592312619, 'Clementines, 5 lb', 5.94, 'deleted_092148111540', 'Clementines, 5 lb', 'Clementines, 5 lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/41346d9b-ddc1-41a7-8093-35edc68c44fb_1.be72592d1d838c1dc7b156278cba3e1c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41346d9b-ddc1-41a7-8093-35edc68c44fb_1.be72592d1d838c1dc7b156278cba3e1c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41346d9b-ddc1-41a7-8093-35edc68c44fb_1.be72592d1d838c1dc7b156278cba3e1c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (592682060, 'Fresh Serrano Pepper, 4 Ounce Bag', 1.58, '711069541204', 'Enhance your meals with the delicious flavor of Serrano Peppers. Naturally low in calories, fat, and cholesterol, this vegetable is a great source of vitamins C, B6, and A, as well as iron and magnesium. Serrano peppers have a bright and biting flavor that enhances a variety of recipes. Make a zesty pico de gallo or salsa using fresh serrano peppers, add to a sweet peach jam to make a glaze for hot wings, or add to eggs for out of this world huevos rancheros. You can even add some diced serrano peppers and cheese to cornbread batter for a delectable chile cheese cornbread that will have everyone asking for seconds. Lunches and dinners are more scrumptious when fresh Serrano Peppers are part of the meal. Also known as Chile serrano, Serrano chili, Filfil serrano and Serrano mirch around the world.', 'Serrano Pepper, 4 oz: Naturally low in calories Rich in vitamins C, B6, and A Add to enchiladas or chili, make a zesty salsa or pico de gallo, or add to peach jam for a glaze for hot wings Approximately 8-12 peppers per .25 lb Versatile and delicious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/71784258-8461-44ee-9ef1-04e1e012413b.3e7b782e9e363172a67e961a4a9fcc5a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71784258-8461-44ee-9ef1-04e1e012413b.3e7b782e9e363172a67e961a4a9fcc5a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71784258-8461-44ee-9ef1-04e1e012413b.3e7b782e9e363172a67e961a4a9fcc5a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (592831607, 'Gills Onions Gills Yellow Onions, 7 oz', 1.99, '643550000405', 'Yellow Onions, Fresh Diced 7 oz (198 g) Quality. Convenience. Grower Direct. Product of USA. Keep refrigerated. 7 oz (198 g) Oxnard, CA 93030', 'Yellow Onions, Fresh Diced Quality. Convenience. Grower Direct. Product of USA.', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (593802073, 'Purple Sweet Potatoes Whole Fresh, Each', 0.96, '858174002074', 'Create something wholesome, fresh and delicious with these Sweet Potatoes (Yams) .These versatile vegetables can be used to make savory sides or sweet treats. Try them roasted or baked for a tasty addition to any dish. You could also use them to make seasoned sweet potato fries or a flavorful hummus dip for your next party. If you want to satisfy your sweet tooth, try them in a traditional sweet potato casserole or use them to make sweet potato and brown sugar ice cream. The mouthwatering possibilities are endless with this hearty vegetable. Add something amazing to your meals with Sweet Potatoes.', 'Bulk Purple Sweet Potatoes Create something wholesome, fresh and delicious with these Sweet Potatoes (Yams) . These versatile vegetables can be used to make savory sides or sweet treats. Try them roasted or baked for a tasty addition to any dish. You could also use them to make seasoned sweet potato fries or a flavorful hummus dip for your next party. If you want to satisfy your sweet tooth, try them in a traditional sweet potato casserole or use them to make sweet potato and brown sugar ice cream. The mouthwatering possibilities are endless with this hearty vegetable. Add something amazing to your meals with Sweet Potatoes.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b3002cf8-f708-42c4-96eb-b17139e2f91f.1938913efeba17eaf92f8a03b06ea5e8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3002cf8-f708-42c4-96eb-b17139e2f91f.1938913efeba17eaf92f8a03b06ea5e8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3002cf8-f708-42c4-96eb-b17139e2f91f.1938913efeba17eaf92f8a03b06ea5e8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (593854330, '616pc Pomegranate Ca', 1219.68, '400094292631', 'short description is not available', '616pc Pomegranate Ca', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (594131148, 'Whole Cello Carrots 1 Lb Bag', 1.27, 'deleted_744508100021', 'short description is not available', 'Whole Cello Carrots 1 Lb Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (594179855, '150pc Pto Ykn 5# Wa', 641, '405509211696', 'short description is not available', '150pc Pto Ykn 5# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (594817975, 'Marketside 5lbredilicious', 6.96, '003338300033', 'Our standards are what set us apart, and our quality is what keeps us stocking pantries, fridges and freezers with the best natural and organic 365 products every day. We get excited about things like whole grain flours, shade-grown coffee, organic milk and frozen veggies because we know that you care about cooking with the very best ingredients ��� without compromising on the ingredients you don���t want. (All 365 products meet Whole Foods Market quality standards.).....', '- Selected and stored fresh - Sourced with high quality standards - Recommended to wash before consuming - Delicious on their own as a healthy snack or as part of a recipe', 'Marketside', 'https://i5.walmartimages.com/asr/2f983fba-77a5-4ded-9b41-f82fb3f1c36b.b4b42bd6723e6c2b1f80ede921f8a8e8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f983fba-77a5-4ded-9b41-f82fb3f1c36b.b4b42bd6723e6c2b1f80ede921f8a8e8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f983fba-77a5-4ded-9b41-f82fb3f1c36b.b4b42bd6723e6c2b1f80ede921f8a8e8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (594928990, 'Fresh Avocado per Each', 3.28, '042808002534', 'Indulge in the rich and creamy goodness of Fresh Avocado, a versatile and nutritious superfood that adds a touch of luxury to your culinary creations. Boasting a smooth, buttery texture and a subtle, nutty flavor, this delectable fruit is perfect for both savory and sweet dishes. Packed with heart-healthy monounsaturated fats, vitamins, minerals, and antioxidants, Fresh Avocado is a delicious and wholesome choice for any meal. Enjoy it in salads, sandwiches, smoothies, or simply on its own, and savor the delightful taste and nourishing benefits of this remarkable fruit.', 'Fresh Avocado Per Each Indulge in the rich and creamy goodness of Fresh Avocado, a versatile and nutritious superfood that adds a touch of luxury to your culinary creations. Boasting a smooth, buttery texture and a subtle, nutty flavor, this delectable fruit is perfect for both savory and sweet dishes. Packed with heart-healthy monounsaturated fats, vitamins, minerals, and antioxidants, Fresh Avocado is a delicious and wholesome choice for any meal. Enjoy it in salads, sandwiches, smoothies, or simply on its own, and savor the delightful taste and nourishing benefits of this remarkable fruit.', 'Unbranded', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (595504738, 'Welchs Bicolor Grapes, 3 Lb', 9.97, '095829210655', 'Treat yourself to the delicious, juicy flavor of Fresh Bicolor Grapes. These grapes are bursting with sweet flavor, so you can easily enjoy a handful as a fresh snack any time of day. Enjoy them for breakfast, lunch, dinner, or dessert. They are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Bicolor Grapes. Fresh.', 'Enjoy a handful as a fresh snack any time of day Great for using in fruit salad Freeze and use as fun ice cubes', 'Welch\'s', 'https://i5.walmartimages.com/asr/36ad0e00-745b-4160-ab70-f9ed6fefd6c5.04a0a399057602f06082c4b98d0bffd6.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/36ad0e00-745b-4160-ab70-f9ed6fefd6c5.04a0a399057602f06082c4b98d0bffd6.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/36ad0e00-745b-4160-ab70-f9ed6fefd6c5.04a0a399057602f06082c4b98d0bffd6.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (595593021, 'Navel Oranges, 5 lb', 6.48, '967040008116', 'short description is not available', 'Navel Oranges, 5 lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d90980cb-6535-42c2-bde6-955882b7e0ba.84d22bed3b28de42352ad1c0f4f2d72f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d90980cb-6535-42c2-bde6-955882b7e0ba.84d22bed3b28de42352ad1c0f4f2d72f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d90980cb-6535-42c2-bde6-955882b7e0ba.84d22bed3b28de42352ad1c0f4f2d72f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (596019950, 'Freshness Guaranteed Mango Tajin', 3.88, '681131036702', 'short description is not available', 'Freshness Guaranteed Mango Tajin', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (596246327, 'Yellow Flesh Peaches, per Pound', 1.58, '400094803356', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (596493489, 'Fresh SugarBee® Apples, each – Premium, extra crisp apple with flavor notes of honey, caramel and molasses.', 2.27, 'deleted_888289001020', 'SugarBee® apples were naturally created by honeybees. On a particularly sunny day, one very adventurous honeybee carried pollen to a Honeycrisp tree from another apple tree whose variety remains a mystery. Mother Nature did her part and SugarBee® apples were born! If you like your apples on the sweeter side, you are going to love SugarBee®.', 'Sugarbee Apples, Each: Intense notes of honey, caramel, and molasses with a complex finish. Great for healthy snacking as they are slow to brown Pair them with sharp cheeses and crackers for stunning appetizer cheese boards', 'Chelan Fresh', 'https://i5.walmartimages.com/asr/52b07dcf-faa2-4179-ac6c-debb51c97942.62a0b94d3831bf782ae89b6c185a3a17.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/52b07dcf-faa2-4179-ac6c-debb51c97942.62a0b94d3831bf782ae89b6c185a3a17.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/52b07dcf-faa2-4179-ac6c-debb51c97942.62a0b94d3831bf782ae89b6c185a3a17.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (596632705, 'Bosc Pears, Each', 1.88, 'deleted_851210002557', 'short description is not available', 'Bosc Pears, Each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (597468288, 'Yellow Flesh Peaches, per Pound', 1.58, '400094561799', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (597617292, 'Fresh Grown Seedless Bicolor Grapes 32z', 3.98, '854957001791', 'short description is not available', 'Fresh Grown Seedless Bicolor Grapes 32z', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (597646906, 'Fieldpack Unbranded Bunch Beets', 2.57, 'deleted_723525200143', 'short description is not available', 'Fieldpack Unbranded Bunch Beets', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (597915162, 'Dynamic Duo Creamer Potato', 5.48, '629307042546', 'short description is not available', 'Potatoes, Dynamic Duo, Variety Pack A wonderful combination of our most popular red and yellow varietals they complement each other well with smooth thin skins and buttery yellow flesh. Dynamic duo cooks quickly offering a nutritious yet exquisitely fluffy texture. 12% DV of fiber per serving. 100 calories per serving. Naturally fat-free. Gluten free. Good source of potassium. Cholesterol free. No peeling required. Creamer potatoes, coveted by leading chefs and foodies, are a premium little potato varietal that is typically thin-skinned, rich in flavor, and highly nutritious. In 1996, when my father and I introduced these flavorful little potatoes, we grew a one-acre plot that we harvested, washed and bagged by hand. Since then, we focus solely on selecting creamer potatoes that are outstanding in taste, nutrition and texture. It\'s all we do. Our proprietary varietals are harvested when they are mature and at their best. My family and I still enjoy the original, diverse taste of these exceptional potatoes, and I am excited to share them with you. Angela, co-founder and chief potato champion. LittlePotatoes.com. Facebook. Twitter. Instagram. Pinterest. YouTube. Product of Canada. Product of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d2c9f08e-280c-4643-bd0d-4463c784fe5e_2.3aed0cac4d706de0ca5a08e1746c7d8d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d2c9f08e-280c-4643-bd0d-4463c784fe5e_2.3aed0cac4d706de0ca5a08e1746c7d8d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d2c9f08e-280c-4643-bd0d-4463c784fe5e_2.3aed0cac4d706de0ca5a08e1746c7d8d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (598217565, 'Fresh Red Seedless Grapes, 2 lb', 4.97, '899734002158', 'Treat yourself to the delicious, juicy flavor of Fresh Red Seedless Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Red Seedless Grapes.', 'Fresh Red Seedless Grapes Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4e760aff-5b4d-4b6e-8318-ae827b014b02.17d45450028262b99470e5bccd7bfb28.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4e760aff-5b4d-4b6e-8318-ae827b014b02.17d45450028262b99470e5bccd7bfb28.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4e760aff-5b4d-4b6e-8318-ae827b014b02.17d45450028262b99470e5bccd7bfb28.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (598460254, 'LEMON BLEND BOTTLE 32 oz. - LIMON (Pack of 9)', 35.67, '690164584487', 'Los trucos caseros y los ingredientes naturales pueden ayudarnos a ablandar carne y a disfrutar de unos platos realmente deliciosos. Un fruto del color del sol que te permitirá ablandar carne con facilidad.Coloca la carne en un plato, empapa el pincel de cocina en el jugo de limón y úsalo para extender el producto sobre los trozos de carne que vayas a cocinar.', 'Le da un sabor excepcional y deja las carnes suavecitas.Le da un sabor excepcional y deja las carnes suavecitas.', 'DJulio', 'https://i5.walmartimages.com/asr/3e892546-f303-4679-8960-71f9c86bd92e_1.23ab5056acabe7c00de87d31f92acee3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e892546-f303-4679-8960-71f9c86bd92e_1.23ab5056acabe7c00de87d31f92acee3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e892546-f303-4679-8960-71f9c86bd92e_1.23ab5056acabe7c00de87d31f92acee3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (598601791, 'Premium Bananas', 0.49, 'deleted_000000042376', 'short description is not available', 'Premium Bananas', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (598738727, 'GH Power Salad W/ Kale & Brussel Sprouts', 5.47, '826766254699', 'Power Salad with Kale & Brussel Sprouts', 'GH Power Salad W/ Kale & Brussel Sprouts', 'Garden Highway', 'https://i5.walmartimages.com/asr/14793ef0-ae84-4bf9-ab4f-594787ebe960.4d84ee11563eba26aff4c0ea792b2be8.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/14793ef0-ae84-4bf9-ab4f-594787ebe960.4d84ee11563eba26aff4c0ea792b2be8.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/14793ef0-ae84-4bf9-ab4f-594787ebe960.4d84ee11563eba26aff4c0ea792b2be8.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (598771781, 'Straw/blueberry Blend', 11.54, '045009998170', 'short description is not available', 'Straw/blueberry Blend', 'Unbranded', 'https://i5.walmartimages.com/asr/6a7b7327-141c-4969-a1d0-a2e4311512f9.19c70fdbaeb5c2099c07484db5f1cd27.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a7b7327-141c-4969-a1d0-a2e4311512f9.19c70fdbaeb5c2099c07484db5f1cd27.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a7b7327-141c-4969-a1d0-a2e4311512f9.19c70fdbaeb5c2099c07484db5f1cd27.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (598940560, 'Full Circle Organic Green Squash, 8.0 OZ', 3.98, 'deleted_716310551162', 'Full Circle Organic Green Squash. Full Circle™ Green Squash. In season year round. Certified USDA Organic. U.S. No. 1. Net Wt.8 oz. (227 g).', 'Squash, Certified Organic, Green, 2 Pack In season: Year Round USDA Organic; Certified Organic by QAI. U.S. No. 1. Produce of USA.', 'Full Circle Organic', 'https://i5.walmartimages.com/asr/fbfeeafe-746d-4654-ae8d-d2353bd280ac_1.1dfb824d0abba5ee8ed461958ceae86c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fbfeeafe-746d-4654-ae8d-d2353bd280ac_1.1dfb824d0abba5ee8ed461958ceae86c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fbfeeafe-746d-4654-ae8d-d2353bd280ac_1.1dfb824d0abba5ee8ed461958ceae86c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (598988546, 'Taylor Farms Mexican Style Caesar Chicken Sld 6.3oz', 2.98, '030223060321', 'A classic favorite with a twist! This salad combines crisp romaine lettuce with chili lime seasoned white chicken meat, and cotija cheese all covered with a zesty Mexican Caesar dressing that delivers a flavor adventure. Made for busy lives on the go, everything’s included – even the fork!', 'Taylor Farms Mexican Style Caesar Chicken Sld 6.3oz', 'Taylor Farms', 'https://i5.walmartimages.com/asr/6c3f4e8e-5efa-41d4-b2e3-a8cdfd8c59e9.430322d95849ce42a014379c76f363bc.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6c3f4e8e-5efa-41d4-b2e3-a8cdfd8c59e9.430322d95849ce42a014379c76f363bc.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6c3f4e8e-5efa-41d4-b2e3-a8cdfd8c59e9.430322d95849ce42a014379c76f363bc.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (599301243, 'Watermelon Seeded', 6.58, 'deleted_851354002314', 'short description is not available', 'Watermelon Seeded', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (599355685, 'Organic Russian Banana Fingerlings Potato, 1.5 Lb.', 3.48, '690545915664', 'Organic Russian Banana Fingerlings Potato, 1.5 Lb.', 'Organic Russian Banana Fingerlings 1.5lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (599414368, 'Fresh Dark Sweet Washington Cherries, 3 Lb.', 5.98, '813200013103', 'Fresh Dark Sweet Washington Cherries, 3 Lb.', 'Fresh Dark Sweet Washington Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (599516630, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094365779', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (599920530, 'Fresh Black Seedless Grapes', 1.88, 'deleted_014668790074', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (599977385, 'Spice Select Garlic Paste, 32oz', 7.25, '076114310175', 'Spice Select\'s Ready to-use Garlic Paste is an essential piece to any household cook\'s spice cabinet. Sitting between fresh minced garlic and garlic powder, garlic paste is perfect for adding the perfect consistency to making marinades, soups, and sauces while bringing on the bold garlic flavor you love. With this ready-to-use garlic paste, all you have to do is prepare your meal up to the point you\'re ready to add some garlic, and then simply add as much of the garlic paste as you need—no defrosting or heating up required. Because it\'s so versatile, it\'s handy to always have a jar of Spice Select\'s Ready to-use Garlic Paste on hand when you\'re cooking up dinner for the family.', 'Spice Select Garlic Paste, 32oz: Ready-to-use garlic paste soft, creamy consistency is perfect for sauces, soups, and marinades Brings the bold taste of fresh garlic you love to any dish About 189 servings per container Kosher', 'Spice Select', 'https://i5.walmartimages.com/asr/52717319-ca80-4763-b308-78d198ab7611_1.bf56dad5d1415211cea62f3e38ca74e8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/52717319-ca80-4763-b308-78d198ab7611_1.bf56dad5d1415211cea62f3e38ca74e8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/52717319-ca80-4763-b308-78d198ab7611_1.bf56dad5d1415211cea62f3e38ca74e8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (600191654, 'Fresh Black Seedless Grapes', 1.88, 'deleted_014668790067', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (600278107, 'Idaho Potatoes, 10 Lb.', 4.94, 'deleted_851106006386', 'Idaho Potatoes, 10 Lb.', 'Idaho Potatoes 10 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (600633662, 'Lechuga Cello 24', 2.97, '065951300012', 'short description is not available', 'Lechuga Cello 24', 'Unbranded', 'https://i5.walmartimages.com/asr/7c212312-871d-48fc-a065-60639d57f316.e1d523c0cdcca8ea4bafa9628ac9a4b4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c212312-871d-48fc-a065-60639d57f316.e1d523c0cdcca8ea4bafa9628ac9a4b4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c212312-871d-48fc-a065-60639d57f316.e1d523c0cdcca8ea4bafa9628ac9a4b4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (601368870, 'Marketside Greenhouse Grown Fresh Strawberries, 12 oz Container', 4.78, '699058999352', 'The sweet, juicy flavor of Marketside Greenhouse Grown Fresh Strawberries make them a refreshing and delicious treat. These sweet and flavorful strawberries are grown in a greenhouse and found in our premium selection. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like vitamin C, dietary fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Marketside Greenhouse Grown Fresh Strawberries today and savor the delectable flavor. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Greenhouse Grown Fresh Strawberries, 12 oz Container Premium selection Prior to serving gently wash them and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'Marketside', 'https://i5.walmartimages.com/asr/621e5ad3-5e96-408f-8ccc-92edb0bcb732.3f1ca05169e9bd36a1d1433cab09c9cf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/621e5ad3-5e96-408f-8ccc-92edb0bcb732.3f1ca05169e9bd36a1d1433cab09c9cf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/621e5ad3-5e96-408f-8ccc-92edb0bcb732.3f1ca05169e9bd36a1d1433cab09c9cf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (601441949, 'Microwave in Bag Red Potatoes, 12 Oz.', 2.48, '854419002151', 'Microwave in Bag Red Potatoes, 12 Oz.', 'Microwave In Bag Red Potatoes 12 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (601673274, 'Spaghetti Squash, Each', 7.4, '856862005086', 'Treat yourself to a delicious and healthy meal with Spaghetti Squash. When, cooked this unique squash falls apart into ribbons that are the perfect substitute for spaghetti. Roast the squash and serve with marinara sauce and meatballs for a healthy spin on a classic or bake some with pancetta and make a creamy, decadent carbonara. You can even make scrumptious vegan or vegetarian meals using this versatile squash. If you’re feeling creative you can make Spaghetti Squash tacos, Spaghetti Squash casserole, or even pad Thai. Try serving it for breakfast by making Spaghetti Squash nests with a sunny side up egg. The possibilities are endless when you bring home Spaghetti Squash.', 'Spaghetti Squash, 1 Each: When cooked, this squash falls apart into ribbons that are the perfect substitute for spaghetti Perfect for a healthy dinner Incorporate into all sorts of recipes from traditional Italian cuisine to Asian inspired dishes Can even be enjoyed for breakfast with eggs Great for vegan and vegetarian options', 'Fresh Produce', 'https://i5.walmartimages.com/asr/75847174-a16b-465d-89bf-c497505e7c53.84944e37ec234278389fc3d29fd78618.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75847174-a16b-465d-89bf-c497505e7c53.84944e37ec234278389fc3d29fd78618.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75847174-a16b-465d-89bf-c497505e7c53.84944e37ec234278389fc3d29fd78618.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (602097089, 'Freshness Guaranteed Broccoli & Cauliflower with Ranch Snack Tray, 5 oz', 3.48, '681131036825', 'This Freshness Guaranteed Broccoli and Cauliflower with Ranch Snack Tray is a tasty and healthy snack that you can enjoy any time of the day. This fresh broccoli and cauliflower comes in a ready-to-eat package making it easy to enjoy on the go for you and your kids. It also comes with a two-ounce container of ranch dressing. These veggies are great for packing in lunches or as an afternoon snack. Keep refrigerated until ready to enjoy. Bring home the Freshness Guaranteed Broccoli and Cauliflower with Ranch Snack Tray today. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Broccoli & Cauliflower with Ranch Snack Tray, 5 oz: Tasty and healthy snack Comes with a 2 oz package of ranch dressing 150 calories per serving No trans fat or added sugars Reclosable container helps maintain freshness Great for packing in lunches Keep refrigerated until ready to enjoy', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1eed43b4-53c6-440c-8f27-c7c4552b1995.f120f94573bee5e9222b5c067aaaf1ae.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1eed43b4-53c6-440c-8f27-c7c4552b1995.f120f94573bee5e9222b5c067aaaf1ae.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1eed43b4-53c6-440c-8f27-c7c4552b1995.f120f94573bee5e9222b5c067aaaf1ae.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (602882010, 'Yellow Onions, 3 Lb.', 1.94, 'deleted_400094045893', 'Yellow Onions, 3 Lb.', 'Yellow Onions 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (603003766, '500lb Cabbage Grn Hg', 340, '405781331228', 'short description is not available', '500lb Cabbage Grn Hg', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (603239932, '170pc On Swt 4# Uo', 506.6, '405517674551', 'short description is not available', '170pc On Swt 4# Uo', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (603467102, 'Fresh Green Seedless Grapes', 3.27, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (603861317, 'Seasonal Blend Summer 32oz', 11.98, '045009891259', 'short description is not available', 'Seasonal Blend Summer 32oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/42316677-4b87-4f24-830c-a7ea9e762706.c143ecfbd7c0a5f1d29b21db5e1627c5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42316677-4b87-4f24-830c-a7ea9e762706.c143ecfbd7c0a5f1d29b21db5e1627c5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42316677-4b87-4f24-830c-a7ea9e762706.c143ecfbd7c0a5f1d29b21db5e1627c5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (604131849, 'Microwave in Bag Yellow Potatoes, per Pound', 2.47, 'deleted_033383004785', 'Microwave in Bag Yellow Potatoes, per Pound', 'Microwave In Bag Yellow Potatoes Lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/a1230766-a1db-49e4-8c0d-0670d196da25.44a4bcd5aa1dc60c860b1fc40c6489af.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a1230766-a1db-49e4-8c0d-0670d196da25.44a4bcd5aa1dc60c860b1fc40c6489af.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a1230766-a1db-49e4-8c0d-0670d196da25.44a4bcd5aa1dc60c860b1fc40c6489af.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (604450542, '240pc On Tx1015 3#', 945.6, '405501210628', 'short description is not available', '240pc On Tx1015 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (605055723, 'The Little Potato Company Terrific Trio Potatoes, 1.5 Lb.', 3.67, 'deleted_629307122040', 'The Little Potato Company Terrific Trio Potatoes, 1.5 Lb.', 'Potatoes, Terrific TrioU.S. no. 1 grade (3/4 in. -1 5/8 in.). Fresh. Straight from the farm. Easy pre-washed. Thin skinned. No peeling required. Nutritious. Fat, gluten and cholesterol free. Good source of potassium. A highly attractive and delicious combination of our best red, yellow, and blue potato varieties- the Terrific Trio. Each variety in the bag offers a unique, harmonious taste experience that is sure to provide plate appeal. The virtues of being small. 1.855.516.6075. Facebook. Twitter. This bag is not suitable for microwaving. The Little Potato Company is focused on solely on carefully selecting and growing little potatoes that have outstanding flavors, great texture, and better nutrition. It���s all we do. And we harvest our unique, proprietary potato varieties when they���re mature at their best. You can taste the difference! A message from Angela. As a mother and businesswoman. I am pleased to bring these little potatoes to you. My father, a Dutch immigrant, introduced me to the flavorful little potatoes he grew up with. Together we planted our first acre in 1996, sorting, washing, and bagging our first crop by hand. We remain dedicated to bringing back the original, diverse goodness of little potatoes. Our potatoes will have you proclaiming the virtues of being small. Angela. Co-founder and chief potato champion. Product of USA.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/d57950f8-a2de-433e-8d69-7909459755ca.1982f02a107469898b4ace8239d31033.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d57950f8-a2de-433e-8d69-7909459755ca.1982f02a107469898b4ace8239d31033.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d57950f8-a2de-433e-8d69-7909459755ca.1982f02a107469898b4ace8239d31033.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (605249851, 'Tuscan Cantaloupe', 3.28, 'deleted_827575300096', 'short description is not available', 'Tuscan Cantaloupe', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (605423890, 'Eat Smart Spicy Sweet Kale Chopped Salad Kit', 3.48, '709351303517', 'Have a restaurant-inspired meal with the Eat Smart Spicy Sweet Kale Vegetable Salad Kit. This delicious, nutritious product contains no artificial colors, flavors or preservatives. This Eat Smart Vegetable Salad Kit is 100% clean and free from gluten. The combination of ingredients makes a unique side dish or main course. The bag includes: broccoli stalk, cabbage, Brussels sprouts, kale, chicory, dried cranberries, and a spicy Poppyseed dressing.', 'Eat Smart Spicy Sweet Kale Vegetable Salad Kit, 12 oz. Contains 7 super foods. All ingredients come in the bag. Just toss and serve100% gluten-free salad', 'EatSmart', 'https://i5.walmartimages.com/asr/fa99ee1c-57be-469f-9b7c-fd776fa452c8.21a40bbe0eb850f4385c1e31f5819232.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa99ee1c-57be-469f-9b7c-fd776fa452c8.21a40bbe0eb850f4385c1e31f5819232.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa99ee1c-57be-469f-9b7c-fd776fa452c8.21a40bbe0eb850f4385c1e31f5819232.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (606236255, 'Goverden Spicy Guacamole 8oz', 4.43, '850002858075', 'short description is not available', 'Freshness Guaranteed Spicy Guacamole 8oz', 'GoVerden', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (606258601, 'Large Avocado 3 Count Bag', 39, '', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/46f83849-2822-43ed-a591-140ca68a2339.556331758a6c547340447e7eee8cf1d5.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/46f83849-2822-43ed-a591-140ca68a2339.556331758a6c547340447e7eee8cf1d5.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/46f83849-2822-43ed-a591-140ca68a2339.556331758a6c547340447e7eee8cf1d5.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (606285647, '200pc Pto Rst Jmb8nv', 1284, '405518789872', 'short description is not available', '200pc Pto Rst Jmb8nv', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (606387525, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094006351', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (606512691, 'Freshness Guaranteed Whole Brown Mushrooms 16oz', 3.78, 'deleted_631661999855', 'short description is not available', 'Freshness Guaranteed Whole Brown Mushrooms 16oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (606946114, 'Fresh Dark Sweet Red Cherries', 5.98, '818544020336', 'short description is not available', 'Fresh Dark Sweet Red Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (607143191, 'Fresh Candy Dream Grapes, 1 Lb', 3.98, '897325002129', 'short description is not available', 'Fresh Candy Dream Grapes, 1 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (607297939, 'Services Reduced Program Dept 94', 0.01, '251678000001', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (607332713, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094897577', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (607760038, 'Jicama', 1.38, 'deleted_883616002930', 'short description is not available', 'Jicama', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/f32d8d11-47ea-4cb1-a6be-f63759286646_1.5a3db62441c231480e76e505a264a97d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f32d8d11-47ea-4cb1-a6be-f63759286646_1.5a3db62441c231480e76e505a264a97d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f32d8d11-47ea-4cb1-a6be-f63759286646_1.5a3db62441c231480e76e505a264a97d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (608000064, 'Fresh Red Seedless Grapes', 2.88, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (608574931, 'Fresh Fruit Tray 40 oz, Chopped', 20.44, '045009891310', 'Introducing our Fresh Fruit Tray 40 oz, a luxurious assortment of handpicked, vibrant, and mouthwatering fruits, meticulously chopped to create a visual and flavorful delight. Each fruit is harvested at peak ripeness and expertly cut for your convenience, providing a ready-to-eat medley that\'s both nutritious and delicious. Rich in vitamins and antioxidants, our Fresh Fruit Tray is a perfect centerpiece for gatherings, picnics, or simply enjoying a healthy snack. Savor the irresistible taste and freshness of this nature-inspired treat.', 'Fruit Tray 40 Oz Introducing our Fresh Fruit Tray 40 oz, a luxurious assortment of handpicked, vibrant, and mouthwatering fruits, meticulously chopped to create a visual and flavorful delight. Each fruit is harvested at peak ripeness and expertly cut for your convenience, providing a ready-to-eat medley that\'s both nutritious and delicious. Rich in vitamins and antioxidants, our Fresh Fruit Tray is a perfect centerpiece for gatherings, picnics, or simply enjoying a healthy snack. Savor the irresistible taste and freshness of this nature-inspired treat.', 'Unbranded', 'https://i5.walmartimages.com/asr/3074d68e-9499-43b1-ae6d-2f76eb814cf7.9e2df49233271f0ec15e1f7614fcd670.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3074d68e-9499-43b1-ae6d-2f76eb814cf7.9e2df49233271f0ec15e1f7614fcd670.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3074d68e-9499-43b1-ae6d-2f76eb814cf7.9e2df49233271f0ec15e1f7614fcd670.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (608613536, 'Green Bell Pepper MX', 0.78, '826575002016', 'Green Bell Pepper MX', 'Green Bell Pepper', 'Benetton', 'https://i5.walmartimages.com/asr/616eb2ea-5ce4-4957-934f-c6fdd92003a6.f470f58201b97a7052057b275b1a8ec8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/616eb2ea-5ce4-4957-934f-c6fdd92003a6.f470f58201b97a7052057b275b1a8ec8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/616eb2ea-5ce4-4957-934f-c6fdd92003a6.f470f58201b97a7052057b275b1a8ec8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (608694467, 'Freshness Guaranteed Whole White Mushrooms 8oz', 1.98, 'deleted_699058820045', 'short description is not available', 'Freshness Guaranteed Whole White Mushrooms 8oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (609129508, '180pc Pto Rst 10# Ph', 799.2, '405531369501', 'short description is not available', '180pc Pto Rst 10# Ph', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (609549294, 'York Apples 3 Lb Bag', 3.94, '033383092072', 'short description is not available', 'York Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (609598218, 'Fresh Green Seedless Grapes', 2.12, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (609718780, 'Fresh Slicing Tomato, 1 lb Package', 1.98, 'deleted_711069534626', 'Vine Ripened Tomatoes are picked at peak freshness and specially bred for deep red color, intense flavor, and higher lycopene content than standard tomatoes. There is nothing better for your burger, sandwich or salad, anyway you slice it. Be sure to add thsi fresh produce item to your Walmart basket today!', 'Slicing Tomato, 1 lb Pack: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, burgers, gourmet sandwiches, and more Add to party trays or school lunches Bred to have higher lycopene than standard tomatoes A good source of vitamin C, K, potassium and folate', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2a539f16-056b-4bc2-888d-0b83a59724f4.751227480d6ca336c0cce6cc560e64bc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a539f16-056b-4bc2-888d-0b83a59724f4.751227480d6ca336c0cce6cc560e64bc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2a539f16-056b-4bc2-888d-0b83a59724f4.751227480d6ca336c0cce6cc560e64bc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (609924359, 'California Grown Peaches, per Pound', 1.58, '400094210895', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (609971671, 'Dark Sweet Cherries, Half Pint', 2.98, '847473006500', 'Dark Sweet Cherries, Half Pint', 'Dark Sweet Cherries 1/2 Dry Pint', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (610446420, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094608197', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (610624197, 'Spinach Salad, 10 Oz.', 1.54, '030223000273', 'Spinach Salad, 10 Oz.', 'Salad Spinach Bag 10 Oz.', 'Taylor Farms', 'https://i5.walmartimages.com/asr/5f143090-acfb-40b9-a6e4-686c11284ca9.ef472a861f7dcd102c6837059f485502.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5f143090-acfb-40b9-a6e4-686c11284ca9.ef472a861f7dcd102c6837059f485502.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5f143090-acfb-40b9-a6e4-686c11284ca9.ef472a861f7dcd102c6837059f485502.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (610661483, 'Yellow Flesh Peaches, per Pound', 1.58, '400094482629', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (610853733, 'Fresh Earth Greens Organic Romaine, 7 oz', 3.96, '818431001479', 'Bring the refreshing taste of Earth Greens Organic Romaine to your home. This package includes individual organic romaine leaves that are washed and ready to eat. These romaine leaves are perfect for a variety of healthy and delicious meals. You can use them to whip up a classic Caesar salad with all the fixings or let your creativity run wild. You can also use them to make lettuce wraps filled with all your favorite fillings or top your favorite sandwich or burger. The possibilities are endless with Earth Greens Organic Romaine.', 'Earth Greens Organic Romaine Wholesome, versatile, and delicious Washed and ready to use right out of the package Great for salads, burgers, sandwiches, wraps and more Package features a peel and resealable film to keep your lettuce leaves fresh and crisp Healthy + organic = happy', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c2852226-c86d-4b73-8cef-9ebc699dae7b.460ce8b13ff54834b19a953d1f1dd9cb.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c2852226-c86d-4b73-8cef-9ebc699dae7b.460ce8b13ff54834b19a953d1f1dd9cb.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c2852226-c86d-4b73-8cef-9ebc699dae7b.460ce8b13ff54834b19a953d1f1dd9cb.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (611231687, 'Fresh Red Seedless Grapes 32oz', 3.96, 'deleted_813526010039', 'short description is not available', 'Fresh Red Seedless Grapes 32oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (611976118, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094280720', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (612026155, 'Fresh Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094357415', 'Fresh Grown Yellow Nectarines, 1 Lb.', 'Fresh Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (612072269, 'Vegetable Tray with Meat And Cheese 38oz', 11.97, '824682200264', 'Introducing our mouthwatering Taylor Farms Vegetable Plastic Tray, a perfect blend of fresh, wholesome ingredients to satisfy your taste buds and nutritional needs. This bountiful platter features crisp broccoli florets, juicy grape tomatoes, creamy cheese cubes, savory turkey bites, crunchy celery sticks, and tender baby carrots. Paired with an irresistible Hidden Valley Ranch dipping sauce, our Vegetable Tray is the ultimate choice for parties, picnics, or a nutritious snack. Relish the delightful harmony of flavors and textures while enjoying the benefits of fresh, quality produce.', 'Vegetable Tray With Meat And Cheese 38oz Introducing our mouthwatering Vegetable Tray, a perfect blend of fresh, wholesome ingredients to satisfy your taste buds and nutritional needs. This bountiful platter features crisp broccoli florets, juicy grape tomatoes, creamy cheese cubes, savory turkey bites, crunchy celery sticks, and tender baby carrots. Paired with an irresistible Hidden Valley Ranch dipping sauce, our Vegetable Tray is the ultimate choice for parties, picnics, or a nutritious snack. Relish the delightful harmony of flavors and textures while enjoying the benefits of fresh, quality produce.', 'Taylor Farms', 'https://i5.walmartimages.com/asr/56db25ff-fc26-4979-a8f4-b062b76483b1.72f5ed19b5e8244429f0788c76dedaf5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56db25ff-fc26-4979-a8f4-b062b76483b1.72f5ed19b5e8244429f0788c76dedaf5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56db25ff-fc26-4979-a8f4-b062b76483b1.72f5ed19b5e8244429f0788c76dedaf5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (612841308, 'Earthbound Farm® Organic 50/50 10oz Tray', 4.39, '032601900199', 'Two tender and tasty salad favorites combined: spring mix with extra baby spinach.', 'Organic Salad Organic Lettuce Blend', 'EARTHBOUND FARM', 'https://i5.walmartimages.com/asr/2278b6ae-5a36-4aed-b172-aad5d9f93c7f.66bfb16295376ce3974e7133bc327e16.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2278b6ae-5a36-4aed-b172-aad5d9f93c7f.66bfb16295376ce3974e7133bc327e16.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2278b6ae-5a36-4aed-b172-aad5d9f93c7f.66bfb16295376ce3974e7133bc327e16.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (612936029, 'Fieldpack Unbranded Mixed Bell Pepper 3 Pack', 1.98, 'deleted_813155020966', 'short description is not available', 'Fieldpack Unbranded Mixed Bell Pepper 3 Pack', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (613169588, 'Cucumber', 0.62, '405715530628', 'short description is not available', 'Cucumber', 'Fresh Produce', 'https://i5.walmartimages.com/asr/64ac631d-ca9a-4ee2-942f-e967ddb9ade6.3f9e01e8e573840eeaeda602b500df0e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/64ac631d-ca9a-4ee2-942f-e967ddb9ade6.3f9e01e8e573840eeaeda602b500df0e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/64ac631d-ca9a-4ee2-942f-e967ddb9ade6.3f9e01e8e573840eeaeda602b500df0e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (613440053, 'Cucumber Hothouse', 1.22, 'deleted_816426010338', 'short description is not available', 'Cucumber Hothouse', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (613718350, 'Fresh Banana, Guineos Maduros 3lbs Package', 3.57, '856552006386', 'Our fresh and delicious bananas are the perfect addition to your daily diet. High in potassium and fiber, these bananas will give you a natural energy boost that will keep you going all day long. Great as a healthy snack or in smoothies and desserts. Our bananas are sourced from trusted farms and are carefully handpicked to ensure the highest quality. Order now for a tasty and nutritious snack!', 'Sweet, tropical flavor Enjoy at breakfast, lunch, dessert, or when you want a snack Good source of potassium, vitamin B6 and vitamin C and low in sodium Make banana bread or banana pudding and enjoy with a hot cup of coffee Peel open and enjoy', 'Fresh Produce', 'https://i5.walmartimages.com/asr/816648b2-6f37-4601-8181-40a1004f452a.d59cb573f23290b8b7aac66b6001272c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/816648b2-6f37-4601-8181-40a1004f452a.d59cb573f23290b8b7aac66b6001272c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/816648b2-6f37-4601-8181-40a1004f452a.d59cb573f23290b8b7aac66b6001272c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (613842125, '180pc Pto Rst 10# Bm', 799.2, '400094860557', 'short description is not available', '180pc Pto Rst 10# Bm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (614565629, '125pc Pto Idaho 8#', 802.5, '405551645951', 'short description is not available', '125pc Pto Idaho 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (614760120, '180pc Pto Rst 10#2', 889.2, '405500082585', 'short description is not available', '180pc Pto Rst 10#2', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (614933879, 'Walmart Produce Freshly Chopped Green Onions', 2.58, 'deleted_030223022374', 'short description is not available', 'Walmart Produce Freshly Chopped Green Onions', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (615090103, 'Fuji Apples 3 Lb Bag', 4.38, 'deleted_882648000297', 'short description is not available', 'Fuji Apples 3 Lb Bag', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (615219547, 'Services Reduced Program Dept 94', 0.01, '251706000003', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (615226267, 'Strawberry/blueberry Blend 10oz', 6.97, '045009891198', '10oz Strawberry / Blueberry blend', 'A 10oz container of cut & washed strawberry and blueberries', 'Unbranded', 'https://i5.walmartimages.com/asr/6a7b7327-141c-4969-a1d0-a2e4311512f9.19c70fdbaeb5c2099c07484db5f1cd27.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a7b7327-141c-4969-a1d0-a2e4311512f9.19c70fdbaeb5c2099c07484db5f1cd27.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a7b7327-141c-4969-a1d0-a2e4311512f9.19c70fdbaeb5c2099c07484db5f1cd27.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (615326756, 'Sweet Cherry Tomato - 2\" x 3\" Pot -Sweet/Intense Flavor', 4.99, '810046277201', 'CHERRY TOMATO: A cherry tomato is a smaller garden variety of tomato. It is popular as a snack and in salads. Cherry tomatoes range in size from a thumbtip up to the size of a golf ball, and can range from being round to slightly oblong in shape. The more oblong ones often share characteristics with plum tomatoes, and are known as grape tomatoes.', 'Flavor is sweet and intense, packed into small, red, round fruits Large sweet cherry tomatoes Indeterminate Easy to grow', 'Hirt\'s Gardens', 'https://i5.walmartimages.com/asr/db00f0cf-7f0b-48c2-bc6e-66f33efa366b_1.4cb67e7a799049964542214387c04d38.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/db00f0cf-7f0b-48c2-bc6e-66f33efa366b_1.4cb67e7a799049964542214387c04d38.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/db00f0cf-7f0b-48c2-bc6e-66f33efa366b_1.4cb67e7a799049964542214387c04d38.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (615408235, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094950159', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (615761374, 'Fresh Pineapple', 2, 'deleted_095829816178', 'short description is not available', 'Fresh Pineapple', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (616167357, 'NATURAURA - Dried Morel Mushrooms (Morchella Conica) Fresh Flavor, Nutritious, Gourmet Morel Mushrooms 3-4inch Size (2 Ounces)', 27.99, '718910898807', 'NATURAURA works with purveyors from all around the globe to bring you the freshest and finest quality herbs, dried goods, teas, and more! Morchella Mushrooms (Morels) are extremely fragrant and smokey mushrooms that are perfect for soups and other dishes. High in potassium, vitamins, and a wonderful source of Vitamin D. Did you know Morel Mushrooms are known to contain the HIGHEST amounts of Vitamin D out of all edible mushrooms? Yum. - Extremely Fresh & Fragrant Dried Morchella Mushrooms - Morels - Premium Quality Morel Mushrooms - Morchella Mushrooms - Morels contain the HIGHEST amount of -VITAMIN D in ALL edible mushrooms! - Morels are non-GMO, Kosher, & Gluten Free without certification in accordance to CRC Guidelines - High in Vitamins, Potassium, and a great source of Vitamin D', 'Morel Mushrooms are rarely grown commercially, making them a seasonal product generally found in the spring time. You will find morel mushrooms growing by the river beds, forest floors, or in forests that have been in recent fires. We saved you the foraging trip to bring to you morel mushrooms that are expertly dried, extremely fragrant, & naturally delicious. Premium Quality Morel Mushrooms - Morchella Mushrooms are a great source of natural vitamins, and make for a great meat-replacement Did you know? Morel Mushrooms contain the HIGHEST amount of VITAMIN D in ALL edible mushrooms - eating healthy never tasted this good! Yummy! Morels are non-GMO, Kosher, & Gluten Free without certification in accordance to CRC Guidelines - Premium Grade Morels are Packed & Inspected in our California facility. High in Vitamins, Potassium, and a great source of Vitamin D - Eat as many morels as you\'d like, without the guilt!', 'NATURAURA', 'https://i5.walmartimages.com/asr/904c7d3b-c279-4ac0-8aa1-66448c45b5aa.8d6dfb324ae7812036007c0dbec46c2e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/904c7d3b-c279-4ac0-8aa1-66448c45b5aa.8d6dfb324ae7812036007c0dbec46c2e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/904c7d3b-c279-4ac0-8aa1-66448c45b5aa.8d6dfb324ae7812036007c0dbec46c2e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (616410482, 'Prico Mango Trozado 20oz', 7.67, '687398561025', 'Prico Mango Chunks are the perfect way to add some island fruit sweetness to your day. These mango chunks are perfect for making homemade smoothies or for snacking on between meals for a quick pick me up. You can serve this fruit plain or with fresh whipped cream, vanilla and nutmeg. You can also add these delicious juicy mango chunks to fruit salads, ice cream, yogurt or milkshakes. You can also use these as a special treat to be served with cereal, pancakes or waffles.', 'Pre-portioned for easy snacking Freshly cut ripe mango Plastic container made with removable lid for easy storage', 'Prico', 'https://i5.walmartimages.com/asr/198df69a-a186-4dba-8223-ae3de1473bde.f55165bb69340aa0827892a39a6c0126.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/198df69a-a186-4dba-8223-ae3de1473bde.f55165bb69340aa0827892a39a6c0126.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/198df69a-a186-4dba-8223-ae3de1473bde.f55165bb69340aa0827892a39a6c0126.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (617209032, 'Fresh Whole Organic Grape Tomato, 10 oz Package', 2, '606105000008', 'Fresh Whole Organic Grape Tomatoes are an exciting summer treat, and they\'re the perfect size for skewers, salads and roasting. These bite-sized grape tomatoes look and taste great. Grape tomatoes are a low-calorie treat that are also low in sodium and are a good source of fiber. Whether you are snacking or adding them to your favorite dish. their uses are almost limitless. Try these grape tomatoes with feta cheese, fresh dill, and a drizzle of olive oil for a light and delicious Mediterranean treat. Or make a caprese salad with grape tomatoes, fresh basil, fresh mozzarella, and balsamic vinegar. With 10-ounces of tomatoes in each package, you\'ll have plenty to make mouthwatering meals. Use your imagination to create delicious dishes with Fresh Whole Organic Grape Tomatoes.', 'Fresh Whole Organic Grape Tomato, 10 oz Package Perfect size for skewers, salads and roasting Low-calorie, low in sodium, and a good source of fiber Pair with feta cheese, fresh dill, and a drizzle of olive oil for a Mediterranean dish Make a caprese salad with grape tomatoes, fresh basil, fresh mozzarella, and balsamic vinegar USDA certified organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/96a8b70c-a560-4f53-9d61-a047584fa928.89b2eb39193705694743a3cea6910d4c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96a8b70c-a560-4f53-9d61-a047584fa928.89b2eb39193705694743a3cea6910d4c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96a8b70c-a560-4f53-9d61-a047584fa928.89b2eb39193705694743a3cea6910d4c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (617433440, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094144992', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (617730761, 'Yellow Flesh Peaches, per Pound', 1.58, '400094706411', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (617736167, 'Yellow Onions, 3 Lb.', 1.94, 'deleted_400094228814', 'Yellow Onions, 3 Lb.', 'Yellow Onions 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (617772292, 'Services Reduced Program Dept 94', 0.01, '251667000005', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (618197968, 'Straw Bale', 6.66, '853647001400', 'short description is not available', 'Straw Bale', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (618697047, 'Vary-berry Mixed Berries, 10oz Clam', 8.97, '761635207201', 'Presentation: 10-ounce package of mixed berries (raspberries, blueberries, blackberries, or other berries) from the brand Sun Belle. For a serving of approximately 142 g (1 cup): 60 kcal, carbohydrates 15 g, fiber 6 g, sugar 9 g, sodium 0 mg. Cholesterol-free, low in fat, with negligible sodium. Ideal for consumption as a fresh snack, added to yogurts, salads, smoothies, or as part of light meals. Provides dietary fiber, which promotes a feeling of fullness and helps incorporate fresh fruit into the daily diet. The Sun Belle brand highlights that its berries are “a rich source of antioxidants.', 'Variety Pack of 10oz Fresh Raspberries, blueberries, blackberries. Produce of USA, Canada, Mexico, Chile, Peru, Guatemala. Cholesterol-free Low in fat With negligible sodium', 'Sun Belle', 'https://i5.walmartimages.com/asr/b3e6426d-c590-457c-bc98-e16d2fbbbc91.3ab14bd91037e4132d8bf0e7e31c3880.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3e6426d-c590-457c-bc98-e16d2fbbbc91.3ab14bd91037e4132d8bf0e7e31c3880.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3e6426d-c590-457c-bc98-e16d2fbbbc91.3ab14bd91037e4132d8bf0e7e31c3880.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (619403813, 'Emmivansfoods Gorontula Dried Fruits Snot Apple 100% Natural,8oz', 20.99, '880007667419', 'Gorontula Fruit , Azanza Garcheana , African Chewing Gum , Snot Apple, Dried Goron tula Fruit, Nigerian Silky Kola, matobwe . It is sweet and chewy ,It can be eating raw , that is why it is also called African chewing gum. It can be soaked to soften before eating or boiled in hot water to make jelly. Can be 20- 30 gorontula fruits in a pack.', 'Gorontula Seed is also called African chewing gum. It is sweet and chewy, It can be eaten raw. It can be soaked to soften before eating. Can be 20- 30 gorontula fruits in a pack. Gorontula Seed is boiled in hot water to make jelly. Emmivansfoods Gorontula seeds are 100% Natural. Emmivansfoods is packaged in a resealable 8oz pouch.', 'Emmivansfoods', 'https://i5.walmartimages.com/asr/4d24af19-078c-4cbb-9dd7-d0d6d2ab3c2a.c3e79b41a52c39d84eab23ebb3d12ac0.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4d24af19-078c-4cbb-9dd7-d0d6d2ab3c2a.c3e79b41a52c39d84eab23ebb3d12ac0.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4d24af19-078c-4cbb-9dd7-d0d6d2ab3c2a.c3e79b41a52c39d84eab23ebb3d12ac0.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (619814360, 'TOMATORRRRRRRRRRRRRR', 1.98, '091234000096', 'TOMATORRRRRRRRRRRRRR', '', '', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (620485217, 'Services Reduced Program Dept 94', 0.01, '251711000005', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (621305637, 'Fresh Little Gem Lettuce', 2.98, '885460000407', 'Introducing Fresh Little Gem Lettuce, a delightful and versatile green that adds a touch of gourmet flair to your salads and dishes. This petite lettuce variety features crisp, tender leaves with a sweet, buttery flavor, making it a perfect addition to any meal. Rich in vitamins and minerals, Fresh Little Gem Lettuce offers an array of health benefits. Enjoy this vibrant, fresh produce in salads, wraps, or as a garnish, and elevate your culinary creations with the exquisite taste and texture of Little Gem Lettuce.', 'Fresh Fieldpack Unbranded Little Gem Lettuce Introducing Fresh Little Gem Lettuce, a delightful and versatile green that adds a touch of gourmet flair to your salads and dishes. This petite lettuce variety features crisp, tender leaves with a sweet, buttery flavor, making it a perfect addition to any meal. Rich in vitamins and minerals, Fresh Little Gem Lettuce offers an array of health benefits. Enjoy this vibrant, fresh produce in salads, wraps, or as a garnish, and elevate your culinary creations with the exquisite taste and texture of Little Gem Lettuce.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ea763c4c-16c3-4754-a598-8823cb779812.db9b725bf3095b1ee55e8a0f73404aa8.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea763c4c-16c3-4754-a598-8823cb779812.db9b725bf3095b1ee55e8a0f73404aa8.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ea763c4c-16c3-4754-a598-8823cb779812.db9b725bf3095b1ee55e8a0f73404aa8.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (621462928, 'Red Boil In Bag Potatoes 3lb', 4.24, 'deleted_605806003820', 'Fresh Red Boil In Bag Potatoes', 'Ready to Boil, Bake or Mash Red potatoes. Just remove the tag and boil right in the food safe mesh bag.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a278588f-4b7c-46d8-9662-2c9d58f958a0.000d5d67ae5f8b862773629fb2a6dc5e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a278588f-4b7c-46d8-9662-2c9d58f958a0.000d5d67ae5f8b862773629fb2a6dc5e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a278588f-4b7c-46d8-9662-2c9d58f958a0.000d5d67ae5f8b862773629fb2a6dc5e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (621496806, 'Grape Tomato, 10 oz Package', 2.23, 'deleted_059749964012', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (621497000, 'Mann\'s Fresh Green Beans Veggie Sides, 7.8 oz', 3.97, '716519009839', 'Elevate mealtime with the Mann\'s Green Beans Veggie Sides. Made with charred onions and bacon sauce, this side of veggies is a perfect addition to your meals. Pair them with a perfectly cooked steak and potatoes for a delicious meal that will have you feeling like you dined at the best steakhouse in town. You can also serve them with grilled chicken, rolls, and sweet potatoes for a well-rounded dinner your friends and family is sure to love. In just three minutes, you can be enjoying the delicious taste of these green beans. Simply place the bag in the microwave, microwave on high for three minutes, stir until combined, and enjoy. Complete your meals with the Mann\'s Green Beans Veggie Sides.', 'Greens beans with charred onions and bacon sauce Pair with steak and potatoes for a mouthwatering meal Serve with grilled chicken, rolls, and sweet potatoes for a well-rounded meal Ready in just 3 minutes Perfect addition to your meals', 'Unbranded', 'https://i5.walmartimages.com/asr/49aafce9-ae03-41be-94a4-dded974626db.3faf663acc1cf07340c4f9b88a196163.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/49aafce9-ae03-41be-94a4-dded974626db.3faf663acc1cf07340c4f9b88a196163.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/49aafce9-ae03-41be-94a4-dded974626db.3faf663acc1cf07340c4f9b88a196163.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (622057236, 'Fresh Blackberries, 12 oz. Container', 4.84, '033383240015', 'The sweet, juicy flavor of Fresh Blackberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes or yogurt, bake them into mouthwatering blackberry cobbler, mix them with other fruit for a light and flavorful salad, or add them to a creamy smoothie. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin K and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them with cool water and enjoy the fresh taste. Refrigerate the berries to keep them fresh and ready for use. Pick up a Fresh Blackberry container today and savor the delectable flavor.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Blackberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Blackberries are plump, juicy, and bursting with natural sweetness. The versatility of blackberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these tasty gems into your baking endeavors, whether it\'s cobblers, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are blackberries delicious, but they also offer an array of health benefits. Loaded with vitamins and dietary fiber, blackberries are are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Blackberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness.', 'Multiple Suppliers', 'https://i5.walmartimages.com/asr/f3be97b4-beed-464f-8cd4-b09b3127f463.2a64e25bc7eb923e6f0b730a7184fb5c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3be97b4-beed-464f-8cd4-b09b3127f463.2a64e25bc7eb923e6f0b730a7184fb5c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3be97b4-beed-464f-8cd4-b09b3127f463.2a64e25bc7eb923e6f0b730a7184fb5c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (622131376, 'Watermelon Seedless', 4.48, '400094994030', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/76efd2b8-5fe8-449c-8c36-12c0b1cedbc7.3368806e6c74c9618f1c6305a5b16339.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/76efd2b8-5fe8-449c-8c36-12c0b1cedbc7.3368806e6c74c9618f1c6305a5b16339.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/76efd2b8-5fe8-449c-8c36-12c0b1cedbc7.3368806e6c74c9618f1c6305a5b16339.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (622534121, 'Demi Long Shallots 12.3 Oz Box', 2.44, '', 'short description is not available', 'Demi Long Shallots 12.3 Oz Box', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (622549887, 'Roma Tomato, Each', 5.98, 'deleted_729062990448', 'With Fresh Roma Tomatoes from Walmart, it\'s easy to make a wholesome, delicious meal. Roma tomatoes are a fresh produce ingredient for whipping up a variety of wonderful dishes. You can use them to create a zesty tomato sauce for stirring into a homemade pasta dish, crush them up to make a delightful Roma tomato bruschetta, or simply enjoy them on their own as a nutritious snack or as a party platter option for dipping in your favorite vegetable dipping sauce. If you\'re feeling a classic tomato dish, Roma tomatoes can even lend themselves in making a comforting and appetizing tomato soup or a flavorful salsa. However you choose to use them, each Roma tomato will add stunning flavor to your meal. Just find the recipe and experience the tasty results for yourself! Elevate your recipes with Roma Tomatoes.', 'Roma Tomato, Each: Wholesome, versatile, and delicious Rich, juicy flavor in each bite Ideal ingredient for a variety of dishes Use to make pasta sauce, tomato soup, or fresh salsa Make a tasty pesto or bruschetta to serve at your next dinner party Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f860752-38f8-43a5-96b7-afda3b890630.59821395b55a4259f90cc71edfa15258.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (623075829, 'Watermelon Seedless', 4.48, '400094927175', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (623254417, 'Bonnie Plants Napa Grape Tomato 5\"', 4.18, '715339723017', 'short description is not available', 'Bonnie Plants Napa Grape Tomato 5\"', 'Bonnie Plants', 'https://i5.walmartimages.com/asr/eeb32f3b-1e37-446b-928e-570015aaf211.965f24f33a62008eceed63a88f10779a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eeb32f3b-1e37-446b-928e-570015aaf211.965f24f33a62008eceed63a88f10779a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eeb32f3b-1e37-446b-928e-570015aaf211.965f24f33a62008eceed63a88f10779a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (623782402, 'Fieldpack Unbranded Romaine Lettuce', 1.98, 'deleted_405965264403', 'short description is not available', 'Fieldpack Unbranded Romaine Lettuce', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (623822970, 'Ready Pac Foods Bistro Chopped Bacon Caesar Salad Kit', 3.63, '077745255705', 'This indulgent take on a classic Chopped Caesar Salad is made with the freshest and tastiest ingredients, including real bacon. Starting with a base of crisp chopped Romaine lettuce, this complete salad kit includes savory Bacon pieces, shredded Parmesan Cheese, crisp Garlic Croutons, and creamy Caesar Romano Dressing. Enjoy on its own or add your favorite protein to make a complete meal in minutes!', 'Ready Pac Bistro Chopped Bacon Caesar Salad Kit , 10.55 oz (299 g) Only 170 calories per 1 cup serving Contains dairy and wheat Low in sugar (only 1g per 1 cup serving) Low in carbohydrates (only 5 g per 1 cup serving) Made with fresh, healthy vegetables such as romaine lettuce Combines healthy vegetables with Real Bacon and Caesar Romano Dressing Packed in a breathable bag for freshness Keep refrigerated and use within two days of opening Thoroughly washed Comes in other delicious varieties such as Savory Steakhouse, Sweet Kale and Kickin\' Southwest', 'Ready Pac Foods', 'https://i5.walmartimages.com/asr/087dc12c-31ee-4def-88b7-d04f716a10f6.9081fa4574910aa60b2ad75b714621c7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/087dc12c-31ee-4def-88b7-d04f716a10f6.9081fa4574910aa60b2ad75b714621c7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/087dc12c-31ee-4def-88b7-d04f716a10f6.9081fa4574910aa60b2ad75b714621c7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (623879285, 'Tasteful Selections Sunburst Blend Potato 24oz', 4.47, '826088526139', 'Creamy textures and tender skins, create this blend’s flavor fusion. The union of two of our two most popular varieties has created this great potato offering, Sunburst Blend™ potatoes! Creamy textures and tender skins create this blend’s flavor fusion that will satisfy your household. Copy right Tasteful selection', 'Bite size, Sunburst Blend Potato 24oz', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/0ba28d06-811a-4c6a-a1ad-f36de3524633.411f311c337acea1b041b7519ae24da5.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ba28d06-811a-4c6a-a1ad-f36de3524633.411f311c337acea1b041b7519ae24da5.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ba28d06-811a-4c6a-a1ad-f36de3524633.411f311c337acea1b041b7519ae24da5.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (623928989, '75pc Orange Navel 8#', 589.5, '400094585290', 'short description is not available', '75pc Orange Navel 8#', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (624056368, 'Clementines, 3 lb', 3.54, 'deleted_858410005135', 'Clementines, 3 lb', 'Clementines, 3 lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/41346d9b-ddc1-41a7-8093-35edc68c44fb_1.be72592d1d838c1dc7b156278cba3e1c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41346d9b-ddc1-41a7-8093-35edc68c44fb_1.be72592d1d838c1dc7b156278cba3e1c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41346d9b-ddc1-41a7-8093-35edc68c44fb_1.be72592d1d838c1dc7b156278cba3e1c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (624220613, 'Marketside Classic Cole Slaw, 16 oz', 1.57, '681131221566', 'Marketside Classic Cole Slaw is made with green cabbage that shredded to perfection, and has a great fresh taste. This cole slaw is packed fresh, washed and ready to eat for your convenience. This shredded green cabbage is great as an ingredient, topping or garnish in your favorite recipes. Use it as a topping on sandwiches and tacos, or add it to an Asian-style stir fry. Mix this slaw with mayonnaise, celery and shredded carrots to create an all-American classic. Serve prepared slaw with barbecue chicken and bread rolls for a classically delicious meal the whole family will savor. Enjoy fresh from the farm taste with Marketside Classic Cole Slaw.Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Classic Cole Slaw, 16 oz:Great for tacos, cole claw and saladsWashed and ready to eat20 calories per servingNet weight 1 lb', 'Marketside', 'https://i5.walmartimages.com/asr/794c8db9-ee86-4dc6-93d9-81cd36df2226_2.c0fae51c4e8f72d448cd98ffac7d19be.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/794c8db9-ee86-4dc6-93d9-81cd36df2226_2.c0fae51c4e8f72d448cd98ffac7d19be.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/794c8db9-ee86-4dc6-93d9-81cd36df2226_2.c0fae51c4e8f72d448cd98ffac7d19be.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (624343095, '200pc Pto Ykn/red 5#', 1044, '405565978885', 'short description is not available', '200pc Pto Ykn/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (624630985, '75pc Orange Navel 8#', 598, '405790695670', 'short description is not available', '75pc Orange Navel 8#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (624730307, 'Watermelon Seedless', 4.98, '405504835781', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (624958400, '100pc Pto Idaho 10#', 597, '405500363196', 'short description is not available', '100pc Pto Idaho 10#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (624997952, 'Walmart Produce Freshly Diced Yellow Onions', 2.58, 'deleted_030223022367', 'short description is not available', 'Walmart Produce Freshly Diced Yellow Onions', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (625100074, 'Freshness Guaranteed Watermelon 32 Oz', 7.36, 'deleted_681131036672', 'short description is not available', 'Freshness Guaranteed Watermelon 32 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (625203089, 'Ancho Hot Pepper', 1.98, '000000047074', 'short description is not available', 'Ancho Hot Pepper', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (625928947, 'Field & Farmer - Dip Vegan Queso, 8oz | Pack of 6', 3.68, '854241007829', 'BIG FLAVOR from SMALL FARMS. This is nacho standard queso (see what I did there?). This creamy plant-based queso has just enough fire for an authentic queso kick but good-for-you ingredients like cannellini beans, cauliflower, and turmeric. Pairs perfectly with tortilla chips and a cold cerveza. Junk-free, plant-full.', '8 oz Party Dip, Vegan Queso Nut Free. Dairy Free. Allergen Free. Non GMO. Big flavor from small farms. Plant based. No preservatives. Get a Taste of This: We made this delicious dip using plant grown on small farms-like Carlson-Arbogast Farm in Michigan. fieldandfarmer.co.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2eae7cd9-7767-46a5-9b80-d1fd5e61a868.b25c9905f51e43bafa6630804932a7fe.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2eae7cd9-7767-46a5-9b80-d1fd5e61a868.b25c9905f51e43bafa6630804932a7fe.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2eae7cd9-7767-46a5-9b80-d1fd5e61a868.b25c9905f51e43bafa6630804932a7fe.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (626779738, 'Granny Smith Apples 3 Lb Bag', 3.94, '899734002479', 'short description is not available', 'Granny Smith Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (626983129, 'Crisply Spring Greens Mixed Salad, 5 oz', 3.48, '857951008025', 'Eden Green Crisply Spring Greens Mixed Salad, 5 Oz.', 'Crisply Spring Greens Mixed Salad, 5 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/27183e09-6e55-45a4-9f05-4b710e9f70c1_3.b7f87d5c7808589c6861082d16204d9d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/27183e09-6e55-45a4-9f05-4b710e9f70c1_3.b7f87d5c7808589c6861082d16204d9d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/27183e09-6e55-45a4-9f05-4b710e9f70c1_3.b7f87d5c7808589c6861082d16204d9d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (627028986, '192pc On Swt 3# Pe', 788, '405534206452', 'short description is not available', '192pc On Swt 3# Pe', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (627455471, 'Hot House Cucumber', 1.38, 'deleted_885773000705', 'Enjoy the fresh, crisp, delicious flavor of English Cucumber. Packed with nutritional benefits such as being naturally low in calories, carbohydrates, sodium, fat, and cholesterol, cucumbers also provide potassium, fiber, and vitamin C and clock in at a cool 16 calories per cup. Use this cucumber to make healthy treats such as a cucumber salad with tomatoes and onions in a vinaigrette dressing, toss with fresh mozzarella, tomatoes, and a drizzle of balsamic vinegar, mix diced cucumbers with Greek yogurt, lemon, dill, and garlic for a refreshing tzatziki sauce for gyros or veggies, add to a crisp, fresh veggie salad, or thinly slice and add to a vinegar brine for quick pickles. Any way you slice, dice, or spiralize them, English Cucumber is a refreshing, healthy addition to any meal.', 'English Cucumber, 1 Each: Single cucumber Crisp, delicious, and refreshing Naturally low in calories, carbohydrates, sodium, fat, and cholesterol Provides potassium, fiber, and vitamin C, among other nutrients Create delicious recipes with this fresh cucumber', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/a7d339de-3af8-45cd-bc69-86a17cd5d73a_1.14fce5b7065225996e0144b2dbd78305.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a7d339de-3af8-45cd-bc69-86a17cd5d73a_1.14fce5b7065225996e0144b2dbd78305.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a7d339de-3af8-45cd-bc69-86a17cd5d73a_1.14fce5b7065225996e0144b2dbd78305.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (627993635, 'Shrink Cap | Shortbread w/Large Midnight Black Grapes (100/Pack)', 29.95, '776982330939', 'Elevate Your Wine Experience with Our European Crafted Shrink Caps Enhance Bottle Presentation and Ensure Freshness with Our Shrink Caps! Our Premium Shrink Caps are the perfect addition to any wine bottle, combining elegance with functionality. These caps, expertly crafted in Europe, not only enhance the visual appeal of your bottles but also play a crucial role in maintaining the cork\'s integrity. Our shrink caps are ideal for winemakers, wine enthusiasts, or those who love to gift homemade wine. They are a simple yet effective way to elevate your wine\'s presentation and ensure freshness. Key Features: High-Quality Material:Manufactured in Europe, guaranteeing premium quality and durability. Universal Fit:Designed to fit 375ml, 750ml, and 1500ml wine bottles perfectly. Easy Tear-Off Design:Facilitates a smooth bottle-opening experience. Precise Dimensions:Measuring 30.5mm x 55mm for a flawless fit. Elevated Presentation:Adds a sophisticated touch to any wine bottle. Usage Guide: Slide the Cap:Place the shrink cap over the neck of the wine bottle. Apply Heat:Use a heat gun or steam to shrink the cap around the bottleneck securely. Tear & Pour:Enjoy the easy tear-off design for quick access to your wine. FAQs: Q:Can these shrink caps be used for beverages other than wine?A:They are versatile for any bottled beverage with compatible dimensions. Q:How resistant are these caps to external factors like moisture?A:Crafted with high-quality materials, they resist moisture and other external elements effectively. Q:Are special tools required for application?A:A heat gun or steam source is needed to secure the cap\'s shrinking. Q:Do these caps leave any residue upon removal?A:No, they are designed for clean and residue-free removal.', 'High-Quality Corks and Stoppers for Wine Bottles – Designed to provide a secure seal, preserving the freshness and flavor of your wine with every use. Perfect for Home and Professional Winemakers – Whether for DIY projects or commercial bottling, our corks and stoppers ensure reliable performance and a professional finish. Durable and Easy to Use – Made from premium materials, our wine corks and stoppers are easy to insert and remove, making them ideal for sealing and storing your homemade beverages.', 'ABC Cork', 'https://i5.walmartimages.com/asr/b0f71f2a-8eb6-4f89-a7ac-8f23f9209edc.ba6624c8814ddb31a9b5ff2487e57e72.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b0f71f2a-8eb6-4f89-a7ac-8f23f9209edc.ba6624c8814ddb31a9b5ff2487e57e72.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b0f71f2a-8eb6-4f89-a7ac-8f23f9209edc.ba6624c8814ddb31a9b5ff2487e57e72.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (628137129, 'Watermelon Seedless', 4.98, '405504819415', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (628304633, 'Marketside Green Beans 12 Oz', 2.78, 'deleted_405519014768', 'short description is not available', 'Marketside Green Beans 12 Oz', 'Marketside', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (628308962, 'Idaho Potatoes, 10 Lb.', 5.47, 'deleted_826088536121', 'Idaho Potatoes, 10 Lb.', 'Idaho Potatoes 10 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (628761887, 'Mclane Company Oranges, 1 Each', 0.82, '717524802200', 'Mclane Company Oranges, 1 Each', 'Mclane Company Oranges', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (628914959, 'Yellow Flesh Peaches, per Pound', 1.58, '400094705155', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (629166678, '90pc Pto Rst 10# Nv', 444.6, '405530518399', 'short description is not available', '90pc Pto Rst 10# Nv', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (629900424, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, 'deleted_400094093832', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (629928378, '256pc On Ylw 3# Jc', 496.64, '405564999423', 'short description is not available', '256pc On Ylw 3# Jc', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (630252912, 'Lemon Plum, Each', 2.08, '000000044424', 'Introducing the delightful Lemon Plum - a unique and exotic fruit that brings together the refreshing tanginess of lemons and the luscious sweetness of plums. This extraordinary hybrid fruit is a must-try for fruit enthusiasts and culinary adventurers alike! Lemon plums boast a vibrant yellow color that gradually develops a rosy blush as they ripen, adding a striking visual appeal to your fruit bowl. Their shape is a beautiful blend of both parent fruits, featuring an elongated, slightly curved form that tapers to a point. This eye-catching appearance will surely spark conversation and pique the interest of your guests.', 'Introducing the delightful Lemon Plum Bag - a unique and exotic fruit that brings together the refreshing tanginess of lemons and the luscious sweetness of plums. This extraordinary hybrid fruit is a must-try for fruit enthusiasts and culinary adventurers alike! Lemon plums boast a vibrant yellow color that gradually develops a rosy blush as they ripen, adding a striking visual appeal to your fruit bowl. Their shape is a beautiful blend of both parent fruits, featuring an elongated, slightly curved form that tapers to a point. This eye-catching appearance will surely spark conversation and pique the interest of your guests.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3bcb14c8-df32-4d53-bad6-1fe780b58de8.2fcc049fef4aa1380bedbd5216534e71.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3bcb14c8-df32-4d53-bad6-1fe780b58de8.2fcc049fef4aa1380bedbd5216534e71.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3bcb14c8-df32-4d53-bad6-1fe780b58de8.2fcc049fef4aa1380bedbd5216534e71.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (630335285, 'Green Seedless Grapes, per lb', 2.88, '400094147856', 'short description is not available', 'Fresh Green Seedless Grapes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e3493b51-d859-4499-8a4f-985e8a281558.ec2345597c4287be07085da9c7d01d62.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3493b51-d859-4499-8a4f-985e8a281558.ec2345597c4287be07085da9c7d01d62.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3493b51-d859-4499-8a4f-985e8a281558.ec2345597c4287be07085da9c7d01d62.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (630487784, '180pc Apl Gala/fuji', 620.1, '405667295903', 'short description is not available', '180pc Apl Gala/fuji', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (631078114, 'Large Bagged Oranges', 8.73, '', 'short description is not available', 'Large Bagged Oranges', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (631413091, 'Fresh Cherry Hot Peppers', 3.48, '000000047227', 'short description is not available', 'Fresh Cherry Hot Peppers', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (631442829, 'Organic Celery Stalk, 1 Each', 1.76, '073574800222', 'Organic Celery Stalk, 1 Each', 'Organic Celery Stalk', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (631930464, 'Fresh Navel Oranges, 10 lb Box', 9.98, 'deleted_605049458340', 'Fresh Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 4 lb package.', 'A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/77ccdb68-c4ce-4a9b-a736-d037261fdd23.e4e420e90c7aebc4cf66591b6353dcb5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77ccdb68-c4ce-4a9b-a736-d037261fdd23.e4e420e90c7aebc4cf66591b6353dcb5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77ccdb68-c4ce-4a9b-a736-d037261fdd23.e4e420e90c7aebc4cf66591b6353dcb5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (632329174, 'Watermelon Seedless', 4.98, '400094255483', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (632531299, 'Black Futsu Bumpy Pumpkin', 3.98, '823298001616', 'short description is not available', 'Black Futsu Bumpy Pumpkin', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (632761463, 'Yellow Yam Root Whole Fresh, Each', 3.28, '000000032759', 'Create something delicious with this fresh Yellow Yam. Yam is a versatile root that may be prepared like a potato. Commonly used in tropical regions, this yam should be peeled and cooked before eaten. Name yams can be cooked in a variety of ways, such as mashed, baked, boiled, fried, and more. Use it to make crispy fries, a comforting stew, or even a sweet cake. It\'s also a good source of fiber, B vitamins, and vitamin C. Make your next culinary masterpiece with Yellow Yam Root.', 'Prepare like a potato Should be peeled and cooked before eaten It\'s also a good source of fiber, B vitamins, and vitamin C Use it to make crispy fries, a comforting stew, or even a sweet cake', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a5627750-32a5-4a99-b912-3de17f8988c9_1.0c86b8433614e88542d9e311c2f4651c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a5627750-32a5-4a99-b912-3de17f8988c9_1.0c86b8433614e88542d9e311c2f4651c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a5627750-32a5-4a99-b912-3de17f8988c9_1.0c86b8433614e88542d9e311c2f4651c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (632804058, 'Fresh Beets, 2lb', 3.27, '033383702193', 'Serve up something amazing when you cook with Fresh Beets. This versatile root vegetable is known for its bright red color and is a great addition to a healthy diet and can be prepared in a variety of ways. Roast them with your favorite seasonings and serve with a juicy steak and homemade rolls or add them to a goat cheese and arugula salad. Use them in a comforting soup recipe, a delicious casserole, or even a cake. However, you choose to use them, these beets will add big flavor and unforgettable taste to any meal. The culinary possibilities are endless with Fresh Beets.', 'Fresh Beets, Bunch Known for their ruby red hue Deep, earthy flavor Great for a variety of dishes Ideal Temperature: 33 F', 'Unbranded', 'https://i5.walmartimages.com/asr/c8c835e6-16c4-4762-a968-aeea73f1c99c.ea65c3b2a098d0adb0038dc929157642.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8c835e6-16c4-4762-a968-aeea73f1c99c.ea65c3b2a098d0adb0038dc929157642.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8c835e6-16c4-4762-a968-aeea73f1c99c.ea65c3b2a098d0adb0038dc929157642.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (632988327, '200pc Pto Red 5# Rpe', 794, '405509122831', 'short description is not available', '200pc Pto Red 5# Rpe', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (633453005, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '405528393380', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (633659600, 'Organic Cherry Tomato', 4.57, '405683707176', 'Organic Cherry Tomato', 'Organic Cherry Tomato', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (633680315, 'Acorn Squash', 1.18, '708789000159', 'Acorn Squash', 'Acorn Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/42805330-9346-4dd4-9362-9b71d0491d13.47ac454488713e49f4a0d82c51449b00.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42805330-9346-4dd4-9362-9b71d0491d13.47ac454488713e49f4a0d82c51449b00.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42805330-9346-4dd4-9362-9b71d0491d13.47ac454488713e49f4a0d82c51449b00.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (634298307, 'Papaya, 1 Each', 1.28, 'deleted_858335003025', 'Papaya, 1 Each', 'Papaya', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/9934a77b-a781-496c-a5ae-0d1367c1943a.f5365e7001fadd4b7ac631665888312b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9934a77b-a781-496c-a5ae-0d1367c1943a.f5365e7001fadd4b7ac631665888312b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9934a77b-a781-496c-a5ae-0d1367c1943a.f5365e7001fadd4b7ac631665888312b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (634503354, 'Fresh Purple Eggplant, pound', 1.47, '405878099833', 'Create something wholesome and delicious with Eggplant (Berenjena). Eggplants are incredibly versatile and can be used to make a myriad of different recipes. Try them coated in breadcrumbs and fried for a comforting side, or for a healthier option you can stuff them and roast them in the oven. They can also be used to make cheesy eggplant rollatini, decadent eggplant parmesan, and scrumptious eggplant ravioli. You can even incorporate them into hearty stews or use them to top pizzas and more. Use your imagination to create something amazing and tasty with this squash. The mouthwatering possibilities are endless with this hearty vegetable. Add something amazing to your meals with fresh Eggplant.', 'Versatile and delicious Try them coated in breadcrumbs and fried or a comforting side, or for a healthier option you can stuff them and roast them in the oven Can also be used to make cheesy eggplant rollatini, decadent eggplant parmesan, and scrumptious eggplant ravioli.', 'Unbranded', 'https://i5.walmartimages.com/asr/4f18c20a-cf3c-4f33-bca7-73caa1e2c18c.38bfeb59cacabea640eb3364ffec95a0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4f18c20a-cf3c-4f33-bca7-73caa1e2c18c.38bfeb59cacabea640eb3364ffec95a0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4f18c20a-cf3c-4f33-bca7-73caa1e2c18c.38bfeb59cacabea640eb3364ffec95a0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (634676528, 'Ready Pac Foods Bistro Apple Bleu Pecan Salad, 4.5 oz', 2.97, '077745295800', 'Arugula, Baby Greens, Apples, Praline Pecans with Bleu Cheese Balsamic Vinaigrette', 'Suitable for Vegetarians 240 Calories 3g Protein Fork Inside', 'Ready Pac Foods', 'https://i5.walmartimages.com/asr/a59a34af-e2f9-4c6a-8c27-5659e7a32da2.1f94672f446d68a6469d929efcc9ae59.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a59a34af-e2f9-4c6a-8c27-5659e7a32da2.1f94672f446d68a6469d929efcc9ae59.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a59a34af-e2f9-4c6a-8c27-5659e7a32da2.1f94672f446d68a6469d929efcc9ae59.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (634700883, '90pc Pto Rst 10# Ef', 444.6, '405547375534', 'short description is not available', '90pc Pto Rst 10# Ef', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (634795997, 'Large Avocado 3 Count Bag', 4.9, 'deleted_701080310927', 'short description is not available', 'Large Avocado 3 Count Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (634881886, 'Yellow Flesh Peaches, per Pound', 1.58, '405528359959', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (635640858, 'Fresh Bartlett Pears, 3 lb Bag', 4.67, '033383001272', 'Savor the sweet taste of Fresh Bartlett Pears. Bartlett Pears are aromatic and have a definitive pear flavor that make them great for breakfast, lunch, dinner, and dessert. Chop the pears up and add them to muffins with walnuts and vanilla for a sweet treat that’s great for breakfast to get your morning started on a high note. Slice them up and top a pizza with prosciutto, goat cheese, and arugula for a mouthwatering meal perfect for a family dinner or dinner party. Cut the pear in half and cook it in a skillet with butter, brown sugar, and vanilla and serve with a scoop of vanilla ice cream for a decadent dessert. Enjoy tasty meals any time of day with Fresh Bartlett Pears.', 'Fresh Bartlett Pears, 3 lb Bag Sweet, crisp, and juicy Excellent snacking pear Make a creamy smoothie or a nutritious juice blend Add to your salad for extra crunch and flavor Adds flavor to a variety of recipes Make pear butter or poached pears Make sweet desserts like pear cobbler, pear crisp or pear tarts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/044859e7-4495-4429-a7d5-57a35d54b7ac.8074ec2e6f35bed8159c3584304a0922.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/044859e7-4495-4429-a7d5-57a35d54b7ac.8074ec2e6f35bed8159c3584304a0922.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/044859e7-4495-4429-a7d5-57a35d54b7ac.8074ec2e6f35bed8159c3584304a0922.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (635696291, 'Fresh Red Grapes Seedless, 2 Lb', 5.97, 'deleted_095829210709', 'short description is not available', 'Fresh Red Grapes Seedless, 2 Lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/d123362f-7123-4c6a-ade6-841092e4dfe3.4b45dbed6bdee4034335d61adf47689d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d123362f-7123-4c6a-ade6-841092e4dfe3.4b45dbed6bdee4034335d61adf47689d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d123362f-7123-4c6a-ade6-841092e4dfe3.4b45dbed6bdee4034335d61adf47689d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (635708585, 'All Natural Chopped Sunflower Kale', 3.63, '071430000342', 'Dole Chop Kit Sunflower Crunch 1 Kt', 'Sunflower Crunch Chopped Kit', 'Dole', 'https://i5.walmartimages.com/asr/d5d1e359-543d-4fe3-9d91-a0ae163e3acd.eb9de1e7f2feef707cfd51f5d8a6ef0c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d5d1e359-543d-4fe3-9d91-a0ae163e3acd.eb9de1e7f2feef707cfd51f5d8a6ef0c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d5d1e359-543d-4fe3-9d91-a0ae163e3acd.eb9de1e7f2feef707cfd51f5d8a6ef0c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (635850555, 'Yellow Flesh Peaches, per Pound', 1.58, '400094703687', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (636148195, 'Rockit Apple', 0.01, '405732739691', 'short description is not available', 'Rockit Apple', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (636198423, 'Fresh Organic Whole Baby Bella Mushrooms, 16 oz', 5.62, 'deleted_037102281464', 'Experience the fresh taste of Organic Whole Baby Bella Mushrooms. Baby bella mushrooms look similar in size and shape to white mushrooms, but they\'re heartier and provide a deep earthy taste. They are just like portabella mushrooms but have been harvested just a few days before becoming large enough to fit a burger. This means they have that same firm, meaty texture you love about portabella caps, just in a tasty bite-size form. Their hearty, full-bodied taste makes them an excellent addition to beef, wild game and vegetable dishes. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try Organic Whole Baby Bella Mushrooms.', 'Organic Whole Baby Bella Mushrooms, 16 oz: 16-ounce package of organic whole baby bella mushrooms Naturally fat-free Cholesterol-free Low in calories, carbs and sodium Fresh and all natural Wash before use Natural source of the antioxidant selenium Excellent addition to beef, wild game and vegetable dishes', 'Monterey Mushrooms', 'https://i5.walmartimages.com/asr/15767202-08d2-434d-afa1-e0015eb11ca2_2.6195b8da50a357483e89dc2aa3d4c4b2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/15767202-08d2-434d-afa1-e0015eb11ca2_2.6195b8da50a357483e89dc2aa3d4c4b2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/15767202-08d2-434d-afa1-e0015eb11ca2_2.6195b8da50a357483e89dc2aa3d4c4b2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (636205260, 'Services Reduced Program Dept 94', 0.01, '251695000008', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (636236595, 'Watermelon Seedless', 4.48, '405503749010', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/333b3fa9-707c-4371-98bb-c5a2df213c91.6dbcf3af8086f7aeb3997fa322087cb1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/333b3fa9-707c-4371-98bb-c5a2df213c91.6dbcf3af8086f7aeb3997fa322087cb1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/333b3fa9-707c-4371-98bb-c5a2df213c91.6dbcf3af8086f7aeb3997fa322087cb1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (636241090, 'Fresh Opo Squash, Each', 3.05, '000000031417', 'Create something delicious with our fresh Opo Squash. Also known as bottle gourd or calabash, this tasty squash is used in cuisines around the world. You can use it in a stir-fry dish or use it to make a tasty soup with meatballs or your favorite fish. In the Philippines, it\'s used to make a popular dish called Ginisang Upo. However you choose to use them, this opo squash will add flavor and texture to any recipe. Explore new recipes and discover all the delicious ways to prepare this tasty and nutritious squash. Add something fresh and satisfying to your next meal with our Opo Squash.', 'Opo Squash, each: Extremely versatile vegetable Also known as the bottle gourd or calabash Perfect ingredient for cuisines from around the world Try in a stir-fry or a tasty soup Make Ginisang Upo Explore delicious new recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c0f6dac4-532f-443a-8a5b-b789a1058a09.585c97d487c9ca0d549a767706ff8c43.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0f6dac4-532f-443a-8a5b-b789a1058a09.585c97d487c9ca0d549a767706ff8c43.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0f6dac4-532f-443a-8a5b-b789a1058a09.585c97d487c9ca0d549a767706ff8c43.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (636789546, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094272626', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (636862014, 'Topline Orange Sweet Bell Pepper, 1 Each', 1.5, 'deleted_856122001438', 'Enhance your meals with the delicious flavor of Greenhouse grown Red Bell Peppers. Red bell pepper has a crisp flavor that enhances a variety of recipes. Dice bell peppers and put them in a hearty chili, slice them and add to a deli sandwich, saute them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out red bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper. They also taste delicious raw alongside other vegetables. Red Bell Peppers are an excellent item to have on hand.', 'Naturally low in calories, Exceptionally rich in vitamin C and other antioxidants Delicious cooked or uncooked Create delicious recipes with fresh red peppers', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/00e64d4c-dd5c-47ee-b909-1d8429bba5b8_1.761ddaf9b0d37dfb961ee480c520838a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/00e64d4c-dd5c-47ee-b909-1d8429bba5b8_1.761ddaf9b0d37dfb961ee480c520838a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/00e64d4c-dd5c-47ee-b909-1d8429bba5b8_1.761ddaf9b0d37dfb961ee480c520838a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (637309035, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094032305', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (637730559, 'Fresh Green Seedless Grapes', 30, '840001300019', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (638094370, 'Fresh Green Seedless Grapes', 3.27, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (638522240, 'Watermelon Seedless', 4.98, '400094544921', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (638533312, '240pc On Swt 3# Cj', 1044, '405541176878', 'short description is not available', '240pc On Swt 3# Cj', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (638537748, 'Mann\"s Organic Super Blend', 3.47, '716519048371', 'short description is not available', 'Mann\"s Organic Super Blend', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (638628040, 'Seeds of Change 1G Lettuce Green Romaine Vegetable Plant Seeds Full Sun', 2.69, '748404081798', 'Experience the euphoria of growing fresh, flavorful salads with our Green Romaine Lettuce Seeds. These seeds promise a bountiful harvest of long, broad leaves that hold together in perfect bunches. Not only can you enjoy the crisp and juicy texture of the lettuce, but you can also savor its unmatched sweetness. Our Green Romaine Lettuce Seeds are the perfect choice for any garden. Start cultivating your lettuce dreams today and create anything but ordinary salads. Grow lettuce like a pro with our premium seeds!', 'Sow directly in the garden as early as the soil can be made fine and loose. Plant seeds every 2 inches, covering firmly with soil. Thin plants to 8 inches apart when they are 2 inches tall. Light Needs: Full Sun Plant Lifecycle: Annual Hardiness Zones: 2 - 11', 'Seeds Of Change', 'https://i5.walmartimages.com/asr/353f40d5-3f9c-4dcd-a3a2-1b5d54fbd050.0c81b7339b0279352d1fd450f4b5e38c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/353f40d5-3f9c-4dcd-a3a2-1b5d54fbd050.0c81b7339b0279352d1fd450f4b5e38c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/353f40d5-3f9c-4dcd-a3a2-1b5d54fbd050.0c81b7339b0279352d1fd450f4b5e38c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (638705858, 'Fresh Dragon Fruit, Each', 4.96, '405529687945', 'Savor the flavors of the tropics when you bring home this sweet Dragon Fruit. Native to Central America and Mexico, this delectable fruit tastes like a combination of a pear and a kiwi. Enjoy this dragon fruit on its own or incorporate it into a variety of recipes. For breakfast, you can use it to make a nutritious and delicious smoothie or add it to a bowl of oatmeal. You can also use it to make a variety of desserts including a refreshing sorbet, a dragon fruit cheesecake, and even dragon fruit chocolate chip cookies. However you choose to use it, this fresh Dragon Fruit is sure to please the entire family.', 'Dragon Fruit, Each Tastes like a combination of a pear and a kiwi Tropical fruit native to Mexico and Central America Enjoy on its own or in a variety of recipes Use to make a delicious smoothie Make a refreshing sorbet Incorporate into your favorite adult beverage Also known as Pitaya, Pitahaya, and Strawberry Pear around the world', 'Fresh Produce', 'https://i5.walmartimages.com/asr/31d47a06-ed1a-479f-9ae2-4dd910134264.52e413fae85171f17e4f55fa3f131ebc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/31d47a06-ed1a-479f-9ae2-4dd910134264.52e413fae85171f17e4f55fa3f131ebc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/31d47a06-ed1a-479f-9ae2-4dd910134264.52e413fae85171f17e4f55fa3f131ebc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (638908858, 'Hot Peppers, 3 oz', 1.98, '684924040542', 'Hot Peppers will add heat and color to your favorite recipes. There are so many ways to incorporate these greenhouse-grown peppers into your favorite foods. Slice them and pickle them so you can have them ready to add to nachos, sandwiches, burritos, and tacos. Add them to a spicy beef and pepper stir fry or use them to add some heat to your homemade guacamole. If you\'re up to it, try them on their own for a fiery snack. These peppers are low in calories, and they\'re also a great source of vitamins. If you\'re looking for a crunchy kick of heat, grab some of these amazing Hot Peppers.', 'Hot Peppers, 3 oz: Colorful & spicy Pickle them & use on nachos, sandwiches, burritos & more Perfect for salsas & guacamole Add to your next stir fry or enchiladas Good source of vitamins Explore delicious new recipes', 'Pure Flavor', 'https://i5.walmartimages.com/asr/08ff33b3-5aac-4acf-91b8-28e7645c5022_1.d731cb94b0cb244fa539dcdd0288fb50.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/08ff33b3-5aac-4acf-91b8-28e7645c5022_1.d731cb94b0cb244fa539dcdd0288fb50.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/08ff33b3-5aac-4acf-91b8-28e7645c5022_1.d731cb94b0cb244fa539dcdd0288fb50.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (640791229, 'Organic Whole Rainbow Carrots, 2 Lb.', 2.46, '071464019792', 'Organic Whole Rainbow Carrots, 2 Lb.', 'Organic Whole Rainbow Carrots 2 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (641073929, 'Freshness Guaranteed Tri Pepper Diced 7 Oz', 2.58, '681131221689', 'short description is not available', 'Freshness Guaranteed Tri Pepper Diced 7 Oz', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (641074820, 'Realistic Faux Cherry Tomatoes Decoration, Red, 7-Inch', 9.95, '748708776383', 'Decorate your home with this wonderful realistic cherry tomatoes decoration. This decoration will be a great addition to your bowl filler for your kitchen, can be used for arts and crafts, DIY projects, party decorations and more. Features a realistic looking and sized cherry red tomatoes. Height: 7” Diameter: 3.25”', 'Realistic Faux Cherry Tomatoes Decoration, Red, 7-Inch', 'Homeford', 'https://i5.walmartimages.com/asr/ba2ca5fe-a712-4d92-aa26-cf2a72ee470e.ee899f969fe2c076032675cb1ddb461c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ba2ca5fe-a712-4d92-aa26-cf2a72ee470e.ee899f969fe2c076032675cb1ddb461c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ba2ca5fe-a712-4d92-aa26-cf2a72ee470e.ee899f969fe2c076032675cb1ddb461c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (641520900, 'Fresh Chilean Grown Yellow Peaches, 1 Lb.', 1.58, '405535036409', 'Fresh Chilean Grown Yellow Peaches, 1 Lb.', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (641577424, 'Fresh Large Hass Avocado Bag, 3- 4 Count', 3.48, '887214001517', 'Avocados aren’t just great-tasting fresh produce items, but they are a nutrient-dense fruit that can be enjoyed throughout the year. Hass avocados are a versatile ingredient with a creamy texture and mild flavor that can be used in many different types of recipes and dishes that are perfect for enjoying at barbecues and outdoor gatherings with friends and family during the summer. Enjoy Large avocados in countless ways that will make those barbecues and gatherings with family and friends even more exciting. Use avocados in flavorful recipes that everybody can share and enjoy while being together outside. Try avocados in individual Mexican food items like tacos or burritos, as part of appetizers like avocado crostini, or in a fresh guacamole or avocado dip so everybody can dip tortilla chips into something delicious. The possibilities are deliciously endless if you need additional food options for barbecues. Not only is a Large avocado a great ingredient to use in numerous ways, but it is also a healthy food that contributes unsaturated “good” fats and almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9. A Large ripe avocado will have a dark green to nearly black skin color, a bumpy skin texture and should yield to gentle pressure without leaving indentations or feeling mushy. Avocados with a slightly bumpy texture should be ripe in 1 to 2 days. They will also be somewhat firm and have a dark green and black speckled color. Once you’ve selected the perfect bag of avocados, you’ll be ready to enjoy all kinds of different healthy foods and recipes for the next time you’re enjoying an outdoor gathering with friends and families.', 'Bag of 3 to 4 Large Hass Avocados Fresh fruit with a creamy texture and mild flavor Fresh avocados are great for using in tacos, burritos, appetizers, avocado dip and fresh guacamole so that you have delicious food to share and enjoy during barbecues and the summer months A cholesterol free fruit that contains almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9 Large hass avocados are the lowest sugar fruit and provide unsaturated “good fats” that help absorb Vitamin A, Vitamin D, Vitamin K and Vitamin E Large ripe avocados will have dark green to nearly black skin color, a bumpy texture and should yield to gentle pressure without leaving indentations', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5c798f29-e430-419a-b4aa-36c9ccc4ade2.0ac54bdc229519ee39f7188386f272d8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5c798f29-e430-419a-b4aa-36c9ccc4ade2.0ac54bdc229519ee39f7188386f272d8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5c798f29-e430-419a-b4aa-36c9ccc4ade2.0ac54bdc229519ee39f7188386f272d8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (642138883, 'Dry Japones Chile 8 oz', 3.94, '712810008076', 'Packaged Japones Chili Dried 8oz', 'Dry Japones Chile 8 oz', 'Miravalle', 'https://i5.walmartimages.com/asr/18c5684f-1874-48f2-8990-ae645f1c6f9a_1.2704976290d872ec3c5b307239bf7a3d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18c5684f-1874-48f2-8990-ae645f1c6f9a_1.2704976290d872ec3c5b307239bf7a3d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/18c5684f-1874-48f2-8990-ae645f1c6f9a_1.2704976290d872ec3c5b307239bf7a3d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (642384437, 'Hass Avocados, each', 0.78, '670561397606', 'Hass Avocado', 'Hass Avocado', 'Unbranded', 'https://i5.walmartimages.com/asr/2b8525e6-d603-483c-bd8b-97492ed7f5e1.d7349fb754f372c7cb90ec33c6244399.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2b8525e6-d603-483c-bd8b-97492ed7f5e1.d7349fb754f372c7cb90ec33c6244399.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2b8525e6-d603-483c-bd8b-97492ed7f5e1.d7349fb754f372c7cb90ec33c6244399.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (642388758, 'Fresh Mandarin , pound', 1.86, '405826276576', 'Enjoy the juicy goodness of citrus when you eat a Tangerine (Mandarina). Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, tangerines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, tangerines are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the tangerines hang out in a bowl on your counter or table to breathe. Compact and portable, tangerines are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious Tangerines on hand for an easy, healthy treat.', 'Fresh, delicious, tangerine Pleasing sweet-tart flavor Excellent source of vitamin C, potassium, and folic acid For maximum flavor, do not refrigerate', 'Unbranded', 'https://i5.walmartimages.com/asr/69d185d0-ac33-4817-948d-843df37c9467.9b57ed646f5af610f5a679c4b2668765.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/69d185d0-ac33-4817-948d-843df37c9467.9b57ed646f5af610f5a679c4b2668765.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/69d185d0-ac33-4817-948d-843df37c9467.9b57ed646f5af610f5a679c4b2668765.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (642389399, 'Watermelon Seedless', 4.98, '400094479537', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (642733276, 'Fresh Slicing Tomato, 1lb Pack', 3.74, '405556009062', 'Bring the fresh, delicious taste of Slicing Tomatoes into your home. These tomatoes deliver sweet and juicy flavor with each bite and are an ideal ingredient in a variety of recipes. They would make a tasty, garden-inspired addition to salads, burgers, gourmet sandwiches, and so much more. They are picked at peak freshness and specially bred for deep red color, intense flavor, and higher lycopene content than standard tomatoes. Whether you slice or dice them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with these fresh Slicing Tomatoes.', 'Slicing Tomato, 1 lb Pack Wholesome, fresh, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, burgers, gourmet sandwiches, and more Add to party trays or school lunches Bred to have higher lycopene than standard tomatoes A good source of vitamin C, K, potassium and folate', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b8ec3dcc-c960-422d-b6e0-2357ea2ffa1f.8f077c19f547fd04eae261d7aa88e385.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b8ec3dcc-c960-422d-b6e0-2357ea2ffa1f.8f077c19f547fd04eae261d7aa88e385.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b8ec3dcc-c960-422d-b6e0-2357ea2ffa1f.8f077c19f547fd04eae261d7aa88e385.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (643042061, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094209004', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (643374627, 'Fresh Cauliflower Orange, each', 7.98, '405779412328', 'Cauliflower (1 each) is an outstanding addition to a menu. Often used as a carb substitute, it can also make a tasty starter or main entree item. This product is packed with vitamins and is low in fat. The Fresh cauliflower vegetable is also a superfood antioxidant and is simple to prepare in boiling water or by roasting in an oven.', 'Healthy side to any meal Ideal to use as a carb substitute Low-fat, contains vitamins and antioxidants Can be used to make starters and main dishes or served with dips', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (643663339, 'Watermelon Seedless', 4.98, '405504884093', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (643690716, 'Fresh Sweet Corn on the Cob, 4ct', 4.88, '850251002168', 'Treat everyone to the delicious taste of this Fresh Sweet Corn on the Cob. While sweet corn typically invokes images of summer barbeques, it has many health benefits. Sweet corn is a great source of vitamin A and C, with one ear of corn containing over 10% of the daily value of vitamin C and over 6% daily value of vitamin A. It\'s not truly summer until you\'ve had some Fresh Sweet Corn on the Cob - just add butter and salt', 'Fresh Corn on the Cob, 4 Pack Sweet gourmet corn on the cob Husked, field fresh, prewashed, and ready to eat Low in fat and cholesterol free Ideal for your next backyard barbecue or summer camp out May be cooked in the microwave, steamed or boiled', 'Unbranded', 'https://i5.walmartimages.com/asr/a1494139-471e-4991-9652-4a379d727856.31c4c613db4bda009bd2f27e625bd924.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a1494139-471e-4991-9652-4a379d727856.31c4c613db4bda009bd2f27e625bd924.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a1494139-471e-4991-9652-4a379d727856.31c4c613db4bda009bd2f27e625bd924.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (643959950, 'Mango', 0.78, '', 'short description is not available', 'Mango', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/e0470b35-2c4c-4482-836f-1cf3af53d3bc_3.9e34699d210056b33e0441dc58c8a17a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e0470b35-2c4c-4482-836f-1cf3af53d3bc_3.9e34699d210056b33e0441dc58c8a17a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e0470b35-2c4c-4482-836f-1cf3af53d3bc_3.9e34699d210056b33e0441dc58c8a17a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (644037491, 'California Grown Peaches, per Pound', 1.58, '400094009024', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (644342170, '8oz Chile Costeno by 1400s Spices', 14.97, '850035960387', 'At 1400S Spices, we pledged to deliver a wide range of spices, teas and seasonings that will stand out with the superior quality of the ingredients, delightful blends of flavors, and amazing natural properties. Our products are made with carefully selected, fresh and natural ingredients from reliable suppliers, and check all standards of safety and quality, so you can fully enjoy all the benefits from mother nature in your dietary regime. Not completely satisfied with your order? Don’t worry, we are always at your service to address any issues or concerns. Costeno Dried Peppers – Add Spiciness and Flavor to Your Dishes Our dried peppers will delight all your senses with their fruity aroma and lingering taste that will fill your mouth with savor and pleasant smoky flavors! The dried pepper pods have a beautiful, intense red color and fine texture that will make a great addition to traditional Mexican dishes, international dishes, and other delicious recipes, such as tamales, mole, chili, sauces, marinades, meat dishes or vegetable casseroles. Still not convinced? Here are some of the amazing features of this product: • Natural and fresh; • Dried as a whole for preserving the aroma and taste; • Extremely versatile and easy to use; • Great in combination with vegetables, meat, poultry, pork, cheese, garlic and other spices; • Can be used as a whole or ground; • Intense fruity aroma; • Fine red skin; • Heat sealed bag; Indulge in the authentic Mexican taste of the costeno chiles!', 'A Must for Spice Lovers: Whether you are a fan of spicy food or you want to add a little bit of heat to your dishes the dried chili peppers from 1400s Spices are a must-have in your kitchen! Fresh and intense, these dried pepper pods are a versatile cooking ingredient that will enrich your recipes! Fresh Chili Peppers: Our dried peppers are carefully picked fresh costeno chiles, which were naturally dried and packed in a heat sealed bag to preserve their aroma and freshness intact for longer, bringing intense flavor to your dishes! Intense and Flavorful: The 1400s Spices costeno dried chiles have a medium heat with smoky, pleasant notes that will satisfy the cravings for spicy lovers and add a balanced touch to various traditional recipes, Mexican food, or international cuisine. Unique Aroma and Texture: The costeno red chili peppers stand out with a complex fruity fragrance that leaves a long-lasting taste while the fine, red skin brings not only delight but also color to traditional dishes. Versatile Ingredient: These costeno chili peppers are versatile and full of flavor, so you can add the whole pods to your cooking or ground them for preparing Mexican dishes such as tamales, mole, sauces, salsa, making a great pair with pork, poultry, vegetables, and meat dishes.', '1400s Spices', 'https://i5.walmartimages.com/asr/1323c113-19d6-48b3-957f-e5d18bd9ba4b.1a5c0d802c0bf92bc3dad627634c28cc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1323c113-19d6-48b3-957f-e5d18bd9ba4b.1a5c0d802c0bf92bc3dad627634c28cc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1323c113-19d6-48b3-957f-e5d18bd9ba4b.1a5c0d802c0bf92bc3dad627634c28cc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (644647298, 'Watermelon Chunk 10oz', 6.84, '045009891204', 'Experience a burst of summertime goodness with this delicious Freshness Guaranteed Watermelon. This pre-cut ripe watermelon is juicy, sweet, and refreshing to the taste. In addition, watermelons are a great natural source of vitamins A and C. Carry them with you and eat them straight out of the tray any time you want, at home, or on-the-go. Pair them with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use them as a naturally sweet ingredient in a fruit salad. Add some fresh fruit to your daily menu with this Freshness Guaranteed Watermelon.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Watermelon Chunks, 10 oz: Ready to eat watermelon Great for fruit salad Summer treat Net weight 10 oz Sweet and Juicy', 'Fresh Produce', 'https://i5.walmartimages.com/asr/909ece1f-77de-4a39-b8d5-419c8f2b45ca.9bfd0fbade1a881d6ce00f1a8ef328c9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/909ece1f-77de-4a39-b8d5-419c8f2b45ca.9bfd0fbade1a881d6ce00f1a8ef328c9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/909ece1f-77de-4a39-b8d5-419c8f2b45ca.9bfd0fbade1a881d6ce00f1a8ef328c9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (644973584, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_405517441740', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (645365171, 'Red Potatoes, 5 Lb.', 5.48, 'deleted_033383510118', 'Red Potatoes, 5 Lb.', 'Red Potatoes 5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9065eb31-250e-40a4-9830-67f5aeaf23af.52d20019eb0b09a827c0e0f048328f7c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9065eb31-250e-40a4-9830-67f5aeaf23af.52d20019eb0b09a827c0e0f048328f7c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9065eb31-250e-40a4-9830-67f5aeaf23af.52d20019eb0b09a827c0e0f048328f7c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (645460807, 'Freshness Guaranteed Fruit Cup To Go Summer Blend 5z', 1.98, '681131355094', 'short description is not available', 'Freshness Guaranteed Fruit Cup To Go Summer Blend 5z', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (646549102, 'Fresh Grape Tomato, 2.5 oz Cup', 1.48, '751666418851', 'Add color and flavor to your next meal with Grape Tomatoes. Similar to larger Roma tomatoes, grape tomatoes have a lower water content than cherry tomatoes, making them meatier, more flavorful, and even a little tidier with every bite. They are hardier and less fragile than a traditional tomato as well, so there\'s no need to worry about bruising either. Perfectly bite-sized, grape tomatoes are not only a simple and delicious addition to salads and pastas, but also serve as a quick and convenient snack all on their own. Plus, grape tomatoes have a longer shelf-life, which means it\'s perfectly fine to keep them in storage for several days at a time. All you have to do is grab and enjoy to experience the class tomato taste of Grape tomatoes.', 'Grape Tomatoes, 2.5 oz: Lower water content and longer shelf-life than cherry tomatoes Hardier and more resistant to bruising than traditional tomatoes Conveniently bite-sized Quick and excellent addition to salads and snack trays Best stored at room temperature out of sunlight', 'Fresh Produce', 'https://i5.walmartimages.com/asr/df5ed044-bded-4216-b14d-eddbc569333e.14855ff5c8b5b9e37a3aedc6c49acaf2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/df5ed044-bded-4216-b14d-eddbc569333e.14855ff5c8b5b9e37a3aedc6c49acaf2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/df5ed044-bded-4216-b14d-eddbc569333e.14855ff5c8b5b9e37a3aedc6c49acaf2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (646778728, 'Taylor Farms Tf Mexican Style Caesar Chicken Sld', 3.2, '030223060574', 'Taylor Farms Salad Mexican', 'Salad, with Chicken, Mexican Inspired Caesar', 'Taylor Farms', 'https://i5.walmartimages.com/asr/59dbc2b1-e665-4cf3-91b6-899bbcf4fc3a.ca4bfed561e24646cc8eae25827d5156.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59dbc2b1-e665-4cf3-91b6-899bbcf4fc3a.ca4bfed561e24646cc8eae25827d5156.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59dbc2b1-e665-4cf3-91b6-899bbcf4fc3a.ca4bfed561e24646cc8eae25827d5156.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (646842793, 'Gourmet Garden Gluten Free Roasted Garlic Stir-in Paste, 4.0 oz Tube', 3.94, '875208001544', 'Gourmet Garden Gluten Free Roasted Garlic Stir-in Paste, 4 oz Tube. Roasty-toasty garlic flavor without the pungent smell of garlic on your fingers? It\'s possible, thanks to Gourmet Garden Roasted Garlic Stir-in Paste, our ready-to-use, crushed roasted garlic that enhances almost any food…meats, chicken, soups, marinades, stir-fries or dips to name a few. Packed inside each squeezable tube you\'ll find garlic that\'s been slowly roasted and smoothly crushed to deliver a warm, caramelized garlic punch. Our garlic paste is at its best flavor, color and aroma when it reaches your family\'s table. Use at the end of your cooking to add roasted sweet flavor to sautéed mushrooms, garlic bread, creamy pasta sauces and roasted veggies. Use 1 teaspoon of paste in place of 1 medium garlic clove. Store refrigerated for weeks after opening. This Gourmet Garden Roasted Garlic Stir-in Paste is in a Plastic tube that is 4 ounces. Store this Refrigerated item at an ambient temperature.', 'Gourmet Garden Gluten Free Roasted Garlic Stir-in Paste, 4 oz Tube Roasted, crushed garlic packed into a convenient squeezable tube No prep necessary Stays fresh in refrigerator for weeks after opening Gluten Free Adds sweet, caramelized flavor to garlic bread, pasta sauces, soups & veggies Use 1 tsp. of paste in place of 1 medium garlic clove This product is in a Plastic Tube', 'Gourmet Garden', 'https://i5.walmartimages.com/asr/d1bdc60e-1c29-45cd-b07c-46476b717646.de52bea8332a13bb9a97a3757fa0fd24.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d1bdc60e-1c29-45cd-b07c-46476b717646.de52bea8332a13bb9a97a3757fa0fd24.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d1bdc60e-1c29-45cd-b07c-46476b717646.de52bea8332a13bb9a97a3757fa0fd24.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (646929753, 'Fresh Green Beans', 1.78, 'deleted_033383701561', 'short description is not available', 'Fresh Green Beans', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (647019055, 'Organic Ambrosia Apples 2 Lb Bag', 2.94, '847473005435', 'short description is not available', 'Apples, Organic Minimum diameter: 2-3/8 inch. USDA Organic. Certified organic by Certifie Biologique par Washington State Department of Agriculture. Naturally pure, from our backyard to yours. US extra fancy. www.cmiorchards.com. www.daisygirlorganics.com. Facebook. /daisygirlorganics. Product of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f7bdda11-264a-4934-a1c0-dd341e3821c0.25c0b3cb9220b7ec3006320f32d0b00a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7bdda11-264a-4934-a1c0-dd341e3821c0.25c0b3cb9220b7ec3006320f32d0b00a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7bdda11-264a-4934-a1c0-dd341e3821c0.25c0b3cb9220b7ec3006320f32d0b00a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (647155784, 'Watermelon Seedless', 4.98, '400094985564', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (647792329, 'Green Giant Fresh Brussels Sprouts & Baby Potatoes', 3.98, '605806000591', 'Green Giant™ Fresh Brussels Sprouts & Baby Potatoes.Great for roasting, sauteing and more!Quick cooking!Gluten free.Per Serving:50 Calories.0g Sat fat, 0% DV.15mg Sodium, 1% DV.2g Sugars.Net Wt 16 oz (1 lb) (454 g). Perishable, keep refrigerated.', 'Brussels Sprouts & Potatoes 16oz', 'Green Giant', 'https://i5.walmartimages.com/asr/31923c95-5dab-4937-84a3-8c1dbec40956_1.ffa047b3a87acb05e83eb7e93f4a8db5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/31923c95-5dab-4937-84a3-8c1dbec40956_1.ffa047b3a87acb05e83eb7e93f4a8db5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/31923c95-5dab-4937-84a3-8c1dbec40956_1.ffa047b3a87acb05e83eb7e93f4a8db5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (648917946, 'Fresh Red Seedless Grapes', 2.88, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (648931838, 'Veggie Tray 48oz', 22.98, '045009891327', '48oz assorted veggie tray', 'Veggie Tray 48oz', 'Homestyle', 'https://i5.walmartimages.com/asr/33cac2d5-4358-4600-a85e-16bc9d4f64e4.27736482e86cf3ed14ac729915c003ad.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/33cac2d5-4358-4600-a85e-16bc9d4f64e4.27736482e86cf3ed14ac729915c003ad.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/33cac2d5-4358-4600-a85e-16bc9d4f64e4.27736482e86cf3ed14ac729915c003ad.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (649064802, '200pc Pto Rst 5# Wa', 648, '405531130149', 'short description is not available', '200pc Pto Rst 5# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (649701131, 'Fresh Hydroponic Grown Strawberries, 1 lb Container', 5.72, '086951000030', 'The sweet, juicy flavor of Hydroponic Strawberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Hydroponic Strawberries today and savor the natural delectable flavor.', 'Premium selection Prior to serving gently wash the strawberries and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b72a1d68-d4a1-4b9f-a42f-a0944ef1b8f9.7921f4e711ab8be32944328c3acbbb27.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b72a1d68-d4a1-4b9f-a42f-a0944ef1b8f9.7921f4e711ab8be32944328c3acbbb27.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b72a1d68-d4a1-4b9f-a42f-a0944ef1b8f9.7921f4e711ab8be32944328c3acbbb27.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (649998650, 'Boston Lettuce, 1 Each', 2.98, '684924050435', 'Boston Lettuce, 1 Each', 'Boston/butter Green Lettuce', 'Fresh Produce', 'https://i5.walmartimages.com/asr/13325fab-6eed-424f-84f4-f43ed744e20b.8a5e3a295bea159f913808eb263d1d3c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13325fab-6eed-424f-84f4-f43ed744e20b.8a5e3a295bea159f913808eb263d1d3c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13325fab-6eed-424f-84f4-f43ed744e20b.8a5e3a295bea159f913808eb263d1d3c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (650088511, 'Freshness Guaranteed Chunky Avocado Spread, 15 oz', 5.23, '681131276450', 'Freshness Guaranteed Chunky Avocado Spread is bursting with bold Mexican flavors. Spread this fresh avocado dip made from Hass avocados on toasted whole wheat toast and serve with scrambled egg whites and fresh fruit for a healthy breakfast. Get creative and mix this chunky spread with homemade salsa and peppers to make a zesty dip for game night, or add to sandwiches, wraps and burgers to ensure a mouthful of flavor in every bite. This versatile spread is great for get togethers, parties or any occasion with family and friends! Add the fresh flavor of Freshness Guaranteed Chunky Avocado Spread to your next meal. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Spark Fresh item.', 'Freshness Guaranteed Chunky Avocado Spread, 15 oz: Product of Mexico Made from Hass avocados Great to serve with chips Excellent addition to burgers, wraps and sandwiches', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7177b4fb-dba9-4c97-9321-b6628f5fd52f.f2ab950ce3b77d7c70a990aed5731f2e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7177b4fb-dba9-4c97-9321-b6628f5fd52f.f2ab950ce3b77d7c70a990aed5731f2e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7177b4fb-dba9-4c97-9321-b6628f5fd52f.f2ab950ce3b77d7c70a990aed5731f2e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (650295410, 'Fresh Red Grapefruit, 3lb Bag', 5.27, '605049465720', 'Grapefruit is the perfect balance between tart and sweet. The balance between tart and sweet is great for both savory and sweet dishes any time of day. Enjoy half of a grapefruit sprinkled with sugar with some eggs in the morning for a light, sweet breakfast. Slice it up and put in a salad with spinach, avocado, and red onion topped with a mustard and balsamic vinegar dressing for lunch or dinner. Make delicious grapefruit bars that showcase the sweet and tartness of this versatile fruit. For an adult recipe juice the grapefruit and pair with some simple syrup and alcohol for a refreshing cocktail. This fruit is the perfect addition to a healthy diet as it is a great source of vitamin C and vitamin A. With such versatility, Grapefruit will become a pantry staple in your home.', 'Bursting with delicious juice and boasting a distinct tangy flavor, the fresh grapefruit pack a offers a nutritional punch withmany culinary uses. Refreshing and tangy: Grapefruit is known for its vibrant flavor profile, with a perfect balance of refreshing citrus notes and a tangy kick. Its zesty and invigorating taste can awaken your senses and leave you feeling energized. Immune-boosting powerhouse: Packed with essential vitamins like vitamin C, grapefruit is a natural immune booster. Its high antioxidant content helps protect the body against free radicals and supports overall health and wellness. Versatile and nutritious: Grapefruit is a versatile fruit that can be enjoyed in various ways. Whether you prefer it fresh, juiced, or added to salads and desserts, this citrus fruit is not only delicious but also a great source of vitamins, minerals, and fiber. It\'s a nutritious addition to any balanced diet.', 'Sunkist Growers', 'https://i5.walmartimages.com/asr/13e8aae4-61d1-44b3-b703-39082ec840e8.083d5fae8267df88814795582fb77ab3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13e8aae4-61d1-44b3-b703-39082ec840e8.083d5fae8267df88814795582fb77ab3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13e8aae4-61d1-44b3-b703-39082ec840e8.083d5fae8267df88814795582fb77ab3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (651012735, 'Sweet Twister Peppers', 3.98, 'deleted_885773045928', 'short description is not available', 'Sweet Twister Peppers', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (651171434, 'Plum, Each', 0.5, '405753577562', 'short description is not available', 'Plum, Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (651417486, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094674000', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (651661577, 'Organic Whole White Mushrooms 8oz', 2.68, 'deleted_631661999831', 'short description is not available', 'Organic Whole White Mushrooms 8oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (651664268, 'Sunset Flavor Bombs Cherry Tomatoes on the Vine, 14.0 OZ', 3.27, 'deleted_057836022492', 'Sunset Flavor Bombs Cherry Tomatoes on the Vine. Sunset® Flavor Bombs™ Cherry Tomatoes on the Vine. 397 g 14 oz.', 'Sunset Tomatoes Flavor Bombs 12/1lb', 'Sunsets', 'https://i5.walmartimages.com/asr/7ae5c1b3-ba28-4823-89d8-59a18f7ea797_1.1e5f1675424f19ae0104a860ef76000f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7ae5c1b3-ba28-4823-89d8-59a18f7ea797_1.1e5f1675424f19ae0104a860ef76000f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7ae5c1b3-ba28-4823-89d8-59a18f7ea797_1.1e5f1675424f19ae0104a860ef76000f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (651672887, 'Freshness Guaranteed Veggie Tray W/greek Yogurt Ranch Dip 36z', 9.98, '681131180726', 'short description is not available', 'Freshness Guaranteed Veggie Tray W/greek Yogurt Ranch Dip 36z', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (651852261, 'Marketside Beyond Zero Pesticides Baby Spinach, 4 oz Clam Shell, Fresh', 2.98, '194346001514', 'Enjoy the fresh flavor of Marketside Beyond Baby Spinach. These greens are indoor and vertically grown for peak-season freshness all year long. Indoor vertical farms are a controlled growing environment giving each plant the optimal amount of light and nutrients for fresh and flavorful produce any time of the year. Farming vertically means our produce can be grown using significantly less water and land than traditional outdoor farms. Create something delicious with Marketside Beyond Baby Spinach. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Beyond Baby Spinach, 4 oz: Fresh and flavorful baby spinach Indoor and vertically grown for peak-season freshness all year long No pesticides, herbicides or fungicides applied to our greens Convenient peel and reseal packaging Keep refrigerated until ready to enjoy', 'Marketside Beyond', 'https://i5.walmartimages.com/asr/68dfc747-b785-4c1a-bf29-06dcda064edd.cdea65ded23f538d80b2ca5e27bd9bee.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68dfc747-b785-4c1a-bf29-06dcda064edd.cdea65ded23f538d80b2ca5e27bd9bee.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68dfc747-b785-4c1a-bf29-06dcda064edd.cdea65ded23f538d80b2ca5e27bd9bee.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (651945890, 'Fresh Red Seedless Grapes', 0.98, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5493d63f-83f4-4b9f-8c8d-41134800c242_2.99a0bc48757165f0761b10f8d8f14d41.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5493d63f-83f4-4b9f-8c8d-41134800c242_2.99a0bc48757165f0761b10f8d8f14d41.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5493d63f-83f4-4b9f-8c8d-41134800c242_2.99a0bc48757165f0761b10f8d8f14d41.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (652348466, '240pc On Ylw 3# Or', 475.2, '400094040140', 'short description is not available', '240pc On Ylw 3# Or', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (652727322, 'Fresh Red Seedless Grapes', 1.98, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (653414821, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094943700', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (653562102, 'Fuji Apples, 4 Count', 2.2, '883391004327', 'Treat yourself to the delicious, crisp taste of Fuji Apples. These apples are known for their light red and yellow skin and mild yet sweet taste. Enjoy one with breakfast or lunch or as a fresh snack anytime of day. Best of all, these delicious apples hold up well when cooked and can be used in both savory and sweet dishes. They can be roasted, sautéed, or boiled into a delicious sauce that pairs perfectly with pork. Try incorporating them into soups and compotes or using to make yummy jam or juice. Use them to create apple crisp, pie and strudel for a sweet treat. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Fuji Apples.', 'Fuji Apples, 4 Count: Includes 4 deliciously crisp apples Mildly sweet flavor Can be enjoyed fresh or cooked in to both savory and sweet dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/20cad9b8-2850-4fc5-8bbb-416a786862fb_2.960e982dda71f06809aea4b5c4889f76.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20cad9b8-2850-4fc5-8bbb-416a786862fb_2.960e982dda71f06809aea4b5c4889f76.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20cad9b8-2850-4fc5-8bbb-416a786862fb_2.960e982dda71f06809aea4b5c4889f76.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (653757567, '18pc Apl Rockit 3lb', 116.46, '405682852495', 'short description is not available', '18pc Apl Rockit 3lb', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (653815703, 'Pepper Mini Sweet', 2.98, 'deleted_626074001783', 'short description is not available', 'Pepper Mini Sweet', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (654547565, 'Freshness Guaranteed Fresh Green Seedless Grapes', 2.28, '', 'short description is not available', 'Freshness Guaranteed Fresh Green Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (655232488, 'Tom Grape 10oz', 2.48, '092504767343', 'short description is not available', 'Tom Grape 10oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (655765152, 'Mandarina Clemenvilla', 1.86, '405712775237', 'Mandarina Clemenvilla', 'Mandarina Clemenvilla #35', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (655770141, 'Green Giant Asparagus Spears (15 oz.,4 pk.)', 33.99, '722649453749', 'Green Giant Asparagus Spears (15 oz.,4 pk.)', 'Delicious hand selected asparagus spears!', 'Mold Armor', 'https://i5.walmartimages.com/asr/bc30da2f-443c-4b1b-9ac8-cf6745d249e7.3dc56a55c0c85f11ee849c0f01ee9d4e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc30da2f-443c-4b1b-9ac8-cf6745d249e7.3dc56a55c0c85f11ee849c0f01ee9d4e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc30da2f-443c-4b1b-9ac8-cf6745d249e7.3dc56a55c0c85f11ee849c0f01ee9d4e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (656076643, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094346631', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (656514880, 'Ready Pac Foods Bistro Buffalo Style Salad with Chicken and Buffalo Style Ranch Dressing, 6.5 oz', 2.98, '077745272115', 'Vegetable Blend, Roasted White Meat Chicken, Carrots, Bleu Cheese and Texas Toast Crouton Crumble with Buffalo Style Ranch Dressing Fresh Air Seal - Lets Veggies Breathe™', '260 Calories 10g Protein', 'Ready Pac Foods', 'https://i5.walmartimages.com/asr/762153b9-dd97-4725-9cf9-9ecb2ce241e0.417e990084f4a63d61f9b00c8746db32.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/762153b9-dd97-4725-9cf9-9ecb2ce241e0.417e990084f4a63d61f9b00c8746db32.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/762153b9-dd97-4725-9cf9-9ecb2ce241e0.417e990084f4a63d61f9b00c8746db32.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (656658401, 'Sweet Onions, 2 Count', 2.48, '811289020067', 'Sweet Onions, 2 Count', 'Sweet Onion 2 Ct Sleeve Pack', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e2a0de20-be0c-4c8a-b0e4-494b0d04bf00.b23b4ac94fca2caedfba5e336c5ddcff.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2a0de20-be0c-4c8a-b0e4-494b0d04bf00.b23b4ac94fca2caedfba5e336c5ddcff.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2a0de20-be0c-4c8a-b0e4-494b0d04bf00.b23b4ac94fca2caedfba5e336c5ddcff.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (657339515, 'Fresh Organic Romaine Lettuce, Each', 2.16, '033383904092', 'Make salads and sandwiches sing with Organic Romaine Lettuce. This crisp, flavorful lettuce is a staple in Caesar and mixed green salads, deli sandwiches and more, with a cool, refreshing crunch in every bite. Trader Joe\'s romaine lettuce is premium quality and completely organic, crafted without pesticides or herbicides. It contains no fat, no cholesterol, no sodium, no sugar and just eight calories per one cup serving. The whole-leaf lettuce is picked at the peak of flavor and comes ready to chop or use in sandwiches, lettuce cups and more. Trader Joe\'s lettuce should be washed before serving or dicing.', 'Make salads and sandwiches sing with Organic Romaine Lettuce. This crisp, flavorful lettuce is a staple in Caesar and mixed green salads, deli sandwiches and more, with a cool, refreshing crunch in every bite. Trader Joe\'s romaine lettuce is premium quality and completely organic, crafted without pesticides or herbicides. It contains no fat, no cholesterol, no sodium, no sugar and just eight calories per one cup serving. The whole-leaf lettuce is picked at the peak of flavor and comes ready to chop or use in sandwiches, lettuce cups and more. Trader Joe\'s lettuce should be washed before serving or dicing.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/141f0676-09af-4081-ac13-372ba8bd4c52.871f1f2cb031e35690c3141d8323fbdf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/141f0676-09af-4081-ac13-372ba8bd4c52.871f1f2cb031e35690c3141d8323fbdf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/141f0676-09af-4081-ac13-372ba8bd4c52.871f1f2cb031e35690c3141d8323fbdf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (657449604, 'Services Reduced Program Dept 94', 0.01, '251677000002', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (657543037, 'Cherry on the Vine Tomato, 12 oz Package', 3.98, 'deleted_689259004924', 'Fresh Cherry on the Vine Tomatoes are the perfect cooking tomato. Because of their notable flavor and thicker skin, they are a versatile tomato option that\'s fit for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, cherry on the vine tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with Cherry on the vine Tomatoes from Walmart.', 'Cherry on the Vine Tomato, 12 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (657676379, 'Large Avocado 2 Count Bag', 4.48, 'deleted_636442320101', 'short description is not available', 'Large Avocado 2 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (657687086, 'California Grown Peaches, per Pound', 1.58, '400094439272', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (658243966, 'Lime Thyme Potato Tray', 0.01, '405857386534', 'short description is not available', 'Lime Thyme Potato Tray', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (658330998, 'Services Reduced Program Dept 94', 0.01, '251713000003', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (659261813, 'Fresh Green Bananas, Bunch, Sweet', 1.13, '000000042314', 'Our fresh bananas are made with organic ingredients and are the perfect healthy snack! These sweet and delicious fruits are filled with essential vitamins and minerals that provide energy and help maintain a balanced diet. Enjoy them as a quick on-the-go snack or add them to smoothies and desserts for a delicious treat. Trust us, you won\'t be disappointed!', 'Whole green bananas are a type of fresh produce that can be consumed in their unripened state, offering a different taste and texture compared to their ripe, yellow counterparts. As a fresh produce item, green bananas maintain their full nutritional value, providing essential vitamins, minerals, and a higher amount of resistant starch, which can benefit gut health and digestion. When consumed whole and unripe, green bananas have a firmer texture and a mildly sweet, starchy taste, making them suitable for various culinary applications such as boiling, frying, or incorporating into savory dishes.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7a2714ba-f92e-487e-a400-bb521c25a553.68aaa773a1a49cc7f86547bd3718b9fb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a2714ba-f92e-487e-a400-bb521c25a553.68aaa773a1a49cc7f86547bd3718b9fb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7a2714ba-f92e-487e-a400-bb521c25a553.68aaa773a1a49cc7f86547bd3718b9fb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (659576302, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094987117', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (660146126, '75pc Orange Navel 8#', 589.5, '405791273402', 'short description is not available', '75pc Orange Navel 8#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (660422356, 'Watermelon Seedless', 4.98, '400094373347', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (660586376, 'Acorn Squash', 0.77, '', 'Acorn Squash', 'Acorn Squash', 'Fresh Produce', 'https://i5.walmartimages.com/asr/daf77412-3612-43bc-bfaf-5ef228abae6d.834dcfdb96f9856e465e5718fe558dd3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/daf77412-3612-43bc-bfaf-5ef228abae6d.834dcfdb96f9856e465e5718fe558dd3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/daf77412-3612-43bc-bfaf-5ef228abae6d.834dcfdb96f9856e465e5718fe558dd3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (660841371, 'Freshness Guaranteed Fruit Cup To Go Tropical Blend 5z', 1.98, '681131355100', 'short description is not available', 'Freshness Guaranteed Fruit Cup To Go Tropical Blend 5z', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (661140012, 'Purple Eggplant', 1.42, '858491003013', 'Eggplant', 'Purple Eggplant', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/f7399661-3d47-4ba7-9792-249286158ea9.78955c98fbb1a2424cdf601e5bd2431a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7399661-3d47-4ba7-9792-249286158ea9.78955c98fbb1a2424cdf601e5bd2431a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7399661-3d47-4ba7-9792-249286158ea9.78955c98fbb1a2424cdf601e5bd2431a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (661337884, 'Idaho Potatoes, 5 Lb.', 2.42, 'deleted_017367050012', 'Idaho Potatoes, 5 Lb.', 'Idaho Potatoes 5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/fdc11b8a-ef47-4f78-8527-5d8326ef6a92.09b3966a341ca2a62fe859971fe5687a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fdc11b8a-ef47-4f78-8527-5d8326ef6a92.09b3966a341ca2a62fe859971fe5687a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fdc11b8a-ef47-4f78-8527-5d8326ef6a92.09b3966a341ca2a62fe859971fe5687a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (661542613, 'Fresh Apple Kanzi, 2LB Bag', 4.44, '847473004421', 'Treat your family to the wildly juicy, sweet and crisp taste of Kanzi Apples. With a classic apple cider flavor, these apples have a firm texture with flesh that is slow to brown. This variety was developed in New Zealand by master farmers and now grown in Zillah, Washington. A crossing of Braeburn and Gala varieties, this apple fruit is always cross-pollinated to ensure genetic diversity. Kanzi Apples retain their white color long after you\'ve cut them open, which ensures that your refreshing fruit salads and other desserts look beautiful and appetizing. Free of gluten, fat and cholesterol, these apples are a wholesome way to indulge your sweet tooth.', 'Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Free from genetic modification Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a6b00bf2-7f51-421a-8fd3-622cea15906f.f4e6ebab732d05e65b0a2a868b742190.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6b00bf2-7f51-421a-8fd3-622cea15906f.f4e6ebab732d05e65b0a2a868b742190.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6b00bf2-7f51-421a-8fd3-622cea15906f.f4e6ebab732d05e65b0a2a868b742190.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (661843433, '240pc On Ylw 3# Lm', 465.6, '400094669518', 'short description is not available', '240pc On Ylw 3# Lm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (661957064, '2# Bag Lemons', 3.92, 'deleted_072240800825', 'short description is not available', '2# Bag Lemons', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (662059829, 'Watermelon Seedless', 4.48, '400094408216', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (662060903, 'Services Reduced Program Dept 94', 0.01, '251868000002', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (662155265, '180pc Apple Gala 3#', 768.6, '400094768839', 'short description is not available', '180pc Apple Gala 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (662512669, '500lb Bin Green Cabbage', 340, '405794790340', 'When looking for a delicious snack or meal and want diversity in how you can prepare your food then, reach for fresh green cabbage. It is farm fresh and you can prepare it in many different ways including making coleslaw, sauerkraut, you can fry it, boil it or even eat it raw and it pairs great in a salad. Cabbage is excellent for your digestive system, can help lower cholesterol and is packed with Vitamin C.', 'Fresh Green cabbage is delicious and great for you! Cabbage can lower blood pressure Cabbage can lower cholesterol Cabbage is very good for your digestive system Cabbage is packed with Vitamin C', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1d7a3156-f0a5-470c-a9f4-de9f23a3c2f2.17439e2438c4d52c5af94045c9f78f13.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d7a3156-f0a5-470c-a9f4-de9f23a3c2f2.17439e2438c4d52c5af94045c9f78f13.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d7a3156-f0a5-470c-a9f4-de9f23a3c2f2.17439e2438c4d52c5af94045c9f78f13.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (662523797, 'peru food garlic paste - ajo en pasta, 7.5 oz', 11.28, '812125009239', 'garlic paste;ajo en pasta;7.5 oz. jar;fresh;imported from peruSKU:ADIB00AEDLNAO', 'How to Enjoy Peru Food Garlic Paste Peru Food Garlic Paste makes cooking easier and more flavorful. Add a spoonful to marinades for meats, stir it into soups and stews, or use it as a base for sautéing vegetables. It’s a time-saving solution for creating restaurant-quality meals at home. Whether you\'re preparing a traditional Peruvian dish or experimenting with international cuisines, this garlic paste is your secret weapon for adding depth and richness to any recipe. Product Highlights Authentic Flavor: Made from fresh, high-quality Peruvian garlic for an unmatched taste. Versatile Use: Perfect for marinades, sauces, stir-fries, and more. Convenient: Ready-to-use paste saves you the hassle of peeling and chopping garlic. Premium Quality: Crafted with care to ensure a smooth, rich texture and bold flavor. Generous Size: Comes in a 7.5oz jar, offering plenty of paste for multiple meals. Ingredients Peru Food Garlic Paste is made with a simple yet powerful blend of ingredients: fresh garlic, sunflower oil, and a pinch of salt. The natural garlic flavor is preserved without any artificial additives or preservatives, making it a wholesome choice for your kitchen. Key Words Garlic Paste, Peruvian Garlic, Ajo en Pasta, Cooking Paste, Latin American Flavors, Easy Cooking, Marinade Ingredient, Peruvian Cuisine, Garlic Lovers, 7.5oz Garlic Paste, Garlic Puree, Authentic Garlic Taste, Peru Food Products, Latin Kitchen Essentials, Fresh Garlic Paste.', 'Peru Food', 'https://i5.walmartimages.com/asr/fb644c3c-4a34-4e31-813c-6336acebcaf3.7964f412b7e22b5f10444574b72371db.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb644c3c-4a34-4e31-813c-6336acebcaf3.7964f412b7e22b5f10444574b72371db.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb644c3c-4a34-4e31-813c-6336acebcaf3.7964f412b7e22b5f10444574b72371db.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (662554369, '120pc Apple Fuji 5#', 600, '405672893453', 'short description is not available', '120pc Apple Fuji 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (662899001, '180pc Pto Rst 10#ipp', 799.2, '400094917886', 'short description is not available', '180pc Pto Rst 10#ipp', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (662973428, 'Fresh Keylimes, 1 lb Bag', 2.98, 'deleted_744430275545', 'Add zest and flavor to your meals and beverages with these Key Limes. Freshly squeezed limes provide a healthy dose of vitamin C to your diet and are a key ingredient in many recipes, from homemade salsa to chicken dishes. The citrusy tropical flavor of these limes are sure to add a zing to all your cooked meals. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. These limes are sold in a one-pound bag, so you\'ll have plenty for all your culinary creations. Enjoy the refreshing, tart flavor of Key Limes. Available in a 1 lb bag.', 'Fresh and juicy key limes Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies, and tarts Refreshing, tart flavor', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/e8d4639e-f09a-44b4-934a-f1adcbf0b5df.a77b2d505e0395abdcf2fbdfdd24aa91.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e8d4639e-f09a-44b4-934a-f1adcbf0b5df.a77b2d505e0395abdcf2fbdfdd24aa91.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e8d4639e-f09a-44b4-934a-f1adcbf0b5df.a77b2d505e0395abdcf2fbdfdd24aa91.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (663225988, '200pc Pto Ykn 5# Id', 694, '405511869649', 'short description is not available', '200pc Pto Ykn 5# Id', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (663257913, '160pc On Vid 4# Gash', 630.4, '405514342712', 'short description is not available', '160pc On Vid 4# Gash', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (663383108, 'Freshness Guaranteed Seasonal Fruit Blend 32 Oz', 8.38, 'deleted_681131036634', 'short description is not available', 'Freshness Guaranteed Seasonal Fruit Blend 32 Oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (663386169, 'Baby Kale', 3, '815063020212', 'Baby Kale', 'New look, same greens: Dream Greens is now AeroFarms!,Sustainably Grown Indoors,No Pesticides Ever,Locally Grown in NJ,Non-GMO Verified,No Washing Needed,B Corporation Certified,Grown using up to 95% less water, 99% less land than field farming,40% Less Plastic, Post-Consumer Recycled Trays,OU Kosher', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2cbb9888-5cc5-4a96-a14a-e7e10f1ae8cc.ec7aed2220fc063f32b207346fd179ef.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2cbb9888-5cc5-4a96-a14a-e7e10f1ae8cc.ec7aed2220fc063f32b207346fd179ef.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2cbb9888-5cc5-4a96-a14a-e7e10f1ae8cc.ec7aed2220fc063f32b207346fd179ef.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (663780191, 'California Grown Peaches, per Pound', 1.58, '400094272909', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (663885752, 'California Grown Peaches, per Pound', 1.58, '400094032374', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (663916209, 'Fresh Black Seedless Grapes', 1.88, 'deleted_014668760213', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (664006439, 'Iceberg Lettuce, 1 Each', 1.74, 'deleted_885460000049', 'Treat yourself to the fresh, crisp taste of Iceberg Lettuce. This lettuce is loaded with nutrients, has a mild sweetness, and is highly crisp for a perfect bite every time. You can use it to create your very own personalized salad tossed with your favorite vegetables, protein, croutons, nuts, and dressing. Use it as a topping on sandwiches, burgers, tacos, and more or simply enjoy it as a healthy side. Fill the wraps with hummus and vegetables for a vegetarian option or use your favorite deli meat slices, condiments, and vegetables for healthier lunch alternative. This lettuce is low in calories making it a perfect light, fresh addition to any healthy diet. Enjoy fresh from the farm taste with Iceberg Lettuce.', 'Iceberg Lettuce, 1 Each: Light, crisp, mild sweet taste Create your very own personalized salad tossed with your favorite vegetables, protein, croutons, nuts and dressing Use it as a topping on sandwiches, burgers, tacos, and more or simply enjoy it as a healthy side Fill the wraps with hummus and vegetables for a vegetarian option or use your favorite deli meat slices, condiments and vegetables for healthier lunch alternative', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6989391c-7793-442e-b937-f2d0562fef2b.7979218cc798806f9f713c77e3da4939.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6989391c-7793-442e-b937-f2d0562fef2b.7979218cc798806f9f713c77e3da4939.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6989391c-7793-442e-b937-f2d0562fef2b.7979218cc798806f9f713c77e3da4939.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (664033801, 'Walmart Produce Freshly Diced Yellow Onions', 2.88, 'deleted_074641015938', 'short description is not available', 'Walmart Produce Freshly Diced Yellow Onions', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (664035574, 'Fresh Green Seedless Grapes, 2 Lb', 4.94, 'deleted_852110003101', 'short description is not available', 'Fresh Green Seedless Grapes, 2 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (664213260, 'Fresh Chilean Grown Cotton Candy Grapes', 2.5, '045255148626', 'short description is not available', 'Fresh Chilean Grown Cotton Candy Grapes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (664405507, 'Gala Apples, 2 Lb.', 6.98, '847473004209', 'Gala Apples, 2 Lb.', 'Gala Apples 2 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (664435026, 'AVO BAG 10/4 40 MXNR', 3.28, 'deleted_852324007292', 'Avocados', 'Large Avocado 4 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (664447382, 'Fresh Malanga Lila, lb.', 1.27, '000000047319', 'There are many other ways to consume Fresh Malanaga Lila it such as puree you can mash them after boiling with a little butter and garlic. Try slicing them thin and frying them in deep hot oil creating Malanaga chips. You can also add it to your soup. This taro is rich in dietary fiber. Find this in your Local Walmart!', 'Contains B vitamins Including riboflavin and folate Can improve energy levels, boost immune function vitamins', 'Raices', 'https://i5.walmartimages.com/asr/e5bac3df-4136-4331-bf55-06aefcfeed5a.c62b6d9398cbebe03fd62098c8c02172.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5bac3df-4136-4331-bf55-06aefcfeed5a.c62b6d9398cbebe03fd62098c8c02172.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5bac3df-4136-4331-bf55-06aefcfeed5a.c62b6d9398cbebe03fd62098c8c02172.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (664519749, 'Sliced Baby Bella Mushrooms, 8 oz', 2.18, 'deleted_631661999879', 'Add flavor and texture to your meals with Sliced Baby Bella Mushrooms. Baby Bella mushrooms are also known as portobello mushrooms. This versatile ingredient is perfect for a variety of dishes, whether it\'s for breakfast, lunch, or dinner. Mince some up and put them in your omelet with peppers and ham for a filling and nutritious breakfast. Add them to a healthy salad for lunch or use them to top off your next homemade pizza. Baby Bella mushrooms are an excellent source of niacin and are naturally low in fat and cholesterol-free. Enjoy the delicious taste of Sliced Baby Bella Mushrooms any way you prepare them.', 'Sliced Baby Bella Mushrooms, 8 oz: Adds flavor and texture to your meals Great for breakfast, lunch, or dinner Mince them for an omelet, put them in a salad, or use as a topping on pizza Naturally low in fat and cholesterol-free Rich source of niacin', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3e32c0f5-b81b-41d8-b810-15475fb95279.10e200b9442aef9d105550e3fead7b1e.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e32c0f5-b81b-41d8-b810-15475fb95279.10e200b9442aef9d105550e3fead7b1e.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e32c0f5-b81b-41d8-b810-15475fb95279.10e200b9442aef9d105550e3fead7b1e.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (664677584, 'Kabocha Squash', 1.48, '000000047692', 'Kabocha Squash is also known as Japanese pumpkin and is ideal for creating tasty Asian dishes. It features a dark green outer skin that is marked with uneven stripes. This organic kabocha squash has finely textured golden flesh on the inside that resembles a pumpkin or sweet potato in flavor. Like other winter squash, it\'s rich in nutrients that include fiber, beta carotene and potassium. Kabocha is a fat-free vegetable that can be cooked or baked as is with the skin on or used in pies, soups and more.', 'Kabocha squash is also known as Japanese pumpkin Ideal for creating tasty Asian dishes Features a dark green outer skin with uneven stripes Inside has a finely textured golden flesh Resembles pumpkin or sweet potato in flavor Rich in fiber, beta carotene and potassium Fat-free vegetable used in pies, soups and more', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5d1d068a-7b60-491c-9099-2ec9a29577d4.ecfea1f9c8a30e96c1c93045ae5944e4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d1d068a-7b60-491c-9099-2ec9a29577d4.ecfea1f9c8a30e96c1c93045ae5944e4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d1d068a-7b60-491c-9099-2ec9a29577d4.ecfea1f9c8a30e96c1c93045ae5944e4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (665150208, '120pc Grapefruit 5#', 717.6, '400094594117', 'short description is not available', '120pc Grapefruit 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (665169502, 'Hypermart Tierra Optical Green Bell Pepper', 2.97, '405874895286', 'Hypermart Tierra Optical Green Bell Pepper', 'Hypermart Tierra Optical Green Bell Pepper', 'Hypermart', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (665358069, 'Large Avocado 3 Count Bag', 4.48, 'deleted_845857000922', 'short description is not available', 'Large Avocado 3 Count Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (665626922, 'Fresh Red Seedless Grapes', 3.78, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (665834936, 'Fresh Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094250990', 'Fresh Grown Yellow Nectarines, 1 Lb.', 'Fresh Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (666078753, 'Fresh Organic Green Seedless Grapes from California, 2 lb Package', 6.88, '405526052951', 'Marketside Organic Green Seedless grapes are the perfect sweet snack that your whole family will enjoy. The fresh grapes are crisp and sweet and make an excellent addition to your breakfast, lunch, dinner or snack. A ¾ cup of grapes contains just 90 calories with no fat, no cholesterol, and virtually no sodium. Grapes are also a good source of Vitamin K and a natural source of antioxidants. This container conveniently contains two pounds of grapes making it easy to have your favorite fruit on hand for everyone in the house.', 'Fresh Organic Green Seedless Grapes Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Marketside', 'https://i5.walmartimages.com/asr/fa013e5f-88fd-4a2c-8453-144779f555b2.bb2574b03bc9fb4bebff615e492a97b1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa013e5f-88fd-4a2c-8453-144779f555b2.bb2574b03bc9fb4bebff615e492a97b1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa013e5f-88fd-4a2c-8453-144779f555b2.bb2574b03bc9fb4bebff615e492a97b1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (666196726, 'Yellow Onions, 3 Lb.', 1.94, 'deleted_400094875674', 'Yellow Onions, 3 Lb.', 'Yellow Onions 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (666243351, 'NY SPICE SHOP Apple Ring Dried - 10 Pound - Dry Fruit Slices - Great for Snaking and Baking - Fresh', 114.99, '768253245677', 'Dried Apple Rings are a favorite of snackers because they can be eaten on the run and they deliver chewy, apple goodness. Chewy, dehydrated apple ringsSliced into rings for easy snacking', 'Dried Apple Rings are a favorite of snackers because they can be eaten on the run and they deliver chewy, apple goodness. Chewy, dehydrated apple ringsSliced into rings for easy snacking', 'NY Spice Shop', 'https://i5.walmartimages.com/asr/c276d496-cc60-423c-9418-4729e6f4e849.d9f3913efc1d7df584ab824c4a47d529.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c276d496-cc60-423c-9418-4729e6f4e849.d9f3913efc1d7df584ab824c4a47d529.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c276d496-cc60-423c-9418-4729e6f4e849.d9f3913efc1d7df584ab824c4a47d529.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (666258186, 'Rockit Apple', 0.01, '405732739707', 'short description is not available', 'Rockit Apple', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (666531397, 'Tomato -Cherry', 3.98, '715339359070', 'short description is not available', 'Tomato -Cherry', 'Bonnie Braid', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (666686902, 'Watermelon Seedless', 4.48, '400094257937', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (667677667, 'China Fresca Mondada', 4.98, '826594105071', 'Enjoy the juicy goodness of Fresh Navel Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes', 'China Fresca', 'https://i5.walmartimages.com/asr/e39e5863-a82e-4342-b1ed-afb0c1dcf30a.879b01680d07730f2abb7cfc7284f91b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e39e5863-a82e-4342-b1ed-afb0c1dcf30a.879b01680d07730f2abb7cfc7284f91b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e39e5863-a82e-4342-b1ed-afb0c1dcf30a.879b01680d07730f2abb7cfc7284f91b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (667892999, 'Fresh Black Seedless Grapes', 2.08, 'deleted_814326010021', 'Treat yourself to the delicious, juicy flavor of Fresh Black Seedless Grapes. These grapes are bursting with flavor and are completely seedless, so you can easily enjoy a handful as a fresh snack any time of day. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the fresh taste of Fresh Black Seedless Grapes.', 'Fresh Black Seedless Grapes: Seedless black grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Incorporate into fruit salad Perfect for quick, easy and healthy snacks', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/afe6f179-14e7-45ab-b015-a069c18afd72.9ddad7f820d1981e1d57d83261a3ac74.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/afe6f179-14e7-45ab-b015-a069c18afd72.9ddad7f820d1981e1d57d83261a3ac74.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/afe6f179-14e7-45ab-b015-a069c18afd72.9ddad7f820d1981e1d57d83261a3ac74.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (668305688, 'Freshness Guaranteed Red Apple Slices, 14 oz', 2.98, '681131180047', 'Enjoy the sweet, refreshing taste of Freshness Guaranteed Red Apple Slices. These pre-cut slices are great for breakfast, lunch, dessert, or when you want a snack. Apples are a good source of vitamin C, fiber, and potassium making them an excellent healthy treat. You can eat the slices right out of the container, serve with a dollop of peanut butter for a sweet treat, or cover them in nutmeg and cinnamon and bake in the oven for a mouthwatering dish. With 14-ounces in each container, these apples are great for sharing with friends and family or keeping it for yourself. Them come in a reclosable container to help maintain freshness. Bring home Freshness Guaranteed Red Apples Slices today for a refreshing, healthy treat. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Red Apple Slices, 14 oz Sweet, refreshing treat Great for breakfast, lunch, dessert, or when you want a snack Good source of vitamin C, fiber, and potassium Enjoy right out of the container, serve with a dollop of peanut butter, or cover in nutmeg and cinnamon and bake Share with friends and family or keep for yourself Comes in a re-closable container to help maintain freshness', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/636ce479-bc80-4f01-a8ab-783ec183dd96.553dce4be0acae99770887255a538d7d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/636ce479-bc80-4f01-a8ab-783ec183dd96.553dce4be0acae99770887255a538d7d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/636ce479-bc80-4f01-a8ab-783ec183dd96.553dce4be0acae99770887255a538d7d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (668315281, 'Pure Green Farms Baby Green and Red Leaf Lettuce Salad, 4 oz Clam Shell, Fresh', 2.98, '850014580056', 'Our hydroponic Baby Green and Red lettuce is a baby red and green bold lettuce mix full of flavor', 'Baby red and green bold lettuce mix full of flavor', 'Pure Green Farms', 'https://i5.walmartimages.com/asr/78958970-767a-4cf2-a23e-4c04548b9c84.39281435bdaea00e647753c9071339cc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/78958970-767a-4cf2-a23e-4c04548b9c84.39281435bdaea00e647753c9071339cc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/78958970-767a-4cf2-a23e-4c04548b9c84.39281435bdaea00e647753c9071339cc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (668491012, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094170694', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', 'https://i5.walmartimages.com/asr/53ffd116-6b5b-4cc9-876c-bd428e44ebca.d6b6f35b426e13355b715dadfca45c64.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/53ffd116-6b5b-4cc9-876c-bd428e44ebca.d6b6f35b426e13355b715dadfca45c64.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/53ffd116-6b5b-4cc9-876c-bd428e44ebca.d6b6f35b426e13355b715dadfca45c64.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (668793836, 'Gills Onions Gills Red Onions, 7 oz', 2.58, '643550000412', 'Red Onions, Fresh Diced 7 oz (198 g) Quality. Convenience. Grower Direct. Product of USA. Keep refrigerated. 7 oz (198 g) Oxnard, CA 93030', 'Red Onions, Fresh Diced Quality. Convenience. Grower Direct. Product of USA.', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (668847405, 'Fieldpack Unbranded Bunch Beets', 2.24, 'deleted_885460000209', 'short description is not available', 'Fieldpack Unbranded Bunch Beets', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/4ab8346e-5f53-4f66-a0b3-1f548541f8fa.1e50553d136e29e006d7dc325067286e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ab8346e-5f53-4f66-a0b3-1f548541f8fa.1e50553d136e29e006d7dc325067286e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ab8346e-5f53-4f66-a0b3-1f548541f8fa.1e50553d136e29e006d7dc325067286e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (669127324, '240pc On Ylw 3# Tm', 465.6, '405537335258', 'short description is not available', '240pc On Ylw 3# Tm', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (669308748, 'Watermelon Seedless', 4.48, '400094407370', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (669561360, 'Fresh Cotton Candy Green Grapes, Bag (2.25 lbs/Bag Est.)', 3.98, '000000030939', 'Fresh Cotton Candy Grapes are a delightful and unique natural treat, offering a mouthwatering cotton candy flavor in every bite. These specially grown grapes perfectly capture the essence of the classic fairground treat, providing a sweet and satisfying experience that will surprise and delight both children and adults alike. Enjoy the whimsical taste sensation of cotton candy grapes - a fun, healthy, and deliciously indulgent snack that brings joy to your taste buds.', 'Fresh Produce Cotton Candy Green Grapes Grapes Candy Variety Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/816a789f-7e73-4bb4-b845-1791ccb3ee0c.689391eec53289a75ea863ac18caf7f6.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/816a789f-7e73-4bb4-b845-1791ccb3ee0c.689391eec53289a75ea863ac18caf7f6.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/816a789f-7e73-4bb4-b845-1791ccb3ee0c.689391eec53289a75ea863ac18caf7f6.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (669875200, '180pc Pto Idaho 10#', 799.2, '400094858592', 'short description is not available', '180pc Pto Idaho 10#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (670286307, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094145708', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (670791352, 'Fresh Pears Bosc , 3 lb. Bag', 9.47, '', 'The Bosc pear is a variety widely recognized for its sweet flavor, firm texture, and distinctive appearance. Its skin is cinnamon-brown or tan, often with a slightly rough texture. It has an elongated body and a well-defined neck, more slender than other pears. Its firm texture makes it perfect for warm cooking, where other pears fall apart. It doesn\'t change color much when ripe, unlike other varieties. It is very aromatic. Excellent for baking, roasting, or poaching because it maintains its shape. It is used in pies, compotes, salads, jams, or simply on its own with cheese.', 'Fresh Bosc Pears, 3 lb Bag It is used in pies, compotes, salads, jams, or simply on its own with cheese. It is very aromatic. It doesn\'t change color much when ripe, unlike other varieties. Sweet and spicy flavor, sometimes with a hint of honey or nuts.', 'Unbranded', 'https://i5.walmartimages.com/asr/3acbee8f-3b94-4380-ba0f-05a971cb5982.cbcf5a4fd03f6a8bf2d5aefabe6df3ff.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3acbee8f-3b94-4380-ba0f-05a971cb5982.cbcf5a4fd03f6a8bf2d5aefabe6df3ff.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3acbee8f-3b94-4380-ba0f-05a971cb5982.cbcf5a4fd03f6a8bf2d5aefabe6df3ff.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (671304754, '90pc Pto Rst 10#2 Ff', 444.6, '405530518443', 'short description is not available', '90pc Pto Rst 10#2 Ff', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (671465202, 'Bulk Sweet Onions', 1.48, 'deleted_887051000186', 'short description is not available', 'Bulk Sweet Onions', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (671874658, 'Fresh Orange Bell Pepper, Each', 2.47, '000000049504', 'Enhance your meals with the delicious flavor of Fresh Orange Bell Peppers. This fresh vegetable contains essential vitamins such as A and C, and minerals including calcium and magnesium. Orange bell pepper, also known as red capsicum, has a crisp flavor that enhances a variety of recipes. Dice bell peppers and put them in a hearty chili, slice them, sauté them with onions or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out red bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper that will have the family asking for seconds. They also taste delicious raw alongside other vegetables. Add your favorite dip for a healthy, crunchy crudité. Cooked or uncooked, Orange Bell Peppers are an excellent item to have on hand.', 'This item has a large amounts of vitamins such as A, E, B6, B9, C & K. It also a great source of minerals such as zinc, magnesium, potassium and sodium. Fresh High on Vitamin A Large amounts of Vitamin E', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e3ac8bb7-bf73-407e-947a-5b10de54ddc7.b9c0a3d6f58069d8057b7daa38c62429.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3ac8bb7-bf73-407e-947a-5b10de54ddc7.b9c0a3d6f58069d8057b7daa38c62429.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3ac8bb7-bf73-407e-947a-5b10de54ddc7.b9c0a3d6f58069d8057b7daa38c62429.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (672030629, 'Fresh Medium Salad Tomatoes, 2 lb Bag', 0.5, '405533272694', 'Slicing Tomatoes are the leader when it comes to yummy, fresh tomatoes. The juicy tomato taste and meaty texture make these tomatoes the perfect choice for slicing up and topping your favorite slider and sandwiches. Use them to make a hearty grilled cheese and tomato sandwich that\'s bursting with flavor. Slice some up and pair with fresh mozzarella, basil, and balsamic vinegar for a delicious appetizer. You can even enjoy a slice topped with a sprinkle of salt and pepper for a fresh, healthy snack. Add Slicing Tomatoes to your fresh produce basket today for a delicious juicy addition.', 'Whole, Fresh, Whole Tomatoes picked at their peak Medium sized salad tomatoes, 1 lb. Approximately 2-3 tomatoes per lb Grown for peak flavor Slicing Tomatoes are the leader when it comes to yummy, fresh tomatoes. T he juicy tomato taste and meaty texture make these tomatoes the perfect choice for slicing up and topping your favorite slider and sandwiches. Use them to make a hearty grilled cheese and tomato sandwich that\'s bursting with flavor. Slice some up and pair with fresh mozzarella, basil, and balsamic vinegar for a delicious appetizer. You can even enjoy a slice topped with a sprinkle of salt and pepper for a fresh, healthy snack. Add Slicing Tomatoes to your fresh produce basket today for a delicious juicy addition.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2d15e187-76cb-45fd-ba51-efeb13ef44e9.5e8fe94af9ad13039b11a52194045401.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2d15e187-76cb-45fd-ba51-efeb13ef44e9.5e8fe94af9ad13039b11a52194045401.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2d15e187-76cb-45fd-ba51-efeb13ef44e9.5e8fe94af9ad13039b11a52194045401.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (672064922, 'Fieldpack Unbranded Autumn Colour Pumpkins', 4.98, 'deleted_729062048217', 'short description is not available', 'Fieldpack Unbranded Autumn Colour Pumpkins', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (672123793, 'Fieldpack Unbranded Green Onion Organic', 1.86, 'deleted_740695940754', 'short description is not available', 'Fieldpack Unbranded Green Onion Organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (672259939, 'Fresh Pear Anjou, 2 lb Bag', 3.98, '847473004124', 'Indulge in the sumptuous taste of organic Anjou pears, a perfect addition to your fresh produce collection. Handpicked with care, these succulent fruits boast a sweet, juicy flavor that will delight your taste buds. Enjoy them sliced in a salad, roasted, or as a healthy snack. Our Anjou pears are grown and harvested with utmost responsibility, ensuring you get the finest produce every time. Treat yourself to a deliciously fresh, sweet delight!', 'These Danjou Pears are grown organically, ensuring you only get the best, most delicious fruit available. Our carefully grown Danjou Pears are fresh and juicy, plucked straight from the tree just for you. With their sweet, succulent flavor, these pears make for a perfect snack or addition to any dish. With high-quality, fresh produce like this, you\'ll taste the difference in every bite.', 'Unbranded', 'https://i5.walmartimages.com/asr/839ef2cf-9bc7-4d0f-8114-9baabde7d3e0_1.67fc2e931ea8169ab16d4b7e65a15578.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/839ef2cf-9bc7-4d0f-8114-9baabde7d3e0_1.67fc2e931ea8169ab16d4b7e65a15578.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/839ef2cf-9bc7-4d0f-8114-9baabde7d3e0_1.67fc2e931ea8169ab16d4b7e65a15578.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (672319176, 'Fieldpack Unbranded Fresh Strawberries 2#', 3.42, '400094496800', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 2#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (672410400, 'Fresh Grown Yellow Peaches, 1 Lb.', 1.58, '405505064173', 'Fresh Grown Yellow Peaches, 1 Lb.', 'Fresh Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (672419626, 'Watermelon Seedless', 4.48, '405504887865', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (672889089, 'Yellow Flesh Peaches, per Pound', 1.58, '400094450345', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (672908898, 'Fresh Mini Romaine Lettuce, Non-GMO, Sustainably Grown, 2 Heads', 2.97, '027918947234', 'Fresh Mini Romaine features two mini heads of romaine lettuce with a crisp, fresh texture and great classic romaine flavor. Romaine leaves are crisp and mild, and the crunchy midrib is particularly succulent and sweet making them choice for many meal occasions including chopped as a salad base, on top of your favorite sandwiches, and as a wrap or a bread substitute. This romaine is specially greenhouse grown, sustainable, and non-GMO, which makes it an excellent choice for your home. Bring home Fresh Mini Romaine today.', 'Young romaine lettuce heads Non-GMO and sustainably grown Crisp and mild romaine leaves Crunchy midrib is particularly succulent and sweet No pesticides or herbicides Great for salads, wraps, and more Fresh and delicious vegetable option Ideal for a healthy, balanced diet', 'Fresh Produce', 'https://i5.walmartimages.com/asr/42f7abf4-36ce-4083-92af-ac318a0fc3ae.d99274bb30f0591595a452eb5d9f7271.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42f7abf4-36ce-4083-92af-ac318a0fc3ae.d99274bb30f0591595a452eb5d9f7271.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42f7abf4-36ce-4083-92af-ac318a0fc3ae.d99274bb30f0591595a452eb5d9f7271.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (673386850, 'Athena Cantaloupe', 3.28, 'deleted_860005104536', 'short description is not available', 'Athena Cantaloupe', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (673424310, 'Services Reduced Program Dept 94', 0.01, '251692000001', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (673435619, 'Purple Asparagus', 3.98, '000000030793', 'short description is not available', 'Purple Asparagus', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (673671208, 'Fresh Green Seedless Grapes', 1.98, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (673680401, 'Mcdaniel & Chirico Wordwide Lemons', 4.88, 'deleted_850014851125', 'short description is not available', 'Mcdaniel & Chirico Wordwide Lemons', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/029a9343-aba4-439e-9520-2702241b314e.263848d0be66e2964930564765c75224.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/029a9343-aba4-439e-9520-2702241b314e.263848d0be66e2964930564765c75224.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/029a9343-aba4-439e-9520-2702241b314e.263848d0be66e2964930564765c75224.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (673713924, '180pc Pto Rst 10# Bw', 1074.6, '400094858806', 'short description is not available', '180pc Pto Rst 10# Bw', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (673714570, 'Watermelon Seedless', 4.48, '405517450155', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (673922032, 'Jonamac Apples 3 Lb Bag', 3.94, '033383091082', 'short description is not available', 'Jonamac Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (674047121, 'Forelle Pears, per Pound', 1.64, '000000044189', 'Forelle Pears, per Pound', 'Forelle Pears, Each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (674160451, 'Fresh Mango', 0.98, '405955703059', 'Mangoes are a tropical fruit known for their sweet, slightly tart flavor and buttery texture. They are a rich source of vitamins A and C, dietary fiber, and antioxidants, offering various health benefits such as improved digestion, heart health, and immune function. Mangoes are widely consumed globally, used in a variety of dishes ranging from smoothies and salads to curries and desserts. Their ripeness can be determined by a sweet aroma and slight softness to touch.', 'Mangoes are tropical fruits known for their sweet and slightly tangy flavor, buttery texture, and vibrant color. They are one of the most widely consumed fruits globally, particularly in Asia, Central and South America, and the Middle East. Mangoes offer a myriad of health benefits due to their rich nutrient profile and are versatile in their culinary uses, often being used in both sweet and savory dishes. Taste and Culinary Uses: Mangoes possess a unique flavor that is lusciously sweet with a hint of tartness and a rich, creamy texture. They are commonly eaten fresh, but they can also be incorporated into a variety of dishes. Mangoes are used in making smoothies, salads, salsas, curries, and desserts like ice cream and pastries. Also, dried and pickled mangoes are popular snacks in many cultures. Health Benefits: Mangoes are a nutritional powerhouse packed with vitamins A and C, dietary fiber, and antioxidants. They can support heart health, improve digestion, promote healthy skin and hair, and boost the immune system. The high levels of antioxidants in mangoes are linked to fighting against certain types of cancer. Cultivation and Harvest: Mango trees thrive in tropical climates and can grow quite large, often reaching heights of 100 feet. They bear fruit annually, with the major harvest season varying depending on the region. The fruit is harvested when mature, but not fully ripe, and it continues to ripen off the tree. The ripeness of a mango can usually be determined by its slightly sweet aroma and slight give when gently pressed.', 'Unbranded', 'https://i5.walmartimages.com/asr/d4993498-cb0a-4539-bee5-b3c0db4a6702.ee3057845556133bab8fb2cd8e56b1a1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4993498-cb0a-4539-bee5-b3c0db4a6702.ee3057845556133bab8fb2cd8e56b1a1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4993498-cb0a-4539-bee5-b3c0db4a6702.ee3057845556133bab8fb2cd8e56b1a1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (674219887, 'Medley Tomato, 12 oz Package', 4.48, 'deleted_816239011058', 'Bring the fresh, delicious taste of Grape Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Grape Tomatoes.', 'Tomato Medley', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (674292939, 'Melon Cantaloupe 12 Ct', 2.5, '405873138421', 'short description is not available', 'Melon Cantaloupe 12 Ct', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/ce6b6f5f-988e-4c7b-bf06-e0a60e2c4766.ced15d42798e0b77041e31127b53c5db.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce6b6f5f-988e-4c7b-bf06-e0a60e2c4766.ced15d42798e0b77041e31127b53c5db.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce6b6f5f-988e-4c7b-bf06-e0a60e2c4766.ced15d42798e0b77041e31127b53c5db.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (675046511, 'Marketside Spring Mix Salad 11oz', 3.98, '030223004066', 'short description is not available', 'Marketside Spring Mix Salad 11oz', 'Marketside', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (675213790, 'Taylor Farms Green Leaf Lettuce, 4LB, 1 Count, Fresh Vegetables', 23.78, '030223033424', 'Enjoy crisp, fresh, and versatile greens with Taylor Farms Green Leaf Lettuce. Perfect for sandwiches, wraps, burgers, and salads, this leafy green is harvested at peak freshness and packed with flavor. . Whether you’re creating a low-carb wrap, topping a juicy burger, or mixing a garden-fresh salad, green leaf lettuce is a go-to choice for home chefs and health-conscious eaters. It’s naturally low in calories and a good source of vitamins A and K, supporting a nutritious lifestyle. Rinse and serve or store in the fridge until ready to use. This product is Shellfish-free. Elevate your produce game with premium greens from Taylor Farms, a brand known for freshness and quality.', 'Premium quality Taylor Farms Green Leaf Lettuce in a 4LB package Harvested at peak freshness for superior taste and crisp texture Ideal for various dishes: sandwiches, salads, wraps, and burgers Naturally low in calories, rich in vitamins A and K for health benefits Food_condition is fresh; container_material can be breathable bags or bowls Free from dairy, eggs, soy, and shellfish ensuring allergen-safe consumption', 'Taylor Farms', 'https://i5.walmartimages.com/asr/f07dd0ec-aaea-4d09-9703-1889d2d1c7da.91ca74228629ff85fba664601dca45c8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f07dd0ec-aaea-4d09-9703-1889d2d1c7da.91ca74228629ff85fba664601dca45c8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f07dd0ec-aaea-4d09-9703-1889d2d1c7da.91ca74228629ff85fba664601dca45c8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (675259580, 'Organic Tuscan Kale Greens, 10oz', 3.97, '095829600210', 'short description is not available', 'Kale, Organic, Tuscan, Greens USDA Organic. Certified Organic by Quality Assurance International. Good source of vitamins A & C, calcium & fiber. Delivering Freshness since 1905. Fresh produce is vital to your family\'s meal. That\'s why since 1905, Robinson Fresh has been committed to making fresh produce the best it can be. Trust us to provide quality and freshness that exceeds your standards so your family can thrive today and tomorrow. how2recycle.info. Questions or concerns call 1-800-349-6639. Produce of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e2f131fc-bdf5-484b-a2e5-3aef0b7389ba.a97803b8485904598f9bfea3af107c47.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2f131fc-bdf5-484b-a2e5-3aef0b7389ba.a97803b8485904598f9bfea3af107c47.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2f131fc-bdf5-484b-a2e5-3aef0b7389ba.a97803b8485904598f9bfea3af107c47.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (675752938, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094484302', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (675857268, 'Yellow Flesh Peaches, per Pound', 1.58, '400094358306', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (676054309, 'AVO BAG 10/5 48 MXWP', 3.28, 'deleted_701080311085', 'Avocado Bagged', 'Large Avocado 5 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (676621979, 'Salad Bowl Chef', 2.98, '795631842883', 'short description is not available', 'Salad Bowl Chef', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (676653710, 'Fresh Red Seedless Grapes', 2.88, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (676685423, 'California Grown Peaches, per Pound', 1.58, '400094006634', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (676795280, 'Fresh Dark Sweet Cherries', 3.97, '', 'short description is not available', 'Fresh Dark Sweet Cherries', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (676821849, 'Fresh Peach, 2lb Bag', 3.97, '095829210853', 'Fresh Peaches, 2lb Bag offers a delicious and juicy treat for peach lovers. These peaches are carefully selected to ensure optimal ripeness and flavor. With their vibrant orange color and sweet aroma, these peaches are the perfect addition to your breakfast, desserts, or simply enjoyed on their own. Each bag contains approximately 8 to 10 peaches, making it convenient for sharing or enjoying over several days. Indulge in the natural goodness and refreshing taste of Fresh Peaches, 2lb Bag.', 'Are you craving the sweet taste of summer? Look no further than our Fresh Peaches, 2lb Bag! Bursting with flavor and hand-picked at the peak of ripeness, these peaches are a delightful treat for any peach lover. Our dedicated team of experts carefully selects each peach to ensure optimal ripeness, so you can enjoy the perfect balance of sweetness and juiciness in every bite. The vibrant orange color and irresistible aroma will instantly transport you to a sunny orchard, making these peaches a visual and olfactory delight. Whether you\'re looking to enhance your breakfast, create mouthwatering desserts, or simply enjoy a refreshing snack, these peaches are an excellent choice. Add them to your morning yogurt, oatmeal, or pancakes for a burst of natural sweetness. Create delectable peach cobblers, pies, or smoothies that will impress your family and friends. Or savor their juicy goodness on their own for a guilt-free snack that will leave you feeling refreshed and satisfied. Each bag contains approximately 8 to 10 peaches, providing you with plenty to enjoy and share. Their convenient packaging ensures that your peaches stay fresh for longer, allowing you to savor their flavor over several days. Don\'t miss out on the natural goodness and refreshing taste of our Fresh Peaches, 2lb Bag. Experience the joy of biting into a perfectly ripe and juicy peach, and let its sweet, tangy flavors transport you to a summer paradise. Order your bag today and discover why these peaches are truly a taste of perfection.', 'Welch\'s', 'https://i5.walmartimages.com/asr/bc3534f0-ae80-4129-a4c7-fa43dae33448.b9b7f2622d71ba8acc3e341323dc1ad1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc3534f0-ae80-4129-a4c7-fa43dae33448.b9b7f2622d71ba8acc3e341323dc1ad1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc3534f0-ae80-4129-a4c7-fa43dae33448.b9b7f2622d71ba8acc3e341323dc1ad1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (676927718, 'Sable Seedless Grapes, 1 lb', 2.98, 'deleted_405512624759', 'short description is not available', 'Sable Seedless Grapes, 1 lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/e261d0a5-e8c1-4a86-b6a0-387eaee7e246_1.bc05ba38859e3978ddaf5f613b3a7742.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e261d0a5-e8c1-4a86-b6a0-387eaee7e246_1.bc05ba38859e3978ddaf5f613b3a7742.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e261d0a5-e8c1-4a86-b6a0-387eaee7e246_1.bc05ba38859e3978ddaf5f613b3a7742.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (677075380, 'Fieldpack Unbranded Cello Iceberg Lettuce', 1.58, 'deleted_033383650029', 'Large wrapped iceberg lettuce head.', 'Crisp,Fresh,Delicious,Grown in United States', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/b6457f40-fbf0-4995-a484-2ae6c3445993.36f07a56b56de233c7d261a3154f7d5f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b6457f40-fbf0-4995-a484-2ae6c3445993.36f07a56b56de233c7d261a3154f7d5f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b6457f40-fbf0-4995-a484-2ae6c3445993.36f07a56b56de233c7d261a3154f7d5f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (677143847, 'California Grown Peaches, per Pound', 1.58, '400094949528', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (678087044, 'Jicama And Lime', 2.48, '782796010790', 'short description is not available', 'Jicama And Lime', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (678157081, '175pc Pto Rst Org Co', 794.5, '405535971137', 'short description is not available', '175pc Pto Rst Org Co', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (678343082, 'Sweet Onion 2 Lb Bag', 4.68, 'deleted_856725001422', 'short description is not available', 'Sweet Onion 2 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (678572497, 'Baby Blonde Bella Potatoes, 3 Lb.', 4.88, 'deleted_852883004442', 'Baby Blonde Bella Potatoes, 3 Lb.', 'Baby Blonde Bella Potatoes 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (678723527, 'Zucchini Squash', 2.34, '072132800070', 'short description is not available', 'Zucchini Squash', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (678936555, 'Fresh Organic Green Beans, 12 oz', 3.98, '681131160599', 'Introducing our Organic Green Beans, pre-washed and ready to eat for your convenience. These premium green beans are grown without synthetic pesticides or fertilizers, ensuring a delicious side dish for any occasion. Boasting a Pero Fresh vibrant green color, crisp texture, and fresh taste, our organic green beans are perfect for steaming, sautéing, or adding to your favorite recipes. With a commitment to quality and sustainability, enjoy the best of nature\'s bounty with our Organic Green Beans.', 'Fresh organic green beans Washed and ready to eat 25 calories per serving 12oz (340g) bag of green beans contains about 4 servings USDA certified organic', 'Marketside', 'https://i5.walmartimages.com/asr/108105ea-055e-47ce-980e-2f385213c59f_3.1b3824547ef26ea24b675df6114243f8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/108105ea-055e-47ce-980e-2f385213c59f_3.1b3824547ef26ea24b675df6114243f8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/108105ea-055e-47ce-980e-2f385213c59f_3.1b3824547ef26ea24b675df6114243f8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (679155484, 'Seedless Cucumber', 1.38, 'deleted_628458001013', 'short description is not available', 'Seedless Cucumber', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/84e4c826-4180-49c8-b5a4-63d4702821fb_2.52bdcecdb76b49c1e13d5c8a26964e88.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/84e4c826-4180-49c8-b5a4-63d4702821fb_2.52bdcecdb76b49c1e13d5c8a26964e88.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/84e4c826-4180-49c8-b5a4-63d4702821fb_2.52bdcecdb76b49c1e13d5c8a26964e88.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (679531660, 'Dark Sweet Cherries, Half Pint', 2.98, '804305001409', 'Dark Sweet Cherries, Half Pint', 'Dark Sweet Cherries 1/2 Dry Pint', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (679777271, '180pc Apple Mac 3# 8', 709.2, '405747486955', 'short description is not available', '180pc Apple Mac 3# 8', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (680313210, '200pc Pto Ykn/red 5#', 1044, '405536654664', 'short description is not available', '200pc Pto Ykn/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (680592175, 'Services Reduced Program Dept 94', 0.01, '251709000000', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (680825860, 'BrightFarms Mixed Greens 4 oz', 2.29, '857062004541', 'BFarms Mixed Greens 4 Oz.', 'This mix of bold flavors, textures and colors is a combination of our favorite greens, both mild and spicy. Locally Grown Non-GMO Project Certified Pesticide Free', 'BrightFarms', 'https://i5.walmartimages.com/asr/4fbdcc57-2a72-478b-a585-95afc09416ad_1.c35c449cbf46670a726c28deffd78f11.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4fbdcc57-2a72-478b-a585-95afc09416ad_1.c35c449cbf46670a726c28deffd78f11.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4fbdcc57-2a72-478b-a585-95afc09416ad_1.c35c449cbf46670a726c28deffd78f11.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (680871990, 'Red Potatoes, 3 Lb.', 3.64, 'deleted_024617510035', 'Red Potatoes, 3 Lb.', 'Red Potatoes 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (680953615, 'Romaine Mix Salad, 4.5 oz', 2.98, '860000030656', 'Better Fields Farm Romaine Mix, 4.5 oz', 'Baby Lettuce Blend Packed Fresh Locally Grown Non-GMO Hydroponically Grown Perishable; keep refrigerated Net weight 4.5 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/62564f56-2068-418f-bfb6-cc85b3a2f461_1.4957a9ae99c00dcc45817dc39825bf0b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/62564f56-2068-418f-bfb6-cc85b3a2f461_1.4957a9ae99c00dcc45817dc39825bf0b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/62564f56-2068-418f-bfb6-cc85b3a2f461_1.4957a9ae99c00dcc45817dc39825bf0b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (680976335, 'Crunch Pak Family Snack Pack with 5 2oz bag of Sweet Apple Slices', 4.97, '732313001763', 'A Healthy Crunch Pak Family Snack Pack with 5 2oz bag of Sweet Apple Slices. Provides an optimal choice for on-the-go, between meals, lunchtime, or anytime during the day snack! Pick your family treat up today!', 'Crunch Pak Family Snack Pack with 5 2oz bag of Sweet Apple Slices 40 Calories per Serving Good Source of Vitamin C', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c0e10ef6-bcf9-4d95-aaae-8d5da3933b2c.a7e5a98ba6732f97c9399f3de8d4b4d1.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0e10ef6-bcf9-4d95-aaae-8d5da3933b2c.a7e5a98ba6732f97c9399f3de8d4b4d1.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0e10ef6-bcf9-4d95-aaae-8d5da3933b2c.a7e5a98ba6732f97c9399f3de8d4b4d1.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (681216192, 'Red Bell Pepper, each', 1.38, 'deleted_816053020045', 'Enhance your meals with the delicious flavor of Red Bell Peppers. This vegetable contains essential vitamins such as A and C, and minerals including calcium and magnesium. Red bell pepper, also known as red capsicum, has a crisp flavor that enhances a variety of recipes. Dice bell peppers and put them in a hearty chili, slice them and add to a deli sandwich, saute them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out red bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper that will have the family asking for seconds. Lunches and dinners are more scrumptious when fresh red peppers are part of the meal. They also taste delicious raw alongside other vegetables. Add your favorite dip for a healthy, crunchy crudite. Cooked or uncooked, Red Bell Peppers are an excellent item to have on hand.', 'Red Bell Pepper, 1 each: Naturally low in calories Exceptionally rich in vitamin C and other antioxidants Delicious cooked or uncooked Create delicious recipes with fresh red peppers', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/3e7798c2-b396-47ca-af17-78dfa3ce2b4a_2.013ab2925acb792bc065227f97aac0da.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e7798c2-b396-47ca-af17-78dfa3ce2b4a_2.013ab2925acb792bc065227f97aac0da.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e7798c2-b396-47ca-af17-78dfa3ce2b4a_2.013ab2925acb792bc065227f97aac0da.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (681566638, 'Red Bell Pepper', 1.48, 'deleted_850010807003', 'short description is not available', 'Red Bell Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (681582077, 'Golden Sensation Potatoes, 3 Lb.', 2.38, '842281099430', 'Golden Sensation Potatoes, 3 Lb.', 'Golden Sensation Potatoes 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (681582968, 'Fresh Red Seedless Grapes', 1.84, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (681690800, 'Small Bagged Oranges', 4.96, 'deleted_605049491972', 'short description is not available', '3# Bag Navel Oranges', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/dbabdb16-ea02-404a-aa0e-7a98c122a5f0.79e003afba833e5a3af7e8f2c83ce2bd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dbabdb16-ea02-404a-aa0e-7a98c122a5f0.79e003afba833e5a3af7e8f2c83ce2bd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dbabdb16-ea02-404a-aa0e-7a98c122a5f0.79e003afba833e5a3af7e8f2c83ce2bd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (681782609, 'Organic Micro Mustard Greens', 1.98, '768573417624', 'The spice is right! This is the perfect blend of sweet and heat. Microgreens are baby greens only 7-14 days old. Why do we harvest them so young? When they are harvested that young, all of the flavor potential of that plant is condensed into the young microgreen. This means you get a TON of flavor in the smallest tiny green! Talk about bang for your buck!', 'Organic Micro Mustard Greens', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ee84f5c5-f496-4865-b4c2-d18f6325ba6a_2.6f1f19624922d0fb0eb62647869a1556.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ee84f5c5-f496-4865-b4c2-d18f6325ba6a_2.6f1f19624922d0fb0eb62647869a1556.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ee84f5c5-f496-4865-b4c2-d18f6325ba6a_2.6f1f19624922d0fb0eb62647869a1556.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (682854086, '256pc On Ylw 3# Wd', 496.64, '405564158059', 'short description is not available', '256pc On Ylw 3# Wd', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (683705157, 'Fresh Dragon Fruit Puerto Rico, Each', 4.97, '405873138513', 'Dragon fruit, also known as pitaya, is a vibrant tropical fruit native to Central America. Recognizable for its bright pink or yellow, spiky skin and creamy pulp filled with tiny seeds, it offers a subtly sweet taste reminiscent of kiwi or pear. Dragon fruit is a nutritional powerhouse, providing high amounts of fiber, vitamin C, essential minerals, and antioxidants. Grown on a climbing cactus, this refreshing fruit is harvested when its skin color fully develops, offering a unique and healthful treat.', 'Dragon fruit, also known as pitaya, is a tropical fruit that belongs to the cactus family. Native to Central America but now grown all over the world, dragon fruit is known for its unique appearance, vibrant color, and a wealth of health benefits. The fruit has a leathery, slightly leafy skin that is bright pink or yellow in color, while the inside boasts a sweet, creamy pulp dotted with tiny, crunchy seeds. Appearance and Taste: Dragon fruit stands out for its flamboyant appearance, with its bright pink or yellow, spiky skin, and white or red flesh speckled with small black seeds. The taste of dragon fruit is subtly sweet and often compared to that of a kiwi or pear, with the seeds providing a satisfying crunch. Its texture is wonderfully juicy and creamy, making it a refreshing treat on a hot day. Health Benefits: Dragon fruit is a nutritional powerhouse, packed with a range of beneficial compounds. It\'s high in fiber, vitamin C, and several essential minerals like iron and magnesium. Dragon fruit is also rich in antioxidants, which help fight off free radicals and prevent cell damage. Moreover, it contains prebiotics, which promote the growth of beneficial bacteria in your gut, contributing to a healthy digestive system. Cultivation and Harvest: Dragon fruit grows on a cactus plant that climbs up trees or walls with the help of its aerial roots. It thrives best in a dry tropical climate with a moderate amount of rain. The fruit is harvested when its skin color changes from bright green to pink or yellow, depending on the variety. Despite its exotic appearance, dragon fruit is easy to eat; simply slice it in half and scoop out the flesh with a spoon.', 'Unbranded', 'https://i5.walmartimages.com/asr/6d46cc06-b9ab-4e6d-9b17-e1382991294d.55a0a0edc7c44b84f29bd065c7d43da4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6d46cc06-b9ab-4e6d-9b17-e1382991294d.55a0a0edc7c44b84f29bd065c7d43da4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6d46cc06-b9ab-4e6d-9b17-e1382991294d.55a0a0edc7c44b84f29bd065c7d43da4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (683743845, 'Prico Papaya Chunks, 12OZ', 4.27, '794504171624', 'Papaya is a tropical fruit that originated in the tropics of the Americas and is known to be a great source of vitamins C, A, fiber, and antioxidants. When ripe, this fruit has a butter-like texture with a fairly sweet flavor similar to cantaloupe and can be eaten raw, without skin or seeds. Papaya can be prepared in a variety of ways; you can mix them with grapefruit and avocado for a bright summer salad, add them to a zesty salsa for some sweetness, freeze them and turn them into refreshing popsicle spears, or bake them in the oven with a melted brown sugar mixture. The sky\'s the limit! Get ready for a taste-bud party with Fresh Papaya.', 'Creamy, butter-like flavor when ripe Rich in vitamins A, C, fiber, and antioxidants Fairly sweet flavor like cantaloupe and mango Great addition to smoothies, salads, salsa, and more Delicious and nutritious Saves time', 'Prico', 'https://i5.walmartimages.com/asr/6b0b4bf5-d45a-4a1b-9cf4-74339d69df11.58deea78e570ba5906cc3b66311d6a46.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6b0b4bf5-d45a-4a1b-9cf4-74339d69df11.58deea78e570ba5906cc3b66311d6a46.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6b0b4bf5-d45a-4a1b-9cf4-74339d69df11.58deea78e570ba5906cc3b66311d6a46.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (683903123, 'Services Reduced Program Dept 94', 0.01, '251698000005', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (684050857, 'Ogp Red Cherry Samples', 0.01, '405963277511', 'short description is not available', 'Ogp Red Cherry Samples', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (684065864, '180pcberry & Grape', 900, '030641035109', 'short description is not available', '180pcberry & Grape', 'VZ_WM', 'https://i5.walmartimages.com/asr/bd2b7e57-59af-44e1-b224-3f00613c63c0_1.54a909efacefd4d14f1f0f230018cc77.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd2b7e57-59af-44e1-b224-3f00613c63c0_1.54a909efacefd4d14f1f0f230018cc77.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd2b7e57-59af-44e1-b224-3f00613c63c0_1.54a909efacefd4d14f1f0f230018cc77.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (684139548, 'Fresh Carnival Treat Whole Golden Seedless Grapes from California, 1 lb Bag', 3.48, '854957001258', 'Treat yourself to the delicious, juicy flavor of Fresh Carnival Treat Golden Whole Seedless Grapes. These grapes are bursting with flavor and are a wonderful addition to your diet. Enjoy a handful as a fresh snack any time of day or dry them for scrumptious raisins. You can even use them to make refreshing grape juice. They are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with cheese, crackers, or delectable meats like prosciutto. If you want to be creative, you can freeze them and use them as ice cubes in your favorite drinks. Treat yourself to the fresh taste of Carnival Treat Golden Whole Seedless Grapes.', 'Fresh Carnival Treat Whole Golden Seedless Grapes from California, 1 lb Bag Enjoy a handful as a satisfying snack Add to a stunning cheese board or charcuterie plate Use to make a delectable fruit salad Whole and healthy option for a natural treat Dry them to make raisins', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c3bba3d3-a80e-4e99-bf42-181c4cd58bc2.42bb2ecaeb04e47418c4b911e54f312f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3bba3d3-a80e-4e99-bf42-181c4cd58bc2.42bb2ecaeb04e47418c4b911e54f312f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3bba3d3-a80e-4e99-bf42-181c4cd58bc2.42bb2ecaeb04e47418c4b911e54f312f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (684392217, '200pc Pto Rst 5# Ph', 594, '405531135113', 'short description is not available', '200pc Pto Rst 5# Ph', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (685063472, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094343623', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (685289306, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094343135', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (685310427, 'Avo Mex HA LB 10/5 48 1', 3.48, 'deleted_887214145488', 'Bag of 5 Avocados', 'Large Avocado 5 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (686321553, 'Strawberry Peach, Each', 2.48, '000000031950', 'Fresh Caifornia Grown Strawberry Peach', 'Fresh Caifornia Grown Strawberry Peach', 'Fresh Produce', 'https://i5.walmartimages.com/asr/25d5df1f-e07a-4c70-b825-8260f52b14b5_1.92db031291468d7682f58c0a0f7f630a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25d5df1f-e07a-4c70-b825-8260f52b14b5_1.92db031291468d7682f58c0a0f7f630a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25d5df1f-e07a-4c70-b825-8260f52b14b5_1.92db031291468d7682f58c0a0f7f630a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (686410910, 'Honeycrisp Apples 3 lb Bag', 6.47, 'deleted_883391000121', 'Your order will contain 9-10 honeycrisp apples. Crunchy and sweet, honeycrisp apples are a juicy and refreshing snack when eaten raw. When cooked, this white-fleshed apple makes fine pies, breads, crisps and sauce. Honeycrisp is a cross between Macoun and Honeygold. The skin color is mostly red over a yellow background. The flavor ranges from mild and well balanced to strongly aromatic, depending on the maturity.', 'Honeycrisp Apples 3 Lb Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/625a0e3d-e9c3-443f-b527-360b29fe7b97.792e995b7b74827a9645bec9d8ed4148.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/625a0e3d-e9c3-443f-b527-360b29fe7b97.792e995b7b74827a9645bec9d8ed4148.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/625a0e3d-e9c3-443f-b527-360b29fe7b97.792e995b7b74827a9645bec9d8ed4148.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (686784846, 'Fresh Roma Tomato, Each Weight', 1.97, '000000017657', 'With Fresh Roma Tomatoes from Walmart, it\'s easy to make a wholesome, delicious meal. Roma tomatoes are a fresh produce ingredient for whipping up a variety of wonderful dishes. You can use them to create a zesty tomato sauce for stirring into a homemade pasta dish, crush them up to make a delightful Roma tomato bruschetta, or simply enjoy them on their own as a nutritious snack or as a party platter option for dipping in your favorite vegetable dipping sauce. If you\'re feeling a classic tomato dish, Roma tomatoes can even lend themselves in making a comforting and appetizing tomato soup or a flavorful salsa. However you choose to use them, each Roma tomato will add stunning flavor to your meal. Just find the recipe and experience the tasty results for yourself! Elevate your recipes with Roma Tomatoes.', 'Wholesome and delicious fresh produce Ideal ingredient for a variety of dishes Perfect for making zesty tomato sauces Enjoyable as a nutritious snack Excellent for homemade salsa', 'Hypermart', 'https://i5.walmartimages.com/asr/ecef8a3e-ab96-445e-a16a-d639b40eb5fb.93fcc627f542f02488e5ee9d8e26f152.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecef8a3e-ab96-445e-a16a-d639b40eb5fb.93fcc627f542f02488e5ee9d8e26f152.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecef8a3e-ab96-445e-a16a-d639b40eb5fb.93fcc627f542f02488e5ee9d8e26f152.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (687204092, 'Fresh Express Dole Spring Mix Salad 5 oz', 6.88, '071279231006', 'Experience the freshness of our Spring Mix, meticulously crafted with a selection of delicate baby lettuces and greens. Each leaf is hand-picked at its peak, ensuring a perfect and wholesome product. With vibrant colors and a garden-fresh appearance, our salads are not only flavorful but visually stunning. Indulge in the beauty and taste of our Spring Mix, a true feast for the senses.', 'Spring Mix', 'Dole', 'https://i5.walmartimages.com/asr/2d83c5be-b812-484d-b541-70eafe68a074.d701a98105b1f13a787c9d74da6bbb2d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2d83c5be-b812-484d-b541-70eafe68a074.d701a98105b1f13a787c9d74da6bbb2d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2d83c5be-b812-484d-b541-70eafe68a074.d701a98105b1f13a787c9d74da6bbb2d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (687407125, '180pc Pto Rst 10# Wd', 799.2, '400094862797', 'short description is not available', '180pc Pto Rst 10# Wd', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (687495340, 'Wild Twist Frehs Apples, Each', 0.62, '000000035194', 'Indulge in a unique twist of flavor with our Apple Wild Twist! This delicious snack combines the sweetness of fresh apples with the tangy taste of wild berries for a taste bud-tingling experience. Our Wild Twist is made with real fruit and contains no artificial flavors or preservatives, making it a healthy snack option. Perfect for on-the-go or as a midday snack, our Apple Wild Twist is sure to satisfy your cravings. Order now and experience the perfect balance of sweet and tangy!', 'Looking for a fresh delicious and unique apple variety to add to your fruit bowl or recipe? Look no further than our Wild Twist Apples! These apples are hand-selected for their distinctive flavor and appearance - each one has a unique combination of sweet and tart notes, with a beautiful marbled appearance that makes them stand out from other apple varieties. Perfect for snacking or baking, our Wild Twist Apples are sure to add a burst of flavor to any dish. And with our bulk option, you\'ll have plenty to share with friends and family. Plus, they\'re packed with essential nutrients and antioxidants, making them a healthy choice for any time of day. So why settle for ordinary apples when you can enjoy the unique taste and appearance of our Wild Twist Apples? Order yours today and experience the deliciousness for yourself! Make a creamy smoothie or a nutritious juice blend Perfect as a healthy treat or seasonal baking ingredient Great for packing in lunches Make a creamy smoothie or a nutritious juice blend Adds flavor to a variety of recipes', 'Unbranded', 'https://i5.walmartimages.com/asr/273a4d10-e113-4fde-84f4-dd405828c3ae.3fd08fe27fc4df5b996c57b1aac5b289.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/273a4d10-e113-4fde-84f4-dd405828c3ae.3fd08fe27fc4df5b996c57b1aac5b289.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/273a4d10-e113-4fde-84f4-dd405828c3ae.3fd08fe27fc4df5b996c57b1aac5b289.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (687555865, 'Black Seedless Grapes, 2 lb', 3.44, '014668760190', 'short description is not available', 'Black Seedless Grapes, 2 lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/e261d0a5-e8c1-4a86-b6a0-387eaee7e246_1.bc05ba38859e3978ddaf5f613b3a7742.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e261d0a5-e8c1-4a86-b6a0-387eaee7e246_1.bc05ba38859e3978ddaf5f613b3a7742.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e261d0a5-e8c1-4a86-b6a0-387eaee7e246_1.bc05ba38859e3978ddaf5f613b3a7742.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (687881823, 'White Onions Whole Fresh, 3 lb Bag', 3.87, 'deleted_851573002010', 'Add flavor to your next meal with Fresh White Onions. For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. You can dice these onions and add them to a fresh garden salad for a satisfying crunch or sprinkle them on top of your fish tacos. White onions also make delicious golden onion rings to serve alongside juicy hamburgers and hot dogs at your next backyard barbecue. You can keep these onions at room temperature until ready to use. Stock your pantry with this three-pound bag of Fresh White Onions.', 'Fresh whole white onions, 3-lb bag Ideal ingredient in a variety of recipes Can be sauteed and put in your favorite foods for added flavor Use to top sandwiches, hamburgers, and hot dogs Fresh onions can be stored in a cabinet or pantry and are easy to prepare', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b95e770c-eb8e-4e06-9c1b-36b90b738afe.b6cc942976970bdd7de1352696b4b2b9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95e770c-eb8e-4e06-9c1b-36b90b738afe.b6cc942976970bdd7de1352696b4b2b9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95e770c-eb8e-4e06-9c1b-36b90b738afe.b6cc942976970bdd7de1352696b4b2b9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (688154772, 'Fresh Blackberries, 18 oz Container', 5, '815887010208', 'Fresh Blackberries, 18 oz', 'Fresh Blackberries, 18 oz: Best when enjoyed at room temperature Light, refreshing taste Healthy sweet treat Prior to serving gently wash them with cool water Refrigerate your berries in the original container to maintain freshness, they should approximately last 3-5 days after purchase Keep dry for optimal freshness', 'Unbranded', 'https://i5.walmartimages.com/asr/0de4f591-8f87-4918-9e83-69613f7863db.d8d580f91a7574e66d5443c83f4a2a86.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0de4f591-8f87-4918-9e83-69613f7863db.d8d580f91a7574e66d5443c83f4a2a86.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0de4f591-8f87-4918-9e83-69613f7863db.d8d580f91a7574e66d5443c83f4a2a86.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (688251077, 'Yellow Flesh Peaches, per Pound', 1.58, '400094345511', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (688461871, 'Fresh Red Seedless Grapes', 2.48, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (688834310, 'Thai Chile 4oz', 3.48, 'deleted_883616008345', 'Small, but is quite hot. It measures around 50,000 - 100,000 Scoville units, which is at the lower half of the range for the hotter habanero but still many times more spicy than a jalapeno', 'Thai Chile 4oz', 'Frontera', 'https://i5.walmartimages.com/asr/7070f244-6147-41d0-8132-d2b14aacba81_1.8a79d20d29f3ea8176f2ec4443d5e64e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7070f244-6147-41d0-8132-d2b14aacba81_1.8a79d20d29f3ea8176f2ec4443d5e64e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7070f244-6147-41d0-8132-d2b14aacba81_1.8a79d20d29f3ea8176f2ec4443d5e64e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (688922411, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094909676', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (688963902, 'Haralson Apples 3 Lb Bag', 3.94, '033383044293', 'short description is not available', 'Haralson Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (689422818, 'Organic Bartlett Pear, 2 Lb Bag', 4.12, 'deleted_883391003504', 'Savor the sweet taste of Fresh Organic Bartlett Pears. Bartlett Pears are aromatic and have a definitive pear flavor that make them great for breakfast, lunch, dinner, and dessert. Chop the organic pears up and add them to muffins with walnuts and vanilla for a sweet treat that’s great for breakfast to get your morning started on a high note. Slice them up and top a pizza with prosciutto, goat cheese, and arugula for a mouthwatering meal perfect for a family dinner or dinner party. Cut the organic pear in half and cook it in a skillet with butter, brown sugar, and vanilla and serve with a scoop of vanilla ice cream for a decadent dessert. Enjoy tasty meals any time of day with Fresh Organic Bartlett Pears.', 'Organic Barlett Pear 2lb Bag Sweet, crisp, and juicy Excellent snacking pear Make a creamy smoothie or a nutritious juice blend Add to your salad for extra crunch and flavor Adds flavor to a variety of recipes Make pear butter or poached pears Make sweet desserts like organic pear cobbler, organic pear crisp or organic pear tarts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a6fbdd1e-9ba0-4018-be9e-e103a7aff0c8_1.7bea0e2f51b084242fcf154eeae372d0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6fbdd1e-9ba0-4018-be9e-e103a7aff0c8_1.7bea0e2f51b084242fcf154eeae372d0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6fbdd1e-9ba0-4018-be9e-e103a7aff0c8_1.7bea0e2f51b084242fcf154eeae372d0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (689574375, 'Grape Tomatoes 10oz', 1.98, '812997020028', 'short description is not available', 'Grape Tomatoes 10oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bba50d7b-3847-429d-b8e8-ae7c0fa7e825.609e4e7206cf3d0344084357836b4a15.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bba50d7b-3847-429d-b8e8-ae7c0fa7e825.609e4e7206cf3d0344084357836b4a15.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bba50d7b-3847-429d-b8e8-ae7c0fa7e825.609e4e7206cf3d0344084357836b4a15.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (690128215, 'Fresh California Grown Red Grapes', 1.78, '014668760138', 'short description is not available', 'Fresh California Grown Red Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (690971680, 'California Grown Peaches, per Pound', 1.58, '400094688779', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (691002811, 'Large Avocado 3 Count Bag', 4.48, 'deleted_850758006362', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (691074621, 'Freshly Diced Red Onions', 2.58, '090223022392', 'short description is not available', 'Freshly Diced Red Onions', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (691085042, '192pc On Vid 3# Ga', 629.76, '405539281379', 'short description is not available', '192pc On Vid 3# Ga', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (691405267, 'Earthbound Farms Fresh Organic Broccoli Slaw, 9 oz Bag', 3.48, '032601952709', 'Pick up a package of Earthbound Farms Fresh Organic Broccoli Slaw and make something delicious. This nine-ounce bag includes just the fresh and tender heart of the broccoli stem and shredded carrots - all organic and equally simple and delicious as salad, stir fry, or a side dish. Use as a crunchy garnish for tacos or saute with garlic, olive oil, and a meaty tomato sauce - it?s a good substitute for pasta. Give it a quick pulse in the food processor, it?s a healthy stand in for rice or couscous. Discover all the ways to enjoy our Earthbound Farms Fresh Organic Broccoli Slaw.', 'Earthbound Farms Fresh Organic Broccoli Slaw includes just the fresh and tender heart of the broccoli stem and shredded carrots Delicious in salads, stir fries, or as a side dish Washed and ready to eat Grown without GMOs About 3 servings per 9-ounce package 35 calories per serving Keep refrigerated until ready to enjoy', 'Earthbound Farm', 'https://i5.walmartimages.com/asr/11992d9d-1a2b-4437-b379-694de68a054a.96028f4c9ceaad7374c126e499f632c9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/11992d9d-1a2b-4437-b379-694de68a054a.96028f4c9ceaad7374c126e499f632c9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/11992d9d-1a2b-4437-b379-694de68a054a.96028f4c9ceaad7374c126e499f632c9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (691460146, 'Watermelon Seedless', 4.98, '400094425503', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (692092919, 'Pure Green Farms Baby Spring Mix Salad Blend, 4 oz Clam Shell, Fresh', 2.98, '850014580001', 'Our hydroponic Baby Spring Mix Lettuce is a crispy baby lettuce mix with a peppery bite', 'Keep Refrigerated, Greenhouse Grown in the USA, Pesticide Free', 'Pure Green Farms', 'https://i5.walmartimages.com/asr/36735808-a1f6-4856-bd18-3dd009cae5d5.2b071b0caf9d31d850529881a06ffcce.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/36735808-a1f6-4856-bd18-3dd009cae5d5.2b071b0caf9d31d850529881a06ffcce.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/36735808-a1f6-4856-bd18-3dd009cae5d5.2b071b0caf9d31d850529881a06ffcce.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (692171164, 'Ready Pac Bistro Beets Salad Bowl Seasonal, 4.75 Oz.', 2.98, '077745299259', 'Ready Pac Bistro Beets Salad Bowl Seasonal, 4.75 Oz.', 'Bistro Beets 6/4.75 Oz. (seasonal)', 'Ready Pac Foods', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (692467255, 'Fresh Cotton Candy Grapes, 2 Lb', 3.48, '814563010488', 'short description is not available', 'Fresh Cotton Candy Grapes, 2 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (692577962, 'Green Plum, Each', 1.78, '683953044354', 'short description is not available', 'Green Plum, Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (692697485, 'Marketside Organic Fresh Garlic, 3 Count', 2.33, 'deleted_681131180733', 'Spice up your meal by adding some Marketside Organic Fresh Garlic. Each sleeve contains three bulbs, and they are certified organic as per USDA standards. Mince them to the desired size or use a clove and enjoy a zesty flavor that you will love. It can be applied to different kinds of bread in butter or oil to create a variety of classic dishes, such as garlic bread, garlic toast, bruschetta, crostini, and canape. You can also add them to soups, stews, sauces, dressings, gravy, meat, fish, pizza and more. Enhance the flavor of your cooked meals with Marketside Organic Fresh Garlic.Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Fresh Garlic, 3 Count: Certified organic as per USDA standards Sleeve contains three bulbs Provides the classic zesty garlic flavor that you love Use to make garlic bread or bruschetta Add to pasta, stew, pizza, and more', 'Marketside', 'https://i5.walmartimages.com/asr/b555b30e-bec4-47fb-8e4c-feb93db5fec6.9143fb8b62fb90fee36d4e8c35966c75.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b555b30e-bec4-47fb-8e4c-feb93db5fec6.9143fb8b62fb90fee36d4e8c35966c75.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b555b30e-bec4-47fb-8e4c-feb93db5fec6.9143fb8b62fb90fee36d4e8c35966c75.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (693055912, 'Fresh Slicing Tomato, 2 Pack', 2.48, '679508081363', 'Bring the fresh, delicious taste of Slicing Tomatoes into your home. These tomatoes deliver sweet and juicy flavor with each bite and are an ideal ingredient in a variety of recipes. They would make a tasty, garden-inspired addition to salads, burgers, gourmet sandwiches, and so much more. They are picked at peak freshness and specially bred for deep red color, intense flavor, and higher lycopene content than standard tomatoes. Whether you slice or dice them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with these fresh Slicing Tomatoes.', 'Slicing Tomato, 2 Pack: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, burgers, gourmet sandwiches, and more Add to party trays or school lunches Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e648291f-0ccf-4ef5-a8f8-7fbe8d8686bb.192e42a5f946db220a42352ce18ef6f8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e648291f-0ccf-4ef5-a8f8-7fbe8d8686bb.192e42a5f946db220a42352ce18ef6f8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e648291f-0ccf-4ef5-a8f8-7fbe8d8686bb.192e42a5f946db220a42352ce18ef6f8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (693670835, 'Freshness Guaranteed Fruit Cup To Go Fresh Fruit Blend', 2.28, '263028000005', 'short description is not available', 'Freshness Guaranteed Fruit Cup To Go Fresh Fruit Blend', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (694286682, 'Microwaveable Sweet Potatoes Per Each', 1.38, '661061000448', 'short description is not available', 'Microwaveable Sweet Potatoes Per Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (694426357, 'Freshness Guaranteed Fresh Black Seedless Grapes', 2.28, '', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (694521279, 'Avocado 4 Ct Bag', 3.76, 'deleted_636442970078', 'short description is not available', 'Avocado 4 Ct Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (695120799, '90pc Pto Rst 10# Tx', 537.3, '405530543278', 'short description is not available', '90pc Pto Rst 10# Tx', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (695330894, 'Freshly Diced Red Onions', 2.58, '643550000641', 'short description is not available', 'Freshly Diced Red Onions', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (695951315, 'Cucumber Salad/pickling', 3.68, 'deleted_852966005472', 'short description is not available', 'Cucumber Salad/pickling', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (696263989, 'Fresh Limes, 2lb Bag', 3.67, '826594105125', 'Add zest and flavor to your meals and beverages with these Limes (LIMA). Freshly squeezed limes provide a healthy dose of vitamin C to your diet and are a key ingredient in many recipes, from homemade salsa to chicken dishes. The citrusy tropical flavor of these limes are sure to add a zing to all your cooked meals. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. These limes are sold in a two-pound bag, so you\'ll have plenty for all your culinary creations. Enjoy the refreshing, tart flavor of Limes.', 'Juicy and fresh, packed with vitamin C Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies and tarts Refreshing, tart flavor', 'Unbranded', 'https://i5.walmartimages.com/asr/4c195d67-0b07-46f8-b242-b80ee435ccdb.9646b96390ea44bad3467705da9a11bb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4c195d67-0b07-46f8-b242-b80ee435ccdb.9646b96390ea44bad3467705da9a11bb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4c195d67-0b07-46f8-b242-b80ee435ccdb.9646b96390ea44bad3467705da9a11bb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (696326497, 'Sliced Baby Bella Mushrooms, 8 Oz.', 2.37, 'deleted_405672644185', 'Sliced Baby Bella Mushrooms, 8 Oz.', 'Mushroom Sliced Baby Bella 8 Oz.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (696653395, 'Shishito Peppers 8oz Bag', 2.44, 'deleted_615435435053', 'Shishito Peppers are a snacker\'s delight. Cooks in minutes. Savory with a hint of smokiness. A total crowd pleaser, and packed with Vitamins A and C. Bite-size and snackable. You will be hooked.', 'Cooks in minutes Savory with a hint of smokiness Packed with Vitamins A and C Bite-size and snackable Mild and tasty, 1 in 10 have heat', 'ark foods', 'https://i5.walmartimages.com/asr/7f3ff6fb-2ce0-4641-830d-95fb478ce498_1.914068bb4be4bdeea44fbd1e4cb46472.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7f3ff6fb-2ce0-4641-830d-95fb478ce498_1.914068bb4be4bdeea44fbd1e4cb46472.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7f3ff6fb-2ce0-4641-830d-95fb478ce498_1.914068bb4be4bdeea44fbd1e4cb46472.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (696746463, 'Yellow Onions, 3 Lb.', 1.94, 'deleted_400094082966', 'Yellow Onions, 3 Lb.', 'Yellow Onions 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/496364fc-43dc-4f28-b368-3c1c9038e6fe.5edfc4a4501e40cfc6c4713335667001.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/496364fc-43dc-4f28-b368-3c1c9038e6fe.5edfc4a4501e40cfc6c4713335667001.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/496364fc-43dc-4f28-b368-3c1c9038e6fe.5edfc4a4501e40cfc6c4713335667001.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (697137095, 'Pacific Rose Apples 2 Ct Pouch Bag', 1.97, '847473006357', 'short description is not available', 'Pacific Rose Apples 2 Ct Pouch Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (697322977, 'California Grown Peaches, per Pound', 1.58, '400094696330', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (697379739, 'Okra', 3.28, '405873145443', 'short description is not available', 'Okra', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e4e34a58-b607-400b-9d4a-6af912891c6b.0a7373f83c943a13220ab834f76d32ab.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4e34a58-b607-400b-9d4a-6af912891c6b.0a7373f83c943a13220ab834f76d32ab.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4e34a58-b607-400b-9d4a-6af912891c6b.0a7373f83c943a13220ab834f76d32ab.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (697422632, 'Services Reduced Program Dept 94', 0.01, '251870000007', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (697850796, 'Fresh Candy Snap Grapes, 1 Lb', 3.48, 'deleted_854957001265', 'Savor the sweet crunch of Fresh Candy Snap Grapes. Each 1 Lb bag is brimming with plump, juicy grapes, known for their unique candy-like flavor. These grapes are naturally sweet, seedless, and have a satisfying snap when bitten into. Each grape is carefully selected to ensure the highest quality, delivering a truly delicious eating experience. Perfect for snacking, salads, or adding a burst of natural sweetness to your favorite recipes. Enjoy the mouthwatering taste of Fresh Candy Snap Grapes today!', 'Fresh Candy Snap Grapes, 1 Lb Savor the sweet crunch of Fresh Candy Snap Grapes. Each 1 Lb bag is brimming with plump, juicy grapes, known for their unique candy-like flavor. These grapes are naturally sweet, seedless, and have a satisfying snap when bitten into. Each grape is carefully selected to ensure the highest quality, delivering a truly delicious eating experience. Perfect for snacking, salads, or adding a burst of natural sweetness to your favorite recipes. Enjoy the mouthwatering taste of Fresh Candy Snap Grapes today! Find these in your local Walmart today!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/da7810bf-fd66-4618-b44b-3529b31fb218_1.8aca6d650a64334ff32f56054492fe76.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/da7810bf-fd66-4618-b44b-3529b31fb218_1.8aca6d650a64334ff32f56054492fe76.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/da7810bf-fd66-4618-b44b-3529b31fb218_1.8aca6d650a64334ff32f56054492fe76.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (698009326, 'Services Reduced Program Dept 94', 0.01, '251673000006', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (698034023, '170pc Pie Pumpkin', 455.6, '405714894325', 'short description is not available', '170 Ppkn Pie Cc', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (698098572, '100pc Pto Rst 10# #2', 597, '405552366060', 'short description is not available', '100pc Pto Rst 10# #2', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (698129798, 'Tri Pepper Diced 7 Oz', 2.58, '030223022756', 'short description is not available', 'Tri Pepper Diced 7 Oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (698543197, '160pc On Vid 4# Gabf', 630.4, '400094634578', 'short description is not available', '160pc On Vid 4# Gabf', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (698798315, 'Local Bounti Spring Mix, Lettuce, Baby Leafy Greens, Packaged Salad, Greenhouse Grown, 9.5 oz', 4.98, '850018385497', 'Local Bounti Spring Mix is a fresh and flavorful blend of premium greens, including varieties like red leaf, green leaf, romaine, and butter lettuces. Grown locally in Washington State, this mix is perfect for creating vibrant salads, delicious sandwiches, or adding a fresh touch to any meal. Thanks to our greenhouse-protected growing methods, Local Bounti Spring Mix is non-GMO, clean, and ready to enjoy straight from the package. Plus, it stays fresh longer, so you can count on it whenever you need it. Sustainably grown using 90% less land and water than traditional farming, it’s a choice you can feel good about. Add Local Bounti Spring Mix to your cart today and elevate your meals with this beautiful blend of greens!', 'A Delightful Blend of Colorful and Tender Greens Perfect for Salads, Sandwiches, Bowls, and Wraps Washington State Grown Stays Fresh Longer Greenhouse Protected and Clean Ready to Eat Non-GMO Sustainably Greenhouse Grown', 'Local Bounti', 'https://i5.walmartimages.com/asr/e4b46894-f4be-4205-afde-5e69917ca6a8.a5207d6f9c40f4091be06628758d9156.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4b46894-f4be-4205-afde-5e69917ca6a8.a5207d6f9c40f4091be06628758d9156.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4b46894-f4be-4205-afde-5e69917ca6a8.a5207d6f9c40f4091be06628758d9156.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (698980293, 'Organic Potato Tray Kit Mediterranean Herb', 4.96, '097419041199', 'Organic Garden Fresh Balsamic Potato, 1 Each', 'Organic Potato Tray Balsamic Garden Fresh', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ed432430-762f-4a35-bde0-b30dd3468bc6_1.f51d9d32a5708406b1797360767f43dd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed432430-762f-4a35-bde0-b30dd3468bc6_1.f51d9d32a5708406b1797360767f43dd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed432430-762f-4a35-bde0-b30dd3468bc6_1.f51d9d32a5708406b1797360767f43dd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (699597111, 'Services Reduced Program Dept 94', 0.01, '251684000002', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (699731381, 'Jumbo White Onions Per Pound', 1.24, 'deleted_050269046639', 'short description is not available', 'Jumbo White Onions Per Pound', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (699853549, 'Miedema Produce For You Radish Chips, 8 oz', 1.67, '074515000121', 'Radish Chips, Fresh 8 oz (227 g) Like freshness? Then like us! Facebook: /MiedemaProduce. Sealed for freshness! Known by our For You brand, Miedema Produce is your year-around resources for more than 50 different varieties. Colorful, crisp and nutrient rich - For You brand fruits and vegetables are a delicious addition to any meal or snack! Use your imagination at breakfast, lunch and dinner - or just plain reach for the freshness as a healthy snack. Make For You part of your healthy life style. Visit our website for a few of our favorite recipes or share yours. miedemaproduce.com. Product of USA. Keep refrigerated. 8 oz (227 g) Hudsonville, MI 49426', 'Radish Chips, Fresh Sealed for freshness! Known by our for you brand, Miedema produce is your year-around resource for more than 50 different varieties. Colourful, crisp and nutrient rich-for you brand fruits and vegetables are a delicious addition to any meal or snack! Use your imagination at breakfast, lunch and dinner or just plain reach for the freshness as a healthy snack. Make for you part of your healthy life style. miedemaproduce.com. Like freshness? Then like us! Facebook/MiedemaProduce. Like freshness? then like us! Facebook facebook.com/miedema produce. Visit our website for a few of our favorite recipes or shareyours miedemaproduce.com. Product of USA.', 'For You', 'https://i5.walmartimages.com/asr/fff8aa18-1f7c-46bd-a4c8-b42795de7289.bc5f477b5a5bddbb8f35101652f18884.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fff8aa18-1f7c-46bd-a4c8-b42795de7289.bc5f477b5a5bddbb8f35101652f18884.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fff8aa18-1f7c-46bd-a4c8-b42795de7289.bc5f477b5a5bddbb8f35101652f18884.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (700771360, 'Sweet Mini Peppers 1 Lb Bag', 2.88, 'deleted_044416840010', 'short description is not available', 'Sweet Mini Peppers 1 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (700866905, 'Fresh Whole Micro Tomato, 4 oz Cup', 1.98, '057836022607', 'Add color and flavor to your next salad with these personal-sized Fresh Whole Micro Tomatoes. Similar to larger tomatoes, micro tomatoes have a lower water content than other snacking tomatoes, making them meatier and more flavorful, as well as less likely to make a mess when you bite into them. They are perfectly bite-sized which makes them not only ideal in salads and salsas but also perfect as a delicious and convenient snack all on their own. Plus, these small tomatoes also have a longer shelf-life, making it easy to store them for several days at a time and they are hardier and less fragile than a traditional tomato, meaning you no longer have to worry about bruising. Be sure to pick up Fresh Whole Micro Tomatoes and experience just how convenient enjoying tomatoes can be.', 'Fresh Whole Micro Tomato, 4 oz Cup Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/40f21b9e-08a7-481b-91e7-b19bb6c65463.e961d19908517b841a58511dde3f6dbe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/40f21b9e-08a7-481b-91e7-b19bb6c65463.e961d19908517b841a58511dde3f6dbe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/40f21b9e-08a7-481b-91e7-b19bb6c65463.e961d19908517b841a58511dde3f6dbe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (700950331, '240pc On Ylw 3# Uo', 465.6, '400094915851', 'short description is not available', '240pc On Ylw 3# Uo', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (700994874, 'Fresh Green Seedless Grapes', 3.27, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (701023939, 'Yellow Onions, 3 Lb.', 2.88, '795631334609', 'Yellow Onions, 3 Lb.', 'Yellow Onions 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (701132730, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094319949', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (701151005, 'Freshness Guaranteed Sliced Portabella Mushroom Caps 6oz', 2.6, 'deleted_084348676011', 'short description is not available', 'Freshness Guaranteed Sliced Portabella Mushroom Caps 6oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (701454161, 'That\'s Tasty Puree Basil 2.8 oz', 3.94, '768573300315', 'Our Organic Basil 2.8 oz Puree is the perfect addition to your Italian dishes. It adds quick and robust flavor with ease. Whether a recipe demands fresh or dried basil, our puree is a versatile option. Need a last-minute pesto fix? Our organic basil puree will save the day. Experience the convenience and taste of our puree in all your favorite recipes.', 'Organic Basil Puree 2.8oz Our Organic Basil 2.8 oz Puree is the perfect addition to your Italian dishes. It adds quick and robust flavor with ease. Whether a recipe demands fresh or dried basil, our puree is a versatile option. Need a last-minute pesto fix? Our organic basil puree will save the day. Experience the convenience and taste of our puree in all your favorite recipes.', 'Shenandoah Growers', 'https://i5.walmartimages.com/asr/044fdb8b-c690-44bb-bb92-665a75c4e499_1.83041a766504fa1359aaff75912a3c4e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/044fdb8b-c690-44bb-bb92-665a75c4e499_1.83041a766504fa1359aaff75912a3c4e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/044fdb8b-c690-44bb-bb92-665a75c4e499_1.83041a766504fa1359aaff75912a3c4e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (701560552, 'Services Reduced Program Dept 94', 0.01, '251702000007', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (701567723, 'Marketside Organic Broccoli Florets & Cauliflower, 12oz', 3.98, '681131179409', 'Marketside Organic Broccoli Florets and Cauliflower are packed fresh, washed and ready to eat for your convenience. They have a great fresh taste that is loaded with nutrients, and a vibrant green and white colors that are sure to add a pop to all your dishes. Serve with ranch dressing or hummus for a tasty and healthy snack any time of the day. Enjoy them as a wholesome side or use them in all your favorite recipes. They are also a great addition to Asian stir-fry. Season them with salt, pepper and garlic and serve with grilled steak, mashed potatoes and bread rolls for a hearty dinner. Dinner sides are made easy with Marketside Organic Broccoli Florets and Cauliflower. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Broccoli Florets & Cauliflower, 12 oz USDA Organic Washed and ready to eat Serve with ranch dressing or hummus for a delicious snack 30 calories per serving Net weight 12 oz', 'Marketside', 'https://i5.walmartimages.com/asr/110c94e2-5cd0-4533-8778-267491aae5c1_3.2c59ad35b5a04f8331216daa73bf19d8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/110c94e2-5cd0-4533-8778-267491aae5c1_3.2c59ad35b5a04f8331216daa73bf19d8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/110c94e2-5cd0-4533-8778-267491aae5c1_3.2c59ad35b5a04f8331216daa73bf19d8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (702754398, 'California Grown Peaches, per Pound', 1.58, '400094111697', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (703007418, 'Services Reduced Program Dept 94', 0.01, '251668000004', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (703312861, 'Broccoli Florets 24z', 5.98, '782796012305', 'short description is not available', 'Broccoli Florets 24z', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (703601231, 'California Grown Peaches, per Pound', 1.58, '400094858738', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (704050400, 'California Grown Peaches, per Pound', 1.58, '400094989074', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (704071940, 'Taco Salad Kit', 4.98, '016741000629', 'short description is not available', 'Taco Salad Kit', 'Unbranded', 'https://i5.walmartimages.com/asr/e66f7f68-0190-4888-87ad-fd51e37aa8bc_1.18f1d7ff9067a9942a5fbb1de42bb98a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e66f7f68-0190-4888-87ad-fd51e37aa8bc_1.18f1d7ff9067a9942a5fbb1de42bb98a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e66f7f68-0190-4888-87ad-fd51e37aa8bc_1.18f1d7ff9067a9942a5fbb1de42bb98a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (704363065, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094111550', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (704777981, 'Organic Grape Tomatoes, 10 oz Package', 2.48, '751666156708', 'Organic Medley Tomatoes are an exciting summer treat, and they\'re the perfect size for skewers, salads and roasting. These bite-sized medley tomatoes look and taste great. Medley tomatoes are a low-calorie treat that are also low in sodium and are a good source of fiber. Whether you are snacking or adding them to your favorite dish. their uses are almost limitless. Try these grape tomatoes with feta cheese, fresh dill and a drizzle of olive oil for a light and delicious Mediterranean treat. Or make a caprese salad with medley tomatoes, fresh basil, fresh mozzarella and balsamic vinegar. With 10-ounces of tomatoes in each package, you\'ll have plenty to make mouthwatering meals. Use your imagination to create delicious dishes with Organic Medley Tomatoes.', 'Organic Medley Tomatoes, 10 oz Package: Perfect size for skewers, salads and roasting Low-calorie, low in sodium, and a good source of fiber Pair with feta cheese, fresh dill, and a drizzle of olive oil for a Mediterranean dish Certified organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c12abd1f-2dcc-48ec-8f2f-7ae68c5c7191.f5ee8743ba711fe48df16e3eadf72686.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c12abd1f-2dcc-48ec-8f2f-7ae68c5c7191.f5ee8743ba711fe48df16e3eadf72686.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c12abd1f-2dcc-48ec-8f2f-7ae68c5c7191.f5ee8743ba711fe48df16e3eadf72686.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (705215844, 'Fresh Red Seedless Grapes', 1.66, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (705581913, 'Watermelon Chunks 32oz', 10.98, '045009891242', 'Experience a burst of summertime goodness with this delicious Freshness Guaranteed Watermelon. This pre-cut ripe watermelon is juicy, sweet, and refreshing to the taste. In addition, watermelons are a great natural source of vitamins A and C. Carry them with you and eat them straight out of the tray any time you want, at home, or on-the-go. Pair them with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use them as a naturally sweet ingredient in a fruit salad. Add some fresh fruit to your daily menu with this Freshness Guaranteed Watermelon.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Watermelon Chunks, 32 oz: Ready to eat watermelon Bag Great for fruit salad Summer treat Net weight 32 oz Sweet and Juicy', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a6977c73-d8a5-4514-9b4d-93002d2c49dc.2a7856e7d56baaf2f00551e23bb98e55.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6977c73-d8a5-4514-9b4d-93002d2c49dc.2a7856e7d56baaf2f00551e23bb98e55.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6977c73-d8a5-4514-9b4d-93002d2c49dc.2a7856e7d56baaf2f00551e23bb98e55.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (705848836, 'Dried Mushroom Kibble by Its Delish, 8 Oz Large Jar Dark Chilean Dehydrated and Chopped Boletus Luteus Mushrooms for Cooking and Flavoring', 36.99, '799137109228', 'Dried Kibbled Mushrooms by Its Delish Boletus Luteus mushrooms is a wild-grown dark mushroom with a deep and earthy flavor, commonly called the brown or Chilean mushroom, sorted, washed, trimmed, and air-dried. There are a good source of vitamin, minerals and protein. These are 100% all-natural with no added ingredients or preservatives. These chopped mushroom flakes are used in a wide variety of applications for rich-flavored mushroom for including sauces, gravy, soups, vegetable stock, broth and stews, pasta products, meats and sausages, seasoning blends, salad products, pot pies, and casseroles and ready meals. Prep Instruction Ideas: Add these mushrooms while slow cooking soups, stews, sauces, casseroles and other foods with sufficient liquid content. In other applications, hydrate by using 1 part dried mushroom and 5 parts water. Simmer for 10-15 minutes. Add water if necessary. Yields 1 oz equals about 1/2 cup dry. Generally, air dried vegetables double in volume when hydrated. Dry/Fresh Ratio 1 lb of air dried boletus luteus mushrooms, once rehydrated, equals approximately 6 lbs of fresh prepared boletus luteus mushrooms. Storage Suggestion Best if used within 18 months. Store tightly sealed in a dry location away from sunlight. Tip: For ready to use mushrooms, soak the dry mushrooms in a sealed container and store in the refrigerator. Stock up and enjoy! About It\'s Delish! It\'s Delish was established in 1992 and is located in North Hollywood, California. It\'s Delish is a food manufacturer and distributor who produces over 500 gourmet food products including licorice, sour belts, taffies, caramels, Jordan almonds, chocolates, nuts, fruits, trail mixes, spices, and the spice blends. It\'s Delish also produces organics and all-natural products. We give you the opportunity to order from the factory direct!', 'PREMIUM - Gourmet Dried Mushrooms Kibble Similar to Porcini and chopped into small dices VALUE SIZE - Half Pound 8 Oz Convenient Large Jar by the Its Delish brand ENHANCE your culinary experience with hearty flavor, bold taste and vibrant aroma. Add rich flavors paired with vitamins, minerals and protein to your favorite recipes and dishes AWESOME in sauces, gravy, soups, vegetable stock, broth and stews, pasta products, meats and sausages, seasoning blends, salad products, pot pies, risottos and casseroles and ready meals. QUALITY - Certified Kosher OU Parve, Non-Dairy, Vegan, All-Natural, No MSG, No preservatives, Gluten Free, Packaged in the USA and Shipped to you Direct!', 'It\'s Delish', 'https://i5.walmartimages.com/asr/94d643da-b2b9-451f-978f-24dbcfaeca10.d300a6a22aaefdc274c993786857c5b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/94d643da-b2b9-451f-978f-24dbcfaeca10.d300a6a22aaefdc274c993786857c5b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/94d643da-b2b9-451f-978f-24dbcfaeca10.d300a6a22aaefdc274c993786857c5b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (705849456, 'Revol Greens Organic Spring Mix Salad Blend, 9 oz Clam Shell, Fresh', 4.48, '850024486171', 'Revol Greens® Organic Spring Mix is a blend of tender and crisp baby lettuce. All Revol Greens® lettuce is grown inside a greenhouse and harvested daily, 365 days a year. Our regional greenhouse locations allow us to reach nearly all our customers within 24-48 hours of harvest, so that our greens arrive incredibly fresh and at peak nutritional value.', 'USDA Organic Certified Grown in a protected greenhouse environment Sustainably grown with 90% less water than field grown lettuce', 'Revol Greens', 'https://i5.walmartimages.com/asr/d213b536-605c-4966-b60c-e15aeb79ba22.b1aa0b41e676162f536ff0dc11fc1ecc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d213b536-605c-4966-b60c-e15aeb79ba22.b1aa0b41e676162f536ff0dc11fc1ecc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d213b536-605c-4966-b60c-e15aeb79ba22.b1aa0b41e676162f536ff0dc11fc1ecc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (706044763, 'Fresh Bitter Melon, Each', 1.73, '000000047838', 'Our fresh Bitter Melon is the perfect veggie to balance out any meal. Also known as the bitter squash and goya, this vegetable has a unique flavor. To prepare this vegetable, you\'ll want to peel it to get to the flesh inside. You can steam it and serve as a tasty side to any meal. A popular ingredient in Chinese cuisine, the bitter melon may be used in a variety of soups and stir-fry recipes. Explore new recipes and discover all the delicious ways to prepare this tasty and nutritious vegetable. With our fresh Bitter Melon, you know you\'re getting the bounty of nature\'s goodness.', 'Bitter Melon, each: Extremely versatile vegetable Also known as the bitter squash & goya Perfect ingredient for Chinese cuisine Try them steamed as a delicious side dish Good source of vitamins Explore delicious new recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/13e16ee1-cc8e-4e6f-befc-58310f9b9514.6767c787c7cb8e6202c90e2b4dbd85ec.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13e16ee1-cc8e-4e6f-befc-58310f9b9514.6767c787c7cb8e6202c90e2b4dbd85ec.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13e16ee1-cc8e-4e6f-befc-58310f9b9514.6767c787c7cb8e6202c90e2b4dbd85ec.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (706049230, 'Fresh Broccoli Bunch, Each', 2.97, '405984606871', 'Getting your daily servings of vegetables is tastier than ever with Braga Farms Broccoli. This bunch broccoli has everything a broccoli-lover could want, from its healthy green color to its even ratio of florets to stem. The consumption of broccoli has tripled over the past 25 years. Its popularity is due to an aesthetic appeal, delightful taste, versatile-culinary applications, and the fact that it is packed full of nutrition. Whether you are in the mood to steam, roast, or sauté, broccoli is a great way to get your daily dose of greens in for the day.', 'Bright-green color Healthy side to any meal Excellent steamed, roasted, sautéed, in soups or served raw with a favorite dip Even ratio of florets to stem; approximately 2 per bunch', 'Foxy', 'https://i5.walmartimages.com/asr/5abee835-5f35-48f5-aca8-6b261fe1b244.616a2c73d9eecce6d38f94f28e9fcde0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5abee835-5f35-48f5-aca8-6b261fe1b244.616a2c73d9eecce6d38f94f28e9fcde0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5abee835-5f35-48f5-aca8-6b261fe1b244.616a2c73d9eecce6d38f94f28e9fcde0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (706328401, 'Fresh Grown Green Seedless Grapes 32oz', 3.48, 'deleted_095829210716', 'short description is not available', 'Fresh Grown Green Seedless Grapes 32oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (706599657, 'Marketside Dark Leafy Greens Mix 5oz', 2.88, '681131221436', 'Marketside Dark Leafy Greens Mix is made with a wholesome medley of baby spinach, baby red chard, baby kale, baby green romaine lettuce, and baby arugula. This mix is picked fresh, washed, and ready to eat for your convenience. Use it to create your very own personalized salad tossed with your favorite vegetables, protein, nuts, and dressing, use it as a topping on sandwiches and pizzas, or simply enjoy it as a healthy side. It offers nutritional benefits such as being an excellent source of dietary fiber, iron, calcium, and potassium. Enjoy fresh from the farm taste with Marketside Dark Leafy Greens Mix today.Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Dark Leafy Greens Mix, 5 oz: Refreshing mix of baby spinach, baby red chard, baby kale, baby green romaine lettuce, and baby arugula Washed and ready to eat35 calories per serving Great addition to any meal', 'Marketside', 'https://i5.walmartimages.com/asr/e1be4e64-0553-4531-9dc2-0e43e303b29d_3.c3fa41a361ac4d6a753cc07772a069cb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e1be4e64-0553-4531-9dc2-0e43e303b29d_3.c3fa41a361ac4d6a753cc07772a069cb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e1be4e64-0553-4531-9dc2-0e43e303b29d_3.c3fa41a361ac4d6a753cc07772a069cb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (707143838, 'Marketside Organic Super Blend, 10 oz', 3.98, '681131179423', 'Marketside Super Blend is packed with a wholesome blend of broccoli, colored carrots, green cabbage and kale. This crisp medley is packed fresh, washed and ready to eat for your convenience. Use this blend to make our delicious super blend with apples recipe located on the back of the packaging. All you need is one small organic apple, half a cup of organic almonds and half a cup of organic balsamic vinaigrette. In a large bowl, combine super blend, chopped apple and almonds. Pour balsamic vinaigrette over bowl, toss ingredients, cover and chill. Serve this prepared side with baked chicken and grilled asparagus for a delicious and healthy meal. Dinner sides are made easy with Marketside Organic Super Blend Slaw. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Super Blend, 10 oz: Blend of broccoli, colored carrots, green cabbage and kale USDA Organic Washed and ready to eat Net weight 10 oz', 'Marketside', 'https://i5.walmartimages.com/asr/0da279ea-3878-457b-9b22-b67cbd383681_2.2e61c037b7fc45cf67dd21ba247f88f2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0da279ea-3878-457b-9b22-b67cbd383681_2.2e61c037b7fc45cf67dd21ba247f88f2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0da279ea-3878-457b-9b22-b67cbd383681_2.2e61c037b7fc45cf67dd21ba247f88f2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (707589801, 'WHOLLY GUACAMOLE Minis Snack Cup, Classic, 2.8 oz', 1.98, '616112810323', 'WHOLLY GUACAMOLE Classic Snack Cup features our signature guacamole, perfectly portioned and paired with crunchy, bite-size tortilla rounds. Let’s guac and roll! WHOLLY GUACAMOLE is a trademark of Avomex, Inc.', 'Made using 100% Hass avocados for 100% snacking greatness America’s #1 selling refrigerated guacamole Keep refrigerated 220 calories per serving No Preservatives added and gluten free', 'WHOLLY GUACAMOLE', 'https://i5.walmartimages.com/asr/baa84967-3ec9-4d0d-bb35-d4a9bd77c7bc.6a6240d1422402ef1bd8fe8963a5024d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/baa84967-3ec9-4d0d-bb35-d4a9bd77c7bc.6a6240d1422402ef1bd8fe8963a5024d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/baa84967-3ec9-4d0d-bb35-d4a9bd77c7bc.6a6240d1422402ef1bd8fe8963a5024d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (707913139, 'Shrink Cap | Gold/Black Grapes (100/Pack)', 19.95, '776982330083', 'Elevate Your Wine Experience with Our European Crafted Shrink Caps Enhance Bottle Presentation and Ensure Freshness with Our Shrink Caps! Our Premium Shrink Caps are the perfect addition to any wine bottle, combining elegance with functionality. These caps, expertly crafted in Europe, not only enhance the visual appeal of your bottles but also play a crucial role in maintaining the cork\'s integrity. Our shrink caps are ideal for winemakers, wine enthusiasts, or those who love to gift homemade wine. They are a simple yet effective way to elevate your wine\'s presentation and ensure freshness. Key Features: High-Quality Material:Manufactured in Europe, guaranteeing premium quality and durability. Universal Fit:Designed to fit 375ml, 750ml, and 1500ml wine bottles perfectly. Easy Tear-Off Design:Facilitates a smooth bottle-opening experience. Precise Dimensions:Measuring 30.5mm x 55mm for a flawless fit. Elevated Presentation:Adds a sophisticated touch to any wine bottle. Usage Guide: Slide the Cap:Place the shrink cap over the neck of the wine bottle. Apply Heat:Use a heat gun or steam to shrink the cap around the bottleneck securely. Tear & Pour:Enjoy the easy tear-off design for quick access to your wine. FAQs: Q:Can these shrink caps be used for beverages other than wine?A:They are versatile for any bottled beverage with compatible dimensions. Q:How resistant are these caps to external factors like moisture?A:Crafted with high-quality materials, they resist moisture and other external elements effectively. Q:Are special tools required for application?A:A heat gun or steam source is needed to secure the cap\'s shrinking. Q:Do these caps leave any residue upon removal?A:No, they are designed for clean and residue-free removal.', 'High-Quality Corks and Stoppers for Wine Bottles – Designed to provide a secure seal, preserving the freshness and flavor of your wine with every use. Perfect for Home and Professional Winemakers – Whether for DIY projects or commercial bottling, our corks and stoppers ensure reliable performance and a professional finish. Durable and Easy to Use – Made from premium materials, our wine corks and stoppers are easy to insert and remove, making them ideal for sealing and storing your homemade beverages.', 'ABC Cork', 'https://i5.walmartimages.com/asr/30c329d1-b7c9-44a4-9d4d-98f14ce09e06.fe32b0577d180ddf4ca91013b5c6f226.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/30c329d1-b7c9-44a4-9d4d-98f14ce09e06.fe32b0577d180ddf4ca91013b5c6f226.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/30c329d1-b7c9-44a4-9d4d-98f14ce09e06.fe32b0577d180ddf4ca91013b5c6f226.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (708117188, 'Spring Mix Salad 11oz', 3.98, '077745243399', 'short description is not available', 'Spring Mix Salad 11oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (708164915, 'Plum 1 lb Pack', 3.98, '683953001906', 'short description is not available', 'Green Plums 1 Lb Clamshell', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (708171750, 'Large Avocado 3 Count Bag', 4.48, '', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (708290238, 'Gold Nugget Sampler Pouch', 4.88, '405911077248', 'short description is not available', 'Gold Nugget Sampler Pouch', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (708455082, 'Fresh Organic Pineapple', 4.34, '', 'Enjoy a burst of tropical flavor with this Fresh Organic Pineapple. This pineapple can be a satisfying afternoon snack, or you can use it in a variety of recipes. For breakfast, use this pineapple to make a rich and creamy smoothie or serve it alongside your pancakes, sausage, and eggs. Slice it up and use to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. For dessert, you could make a crowd-pleasing pineapple upside down cake or a comforting pineapple crisp. However you choose to use it, this Fresh Organic Pineapple will add flavor to any meal or beverage.', 'Fresh Organic Pineapple Enjoy a burst of tropical flavor Healthy and delicious fruit Enjoy on its own or as a part of your favorite meals Make a rich and creamy smoothie or serve it alongside your pancakes, sausage, and eggs Slice it up and use to add flavor to a lunchtime salad or as a garnish for your favorite cocktail Make a crowd-pleasing pineapple upside down cake or a comforting pineapple crisp', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8289f171-d578-44bd-bd17-d8174ed7e43e.7cf7dfadbc2034e47872c405ad8e3969.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8289f171-d578-44bd-bd17-d8174ed7e43e.7cf7dfadbc2034e47872c405ad8e3969.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8289f171-d578-44bd-bd17-d8174ed7e43e.7cf7dfadbc2034e47872c405ad8e3969.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (708743669, 'Organic Green Leaf Lettuce', 1.96, 'deleted_033383904078', '', '', '', 'https://i5.walmartimages.com/asr/39e52c0a-350c-44ae-8d1d-226bf2f5cce3_1.024aa0ba302d0701a6cde28cd3c80264.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39e52c0a-350c-44ae-8d1d-226bf2f5cce3_1.024aa0ba302d0701a6cde28cd3c80264.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39e52c0a-350c-44ae-8d1d-226bf2f5cce3_1.024aa0ba302d0701a6cde28cd3c80264.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (709553568, 'Whole Nopalitos, 16 oz', 2.84, '825645003786', 'Our fresh Whole Nopalitos will add delicious flavor and texture to your next meal. This 16-ounce resealable bag of whole peeled cactus is a popular ingredient in Mexican cuisine. They offer a wonderful crunch and a slightly citrusy taste. Use them to make Nopalitos with Tomatoes and Onions, Sopa de Nopal, Enchiladas Rojas with Nopales and Black Beans, and many more savory recipes. However you choose to use it, nopales will add a unique flavor to any meal. Explore new recipes and discover all the delicious ways to prepare this tasty cactus. Add something delicious and nutritious to your next meal with our fresh Whole Nopalitos.', 'Whole Nopalitos, 16 oz: May be used in a variety of recipes Crunchy with a slightly citrusy taste Use in Mexican cuisine such as Sopa de Nopal Season & grill Good source of vitamins & minerals Explore delicious new recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9bcd0863-ebef-4206-9b3b-f43ffa185844.1e3991dbcbe423c8a36a2831ad0ac211.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9bcd0863-ebef-4206-9b3b-f43ffa185844.1e3991dbcbe423c8a36a2831ad0ac211.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9bcd0863-ebef-4206-9b3b-f43ffa185844.1e3991dbcbe423c8a36a2831ad0ac211.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (709642781, 'California Grown Peaches, per Pound', 1.58, '400094989210', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (710319131, 'AVO BAG 10/5 48 MXNR', 3.28, 'deleted_852324007308', 'Avocados', 'Large Avocado 5 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (710449142, 'Plantains', 0.1, '', 'short description is not available', 'Plantains', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/d26b801a-b344-4035-8caf-7668e6042632_2.f954130b42458aaaeac172512e00bc19.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d26b801a-b344-4035-8caf-7668e6042632_2.f954130b42458aaaeac172512e00bc19.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d26b801a-b344-4035-8caf-7668e6042632_2.f954130b42458aaaeac172512e00bc19.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (710563176, 'Fresh Red Seedless Grapes', 1.99, 'deleted_895321002013', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (711124868, 'Grape Tomato, 10 oz Package', 9.94, '044419510019', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (711394063, 'Services Reduced Program Dept 94', 0.01, '251693000000', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (711495797, 'Spinach Blend Salad, 4 Oz.', 2.98, '405642700453', 'Spinach Blend Salad, 4 Oz.', 'Sld Spinach Blnd 4 Oz.', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (711595329, 'Sweet Potato Oriental Yam', 1.28, '000000014946', 'short description is not available', 'Sweet Potato Oriental Yam', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (712332499, 'AVO BAG 36 9/4 MXMP', 3.28, 'deleted_761010147771', '4ct Large Avocado Bag', 'Large Avocado 4 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (712841703, 'Fingerling Potatoes 1.5 Lb Bag', 3.47, '661438524126', 'short description is not available', 'Fingerling Potatoes 1.5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (713841801, 'Grape Tomato, 2 oz Bag', 0.01, 'deleted_405674544520', 'short description is not available', 'Display Sun Snack Grape Tomato Cups', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (713843634, 'Watermelon Seedless', 4.98, '400094425220', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (714093104, 'Fieldpack Unbranded Fresh Strawberries 4#', 7.98, '671704000063', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 4#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (714135904, 'Dole Spring Mix Salad 11oz', 4.12, '071430010686', 'short description is not available', 'Dole Spring Mix Salad 11oz', 'Dole', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (714434166, 'Services Reduced Program Dept 94', 0.01, '251910000004', 'short description is not available', 'Services Reduced Program Dept 94', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (715363420, 'Fresh Pineapple, Each', 3.57, '405698173997', 'Enjoy a burst of tropical flavor with this Fresh Pineapple. This pineapple can be a satisfying afternoon snack, or you can use it in a variety of recipes. For breakfast, use this pineapple to make a rich and creamy smoothie or serve it alongside your pancakes, sausage, and eggs. Slice it up and use to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. For dessert, you could make a crowd-pleasing pineapple upside down cake or a comforting pineapple crisp. However you choose to use it, this Fresh Pineapple will add flavor to any meal or beverage.', 'Pineapples are more than just a tropical fruit; they are a treasure trove of health benefits. This juicy, sweet fruit is loaded with vitamins and minerals, including vitamin C, manganese, copper, and folate. Pineapples are also the only source of the unique enzyme, bromelain, which aids digestion, reduces inflammation, and can help to fight against cancer and heal wounds. They are also packed with antioxidants, known for boosting the immune system, and their high fiber content helps to maintain a healthy digestive system. With a high water content, pineapples also contribute to hydration and can support weight loss by promoting feelings of fullness.', 'Unbranded', 'https://i5.walmartimages.com/asr/1f8bda13-cca8-42e7-8de8-07b8f9bb9380.b372efb198082dfe0bcb33cbbf786e57.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f8bda13-cca8-42e7-8de8-07b8f9bb9380.b372efb198082dfe0bcb33cbbf786e57.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f8bda13-cca8-42e7-8de8-07b8f9bb9380.b372efb198082dfe0bcb33cbbf786e57.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (716066698, 'Organic Marketside Fresh Celery Stalk, Each', 2.87, '294070000002', 'Marketside Organic Celery is flavorful and tender; the ideal vegetable for your kitchen. Celery can be used in a variety of ways in the kitchen and are perfect for health-conscious individuals, since they are USDA Organic and serve as a satisfying snack with many health benefits. Celery is great for juicing, braised, in soups or served raw with a favorite dip. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Tender & Flavorful USDA Organic Excellent juiced, braised, in soups or served raw with a favorite dip Keep refrigerated', 'Marketside', 'https://i5.walmartimages.com/asr/f2cc9284-53fa-4c72-88d7-387b61742ec2.01cfc558033dc659c7a4cc33568ea3ed.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f2cc9284-53fa-4c72-88d7-387b61742ec2.01cfc558033dc659c7a4cc33568ea3ed.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f2cc9284-53fa-4c72-88d7-387b61742ec2.01cfc558033dc659c7a4cc33568ea3ed.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (716698539, 'Fresh Seedless Red Grape Puerto Rico, Bag', 2.17, '405705810952', 'Indulge in the irresistible sweetness of our fresh seedless red grapes, conveniently packed in a bag. These plump and juicy grapes are a delightful treat for any occasion. Each grape is carefully hand-picked to ensure the highest quality and optimal ripeness. With a vibrant red color, these grapes are visually enticing and will add a pop of color to any fruit platter or dessert. The absence of seeds makes them a hassle-free snacking option, allowing you to enjoy the pure, juicy goodness without any interruptions. The firm yet juicy texture of these grapes creates a satisfying burst of flavor with every bite. Whether enjoyed as a quick and healthy snack, added to salads, or used in desserts, our fresh seedless red grapes are a delicious and versatile fruit that will leave your taste buds craving for more.', 'Uva Roja Sin Semilla', 'Unbranded', 'https://i5.walmartimages.com/asr/20529a01-44a5-46fb-b7c4-26a769f28069.a8df8537d9e01c6d9c08ebdb227bd1aa.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20529a01-44a5-46fb-b7c4-26a769f28069.a8df8537d9e01c6d9c08ebdb227bd1aa.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20529a01-44a5-46fb-b7c4-26a769f28069.a8df8537d9e01c6d9c08ebdb227bd1aa.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (716759215, 'Yellow Flesh Peaches, per Pound', 1.58, '400094129388', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (717169641, 'Ready Pac Foods Bistro Caprese Salad with Basil Balsamic Vinaigrette, 5 oz', 6.74, '077745296654', 'Arugula, Baby Greens, Grape Tomatoes, Fresh Mozzarella Pearls, with Basil Balsamic Vinaigrette Fresh Air Seal - Lets Veggies Breathe™', 'Suitable for Vegetarians 220 Calories 5g Protein Gluten free - Made without gluten-containing ingredients', 'Ready Pac Foods', 'https://i5.walmartimages.com/asr/dd6da9f9-f2d2-4423-96b3-9c7cd1244784.99a71e853adf2d7a9cc8269f970b73b6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd6da9f9-f2d2-4423-96b3-9c7cd1244784.99a71e853adf2d7a9cc8269f970b73b6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd6da9f9-f2d2-4423-96b3-9c7cd1244784.99a71e853adf2d7a9cc8269f970b73b6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (717180050, 'Marketside Peeled Red Apple Slices, 10 oz, 4 Count', 3.78, '681131161305', 'There is nothing better than a serving of fresh fruits everyday. With Marketside Peeled Red Apples, experience the crisp, sweet taste of apples that are peeled, cut and ready for you. Eat them on the go, or put them in custards, oats, desserts or yogurts. They provide you with a range of vitamins and minerals, including 2g of fibers, in a light and flavorful way. With 4 small cups of apples, you can share them with your family or enjoy them over more than once. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Peeled Red Apple Slices Delicious cut and peeled red apple slices Contains 2g of fiber per serving Contains 4-2.5 oz cups', 'Marketside', 'https://i5.walmartimages.com/asr/124243e2-3415-425d-bc82-37b28a349ee2_3.6a5790db0f65f3ee168f9e3acb251c32.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/124243e2-3415-425d-bc82-37b28a349ee2_3.6a5790db0f65f3ee168f9e3acb251c32.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/124243e2-3415-425d-bc82-37b28a349ee2_3.6a5790db0f65f3ee168f9e3acb251c32.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (717380138, 'Organic Kiwi Clamshell', 3.97, 'deleted_818849020093', 'short description is not available', 'Kiwifruit, Organic, Green USDA Organic. Certified by CCOF. Good source of dietary fiber. Refreshing original taste. Cut. Scoop. Enjoy. zesprikiwi.com. Please recycle. Product of New Zealand.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0abbf758-66f1-484a-9083-e3762fa9bae4_2.48b411b17dab2777334c30636abefaac.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0abbf758-66f1-484a-9083-e3762fa9bae4_2.48b411b17dab2777334c30636abefaac.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0abbf758-66f1-484a-9083-e3762fa9bae4_2.48b411b17dab2777334c30636abefaac.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (717513461, 'Navel Oranges, each', 0.97, 'deleted_898157002011', 'Navel Oranges, each', 'Navel Oranges', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/a6054c7f-7e7b-4de8-9f04-1f87bafa4c3e.76cf34255799375020421060def8bb2e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6054c7f-7e7b-4de8-9f04-1f87bafa4c3e.76cf34255799375020421060def8bb2e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6054c7f-7e7b-4de8-9f04-1f87bafa4c3e.76cf34255799375020421060def8bb2e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (717627317, 'Cherry on the Vine Tomato, 9 oz Package', 1.98, 'deleted_867858000183', 'Fresh Cherry on the Vine Tomatoes are the perfect cooking tomato. Because of their notable flavor and thicker skin, they are a versatile tomato option that\'s fit for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, cherry on the vine tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with Cherry on the vine Tomatoes from Walmart.', 'Cherry On The Vine Tomatoes 9 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (718070820, 'Services Reduced Program Dept 94', 0.01, '251669000003', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (718174074, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094232989', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (718494396, 'Rockit Apple 4ct', 2.97, '888289403442', 'short description is not available', 'Rockit Apple 4ct', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (718644096, 'Watermelon Seedless', 6.48, 'deleted_850212002213', 'short description is not available', 'Watermelon Seedless', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (718853776, 'Yellow Flesh Peaches, per Pound', 1.58, '400094129111', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (719161506, 'Granny Smith Apples 3 Lb Bag', 3.96, '882648000600', 'short description is not available', 'Granny Smith Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (719838605, 'Freshness Guaranteed Diced Fresh Mirepoix Blend, 10 oz', 2.88, '030223022947', 'Add a little color and texture to your next dish with our Freshness Guaranteed Diced Mirepoix Mix. With yellow onion, carrots, and celery all diced up and mixed together in this one convenient package, you can skip the prep work and have just what you need to create a flavorful soup stock or a savory sauce. Just throw this mix into a pan with some butter or oil, cook on low heat until beautifully caramelized, and you\'ll have the perfect base ready to enhance the flavor profile in a wide variety of recipes. Casseroles, chicken noodle soup, stews, and more are quickly and easily perfected when you use our Freshness Guaranteed Diced Mirepoix Mix. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Diced Mirepoix Mix, 10 oz Includes diced yellow onion, carrots, and celery Convenient prep free mix for quick cooking Perfect for soup stock, sauces, stews, and casseroles Creates a flavorful base when sauteed with butter or oil Great for enhancing a wide variety of recipes', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/aa93816d-5665-453d-9522-95000e5d46cd.1b4021e7c77aa345defbfd88c2247e95.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa93816d-5665-453d-9522-95000e5d46cd.1b4021e7c77aa345defbfd88c2247e95.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa93816d-5665-453d-9522-95000e5d46cd.1b4021e7c77aa345defbfd88c2247e95.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (720147005, 'Fresh Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094357767', 'Fresh Grown Yellow Nectarines, 1 Lb.', 'Fresh Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (720160610, 'Tasteful Selections Tasteful Fingeling Ruby Gusset Bag', 4.68, '826088720124', 'short description is not available', 'Tasteful Selections Tasteful Fingeling Ruby Gusset Bag', 'Tasteful Selections', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (720205113, 'Fresh White Turnip, 1 LB', 4.97, '405946892595', 'The white turnip is a food of neutral thermal nature, with a sweet and bitter flavor at the same time. It improves the body\'s energy circulation, helps mobilize and rebuild blood, relieves cough and helps eliminate accumulations of moisture from the body. Turnip leaves can be consumed raw, in a salad, or cooked with potatoes or in an omelette. . The root can be consumed grated in salads, as if they were radishes, or cooked with rice or legumes. And added in the preparation of broths, they provide an extra dose of minerals.', 'Sweet and bitter taste at the same time They provide an extra dose of minerals Promotes intestinal regularity and provides fiber', 'Unbranded', 'https://i5.walmartimages.com/asr/de171ad6-6b44-4f0b-9ea6-2e3d613d3a20.2ba5b257a7d1c9f243c60bb5de0860b8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/de171ad6-6b44-4f0b-9ea6-2e3d613d3a20.2ba5b257a7d1c9f243c60bb5de0860b8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/de171ad6-6b44-4f0b-9ea6-2e3d613d3a20.2ba5b257a7d1c9f243c60bb5de0860b8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (720337666, 'Garlic Bulb Whole Fresh, Each', 4.97, 'deleted_000000046084', 'Take your culinary creations to the next level with this flavorful fresh Jumbo Garlic. Garlic\'s signature flavors become caramelized and sweeter when cooked, making it a perfect accompaniment to many dishes such as pasta, shrimp, chicken, stews, and more. Garlic also goes great in creamed soups, on all types of roasts, in a variety of egg dishes, or used simply with sauteed or roasted vegetables. To prepare garlic for cooking, you\'ll need to break it up into individual cloves and peel the skin. Once you\'ve done this, you can mince the garlic by chopping it into fine pieces. Or take the flavor profile to the next level and slice the top off the bulb, drizzle with olive oil, wrap in foil, and roast in the oven. When cool, it makes a delicious spread for crusty French bread or a tasty addition to recipes. Spice up your next meal with a tasty clove of fresh Jumbo Garlic.', 'Jumbo Garlic, Per Pound: Ideal addition to every pantry Flavorful addition to many recipes Add to pasta, shrimp, chicken, stews, and more Try sauteed with roasted vegetables Explore all the delicious ways to add fresh garlic to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4716545a-144b-4403-90ae-59957d9138e1.3a80708ae95b71cb102d0793e1d47bba.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4716545a-144b-4403-90ae-59957d9138e1.3a80708ae95b71cb102d0793e1d47bba.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4716545a-144b-4403-90ae-59957d9138e1.3a80708ae95b71cb102d0793e1d47bba.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (720609646, 'Fresh Grapefruit, 5 lb Bag', 5.98, 'deleted_848163004639', 'Indulge in the tangy and refreshing taste of fresh grapefruit, straight from the citrus groves. Our hand-picked grapefruits come in a convenient bag, perfectly ripe and bursting with juicy goodness. Loaded with vitamin C and antioxidants, grapefruit is the ideal choice for a healthy snack or a zesty addition to salads and cocktails. Order now and savor the delightful taste of freshly picked grapefruit!', 'Nutrient-Rich: Grapefruits are tangy, juicy, and packed with vitamins and minerals like vitamin C, potassium, and fiber for a healthy diet. Versatile Taste: With a sweet-tart flavor, enjoy grapefruits alone, in salads, smoothies, or as a fresh addition to recipes. Health Benefits: Grapefruits support immune function, hydration, and may assist in weight loss, making them a nutritious choice for a healthy lifestyle.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5d884a7b-342e-4b8e-b90d-9cb6631d48c6.5dff8264816983a82b7ebefdf0192a26.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d884a7b-342e-4b8e-b90d-9cb6631d48c6.5dff8264816983a82b7ebefdf0192a26.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d884a7b-342e-4b8e-b90d-9cb6631d48c6.5dff8264816983a82b7ebefdf0192a26.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (720640702, 'Organic Green Bell Pepper, Each', 2.96, '814780010315', 'Organic Green Bell Peppers are an extremely versatile vegetable that is a must-have for every cook. Bell peppers are exceptionally rich in vitamin C and other antioxidants, and our green bell peppers are certified organic by the U.S. Department of Agriculture. You can choose to eat them raw and dip them in ranch, or you can incorporate them into a variety of recipes. Dice them and put them in a hearty chili, slice them and add to a deli sandwich, sauté them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out green bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper that will have the family asking for seconds. The culinary possibilities are endless with Organic Green Bell Peppers.', '2-pack of organic bell peppers Naturally low in calories Exceptionally rich in vitamin C and other antioxidants Create delicious recipes with these organic bell peppers', 'Marketside', 'https://i5.walmartimages.com/asr/ffc87c0e-b5c8-4a0b-b143-2cabfc9c8b95.e93357c16c94f681c369a1debfaa684e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ffc87c0e-b5c8-4a0b-b143-2cabfc9c8b95.e93357c16c94f681c369a1debfaa684e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ffc87c0e-b5c8-4a0b-b143-2cabfc9c8b95.e93357c16c94f681c369a1debfaa684e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (720788359, 'Organic Red Potatoes 3 Lb Bag', 4.46, '028733052080', 'short description is not available', 'Organic Red Potatoes 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (721102421, 'Ready Pac Foods Ready Pac Complete Salad Kit, 11 oz', 6.97, '077745247472', 'Complete Salad Kit, Chopped, Mediterranean, Bag 11.5 OZ Salad & Toppings: 8.75 oz (248 g). Dressing: 2.25 oz (2 fl oz) 59 ml. Robust escarole, endive, radicchio, shredded broccoli stalks, sweet carrots, shredded cauliflower stalks, tangy red cabbage, herb seasoned flatbread strips, feta cheese, basil balsamic dressing. Thoroughly washed. Mediterranean cuisine combines simple and fresh ingredients to bring out exciting flavors from healthy food. Ready Pac does the same in this exciting and flavorful restaurant-style Mediterranean Chopped kit. We carefully select and chop escarole, endive, radicchio and combine with shredded broccoli stalks, sweet carrots, shredded cauliflower stalks and tangy red cabbage. Then, add crunchy herb-seasoned flatbread strips, feta cheese, and a delightful, refreshing basil balsamic dressing for a true Mediterranean experience at home. Ready Pac Mediterranean Chopped Salad Kit has everything you need right in the bag! Ready Pac Chopped Salad Kits follow techniques that provide the highest level of freshness and quality. We trim our fresh produce with care, wash it thoroughly, and then place it in special pillow-packaging that protects against bruising and keeps the salad crisper. Ready Pac Foods is committed to providing the highest quality fresh salads. Visit our website at www.readypac.com for more information. For questions or comments, please call 1-800-800-7822. Ready Pac Foods - Giving people the freedom to eat healthier. Keep refrigerated. Perishable. For Optimum Freshness: For the freshest taste, use within two days of opening and keep refrigerated in this breathable bag. Contains: milk, wheat. 11 oz (312 g) Irwindale, CA 91706 800-800-7822 Ready Pac Foods, Inc., 2016', 'Complete Salad Kit, Mediterranean, Chopped Salad & Toppings: 8.75 oz (248 g). Dressing: 2.25 oz (2 fl oz) 59 ml. Robust escarole, endive, radicchio, shredded broccoli stalks, sweet carrots, shredded cauliflower stalks, tangy red cabbage, herb seasoned flatbread strips, feta cheese, basil balsamic dressing. Thoroughly washed. Mediterranean cuisine combines simple and fresh ingredients to bring out exciting flavors from healthy food. Ready Pac does the same in this exciting and flavorful restaurant-style Mediterranean Chopped kit. We carefully select and chop escarole, endive, radicchio and combine with shredded broccoli stalks, sweet carrots, shredded cauliflower stalks and tangy red cabbage. Then, add crunchy herb-seasoned flatbread strips, feta cheese, and a delightful, refreshing basil balsamic dressing for a true Mediterranean experience at home. Ready Pac Mediterranean Chopped Salad Kit has everything you need right in the bag! Ready Pac Chopped Salad Kits follow techniques that provide the highest level of freshness and quality. We trim our fresh produce with care, wash it thoroughly, and then place it in special pillow-packaging that protects against bruising and keeps the salad crisper. Ready Pac Foods is committed to providing the highest quality fresh salads. Visit our website at www.readypac.com for more information. For questions or comments, please call 1-800-800-7822. Ready Pac Foods - Giving people the freedom to eat healthier.', 'Ready Pac Foods', 'https://i5.walmartimages.com/asr/87d8f578-0525-486c-b358-da6455feb7a2.455371f7b6a4d8c3ddff14e66ced6dbf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/87d8f578-0525-486c-b358-da6455feb7a2.455371f7b6a4d8c3ddff14e66ced6dbf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/87d8f578-0525-486c-b358-da6455feb7a2.455371f7b6a4d8c3ddff14e66ced6dbf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (721112635, 'Bako Sweet Organic Sweet Potatoes Bag, 48 Oz', 5.28, 'deleted_819614010080', 'Grown from the sweet spot of California, our organic sweet potatoes are the sweetest you have ever tasted. They are packaged in a 3lb bag and thoroughly washed which means they are ready for you to cook and enjoy! This sweet potato is orange on the outside and orange on the inside, delivering a sweet and earthy flavor. Load up and enjoy! Our organic sweet potatoes are certified by both CCOF Organic and the USDA. Working with these organizations ensures that our farming practices are up to standards so that we can provide the safest and best tasting produce for your family. Sweet potatoes are a pantry essential that you should have always in your kitchen. Just one sweet potato is an excellent source of vitamin containing 368% Vitamin A daily value. They are loaded with beta carotene which acts as a potent antioxidant, making it easy to feel good about what you are about to enjoy! And when you just can’t get enough of them, this bag is pretty sweet.', 'Sweet Potatoes Organic. Certified Organic by CCOF. Gluten free. Vegan. GMO free. From California\'s sweet spot. Grown with pride form Valpredo Farms bakersfield, CA. Since 1944. bakosweet.com. Produce of USA.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/89c43d89-000b-43c2-8b51-00dadd15494a.94b88372286835480ba240444c760abc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/89c43d89-000b-43c2-8b51-00dadd15494a.94b88372286835480ba240444c760abc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/89c43d89-000b-43c2-8b51-00dadd15494a.94b88372286835480ba240444c760abc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (721210464, 'Broccoli Slaw 16z', 2.58, '782796012244', 'short description is not available', 'Broccoli Slaw 16z', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (721449543, 'Organic Green Lettuce, 1 Each', 2.44, '768573710022', 'Organic Green Lettuce, 1 Each', 'Organic Lettuce Green', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (722097817, 'Freshness Guaranteed Fresh Black Seedless Grapes', 1.88, '', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (722417907, 'Fresh Grapefruit, lb', 1.57, '405999074221', 'Grapefruit (Toronja) is the perfect balance between tart and sweet. The balance between tart and sweet is great for both savory and sweet dishes any time of day. Enjoy half of a grapefruit sprinkled with sugar with some eggs in the morning for a light, sweet breakfast. Slice it up and put in a salad with spinach, avocado, and red onion topped with a mustard and balsamic vinegar dressing for lunch or dinner. Make delicious grapefruit bars that showcase the sweet and tartness of this versatile fruit. For an adult recipe juice the grapefruit and pair with some simple syrup and alcohol for a refreshing cocktail. This fruit is the perfect addition to a healthy diet as it is a great source of vitamin C and vitamin A. With such versatility, Grapefruit will become a pantry staple in your home', 'Great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a grapefruit sprinkled with sugar in the morning, slice it up and put it in salad for lunch or dinner, or make grapefruit bars Great source of vitamin C and vitamin AToronja Blanca', 'Unbranded', 'https://i5.walmartimages.com/asr/03d2d8cf-e487-4ed0-b45b-02f860ea6695.eef891593ed974f21dac604986f62180.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/03d2d8cf-e487-4ed0-b45b-02f860ea6695.eef891593ed974f21dac604986f62180.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/03d2d8cf-e487-4ed0-b45b-02f860ea6695.eef891593ed974f21dac604986f62180.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (722758914, 'Bowery Farming Spring Mix Pesticide-Free, Locally Grown Salad Greens, 10oz', 4.48, '851536007595', 'Spring Mix is a classic, sweet, and zesty salad blend. It\'s perfect in a wrap or as a beautiful, fresh salad.Bowery Farming grows positively tasty, fresh produce in a cleaner, more sustainable way: in local, indoor smart farms. Every Bowery leaf is grown and handled with care, without pesticides. Bowery\'s smart farms use less water & create less waste on less land. Because Bowery\'s farms are local, you can trust that your produce is freshly harvested, picked at peak freshness 365 days a year, and available on shelf in just a few days.', 'Bowery Farming Spring Mix Pesticide-Free, Locally Grown Salad Greens, 10oz: 100% Pesticide-free 100% Locally grown 100% Fully traceable Indoor-grown Protected Produce Clean & ready to eat Non-GMO Project Verified Recycled Packaging', 'Bowery Farming', 'https://i5.walmartimages.com/asr/73a51b94-7996-48e1-ab2d-8b681189e72c.1e52f29e83b0b34851b61f575ac98db7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/73a51b94-7996-48e1-ab2d-8b681189e72c.1e52f29e83b0b34851b61f575ac98db7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/73a51b94-7996-48e1-ab2d-8b681189e72c.1e52f29e83b0b34851b61f575ac98db7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (722904900, '240pc On Ylw 3# Fab', 465.6, '405509623857', 'short description is not available', '240pc On Ylw 3# Fab', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (723232516, 'Watermelon Seedless', 4.48, '400094407516', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (723467179, 'Fresh Squash Chunks, 24oz', 2.48, '794504174427', 'Add some fresh flavor to your meal with \"Calabaza en Trozos\" fresh squash. This versatile vegetable can be used in a variety of dishes to create delicious and decadent meals. You place in the slow cooker with chicken breast, kidney beans, and spices. Create tasty and flavorful meals with this vegetable.', 'Versatile ingredient Roast the whole squash for the perfect side dish put into a slow cooker, and mix with chicken breast, beans, and spices for a flavorful dish Use it to create a sweet pie or even creamy soup', 'Prico', 'https://i5.walmartimages.com/asr/69146953-5bf8-4099-adc8-ee461f9d8254.816251eab03818d82ff8017cd29ce60d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/69146953-5bf8-4099-adc8-ee461f9d8254.816251eab03818d82ff8017cd29ce60d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/69146953-5bf8-4099-adc8-ee461f9d8254.816251eab03818d82ff8017cd29ce60d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (724108263, 'Greens Red Chard Saute 12z', 3.98, '688962016255', 'short description is not available', 'Greens Red Chard Saute 12z', 'Green\'s Bakery', 'https://i5.walmartimages.com/asr/90e1327f-d7d0-403c-b34f-79d6d217cd6c_2.beba6088da8a2adcf36720eaaa2676dc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/90e1327f-d7d0-403c-b34f-79d6d217cd6c_2.beba6088da8a2adcf36720eaaa2676dc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/90e1327f-d7d0-403c-b34f-79d6d217cd6c_2.beba6088da8a2adcf36720eaaa2676dc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (724418008, 'Cantaloupe', 1.88, '400094420607', 'short description is not available', 'Cantaloupe', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (724449708, 'Red Apples 3 Lb Bag', 3.97, 'deleted_888289401875', 'short description is not available', 'Red Apples 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6a3cdd28-f6bb-4d4d-b8a1-4b4fad333101.cde2fd3846f444b1c59d02ff4abb2d08.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a3cdd28-f6bb-4d4d-b8a1-4b4fad333101.cde2fd3846f444b1c59d02ff4abb2d08.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a3cdd28-f6bb-4d4d-b8a1-4b4fad333101.cde2fd3846f444b1c59d02ff4abb2d08.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (725132044, 'California Grown Peaches, per Pound', 1.58, '400094006146', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (725442947, 'Fresh Dragon Fruit , lb', 2.48, '861010000141', 'Dragon fruit, also known as pitaya, is a vibrant tropical fruit native to Central America. Recognizable for its bright pink or yellow, spiky skin and creamy pulp filled with tiny seeds, it offers a subtly sweet taste reminiscent of kiwi or pear. Dragon fruit is a nutritional powerhouse, providing high amounts of fiber, vitamin C, essential minerals, and antioxidants. Grown on a climbing cactus, this refreshing fruit is harvested when its skin color fully develops, offering a unique and healthful treat.', 'Dragon fruit, also known as pitaya, is a tropical fruit that belongs to the cactus family. Native to Central America but now grown all over the world, dragon fruit is known for its unique appearance, vibrant color, and a wealth of health benefits. The fruit has a leathery, slightly leafy skin that is bright pink or yellow in color, while the inside boasts a sweet, creamy pulp dotted with tiny, crunchy seeds. Appearance and Taste: Dragon fruit stands out for its flamboyant appearance, with its bright pink or yellow, spiky skin, and white or red flesh speckled with small black seeds. The taste of dragon fruit is subtly sweet and often compared to that of a kiwi or pear, with the seeds providing a satisfying crunch. Its texture is wonderfully juicy and creamy, making it a refreshing treat on a hot day. Health Benefits: Dragon fruit is a nutritional powerhouse, packed with a range of beneficial compounds. It\'s high in fiber, vitamin C, and several essential minerals like iron and magnesium. Dragon fruit is also rich in antioxidants, which help fight off free radicals and prevent cell damage. Moreover, it contains prebiotics, which promote the growth of beneficial bacteria in your gut, contributing to a healthy digestive system. Cultivation and Harvest: Dragon fruit grows on a cactus plant that climbs up trees or walls with the help of its aerial roots. It thrives best in a dry tropical climate with a moderate amount of rain. The fruit is harvested when its skin color changes from bright green to pink or yellow, depending on the variety. Despite its exotic appearance, dragon fruit is easy to eat; simply slice it in half and scoop out the flesh with a spoon.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/09bd462f-cb64-43a5-a554-705fda26532d.2f24c1400f856dcbd27c10a1e672ea93.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/09bd462f-cb64-43a5-a554-705fda26532d.2f24c1400f856dcbd27c10a1e672ea93.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/09bd462f-cb64-43a5-a554-705fda26532d.2f24c1400f856dcbd27c10a1e672ea93.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (726735591, 'Local Roots Mars Mix, 4.5 oz', 2.98, '853911006247', 'A galactically delicious blend of fresh heritage baby greens.', 'Grown locallyGrown with zero pesticides or herbicidesGrown with up to 99% less waterHigh in Antioxidants, Chlorophyll, and Vitamins', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d7147ca7-a708-4347-9d28-b6f5ea4c0aad.ded22585d1ef94954bac460f5d50b626.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d7147ca7-a708-4347-9d28-b6f5ea4c0aad.ded22585d1ef94954bac460f5d50b626.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d7147ca7-a708-4347-9d28-b6f5ea4c0aad.ded22585d1ef94954bac460f5d50b626.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (726810451, '200pc Pto Idaho 5#', 794, '405551645470', 'short description is not available', '200pc Pto Idaho 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (727132669, 'Yellow Flesh Peaches, per Pound', 1.58, '400094362075', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (727744868, 'Sunset Tomatoes Organic Angel Sweet, 1lb Packet', 4.37, '057836900165', 'Organic Tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily complements your recipes. Juicy and delicious, tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Tomatoes are the perfect choice.', 'A mix of our grape tomato Cherubs, sweet yellow Comets, mini-heirloom Twilights, and orange cherry tomatoes Certified Equitable Food Initiative Non-GMO', 'Fresh Produce', 'https://i5.walmartimages.com/asr/56d1f686-6487-4606-a8b5-1b06a22dfe59.369910b2f3fe6fae370a10060f7266c4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56d1f686-6487-4606-a8b5-1b06a22dfe59.369910b2f3fe6fae370a10060f7266c4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56d1f686-6487-4606-a8b5-1b06a22dfe59.369910b2f3fe6fae370a10060f7266c4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (727773134, 'Services Reduced Program Dept 94', 0.01, '251672000007', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (728013665, 'Fieldpack Marketside Organic Celery MX', 1.96, '681131377423', 'Marketside Organic Celery Stalks are more than just a side dish to a plate of hot wings. Every crunch is packed with minerals, vitamins C, K and A to support a strong immune system and clear vision. When celery is cooked, it boasts a more subtle flavor that can complement many other foods.', 'The ancient Romans believed celery had healing powers and used it as a remedy for headaches. In ancient Greece, bunches of celery served as the original celebratory bouquet of flowers given to victorious athletes.', 'FIELDPACK MARKETSIDE', 'https://i5.walmartimages.com/asr/0b746fbd-324f-40d0-886c-7435fafd8fbc_2.ce754b60abe43a71168ba6358d36a75f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b746fbd-324f-40d0-886c-7435fafd8fbc_2.ce754b60abe43a71168ba6358d36a75f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b746fbd-324f-40d0-886c-7435fafd8fbc_2.ce754b60abe43a71168ba6358d36a75f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (728124576, 'Petite Russet Potatoes Whole Fresh, 3 lb Bag', 3.97, '847597010599', 'Create something wholesome and delicious with these fresh Sweet Potatoes. Sometimes referred to as yams, these versatile fresh produce vegetables can be used multiple ways: to make savory sides or sweet treats. Try them roasted or baked for a tasty addition to any dish. You could also use them to make seasoned sweet potato fries or a flavorful hummus dip for your next party. If you want to satisfy your sweet tooth, try them in a traditional sweet potato casserole or use them to make sweet potato and brown sugar ice cream. The mouthwatering possibilities are endless with this hearty vegetable. Add something amazing to your meals with this three-pound bag of Organic Sweet Potatoes.', 'Fresh Petite Russet Potatoes 3 Lb Bag Ideal ingredient as a versatile, flavorful kitchen staple Perfect for a Baked Potato Bar at your next party. Make a classic baked potato to pair with your favorite cut of meat Idaho Homegrown Potato Rich in potassium, vitamin C and B6', 'Fresh Produce', 'https://i5.walmartimages.com/asr/202efa81-88a9-48df-be33-adb92b06ef0b.2e8931e286feb9d156441de32b9bdd3f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/202efa81-88a9-48df-be33-adb92b06ef0b.2e8931e286feb9d156441de32b9bdd3f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/202efa81-88a9-48df-be33-adb92b06ef0b.2e8931e286feb9d156441de32b9bdd3f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (728307519, 'French Green Beans 8 Oz', 2.98, 'deleted_631203200104', 'short description is not available', 'French Green Beans 8 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (728590366, 'Bowery Farming Mixed Greens Salad Blend, 4 oz Clam Shell, Fresh Salad Lettuce', 2.98, '851536007564', 'A delicious blend of super velvety, subtly sweet, perfectly crunchy lettuce to plus up any salad, wrap, or veggie bowl. Every Bowery leaf is grown and handled with care, without pesticides. Bowery\'s smart farms use less water and create less waste on less land. All Bowery produce is freshly harvested, picked at peak freshness 365 days a year, and available on shelf in just a few days.', 'Produce grown smarter for better flavor: less wasteful, more tasteful. Vertically Grown Fresher Longer Zero-Pesticide Greens No Need to Wash Bowery Farming Salad Greens Lettuce', 'Bowery Farming', 'https://i5.walmartimages.com/asr/1245fb6f-b73e-4b40-b1df-3eb2790e0c90.4b42f925103fa183cf08aeb3f1237084.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1245fb6f-b73e-4b40-b1df-3eb2790e0c90.4b42f925103fa183cf08aeb3f1237084.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1245fb6f-b73e-4b40-b1df-3eb2790e0c90.4b42f925103fa183cf08aeb3f1237084.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (729521730, 'Mann\'s Steakhouse Caulilini Baby Cauliflower, 10 oz', 4.67, '716519009853', 'Caulilini soaks up more sun as it grows, allowing it to become sweeter, more tender and colorful than regular cauliflower. It is 100% edible with an elongated stem and a sweet and delicious mild flavor.', '100% usable product Sweet, tender stalk turns bright green when cooked Microwave in bag', 'Mann\'s', 'https://i5.walmartimages.com/asr/52ece6d5-6bbc-4ca1-b711-9d466b8cfc26.eca7981c8625785827d749c451e3384f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/52ece6d5-6bbc-4ca1-b711-9d466b8cfc26.eca7981c8625785827d749c451e3384f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/52ece6d5-6bbc-4ca1-b711-9d466b8cfc26.eca7981c8625785827d749c451e3384f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (729702959, 'Watermelon Seedless', 4.98, '400094544785', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (729844539, 'Fresh Tomatoes on the Vine, 1 lb Carton', 2.98, '699058455124', 'Keep your recipes simple and classic with Fresh Tomatoes on the Vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, these fresh tomatoes on the vine are sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Fresh Tomatoes on The Vine and keep your dishes looking great and tasting delicious.', 'Fresh Tomatoes on the Vine, 1 lb Carton: Vibrant red color Firm and juicy flesh Unmistakably delicious flavor Tomatoes come still on the vine for maximum freshness and taste Slice them to garnish a sandwich or burger Dice them to top a pizza or some pasta Crush them to make a decadent bruschetta or sauce Blend them to create homemade salsa', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (731307960, '75pc Orange Navel 8#', 597.75, '400094637951', 'short description is not available', '75pc Orange Navel 8#', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (731315558, 'Fieldpack Unbranded Collard Greens', 0.98, 'deleted_855829002236', 'short description is not available', 'Fieldpack Unbranded Collard Greens', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (732109224, 'Marketside Organic Broccoli & Carrots, 12 oz', 3.98, '681131179447', 'Marketside Organic Broccoli and Carrots are packed fresh, washed and ready to eat for your convenience. They have a great fresh taste that is loaded with nutrients and a vibrant green and orange color that are sure to add a pop to all your dishes. Enjoy them as a healthy side or use them in all your favorite recipes. Season them with salt, pepper and garlic and serve with grilled steak, mashed potatoes and bread rolls for a filling dinner. They come packaged inside a microwaveable bag that cooks in less than five minutes. Dinner is made easy with Marketside Organic Broccoli & Carrots. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes. Microwave in bag: Place bag on a microwave-safe dish. Microwave on high for 3 to 4 minutes or until desired tenderness. Carefully remove bag from microwave. Be cautious when opening the bag as the vegetables and steam will be very hot. Season to taste and enjoy.', 'Marketside Organic Broccoli & Carrots, 12 oz: Microwave in bag Washed and ready to eat USDA Organic Net weight 12 oz', 'Marketside', 'https://i5.walmartimages.com/asr/46ae1270-c8d5-4d17-ac30-746d9599950b_2.b13542b75740e57e4c2584737e7f2cba.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/46ae1270-c8d5-4d17-ac30-746d9599950b_2.b13542b75740e57e4c2584737e7f2cba.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/46ae1270-c8d5-4d17-ac30-746d9599950b_2.b13542b75740e57e4c2584737e7f2cba.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (732301465, 'Prico Pineapple cut 24oz', 7.67, '794504172126', 'Enjoy the sweet, tropical flavor of Fresh Pineapple Chunks (Piña). These pre-cut chunks are great for breakfast, lunch, dessert, or when you want a snack. Pineapple is a good source of vitamin C, vitamin A and vitamin B6 making them an excellent healthy treat. You can eat the chunks right out of the container, infuse them with water and mint for a refreshing drink, or chop them up and make a mouthwatering pineapple salsa with jalapenos, tomatoes, and red onion.', 'Sweet, refreshing treat Great for breakfast, lunch, dessert, or when you want a snack Good source of vitamin C, vitamin A, and vitamin B6 Enjoy right out of the container, infuse with water and mint, or mix with jalapenos, tomatoes, and red onion for salsa Share with friends and family or keep for yourself Comes in a reclosable container to help maintain freshness Saves Times', 'Prico Produce', 'https://i5.walmartimages.com/asr/91036ed1-bac7-476a-a40a-0fdb7be5c8b8.2442038c2055ba38ad0b756e505a002f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/91036ed1-bac7-476a-a40a-0fdb7be5c8b8.2442038c2055ba38ad0b756e505a002f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/91036ed1-bac7-476a-a40a-0fdb7be5c8b8.2442038c2055ba38ad0b756e505a002f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (732568001, '50pc Pto Idaho 20#', 324, '405913690902', 'short description is not available', '50pc Pto Idaho 20#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (732858266, 'Fresh Black Seedless Grapes, 1 Lb', 3.98, '854957001272', 'short description is not available', 'Fresh Black Seedless Grapes, 1 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (733176536, 'Fresh Red Seedless Grapes', 1.87, 'deleted_014668790029', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (733227902, '240pc On Ylw 3# Tx', 475.2, '405552883963', 'short description is not available', '240pc On Ylw 3# Tx', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (733256689, 'Fresh Green Seedless Grapes', 3.14, '000000034982', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (733860051, 'Gala Apples, Each', 1.07, '', 'short description is not available', 'Gala Apples, Each', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (734287546, 'Plenty Baby Arugula, Fresh Zero Pesticides, 4.5oz resealable', 2.97, '810567030439', 'Let\'s get spicy. Plenty Baby Arugula has the natural bite to add fresh, zingy flavor to any dish. With softer, more velvety leaves than your typical arugula, this will become your Zero Pesticides staple for salads that feel like they walked out of a restaurant. Better yet? No need to wash this gorgeous green, just peel back the resealable lid, crunch, and go. At Plenty, we\'re reimagining what a farm can be. It’s no secret–farming can be a little dirty. Like dirt under your nails, but also dirty like land use, water waste, pollution, and contaminants on your food. We grow fresh, flavorful produce vertically indoors – so everything is a little… cleaner. From a controlled, indoor environment to zero-pesticide greens on your table – Plenty is cleaner for the world and cleaner for you.', 'Plenty Baby Arugula, 4.5 oz : Zingy, spicy taste you\'ll crave Zero Pesticides and no need to wash Sick of salads? Plenty arugula makes a great base for Pesto or garnish for chicken dishes Indoor and vertically grown for peak-season freshness all year long Convenient 4.5oz peel and reseal packaging', 'PLENTY', 'https://i5.walmartimages.com/asr/4fd4289a-c596-49c9-aedd-85fe132616ba.090820fd201485990dc42c31e616538d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4fd4289a-c596-49c9-aedd-85fe132616ba.090820fd201485990dc42c31e616538d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4fd4289a-c596-49c9-aedd-85fe132616ba.090820fd201485990dc42c31e616538d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (734460659, 'SWEET TAMARINDO', 6.97, '885900120016', 'SWEET TAMARINDO', '', '', 'https://i5.walmartimages.com/asr/2066f2d6-b632-477b-97cb-1054a712b50b.4b01468ce3faf911ddc2d002e98fd82b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2066f2d6-b632-477b-97cb-1054a712b50b.4b01468ce3faf911ddc2d002e98fd82b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2066f2d6-b632-477b-97cb-1054a712b50b.4b01468ce3faf911ddc2d002e98fd82b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (734495150, '200pc Pto Ykn 5# Co', 694, '400094033562', 'short description is not available', '200pc Pto Ykn 5# Co', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (734562425, 'Sunset Wild Wonders Medley Tomato, 16 oz Package, Fresh', 3.5, '057836021785', 'SUNSET Wild Wonders Gourmet Tomato Medley is 16 ounces of mixed color snacking tomatoes! Perfect for snacking, lunch, or dinner - fresh or cooked. Try them in salads, pastas, omelets, flatbreads, and more. Discover the world\'s flavors! This gourmet medley features a delightful array of shapes and colors with a sweet and juicy flavor. Hothouse grown to ensure consistent quality and freshness. Certified non-GMO tomatoes. Store at room temperature for optimal flavor, and wash before enjoying. Plastic tray featuring a peel and reseal film to help keep tomatoes fresh. Enjoy SUNSET Wild Wonders Gourmet Tomato Medley all year long.', 'SUNSET fresh Wild Wonders Tomato Medley Discover the world\'s flavors A delightful array of shapes and colors with a sweet and juicy flavor Perfect for snacking, lunch, or dinner - fresh or cooked Try them in salads, pastas, omelets, flatbreads, and more Wash and enjoy Available all-year-long Non-GMO certified Hothouse grown to ensure consistent quality and freshness 16-oz plastic container featuring a peel and reseal film to help keep tomatoes fresh Store at room temperature for optimal flavor\"', 'SUNSET', 'https://i5.walmartimages.com/asr/90285596-2ec5-4d6b-b152-faa563e17303_1.88a0a78e31a5612b98cb622203a9e5b5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/90285596-2ec5-4d6b-b152-faa563e17303_1.88a0a78e31a5612b98cb622203a9e5b5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/90285596-2ec5-4d6b-b152-faa563e17303_1.88a0a78e31a5612b98cb622203a9e5b5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (734633197, 'Fresh Red Grapefruit, 5 lb Bag', 5.98, 'deleted_072240754852', 'Red Grapefruit is the perfect balance between tart and sweet. The balance between tart and sweet is great for both savory and sweet dishes any time of day. Enjoy half of a grapefruit sprinkled with sugar with some eggs in the morning for a light, sweet breakfast. Slice it up and put in a salad with spinach, avocado, and red onion topped with a mustard and balsamic vinegar dressing for lunch or dinner. Make delicious grapefruit bars that showcase the sweet and tartness of this versatile fruit. For an adult beverage, juice the grapefruit and pair with some simple syrup and alcohol for a refreshing cocktail. This fruit is the perfect addition to a healthy diet as it is a great source of vitamin C and vitamin A. With such versatility, Red Grapefruit will become a pantry staple in your home.', 'Great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a grapefruit sprinkled with sugar in the morning, slice it up and put it in salad for lunch or dinner, or make grapefruit bars Great source of vitamin C and vitamin A', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2f5ff23c-604f-465f-9f24-798aa67f5bb3_1.adb2d52364be4bcc35aed4da0e54a52d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f5ff23c-604f-465f-9f24-798aa67f5bb3_1.adb2d52364be4bcc35aed4da0e54a52d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2f5ff23c-604f-465f-9f24-798aa67f5bb3_1.adb2d52364be4bcc35aed4da0e54a52d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (734734841, '240pc On Ylw 3# Ca', 475.2, '405544170576', 'short description is not available', '240pc On Ylw 3# Ca', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (734926689, 'Crunch Pak Family Sized Sweet Apple Slice Bag 32oz', 5.97, '732313001077', 'A Healthy Crunch Pak Family Sized 32oz Bag of Sweet Sliced Apples. Provides an optimal choice in your favorite recipes, on-the-go, between meals, lunchtime, or anytime during the day snack! Pick your family treat up today!', 'Crunch Pak Family Sized 32oz Bag of Sweet Sliced Apples 80 Calories per serving Excellent Souce of Vitamin C', 'Fresh Produce', 'https://i5.walmartimages.com/asr/41adf758-ce8b-4ef8-a09c-a0266784fab7.61c0c99173402b2eaf7706a96b4c9a99.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41adf758-ce8b-4ef8-a09c-a0266784fab7.61c0c99173402b2eaf7706a96b4c9a99.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/41adf758-ce8b-4ef8-a09c-a0266784fab7.61c0c99173402b2eaf7706a96b4c9a99.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (735063314, 'Gesex Smart Fruit Nectarines', 3.97, '814746010830', 'Gesex Smart Fruit Nectarines', 'Gesex Smart Fruit Nectarines', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (735324298, '200pc Pto Idaho 5#', 794, '405540274896', 'short description is not available', '200pc Pto Idaho 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (735464499, 'Koru Apples 2 Lb Bag', 4.94, '879329003432', 'short description is not available', 'Koru Apples 2 Lb Bag', 'Koru Mat', 'https://i5.walmartimages.com/asr/f1e4b048-7b64-47c4-86be-5e067e3b049a.15611fdd08e9a03576e735f49e7c5165.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f1e4b048-7b64-47c4-86be-5e067e3b049a.15611fdd08e9a03576e735f49e7c5165.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f1e4b048-7b64-47c4-86be-5e067e3b049a.15611fdd08e9a03576e735f49e7c5165.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (735596417, 'Fresh Burro Banana, Each', 1.58, '821783042298', 'Our fresh bananas are made with organic ingredients and are the perfect healthy snack! These sweet and delicious fruits are filled with essential vitamins and minerals that provide energy and help maintain a balanced diet. Enjoy them as a quick on-the-go snack or add them to smoothies and desserts for a delicious treat. Trust us, you won\'t be disappointed!', 'Fresh and whole burro banana is typically shorter and thicker than a regular banana. Flavor is similar to a sweet lemon with it\'s sour, tangy kick. This is great for a snack or a quick side to a meal! Mix with other Fresh produce for a delicious fruit salad. Find this in your local stores!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a706f0ef-46f7-4ac8-b365-c0a722a92ea9.841da2e10162341c2e7912dfcad6c581.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a706f0ef-46f7-4ac8-b365-c0a722a92ea9.841da2e10162341c2e7912dfcad6c581.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a706f0ef-46f7-4ac8-b365-c0a722a92ea9.841da2e10162341c2e7912dfcad6c581.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (735797888, '96pc Jce Lemon/lime', 84.48, '405576212688', 'short description is not available', '96pc Jce Lemon/lime', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (736291379, 'Marketside Beyond Spring Mix Salad, 8 oz Clam Shell, Fresh', 4.98, '194346001477', 'Enjoy the fresh flavor of Marketside Beyond Spring Mix. These greens are indoor and vertically grown for peak-season freshness all year long. Indoor vertical farms are a controlled growing environment giving each plant the optimal amount of light and nutrients for fresh and flavorful produce any time of the year. Farming vertically means our produce can be grown using significantly less water and land than traditional outdoor farms. Create something delicious with Marketside Beyond Spring Mix. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Beyond Spring Mix, 8 oz: Baby spinach, baby romaine, baby leaf lettuce, baby red lettuce (ingredients may vary) Indoor and vertically grown for peak-season freshness all year long No pesticides, herbicides or fungicides applied to our greens Convenient peel and reseal packaging Keep refrigerated until ready to enjoy', 'Marketside Beyond', 'https://i5.walmartimages.com/asr/5720a866-f2b6-4bd4-b762-4379fbdbd67d.6999b9bd53b50ab6eeae3ee9be328352.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5720a866-f2b6-4bd4-b762-4379fbdbd67d.6999b9bd53b50ab6eeae3ee9be328352.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5720a866-f2b6-4bd4-b762-4379fbdbd67d.6999b9bd53b50ab6eeae3ee9be328352.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (736871775, 'Watermelon Seedless', 4.98, '400094912553', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (736892151, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094260562', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (737098460, '120pc On Tx1015 3#', 472.8, '405537970398', 'short description is not available', '120pc On Tx1015 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (737261539, 'Cantaloupe', 1.88, '400094420676', 'short description is not available', 'Cantaloupe', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (737704039, 'Brindisa Garlic Cloves - 235g (0.52lbs)', 20.12, '617588708893', 'Brindisa Garlic Cloves - 235g (0.52lbs)', 'Brindisa Garlic Cloves - 235g (0.52lbs)', 'Brindisa', 'https://i5.walmartimages.com/asr/d8410fee-d6cd-4152-aabc-b90a8916d2a4.db7e26a0a5317ca1e1b7a0ed98e8e19c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d8410fee-d6cd-4152-aabc-b90a8916d2a4.db7e26a0a5317ca1e1b7a0ed98e8e19c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d8410fee-d6cd-4152-aabc-b90a8916d2a4.db7e26a0a5317ca1e1b7a0ed98e8e19c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (737953622, 'Green Beans 32oz', 5.98, 'deleted_854026006320', 'short description is not available', 'Green Beans 32oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (738641733, 'Dole California Chopped Dates 8 oz (Pack of 4)', 31.14, '783399664229', 'Feel revitalized with the fresh taste of sun-ripened dole all-natural fruit. Rich in nutrients, fruit gives you healthy energy so you feel refreshed and ready to shine. They are grown under the california sun. dole dates are picked at the peak of ripeness for maximum sweetness and flavor. They\'re delicious, 100% natural, and contain more nutritious antioxidants than many other common fruits, for more than 100 years, dole has been committed to our environment, our employees and the communities in which we operate.', 'California Chopped Dates', 'Dole', 'https://i5.walmartimages.com/asr/f60b7af8-b009-4c38-b52c-ced7d2603207.fb82d53f64a28030b97475e1937241c3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f60b7af8-b009-4c38-b52c-ced7d2603207.fb82d53f64a28030b97475e1937241c3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f60b7af8-b009-4c38-b52c-ced7d2603207.fb82d53f64a28030b97475e1937241c3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (738642606, 'Pepper Hot Hatch Chili RW Bag', 2.58, '851533003804', 'Unique flavored pepper, which is highly desirable. Grown in the hatch valley of New Mexico', 'Pepper Hot Hatch Chili RW Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7b56c084-70ec-4bbe-8c88-fbae229b4af9_1.6c64fa28cc7180d2c9f212eef457f839.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7b56c084-70ec-4bbe-8c88-fbae229b4af9_1.6c64fa28cc7180d2c9f212eef457f839.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7b56c084-70ec-4bbe-8c88-fbae229b4af9_1.6c64fa28cc7180d2c9f212eef457f839.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (738883023, 'Small Avocado 5 Count Bag', 4.28, 'deleted_845857001325', 'short description is not available', 'Small Avocado 5 Count Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (738901619, 'Fresh Organic Yellow Squash, 2 Count', 2.96, '681131091343', 'Wholesum\'s fresh organic yellow squash is as delicious as it is versatile, making it the perfect addition to healthy and hearty meals. With its mildly sweet flavor and tender, edible skin, this bright and nutritious vegetable is easy to prepare and does not require long cooking. For more savory options, try them grilled, roasted, or air fried. They are also a perfect addition to vegetable, pasta dishes and skewers. If craving something on the sweet side, you may even feature this lovely vegetable on the dessert table. Try grating them into a fluffy yellow squash Bundt cake or bread. Any way that you enjoy it, yellow squash promises to deliver on flavor and is rich in essential vitamins, nutrients, and antioxidants. Wholesum is committed to bringing you a variety of premium Wrapped organic produce that is fresh, flavorful, and responsibly grown.', 'Wholesum Organic Yellow Squash Certified Organic 2 Count Squash Great for salads Great for grilling Responsibly grown', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9fc8525e-988b-403e-bfc3-0b167a416b49.f4edfaea061d4ed3c2f4af843208498d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9fc8525e-988b-403e-bfc3-0b167a416b49.f4edfaea061d4ed3c2f4af843208498d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9fc8525e-988b-403e-bfc3-0b167a416b49.f4edfaea061d4ed3c2f4af843208498d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (739446588, 'Organic Tomato on the Vine, 1 lb Bag', 2.84, '000000031493', 'Keep your recipes simple and classic with fresh tomatoes on the vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, this fresh produce item is sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Walmart\'s Tomatoes On The Vine and keep your dishes looking great and tasting equally as excellent.', 'Tomatoes On The Vine, 1 lb: 1-pound bag of tomatoes on the vine Vine helps tomatoes maintain peak freshness and flavor Perfect for slicing, dicing, crushing and blending Great for sandwiches, pastas, pizzas and salsas Essential ingredient in every home-cook\'s kitchen', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e5cd9099-5b09-4cec-bf7b-2d63171f2a34.5f61dc1fc2b1fa276fbdc2e1158994a3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5cd9099-5b09-4cec-bf7b-2d63171f2a34.5f61dc1fc2b1fa276fbdc2e1158994a3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e5cd9099-5b09-4cec-bf7b-2d63171f2a34.5f61dc1fc2b1fa276fbdc2e1158994a3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (739652890, 'Walmart Produce Mango Spears 32 Oz', 8.98, '826766252091', 'DEL MONTE CHNK SNGL FRT MNG MLDD TRY', 'Mango Spears, 32 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/599864a3-7c7a-4c18-abd8-680f0b251293.b6a85c55899c676b37c18490a43f861a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/599864a3-7c7a-4c18-abd8-680f0b251293.b6a85c55899c676b37c18490a43f861a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/599864a3-7c7a-4c18-abd8-680f0b251293.b6a85c55899c676b37c18490a43f861a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (739967574, 'Freshness Guaranteed Fresh Black Seedless Grapes', 1.83, 'deleted_000000035057', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (740393866, 'White Onions, 2 Lb.', 2.24, '795631335514', 'White Onions, 2 Lb.', 'White Onions 2 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (740718083, 'Fresh Green Seedless Grapes', 2.37, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (740832090, 'Organic Parsley Puree 2.8oz', 3.98, '768573300384', 'Your order will contain 2.8 ounces of organic Parsley puree.', 'Stir-in Puree, Organic, Parsley Pure organic flavor. USDA Organic. Certified Organic by CCOF. Don\'t let flavor parsley by! Flavor beef, pasta, veggies & soups. Amazing Fresh Flavor; prepared with fresh, organic ingredients for best taste & texture! Fresh without the mess - no chopping! May contain sulfites. thatstasty.com. Facebook. Instagram. Pinterest. Twitter. Made in France.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9da1a3be-e1b0-4cf9-81ac-5346dbe94045.2918e01fba0c949a800e296eff76514e.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9da1a3be-e1b0-4cf9-81ac-5346dbe94045.2918e01fba0c949a800e296eff76514e.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9da1a3be-e1b0-4cf9-81ac-5346dbe94045.2918e01fba0c949a800e296eff76514e.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (742179181, '200pc Pto Idaho 5#', 588, '405508050968', 'short description is not available', '200pc Pto Idaho 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (742294208, 'Fieldpack Unbranded Fresh Organic Strawberries 1#', 4.48, 'deleted_811334020288', 'short description is not available', 'Fieldpack Unbranded Fresh Organic Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/dd7491e8-5267-4493-9e9c-13e36492b8de.f22ba1e55f40b2169a3544503c13186b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd7491e8-5267-4493-9e9c-13e36492b8de.f22ba1e55f40b2169a3544503c13186b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd7491e8-5267-4493-9e9c-13e36492b8de.f22ba1e55f40b2169a3544503c13186b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (743516266, 'Cilantro Lime Ranch Primal Box', 4.88, '818148021487', 'short description is not available', 'Cilantro Lime Ranch Primal Box', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (743685152, 'Watermelon Seedless', 4.48, '405503699889', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (744534611, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '405521536715', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (744848582, '50pc Pto Russet 20#', 324, '405890862514', 'short description is not available', '50pc Pto Russet 20#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (744989810, 'Chilean Grown Peaches, per Pound', 1.58, '405528609825', 'Chilean Grown Peaches, per Pound', 'Fresh Chilean Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (745131827, 'Organic Golden Delicious Apples, 2 lbs', 3.96, '847473004865', '', '', 'Generic', 'https://i5.walmartimages.com/asr/669f87d4-4755-4732-9c0b-ea30ebad2d14.84e1397589f4d1bafd2ce5c74d470bd7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/669f87d4-4755-4732-9c0b-ea30ebad2d14.84e1397589f4d1bafd2ce5c74d470bd7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/669f87d4-4755-4732-9c0b-ea30ebad2d14.84e1397589f4d1bafd2ce5c74d470bd7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (745625797, 'Melissas Dried New Mexico Chile 8 Oz', 3.64, '045255114836', 'short description is not available', 'Melissas Dried New Mexico Chile 8 Oz', 'Melissa\'s', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (745667830, '192pc On Swt 3# Ga', 572.16, '405555069401', 'short description is not available', '192pc On Swt 3# Ga', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (745730563, 'Plenty Sweet Sunrise Greens and Herbs Salad Blend, 4 oz Clam Shell, Fresh', 2.48, '810567030514', 'short description is not available', 'Plenty Sweet Sunrise Salad 4oz', 'PLENTY', 'https://i5.walmartimages.com/asr/fa482652-79e7-42b7-a0b5-32b243c43d2f.47ffa078b8a8eec126af11de3f6c6cee.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa482652-79e7-42b7-a0b5-32b243c43d2f.47ffa078b8a8eec126af11de3f6c6cee.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa482652-79e7-42b7-a0b5-32b243c43d2f.47ffa078b8a8eec126af11de3f6c6cee.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (746664021, 'Sweet Onions, 4 Lb.', 4.68, 'deleted_091434001329', 'Sweet Onions Whole Bag', 'Vidalia Onions 4 Lb Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/cab91a7a-6882-4a71-b043-07a628cd4f6c_1.c4a3e16ddcc2aa0babfc110ca7cd2e05.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cab91a7a-6882-4a71-b043-07a628cd4f6c_1.c4a3e16ddcc2aa0babfc110ca7cd2e05.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cab91a7a-6882-4a71-b043-07a628cd4f6c_1.c4a3e16ddcc2aa0babfc110ca7cd2e05.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (746704964, 'Marketside Chicken Nugget, Carrrot, Apple', 2.98, '859216007248', 'short description is not available', 'Marketside Chicken Nugget, Carrrot, Apple', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (747312032, 'Fresh Organic Roma Tomatoes, 1 lb Package', 2.36, '405744830706', 'Organic Grape Tomatoes are an exciting summer treat, and they\'re the perfect size for skewers, salads and roasting. These bite-sized grape tomatoes look and taste great. Grape tomatoes are a low-calorie treat that are also low in sodium and are a good source of fiber. Whether you are snacking or adding them to your favorite dish. their uses are almost limitless. Try these grape tomatoes with feta cheese, fresh dill and a drizzle of olive oil for a light and delicious Mediterranean treat. Or make a caprese salad with grape tomatoes, fresh basil, fresh mozzarella and balsamic vinegar. With 10-ounces of tomatoes in each package, you\'ll have plenty to make mouthwatering meals. Use your imagination to create delicious dishes with Organic Grape Tomatoes.', 'Organic Grape Tomatoes, 10 oz Package: Perfect size for skewers, salads and roasting Low-calorie, low in sodium, and a good source of fiber Pair with feta cheese, fresh dill, and a drizzle of olive oil for a Mediterranean dish Certified organic', 'Fresh Produce', 'https://i5.walmartimages.com/asr/eb0806e6-701a-435c-9172-99daede19227.47e8216fd6b38ea4fdbf0250bf52a6f4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eb0806e6-701a-435c-9172-99daede19227.47e8216fd6b38ea4fdbf0250bf52a6f4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eb0806e6-701a-435c-9172-99daede19227.47e8216fd6b38ea4fdbf0250bf52a6f4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (747397288, 'Yellow Flesh Peaches, per Pound', 1.58, '400094466995', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (747703350, 'LEMON 2# SK CA POUCH', 3.92, 'deleted_605049458425', 'Lemons are a kitchen essential, known for their bright yellow color and tangy, refreshing flavor. Perfect for cooking, baking, and beverages, they add a zesty touch to both sweet and savory dishes. Packed with vitamin C and natural antioxidants, lemons are not only delicious but also a nutritious choice for enhancing your meals and drinks with vibrant freshness. Available in a 2 lb bag.', 'Two pound pouch bag lemons.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bd8ccbd9-f056-4a8d-8c8e-2ac394f22f97.4b275a35b7dfe7d97c45f67052cac2e8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd8ccbd9-f056-4a8d-8c8e-2ac394f22f97.4b275a35b7dfe7d97c45f67052cac2e8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd8ccbd9-f056-4a8d-8c8e-2ac394f22f97.4b275a35b7dfe7d97c45f67052cac2e8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (747707629, '250pc Pto Idaho 8#', 1480, '405518780626', 'short description is not available', '250pc Pto Idaho 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (747944231, 'Seedless Green Grapes, 2 lb bag', 4.42, '', 'short description is not available', 'Green Grapes Seedless Bag, 2 lbs.', '', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (748219524, 'Fresh Whole White Mushrooms, Bulk', 0.87, '000000040853', 'Add flavor and texture to your meals with the White Mushrooms. This versatile ingredient is perfect for a variety of dishes, whether its for breakfast, lunch, or dinner. Mince some up and put them in your omelet with peppers and ham for a filling breakfast. Slice them and add them to a healthy salad for lunch or stuff them with cream cheese, parmesan, and sharp cheddar cheese for a delicious, mouthwatering meal. Fresh white mushrooms are an excellent source of riboflavin and are naturally fat-free, cholesterol-free, and are low in calories and sodium. Enjoy the delicious taste of White Mushrooms any way you prepare them.', 'Fresh Whole White Mushrooms, Bulk: Adds flavor and textures to your meals Great for breakfast, lunch, or dinner Mince them for an omelet, slice them for a salad, or stuff them with cheese Naturally fat-free and cholesterol-free Low in sodium and calories', 'Monterey Mushrooms', 'https://i5.walmartimages.com/asr/821caa43-bd35-4de4-a46b-be8e42009692.e72b294c8373e5c6f1c4770426c8ad13.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/821caa43-bd35-4de4-a46b-be8e42009692.e72b294c8373e5c6f1c4770426c8ad13.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/821caa43-bd35-4de4-a46b-be8e42009692.e72b294c8373e5c6f1c4770426c8ad13.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (748505017, 'Fresh Red Seedless Grapes', 1.88, 'deleted_841139100045', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (748615523, 'California Grown Peaches, per Pound', 1.58, '400094601105', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (750499074, 'Fresh Figs, 12 oz Package', 7.84, '898249002011', 'Enjoy the delicious sweetness of these Fresh Figs. These figs taste wonderful raw, but you could also use them in a wide variety of recipes. Use them to make a tasty fig jam that you can spread on toast or biscuits. Blend them with some honey to make a creamy smoothie for breakfast. If you\'re looking for something more on the savory side, try wrapping them in bacon for an appetizer that all your guests will love. For dessert, you could use them to make cookies, bars, and even ice cream. However you choose to prepare them, everyone is sure to enjoy the taste of these Fresh Figs.', 'Fresh Figs, 12 oz Clamshell Enjoy them fresh or use them in a variety of recipes Use to make fig jam or a creamy smoothie Wrap them in bacon for a crowd-pleasing appetizer Add to a fresh salad Make sweet cookies, bars, and even ice cream', 'Unbranded', 'https://i5.walmartimages.com/asr/803287b0-3d38-47e8-b840-6505c6844ebe.a297ca01b7f7d79491ac22d821a89af2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/803287b0-3d38-47e8-b840-6505c6844ebe.a297ca01b7f7d79491ac22d821a89af2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/803287b0-3d38-47e8-b840-6505c6844ebe.a297ca01b7f7d79491ac22d821a89af2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (751027624, 'California Grown Peaches, per Pound', 1.58, '400094861745', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (751078701, 'Sunny Sweet Pepper', 2.98, '846764008186', 'Sunny Sweet Pepper', 'Sunny Sweet Pepper', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (751556348, 'White Peach, Each', 2.36, 'deleted_683953002217', 'White Peaches, 2 Lb.', 'White Peaches, each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d7d2370e-3576-4d87-973a-0e2d361981d0_1.024d8850ba3392cdbbf0d9d598e593b2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d7d2370e-3576-4d87-973a-0e2d361981d0_1.024d8850ba3392cdbbf0d9d598e593b2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d7d2370e-3576-4d87-973a-0e2d361981d0_1.024d8850ba3392cdbbf0d9d598e593b2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (751690120, 'Premium Grape Tomato, 1.5 lb Package', 5.24, 'deleted_699058796920', 'Premium Grape Tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily complements your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Premium Grape Tomatoes are the perfect choice.', 'Premium Grape Tomato, 1.5 lb Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (752752485, 'Fresh Tomate Grape, 10oz Clamshell', 3.47, '882035500393', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious', 'NONBRANDED', 'https://i5.walmartimages.com/asr/5e2de05b-5da5-47c9-97f5-1b1815cddc76.be4860417f458f21738c485b78ceb74e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5e2de05b-5da5-47c9-97f5-1b1815cddc76.be4860417f458f21738c485b78ceb74e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5e2de05b-5da5-47c9-97f5-1b1815cddc76.be4860417f458f21738c485b78ceb74e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (752914255, 'Aerofarms Broccoli Microgreens Salad, 2 oz Clam Shell, Fresh', 3.98, '815063021257', 'Mighty and balanced, AeroFarms broccoli microgreens have earthy notes and a slightly sweet finish. Our Micro Broccoli falls in the forest green portion of the AeroFarms FlavorSpectrum™, representing a grassy and green flavor profile with earthy notes. Microgreens can contain considerably higher levels of vitamins and carotenoids—about 5X greater—than their mature plant counterparts, according to the United States Department of Agriculture. AeroFarms greens are grown with zero pesticides and are ready to enjoy right out of the container. Taste the AeroFarms difference - enjoy Micro Broccoli by adding a heaping handful to boost any meal including sandwiches, wraps, soups, salads, takeout, and more.', 'Bursting With Flavor No Pesticides Ever No Washing Needed', 'AeroFarms', 'https://i5.walmartimages.com/asr/23c01bf9-ce50-477d-ab3c-6d4e32723da7.4d87a6b8dc2fae86bda6802f1d5bd19a.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/23c01bf9-ce50-477d-ab3c-6d4e32723da7.4d87a6b8dc2fae86bda6802f1d5bd19a.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/23c01bf9-ce50-477d-ab3c-6d4e32723da7.4d87a6b8dc2fae86bda6802f1d5bd19a.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (753009255, 'Black Seedless Grapes, per lb', 3.54, 'deleted_895321002235', 'short description is not available', 'Black Seedless Grapes, per lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/4fcbb3e7-b768-4d3c-b48f-9584248da35b_2.3e21a00d3f31e2fc15c1caecf2329fe3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4fcbb3e7-b768-4d3c-b48f-9584248da35b_2.3e21a00d3f31e2fc15c1caecf2329fe3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4fcbb3e7-b768-4d3c-b48f-9584248da35b_2.3e21a00d3f31e2fc15c1caecf2329fe3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (753409267, 'Fresh Manzana (Apples) Jazz, 2lb', 4.97, '066022005355', 'Introducing Fresh Jazz apples, the perfect combination of sweet and tangy flavors! With a crisp texture and beautiful red and yellow coloration, these apples are a delicious treat for any occasion. They are easy to pack for a satisfying snack while on the go, or as an ingredient for baking your favorite desserts. Jazz apples are sure to become a household favorite for their exceptional taste and versatility. Order now and taste the difference!', 'Organic apples that are great for snack time or a side to a meal! Introducing Jazz apples, the perfect combination of sweet and tangy flavors! With a crisp texture and beautiful red and yellow coloration, these apples are a delicious treat for any occasion. They are easy to pack for a satisfying snack while on the go, or as an ingredient for baking your favorite desserts. Jazz apples are sure to become a household favorite for their exceptional taste and versatility. Order now and taste the difference! Adds flavor to a variety of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c078850a-6f0c-46cc-8b5f-2a1dec772192.ce6be4c8c366f70b2677796b16e3e009.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c078850a-6f0c-46cc-8b5f-2a1dec772192.ce6be4c8c366f70b2677796b16e3e009.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c078850a-6f0c-46cc-8b5f-2a1dec772192.ce6be4c8c366f70b2677796b16e3e009.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (753496165, 'MRS. WAGES ONE STEP COLESLAW, VINEGAR, DIY MIX, 12.7OZ', 3.22, '072058622183', 'Fresh, homemade coleslaw without the hassle! Simply pour Mrs. Wages 1 Step Coleslaw over shredded cabbage. With two mouth-watering flavors, your freshly-made coleslaw can be enjoyed as a side dish, sandwich topper or snack. We do the work. You take the credit.', 'DIY: Pour over fresh veggies No artificial flavor or preservatives You will need 1 14 to 16oz bag of coleslaw', 'Mrs. Wages', 'https://i5.walmartimages.com/asr/0e773270-bbb5-4595-a61e-241306f64b3f.cc3f5da72d188ee91c7e28219819897b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0e773270-bbb5-4595-a61e-241306f64b3f.cc3f5da72d188ee91c7e28219819897b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0e773270-bbb5-4595-a61e-241306f64b3f.cc3f5da72d188ee91c7e28219819897b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (753652402, 'Organic Red Potatoes, 3 Lb.', 6.48, 'deleted_095829400018', 'Organic Red Potatoes, 3 Lb.', 'Organic Red Potatoes 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (753742607, 'Fresh Black Seedless Grapes', 2.78, '', 'Fresh Black Seedless Grapes', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/4078821a-06db-4c51-a6ac-be885c9746bd_2.d25f54da1fb5322cdad12da5d65a8d99.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4078821a-06db-4c51-a6ac-be885c9746bd_2.d25f54da1fb5322cdad12da5d65a8d99.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4078821a-06db-4c51-a6ac-be885c9746bd_2.d25f54da1fb5322cdad12da5d65a8d99.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (754113136, 'Mann\'s Fresh Cauliflower Veggie Sides, 8.8 oz', 4.47, '716519009822', 'Elevate mealtime with the Mann\'s Cauliflower Veggie Sides. Made with a parmesan peppercorn sauce, this side of veggies is a perfect addition to your meals. Pair them with a perfectly cooked steak and potatoes for a delicious meal that will have you feeling like you dined at the best steakhouse in town. You can also serve them with grilled chicken, rolls, and sweet potatoes for a well-rounded dinner your friends and family is sure to love. In just three minutes, you can be enjoying the delicious taste of this cauliflower. Simply place the bag in the microwave, microwave on high for three minutes, stir until combined, and enjoy. Complete your meals with the Mann\'s Cauliflower Veggie Sides.', 'Cauliflower with a parmesan peppercorn sauce Pair with steak and potatoes for a mouthwatering meal Serve with grilled chicken, rolls, and sweet potatoes for a well-rounded meal Ready in just 3 minutes Perfect addition to your meals', 'Mann\'s', 'https://i5.walmartimages.com/asr/3a89e52a-d9e6-4a9e-9316-d4dc45ccc866.90604e0371f93fdc4381dffaaa96872c.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3a89e52a-d9e6-4a9e-9316-d4dc45ccc866.90604e0371f93fdc4381dffaaa96872c.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3a89e52a-d9e6-4a9e-9316-d4dc45ccc866.90604e0371f93fdc4381dffaaa96872c.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (754214482, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094275023', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (754471518, 'Fieldpack Unbranded Bagged Poblano Pepper', 2.64, 'deleted_823874000903', 'Enjoy the fresh and delicious flavor of Poblano Peppers. Poblano peppers are known for their mild heat and rich flavor. Best of all this versatile pepper can be used in a myriad of recipes. Use them to make delicious Mexican inspired recipes like chile relleno. Stuff some with sausage, rice and spices to make a hearty, healthy and delicious dinner. Pan roast some with your favorite cheese and herbs for a yummy side, add them to your hearty chili recipes or turn some into a wonderful autumn soup. Any way you slice, dice, or cook them, Poblano Peppers are a refreshing, healthy addition to any meal.', 'Poblano Peppers, 16 oz: Includes 1 lb of poblano peppers Known for their mild heat and rich flavor Versatile pepper can be used in a myriad of recipes Use them to make delicious Mexican inspired recipes like chile relleno Stuff some with sausage, rice and spices to make a hearty, healthy and delicious dinner Create a variety of yummy recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/59bf999a-1f85-49ad-952e-088efaefb6a2_1.12cf264a49dd7b491c6e300309dc5f10.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59bf999a-1f85-49ad-952e-088efaefb6a2_1.12cf264a49dd7b491c6e300309dc5f10.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59bf999a-1f85-49ad-952e-088efaefb6a2_1.12cf264a49dd7b491c6e300309dc5f10.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (754553336, 'Aprium, 1 lb Pack', 4.88, '896460002919', 'Treat everyone to the sweet taste of Fresh Grown Apriums. Part apricot and part plum, this fruit is great to hand out to the kids as a tasty after-school snack. Add these apriums to a fruit salad to serve at your next party or to a delectable salad as a sweet topping. Serve them with cheese, salami, and almonds for a wonderful picnic cheese plate. You could also slice them to top your yogurt and granola for a healthy breakfast, or even make a tasty aprium crumble dessert for your next dinner party. The culinary opportunities are endless with Fresh Grown Apriums.', 'Fresh Grown Apriums, 16 oz: Part apricot and part plum Sweet and juicy Subtle sweetness and faint tartness Hand out to the kids as a tasty after-school snack Use to make a delicious fruit salad Slice and use to top your yogurt and granola for a healthy breakfast', 'Fresh Produce', 'https://i5.walmartimages.com/asr/476b1382-b89f-4580-998f-56a281642478.f35436b1ae3df515ddec10b1b1cd592a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/476b1382-b89f-4580-998f-56a281642478.f35436b1ae3df515ddec10b1b1cd592a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/476b1382-b89f-4580-998f-56a281642478.f35436b1ae3df515ddec10b1b1cd592a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (754693566, 'Cucumber', 0.68, 'deleted_819800010375', 'short description is not available', 'Cucumber', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (754746628, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094814888', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (754766243, 'Butternut Squash', 1.18, 'deleted_823298000466', 'short description is not available', 'Butternut Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/c732818d-323f-4425-bbb2-423e1402edba.a2ff79aa40bcd1e93ba637196c590a55.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c732818d-323f-4425-bbb2-423e1402edba.a2ff79aa40bcd1e93ba637196c590a55.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c732818d-323f-4425-bbb2-423e1402edba.a2ff79aa40bcd1e93ba637196c590a55.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (754837432, 'Fresh Yeong Suks Wakame Salad, 12 oz Jar', 6.28, '633750628660', 'Yeong Suks Wakame Salad 12-ounce jar is a treasure trove of taste and texture. Its secret? Responsibly harvested wakame seaweed, married to a dressing that hits all the right notes. Dive into a world of wellness as Yeong Suks spotlights its nutritional prowess, catering to diverse diets while making mealtime magic. The jar isn\'t just about the salad - it\'s a sleek testament to the essence of gourmet greens.', 'Premium Wakame: Sustainably sourced, top-quality wakame seaweed Exquisite Dressing: Perfectly balanced, enhancing the salad\'s flavors Diet-Friendly: Versatile for various dietary preferences and needs', 'YEONG SUKS', 'https://i5.walmartimages.com/asr/329fc9e0-96ab-4488-a586-42e3d249395d.150b7075a8757102d3d0d86f09b7a73e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/329fc9e0-96ab-4488-a586-42e3d249395d.150b7075a8757102d3d0d86f09b7a73e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/329fc9e0-96ab-4488-a586-42e3d249395d.150b7075a8757102d3d0d86f09b7a73e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (755693559, 'Fresh Grape Tomato, 1 pt.', 3.97, '850019660104', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Great in salads, pastas, salsas and sauces Sweet, juicy flavor in each bite Thick skin Low water content and a long shelf-life Low in calories and are a good source of fiber Contain vitamins A and C, lycopene and other vitamins and minerals Wholesome, versatile, and delicious Delicious and nutritious', 'Hypermart', 'https://i5.walmartimages.com/asr/e008c0d6-bdbb-4438-9aae-062f383302ef.089b46b9d850dd54b5ed6248634f1ecb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e008c0d6-bdbb-4438-9aae-062f383302ef.089b46b9d850dd54b5ed6248634f1ecb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e008c0d6-bdbb-4438-9aae-062f383302ef.089b46b9d850dd54b5ed6248634f1ecb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (756467066, 'Marketside Sugar Snap Peas 16oz', 5.98, '', 'short description is not available', 'Marketside Sugar Snap Peas 16oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (756918503, 'Services Reduced Program Dept 94', 0.01, '251697000006', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (756932528, 'Organic Petite Medley Potatoes', 3.97, '629307123658', 'Savor the rich taste of Organic Creamer Variety Potatoes! Our 1.5 Lb. bag features a delightful mix of tender, bite-sized creamer potatoes, carefully selected for their exceptional flavor and texture. Grown using organic farming practices, these versatile potatoes are perfect for roasting, boiling, or sautéing. Packed with nutrients and free from harmful chemicals, our Organic Creamer Variety Potatoes promise a wholesome, delicious addition to your favorite meals.', 'Organic Creamer Variety Potatoes Savor the rich taste of Organic Creamer Variety Potatoes! Our 1.5 Lb. bag features a delightful mix of tender, bite-sized creamer potatoes, carefully selected for their exceptional flavor and texture. Grown using organic farming practices, these versatile potatoes are perfect for roasting, boiling, or sautéing. Packed with nutrients and free from harmful chemicals, our Organic Creamer Variety Potatoes promise a wholesome, delicious addition to your favorite meals.', 'Unbranded', 'https://i5.walmartimages.com/asr/b74fdffe-f0a9-4d38-878f-a560bbe58a2b.302afc35ee8c34b9797ae4075916689e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b74fdffe-f0a9-4d38-878f-a560bbe58a2b.302afc35ee8c34b9797ae4075916689e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b74fdffe-f0a9-4d38-878f-a560bbe58a2b.302afc35ee8c34b9797ae4075916689e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (756977948, 'Butternut Squash', 1.18, '850002526301', 'Butternut Squash', 'Butternut Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (757469789, 'Microwave in Bag Red Potatoes, 1 Each', 2.97, '834344001313', 'Microwave in Bag Red Potatoes, 1 Each', '1 Lb. Microwave In Bag Red Potatoes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8754636d-5b91-4bca-bf58-5049b90aed6d.a8ea8f2b13279556fc80d8f233a82272.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8754636d-5b91-4bca-bf58-5049b90aed6d.a8ea8f2b13279556fc80d8f233a82272.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8754636d-5b91-4bca-bf58-5049b90aed6d.a8ea8f2b13279556fc80d8f233a82272.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (758733837, 'Watermelon Seedless', 4.48, '400094407653', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (758884830, 'Robinson Fresh Yellow Onions 3 Lb Bag', 1.88, 'deleted_095829601002', 'Yellow Onions 3 lb Bag', 'Fresh Yellow Onions 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7591f63b-b709-4256-b54a-ce271957da33_1.6ba08bcc08bc66d5e400088956812122.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7591f63b-b709-4256-b54a-ce271957da33_1.6ba08bcc08bc66d5e400088956812122.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7591f63b-b709-4256-b54a-ce271957da33_1.6ba08bcc08bc66d5e400088956812122.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (759012200, 'Chayote Squash', 1.04, 'deleted_045255179743', 'Chayote Squash', 'Chayote Squash A member of the gourd family, this versatile produce item from Mexico is quickly becoming a produce department standard. Roughly pear-sized in shape and light apple-green in color, Chayote Squash has a smooth skin with slight ridges running from stem to end. The average Chayote weighs about 1/2 pound and measures approximately 5 inches in length. Though similar to summer squash, Chayote usually requires a longer cooking time because of its firmer texture. Chayote makes a wonderful addition to soups or stir-fries and may be sliced or chopped and used raw like a cucumber. The seeds are also edible. Store Chayote Squash at 45°-50°F. At home, Chayote Squash stays freshest lightly wrapped and refrigerated for up to one week. No need to peel before using.', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/959afd12-4158-4bc9-af71-d08e3132768c_1.fd677f077b9cc5f60bc00f20baac6d04.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/959afd12-4158-4bc9-af71-d08e3132768c_1.fd677f077b9cc5f60bc00f20baac6d04.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/959afd12-4158-4bc9-af71-d08e3132768c_1.fd677f077b9cc5f60bc00f20baac6d04.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (759083105, 'Grimmway Farms Cal Organic Farms Radishes, 1 ea', 1.24, 'deleted_033383904139', '', '', 'CAL-ORGANIC', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (759319325, 'Fresh Green Seedless Grapes', 2.28, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (759487618, 'Field Roast Apple & Maple Plant-Based Breakfast Sausage', 4.98, '638031611805', 'Bring a hit of sweet and savory indulgence to your plant-based breakfast with Field Roast Apple & Maple Plant-Based Breakfast Sausage. Perfect as a side for pancakes or chopped up in breakfast burritos and quiches, these fully cooked vegan sausages deliver a satisfying taste and texture as a breakfast protein alternative. Simply brown the meatless sausages in a sauté pan to bring the welcoming flavors of apple, maple syrup, and nutmeg to your favorite morning dishes. Since 1997, the Field Roast brand has crafted plant-based meats and cheeses from grains, fresh-cut vegetables, herbs, and spices, honoring our culinary roots to create authentic sensory experiences people crave.', 'FULLY COOKED VEGAN BREAKFAST SAUSAGES: A satisfying meat alternative for plant-based meals SWEET AND SAVORY: The classic breakfast flavors of apple, maple syrup, and nutmeg QUICK PREPARATION: Simply brown the sausage in a pan with some oil or break apart to use in scrambles, breakfast burritos, and more CERTIFIED VEGAN AND NON-GMO: Non-GMO Project Verified and Certified Vegan for delicious taste and texture without the guilt FOR ALL THE FLAVOR TRAILBLAZERS: Dedicated to crafting bold flavor profiles, Field Roast brand transforms everyday meals into seriously delicious creations', 'Field Roast', 'https://i5.walmartimages.com/asr/326159d5-f18f-4d15-82e5-1306c9d88e44.5c854c85ece77befdda56a69eb33d95e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/326159d5-f18f-4d15-82e5-1306c9d88e44.5c854c85ece77befdda56a69eb33d95e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/326159d5-f18f-4d15-82e5-1306c9d88e44.5c854c85ece77befdda56a69eb33d95e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (759551820, '75pc Pto Rst 10# Wa', 340.5, '405500365459', 'short description is not available', '75pc Pto Rst 10# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (759599285, 'Large Avocado 3 Count Bag', 3.98, '', 'short description is not available', 'Large Avocado 3 Count Bag', 'Walmart', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (760283165, '200pc Pto Red 5# Wd', 794, '405509123043', 'short description is not available', '200pc Pto Red 5# Wd', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (760372407, 'Multi-Color Onions, 3 Count', 1.88, '661061000516', 'Multi-Color Onions, 3 Count', 'Multi-color Onions 3 Ct Sleeve', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (760647194, '500lb Cabbage Green', 340, '405794521661', 'short description is not available', '500lb Cabbage Green', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (760719302, 'Freshness Guaranteed Seasonal Fruit Blend 16 oz', 7.97, 'deleted_681131037228', 'short description is not available', 'Freshness Guaranteed Seasonal Fruit Blend 16 oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (761180357, 'Yellow Flesh Peaches, per Pound', 1.58, '400094845332', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (761338066, 'Anjou Pears Organic Bag, 3lb', 4.97, '888289402384', 'Treat your family to the amazing taste of Anjou Pears. Tantalizingly crisp, these pears are deliciously sweet and juicy. These are excellent snacking pears, but you can also use them in a variety of recipes. For breakfast, use these pears to make a rich and creamy yogurt parfait or a nutritious juice blend. Slice these pears and use them to add flavor and crunch to a lunchtime salad or spread peanut butter on them for a protein-filled snack', 'Anjou Pears Organic,3lb Bag:•Thin skin•Juicy pulp and sweet flavor•It\'s a good source of fiber•Add to your salad for extra crunch & flavor•Excellent snacking pear', 'Chelan Fresh', 'https://i5.walmartimages.com/asr/ce722610-ff85-4c95-b51b-0a086d8278f4.fd0731c0af9bfed9a032bb20826bce6e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce722610-ff85-4c95-b51b-0a086d8278f4.fd0731c0af9bfed9a032bb20826bce6e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce722610-ff85-4c95-b51b-0a086d8278f4.fd0731c0af9bfed9a032bb20826bce6e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (761384587, 'Fresh California Grown Red Grapes', 1.98, '', 'short description is not available', 'Fresh California Grown Red Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/fa0e6c66-3537-4064-b657-b55eae926823_2.4b69a4add94048ac4b50517cc7afdd69.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa0e6c66-3537-4064-b657-b55eae926823_2.4b69a4add94048ac4b50517cc7afdd69.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fa0e6c66-3537-4064-b657-b55eae926823_2.4b69a4add94048ac4b50517cc7afdd69.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (761972830, 'Watermelon Seedless', 4.48, '405504821814', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (762431649, 'Yellow Flesh Peaches, per Pound', 1.58, '400094918708', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (762731355, 'Gourmet212 Ricotta and Black Olive Cherry Peppers 10.5oz (12 Pack), Glass, Jarred, Fresh', 112.95, '191822004243', 'Ricotta and black olive stuffed cherry peppers are coming to be the jewel in the crown on your tables! This delicious and as well different food will amaze you the first moment you taste the savory pepper, cheese, and black olives blend. You can consume those pepper on your breakfast tables, as garniture with your dishes, or as great mezzes with your beverages. We use delicious cherry peppers to fill up with our premium recipe of cream cheese and ricotta feta cheese mix. At Gourmet 212, we add flavor to your tables by carefully filling the cut peppers with Ricotta cheese and our specially prepared naturally fermented black olive blend. You will love this wonderful combination of cheese olive and cherry pepper. Ricotta Cheese & Olive Filled Cherry Pepper will be one of the sought-after flavors of your kitchens. Consume within 5 days after opening the package and conserve it at dry and cool places. It is ready to eat whenever you want with its practical small jar. What can you expect more to buy it?', 'Gourmet212 Ricotta and Black Olive Stuffed Cherry Peppers 10.5oz (12 Pack), Fresh, Glass, Jarred. This delicious Ricotta and Black Olive with different food will amaze you the first moment you taste the pepper, cheese, and black olives blend. You can consume these pepper on your breakfast tables, as garniture with your dishes, or as great messes with your beverages. Ricotta Cheese & Olive Filled Cherry Pepper will be one of the sought-after flavors of your kitchens. Consume within five days after opening the package and conserve it at dry and cool places.', 'Gourmet212', 'https://i5.walmartimages.com/asr/524089fd-170b-409e-8cbd-a1fad184578f.2cfbb7e2731cd92ff6c9958c829da7a6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/524089fd-170b-409e-8cbd-a1fad184578f.2cfbb7e2731cd92ff6c9958c829da7a6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/524089fd-170b-409e-8cbd-a1fad184578f.2cfbb7e2731cd92ff6c9958c829da7a6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (762828327, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_405507137073', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (763544221, 'Organic Ginger, 1 Lb.', 1.8, '045255244878', 'Organic Ginger, 1 Lb.', 'Organic Ginger', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (763653464, 'GoodHealthy Organic Spicy Crunch Blend 3 oz', 3.48, '856642007415', 'GoodHealthy Organic Spicy Crunch Blend is the perfect mix of nutrient-packed arugula and zesty radishes. A good source of calcium, this peppery blend is perfect in salads, soups, and sandwiches. Spice up your lunch with Spicy Crunch! At GoodHealthy, we’re changing the way you think about farming! Every seed we plant is nurtured in organic soil, rich in nutrients, and cared for by our sustainable SmartFarm technology. Grown locally 365 days a year, our AI-driven farms are turning less into more; using less water, less land, and less energy to produce more of the farm-fresh organic veggies you love! Going beyond organic, our regenerative greenhouses restore nutrients to the soil with every harvest, reducing our carbon footprint and supporting the local environment. Making the world GoodHealthy, one plant at a time!', 'GoodHealthy Organic Spicy Crunch Blend 3 oz', 'Good Healthy', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (764030139, 'Freshness Guaranteed Fresh Black Seedless Grapes', 2.28, '', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (764099685, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094208861', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (764133838, 'Marketside Cauliflower and Colored Carrot Blend, 12oz', 2.98, '681131221795', 'Add fresh and ready to eat vegetables to your meal with Marketside Cauliflower and Colored Carrot Blend. These veggies are a great source of calcium, potassium, and dietary fiber. Marketside Cauliflower and Colored Carrots are a quick and healthy side dish and a great addition to any meal. Marketside Cauliflower and Colored Carrots are packed fresh, washed and ready to eat for your convenience. They have a delicious crisp texture and a vibrant color that is sure to add a pop to all your dishes. Enjoy them as a healthy side or use them in all your favorite recipes. Eat them raw with some dip or roast in the oven for a fresh twist on the usual roasted veggies. Steam and season them with salt, pepper and butter and serve with grilled chicken breast, grilled squash and bread for a filling dinner. Snacking is made healthy with Marketside Cauliflower and Colored Carrot Blend. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Cauliflower and Colored Carrot Blend, 12 oz: Washed and ready to eat Great addition to any meal Healthy side Net weight 12 oz', 'Marketside', 'https://i5.walmartimages.com/asr/70030b03-37e4-49a7-8184-dd2ee3fc2bb0_2.4f8cdbdabdfa14357a646fbe490cd25d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/70030b03-37e4-49a7-8184-dd2ee3fc2bb0_2.4f8cdbdabdfa14357a646fbe490cd25d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/70030b03-37e4-49a7-8184-dd2ee3fc2bb0_2.4f8cdbdabdfa14357a646fbe490cd25d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (764462009, 'Green Bell Pepper', 0.76, '708789000012', 'Green Bell Pepper', 'Green Bell Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (764898117, 'Red Seedless Grapes, per lb', 2.88, 'deleted_066022040233', 'short description is not available', 'Red Seedless Grapes, per lb', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (765459991, '125pc Pto Rst 15# Wa', 640, '405530584608', 'short description is not available', '125pc Pto Rst 15# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (765715972, 'Organic Whole Carrots, 1 Lb.', 1.16, 'deleted_085497964004', 'Organic Whole Carrots, 1 Lb.', 'Organic Whole Carrots 1 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (765724019, 'Mns Veg Medley', 5.98, 'deleted_716519020155', 'short description is not available', 'Mns Veg Medley', 'Mann\'s', 'https://i5.walmartimages.com/asr/e668ead3-2541-4cfd-b080-aa0c93413a6d.aeb2cdc0a05707e5e65031e48426cda3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e668ead3-2541-4cfd-b080-aa0c93413a6d.aeb2cdc0a05707e5e65031e48426cda3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e668ead3-2541-4cfd-b080-aa0c93413a6d.aeb2cdc0a05707e5e65031e48426cda3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (765817999, 'Steamables Sweet Potatoes 1.5 Lb Bag', 3.38, 'deleted_757404000067', 'short description is not available', 'Steamables Sweet Potatoes 1.5 Lb Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (765866209, 'Services Reduced Program Dept 94', 0.01, '251683000003', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (765980098, 'White Onions, 2 Lb.', 2.54, 'deleted_033383603032', 'White Onions, 2 Lb.', 'White Onions 2 Lb Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (766429870, 'Organic Green Beans 12 Oz', 3.98, 'deleted_854026006337', 'short description is not available', 'Organic Green Beans 12 Oz', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (767358819, '225pc On Tx1015 3#', 923, '405515745062', 'short description is not available', '225pc On Tx1015 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (767403267, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094005798', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (767417176, 'Marketside Beyond Zero Pesticides Baby Arugula, 4 oz Clam Shell, Fresh', 3.73, '194346001446', 'Enjoy the fresh flavor of Marketside Beyond Baby Arugula. These greens are indoor and vertically grown for peak-season freshness all year long. Indoor vertical farms are a controlled growing environment giving each plant the optimal amount of light and nutrients for fresh and flavorful produce any time of the year. Farming vertically means our produce can be grown using significantly less water and land than traditional outdoor farms. Create something delicious with Marketside Beyond Baby Arugula. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Beyond Baby Arugula, 4 oz: Fresh and flavorful baby arugula Indoor and vertically grown for peak-season freshness all year long No pesticides, herbicides or fungicides applied to our greens Convenient peel and reseal packaging Keep refrigerated until ready to enjoy', 'Marketside Beyond', 'https://i5.walmartimages.com/asr/a4ccd1ce-4e8f-46e8-b1b6-1a8bc1b1099a.2516732c8b32472df828b24a6de85b86.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a4ccd1ce-4e8f-46e8-b1b6-1a8bc1b1099a.2516732c8b32472df828b24a6de85b86.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a4ccd1ce-4e8f-46e8-b1b6-1a8bc1b1099a.2516732c8b32472df828b24a6de85b86.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (767434809, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094345658', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (767545262, 'Jumbo Russet Potatoes 8 Lb Bag', 4.97, '856417005332', 'short description is not available', 'Jumbo Russet Potatoes 8 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (767702436, 'Little Leaf Farms Baby Spring Mix Salad Blend, 4 oz, Fresh', 2.98, '857394006121', 'Little Leaf Farms Baby Spring Mix combines our signature crispy green leaf with the peppery additions of arugula and mizuna to take your salad to the next level. Our deliciously crisp, wonderfully fresh, and uniquely long-lasting greens are grown in a state-of-the-art, sustainable greenhouse that harnesses sunlight and fresh rainwater. With an a fully automated, hands-free growing process to seeding to packaging, there’s no need to wash. Just open the container and enjoy!', 'Cultivated in controlled greenhouse environments to maintain optimal growing conditions and superior taste Convenient pre-mixed greens for quick meal preparation Pesticide, Herbicide, and Fungicide Free Non GMO- Naturally cultivated without genetic modification Versatile for salads, sandwiches, wraps, and more Distinctive flavor profile enhanced by peppery arugula and mizuna', 'Little Leaf Farms', 'https://i5.walmartimages.com/asr/577cf0f5-9271-4a34-bec8-17461dd38ec3.857e4547e4575395af9385c58e162d02.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/577cf0f5-9271-4a34-bec8-17461dd38ec3.857e4547e4575395af9385c58e162d02.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/577cf0f5-9271-4a34-bec8-17461dd38ec3.857e4547e4575395af9385c58e162d02.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (767858113, 'Freshness Guaranteed Cantaloupe Small', 4.67, '262817000004', 'Enjoy the sweet, refreshing taste of Freshness Guaranteed Cantaloupe Chunks. This pre-cut cantaloupe is great for breakfast, lunch, dessert, or when you want a snack. You can eat them right out of the container, use them to infuse water for a refreshing drink. This cantaloupe is great for sharing with friends and family or keeping it for yourself. It comes in a reclosable container to help maintain freshness. Bring home Freshness Guaranteed Cantaloupe Chunks today for a refreshing, healthy treat.Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Cantaloupe Small Contains Cantaloupe Packed in a secure plastic bowl with lid Portable and convenient Provides many essential nutrients', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (767905460, 'Fresh Long Stem Strawberries, 1 lb Container', 7.48, '852298002071', 'The sweet, juicy flavor of Fresh Long Stem Strawberries make them a refreshing and delicious treat. These strawberries are larger than normal strawberries, making them perfect for dipping in chocolate. Decorate them with white-chocolate drizzle, crushed nuts, chocolate sprinkles for a special touch. They contain essential vitamins and nutrients like vitamin C, dietary fiber, potassium, vitamin B and magnesium, making them perfect for a healthy diet. Prior to serving simply gently wash the strawberry, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Long Stem Strawberries today and savor the delectable flavor.', 'Fresh Long Stem Strawberries, 1 lb: Larger than normal strawberries Prior to serving gently wash the strawberries and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Decorate with chocolate to serve on their own, or top strawberry desserts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/36c5ea4c-2c0d-4d7c-ba6d-ed84b37385ea_1.7a6295c6421572ca726dfc0c34f838dd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/36c5ea4c-2c0d-4d7c-ba6d-ed84b37385ea_1.7a6295c6421572ca726dfc0c34f838dd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/36c5ea4c-2c0d-4d7c-ba6d-ed84b37385ea_1.7a6295c6421572ca726dfc0c34f838dd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (768025137, 'Yellow Flesh Peaches, per Pound', 1.58, '400094845547', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (768110923, 'Watermelon Seedless', 4.48, '400094974780', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (768410352, 'Watermelon Seedless', 4.98, '400094437186', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (768431178, 'Yellow Flesh Peaches, per Pound', 1.58, '400094562000', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (769249415, 'Blaze Bumpy Pumpkins', 2.48, '850781007503', 'short description is not available', 'Blaze Bumpy Pumpkins', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (769307402, '(6 pack) (6 Pack) CIRIO Cherry Tomatoes, 14 Oz', 8.88, '822356000219', 'Irresistibly sweet and intense in flavor, Cirio Cherry Tomatoes are aromatic and distinctive. Ripened in the hot and dry climate of?Southern Italy, the tomatoes are picked and canned in a rich tomato juice to preserve their natural and unmistakable taste.', 'CIRIO Cherry Tomatoes, 14 Oz', 'Cirio', 'https://i5.walmartimages.com/asr/19063834-115b-4e9a-8e07-2010b5409921_1.286fe5a57a188a27f9b8bde7627d26e4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19063834-115b-4e9a-8e07-2010b5409921_1.286fe5a57a188a27f9b8bde7627d26e4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19063834-115b-4e9a-8e07-2010b5409921_1.286fe5a57a188a27f9b8bde7627d26e4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (769447579, 'Fresh Black Seedless Grapes', 1.88, 'deleted_855199008425', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (769945528, 'Fresh Rave Apples, Each', 1.1, '000000034876', 'Fresh Rave Apples are the perfect combination of sweet and tart in every bite. These crisp and juicy apples are hand-picked at the peak of ripeness to ensure maximum flavor and quality. With their vibrant red and green skin, Fresh Rave Apples are sure to stand out in any fruit bowl. Whether you enjoy them as a snack or use them in your favorite recipes, Fresh Rave Apples are a delicious and healthy choice.', 'Rave Apples are a premium fresh apple variety that will take your taste buds on an adventure. Each Rave Apple is medium to large in size, with a round shape and a bright red color that fades into a green-yellow background. The flesh of the Rave Apple is crisp, juicy and has an explosively sweet and tangy flavor that will make your taste buds dance. This apple variety is perfect for snacking, but also holds up well in cooking and baking, maintaining its shape and flavor. Rave Apples are a good source of fiber, vitamin C, and antioxidants, and can be enjoyed as a healthy and flavorful addition to any meal or snack. With their distinctive taste and appearance, Rave Apples are a premium choice for apple lovers and foodies who are looking for something unique and delicious.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3ea73f13-2671-4bb5-96ab-48bbd330ebd8_1.d78156982aa3ed7728f6243858567a26.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3ea73f13-2671-4bb5-96ab-48bbd330ebd8_1.d78156982aa3ed7728f6243858567a26.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3ea73f13-2671-4bb5-96ab-48bbd330ebd8_1.d78156982aa3ed7728f6243858567a26.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (770059776, 'Yellow Flesh Peaches, per Pound', 1.58, '400094219430', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (770268499, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094601624', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (770489489, 'Fresh Blood Oranges, 2 lb Bag', 3.93, 'deleted_092148219642', 'Enjoy the fresh sweetness of Blood Oranges. These crimson-fleshed oranges have a tangy and sweet flavor with hints of berry. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite adult beverage. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Blood Oranges add flavor to any meal or beverage.', 'Fresh Blood Oranges, 2 lb Bag Great source of vitamin C Crimson-fleshed citrus fruit have a tangy and sweet flavor with a hint of berry Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes Use as a garnish for your favorite adult beverage Make sweet desserts like ambrosia, orange bars, and orange pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/aefd395d-cef4-4601-a3f1-54791e11f517.998b17436f0c6a1f49c0c02872508fa3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aefd395d-cef4-4601-a3f1-54791e11f517.998b17436f0c6a1f49c0c02872508fa3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aefd395d-cef4-4601-a3f1-54791e11f517.998b17436f0c6a1f49c0c02872508fa3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (770549881, 'German Butterball Potato - 6 Tubers', 9.99, '811332033815', 'Butter-me-not! So versatile -- great for baking, frying, or mashing. 100 days. An heirloom russet with flavor so rich and sweet it would be a crime to smother it in butter, German Butterball is an all-around potato you can rely on as your \"main crop\" for great year-round eating. You will fall in love with the creamy-sweet flavor even before you appreciate the heavy yields and long storage ability of this favorite! German Butterball sets medium-sized oblong to round russets with yellow flesh, as if they\'d already been covered in melted butter. Resistant to disease and scab, these taters look as good as they taste, maturing late in potato season on plants that refuse to be confined to their allotted space, but wander gloriously instead! This plant grows tall, providing great shade protection for the potatoes with large, abundant foliage. Give it plenty of space (because it will take it even if you don\'t!) and let these flavor-filled roots mature slowly to perfection. You will absolutely love the flavor. German Butterball consistently wins taste tests, but it\'s also quite versatile, as happy being mashed as it is fried, baked, or boiled. Rely on it for homegrown potato goodness!', 'An heirloom russet with flavor so rich and sweet An all-around potato you can rely on as your \"main crop\" for great year-round eating Ideal for microwave, frying or baking Easy to grow, Prefers well drained soil, high in organic matter', 'Hirt\'s Gardens', 'https://i5.walmartimages.com/asr/de189a10-79a0-4ae6-bcb0-e5547928e635.e4e33ed66bb7a2e6a840ea9bc69e515f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/de189a10-79a0-4ae6-bcb0-e5547928e635.e4e33ed66bb7a2e6a840ea9bc69e515f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/de189a10-79a0-4ae6-bcb0-e5547928e635.e4e33ed66bb7a2e6a840ea9bc69e515f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (770585228, 'Sample-fire Roasted Fajita Minced Garlic', 0.01, '405965175532', 'short description is not available', 'Sample-fire Roasted Fajita Minced Garlic', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (771662322, 'Jumbo Idaho Potatoes, 8 Lb.', 6.42, 'deleted_405518790274', 'Jumbo Idaho Potatoes, 8 Lb.', 'Jumbo Idaho Potatoes 8 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (771743988, 'Melon De Agua', 0.68, '406515318560', 'short description is not available', 'Melon De Agua', 'Unbranded', 'https://i5.walmartimages.com/asr/17f2b97e-bb24-4ac3-9b1f-917d1c0e82aa.6235a9f9e6a5526f0e66e41a021ab694.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/17f2b97e-bb24-4ac3-9b1f-917d1c0e82aa.6235a9f9e6a5526f0e66e41a021ab694.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/17f2b97e-bb24-4ac3-9b1f-917d1c0e82aa.6235a9f9e6a5526f0e66e41a021ab694.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (772012362, 'Yellow Flesh Peaches, per Pound', 1.58, '400094943632', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (772055836, 'Fresh Red Seedless Grapes', 1.84, 'deleted_816426013735', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (772113550, 'Sweet Onions 3 Lb Bag', 6.28, '050269020844', 'short description is not available', 'Sweet Onions 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (772915658, 'Bowery Farming Bowery Salad Baby 4oz', 2.98, '851536007533', 'short description is not available', 'Bowery Farming Bowery Salad Baby 4oz', 'Bowery Farming', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (772971242, 'Tomato on the Vine, Bag', 1.97, 'deleted_626074777718', 'Keep your recipes simple and classic with fresh tomatoes on the vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, this fresh produce item is sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Walmart\'s Tomatoes On The Vine and keep your dishes looking great and tasting equally as excellent.', 'Tomato on the Vine, Bag: Wholesome, versatile, and delicious Ideal ingredient for a variety of dishes Make a zesty tomato sauce to go along with your favorite pasta Enjoy on their own as a nutritious snack Make a flavorful salsa or add some pop to your guacamole', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (772984012, 'Red Mangoes, 1 Each', 0.96, 'deleted_095829552601', 'Red Mangoes, 1 Each', 'Red Mango', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/3551451e-524a-4f56-a262-1e1ce32952b9_3.93435e5c6e53e40b32077d32027ab0a6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3551451e-524a-4f56-a262-1e1ce32952b9_3.93435e5c6e53e40b32077d32027ab0a6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3551451e-524a-4f56-a262-1e1ce32952b9_3.93435e5c6e53e40b32077d32027ab0a6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (774255117, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094170786', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (774344130, 'Fresh Hidroponico Del Pais Lechuga Oakleaf, Each', 2.97, '036446046128', 'Introducing Fresh Lechuga Oakleaf, an exquisite variety of lettuce that adds a touch of elegance and vibrant flavor to your salads and culinary creations. With its unique, oakleaf-shaped leaves in a beautiful mix of green and burgundy hues, this lettuce provides a delightful visual appeal and a tender, crisp texture. Grown with care and harvested at the peak of freshness, our Fresh Lechuga Oakleaf offers a subtle, sweet taste that pairs well with a variety of dressings and ingredients. Elevate your salads and dishes with the unmatched quality and flavor of Fresh Lechuga Oakleaf.', 'Introducing Fresh Lechuga Oakleaf, an exquisite variety of lettuce that adds a touch of elegance and vibrant flavor to your salads and culinary creations. With its unique, oakleaf-shaped leaves in a beautiful mix of green and burgundy hues, this lettuce provides a delightful visual appeal and a tender, crisp texture. Grown with care and harvested at the peak of freshness, our Fresh Lechuga Oakleaf offers a subtle, sweet taste that pairs well with a variety of dressings and ingredients. Elevate your salads and dishes with the unmatched quality and flavor of Fresh Lechuga Oakleaf.', 'Hidroponico Del Pais', 'https://i5.walmartimages.com/asr/101ee8c0-c31f-4276-a1bb-c3fdff231cc7.dfd17ee7600cb5750658e899daa79d84.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/101ee8c0-c31f-4276-a1bb-c3fdff231cc7.dfd17ee7600cb5750658e899daa79d84.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/101ee8c0-c31f-4276-a1bb-c3fdff231cc7.dfd17ee7600cb5750658e899daa79d84.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (774373437, 'Marketside Cauliflower Florets 12oz', 2.58, 'deleted_803944307118', 'short description is not available', 'Marketside Cauliflower Florets 12oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (774776781, 'Fresh Cara Cara Oranges, 3 lb Bag', 3.46, '605049366720', 'Enjoy the fresh sweetness of Oranges. These pink-fleshed oranges are very sweet and have a lower acidity than Navel oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite adult beverage. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Cara Cara Oranges add flavor to any meal or beverage.', 'Fresh Oranges, 3 lb Bag Great source of vitamin C Pink-fleshed citrus fruit with a very sweet flavor; low acidity', 'Unbranded', 'https://i5.walmartimages.com/asr/47d05605-2c2f-481f-9e4c-efe91f91983e.86520f5b60326d7316dfc033677d2190.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/47d05605-2c2f-481f-9e4c-efe91f91983e.86520f5b60326d7316dfc033677d2190.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/47d05605-2c2f-481f-9e4c-efe91f91983e.86520f5b60326d7316dfc033677d2190.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (774854012, 'Freshness Guaranteed Fruit Blend Medium', 6.4, '263033000007', 'Freshness Guaranteed Fruit Blend in plastic tray with lid. Has a delicious blend of mixed fruits ready to be opened and shared.', 'Freshness Guaranteed Fruit Blend Medium', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (774867150, 'Kanzi Apples 2 Lb Bag', 4.44, '847473005954', 'short description is not available', 'Kanzi Apples 2 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (775309833, 'Fuji Apples 5 Lb Bag', 4.97, 'deleted_080153541315', 'short description is not available', 'Fuji Apples 5 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (775660027, 'AVO BAG 48 10/5 MXMP', 3.28, 'deleted_761010147634', 'AVO BAG 48 10/5 MXMP', 'AVO BAG 48 10/5 MXMP', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (775672746, 'Whole Fresh Yellow Onions 3 lb Bag', 3.58, 'deleted_851343004183', 'Introducing our versatile and flavorful Yellow Onions 3 Lb Bag - a pantry staple for every home cook! Carefully selected for their firmness, golden-brown skin, and pungent aroma, these onions offer a delightful balance of sweetness and sharpness, making them the ideal ingredient for a wide range of dishes. With three full pounds of premium quality onions at your fingertips, you\'ll have ample supply for sautéing, caramelizing, or adding a savory crunch to your favorite recipes. Our Yellow Onions are packed with essential nutrients, antioxidants, and immune-boosting properties, providing both taste and nourishment in every bite. Elevate your culinary creations with the rich and aromatic flavor of our Yellow Onions 3 Lb Bag.', 'Yellow Onions 3 Lb Bag Introducing our versatile and flavorful Yellow Onions 3 Lb Bag - a pantry staple for every home cook! Carefully selected for their firmness, golden-brown skin, and pungent aroma, these onions offer a delightful balance of sweetness and sharpness, making them the ideal ingredient for a wide range of dishes. With three full pounds of premium quality onions at your fingertips, you\'ll have ample supply for sautéing, caramelizing, or adding a savory crunch to your favorite recipes. Our Yellow Onions are packed with essential nutrients, antioxidants, and immune-boosting properties, providing both taste and nourishment in every bite. Elevate your culinary creations with the rich and aromatic flavor of our Yellow Onions 3 Lb Bag.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (775731521, 'Services Reduced Program Dept 94', 0.03, '251993000007', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (775847707, 'Fieldpack Unbranded Fresh Strawberries 1#', 4.87, '405972859500', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/467b54d4-aead-4b0c-8d30-a48d49246a41.c242f6d596503380a853be10cb5d1539.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (776986623, '200pc Pto Idaho 5#', 794, '405540274865', 'short description is not available', '200pc Pto Idaho 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (777248779, 'Fresh Juici Apples, 2lb Bag', 3.43, '887434002707', 'JUICI™ apples feel heavy for their size and are known for their aqueous nature. The flesh also contains high sugar content with acidity, creating a balanced, sweet-tart flavor. The taste is initially sweet and tangy with a sharp but not overpowering zest, dissipating quickly to a pleasant, sweet aftertaste.', 'Fresh Juici Apple, Each: Sweet, crisp & juicy Mild lemon-citrus undertones Excellent snacking apple Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp & apple pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/06623c49-e563-406e-b174-6c0e9f3727cb.c6a0dad61c41442577550a28f570aaa6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/06623c49-e563-406e-b174-6c0e9f3727cb.c6a0dad61c41442577550a28f570aaa6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/06623c49-e563-406e-b174-6c0e9f3727cb.c6a0dad61c41442577550a28f570aaa6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (777720391, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094033814', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (777795624, 'Fresh Organic Whole Brown Mushrooms, 16 oz', 5.82, '682693675651', 'Experience the fresh taste of our Whole Organic Brown Mushrooms. Brown Mushrooms give you that same earthy taste you love about mushrooms but take it up a notch with their firm, meaty texture. Similar in size and shape to white mushrooms, Brown mushrooms are hardier and provide a deeper earthy taste. They\'re the same portabella mushrooms you\'ve enjoyed before - they\'ve just been harvested a few days earlier before becoming those large caps you\'ve seen in vegetarian and vegan cuisines. With their hearty, full-bodied taste, brown mushrooms are an excellent addition to beef, wild game, and vegetable dishes. Plus, these whole brown mushrooms are certified USDA Organic, making them a wholesome addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try out our Whole Organic Brown Mushrooms.', 'Fresh Whole Organic Brown Mushrooms, 16 oz tray: 16-ounce package of sliced white mushrooms USDA Organic Naturally fat free Cholesterol free Low in calories, carbs and sodium Fresh and all natural Pre-cleaned Natural source of the antioxidant selenium Excellent addition to beef, wild game and vegetable dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/11155007-676c-4e07-af46-111a1c9bf13a.9a8f907acdf6f9e60dfba72d86fa9402.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/11155007-676c-4e07-af46-111a1c9bf13a.9a8f907acdf6f9e60dfba72d86fa9402.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/11155007-676c-4e07-af46-111a1c9bf13a.9a8f907acdf6f9e60dfba72d86fa9402.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (777909175, 'Goya Yucca, 24 Ounce - 20 per case.', 161.54, '', 'YUCA 24 OZ', 'Brand: Goya Yuca Cassava 24 Ounce 20 per Case Fresh & Frozen Vegetables', 'GOYA', 'https://i5.walmartimages.com/asr/b8e60468-5938-4af7-b962-d8de786681eb.c2cbe69dd26d28129bcab7fa2094bab3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b8e60468-5938-4af7-b962-d8de786681eb.c2cbe69dd26d28129bcab7fa2094bab3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b8e60468-5938-4af7-b962-d8de786681eb.c2cbe69dd26d28129bcab7fa2094bab3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (778071569, 'Valencia Oranges, 4 Lb.', 6.14, 'deleted_014668120086', 'Valencia Oranges, 4 Lb.', 'Orange, Cello 4lb Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/d90980cb-6535-42c2-bde6-955882b7e0ba.84d22bed3b28de42352ad1c0f4f2d72f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d90980cb-6535-42c2-bde6-955882b7e0ba.84d22bed3b28de42352ad1c0f4f2d72f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d90980cb-6535-42c2-bde6-955882b7e0ba.84d22bed3b28de42352ad1c0f4f2d72f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (778379150, 'Dippin Stix Sweet Apple with Chocolate', 1.57, '649632001728', 'Discover the ultimate snacking delight with Dippin Stix Sweet Apple & Chocolate! This treat features crisp, juicy apple slices paired with a rich, velvety chocolate dip. Our apples are carefully selected for their natural sweetness, ensuring a delectable and satisfying bite every time. The smooth chocolate dip adds a luxurious touch, elevating your snacking experience. Perfect for on-the-go indulgence or a fun after-school snack, Dippin Stix guarantees a winning combination of flavors that will have you craving more.', 'Dippin Stix Sweet Apple/chocolate Discover the ultimate snacking delight with Dippin Stix Sweet Apple & Chocolate! This treat features crisp, juicy apple slices paired with a rich, velvety chocolate dip. Our apples are carefully selected for their natural sweetness, ensuring a delectable and satisfying bite every time. The smooth chocolate dip adds a luxurious touch, elevating your snacking experience. Perfect for on-the-go indulgence or a fun after-school snack, Dippin Stix guarantees a winning combination of flavors that will have you craving more.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/37b43501-b008-4feb-9e6c-e6dafec43102.1eefb36bbf12064f64fa5b7194c47d98.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/37b43501-b008-4feb-9e6c-e6dafec43102.1eefb36bbf12064f64fa5b7194c47d98.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/37b43501-b008-4feb-9e6c-e6dafec43102.1eefb36bbf12064f64fa5b7194c47d98.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (778440406, 'That\'s Tasty Organic Power Up Supergreens 4.5oz', 2.18, '768573710176', 'short description is not available', 'That\'s Tasty Organic Power Up Supergreens 4.5oz', 'That\'s Tasty', 'https://i5.walmartimages.com/asr/68f40bec-ffc2-40bb-94a2-4867e763218e.3e91053cd0939e0571a47b7cda715337.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68f40bec-ffc2-40bb-94a2-4867e763218e.3e91053cd0939e0571a47b7cda715337.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68f40bec-ffc2-40bb-94a2-4867e763218e.3e91053cd0939e0571a47b7cda715337.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (778592705, 'Fresh Organic Green Leaf, 1 Each', 1.96, '000000940764', 'Introducing Organic Green Leaf Lettuce, a nutritious and versatile addition to your kitchen. This single head of lettuce boasts lush, tender leaves packed with vitamins and minerals, making it a healthy choice for your salads, wraps, or sandwiches. Grown organically and sourced responsibly, our green leaf lettuce is free from harmful chemicals, ensuring a fresh and natural taste. Experience the crisp texture and delectable flavor of this wholesome, earth-friendly ingredient, elevating your meals to new heights of deliciousness.', 'Fresh Organic Green Leaf Lettuce Introducing Organic Green Leaf Lettuce, a nutritious and versatile addition to your kitchen. This single head of lettuce boasts lush, tender leaves packed with vitamins and minerals, making it a healthy choice for your salads, wraps, or sandwiches. Grown organically and sourced responsibly, our green leaf lettuce is free from harmful chemicals, ensuring a fresh and natural taste. Experience the crisp texture and delectable flavor of this wholesome, earth-friendly ingredient, elevating your meals to new heights of deliciousness.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a31c2f76-b5fa-44d6-b5b8-7c94ff293c0c.a1f1315d0954a885c4e0ea302bc547ed.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a31c2f76-b5fa-44d6-b5b8-7c94ff293c0c.a1f1315d0954a885c4e0ea302bc547ed.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a31c2f76-b5fa-44d6-b5b8-7c94ff293c0c.a1f1315d0954a885c4e0ea302bc547ed.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (778947127, 'Fieldpack Unbranded Bok Choy', 1.47, '885460000278', 'short description is not available', 'Fieldpack Unbranded Bok Choy', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/67a9298b-f558-4166-8375-fb985b585c86.7da2aa8ad2fda75b2fb9a2195d427213.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/67a9298b-f558-4166-8375-fb985b585c86.7da2aa8ad2fda75b2fb9a2195d427213.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/67a9298b-f558-4166-8375-fb985b585c86.7da2aa8ad2fda75b2fb9a2195d427213.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (779246410, 'California Grown Peaches, per Pound', 1.58, '400094006771', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (779280700, 'Lakeside Produce Lakeside Cucumbers, 6 ea', 2.5, '884051060011', 'Cucumbers, Mini Cukes 6 cucumbers Produce perfected. www.lakesideproduce.com. Product of Canada. 6 cucumbers Leamington, ON N8H 3V5', 'Cucumbers, Mini Cukes Produce perfected. www.lakesideproduce.com. Product of Canada.', 'Lakeside', 'https://i5.walmartimages.com/asr/21ee5e01-8204-40cc-ae09-72ef124ad851.6f316d4de463f95fe0741f142e1ae6dc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/21ee5e01-8204-40cc-ae09-72ef124ad851.6f316d4de463f95fe0741f142e1ae6dc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/21ee5e01-8204-40cc-ae09-72ef124ad851.6f316d4de463f95fe0741f142e1ae6dc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (779895464, 'California Grown Peaches, per Pound', 1.58, '400094987186', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (780743993, 'Fresh Grape Tomato, 10 oz Package', 1.98, 'deleted_814369011214', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Grape Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/181e4761-da8e-4fb2-98a2-3800ce8cba71.5ce881af59a551cf4241cb0b817c274a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/181e4761-da8e-4fb2-98a2-3800ce8cba71.5ce881af59a551cf4241cb0b817c274a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/181e4761-da8e-4fb2-98a2-3800ce8cba71.5ce881af59a551cf4241cb0b817c274a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (781062348, '125pc Pto Rst 15# Co', 640, '405529264023', 'short description is not available', '125pc Pto Rst 15# Co', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (781123809, 'Valencia Oranges, 4 Lb.', 6.58, 'deleted_036315110523', 'Valencia Oranges, 4 Lb.', 'Valencia Orange 4 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (781187868, 'Slicer Tomato', 1.98, '626074010105', 'short description is not available', 'Slicer Tomato', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (781593404, 'Fresh Apple Autumn Glory, 2lb Bag', 4.44, '883391003078', 'Indulge in the crisp sweetness of Autumn Glory Fresh Apples, the perfect autumn treat! These apples are grown in the Pacific Northwest where the unique climate and soil create the perfect environment for the apples to thrive. Bursting with juicy, caramel flavor, these apples are perfect for snacking, baking or as an addition to your favorite fall recipes. Grab a bag today and savor the taste of the season!', 'Fresh Autumn Glory apples are a distinct variety with a unique flavor profile that sets them apart from other apples. Autumn Glory apples are high in dietary fiber and contain antioxidants, making them a healthy snacking choice. The 2lb bag size is convenient for families and individuals looking for a longer-lasting supply of fresh apples. Autumn Glory apples are harvested at their peak ripeness and packed immediately for maximum freshness, ensuring a delicious and crisp eating experience. - Unique flavor profile sets them apart from other apples - High in dietary fiber and antioxidants for a healthy snack - Convenient 2lb bag size for families and individuals - Harvested at peak ripeness for maximum flavor and freshness - Packed immediately to ensure crisp and delicious eating experience- Ideal for snacking, baking, and cooking.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a6091b27-b437-46fe-89d3-6dd2627843c4.86c5fb0c0dacfbd6293d945a57a7ec20.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6091b27-b437-46fe-89d3-6dd2627843c4.86c5fb0c0dacfbd6293d945a57a7ec20.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6091b27-b437-46fe-89d3-6dd2627843c4.86c5fb0c0dacfbd6293d945a57a7ec20.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (782202669, 'Freshness Guaranteed Fresh Black Seedless Grapes', 2.66, '', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (782242311, 'Fresh Rainier Cherries', 7.48, '741839720010', 'short description is not available', 'Fresh Rainier Cherries', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3b88dbe5-783e-472f-8b0a-1cbaababa6a9.3dc14ce6c4c2580648eefc2a3e8ba91a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3b88dbe5-783e-472f-8b0a-1cbaababa6a9.3dc14ce6c4c2580648eefc2a3e8ba91a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3b88dbe5-783e-472f-8b0a-1cbaababa6a9.3dc14ce6c4c2580648eefc2a3e8ba91a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (782483917, 'Services Reduced Program Dept 94', 0.01, '251694000009', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (782672121, 'Red Bell Pepper', 5.07, '', 'short description is not available', 'Red Bell Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/862cad3c-4f8f-4aba-a6fb-787b7635c25f.7ee5cc3b53b8bc630e7caf60dd6b3c75.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/862cad3c-4f8f-4aba-a6fb-787b7635c25f.7ee5cc3b53b8bc630e7caf60dd6b3c75.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/862cad3c-4f8f-4aba-a6fb-787b7635c25f.7ee5cc3b53b8bc630e7caf60dd6b3c75.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (782704294, 'Fresh Sour Orange, Each', 0.58, 'deleted_000000043892', 'Get a burst of citrus flavor with our fresh sour oranges, perfect for snacking, cooking, or adding a tangy twist to your favorite recipes.', 'Fresh Sour Orange, Each', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (783138876, 'Watermelon Seedless', 4.98, '400094373972', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (783268602, 'Pineapple 10 Oz', 7.88, '045009891136', 'short description is not available', 'Pineapple 10 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/dfe6ad4c-3526-4aa1-8522-784006f1d358.fe005f1b7ffbb906d53177c1843f54e5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dfe6ad4c-3526-4aa1-8522-784006f1d358.fe005f1b7ffbb906d53177c1843f54e5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dfe6ad4c-3526-4aa1-8522-784006f1d358.fe005f1b7ffbb906d53177c1843f54e5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (783466461, 'Cello Lettuce, 1 Each', 1.48, '811857021359', 'Cello Lettuce, 1 Each', 'Cello Lettuce', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (784284959, 'Steamables Sweet Potatoes 1.5 Lb Bag', 1.98, 'deleted_790132000107', 'short description is not available', 'Steamables Sweet Potatoes 1.5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (784338229, 'Fresh Organic Roma Tomato, 1 lb Bag', 2.98, '711069548753', 'Bring the fresh, delicious taste of Organic Roma Tomatoes into your home. These meaty tomatoes deliver sweet and juicy flavor with each bite and are an ideal ingredient in a variety of recipes. They would make a tasty, garden-inspired addition to salads, burgers, gourmet sandwiches, and so much more. They are picked at peak freshness and specially bred for deep red color, intense flavor, and higher lycopene content than standard tomatoes. Whether you slice or dice them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with these Fresh Organic Roma Tomatoes.', 'Fresh Organic Roma Tomato, 1 lb Bag Wholesome, fresh, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, burgers, gourmet sandwiches, and more Add to party trays or school lunches Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/78e6bdaa-8c81-4a59-8ab2-196846bdb8ff.c23aa5a9a6298b3bf1bd67a37fed0cf3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/78e6bdaa-8c81-4a59-8ab2-196846bdb8ff.c23aa5a9a6298b3bf1bd67a37fed0cf3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/78e6bdaa-8c81-4a59-8ab2-196846bdb8ff.c23aa5a9a6298b3bf1bd67a37fed0cf3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (784816933, 'Fresh Grown Yellow Peaches', 2.28, 'deleted_845792040380', 'short description is not available', 'Fresh Grown Yellow Peaches', 'Farm2You', 'https://i5.walmartimages.com/asr/9602e625-f765-49cc-b5cf-a420eca7396a.486be8ce6d081ae871e90e945fa28e20.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9602e625-f765-49cc-b5cf-a420eca7396a.486be8ce6d081ae871e90e945fa28e20.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9602e625-f765-49cc-b5cf-a420eca7396a.486be8ce6d081ae871e90e945fa28e20.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (784817592, 'Fresh Yellow Name Root per Pound', 3.28, 'deleted_851502006171', 'Fresh Yellow Name Root per Pound', 'Fresh Yellow Name Root per Pound', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (784896733, 'Minced Garlic, 8 oz Jar', 3.27, 'deleted_023562010515', 'Add bold flavor to your homemade meals with Fresh Minced Garlic in Water. Ready to use, this garlic is gluten and salt free. Brush or spread on meats, fish, or poultry; stir or blend easily into sauces, dressings, and gravies; or blend with softened butter and parsley for out-of-this-world garlic bread. The possibilities are almost endless with this versatile spice. Packed in a convenient glass jar with a screw-on top, you can keep a bottle of this seasoning in your fridge ready to go at any moment. Flavor up your meals with Garland Foods Minced Garlic in Water.', 'Minced garlic 8-ounce jar Refrigerate after opening Ready to use Brush or spread on meats, fish, or poultry Garlic becomes caramelized and sweeter when cooked A flavorful addition to many dishes Stir or blend easily into sauces, dressings, and gravies', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4239dc06-61c4-4b54-8cf3-5559541af5c9.d8e601eede7199e2d2e8ad400371bb40.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4239dc06-61c4-4b54-8cf3-5559541af5c9.d8e601eede7199e2d2e8ad400371bb40.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4239dc06-61c4-4b54-8cf3-5559541af5c9.d8e601eede7199e2d2e8ad400371bb40.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (785308328, 'Organic Sungold Kiwifruit 2lb Clamshell', 9.98, 'deleted_818849020079', 'short description is not available', 'Organic Sungold Kiwifruit 2lb Clamshell', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/21f82649-c113-485a-ad95-f0fa4137e2ac.6737c6efda88623bc9787124551834db.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/21f82649-c113-485a-ad95-f0fa4137e2ac.6737c6efda88623bc9787124551834db.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/21f82649-c113-485a-ad95-f0fa4137e2ac.6737c6efda88623bc9787124551834db.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (786343527, 'Fresh Klondike Potatoes, Each', 2.47, '000000047296', 'These Fresh, Klondike Potatoes are hand selected for excellent quality. Firm, well-shaped, and smooth, these potatoes can be cooked in almost any way imaginable. They have a wonderful, buttery texture and flavor when baked, roasted, boiled, steamed, sauteed, or mashed. Feature them in a potato salad or cook them up and serve as a savory side dish to your favorite protein. To preserve the nutrients, leave the skins on and simply scrub gently in water before cooking. Always store potatoes in a cool, well-ventilated area rather than in the refrigerator. Enjoy nutrients, flavor, and all-around deliciousness when you cook up Klondike Potatoes.', 'Klondike Limited Potato Tote Per Pound', 'Klondike', 'https://i5.walmartimages.com/asr/8ec0507b-0fe3-43b6-a2fa-e38061d0c8fd.9d25dc0c23a825edc2c3dbc92cc330b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ec0507b-0fe3-43b6-a2fa-e38061d0c8fd.9d25dc0c23a825edc2c3dbc92cc330b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ec0507b-0fe3-43b6-a2fa-e38061d0c8fd.9d25dc0c23a825edc2c3dbc92cc330b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (786481614, 'California Grown Peaches, per Pound', 1.58, '400094859087', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (786697092, 'Display Box For Halos', 0.01, '405520018762', 'short description is not available', 'Display Box For Halos', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (786751768, 'Fresh Red Seedless Grapes', 1.84, 'deleted_000000020237', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (786898850, 'Large Avocado 3 Count Bag', 39, '', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (786995933, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094657270', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (787114458, 'Tasteful Selections Ruby Sensation Potato Bag, 24oz', 4.88, '826088519155', 'If you love red potatoes, you will love our Ruby Sensation® baby red potatoes! A light fresh flavor complements this potato’s creamy flesh and tender skin. Perfect for summer salads or even a quick weeknight meal. They are available in multiple bite sizes and packaging types. These baby red potatoes are very versatile and can be cooked any way your heart desires to have them.', 'Creamy flesh and Tender skin perfect for summer salads or quick weeknight meal light fresh flavor', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/c018804e-378c-4d70-a972-e8ea088f6ef5.eb1e78d23badb67e1b051475989bc63d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c018804e-378c-4d70-a972-e8ea088f6ef5.eb1e78d23badb67e1b051475989bc63d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c018804e-378c-4d70-a972-e8ea088f6ef5.eb1e78d23badb67e1b051475989bc63d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (787372879, 'Fresh Acorn Squash, Each', 1.77, '405998737066', 'Add some fresh flavor to your meal with Acorn Squash. This versatile vegetable can be used in a variety of dishes to create delicious and decadent meals. Roast the whole squash for a simple and flavorful side dish, chop it into cubes and put it in the slow cooker with chicken breast, kidney beans, and spices, or make butternut noodles for a gluten-free pasta alternative. For a sweet treat turn the squash into a rich and spicy pie, perfect for the holiday season. With so many uses, this vegetable will become a pantry staple. Create tasty and flavorful meals with Acorn Squash.', 'Versatile ingredient Roast the whole squash for the perfect side dish or chop into cubes, put into a slow cooker, and mix with chicken breast, beans, and spices for a flavorful dish Use it to create a sweet and decadent pie Make acorn squash noodles for a gluten free pasta alternative Will become a pantry staple Fresh Product', 'Unbranded', 'https://i5.walmartimages.com/asr/8f099e61-fc05-4490-9757-21889b0c0a45.6cf9f32cd41ef0fc8c92086406355b83.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8f099e61-fc05-4490-9757-21889b0c0a45.6cf9f32cd41ef0fc8c92086406355b83.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8f099e61-fc05-4490-9757-21889b0c0a45.6cf9f32cd41ef0fc8c92086406355b83.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (787375565, 'Fresh Eggplant Small', 2.52, '000000046039', 'Introducing our Fresh Whole small eggplants, the perfect ingredient for a wide variety of delectable dishes. These little gems are bursting with flavor, offering a rich, slightly sweet taste and a creamy texture when cooked. Ideal for grilling, roasting, or sautéing, our small eggplants are a versatile and delicious addition to your culinary repertoire. Sourced from quality farms, these beauties are ready to make a big impact on your plate.', 'Introducing our Fresh Whole small eggplants, the perfect ingredient for a wide variety of delectable dishes. These little gems are bursting with flavor, offering a rich, slightly sweet taste and a creamy texture when cooked. Ideal for grilling, roasting, or sautéing, our small eggplants are a versatile and delicious addition to your culinary repertoire. Sourced from quality farms, these beauties are ready to make a big impact on your plate', 'Unbranded', 'https://i5.walmartimages.com/asr/4bdcdf62-5e91-4027-b158-fd689583e71c.7b73230c82633a0cea46427d82980b98.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4bdcdf62-5e91-4027-b158-fd689583e71c.7b73230c82633a0cea46427d82980b98.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4bdcdf62-5e91-4027-b158-fd689583e71c.7b73230c82633a0cea46427d82980b98.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (787802074, 'Yellow Peach, Each', 0.01, '405851259544', 'short description is not available', 'Peach Sample', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (787943278, 'Ogp Red Cherry Samples', 0.01, '405836139304', 'short description is not available', 'Ogp Red Cherry Samples', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (787944175, '180pc Apple Fuji 3#', 894.6, '405665853785', 'short description is not available', '180pc Apple Fuji 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (788487974, 'Fresh Peruvian Grown Black Grapes', 1.88, '', 'short description is not available', 'Fresh Peruvian Grown Black Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (788719345, 'Organic Whole White Mushrooms 8oz', 2.57, 'deleted_699058820151', 'short description is not available', 'Organic Whole White Mushrooms 8oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (788738446, '100pc Pto Rst 10# #2', 444, '405552001312', 'short description is not available', '100pc Pto Rst 10# #2', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (788820608, 'Lunds & Byerlys Riblets 1 ea', 0.01, '251951000001', 'Lunds & Byerlys Riblets', 'Premium all-natural pork (Minimally processed, no artificial ingredients). Tradition since 1939 service quality. No antibiotics or hormones. Sea fresh - stays fresh longer. U.S. inspected and passed by Department of Agriculture. Product of USA. Riblets', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a22b2749-72b7-4791-88f9-31ab21c34887.360923e93832f2aba7ff7c2b971fa040.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a22b2749-72b7-4791-88f9-31ab21c34887.360923e93832f2aba7ff7c2b971fa040.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a22b2749-72b7-4791-88f9-31ab21c34887.360923e93832f2aba7ff7c2b971fa040.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (788855805, 'Yellow Flesh Peaches, per Pound', 1.58, '405502157038', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (789005024, 'Cauliflower Crumbles, 16 oz Bag', 2.78, '681131148351', 'Add fresh and ready to eat chopped cauliflower to your meal with Marketside Chopped Cauliflower. Serve as is, or add your favorite spices for additional flavor. Add onion, thyme, garlic, olive oil, parmesan cheese, salt and pepper to cauliflower to create a yummy side dish. Marketside Chopped Cauliflower are a quick and healthy side dish and a great addition to any meal. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes. Microwave: Pierce holes in bag with fork. Place on a microwave safe dish and microwave on high for 2 or 3 minutes. Using caution as the steam from the bag will be very hot.', 'Marketside Chopped Cauliflower, 16 oz Microwave in bag Washed and ready to eat Ready in 4 minutes Picked fresh for you', 'Marketside', 'https://i5.walmartimages.com/asr/adecc32d-c9dd-4727-acc5-0cc5e1bfff46_4.6c0ba8e0240278d2cf61d993ad50b686.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/adecc32d-c9dd-4727-acc5-0cc5e1bfff46_4.6c0ba8e0240278d2cf61d993ad50b686.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/adecc32d-c9dd-4727-acc5-0cc5e1bfff46_4.6c0ba8e0240278d2cf61d993ad50b686.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (789011308, 'Tomatillo 20oz', 1.88, 'deleted_711069545127', 'short description is not available', 'Tomatillo 20oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (789769516, 'California Grown Peaches, per Pound', 1.58, '400094989289', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (789833856, 'Fresh USDA Organic Raspberries, 6 oz. Container', 4.76, '059165502003', 'The sweet, juicy flavor of Fresh Raspberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes or yogurt, bake them into mouthwatering raspberry crumble bars, mix them with other fruit for a light and flavorful salad, or add them to a creamy smoothie. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin K and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them with cool water and enjoy the fresh taste. Refrigerate the berries to keep them fresh and ready for use. Pick up a Fresh Raspberry container today and savor the delectable flavor.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Raspberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Raspberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of raspberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these tasty gems into your baking endeavors, whether it\'s muffins, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are raspberries delicious, but they also offer an array of health benefits. Loaded with vitamins and dietary fiber, raspberries are are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Raspberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Raspberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f06bed7e-c7f2-49e4-8886-6f3f0a3396ff_1.30a3636e6f83d199d33631766c1c790d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f06bed7e-c7f2-49e4-8886-6f3f0a3396ff_1.30a3636e6f83d199d33631766c1c790d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f06bed7e-c7f2-49e4-8886-6f3f0a3396ff_1.30a3636e6f83d199d33631766c1c790d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (789855464, '75pc Orange Navel 8#', 589.5, '400094963319', 'short description is not available', '75pc Orange Navel 8#', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (791237345, 'Yellow Flesh Peaches, per Pound', 1.58, '400094345443', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (791415179, 'Green Beans 12z', 2.78, '782796012541', 'short description is not available', 'Green Beans 12z', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (791556977, 'Services Reduced Program Dept 94', 0.01, '251690000003', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (792260193, 'Marketside Organic Red Seedless Grapes 32z Clam', 5.98, 'deleted_079893441122', 'short description is not available', 'Marketside Organic Red Seedless Grapes 32z Clam', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (792421255, 'Fresh Green Seedless Grapes', 2.98, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (792658915, 'GRAPE TOMATO', 2.48, '064143291244', 'GRAPE TOMATO', '', '', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (792721884, 'Watermelon Seedless', 4.48, '400094985076', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e9d5d244-e736-4ca9-aa23-0b938471c338.06dfbb37d511915ca84f09e37d1a925f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9d5d244-e736-4ca9-aa23-0b938471c338.06dfbb37d511915ca84f09e37d1a925f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9d5d244-e736-4ca9-aa23-0b938471c338.06dfbb37d511915ca84f09e37d1a925f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (793027233, 'Yellow Flesh Peaches, per Pound', 1.58, '400094634721', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (793051417, 'Yellow Flesh Peaches, per Pound', 1.58, '400094345795', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (793087702, 'Fresh Black Seedless Grapes', 1.74, '', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (793468809, 'Aloe Vera Natural Pulp', 4, '858231000807', 'Aloe Vera Pure Ntrl Plp 14 oz', 'Natural Pulp Pure Aloe', 'Fresh Produce', 'https://i5.walmartimages.com/asr/205724a7-32ca-40fd-91d1-fd4f5b7d7494.3f1f448e4507b7e69472cd5aeb31afc8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/205724a7-32ca-40fd-91d1-fd4f5b7d7494.3f1f448e4507b7e69472cd5aeb31afc8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/205724a7-32ca-40fd-91d1-fd4f5b7d7494.3f1f448e4507b7e69472cd5aeb31afc8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (793597065, '120pc Pto Red 5# Ca', 476.4, '405507399808', 'short description is not available', '120pc Pto Red 5# Ca', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (794291744, '200pc Pto Rst 5# Ff', 648, '405507544444', 'short description is not available', '200pc Pto Rst 5# Ff', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (794426523, 'Call of Cthulhu LCG: Necronomicon Draft Starter', 2.48, '000000043229', 'The medium-sized to large Melon Crenshaw is a cross between the muskmelon and the casaba melon. The Crenshaw fruit is a sweet-tasting creamy white to yellow melon harvested in autumn. It has a smooth texture and will delight the melon fan with a hint of spice in its taste. Because it is a cross of melons, it is slightly more oblong than most other melons. Choose the scrumptious Crenshaw Melon as a healthy part of your regular fruit supply.', 'Crenshaw Melon Bag: Creamy white melon with smooth texture Hybrid melon increases the variety in your fruit intake Oblong fruit has sweet taste with a little added zest Cross between casaba and muskmelon', 'Fantasy Flight Games', 'https://i5.walmartimages.com/asr/466a262f-c177-4aa3-880e-56d14254c25a.aafee50280209579bf571d1c80f2c640.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/466a262f-c177-4aa3-880e-56d14254c25a.aafee50280209579bf571d1c80f2c640.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/466a262f-c177-4aa3-880e-56d14254c25a.aafee50280209579bf571d1c80f2c640.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (794912320, 'Fresh Pears, Each', 1.97, '000000044196', 'Indulge in the sweet and buttery flavor of our miscellaneous pears, featuring a variety of pear types and textures. perfect for snacking, baking, or adding to salads, these pears are a delicious and healthy treat. buy by the pound and enjoy the perfect pear for your taste buds!', 'Miscellaneous Pears Bulk', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (795251312, 'Granny Organic Manzana, 1 Each', 7.98, '741839080039', 'Granny Organic Manzana, 1 Each', 'Manzana Granny Organic Artisan 12/3', 'Stemilt', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (795704944, '120pc Grapefruit 5#', 717.6, '405785128732', 'short description is not available', '120pc Grapefruit 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (795873483, 'Fieldpack Unbranded Fresh Strawberries 2#', 4.74, 'deleted_854151002686', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 2#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7b731147-acb8-48df-8c43-c711f550bbcc.1096d150f89a6c9bcf2dff7aadc14d51.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7b731147-acb8-48df-8c43-c711f550bbcc.1096d150f89a6c9bcf2dff7aadc14d51.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7b731147-acb8-48df-8c43-c711f550bbcc.1096d150f89a6c9bcf2dff7aadc14d51.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (796196067, 'Fresh Whole Medley Tomato, 10 oz Package', 1.42, '684924050701', 'Bring the delicious taste of Fresh Whole Medley Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Fresh Whole Medley Tomatoes.', 'Fresh Whole Medley Tomato, 10 oz Package Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c7ede83f-b8fe-4651-a689-c1fd2d62c6d2.72513d64ad7bb3a4c5490082646cd67a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (796252583, 'Regent Apples 3 Lb Bag', 2.97, '080153341144', 'short description is not available', 'Regent Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (796599141, 'Fruit Medley 16oz', 4.68, '095309421014', 'short description is not available', 'Fruit Medley 16oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (796980349, 'Taylor Farms Fresh Teriyaki Vegetable Meal Kit with Noodles, 23 oz', 5.18, '824862006365', 'The Taylor Farms Teriyaki Vegetable Meal Kit with Noodles allows you to become a first-class chef in a matter of minutes. A fresh mix of broccoli, Brussels sprouts, carrots, red cabbage, kale, and peas are tossed with Yakisoba noodles and coated in a drool-worthy teriyaki sauce for a meal that\'s sure to make a regular appearance at your dinner table. Serve as is, or beef it up with your favorite protein. It cooks in seven minutes, so you\'ll have dinner on the table in no time. It\'s dairy-free, nut-free, vegetarian, and vegan. Keep refrigerated until ready to enjoy. Treat the entire family to the delicious taste of Taylor Farms Teriyaki Vegetable Meal Kit with Noodles. Contains: Soy, Wheat.', 'A fresh mix of broccoli, Brussels sprouts, carrots, red cabbage, kale, and peas are tossed with Yakisoba noodles Includes a drool-worthy teriyaki sauce May contain snap peas or snow peas Ready in 7 minutes Dairy-free, nut-free, vegetarian, and vegan 4.5 servings per package 130 calories per serving Keep refrigerated', 'Taylor Farms', 'https://i5.walmartimages.com/asr/3e32ae39-a4c3-4f5c-bd3d-19692b356a90.c59e604013fc108ad70c1ee058e5d5d7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e32ae39-a4c3-4f5c-bd3d-19692b356a90.c59e604013fc108ad70c1ee058e5d5d7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3e32ae39-a4c3-4f5c-bd3d-19692b356a90.c59e604013fc108ad70c1ee058e5d5d7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (797493573, 'Freshness Guaranteed Mango 10 Oz', 4.37, 'deleted_681131036535', 'short description is not available', 'Freshness Guaranteed Mango 10 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (798217651, '200pc Pto Ykn/red Id', 824, '405539017220', 'short description is not available', '200pc Pto Ykn/red Id', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (798255558, 'Ambrosia Apples 2 Ct Pouch Bag', 2.47, '847473006340', 'short description is not available', 'Ambrosia Apples 2 Ct Pouch Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (798283100, 'Tomatoes On The Vine Per Lb', 2.48, '400094427699', 'short description is not available', 'Tomatoes On The Vine Per Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (798320587, '125pc Pto Idaho 8#', 802.5, '405551394927', 'short description is not available', '125pc Pto Idaho 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (798538211, 'Cinderella Pumpkin, 1 Each', 6.98, '000000071178', 'Cinderella Pumpkin, 1 Each', 'Cinderella Pumpkin', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (798860455, 'California Grown Peaches, per Pound', 1.58, '405549915639', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (799427964, 'Whole Fresh Yellow Onion, 2 lb Bag', 1.48, 'deleted_405873145030', 'short description is not available', 'Whole Fresh Yellow Onion, 2 lb Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/a36631cd-0581-4a21-b2e5-ca313dd660d2.66f2db9855811ae5c3ffe8c1f71e939e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a36631cd-0581-4a21-b2e5-ca313dd660d2.66f2db9855811ae5c3ffe8c1f71e939e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a36631cd-0581-4a21-b2e5-ca313dd660d2.66f2db9855811ae5c3ffe8c1f71e939e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (799600958, 'Marketside Mks Sweet Kale Chopped Salad Kit', 3.63, '681131093132', 'short description is not available', 'Marketside Mks Sweet Kale Chopped Salad Kit', 'Marketside', 'https://i5.walmartimages.com/asr/a90a4b59-ae61-49a5-a880-52496bd987f4.d8b480bc4110c533f948f8ab472dfd6e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a90a4b59-ae61-49a5-a880-52496bd987f4.d8b480bc4110c533f948f8ab472dfd6e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a90a4b59-ae61-49a5-a880-52496bd987f4.d8b480bc4110c533f948f8ab472dfd6e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (799688653, '165pc On Tx1015 3#', 676, '405538922426', 'short description is not available', '165pc On Tx1015 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (800039896, 'Granny Smith Apples, Each', 1.38, 'deleted_031654440171', 'short description is not available', 'Granny Smith Apples, Each', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (800250471, 'Driscoll\'s Berry Big Strawberries Fraises, 18 Oz', 3.26, '715756211296', 'Berry Big Strawberries are Big Berries for more versatile uses. A bigger strawberry that is perfect for everyday eating possibilities. With the same great delicious Driscoll\'s flavor, this special berry gives you multiples bites from just one berry. The pop in size is all from Mother Nature . The sweet, juicy flavor of Fresh and big Strawberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. These strawberries contain essential vitamins and nutrients like, vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet.', 'Big Berries perfect for dipping, slicing, filling, or sharing with loved ones Big juicy flavor and naturally large (non-GMO) Available for limited time in the beginning of the strawberry season.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8b7971a6-07f9-471f-ae83-87400cf098ba.9f7213627de5c1b56056a85a5d0c5e7d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8b7971a6-07f9-471f-ae83-87400cf098ba.9f7213627de5c1b56056a85a5d0c5e7d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8b7971a6-07f9-471f-ae83-87400cf098ba.9f7213627de5c1b56056a85a5d0c5e7d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (800282145, 'Stemilt Lil Snappers Apples Pinata!', 6.97, '033383310428', 'Apples, Pinata! 3 lb (1.36 kg) 2-1/2 inch min dia. Classic flavors with a tropical twist. Kid size fruit. World famous fruit. Meets or exceeds US Extra Fancy. Responsible choice. Fruits & Veggies - More matters. www.stemilt.com. Fresh from our family farms. Kid friendly varieties. Fun ways to eat apples. Resealable zipper. Produce of USA. 3 lb (1.36 kg) Wenatchee, WA 98801', 'Apples, Pinata! 2-1/2 inch min dia. Classic flavors with a tropical twist. Kid size fruit. World famous fruit. Meets or exceeds US Extra Fancy. Responsible choice. Fruits & Veggies - More matters. www.stemilt.com. Fresh from our family farms. Kid friendly varieties. Fun ways to eat apples. Resealable zipper. Produce of USA.', 'Lil Snappers', 'https://i5.walmartimages.com/asr/524caebc-abad-4e25-8994-73294938b036.ca6bb29ff4356cfafade93389b90f84c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/524caebc-abad-4e25-8994-73294938b036.ca6bb29ff4356cfafade93389b90f84c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/524caebc-abad-4e25-8994-73294938b036.ca6bb29ff4356cfafade93389b90f84c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (800901637, 'Freshness Guaranteed Mango Small', 5.58, '262821000007', 'Freshness Guaranteed Mango small in a plastic tray. Has delicious fresh cut Mango slices that are ready to eat.', 'Freshness Guaranteed Mango Small', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (801312049, 'Organic Roma Tomatoes 1# Bag', 2.56, '826920001879', 'short description is not available', 'Organic Roma Tomatoes 1# Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (801713757, 'Fresh Organic Whole Grape Tomato, 1 lb Package', 4.92, '751666562059', 'With the perfect balance of sweetness and acidity, these Fresh Fair Trade Organic Whole Grape Tomatoes deliver versatile flavor to take you from sauces to salads and beyond. These grape tomatoes are Fair Trade certified and USDA organic, meaning that you can enjoy a healthy, flavorful addition to elevate the taste and texture of any meal. You can combine these tasty little tomatoes with fresh mozzarella and basil drizzled with olive oil or slice them up and add them to a freshly tossed salad. If you\'re feeling something classic, you can always cut one up to add that fresh tomato taste to a sandwich or dice up a few to make a delightful pizza topping. Be sure to add Fresh Fair Trade Organic Whole Grape Tomatoes to your inventory of ingredients.', 'Fresh Fair Trade Organic Whole Grape Tomato, 1 lb Package Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches USDA organic Fair Trade certified Fresh produce in a convenient package', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9c425c65-57ac-4399-ac2c-9eaffda63387.f35b50c7f4d0d39f57284e0e71dfcf5e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c425c65-57ac-4399-ac2c-9eaffda63387.f35b50c7f4d0d39f57284e0e71dfcf5e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c425c65-57ac-4399-ac2c-9eaffda63387.f35b50c7f4d0d39f57284e0e71dfcf5e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (801754250, 'Freshness Guaranteed Strawberries & Blueberries 10 Oz', 6.47, 'deleted_681131036498', 'short description is not available', 'Freshness Guaranteed Strawberries & Blueberries 10 Oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (802236983, 'Minced Garlic, 10 Lb Bag', 78.43, '687080067897', 'Minced Garlic, 10 Lb Bag', 'Minced garlic is a convenient way to add the pungent, savory flavor of garlic to a recipe without the time and hassle of preparing fresh garlic It is a flavorful addition to meat rubs, seasoning mixes, sauces, marinades, salad dressings and more. A natural alternative for pest control. Use anywhere you would use fresh garlic Gluten Free, KOF-K Kosher Certified', 'It\'s Delish', 'https://i5.walmartimages.com/asr/3ec737a2-936f-4655-bc78-b2e5126ac449.6fd99c2dbf86e57812340fcfc27dd432.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3ec737a2-936f-4655-bc78-b2e5126ac449.6fd99c2dbf86e57812340fcfc27dd432.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3ec737a2-936f-4655-bc78-b2e5126ac449.6fd99c2dbf86e57812340fcfc27dd432.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (802807284, 'Fresh Red Seedless Grapes', 1.98, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (803434352, 'California Grown Peaches, per Pound', 1.58, '400094859223', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (803584440, 'Personal Yellow Watermelon', 3.98, '000000034944', 'Produce', 'Selected and stored fresh,Sourced with high quality standards,Recommended to wash before consuming,Delicious on their own as a healthy snack or as part of a recipe', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3214fe42-de0d-4198-944c-f0f56adccd90.9840b900f497e5ab475b9160d4feb8bc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3214fe42-de0d-4198-944c-f0f56adccd90.9840b900f497e5ab475b9160d4feb8bc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3214fe42-de0d-4198-944c-f0f56adccd90.9840b900f497e5ab475b9160d4feb8bc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (803788727, '3lb Bag Of Red Delicious Apples', 3.74, 'deleted_750253905873', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (804248510, 'Apple Mix 10oz', 2.98, '074641043290', '', 'Walmart Apple Blend Fresh Fruit: Includes apples, cantaloupe, honeydew melon, grapes Packed in its own juice*NEW_LINE*', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (804683635, 'Fieldpack Unbranded Turnip Greens 2# Bag', 4.34, 'deleted_659389000165', 'short description is not available', 'Fieldpack Unbranded Turnip Greens 2# Bag', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (804874742, 'Fresh Organic Whole White Mushrooms, 8 oz', 2.57, 'deleted_678286888508', 'Add flavor and texture to your meals with the Organic Whole White Mushrooms. This versatile ingredient is perfect for a variety of dishes, whether its for breakfast, lunch, or dinner. Mince some up and put them in your omelet with peppers and ham for a filling breakfast. Slice them and add them to a healthy salad for lunch or stuff them with cream cheese, parmesan, and sharp cheddar cheese for a delicious, mouthwatering meal. White mushrooms are an excellent source of riboflavin and are naturally fat-free, cholesterol-free, and are low in calories and sodium. Enjoy the delicious taste of Organic Whole White Mushrooms any way you prepare them.', 'Fresh Organic Whole White Mushrooms, 8 oz tray: Adds flavor and textures to your meals Great for breakfast, lunch, or dinner Mince them for an omelet, slice them for a salad, or stuff them with cheese Naturally fat-free and cholesterol-free Low in sodium and calories', 'Phillips Mushroom Farms', 'https://i5.walmartimages.com/asr/c176b631-4c4a-4501-b991-4a7b81ee4609.f42f0fbc7292a01a10f1cc3211e89f49.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c176b631-4c4a-4501-b991-4a7b81ee4609.f42f0fbc7292a01a10f1cc3211e89f49.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c176b631-4c4a-4501-b991-4a7b81ee4609.f42f0fbc7292a01a10f1cc3211e89f49.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (805134883, 'Valley Fruit Pulp Passion Fruit Pouch', 4.97, '040232568398', 'short description is not available', 'Valley Fruit Pulp Passion Fruit Pouch', 'VALLEY FRUIT', 'https://i5.walmartimages.com/asr/74747670-ffe5-450a-9d95-4ff11d4fd6f4.17287ed3631b5cc8bc92dde5b18ced8d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/74747670-ffe5-450a-9d95-4ff11d4fd6f4.17287ed3631b5cc8bc92dde5b18ced8d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/74747670-ffe5-450a-9d95-4ff11d4fd6f4.17287ed3631b5cc8bc92dde5b18ced8d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (805547312, 'Butternut Squash', 3.05, 'deleted_711069447599', 'Butternut squash', 'Butternut Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/89a59782-01f1-4c3b-874f-d5b6fa731af8_1.63582447b8d1265a93b232226461d13f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/89a59782-01f1-4c3b-874f-d5b6fa731af8_1.63582447b8d1265a93b232226461d13f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/89a59782-01f1-4c3b-874f-d5b6fa731af8_1.63582447b8d1265a93b232226461d13f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (806006443, 'Louisiana Pepper Exchange 4oz Orange Habanero Pepper Puree Sauce', 2.89, '850014104030', 'Louisiana Pepper Exchange 4oz Orange Habanero Pepper Puree Sauce Discover the vibrant flavors of our Orange Habanero Pepper Puree, a sweet and spicy habanero pepper sauce that brings a perfect balance of heat and tropical fruitiness to your dishes. With its smooth, thin consistency, this habanero salsa easily blends into your favorite recipes, elevating them with bold flavor. Our habanero seasoning offers a convenient alternative to chopping and deseeding fresh peppers, providing consistent heat without the hassle. Made with only orange habanero peppers and a pinch of salt, it’s gluten-free, calorie-free, and bursting with natural flavor. Perfect for pairing with mango, coconut, fresh fish, or even Peruvian ceviche, this versatile habanero hot sauce is the secret to creating delicious, flavor-packed meals.', 'EXOTIC TROPICAL FLAVOR: Add a burst of vibrant, fruity heat with our Orange habanero pepper seasoning, perfect for enhancing any dish. NO CHOPPING NEEDED: Skip the prep with our easy-to-use hot and sweet habanero sauce, offering quick flavor without the hassle. TWO SIMPLE INGREDIENTS: Made with just orange habanero peppers and a pinch of salt, this spicy sauce is gluten-free and calorie-free for guilt-free enjoyment. EASY PEPPER SUBSTITUTE: Replace habanero powder with 1-3 teaspoons of our habanero puree for a quick and simple recipe boost. VERSATILE HEAT: Ideal for fish, ground meats, or creative cocktails like margaritas, this habanero spicy seasoning brings the perfect mix of sweet heat.', 'Louisiana Pepper Exchange', 'https://i5.walmartimages.com/asr/ee585289-7a1a-4429-a2e6-4c582a60d08e.0b43192ef2d294bbad41339996cd3959.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ee585289-7a1a-4429-a2e6-4c582a60d08e.0b43192ef2d294bbad41339996cd3959.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ee585289-7a1a-4429-a2e6-4c582a60d08e.0b43192ef2d294bbad41339996cd3959.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (806136474, 'Bagged Avocado Hass', 4.48, 'deleted_405561852615', 'short description is not available', 'Bagged Avocado Hass', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (806584737, 'Medley Tomato, 10 oz Package', 4.48, '679508071043', 'Bring the fresh, delicious taste of Medley Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Medley Tomatoes.', 'Medley Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed6a8bd2-fe74-41cc-ab71-a490692de4ca.233a3367c52ebed8e8129d2546c9a195.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (807215728, 'Fresh Black Seedless Grapes', 2.58, '', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/79743a91-61a1-4244-8a5f-3d9fba0793c3_2.d0cedaee0d94ed63754206729207d77c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/79743a91-61a1-4244-8a5f-3d9fba0793c3_2.d0cedaee0d94ed63754206729207d77c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/79743a91-61a1-4244-8a5f-3d9fba0793c3_2.d0cedaee0d94ed63754206729207d77c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (808107649, 'Organic Limes 1# Bag', 2.92, 'deleted_744430275705', 'short description is not available', 'Organic Limes 1# Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (808160630, 'Services Reduced Program Dept 94', 0.01, '251975000001', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (808369590, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094006429', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (808446561, 'Fresh Red Seedless Grapes', 3.78, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (808998890, '120pc Apl Gala 5# Wa', 600, '405539878203', 'short description is not available', '120pc Apl Gala 5# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (809451919, 'Display Box For Halos', 0.01, '405520019295', 'short description is not available', 'Display Box For Halos', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (809469704, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094688205', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (809787761, 'Watermelon Seedless', 4.48, '400094137376', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (810485842, 'Tomato on the Vine, Bag', 4.38, 'deleted_000000048033', 'Keep your recipes simple and classic with fresh tomatoes on the vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, this fresh produce item is sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Walmart\'s Tomatoes On The Vine and keep your dishes looking great and tasting equally as excellent.', 'Tomatoes On The Vine, 1 lb: 1-pound bag of tomatoes on the vine Vine helps tomatoes maintain peak freshness and flavor Perfect for slicing, dicing, crushing and blending Great for sandwiches, pastas, pizzas and salsas Essential ingredient in every home-cook\'s kitchen', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (810557183, 'California Grown Peaches, per Pound', 1.58, '400094006849', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (810639115, 'Limes, Each', 0.98, 'deleted_851264003685', 'Persian Limes, 1 Each', 'Bulk Persian Limes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/0c72b8d0-a4bc-4590-a19c-8e1b4a555a30.16ff07e3c111df9be4158853c2e505ef.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0c72b8d0-a4bc-4590-a19c-8e1b4a555a30.16ff07e3c111df9be4158853c2e505ef.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0c72b8d0-a4bc-4590-a19c-8e1b4a555a30.16ff07e3c111df9be4158853c2e505ef.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (810783217, 'California Grown Peaches, per Pound', 1.58, '400094006702', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (810976594, 'Fresh Clementines, 3lb Bag', 6.47, 'deleted_860399001923', 'Enjoy the juicy goodness of citrus when you eat a Fresh Clementines (Mandarinas). Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, clementines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, clementines are now available year-round in most markets. Clementines are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the mandarins hang out in a bowl on your counter or table to breathe. Compact and portable, clementines are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious Fresh Clementines on hand for an easy, healthy treat.', 'Delicious, sweet, juicy fresh citrus Pleasing sweet-tart flavor Easy to peel and segment Excellent source of vitamin C, potassium, and folic acid For maximum flavor, do not refrigerate', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/c711153d-a264-4a89-9a62-0c97c266d737.ca96745337570cf66f4f2e051e891ace.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c711153d-a264-4a89-9a62-0c97c266d737.ca96745337570cf66f4f2e051e891ace.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c711153d-a264-4a89-9a62-0c97c266d737.ca96745337570cf66f4f2e051e891ace.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (811499875, 'Red Delicious Apples Bulk', 1.27, '891658001163', 'short description is not available', 'Red Delicious Apples Bulk', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (811592695, 'White Onions, 1 Each', 0.98, 'deleted_661061110833', 'White Onions, 1 Each', 'White Onion Bulk Ea', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9829c316-f713-4e59-92ba-5675f434b0cd_3.1ce6c46d2b2b1e719685a7a99f5e6aad.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9829c316-f713-4e59-92ba-5675f434b0cd_3.1ce6c46d2b2b1e719685a7a99f5e6aad.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9829c316-f713-4e59-92ba-5675f434b0cd_3.1ce6c46d2b2b1e719685a7a99f5e6aad.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (811656677, 'Freshness Guaranteed Pineapple Rings 12 Oz', 4.7, '681131036689', 'short description is not available', 'Freshness Guaranteed Pineapple Rings 15 Oz', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (811762108, 'Tomatillo Milpero', 2.52, 'deleted_860001220629', 'short description is not available', 'Tomatillo Milpero', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (811976189, 'Marketside Butternut Squash Cubes 24oz', 3.98, '681131377386', 'short description is not available', 'Marketside Butternut Squash Cubes 24z', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (812036170, 'Fresh Champagne Grapes, 1 Lb', 2.98, '081899401017', 'IceCool Technology Keeps Your Hands CoolExclusive dual-sided motherboard design places hot components on the underside and away from users. Combined with heatpipes and vents, palm rests and typing surfaces stay cooler than the body temperature so they\'re cool even during the longest computing sessions.Palm Proof Technology Prevents Accidental InputIntelligent touchpad distinguishes between palm and finger contact to prevent inadvertent cursor movements during typing.', 'Fresh Champagne Grapes, 1 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b241477d-7bda-4f60-82cd-2fa3056a0a61.5969c65636ad8a86dea50bc9729b3fb5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b241477d-7bda-4f60-82cd-2fa3056a0a61.5969c65636ad8a86dea50bc9729b3fb5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b241477d-7bda-4f60-82cd-2fa3056a0a61.5969c65636ad8a86dea50bc9729b3fb5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (812174538, 'Services Reduced Program Dept 94', 0.01, '251864000006', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (812531426, 'Robinson Gold Pineapple Chunks', 2.28, '717524513168', 'short description is not available', 'Robinson Gold Pineapple Chunks', 'Robinson', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (812543722, 'Watermelon Seedless', 4.88, '405504886042', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (812560586, '180pc Pto Rst 10# Nv', 889.2, '400094860489', 'short description is not available', '180pc Pto Rst 10# Nv', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (812674386, 'Watermelon Seedless', 4.48, '400094750025', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bf055f6c-4d73-4a65-b0ef-506e74180816.520dd40e3d8c83a5ce49602b44ed0288.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf055f6c-4d73-4a65-b0ef-506e74180816.520dd40e3d8c83a5ce49602b44ed0288.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf055f6c-4d73-4a65-b0ef-506e74180816.520dd40e3d8c83a5ce49602b44ed0288.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (813542633, 'Fresh Caramel Apple with Sprinkles, Each', 1.97, '035107604813', 'Looking for a fun and delicious way to treat yourself or your loved ones? Look no further than our Caramel Fresh Apples with Sprinkles, 1 Pack. We start with a fresh and juicy apple that is dipped into a velvety smooth caramel coating. Then, we sprinkle on a generous amount of rainbow-colored sprinkles, turning a classic caramel apple into a party on the outside! The result is a visually stunning treat that is just wacky enough to satisfy the kid in all of us. Our Caramel Apples with Sprinkles, 1 Pack is perfect for any occasion, whether you\'re looking for a tasty snack or a fun dessert to share with family and friends. Plus, with Halloween just around the corner, it\'s the perfect healthy treat to indulge in without feeling guilty. So go ahead and treat yourself to a little sweetness with our Caramel Apples with Sprinkles, 1 Pack, and enjoy the perfect balance of sweet, crunchy, and colorful flavors in every bite.', '/li>Fresh Apples are used for this snack, mostly Granny Apples, but another varieties with the right level of sweetness will also make the work! /li> Caramel apple on the inside, party on the outside! A crazy amount of rainbow-colored sprinkles turns our classic caramel apple into a beautiful bonanza. It’s just wacky enough to satisfy the kid in all of us. Caramel Apples with Sprinkles, 1 Pack Fresh Apple dipped in caramel and rolled in sprinkles, in a plastic tray Perfect for a Halloween healthy treat!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/80bdfeec-0501-43f8-9d77-3a6de9cc92a3.04c7f3c2aa5c35893965dafdd47e455d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/80bdfeec-0501-43f8-9d77-3a6de9cc92a3.04c7f3c2aa5c35893965dafdd47e455d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/80bdfeec-0501-43f8-9d77-3a6de9cc92a3.04c7f3c2aa5c35893965dafdd47e455d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (813687558, 'Fresh Sweet Chilean Rainier Cherries, 1 Lb.', 4.97, '848768000012', 'Fresh Sweet Chilean Rainier Cherries, 1 Lb.', 'Fresh Sweet Chilean Rainier Cherries', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (813868867, 'Services Reduced Program Dept 94', 0.01, '251872000005', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (814168010, 'Taylor Farms Breakfast Snack Bistro Box 5.45 Oz', 3.98, '030223019817', 'short description is not available', 'Taylor Farms Breakfast Snack Bistro Box 5.45 Oz', 'Taylor Farms', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (814196967, 'Steamables Sweet Potatoes 1.5 Lb Bag', 2.54, 'deleted_108532970058', 'short description is not available', 'Steamables Sweet Potatoes 1.5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (815062490, 'Fresh Premium Grape Tomato, 1.5 lb Package', 5.28, '884051050135', 'Premium Grape Tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily complements your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Premium Grape Tomatoes are the perfect choice.', 'Premium Grape Tomato, 1.5 lb Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ef2dcbc7-1fc9-40cd-bf3e-09d72a0218d9.1d2f7b812b05175eccc5c66761b3fa2e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ef2dcbc7-1fc9-40cd-bf3e-09d72a0218d9.1d2f7b812b05175eccc5c66761b3fa2e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ef2dcbc7-1fc9-40cd-bf3e-09d72a0218d9.1d2f7b812b05175eccc5c66761b3fa2e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (815248966, '2pc Apple Koru 2 Dcr', 3.54, '405743307360', 'short description is not available', '2pc Apple Koru 2 Dcr', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (815416407, 'Fresh California Grown Red Grapes', 1.98, '', 'short description is not available', 'Fresh California Grown Red Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/6ddde670-829e-452d-a82e-a434acb632cb_2.9d2d20669a54285394b2fe5dd533f439.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6ddde670-829e-452d-a82e-a434acb632cb_2.9d2d20669a54285394b2fe5dd533f439.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6ddde670-829e-452d-a82e-a434acb632cb_2.9d2d20669a54285394b2fe5dd533f439.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (815422385, 'Yellow Flesh Peaches, per Pound', 1.58, '400094744611', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (815499124, 'Brussel Sprout, 16 Oz.', 2.98, 'deleted_033383449876', 'Brussel Sprout, 16 Oz.', 'Brussel Sprout 1# Bag', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/e99211e0-a65f-4613-9449-e4c85f71f025.8a6d8d158b32c51e381c596cfeb67c11.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e99211e0-a65f-4613-9449-e4c85f71f025.8a6d8d158b32c51e381c596cfeb67c11.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e99211e0-a65f-4613-9449-e4c85f71f025.8a6d8d158b32c51e381c596cfeb67c11.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (815637363, 'Fresh Tricolor Peppers, 3count', 2.5, '689259000230', 'Enhance your meals with the delicious flavor of Fresh Color Bell Peppers (Pimiento Tricolor). Dice these colorful bell peppers and put them in a hearty chili, slice them and add to a deli sandwich, saute them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly sliced steak and serve with rice. A hollowed-out bell pepper can be filled with sausage, mushrooms, and rice to create a delicious stuffed pepper that will have the family asking for seconds. With so many ways to prepare them, Fresh Color Bell Peppers are an excellent fresh produce vegetable to have on hand', 'Fresh Color Bell Peppers are an excellent addition to any meal Dice them and put them in chili Add to a deli sandwich Slice and serve with your favorite dip Loaded with vitamin C High in vitamin A Wash before eating', 'Unbranded', 'https://i5.walmartimages.com/asr/5a48f422-798a-445d-b93f-0e7542635607.5b6279bf203b58e61293db96e9b6bee9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a48f422-798a-445d-b93f-0e7542635607.5b6279bf203b58e61293db96e9b6bee9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a48f422-798a-445d-b93f-0e7542635607.5b6279bf203b58e61293db96e9b6bee9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (815677081, 'Red Free Apples 3 Lb Bag', 3.94, '033383047454', 'short description is not available', 'Red Free Apples 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (815891467, 'Fresh Lady Alice Apples 2 Lb Bag', 4.94, '804305001126', 'Discover the fresh and nutritious Apple Lady 3lb at Walmart. Packed with flavor and health benefits, these apples are perfect for snacking, baking, or adding to your favorite salads. Each bag contains approximately 3lbs of juicy, crispy apples that are pesticide-free and carefully picked for their quality. Stored in the fresh produce aisle, these apples promise a delightful addition to your daily diet. Explore the Apple Lady 3lb at your nearest Walmart or online.', 'Premium Quality: The Apple Lady Alice 3lb is packed with premium-grade apples, ensuring each piece is fresh, juicy, and packed with natural goodness. Nutrient-Rich: These apples are a great source of dietary fiber, vitamin C, and antioxidants, promoting overall health and well-being. Versatile Use: Perfect for snacking, cooking, baking, or adding to salads. Their crisp texture and sweet flavor make them a delightful addition to various dishes.', 'Unbranded', 'https://i5.walmartimages.com/asr/4d02b234-06d6-4a3c-b09b-ddab6d5b12bf.2c9c2e1af09b7145ad9bb22b2fc767da.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4d02b234-06d6-4a3c-b09b-ddab6d5b12bf.2c9c2e1af09b7145ad9bb22b2fc767da.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4d02b234-06d6-4a3c-b09b-ddab6d5b12bf.2c9c2e1af09b7145ad9bb22b2fc767da.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (816184743, 'Fresh Organic Mangoes, 3 lb Bag', 4.98, '732966936214', 'Savor the irresistible taste of these Fresh Organic Mangoes. Mangoes are an excellent fruit to add to your breakfast, lunch, dinner, or dessert. For breakfast, you can chop the mango up and add it to yogurt or a smoothie for a sweet treat that\'s sure to get your morning started on a high note. For dessert, you could use a mango to make a refreshing sorbet or put a tropical twist on a cobbler. You can also use it to make creamy milkshakes or delicious juices that everyone is sure to enjoy. The culinary possibilities are endless when you keep your kitchen stocked with Fresh Organic Mangoes.', 'Irresistibly sweet and juicy Fresh Organic Mangoes Delicious on their own or in a variety of recipes Make a creamy milkshake or a nutritious juice blend Add to yogurt or a smoothie Use to top your salad for a tropical twist', 'Unbranded', 'https://i5.walmartimages.com/asr/37420ed9-7e76-43f7-88cb-77799e5fd0dd.82fbb80503486826447ccc864c7c7dcd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/37420ed9-7e76-43f7-88cb-77799e5fd0dd.82fbb80503486826447ccc864c7c7dcd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/37420ed9-7e76-43f7-88cb-77799e5fd0dd.82fbb80503486826447ccc864c7c7dcd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (816377601, '1.5pt Tomato Julietgraperd Jiffy Logo', 2.88, '024719389508', 'short description is not available', '1.5pt Tomato Julietgraperd Jiffy Logo', 'Jiffy', 'https://i5.walmartimages.com/asr/bd2b7e57-59af-44e1-b224-3f00613c63c0_1.54a909efacefd4d14f1f0f230018cc77.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd2b7e57-59af-44e1-b224-3f00613c63c0_1.54a909efacefd4d14f1f0f230018cc77.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd2b7e57-59af-44e1-b224-3f00613c63c0_1.54a909efacefd4d14f1f0f230018cc77.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (817135702, '120pc Pto Ykn/red Ca', 494.4, '405540544807', 'short description is not available', '120pc Pto Ykn/red Ca', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (817288991, 'Mann\'s Creamy Roasted Garlic & Kale Bowl, 6.5oz', 4.98, '716519007842', 'Butter squash, kale,kohlrabi, and brown rice tossed in a creamy roasted garlic sauce provide the perfect layer of flavors.', 'Mann\'s Creamy Roasted Garlic & Kale Bowl, 6.5oz• Microwavable in just 3 minutes• 5 grams of protein• 310 calories• Vegetarian• Contains egg and Milk', 'Mann\'s', 'https://i5.walmartimages.com/asr/0b8e5466-65ec-442c-80b1-37ddbebd1bc9.9621ecd2aabe6bf58f02c84640419b32.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b8e5466-65ec-442c-80b1-37ddbebd1bc9.9621ecd2aabe6bf58f02c84640419b32.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b8e5466-65ec-442c-80b1-37ddbebd1bc9.9621ecd2aabe6bf58f02c84640419b32.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (817395859, 'Marketside Organic Fresh Spinach and Spring Mix, 5.5 oz', 2.66, '681131354790', 'Marketside Organic Spinach and Spring Mix is made with a wholesome medley of fresh baby lettuce, baby greens, and spinach leaves. This mix is packed fresh, washed, and ready to eat for your convenience. Use it to create your very own personalized salad tossed with your favorite vegetables, protein, nuts, croutons, and dressing. Use it as a topping on sandwiches, subs, or simply enjoy it as a healthy side. Enjoy fresh-from-the-farm taste with Marketside Organic Spinach and Spring Mix. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Spinach and Spring Mix, 5.5 oz Wholesome mix of fresh baby lettuce blend, baby greens, and baby spinach Use it to create your very own personalized salad or as a topping on sandwiches and subs Washed and ready to eat USDA certified organic', 'Marketside', 'https://i5.walmartimages.com/asr/411182fa-abaf-4d72-b6b0-7eed5867eaaf.86de4a51c3e281e7e965d018da1759dd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/411182fa-abaf-4d72-b6b0-7eed5867eaaf.86de4a51c3e281e7e965d018da1759dd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/411182fa-abaf-4d72-b6b0-7eed5867eaaf.86de4a51c3e281e7e965d018da1759dd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (817773702, 'Marketside Fresh Sweet Potato Cubes, 16 oz', 3.47, '681131305334', 'Marketside Sweet Potato Cubes are a delicious and easy side dish that is perfect when you\'re looking for a nutritious side that\'s quick to prepare; it steams right in the bag! These sweet potato cubes allow you all the convenience of your canned vegetables with no can openers or pantry-cramming necessary. Use them to whip up a delicious side, or incorporate them into your favorite meals from soups and casseroles to stir fries and more. With Marketside Sweet Potato Cubes, your friends and family can enjoy food without having to worry about artificial ingredients. For tasty, vegetables from a brand you can trust, Marketside Sweet Potato Cubes. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Contains 1 lb of delicious diced, fresh sweet potato cubes Perfect for a healthy side Incorporate into your favorite dishes from soups and casseroles to stir fries and more Steams right in the bag', 'Marketside', 'https://i5.walmartimages.com/asr/b248390d-42ee-4414-aab6-febc23c91f18.683b2e2f51387e2dfa3b9511a80648af.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b248390d-42ee-4414-aab6-febc23c91f18.683b2e2f51387e2dfa3b9511a80648af.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b248390d-42ee-4414-aab6-febc23c91f18.683b2e2f51387e2dfa3b9511a80648af.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (817820311, 'Freshness Guaranteed Fresh Black Seedless Grapes', 1.88, 'deleted_083477010321', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (817931619, 'Marketside Chopped Cauliflower Medley, 12 oz', 2.98, '681131221801', 'Marketside Chopped Cauliflower Medley is packed fresh, washed, chopped and ready to eat for your convenience. This Chopped Cauliflower Medley has a great fresh taste and is loaded with nutrients. This medley consists of cauliflower, broccoli, carrots and green onions. This medley is packaged in a convenient microwave safe bag that allows you to cook them in just three minutes. Try serving with ranch dressing or hummus for a tasty and healthy snack any time of the day. Enjoy them as a wholesome side or use them in all your favorite recipes. Season them with salt, pepper and garlic and serve with grilled steak, mashed potatoes and bread rolls for a hearty dinner. Dinner sides are made easy and healthy with Marketside Cauliflower Medley.', 'All natural Washed, chopped and ready to eat Contains chopped cauliflower, broccoli, carrots and green onion', 'Marketside', 'https://i5.walmartimages.com/asr/3aad45be-7444-4e94-8c58-510b0158782d_1.2061c2a6a0643b154ee48f1d05bff3b7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3aad45be-7444-4e94-8c58-510b0158782d_1.2061c2a6a0643b154ee48f1d05bff3b7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3aad45be-7444-4e94-8c58-510b0158782d_1.2061c2a6a0643b154ee48f1d05bff3b7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (818343845, 'Fuji Apples Bulk', 1.27, 'deleted_897049002122', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (818980242, 'California Grown Peaches, per Pound', 1.58, '400094561935', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (819110515, '75pc Orange Navel 8#', 7.97, '400094634387', 'short description is not available', '75pc Orange Navel 8#', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (819561812, 'Red Plumcot, Each', 3.97, 'deleted_813187010607', 'short description is not available', 'Jubilee Plumcot 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/58231102-f943-4142-8f9a-534efddceef3.38a6bf19674c86aee605c9a5033ef752.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58231102-f943-4142-8f9a-534efddceef3.38a6bf19674c86aee605c9a5033ef752.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58231102-f943-4142-8f9a-534efddceef3.38a6bf19674c86aee605c9a5033ef752.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (819592578, 'Marketside Kosher Ruby Grapefruit Segments with Monk Fruit, 64 oz Jar', 8.97, '681131161459', 'Marketside Ruby Grapefruit Segments are peeled and soaked in water and sweetened with monk fruit and stevia extract. This tasty citrus fruit is perfect for fruit cocktails, salsas, desserts, salads and can also be used as a garnish for meat and vegetable dishes. Enjoy them chilled for a refreshing snack that you can enjoy at anytime of the day. They have only 45 calories per serving and have no added sugars. They offer a nutritional benefit as they are a low calorie source of vitamin C. This large four pound container makes it easy to stock up on your favorite fruit. Enjoy a healthy and delicious snack with the wholesome taste of Marketside Ruby Grapefruit Segments.Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Kosher Ruby Grapefruit Segments With Monk Fruit, 64 Oz Jar Ruby grapefruit segments soaked in water and sweetened with monk fruit and stevia extract serve chilled for a refreshing snack High in vitamin C Net weight 4 pounds', 'Marketside', 'https://i5.walmartimages.com/asr/46ec7555-ef3f-48aa-80ed-313711f08bef_3.ffeb89ea972768045c9e7b6e09e59394.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/46ec7555-ef3f-48aa-80ed-313711f08bef_3.ffeb89ea972768045c9e7b6e09e59394.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/46ec7555-ef3f-48aa-80ed-313711f08bef_3.ffeb89ea972768045c9e7b6e09e59394.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (819856046, 'Marketside Butternut Squash, 12 oz Bag', 2.48, 'deleted_831129000790', 'Marketside Butternut Squash is all natural and packed fresh in a microwaveable bag. Steams in minutes and makes a great side dish or main ingredient to many recipes.', 'Marketside Butternut Squash, 12 oz', 'Marketside', 'https://i5.walmartimages.com/asr/d3b01b24-04b1-4fa1-9f3b-3367eee237f0_1.0b565097358daa53310049d065299221.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d3b01b24-04b1-4fa1-9f3b-3367eee237f0_1.0b565097358daa53310049d065299221.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d3b01b24-04b1-4fa1-9f3b-3367eee237f0_1.0b565097358daa53310049d065299221.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (820196952, 'GRAPE TOMATOES', 2.48, '684924010774', 'GRAPE TOMATOES', '', 'FINEST FLAVORS', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (820238897, 'Melon De Agua Sin Semilla 65#', 0.88, '405873138384', 'short description is not available', 'Melon De Agua Sin Semilla 65#', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (820397107, 'Lime Thyme Potato Tray', 1.97, '847597010469', 'short description is not available', 'Lime Thyme Potato Tray', 'Fresh Produce', 'https://i5.walmartimages.com/asr/dc89e5d9-d420-427c-9a10-9803262dd5f9.3bc3f863de35be83682cf3ae70ded93b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dc89e5d9-d420-427c-9a10-9803262dd5f9.3bc3f863de35be83682cf3ae70ded93b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dc89e5d9-d420-427c-9a10-9803262dd5f9.3bc3f863de35be83682cf3ae70ded93b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (820726107, 'Organic Celery Stalk, 1 Each', 1.76, '000651967714', 'Organic Celery Stalk, 1 Each', 'Organic Celery Stalk', 'Ocean Mist Farms', 'https://i5.walmartimages.com/asr/374bb4c7-55d8-4c8f-8921-8eb80062cf54_2.256b7909aa553e447a3da70753230918.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/374bb4c7-55d8-4c8f-8921-8eb80062cf54_2.256b7909aa553e447a3da70753230918.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/374bb4c7-55d8-4c8f-8921-8eb80062cf54_2.256b7909aa553e447a3da70753230918.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (820828966, 'Romaine Hearts', 3.14, 'deleted_405965264793', 'short description is not available', 'Romaine Hearts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (820964767, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094008669', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (820975721, 'Fresh Black Seedless Grapes', 1.88, 'deleted_014668790036', 'short description is not available', 'Fresh Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (821740554, 'Serrano Peppers, per lb', 0.05, '400094160251', 'short description is not available', 'Serrano Peppers', 'Fresh Produce', 'https://i5.walmartimages.com/asr/723b2cf6-0188-4a9d-b8ad-5903d902e073.916956e8cabd15269a6ce8a3e03a34f8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/723b2cf6-0188-4a9d-b8ad-5903d902e073.916956e8cabd15269a6ce8a3e03a34f8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/723b2cf6-0188-4a9d-b8ad-5903d902e073.916956e8cabd15269a6ce8a3e03a34f8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (821741848, 'Freshness Guaranteed Fresh Red Seedless Grapes', 1.98, 'deleted_841139100014', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (821785241, 'Whole Baby Bella Mushrooms, 16 oz', 4.08, 'deleted_678286271683', 'Kast-a-Way Lures 1/8oz - 3 Pack', 'Whole Baby Bella Mushrooms, 16 oz: Natural source of selenium, an antioxidant Excellent source of riboflavin Naturally fat free, cholesterol free and low in calories and sodium', 'Giorgio', 'https://i5.walmartimages.com/asr/218a38d7-575f-4d53-bec7-dcf2677fd424.6432ec0f59ef3443c8112db9f4f1ce87.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/218a38d7-575f-4d53-bec7-dcf2677fd424.6432ec0f59ef3443c8112db9f4f1ce87.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/218a38d7-575f-4d53-bec7-dcf2677fd424.6432ec0f59ef3443c8112db9f4f1ce87.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (821871748, 'White Onions, 2 Lb.', 1.94, 'deleted_885677610208', 'White Onions, 2 Lb.', 'White Onions 2 Lb Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (822719423, 'Small Avocado 6 Count Bag', 3.6, '689854126120', 'Small Avocado 6 count', 'Small Avocado 6 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/25aafd5f-3f05-4caa-9909-be8a64bd1151.d01a023dbc13ee1e5300912558a254ad.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25aafd5f-3f05-4caa-9909-be8a64bd1151.d01a023dbc13ee1e5300912558a254ad.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25aafd5f-3f05-4caa-9909-be8a64bd1151.d01a023dbc13ee1e5300912558a254ad.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (822868790, 'Fresh Green Seedless Grapes', 3.27, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (823323618, 'Jumbo White Onions Per Pound', 0.98, 'deleted_811289020012', 'short description is not available', 'Jumbo White Onions Per Pound', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c80f12e4-54d7-47e1-8f07-7af4daad7504_3.cbbe9e2c390c3fa57c617e44e4d56bc2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c80f12e4-54d7-47e1-8f07-7af4daad7504_3.cbbe9e2c390c3fa57c617e44e4d56bc2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c80f12e4-54d7-47e1-8f07-7af4daad7504_3.cbbe9e2c390c3fa57c617e44e4d56bc2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (823684439, 'Fresh Green Seedless Grapes, 2 Lb', 5.47, 'deleted_813577010538', 'short description is not available', 'Fresh Green Seedless Grapes, 2 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (823940120, 'Large Avocado 3 Count Bag', 4.48, '', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (824183397, '200pc Pto Ylw/red 5#', 824, '405536422249', 'short description is not available', '200pc Pto Ylw/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (824251743, '90pc Pto Rst 10# D1', 399.6, '405546808972', 'short description is not available', '90pc Pto Rst 10# D1', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (824261875, 'Kiku Apples 3 Lb Bag', 4.47, '840156101004', 'short description is not available', 'Kiku Apples 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (824430773, 'Fresh Grown Yellow Nectarines', 1.98, 'deleted_845792043787', 'short description is not available', 'Fresh Grown Yellow Nectarines', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/60ed4d0d-62c7-4cde-aa25-bfbcc183a3c2.1526a68655e085dc1d93b397c1cb6bd5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/60ed4d0d-62c7-4cde-aa25-bfbcc183a3c2.1526a68655e085dc1d93b397c1cb6bd5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/60ed4d0d-62c7-4cde-aa25-bfbcc183a3c2.1526a68655e085dc1d93b397c1cb6bd5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (824468092, 'Watermelon Seedless', 4.48, '400094920749', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (825044528, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094409602', 'short description is not available', 'Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (825192931, 'Nectarines 2lb', 4.88, '', 'short description is not available', 'Nectarines 2lb', 'Unbranded', 'https://i5.walmartimages.com/asr/ecee5f5a-6458-438a-b8c7-78a26974ae98.5492556a3e46d4abe66f9ffc0fb22665.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecee5f5a-6458-438a-b8c7-78a26974ae98.5492556a3e46d4abe66f9ffc0fb22665.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecee5f5a-6458-438a-b8c7-78a26974ae98.5492556a3e46d4abe66f9ffc0fb22665.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (825595553, 'Bowery Farming Arugula Mix Pesticide-Free, Locally Grown Salad Greens, 4oz', 2.98, '851536007618', 'Arugula Mix is popular for its peppery, zesty, and high-definition flavor. This salad blend adds a spicy and refreshing punch to your favorite salad, wrap, and vegetable bowl recipes.Bowery Farming grows positively tasty, fresh produce in a cleaner, more sustainable way: in local, indoor smart farms. Every Bowery leaf is grown and handled with care, without pesticides. Bowery\'s smart farms use less water & create less waste on less land. Because Bowery\'s farms are local, you can trust that your produce is freshly harvested, picked at peak freshness 365 days a year, and available on shelf in just a few days.', 'Bowery Farming Arugula Mix Pesticide-Free, Locally Grown Salad Greens, 4oz: 100% Pesticide-free 100% Locally grown 100% Fully traceable Indoor-grown Protected Produce Clean & ready to eat Non-GMO Project Verified Recycled Packaging', 'Bowery Farming', 'https://i5.walmartimages.com/asr/fec0367c-fb23-484f-8da6-144aca39a03e.4e9cb2e4f1885c839ec5fda9c7542e3d.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fec0367c-fb23-484f-8da6-144aca39a03e.4e9cb2e4f1885c839ec5fda9c7542e3d.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fec0367c-fb23-484f-8da6-144aca39a03e.4e9cb2e4f1885c839ec5fda9c7542e3d.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (825906052, '180pc Apple Fuji 3#', 894.6, '405665851330', 'short description is not available', '180pc Apple Fuji 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (826014545, 'Grape Tomato, 10 oz', 1.67, '860004084303', 'Fresh grape tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Grape Tomatoes are the perfect choice.', 'Grape Tomatoes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (826056438, '240pc On Ylw 3# Tf', 465.6, '405509691290', 'short description is not available', '240pc On Ylw 3# Tf', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (826177391, 'Red Potatoes, 10 Lb.', 6.94, 'deleted_030921080102', 'Red Potatoes, 10 Lb.', 'Red Potatoes 10 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (826203615, 'Pure Green Farms Baby Green and Red Leaf Lettuce Salad, 8 oz Clam Shell, Fresh', 4.48, '850014580070', 'Our hydroponic Baby Green and Red lettuce is a baby red and green bold lettuce mix full of flavor.', 'Keep Refrigerated, Greenhouse Grown in the USA, Pesticide Free', 'Pure Green Farms', 'https://i5.walmartimages.com/asr/b30eb81b-d0f1-4901-b67f-39aee5aa05b6.cfa51595acd7138d6841c1b08352d24e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b30eb81b-d0f1-4901-b67f-39aee5aa05b6.cfa51595acd7138d6841c1b08352d24e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b30eb81b-d0f1-4901-b67f-39aee5aa05b6.cfa51595acd7138d6841c1b08352d24e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (826229465, '50/50 Mix', 3.98, 'deleted_071279275062', 'Love the flavor, tenderness and variety in our Spring Mix? Want the extra nutrition that?s in our Baby Spinach? Now you can get the best of both salads in our 50/50 Mix', 'Ready to Eat Thoroughly Washed Non-GMO', 'Fresh Express', 'https://i5.walmartimages.com/asr/20a36802-8e22-499e-9d13-17d494e16304.e36f3a712eea59daa42e9936d1d6d24e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20a36802-8e22-499e-9d13-17d494e16304.e36f3a712eea59daa42e9936d1d6d24e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20a36802-8e22-499e-9d13-17d494e16304.e36f3a712eea59daa42e9936d1d6d24e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (826440861, 'Bay Baby Produce Bumpy Citrouille Pumpkin 1 ea', 3.18, '816237000832', 'Bay Baby Produce Pmpkn Ctrl Bmpy', 'Bay Baby produce USA. Pumpkin, Citrouille, Bumpy', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6d3835c5-b792-414f-a72d-193e1eea2f69.e20843d307945a667936dcbc91d5429f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6d3835c5-b792-414f-a72d-193e1eea2f69.e20843d307945a667936dcbc91d5429f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6d3835c5-b792-414f-a72d-193e1eea2f69.e20843d307945a667936dcbc91d5429f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (826495231, 'Fresh Red Grapefruit, 5 lb Bag', 5.92, 'deleted_605049465768', 'Sunkist Ruby Grapefruit pack a bold citrus flavor with its signature tartness that is sure to help kick start your day. Slice this grapefruit in half and enjoy it with your breakfast for a burst of juicy flavor. Sprinkle it with sugar for a touch of sweetness. This grapefruit is also perfect for juicing and enjoying any time of day; you can even use the juice as a mixer for your favorite cocktails or mocktails. Slice it up and serve with avocado and a tangy vinaigrette for a fresh and light appetizer at your next dinner party or use it to create stunning desserts like baked brown sugar glazed grapefruit or tangy grapefruit meringue pie. The possibilities are endless with the juicy, fresh taste of Sunkist Ruby Grapefruit.', 'Sunkist Ruby Grapefruit, 5 lbs: Juicy, deliciously tart and citrusy flavor Enjoy as a healthy breakfast side or use it to make yummy juice Use it to make a fresh, light avocado and grapefruit summer salad with a tangy vinaigrette Incorporate into your favorite desserts like grapefruit meringue pies and grapefruit cakes Comes in a 5 lb bag giving you plenty of grapefruit to enjoy', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c2090fc4-545e-4ae7-8609-d30b1fde36b6_1.14cf15c2e83ff8bab247392d43d2e384.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c2090fc4-545e-4ae7-8609-d30b1fde36b6_1.14cf15c2e83ff8bab247392d43d2e384.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c2090fc4-545e-4ae7-8609-d30b1fde36b6_1.14cf15c2e83ff8bab247392d43d2e384.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (826497108, 'Spice World Jumbo Garlic Bulb Whole Fresh, Each', 0.66, 'deleted_070969101360', 'Take your culinary creations to the next level with this flavorful fresh Jumbo Garlic. Garlic\'s signature flavors become caramelized and sweeter when cooked, making it a perfect accompaniment to many dishes such as pasta, shrimp, chicken, stews, and more. Garlic also goes great in creamed soups, on all types of roasts, in a variety of egg dishes, or used simply with sauteed or roasted vegetables. To prepare garlic for cooking, you\'ll need to break it up into individual cloves and peel the skin. Once you\'ve done this, you can mince the garlic by chopping it into fine pieces. Or take the flavor profile to the next level and slice the top off the bulb, drizzle with olive oil, wrap in foil, and roast in the oven. When cool, it makes a delicious spread for crusty French bread or a tasty addition to recipes. Spice up your next meal with a tasty clove of fresh Jumbo Garlic.', 'Jumbo Garlic, per Pound: Fresh garlic Ideal for pastas, stews, soups, and more Adds delicious flavor to a variety of meals Combine with other fresh herbs to create a gourmet meal Take your culinary creations to the next level', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4716545a-144b-4403-90ae-59957d9138e1.3a80708ae95b71cb102d0793e1d47bba.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4716545a-144b-4403-90ae-59957d9138e1.3a80708ae95b71cb102d0793e1d47bba.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4716545a-144b-4403-90ae-59957d9138e1.3a80708ae95b71cb102d0793e1d47bba.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (826616539, 'Aerofarms Micro Spicy Mix 2 Oz', 3.98, '815063020632', 'AeroFarms Micro Spicy Mix (2 oz) is a bold and zesty blend of spicy mustard greens, peppery arugula & juicy bok choy for an instant pop of heat. Add a heaping handful to any meal for a delicious and nutritious boost: dress up salads, sandwiches + wraps, boost soups, snacks + smoothies, & top pizza + takeout, or have the whole container as a bite-sized personal salad. In addition to bursting with flavor and crunch, our microgreens can contain more nutrition than mature leafy greens—about 5X more vitamins, according to the United States Department of Agriculture. AeroFarms is an award-winning vertical farming company passionately growing real food for elevated flavor and a brighter future for all. We select the most flavorful varietals of microgreens and baby greens, then perfect them in our indoor vertical farms for optimal quality and a unique, signature FlavorSpectrum™: our kale is sweet + tender, our arugula is perfectly peppery, and we’re harvesting millions of data points to make them even more delicious. Taste our difference.', 'Sustainably grown indoors No pesticides ever Non-GMO Verified No Washing Needed B Corporation Certified Grown using up to 95% less water, 99% less land than field farming 40% Less Plastic, Post-Consumer Recycled Trays OU Kosher', 'AeroFarms', 'https://i5.walmartimages.com/asr/ac33369b-97a8-4b95-acab-5109fb08c9fe.2e7474e445a7376b9081f19eff41b05d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac33369b-97a8-4b95-acab-5109fb08c9fe.2e7474e445a7376b9081f19eff41b05d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac33369b-97a8-4b95-acab-5109fb08c9fe.2e7474e445a7376b9081f19eff41b05d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (826730740, 'Fresh Whole Baby Bella Mushrooms', 0.87, '000000046480', 'Experience the fresh taste of our Whole Baby Bella Mushrooms. Baby Bella Mushrooms give you that same earthy taste you love about mushrooms, but take it up a notch with their firm, meaty texture. Similar in size and shape to white mushrooms, baby bellas are hardier and provide a deeper earthy taste. They\'re the same portabella mushrooms you\'ve enjoyed before, they\'ve just been harvested a few days earlier before becoming those large caps you\'ve seen in vegetarian and vegan cuisines. With their hearty, full-bodied taste, baby bellas are an excellent addition to beef, wild game, and vegetable dishes. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try out our Whole Baby Bella Mushrooms.', 'Fresh Whole Baby Bella Mushrooms tray: Naturally fat free Cholesterol free Low in calories, carbs and sodium Fresh and all natural Pre-cleaned Natural source of the antioxidant selenium Excellent addition to beef, wild game and vegetable dishes', 'Unbranded', 'https://i5.walmartimages.com/asr/3010d164-4cc1-43d1-b02a-a1678d73ec8d.45ce903d1a0d6fa027e4903213c5d8b4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3010d164-4cc1-43d1-b02a-a1678d73ec8d.45ce903d1a0d6fa027e4903213c5d8b4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3010d164-4cc1-43d1-b02a-a1678d73ec8d.45ce903d1a0d6fa027e4903213c5d8b4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (826955171, 'Fresh Red Seedless Grapes', 2.88, 'deleted_816426013650', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (827222453, 'Watermelon Seedless', 4.48, '400094205716', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (827233830, 'Gourmet212 Ricotta Cherry Peppers 10.5oz (12 Pack), Glass Jar', 112.95, '191822004182', 'Ricotta and smoked pepper came together and made a great compound within cherry peppers. Then, the surprising flavor of ricotta and smoked pepper stuffed cherry peppers showed up.? You can consume those peppers at your meals or present this delicious taste to your guests. Ricotta and smoke pepper stuffed cherry peppers are also able be great appetizers because of the fact that smoked peppers will increase your appetite and add flavor with its mild bitterness. Smoked peppers are also known as isot or Urfa red peppers. Our cherry peppers which are originally African are grown in our own field in Akhisar, Manisa. The sweet, sharp, and bitter taste that comes with the end makes the product very special. If you add some different tastes, you can fill the peppers with cheese, tuna, or vegetables. Our product does not contain any kind of preservatives. You must keep it in a cool and dry place and consume it within a few days after opening. If you have second thoughts, just try once. You will be amazed when you taste the savory pepper and cheese blend with the gentle touch of smoked pepper.', 'Gourmet212 Ricotta and Smoked Pepper Stuffed Cherry Peppers 10.5oz (12 Pack), Glass Jar, and Fresh. Ricotta and smoked pepper comes together and make a great compound within cherry peppers. The sweet, sharp, and bitter taste that comes with the end makes the product very special. You must keep it in a cool and dry place and consume it within a few days after opening. Our product does not contain any kinds of preservatives.', 'Gourmet212', 'https://i5.walmartimages.com/asr/6ce69a0a-dcdb-4de5-8916-ed54925031f5.f7be45ea45626f3c906b469fffa8a380.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6ce69a0a-dcdb-4de5-8916-ed54925031f5.f7be45ea45626f3c906b469fffa8a380.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6ce69a0a-dcdb-4de5-8916-ed54925031f5.f7be45ea45626f3c906b469fffa8a380.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (827370398, '12pcsldpiz O.cran 4', 9, '', 'short description is not available', '12pcsldpiz O.cran 4', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (827429997, 'Jumbo Yellow Onions', 0.88, '735718000034', 'short description is not available', 'Jumbo Yellow Onions', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/84543160-ac60-454a-bcd9-b921d96edd20_3.59a604fbc52265131f923c66a094a840.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/84543160-ac60-454a-bcd9-b921d96edd20_3.59a604fbc52265131f923c66a094a840.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/84543160-ac60-454a-bcd9-b921d96edd20_3.59a604fbc52265131f923c66a094a840.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (827645292, 'Chilean Grown Yellow Peaches, per Pound', 1.58, '400094137529', 'Chilean Grown Yellow Peaches, per Pound', 'Fresh Chilean Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (828013492, '150pc Pto Red 5# Or', 865.5, '405518369821', 'short description is not available', '150pc Pto Red 5# Or', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (828106127, 'GRAPE TOMATO', 2.68, '333836655855', 'GRAPE TOMATO', '', '', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (828625046, 'Sunset Sugar Bombs Grape Tomatoes on the Vine, 12 oz', 4.98, 'deleted_057836021891', 'Flavor Rocks™', 'Sunset Sugar Bombs! Grape Tomatoes on the Vine, 12 oz: Wholesome, versatile, and delicious Greenhouse grown for a sweet, juicy flavor Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and snacking 12 oz per package Delicious and nutritious', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/04b11f7c-04b7-497c-b4d8-020037dca9ce.1e1738f97e5c65d29ea4eece36d6e4b4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/04b11f7c-04b7-497c-b4d8-020037dca9ce.1e1738f97e5c65d29ea4eece36d6e4b4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/04b11f7c-04b7-497c-b4d8-020037dca9ce.1e1738f97e5c65d29ea4eece36d6e4b4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (829097095, 'Yellow Flesh Peaches, per Pound', 1.58, '400094711668', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (829329648, '192pc On Swt 3# Pe', 788, '405534206681', 'short description is not available', '192pc On Swt 3# Pe', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (829634260, 'Marketside Sugar Snap Peas 16oz', 5.98, 'deleted_854026006351', 'short description is not available', 'Marketside Sugar Snap Peas 16oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (829835324, 'Red Seedless Grapes 24 oz Bag, Fresh', 3.94, '052901635096', 'Treat yourself to the delicious, juicy flavor of Fresh Red Seedless Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the fresh taste of Fresh Red Seedless Grapes.', 'Fresh Red Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4e760aff-5b4d-4b6e-8318-ae827b014b02.17d45450028262b99470e5bccd7bfb28.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4e760aff-5b4d-4b6e-8318-ae827b014b02.17d45450028262b99470e5bccd7bfb28.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4e760aff-5b4d-4b6e-8318-ae827b014b02.17d45450028262b99470e5bccd7bfb28.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (829937436, 'Fresh Multi Color Grapes, 3 Lb', 5.98, '850550002258', 'Experience the burst of flavors with our Fresh Multi Color Grapes. This 3 lb package offers a variety of vibrant colors and juicy tastes. Perfect for snacking on the go, adding to your favorite fruit salad, or as a refreshing addition to any meal. Our grapes are carefully selected to ensure the highest quality and freshness. Whether you\'re enjoying them as a healthy snack or including them in a recipe, these grapes are sure to delight. Enjoy the natural goodness and freshness that comes with each grape in this selection.', 'Fresh and delicious multi-color grapes 3 lb package for convenience and value Excellent source of vitamins and antioxidants. Perfect for snacks, salads, and recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7170b1ca-0ab2-4747-bac3-eabdd2cde285.9719fb418bf88d69a85e654fda14a52b.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7170b1ca-0ab2-4747-bac3-eabdd2cde285.9719fb418bf88d69a85e654fda14a52b.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7170b1ca-0ab2-4747-bac3-eabdd2cde285.9719fb418bf88d69a85e654fda14a52b.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (829981541, 'Freshness Guaranteed Fresh Black Seedless Grapes', 1.83, '', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (830130800, '175pc On Swt 4# Tm', 574, '405524834221', 'short description is not available', '175pc On Swt 4# Tm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (830674146, 'Goverden Classic Guacamole 8oz', 4.43, '850002858020', 'short description is not available', 'Freshness Guaranteed Classic Guacamole 8oz', 'GoVerden', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (831334654, 'Fresh Gala Apples, 3lb', 4.67, 'deleted_033383027746', 'Gala fresh apples are sweet and mild with a subtle floral aroma making them perfect for breakfast, lunch, dinner, and dessert. Perfect for snacking, they have a creamy white flesh with low acidity. Chop the apples up and add them to a salad with walnut, mixed greens, and a poppy seed vinaigrette for a crunchy delicious salad that you can enjoy for lunch or dinner. Add it to your favorite smoothie or juice blend for a morning pick me up to get your day started right. Serve with a dollop of peanut butter and enjoy as a healthy snack that both kids and adults will love.', 'Sweet and mild with a subtle floral aroma Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidity', 'Fresh', 'https://i5.walmartimages.com/asr/af429a77-d9b3-492c-bdce-a37a1352127d.cb79424e07c374f20a2a09991c28b4bd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af429a77-d9b3-492c-bdce-a37a1352127d.cb79424e07c374f20a2a09991c28b4bd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af429a77-d9b3-492c-bdce-a37a1352127d.cb79424e07c374f20a2a09991c28b4bd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (831570632, '3# Bag Lemons', 3.92, '033383105024', 'short description is not available', '3# Bag Lemons', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (832291420, 'Microwave in Bag Red Potatoes, 1 Lb.', 2.1, '033383004761', 'Microwave in Bag Red Potatoes, 1 Lb.', 'Microwave In Bag Red Potatoes Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (832399624, 'Cucumber Salad/pickling', 3.68, 'deleted_605951027009', 'short description is not available', 'Cucumber Salad/pickling', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (833519180, 'Marketside Organic Honeycrisp Apples 2 Lb Bag', 7.48, 'deleted_813200015183', 'short description is not available', 'Marketside Organic Honeycrisp Apples 2 Lb Bag', 'Marketside', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (833611362, 'Watermelon Radish 1lb Bag', 3.48, '037842054762', 'This large radish is beige to green with occasional pink blush on the outside. The flesh inside is bright pink, giving it a watermelon-like appearance when cut. This tender-crisp cousin of the daikon radish is peppery with a hint of sweetness.', 'Watermelon Radish 1lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (833718310, 'Fresh Roma Tomato, Each', 0.98, 'deleted_070740060596', 'With Fresh Roma Tomatoes from Walmart, it\'s easy to make a wholesome, delicious meal. Roma tomatoes are a fresh produce ingredient for whipping up a variety of wonderful dishes. You can use them to create a zesty tomato sauce for stirring into a homemade pasta dish, crush them up to make a delightful Roma tomato bruschetta, or simply enjoy them on their own as a nutritious snack or as a party platter option for dipping in your favorite vegetable dipping sauce. If you\'re feeling a classic tomato dish, Roma tomatoes can even lend themselves in making a comforting and appetizing tomato soup or a flavorful salsa. However you choose to use them, each Roma tomato will add stunning flavor to your meal. Just find the recipe and experience the tasty results for yourself! Elevate your recipes with Roma Tomatoes.', 'Roma Tomato, Each: Wholesome, versatile, and delicious Rich, juicy flavor in each bite Ideal ingredient for a variety of dishes Use to make pasta sauce, tomato soup, or fresh salsa Make a tasty pesto or bruschetta to serve at your next dinner party Delicious and nutritious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1816695f-3a84-418d-96c1-86521eca7d38_2.48b201b3f23d17a6d8c5bb80b28020d1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1816695f-3a84-418d-96c1-86521eca7d38_2.48b201b3f23d17a6d8c5bb80b28020d1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1816695f-3a84-418d-96c1-86521eca7d38_2.48b201b3f23d17a6d8c5bb80b28020d1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (833945304, 'Collard Greens 2# Bag', 4.34, 'deleted_060556606026', 'short description is not available', 'Collard Greens 2# Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (834271776, 'Kale Greens', 1.48, 'deleted_885460000247', 'short description is not available', 'Kale Greens', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (834529103, 'Fresh Green Seedless Grapes, per lb', 2.12, 'deleted_814596010028', 'Treat yourself to the delicious, juicy flavor of Fresh Green Seedless Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be creative, you can freeze them and use them as ice cubes that won\'t melt and release water into your favorite drinks.', 'Fresh Green Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes Whole and healthy option for a natural treat', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f1ef697a-804a-4042-96b6-64672e5960cf.e1492c4e2d9e92acf4bc439400ad1125.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f1ef697a-804a-4042-96b6-64672e5960cf.e1492c4e2d9e92acf4bc439400ad1125.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f1ef697a-804a-4042-96b6-64672e5960cf.e1492c4e2d9e92acf4bc439400ad1125.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (834694586, 'Fresh Organic White Sliced Mushrooms, 8 oz', 3.69, '678286889017', 'Experience the fresh taste of Organic White Sliced Mushrooms. If you\'re looking for a traditional mushroom with a mild earthy taste, white mushrooms are just what you need. They\'ve remained the most popular mushroom for several decades and although all mushrooms are versatile, white mushrooms are the most versatile of them all. Pre-cleaned and sliced, they are perfect for adding to stir-fries, sauces, soups, pizzas, salads, and stews to create culinary works all your own. They are free of fat and cholesterol and are low in calories and sodium. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try out Organic White Sliced Mushrooms.', 'Organic White Sliced Mushrooms, 8 oz: 8-ounce package of organic white sliced mushrooms Naturally fat-free Cholesterol-free Low in calories, carbs and sodium Fresh and all natural Natural source of the antioxidant selenium Great for salads, pizzas, and much more', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/59cd9ef0-6414-4aa7-844c-199392cae9b0_5.28eeaa8513e26f74f689af963a0e191b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59cd9ef0-6414-4aa7-844c-199392cae9b0_5.28eeaa8513e26f74f689af963a0e191b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59cd9ef0-6414-4aa7-844c-199392cae9b0_5.28eeaa8513e26f74f689af963a0e191b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (835040558, 'Fresh Bulk Slicing Tomatoes', 1.98, 'deleted_816426010840', 'short description is not available', 'Fresh Bulk Slicing Tomatoes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (835043229, 'Fieldpack Unbranded Organic Celery Heart', 2.76, '811944022542', 'short description is not available', 'Fieldpack Unbranded Organic Celery Heart', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/19fcc5f8-1a30-4dfb-ba02-e62a23195fcd.05c8869d3c395d0e6b3b21dbfbfdde22.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19fcc5f8-1a30-4dfb-ba02-e62a23195fcd.05c8869d3c395d0e6b3b21dbfbfdde22.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19fcc5f8-1a30-4dfb-ba02-e62a23195fcd.05c8869d3c395d0e6b3b21dbfbfdde22.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (835119887, '180pc Apl Granny 3#', 822.6, '405665853464', 'short description is not available', '180pc Apl Granny 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (835392846, 'Valencia Oranges, 4 Lb.', 6.58, 'deleted_036315110509', 'Valencia Oranges, 4 Lb.', 'Valencia Oranges 4 Lb Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (835523658, 'Fresh Black Sable Seedless Grapes 1lb', 29.88, '', 'short description is not available', 'Fresh Black Sable Seedless Grapes 1lb', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (835860707, 'Lemons, 3 ct', 1.18, '072240540554', '3ct Lemons', 'Lemons, 3 ct', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b23c7185-7d92-4cf6-9622-06b039baa4c7_3.5aeb07b705563ea8a7c3081c9b842d64.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b23c7185-7d92-4cf6-9622-06b039baa4c7_3.5aeb07b705563ea8a7c3081c9b842d64.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b23c7185-7d92-4cf6-9622-06b039baa4c7_3.5aeb07b705563ea8a7c3081c9b842d64.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (836216240, 'Butternut Squash', 1.18, 'deleted_814563016657', 'short description is not available', 'Butternut Squash', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (836303521, 'Marketside Organic Red Potatoes Whole Fresh, 3 lb Bag', 5.28, '856417005493', 'When you\'re wondering what to have for supper, pick up some Marketside Organic Red Potatoes. You can use them to make a delicious and nutritious potato salad. They\'ll add a vibrant color to your meals with their red skins. These non-GMO potatoes will bake nicely and make a filling side to go with a grilled steak. They\'re certified organic by CCOF, so you can be confident they were grown in a pesticide-free environment. These fresh produce potatoes are all-natural and have not been genetically altered. They\'re rich in vitamins and minerals, so you will feel good feeding them to your family. Pick up this 3-pound bag of Marketside Organic Red Potatoes today.', 'Marketside Organic Red Potatoes, 3 pound Bag Plenty of potatoes for your next meal or gathering Premium potatoes with a red skin color Great for baking, frying, roasting, and more Delicious fresh produce', 'Marketside', 'https://i5.walmartimages.com/asr/9219d9f9-5447-45fb-9f57-03fcabb9c637.6cc8e59e73f6184f37832127f02a1a76.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9219d9f9-5447-45fb-9f57-03fcabb9c637.6cc8e59e73f6184f37832127f02a1a76.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9219d9f9-5447-45fb-9f57-03fcabb9c637.6cc8e59e73f6184f37832127f02a1a76.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (836324255, '125pc Pto Rst Jmb 8#', 802.5, '405546022408', 'short description is not available', '125pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (836396432, 'Serrano Pepper, 4oz', 1.58, 'deleted_857419005450', 'Enhance your meals with the delicious flavor of Serrano Peppers. Naturally low in calories, fat, and cholesterol, this vegetable is a great source of vitamins C, B6, and A, as well as iron and magnesium. Serrano peppers have a bright and biting flavor that enhances a variety of recipes. Make a zesty pico de gallo or salsa using fresh serrano peppers, add to a sweet peach jam to make a glaze for hot wings, or add to eggs for out of this world huevos rancheros. You can even add some diced serrano peppers and cheese to cornbread batter for a delectable chile cheese cornbread that will have everyone asking for seconds. Lunches and dinners are more scrumptious when fresh Serrano Peppers are part of the meal.', 'Serrano Pepper, 4oz bag Naturally low in calories Rich in Vitamins C, B6 and A Versatile and Delicious Fresh Whole Serrano Pepper', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b3ca1a55-2be4-495b-8743-9d32a1d6f141.d3467f5ce6bca1ef448523b56dceb495.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3ca1a55-2be4-495b-8743-9d32a1d6f141.d3467f5ce6bca1ef448523b56dceb495.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3ca1a55-2be4-495b-8743-9d32a1d6f141.d3467f5ce6bca1ef448523b56dceb495.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (836658379, 'That\'s Tasty Organic Butter Lettuce', 2.98, 'deleted_768573710039', 'That\'s Tasty Organic Butter Lettuce gives you truly delicious organic flavor that you can trust. This lettuce is hydroponically grown in Virginia and is USDA certified organic. It comes an entire head of lettuce with the roots, so you can see how fresh this lettuce really is. Use it to make delicious salads topped with your favorite croutons, nuts, cheese, vegetables, protein and dressing for a fresh taste in every bite. Use it to top sandwiches and burgers or make delicious lettuce wraps. Fill the wraps with hummus and vegetables for a vegetarian option or use your favorite deli meat slices, condiments and vegetables for healthier lunch alternative. Enjoy freshness you can see with That\'s Tasty Organic Butter Lettuce.', 'That\'s Tasty Organic Butter Lettuce: Pure USDA certified organic flavor Hydroponically grown in Virginia Contains 1 full head of lettuce with the roots for freshness you can see Make fresh salads with your favorite toppings, proteins and dressing Top burgers and sandwiches or make tasty lettuce wraps', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/71c22c77-7213-4410-98d2-1682555eb586_1.a51045197f51cf33e27fd29b8e05cdae.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71c22c77-7213-4410-98d2-1682555eb586_1.a51045197f51cf33e27fd29b8e05cdae.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/71c22c77-7213-4410-98d2-1682555eb586_1.a51045197f51cf33e27fd29b8e05cdae.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (836733428, 'Freshness Guaranteed Watermelon Large', 4.37, '262831000004', 'Freshness Guaranteed fresh cut Watermelon in Plastic Tray ready to be opened and shared. It includes a large sized amount of fresh sweet watermelon', 'Freshness Guaranteed Watermelon Large', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (836800783, 'Fresh Fuji Apples, 3 lb Bag', 4.99, 'deleted_887434007047', 'This is a wine-friendly apple, making it a good choice for recipes served as an appetizer or main course accompanied by wine. It pairs particularly well with Riesling, Chianti, Merlot and Pinot Noir wines', 'Super sweet Fresh and sophisticated flavor Hints of spice and savory earth character Juicy and aromatic Healthy snack', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/67b94e83-d24d-4f31-9e4a-e042839eb47f.b840e4c4b78508dda09e2f543b1329dd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/67b94e83-d24d-4f31-9e4a-e042839eb47f.b840e4c4b78508dda09e2f543b1329dd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/67b94e83-d24d-4f31-9e4a-e042839eb47f.b840e4c4b78508dda09e2f543b1329dd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (836832430, 'Fresh Green Beans', 1.68, 'deleted_846449000122', 'short description is not available', 'Fresh Green Beans', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/7756ccfc-edd6-4748-9a20-d71e39292b43_3.67c217703b48a93b85c4843174c2f179.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7756ccfc-edd6-4748-9a20-d71e39292b43_3.67c217703b48a93b85c4843174c2f179.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7756ccfc-edd6-4748-9a20-d71e39292b43_3.67c217703b48a93b85c4843174c2f179.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (836928947, 'Good Foods Pineapple Poblano Guacamole', 3.56, '736798901907', 'short description is not available', 'Guacamole, Pineapple Poblano Sweet & spicy deliciousness. Hand-scooped hass avocados. Gluten free. No artificial colors or flavors. www.goodfoods.com. Per Serving: 40 calories; 3 g fat.', 'Unbranded', 'https://i5.walmartimages.com/asr/681c9d8e-b9d3-4b29-b01e-ccaade2b8a2c.cffc0404433a7eeaeb08343a742284a9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/681c9d8e-b9d3-4b29-b01e-ccaade2b8a2c.cffc0404433a7eeaeb08343a742284a9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/681c9d8e-b9d3-4b29-b01e-ccaade2b8a2c.cffc0404433a7eeaeb08343a742284a9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (837150717, 'New Mexico Hatch Chili HOT! 2lb Bag', 3.94, '669212265272', 'Unique flavored pepper grown in the hatch valley of New Mexico. For amazing flavor, simply roast, peel and add to your favorite recipe. Perfect at breakfast in your burrito or omelette. Spice up your salsa and quacamole or add to your favorite dinner dish such as burgers, pizza, enchiladas, and much more.', 'New Mexico Hatch Chili Pepper', 'Fresh Produce', 'https://i5.walmartimages.com/asr/73225738-58e8-4de0-af06-f4a3e69e82da_1.de688b32640d5c837e71d458fce176d2.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/73225738-58e8-4de0-af06-f4a3e69e82da_1.de688b32640d5c837e71d458fce176d2.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/73225738-58e8-4de0-af06-f4a3e69e82da_1.de688b32640d5c837e71d458fce176d2.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (837171820, 'Watermelon Seedless', 4.98, '400094408490', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (837756933, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094763889', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (837849560, '200pc Pto Rst 5# Wd', 648, '405519018377', 'short description is not available', '200pc Pto Rst 5# Wd', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (838007809, 'Watermelon Seedless', 4.48, '405504835866', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (838017712, 'Mini Cucumber Pk', 2.48, 'deleted_626074004456', 'short description is not available', 'Mini Cucumber Pk', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (838887788, 'Mann\"s Organic Broccoli & Carrots', 3.46, '032601063009', 'Two of America?s favorites! These nutritional treats are full of vitamins A & C and great for snacking. You can also steam them in our microwaveable bag! Quick and convenient?with little mess to clean up.', 'Mann\"s Organic Broccoli & Carrots', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c5789be8-d27f-4b49-963f-eb208a45b3a1_1.241bea9fe5bee1dd6918f2f2c32a9198.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5789be8-d27f-4b49-963f-eb208a45b3a1_1.241bea9fe5bee1dd6918f2f2c32a9198.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c5789be8-d27f-4b49-963f-eb208a45b3a1_1.241bea9fe5bee1dd6918f2f2c32a9198.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (839095813, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_400094172377', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (839892157, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094424933', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (840100526, 'Yellow Flesh Peaches, per Pound', 1.58, '400094633397', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (840494738, 'Delallo Lemon Feta Antipasti, 7 oz, Refrigerated, Plastic Tub', 4.18, '072368394336', 'Delallo Lemon Feta Antipasti is a tasty Greek-inspired dish featuring tangy feta cheese and pitted olives. This ready-to-eat antipasti comes in a refrigerated plastic tub, perfect for quick snacking or adding to Mediterranean recipes. With zesty pepperoncini and colorful peppers in a lemon marinade, it\'s a burst of flavor in every bite. Enjoy this delicious, vibrant salad that\'s ideal for any occasion. Keep it fresh in your fridge and enjoy the beloved tastes of Greece with ease. Brand: Delallo. Food Condition: Refrigerated.', 'Well-rounded antipasto medley featuring cubes of briny feta cheese. Stars beloved briny, tart, tangy, zesty and lemony Greek flavors. Pitted olives for convenient snacking, entertaining and cooking. Refrigerated for freshness. Presented in a convenient plastic tub. Ready to eat; just open and enjoy.', 'DELAIO', 'https://i5.walmartimages.com/asr/4d825155-7ee9-467c-8309-ee9133e05cf9.625f64e89323ac84e094d9a1255895a3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4d825155-7ee9-467c-8309-ee9133e05cf9.625f64e89323ac84e094d9a1255895a3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4d825155-7ee9-467c-8309-ee9133e05cf9.625f64e89323ac84e094d9a1255895a3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (840833191, 'California Grown Peaches, per Pound', 1.58, '400094111628', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (840913848, 'Dried Guajillo Chili, 3 Oz.', 2.98, '803944301178', 'Dried Guajillo Chili, 3 Oz.', 'Dried Guajillo 3 Oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (841038964, 'Calavo Bonus Bag 5ct Large AvoMX', 2.78, 'deleted_070740192006', 'no', 'Large Avocado 5 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (841045244, '192pc On Swt 3# Pe', 660.48, '405532616857', 'short description is not available', '192pc On Swt 3# Pe', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (841299907, 'Simplot Harvest Fresh Avocados - Avocado Dices, 2 Pound -- 12 per case.', 219.32, '', 'Features: Large, Satisfying Dices Of Rich Hass Avocado;Consistent Pricing, Quality And Availability All Year;Elevate Your Menu And Check Average;Say Goodbye To Labor And Waste;Satisfy Patrons Looking For Healthy Options', 'Simplot Harvest Fresh Avocados - Avocado Dices, 2 Pound -- 12 per case.', 'Simplot', 'https://i5.walmartimages.com/asr/c779c44f-6061-430d-90fa-1897e2835ae2.2b38ee507f8b0c1c34f7378165daf6f8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c779c44f-6061-430d-90fa-1897e2835ae2.2b38ee507f8b0c1c34f7378165daf6f8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c779c44f-6061-430d-90fa-1897e2835ae2.2b38ee507f8b0c1c34f7378165daf6f8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (841360435, 'Green Bell Pepper', 0.68, '857610005556', 'short description is not available', 'Green Bell Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acc4e0b0-3a75-4d28-9510-abec0362c30c.7df5d073559cf7e400de787628aa13fb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (841516423, 'Bi-Color Seedless Grapes, 2 lb', 13.96, '850859002348', 'short description is not available', 'Bi-Color Seedless Grapes, 2 lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ac20bc3f-2c7e-43f8-a259-b6313b4f7d2b_1.f9875210e261388818a4ed495a62d0fc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (841599985, 'Bulk Collard Greens', 0.98, 'deleted_813098020023', 'short description is not available', 'Bulk Collard Greens', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (841648078, 'Yellow Flesh Peaches, per Pound', 1.58, '400094167885', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (841832654, 'NY SPICE SHOP Sour Tamarind Whole - 1 Pound - Tamarind Pods - Thai Sour Tamarind - Tamarind Candy', 12.99, '768253238365', 'NY Spice Shop sour tamarind is light brown in color sweet, tangy, and sour in taste. There are two special kinds of tamarinds “Sweet Tamarinds & Sour Tamarinds”, both are available at our NY Spice Shop. It is used to add in biryani, sweet and sour rice, and a variety of chickpeas chats. It is a strong base for varieties of chutneys, squashes, BBQ stew, and sauces. Sour tamarind is also used in Thai and other cuisines.', 'All-Natural Whole Tamarind Pods – NY Spice Shop sour tamarind pods are covered the fresh, delicious, edible fruit which is packed with healthy fibers, and antioxidants. Versatile Meal Enhancer – Our tamarind can be used for creating Thai pasts, Mexican candies or Agua Fresca, traditional Asian meals, amazing curry, Malaysian satay, and other exciting options friends and family will enjoy. HEALTHY & DELICIOUS – Sour tamarind chutney is naturally sour, no sugar added whole pods can make savory dishes and snacks. Delivered Fresh in Resealable Bag –Our tamarind comes in 3lbs. bags with a resealable top to ensure they’re fresh and taste great from start to finish. And because we’re focused on natural, organic ingredients you can trust they’re perfect. Trusted Quality in Every Bite – We want to make your meals, snacks, and sweet treats more memorable which is why we carefully source all our products to ensure they reach you ready to eat and with a stable shelf life.', 'NY Spice Shop', 'https://i5.walmartimages.com/asr/fffd7d96-5659-4f2a-b05c-8b9ee5a77595.1291c83787155c61e6f63ab47936a30c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fffd7d96-5659-4f2a-b05c-8b9ee5a77595.1291c83787155c61e6f63ab47936a30c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fffd7d96-5659-4f2a-b05c-8b9ee5a77595.1291c83787155c61e6f63ab47936a30c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (841977203, 'Marketside Organic Celery Hearts', 5.16, 'deleted_033383653266', 'short description is not available', 'BSKVC FARMS CLRY HRT ORGNC CRTFD ORGNC BY CF BAG FRESH VEGETABLE AND HERB', 'Marketside', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (842021999, '175pc Pto Red 5# Ff', 1009.75, '405507410343', 'short description is not available', '175pc Pto Red 5# Ff', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (842280555, 'Taylor Farms Mozzarella & Tomato Salad Bowl, 6.1 oz, Fresh', 2.98, '030223060314', 'Try this fresh Mozzarella and Tomato Salad from Taylor Farms. This on-the-go deli salad bowl will fill you up with six grams of protein. It contains crisp romaine lettuce, juicy grape tomatoes, mozzarella cheese, and a balsamic vinaigrette dressing. With no synthetic colors or high fructose corn syrup, it has only 150 calories per serving. This 6.1-ounce salad includes a fork and is ready to eat. Keep refrigerated until ready to enjoy. Reach for the Taylor Farms Mozzarella and Tomato Bowl that is sure to be your new favorite salad on the go.', 'Taylor Farms Mozzarella and Tomato Salad Bowl is ready when you are Crisp romaine lettuce, juicy grape tomatoes, mozzarella cheese, and a balsamic vinaigrette dressing Includes a fork 150 calories per 6.1-ounce serving No synthetic colors or high fructose corn syrup 6 grams of protein per serving Fresh produce is washed and ready to eat Keep refrigerated until ready to enjoy', 'Taylor Farms', 'https://i5.walmartimages.com/asr/28476927-aa04-4173-90ef-b370cf7d1fc7.91b4201b613bb7d3c5fd2e868f625d3c.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28476927-aa04-4173-90ef-b370cf7d1fc7.91b4201b613bb7d3c5fd2e868f625d3c.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28476927-aa04-4173-90ef-b370cf7d1fc7.91b4201b613bb7d3c5fd2e868f625d3c.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (842432737, 'Goya Purple Corn Beverage, Chicha Morada, 15 Oz', 7.5, '041331050531', 'This corn is grown in the Andes region on Peru, it is used in chicha morada (a drink made by boiling purple corn with pineapple, cinnamon, clove, and sugar) and mazamorra, a type of pudding. The kernels of Purple Corn have long been used by the people of the Peruvian Andes to color foods and beverages, a practice just beginning to become popularized in the industrialized world. Besides its use as food and dye, purple corn is thought to have many health benefits', 'Goya Purple Corn Beverage, Chicha Morada, 15 Oz', 'GOYA', 'https://i5.walmartimages.com/asr/5d80c736-54ea-4dc7-b64d-4cc26e1bfdab_2.41b63fcaec73d79bbf1bb2eb70cc6794.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d80c736-54ea-4dc7-b64d-4cc26e1bfdab_2.41b63fcaec73d79bbf1bb2eb70cc6794.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d80c736-54ea-4dc7-b64d-4cc26e1bfdab_2.41b63fcaec73d79bbf1bb2eb70cc6794.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (842782601, 'Regent Apples 5 Lb Bag', 4.92, '033383046679', 'short description is not available', 'Regent Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (842931823, 'Fresh Manzano Banana, Each', 1.24, '821783042335', 'Our fresh bananas are made with organic ingredients and are the perfect healthy snack! These sweet and delicious fruits are filled with essential vitamins and minerals that provide energy and help maintain a balanced diet. Enjoy them as a quick on-the-go snack or add them to smoothies and desserts for a delicious treat. Trust us, you won\'t be disappointed!', 'Taste is mildly sweet and - Whole Manzano bananas are a type of fresh produce that can be enjoyed in their natural, unprocessed form, offering a delightful and unique Taste experience compared to standard bananas. As a fresh produce item, Manzano bananas retain their full nutritional value, providing essential vitamins and minerals that contribute to overall health and well-being. When consumed Whole and fully ripe, Manzano bananas have a sweet, tangy Taste with hints of apple and strawberry flavors, making them a delicious and satisfying snack or addition to various recipes. tangy. This banana variety is compact and half the size of a regular banana which makes great for travel and day snacks.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9fd6c02a-7106-4ea8-9fa9-1f62d7c843e6.662ea636f6591b10adc33844938ee647.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9fd6c02a-7106-4ea8-9fa9-1f62d7c843e6.662ea636f6591b10adc33844938ee647.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9fd6c02a-7106-4ea8-9fa9-1f62d7c843e6.662ea636f6591b10adc33844938ee647.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (843278705, 'Fresh Organic Beefsteak Tomato, 2 Pack', 2.46, '078742051123', 'Create something wholesome and delicious with Fresh Organic Beefsteak Tomatoes. These ripe tomatoes are the ideal fresh produce ingredient for a variety of tasty dishes. Use them to make a zesty tomato sauce for a pasta dish, try using them to make a tomato bruschetta, or simply enjoy each of them on their own as a nutritious snack. They would make a comforting and appetizing tomato soup and a flavorful salsa. You could also serve them at your next party alongside your favorite vegetable dipping sauce or add them to your famous guacamole recipe. However you choose to use them, these tomatoes will add flavor and taste to any meal. Elevate your recipes with Fresh Organic Beefsteak Tomatoes.', 'Fresh Organic Beefsteak Tomato, 2 Pack Wholesome, versatile, and delicious Rich, juicy flavor in each bite Ideal ingredient for a variety of dishes Use to make pasta sauce, tomato soup, or fresh salsa Make a tasty pesto or bruschetta to serve at your next dinner party Delicious and nutritious fresh produce', 'Fresh Produce', 'https://i5.walmartimages.com/asr/3b3c245b-321c-442c-ad0e-7be6f57a0cd4.49cb3aad993bd0eb1c6ebc7267108c77.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3b3c245b-321c-442c-ad0e-7be6f57a0cd4.49cb3aad993bd0eb1c6ebc7267108c77.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3b3c245b-321c-442c-ad0e-7be6f57a0cd4.49cb3aad993bd0eb1c6ebc7267108c77.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (843464442, 'Fresh Red Seedless Grapes', 2.48, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (844307654, 'City Farms Spring Mix Clam 4oz', 6.43, '850010794013', 'short description is not available', 'City Farms Spring Mix Clam 4oz', 'Fresh City Farms', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (844380568, 'Idared Apples 5 Lb Bag', 4.92, '033383085524', 'short description is not available', 'Idared Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (844665579, 'Fresh Large Hass Avocado Bag, 3- 4 Count', 6.8, '849351000068', 'Large Whole Hass Avocados aren’t just great-tasting fresh produce items, but they are a nutrient-dense fruit that can be enjoyed throughout the year. Hass avocados are a versatile ingredient with a creamy texture and mild flavor that can be used in many different types of recipes and dishes that are perfect for enjoying at barbecues and outdoor gatherings with friends and family during the summer. Use avocados in flavorful recipes that everybody can share and enjoy while being together outside. Try avocados in individual Mexican food items like tacos or burritos, as part of appetizers like avocado crostini, or in a fresh guacamole or avocado dip so everybody can dip tortilla chips into something delicious. The possibilities are deliciously endless. Not only is a large avocado a great ingredient to use in numerous ways, but it is also a healthy food that contributes unsaturated \"good\" fats and almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9. A large ripe 1.7 lb avocado will have a dark green to nearly black skin color, a bumpy skin texture and should yield to gentle pressure without leaving indentations or feeling mushy. Avocados with a slightly bumpy texture should be ripe in 1 to 2 days. They will also be somewhat firm and have a dark green and black speckled color. Once you’ve selected the perfect bag of Large Hass Avocados, you’ll be ready to enjoy all kinds of different healthy foods and recipes for your next gathering with friends and families.', 'Fresh fruit with a creamy texture and mild flavor Fresh avocados are great for using in tacos, burritos, appetizers, avocado dip and fresh guacamole A cholesterol free fruit that contains almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9 Large Hass avocados are the lowest sugar fruit and provide unsaturated \"good fats\" that help absorb Vitamin A, Vitamin D, Vitamin K and Vitamin E Large ripe avocados will have dark green to nearly black skin color, a bumpy texture and should yield to gentle pressure without leaving indentations', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f7f54a85-4f77-4c30-ab80-f57352473347.da61567dd7da970e19efee00d4ba591c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7f54a85-4f77-4c30-ab80-f57352473347.da61567dd7da970e19efee00d4ba591c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f7f54a85-4f77-4c30-ab80-f57352473347.da61567dd7da970e19efee00d4ba591c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (844864628, '200pc Pto Red 5# Ptd', 794, '405507900592', 'short description is not available', '200pc Pto Red 5# Ptd', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (845090238, 'Cherry Tomatoes', 5.24, '714581000785', 'short description is not available', 'FLVR PIC TMT CO CHRY WHL MLDD TRY FRESH VEGETABLE AND HERB', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (845843843, 'Cherry Tomato, 10 oz Package', 2.97, '057836021709', 'Bring the fresh, delicious taste of Cherry Tomatoes into your home. Because of their notable flavor and thicker skin, they are a versatile tomato that\'s great for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, cherry tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with these fresh Cherry Tomatoes.', 'Cherry Tomato, 10 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/39585953-8ae1-4909-a68a-40c3288c87ba.b7af54eb72069bdaca0bd4d3d88f9d2b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39585953-8ae1-4909-a68a-40c3288c87ba.b7af54eb72069bdaca0bd4d3d88f9d2b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39585953-8ae1-4909-a68a-40c3288c87ba.b7af54eb72069bdaca0bd4d3d88f9d2b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (845914949, 'Fresh Grower\'s Choice Weekly Harvest Specialty Stone Fruit, 1 lb', 3.77, '813187011222', 'Looking for a fun and exciting snack that\'s full of mystery and possibility? Look no further than our Grower\'s Choice Weekly Harvest Specialty Stone Fruit Variety! This mystery box item is filled with a delicious suprise of premium fresh stone fruits, carefully selected from our growers\' seasonal harvest. You might find juicy plums, sweet apricots, luscious nectarines, succulent peaches, or an intriguing set of plumcots - each one offering a unique taste experience. With over 20 distinct varieties that our grower may choose, you\'ll be in for a treat with each bite. Each fruit boasts its own unique appearance, color, and size, ensuring a fun and exciting snacking experience. Whether you enjoy them on their own as a healthy snack or incorporate them into your favorite recipes, these stone fruits are sure to bring a burst of flavor and nutrition to your day. Looking for some tasty ideas to get you started? Try substituting these fruits for a refreshing twist in your favorite recipes. From scrumptious cakes and crisps to roasted dishes with honey and goat cheese, the possibilities are endless! So why settle for just any snack when you can indulge in the surprise and delight of our Weekly Harvest Specialty Stone Fruit Variety? Stock up today and discover the joy of these delicious fruits in every bite!', 'Fresh Grower\'s Choice Weekly Harvest Specialty Stone Fruit, 1 lb Clamshell: Delight in a surprise selection of premium plums, apricots, nectarines, peaches, or plumcots Indulge in the unique flavors presented in these varieties that have been selected by our growers Rich in vitamins and nutrients, promoting a healthy diet Ideal for both sweet and savory dishes, showcasing their culinary versatility Add a burst of color and taste to fruit salads and charcuterie boards Create tantalizing jams, preserves, and chutneys with their unique flavor profile Perfect for incorporating into smoothies and juices for a refreshing twist Impress dinner guests with elegant desserts and appetizers A delightful addition to breakfast dishes, such as oatmeal, yogurt, and pancakes Explore the exciting world of premium stone fruits with many different varieties to try throughout the season', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f0e86178-8842-4111-8133-815350976f00.15a403d2d95c15afe36fe434b26b6449.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f0e86178-8842-4111-8133-815350976f00.15a403d2d95c15afe36fe434b26b6449.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f0e86178-8842-4111-8133-815350976f00.15a403d2d95c15afe36fe434b26b6449.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (846043395, 'Fresh Peruvian Grown Green Grapes', 1.98, '', 'short description is not available', 'Fresh Peruvian Grown Green Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (846497577, 'Fresh Red Plums, 2lb', 4.88, '', 'Discover the delightful sweetness of Red Plums. Enjoy them on their own as a sweet snack or use them in a variety of recipes. For breakfast, you could slice them to put into your oatmeal or use them to make a delicious yogurt parfait. You can also use these juicy plums in several baking recipes including a comforting crisp topped with ice cream, a tasty upside-down cake, or a scrumptious tart. You can even use them to make a jam or a smooth sorbet. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Plums.', 'Sweet and juicy plums Enjoy on their own as a satisfying snack Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Ideal snack to take to work or on a road trip', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (846738137, 'Colored Bell Pepper 4pk', 3.4, '699058001468', 'short description is not available', 'Colored Bell Pepper 4pk', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (847280484, 'Marketside Beyond Spring Mix Salad, 4 oz Clam Shell, Fresh', 3.73, '194346001460', 'Enjoy the fresh flavor of Marketside Beyond Spring Mix. These greens are indoor and vertically grown for peak-season freshness all year long. Indoor vertical farms are a controlled growing environment giving each plant the optimal amount of light and nutrients for fresh and flavorful produce any time of the year. Farming vertically means our produce can be grown using significantly less water and land than traditional outdoor farms. Create something delicious with Marketside Beyond Spring Mix. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Beyond Spring Mix, 4 oz: Baby spinach, baby romaine, baby leaf lettuce, baby red lettuce (ingredients may vary) Indoor and vertically grown for peak-season freshness all year long No pesticides, herbicides or fungicides applied to our greens Convenient peel and reseal packaging Keep refrigerated until ready to enjoy', 'Marketside Beyond', 'https://i5.walmartimages.com/asr/a173d1b6-1555-4c6a-8253-b6a6b25f0ad6.d29cdfdf95332ac94fb0e2fb033c2ceb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a173d1b6-1555-4c6a-8253-b6a6b25f0ad6.d29cdfdf95332ac94fb0e2fb033c2ceb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a173d1b6-1555-4c6a-8253-b6a6b25f0ad6.d29cdfdf95332ac94fb0e2fb033c2ceb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (847423512, '180pc Apple Gala 3#', 768.6, '405665840303', 'short description is not available', '180pc Apple Gala 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (847471282, 'Baker Farms Turnip Greens, 1lb, Bagged, Fresh', 2.94, 'deleted_813098020016', 'Baker Farms Kale Greens, 1LB, Bagged, Fresh', 'Baker Farms Kale Greens 1# Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0062d184-6bbf-4347-8c63-da4465ff1d60.41a154d23162231348e0be50e95ef471.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0062d184-6bbf-4347-8c63-da4465ff1d60.41a154d23162231348e0be50e95ef471.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0062d184-6bbf-4347-8c63-da4465ff1d60.41a154d23162231348e0be50e95ef471.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (848312911, 'Comets Fresh Yellow Grape Tomato, 10 oz Package', 2.98, '751666950054', 'Make snack time or salads even brighter with fresh NatureSweet Comets. The vibrant yellow color isn’t the only thing that makes these grape tomatoes so special. They’re also sweeter and less acidic than their popular red siblings. Plus, with the same signature Raised Right qualities of other NatureSweet goods, the same stellar satisfaction extends to whatever dish you choose to incorporate Comets into.', 'Wholesome, versatile, and delicious Colorful tomatoes with citrusy, floral notes Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Fresh produce in a convenient package Store at room temperature for best results', 'NatureSweet', 'https://i5.walmartimages.com/asr/e4adf34f-13f2-46cf-a614-a99708679d79.3d06234188bcf2c909a3331e055ccbec.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4adf34f-13f2-46cf-a614-a99708679d79.3d06234188bcf2c909a3331e055ccbec.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4adf34f-13f2-46cf-a614-a99708679d79.3d06234188bcf2c909a3331e055ccbec.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (848345995, 'Dole Dole Salad Kit, 1 ea', 3.63, '071430000724', 'KIT CH SUNFLWR 27.2Z', '', 'Dole', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (848709845, 'Fresh Black Mission Figs, 8 oz', 4.56, '045255148152', 'Dramatically dark and sinfully sweet, Black Mission Figs taste as good with your morning yogurt as they do for dessert. Sweet yet mild, mellow yet rich, Black Mission Figs deserve their reputation as the most consistently delicious fresh fig available. While they have a flavor all their own, the taste could be described as a mix of strawberry, melon, and banana flavors, with a pleasantly jammy, creamy texture. These figs can be enjoyed just as they are, or prepared and cooked. They make an excellent addition to cheese platters and are a welcome addition to salads with spicy greens. You can even stuff the figs with cheese or ham, or slice them up and include them in grilled cheese sandwiches. However you choose to enjoy them, Black Mission Figs are a decadent addition to your collection of fresh, fruity ingredients.', 'Fresh Black Mission Figs, 8 oz 8-ounce container of fresh Black Mission Figs Excellent flavor addition to a wide variety of recipes from baked goods to hot sandwiches Smell fresh and are fairly soft Ripen at room temperature or refrigerate for a few days Figs may also be sealed in a plastic bag and frozen for up to six months', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1ad789ba-9aca-4d91-be2c-23e55994af0a.ed124cd0103bfeef4a2189bc7ba15e39.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1ad789ba-9aca-4d91-be2c-23e55994af0a.ed124cd0103bfeef4a2189bc7ba15e39.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1ad789ba-9aca-4d91-be2c-23e55994af0a.ed124cd0103bfeef4a2189bc7ba15e39.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (849145846, 'Org Tomato Grapes', 4.97, 'deleted_854758002263', 'short description is not available', 'Org Tomato Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (849208334, 'AVO BAG 10/5 48 MXGF', 3.28, 'deleted_850758006607', 'Avocados aren’t just great-tasting fresh produce, but they are a nutrient-dense food enjoyed around the world. Because of the creamy texture and mild flavor of Hass avocados, they are a versatile ingredient that can be used in many different types of recipes and dishes. Not only are our jumbo avocado a great ingredient to use in numerous ways, but it is also a healthy food that contributes unsaturated “good” fats and almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9. Jumbo ripe avocados will have dark green to nearly black skin color, a bumpy skin texture and should yield to gentle pressure without leaving indentations or feeling mushy. Avocados with a slightly bumpy texture should be ripe in 1 to 2 days. They will also be somewhat firm and have a dark green and black speckled color. You’ll be ready to enjoy tasty avocados on their own or as part of a salad, fresh guacamole, taco, burrito or avocado toast. The possibilities are deliciously endless.', 'Large Avocado 5 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (849600095, 'Manzana Gala, 3 Lb.', 7.58, '741839040033', 'Manzana Gala, 3 Lb.', 'Manzana Gala Organic Artisan 12/3', 'Stemilt', 'https://i5.walmartimages.com/asr/f46d4fa7-6108-4450-a610-cc95a1ca28c5_3.38c2c5b2f003a0aafa618f3b4dc3cbbd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f46d4fa7-6108-4450-a610-cc95a1ca28c5_3.38c2c5b2f003a0aafa618f3b4dc3cbbd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f46d4fa7-6108-4450-a610-cc95a1ca28c5_3.38c2c5b2f003a0aafa618f3b4dc3cbbd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (849804189, '5# Bag Grapefruit', 6.48, 'deleted_073150133188', 'short description is not available', '5# Bag Grapefruit', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (849857180, 'California Grown Peaches, per Pound', 1.58, '400094008805', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (849923449, 'Freshness Guaranteed Watermelon Small', 4.97, '262819000002', 'Experience a burst of summertime goodness with this delicious Freshness Guaranteed Watermelon. This pre-cut ripe watermelon is juicy, sweet, and refreshing to the taste. In addition, watermelons are a great natural source of vitamins A and C. Carry them with you and eat them straight out of the tray any time you want, at home, or on-the-go. Pair them with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use them as a naturally sweet ingredient in a fruit salad. Add some fresh fruit to your daily menu with this Freshness Guaranteed Watermelon.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Watermelon, 10 oz: Pre-cut watermelon chunks Convenient take-and-go packaging Good source of vitamins A and C No preservatives, artificial colors or artificial flavors Perfect for your next backyard cookout Net weight: 10 oz Sweet and Juicy', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (849996714, 'Bowery Farming Spring Mix Salad Blend, 8 oz Clam Shell, Fresh', 4.48, '851536007571', 'Spring Mix is a classic, sweet, and zesty salad blend. It\'s perfect in a wrap or as a beautiful, fresh salad.Bowery Farming grows positively tasty, fresh produce in a cleaner, more sustainable way: in local, indoor smart farms. Every Bowery leaf is grown and handled with care, without pesticides. Bowery\'s smart farms use less water & create less waste on less land. Because Bowery\'s farms are local, you can trust that your produce is freshly harvested, picked at peak freshness 365 days a year, and available on shelf in just a few days.', 'Bowery Farming Spring Mix Pesticide-Free, Locally Grown Salad Greens, 8oz: 100% Pesticide-free 100% Locally grown 100% Fully traceable Indoor-grown Protected Produce Clean & ready to eat Non-GMO Project Verified Recycled Packaging', 'Bowery Farming', 'https://i5.walmartimages.com/asr/a2572fc2-fd2c-4fa8-a876-d82cd5908010.709450ff2912f4ba549255de122e1e82.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a2572fc2-fd2c-4fa8-a876-d82cd5908010.709450ff2912f4ba549255de122e1e82.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a2572fc2-fd2c-4fa8-a876-d82cd5908010.709450ff2912f4ba549255de122e1e82.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (850195782, 'Large Bagged Oranges', 7.14, 'deleted_033383122076', 'short description is not available', 'Large Bagged Oranges', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (850257155, 'Tomatillos', 1.68, 'deleted_812181022173', 'short description is not available', 'Tomatillos', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (850585483, 'California Grown Peaches, per Pound', 1.58, '400094032442', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (851641814, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094342923', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (851997049, 'California Grown Peaches, per Pound', 1.58, '405530113051', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (852338655, 'Fresh Cosmic Crisp Apples, 3 lb Bag', 4.57, '033383005263', 'Meet your new favorite apple, the Cosmic Crisp. Cosmic Crisp Apples are prized for their vibrant red color, pearl-colored flesh, perfectly balanced flavor and delightfully crisp texture. An excellent choice for baking, snacking and entertaining, Cosmic Crisp Apples are the delicious result of 20 years of research by Washington State University’s world-class tree fruit breeding program. The Cosmic Crisps is a cross of the Enterprise and Honeycrisp varieties. The large, juicy and red apple has a perfectly balanced flavor and firm texture, making it ideal for snacking, cooking, baking, and entertaining. The striking color and shape of the Cosmic Crisp shines in fresh decor like wreaths, floral arrangements and tablescapes', 'Cosmic Crisp Apples Cross of the Enterprise and Honeycrisp varieties Large, juicy and red apple has a perfectly balanced flavor and firm texture Ideal for snacking, cooking, baking, and entertaining Shines in fresh decor like wreaths, floral arrangements and tablescapes Cosmic Crisp Apples Cross of the Enterprise and Honeycrisp varieties Large, juicy and red apple has a perfectly balanced flavor and firm texture Ideal for snacking, cooking, baking, and entertaining Shines in fresh decor like wreaths, floral arrangements and tablescapes Make a creamy smoothie or a nutritious juice blend Perfect as a healthy treat or seasonal baking ingredient Great for packing in lunches Make a creamy smoothie or a nutritious juice blend Adds flavor to a variety of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/dbd3a99b-88f0-43f2-b7de-89385d103111.f1bdf2065b438c94c8f1a6038e3b9b6f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dbd3a99b-88f0-43f2-b7de-89385d103111.f1bdf2065b438c94c8f1a6038e3b9b6f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dbd3a99b-88f0-43f2-b7de-89385d103111.f1bdf2065b438c94c8f1a6038e3b9b6f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (852830012, 'Red Potatoes, 5 Lb.', 5.47, '811857021151', 'Red Potatoes, 5 Lb.', 'Red Potatoes 5 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (853202863, 'Marketside Mandarin Oranges, 7 oz', 1.97, '681131161404', 'Marketside Mandarin Oranges are peeled and soaked in an extra light syrup to lock in all their delicious fruit flavors. These tasty citrus fruit segments are perfect for fruit cocktails, desserts, salads and can also be used as a garnish for meat and vegetable dishes. Enjoy them chilled for a refreshing snack that you can enjoy any time of the day. They also offer a nutritional benefit as they are a rich source of vitamin C. These slices come in a ready-to-eat cup making it easy to enjoy your favorite fruit on the go. Enjoy a healthy and delicious snack with the wholesome taste of Marketside Mandarin Oranges. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Mandarin Oranges, 7 oz Fresh Mandarin oranges in extra light syrup High in vitamin C Ready-to-eat fruit Plastic cup Kosher', 'Marketside', 'https://i5.walmartimages.com/asr/b4ce9135-fedc-4a16-bbd8-4527e38ae85c.a66f248662a3f7730ddffccdf95c8ecf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b4ce9135-fedc-4a16-bbd8-4527e38ae85c.a66f248662a3f7730ddffccdf95c8ecf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b4ce9135-fedc-4a16-bbd8-4527e38ae85c.a66f248662a3f7730ddffccdf95c8ecf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (853852874, '500lb Cabbage Green', 340, '400094630457', 'short description is not available', '500lb Cabbage Green', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (854272832, 'Fresh Strawberries 1#', 1.56, '400094383070', 'short description is not available', 'Fresh Strawberries 1#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (854405750, 'Tastee Testee Jelly Apples', 5.97, '035266000143', 'Tastee’s original and iconic Jelly Apple With Coconut, at just three ounces, are the perfect, “any time” snack. The all-time favorite flavor Plain Caramel contains less sugar and more fiber than a 6 oz. Greek yogurt, so go for it!', 'Tastee Testee Jelly Apples', 'Tastee', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (854713104, 'Family Sweet Kale Chopped Salad Kit', 4.78, '709351303265', 'Have a restaurant-inspired meal with the Eat Smart Sweet Kale Vegetable Salad Kit. This delicious, nutritious product contains no artificial colors, flavors or preservatives. This Eat Smart Vegetable Salad Kit is 100% clean and free from gluten. The combination of ingredients makes a unique side dish or main course. The bag includes: broccoli, cabbage, Brussels sprouts, kale, chicory, dried cranberries, roasted pumpkin seeds and a poppyseed dressing.', 'Eat Smart Sweet Kale Vegetable Salad Kit, 20oz: Contains 7 super foods. All Ingredients come in the bag. Just toss and serve. 100% gluten free salad.', 'EatSmart', 'https://i5.walmartimages.com/asr/2607d47a-b64b-4875-a6a1-9db78d3daeb7_1.a4dd76c23863680dcd1a6c5808b759ff.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2607d47a-b64b-4875-a6a1-9db78d3daeb7_1.a4dd76c23863680dcd1a6c5808b759ff.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2607d47a-b64b-4875-a6a1-9db78d3daeb7_1.a4dd76c23863680dcd1a6c5808b759ff.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (854838280, 'Fresh Seedless Lemons, 2 lb Bag', 5.48, '072240546792', 'These Seedless Lemons are juicy, zesty, naturally seedless, and Non-GMO Project Verified. They\'re everything you love about lemons, minus the pesky little seeds. These lemons can add a twist to a wide variety of recipes. Slice them and use them in your iced or hot tea or use the lemon juice to make satisfying and refreshing strawberry lemonade. Zest the lemon peel to use in recipes such as lemon cookies or a tasty lemon loaf. You can also use lemons in savory recipes like asparagus with lemon zest or shrimp scampi with linguini. Enhance the flavor of your next meal with these Seedless Lemons.', 'Naturally seedless lemons Use to add zest and flavor to your meals and beverages Add to your iced or hot tea Make a satisfying and refreshing strawberry lemonade Use lemon zest to make lemon cookies or lemon loaf Non-GMO Project verified Available in a 2-pound bag', 'Wonderful', 'https://i5.walmartimages.com/asr/b5cc869b-1322-4e0c-8c56-219116bec46d.0cbc93f437d454590b3624cbfc658575.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b5cc869b-1322-4e0c-8c56-219116bec46d.0cbc93f437d454590b3624cbfc658575.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b5cc869b-1322-4e0c-8c56-219116bec46d.0cbc93f437d454590b3624cbfc658575.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (855094216, 'Fresh Baby Eggplant Graffiti', 3, '000000061841', 'Indulge in the tender goodness of our Fresh Baby Eggplant, a delightful and versatile ingredient perfect for a variety of culinary creations. These miniature eggplants boast a delicate, slightly sweet flavor and a smooth, creamy texture when cooked. Ideal for grilling, roasting, or sautéing, our Fresh Baby Eggplant is a delicious addition to any dish, from Mediterranean-inspired recipes to modern fusion cuisine. Elevate your meals with the charming taste and versatility of our Fresh Baby Eggplant.', 'Baby Eggplant Graffiti Indulge in the tender goodness of our Fresh Baby Eggplant, a delightful and versatile ingredient perfect for a variety of culinary creations. These miniature eggplants boast a delicate, slightly sweet flavor and a smooth, creamy texture when cooked. Ideal for grilling, roasting, or sautéing, our Fresh Baby Eggplant is a delicious addition to any dish, from Mediterranean-inspired recipes to modern fusion cuisine. Elevate your meals with the charming taste and versatility of our Fresh Baby Eggplant.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4407273d-3c18-4211-bd6c-eee2431fe42d.9e86007798b9e1876292002966d63ef4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4407273d-3c18-4211-bd6c-eee2431fe42d.9e86007798b9e1876292002966d63ef4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4407273d-3c18-4211-bd6c-eee2431fe42d.9e86007798b9e1876292002966d63ef4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (855358511, 'Yellow Flesh Peaches, per Pound', 1.58, '400094931585', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (855391604, 'Green Giant Fresh Sweet Potatoes', 2.98, '605806000799', 'Green Giant™ Fresh Sweet Potatoes.Steams in pack.Net Wt 340 g (12 oz). Keep refrigerated.Microwave Directions:1. Tear bag at notch.2. Open pouch and run under cold water to rinse Sweet Potatoes. Drain water from pouch. Reseal pouch leaving about 1 inch open. Microwave on high for 3 minutes, or until desired tenderness.Because microwaves cook differently, times are approximate.Caution: Hot! Pouch may be hot to the touch. Let stand 1 minute in microwave before removing.Fresh Serving Suggestions:Toss Sweet Potatoes with olive oil, season with herbs and roast alongside quartered onions at 350°F for 25-30 minutes.Boil Sweet Potatoes in chicken stock with onions, celery, cinnamon and nutmeg. When tender, puree and season to taste for a simple Sweet Potato soup.Season Sweet Potatoes with olive oil, brown sugar, cumin and chili powder. Roast at 425°F for 15 minutes or until golden and tender for a sweet & crispy side dish.Roast Sweet Potatoes until tender, then puree with butter, cream, salt and smoked paprika.', 'Green Giant Fresh Sweet Potatoes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/01821dfc-1536-4c86-92dd-856dd820d280_1.ddcb9258867726f04cca9c03e12c1ed3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/01821dfc-1536-4c86-92dd-856dd820d280_1.ddcb9258867726f04cca9c03e12c1ed3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/01821dfc-1536-4c86-92dd-856dd820d280_1.ddcb9258867726f04cca9c03e12c1ed3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (856105480, 'California Grown Saturn Peaches, per Pound', 3.68, 'deleted_400094523636', 'California Grown Saturn Peaches, per Pound', 'Fresh California Grown Saturn Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (856212772, 'Black Seedless Grapes, 24 oz', 7.58, '850859002218', 'Seedless Black Grapes, 24 Oz.', 'Black Seedless Grapes 24 Oz Bag', 'Unbranded', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ade17cfd-b528-426e-a4e8-1744cd837766.971df50b9d7a3b0325702e7ad6e46907.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (856581293, 'Freshness Guaranteed Fresh Red Seedless Grapes', 2.08, '', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (857621442, 'Organic Zucchini Squash', 2.96, 'deleted_741243003013', 'short description is not available', 'Organic Zucchini Squash', 'Wholesum', 'https://i5.walmartimages.com/asr/b1504219-1aef-41ce-908d-f36b65081e3e.3f2b9fe975f53f7f1353954d0da707dd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b1504219-1aef-41ce-908d-f36b65081e3e.3f2b9fe975f53f7f1353954d0da707dd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b1504219-1aef-41ce-908d-f36b65081e3e.3f2b9fe975f53f7f1353954d0da707dd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (857639234, 'Dried Chili Peppers Habanero, 0.25 Oz.', 2.98, '803944303592', 'Dried Chili Peppers Habanero, 0.25 Oz.', 'Dried Chili Peppers Habanero .25 Oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (857833523, 'Pineapple', 1.93, 'deleted_040232315381', 'short description is not available', 'Pineapple', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/05b0e603-2da8-4f56-8b29-f601607c87bc_2.fa0b08084ecd4a30fdd10804c516b7d0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/05b0e603-2da8-4f56-8b29-f601607c87bc_2.fa0b08084ecd4a30fdd10804c516b7d0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/05b0e603-2da8-4f56-8b29-f601607c87bc_2.fa0b08084ecd4a30fdd10804c516b7d0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (858081917, 'Fresh Produce Gala Apples, 3 lb, 1 Bag', 4.67, 'deleted_033383027715', 'Savor the sweet taste of Fresh Gala Apples. Gala apples are sweet and mild with a subtle floral aroma making them perfect for breakfast, lunch, dinner, and dessert. Perfect for snacking, they have a creamy white flesh with low acidity.', 'Sweet and mild with a subtle floral aroma Perfect for breakfast, lunch, dinner, and dessert Chop them up and add to a salad, add them to a smoothie or juice blend, or serve with peanut butter Perfect for snacking They have a creamy white flesh with low acidity', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e97d7a3f-ed34-4801-aafd-a7008550d36b_2.876fc609cfa3a382b2c033a63d49c14b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e97d7a3f-ed34-4801-aafd-a7008550d36b_2.876fc609cfa3a382b2c033a63d49c14b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e97d7a3f-ed34-4801-aafd-a7008550d36b_2.876fc609cfa3a382b2c033a63d49c14b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (858152946, 'Yellow Flesh Peaches, per Pound', 1.58, '405522034258', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (858635214, 'Rooster Potatoes 3lb Bag', 3.47, '852883004534', 'short description is not available', 'Rooster Potatoes 3lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (859093910, 'Freshness Guaranteed Whole Brown Mushrooms 16oz', 4.12, 'deleted_699058820090', 'short description is not available', 'Freshness Guaranteed Whole Brown Mushrooms 16oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (859130867, 'Marketside Fresh Cut Pineapple, 42 oz Tray', 9.76, '681131180436', 'Experience a burst of tropical flavors with these Marketside Pineapple Chunks. The pre-cut slices of ripe pineapple are juicy and sweet to taste and are packed in its own juice. Carry them with you and eat them straight out of the tray any time you want, at home or on-the-go. You can also use them to top desserts and ice creams, in a fruit salad or blend them with milk to make milkshakes. Pineapples are known to have a number of nutrients, and they are especially rich in vitamin C. Add some fresh fruits to your daily menu today with these Marketside Pineapple Chunks. Marketside provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Marketside item.', 'Marketside Pineapple 42 oz Comes in a re-closable container to help maintain freshness Great for breakfast, lunch, dessert, or when you want a snack No preservatives, artificial colors or artificial flavors Convenient and portable Share with friends and family or keep for yourself Make a fruit bowl topped with whipped cream or a yogurt parfait Enjoy on their own or in a variety of recipes', 'Marketside', 'https://i5.walmartimages.com/asr/bd2c5c34-9a6e-4902-a333-5b6dc2237ac7.d6e4755eb5c9a46aa7ea6e384613d42e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd2c5c34-9a6e-4902-a333-5b6dc2237ac7.d6e4755eb5c9a46aa7ea6e384613d42e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd2c5c34-9a6e-4902-a333-5b6dc2237ac7.d6e4755eb5c9a46aa7ea6e384613d42e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (859271120, 'Watermelon Seedless', 4.48, '400094982266', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (859381982, 'Organic Celery Stalk, 1 Each', 1.76, 'deleted_000651961026', 'Organic Celery Stalk, 1 Each', 'Organic Celery Stalk', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/aa37bf64-01b7-41d4-9944-b5157cd9d3c6_1.33e90f5dcb8f56e1272ae1dba43df1c9.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa37bf64-01b7-41d4-9944-b5157cd9d3c6_1.33e90f5dcb8f56e1272ae1dba43df1c9.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa37bf64-01b7-41d4-9944-b5157cd9d3c6_1.33e90f5dcb8f56e1272ae1dba43df1c9.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (859650002, 'Fresh Ginger Gold Apples, 5 lb Bag', 4.92, '033383081199', 'Fresh Gingerold Apples are a must-try! Our apples are a perfect blend of sweet and tangy with a hint of fresh ginger. These crunchy and juicy apples are handpicked and carefully sorted to ensure that you receive the best quality fruits. Whether you eat them as a snack or bake them into a pie, Fresh Gingerold apples are sure to please. Get your hands on some today and enjoy the taste of fall!', 'The Ginger Gold Apples have a crisp and juicy texture with a sweet and slightly tart flavor. They are great for eating fresh, adding to salads, or using in baking recipes. The 5 lb Tote provides a convenient and cost-effective way to stock up on these delicious apples. Listed apple varieties are rich in fiber, vitamins, and antioxidants, making them a healthy snacking option. They are also versatile and can be used in a variety of recipes, from sweet to savory. Whether you prefer the sweet and tart flavor of Ginger Gold Apples or the firm and sweet taste of Fuji Apples, both varieties offer a delicious and nutritious addition to your diet.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5c436c4d-b5b8-460a-b97a-edcc20aff82e.a93306a739823ab62381f90cf3603516.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5c436c4d-b5b8-460a-b97a-edcc20aff82e.a93306a739823ab62381f90cf3603516.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5c436c4d-b5b8-460a-b97a-edcc20aff82e.a93306a739823ab62381f90cf3603516.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (859787049, 'Organic Red Cherries, 2 Lb.', 6.38, '741839710028', 'Organic Red Cherries, 2 Lb.', 'Org Red Cherry 2#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (859820630, 'Dole Chop Bbq Salad Kit 13 Oz', 3.63, '714300002984', 'short description is not available', 'Dole Chop Bbq Salad Kit 13 Oz', 'Dole', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (859912890, 'Fresh Pineapple, Each', 0.88, '405856552992', 'Enjoy a burst of tropical flavor with this Fresh Pineapple. This pineapple can be a satisfying afternoon snack, or you can use it in a variety of recipes. For breakfast, use this pineapple to make a rich and creamy smoothie or serve it alongside your pancakes, sausage, and eggs. Slice it up and use to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. For dessert, you could make a crowd-pleasing pineapple upside down cake or a comforting pineapple crisp. However you choose to use it, this Fresh Pineapple will add flavor to any meal or beverage', 'Vitamin C, manganese, and enzymes Help aid digestion May help boost immunity Improve recovery time after surgery.', 'Unbranded', 'https://i5.walmartimages.com/asr/69b654bd-ddf8-4b42-a5e7-33e18476ecc8.941d1fcffe38ec5d8ae15049efab7087.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/69b654bd-ddf8-4b42-a5e7-33e18476ecc8.941d1fcffe38ec5d8ae15049efab7087.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/69b654bd-ddf8-4b42-a5e7-33e18476ecc8.941d1fcffe38ec5d8ae15049efab7087.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (860235046, 'Cocktail Tomatoes', 2.98, '684924010361', 'short description is not available', 'Cocktail Tomatoes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (860295588, 'Fresh Red Seedless Grapes', 1.84, 'deleted_841139100021', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (860389090, 'Grape Tomatoes', 2.48, '405565638062', 'short description is not available', 'Grape Tomatoes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (860517834, '200pc Apple Gala 3#', 854, '405667988676', 'short description is not available', '200pc Apple Gala 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (860584306, 'Grown True Organic Fresh Roma Tomatoes, 16 oz', 2.46, '891824002413', 'Grown True Organic Fresh Roma Tomatoes are a great beginning to your next homecooked meal. An excellent ingredient for use in a wide variety of dishes, Roma tomatoes are versatile and can lend themselves to just about any recipe your cookbook suggests. You can use them to create a zesty tomato sauce for stirring into a homemade pasta dish, crush them up to make a delightful Roma tomato bruschetta, or simply enjoy them on their own as a nutritious snack or as a party platter option for dipping in your favorite vegetable dipping sauce. If you\'re feeling a classic tomato dish, Roma tomatoes can even lend themselves in making a comforting and appetizing tomato soup or a flavorful salsa. Experience the best of nature with these Grown True Organic Fresh Roma Tomatoes.', 'Grown True Organic Fresh Roma Tomatoes, 16 oz: USDA Organic Roma tomatoes Ideal ingredient for a variety of dishes Perfect for making zesty tomato sauces Enjoyable as a nutritious snack Excellent for homemade salsa', 'Grown True', 'https://i5.walmartimages.com/asr/278b1ac3-a58c-4751-b956-a0d9191c1f7b_2.eafdc16c3e1439337a2b45546dd458d7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/278b1ac3-a58c-4751-b956-a0d9191c1f7b_2.eafdc16c3e1439337a2b45546dd458d7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/278b1ac3-a58c-4751-b956-a0d9191c1f7b_2.eafdc16c3e1439337a2b45546dd458d7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (860610820, 'Red Seedless Grapes, per lb', 1.84, 'deleted_840437100382', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (860788341, 'Zucchini, 2 Pack', 1.57, '711069541150', 'Add some fresh flavor to your meal with Zucchini. This versatile vegetable can be used in a variety of dishes to create delicious and decadent meals. This nutrient dense vegetable is great in soups, casseroles, pot roasts and other tasty recipes. Slice it up and enjoy with baby carrots and ranch dressing for a healthy snack. Season with fresh chopped garlic, saute and serve with grilled chicken breast and roasted carrots. Spiralize it and saute for a great pasta replacement. Or shred it for mouth-watering breads and muffins. It is great for health-conscious individuals as they are USDA organic and rich in vitamin C, B-6, and calcium. With so many uses, this vegetable will become a pantry staple. Create tasty and flavorful meals with Zucchini.', 'Zucchini, 2 Pack: Versatile ingredient Slice it up and enjoy with baby carrots and ranch dressing for a healthy snack Great in soups, casseroles, pot roasts and other tasty recipes Rich in vitamin C, calcium, and vitamin B-6 Will become a pantry staple', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f88083d5-3c6e-4a75-8833-3faf3ded2af6_1.a626c3d41931d5fbc6eaf8d7513cbee7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f88083d5-3c6e-4a75-8833-3faf3ded2af6_1.a626c3d41931d5fbc6eaf8d7513cbee7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f88083d5-3c6e-4a75-8833-3faf3ded2af6_1.a626c3d41931d5fbc6eaf8d7513cbee7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (860891845, 'California Grown Peaches, per Pound', 1.58, '400094419113', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (861168074, 'Fresh Red Seedless Grapes', 1.88, 'deleted_841139100038', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (861438471, 'Marketside Organic Fresh Broccoli Florets, 12 oz', 3.77, '681131161565', 'Marketside Fresh Organic Broccoli Florets are a nutritious and versatile vegetable you can enjoy with a variety of meals. Season them with olive oil, garlic, salt, and black pepper and roast them in the oven for a delightful side dish. Cut the florets into small pieces and mix with purple cabbage and shredded carrots for a yummy broccoli slaw. Each serving contains just 30 calories and has zero fat, cholesterol, and added sugars. Whether you enjoy them roasted, fried, blanched, or steamed, Marketside Organic Broccoli Florets are an excellent addition to any meal. Marketside Organic foods are simple, wholesome and USDA certified.', 'USDA certified organic Flavorful, Authentic. Guaranteed Delicious.™ Microwaves in only 3 minutes 30 calories per serving 0g total fat, cholesterol, and added sugars 4 servings per container 12oz bag of fresh, washed and ready-to-eat broccoli florets', 'Marketside', 'https://i5.walmartimages.com/asr/6741ff9c-8f77-42e8-8f4a-56c31eaad6c6.565a0b4438c11d26d74ec10fb78123ca.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6741ff9c-8f77-42e8-8f4a-56c31eaad6c6.565a0b4438c11d26d74ec10fb78123ca.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6741ff9c-8f77-42e8-8f4a-56c31eaad6c6.565a0b4438c11d26d74ec10fb78123ca.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (861773879, 'Jonathan Apples, 5 lb bag', 4.92, '033383084114', 'short description is not available', 'Jonathan Apples 5 Lb Bag', 'Unbranded', 'https://i5.walmartimages.com/asr/ad78197a-0337-42e3-94f7-334356e2b66b.3e77de565fd023c55040dc3c623810d9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ad78197a-0337-42e3-94f7-334356e2b66b.3e77de565fd023c55040dc3c623810d9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ad78197a-0337-42e3-94f7-334356e2b66b.3e77de565fd023c55040dc3c623810d9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (862488411, 'Services Reduced Program Dept 94', 0.01, '251681000005', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (862619405, 'Dole Organic Baby Sprig Mix 5 Oz', 2.66, '071430846254', 'Dole Spring Mix Orgnc 5 oz', 'Organic Spring Mix', 'Dole', 'https://i5.walmartimages.com/asr/9c36b768-c173-4cf3-8fc0-9e7a798ff959.dca659fb438fed6cf1c542e9424cc40e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c36b768-c173-4cf3-8fc0-9e7a798ff959.dca659fb438fed6cf1c542e9424cc40e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c36b768-c173-4cf3-8fc0-9e7a798ff959.dca659fb438fed6cf1c542e9424cc40e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (863305125, 'Strawberry and \'Corn', 3.28, '000000030878', 'Strawberry and \'Corn', 'Hypermart Strawberry Corn', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (863371738, 'Green Seedless Grapes, per lb', 2.88, '400094351321', 'short description is not available', 'Fresh Green Seedless Grapes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e3493b51-d859-4499-8a4f-985e8a281558.ec2345597c4287be07085da9c7d01d62.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3493b51-d859-4499-8a4f-985e8a281558.ec2345597c4287be07085da9c7d01d62.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3493b51-d859-4499-8a4f-985e8a281558.ec2345597c4287be07085da9c7d01d62.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (863624941, 'SupHerb Fresh Specialty Onion Green Vegetables, 8 Ounce - 4 per case.', 70.52, '080731166626', 'Fresh Frozen Onion Green 4/8oz.', 'SupHerb Fresh Specialty Onion Green Vegetables, 8 Ounce - 4 per case.', 'SupHerb Farms', 'https://i5.walmartimages.com/asr/be0b7453-7efc-43eb-ab32-a0a3a26e223a.2e8086c99f4bb060dae2582408387fe8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/be0b7453-7efc-43eb-ab32-a0a3a26e223a.2e8086c99f4bb060dae2582408387fe8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/be0b7453-7efc-43eb-ab32-a0a3a26e223a.2e8086c99f4bb060dae2582408387fe8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (863769738, 'Yellow Flesh Peaches, per Pound', 1.58, '400094137949', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (864367975, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094018972', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (864822126, 'Watermelon Seedless', 4.98, '405503698752', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (865504035, '50pc Apple Koru Bulk', 88.5, '405745238952', 'short description is not available', '50pc Apple Koru Bulk', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (866051914, 'Butternut Squash', 1.18, '850489008192', 'Butternut Squash', 'Butternut Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (866216206, 'Pineapple Chunks 15 Oz', 3.97, '795631802108', 'short description is not available', 'Pineapple Chunks 15 Oz', 'Crazy Fresh', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (866700739, 'Russet Potatoes 5 Lb Bag', 3.96, 'deleted_041130700002', 'short description is not available', 'Russet Potatoes 5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (866748621, 'Cara Cara Oranges, 3 lb Bag', 4.74, 'deleted_092148146290', 'Enjoy the fresh sweetness of Cara Cara Oranges. These pink-fleshed oranges are very sweet and have a lower acidity than Navel oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite adult beverage. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Cara Cara Oranges add flavor to any meal or beverage.', 'Cara Cara Oranges, 3 lb Bag: Great source of vitamin C Pink-fleshed citrus fruit with a very sweet flavor & low acidity Use to add zest & flavor to your meals & beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety of recipes Use as a garnish for your favorite adult beverage Make sweet desserts like ambrosia, orange bars & orange pie', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7ed5a1fe-890f-49db-979f-7b84db887725_1.527f0dfe8b4f993948ab1f69612ea269.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7ed5a1fe-890f-49db-979f-7b84db887725_1.527f0dfe8b4f993948ab1f69612ea269.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7ed5a1fe-890f-49db-979f-7b84db887725_1.527f0dfe8b4f993948ab1f69612ea269.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (867007979, 'Tri Pepper Diced 7 Oz', 2.58, '302230227562', 'short description is not available', 'Tri Pepper Diced 7 Oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (867582492, 'Large Avocado 3 Count Bag', 39, '', 'short description is not available', 'Large Avocado 3 Count Bag', 'Walmart', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (867949278, 'Fieldpack Unbranded Fresh Strawberries 1#', 2.62, 'deleted_853447003390', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0ea46b14-8b92-4ea1-837a-b596d943765e.eafd5c2499865066412ae752b533d9bc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ea46b14-8b92-4ea1-837a-b596d943765e.eafd5c2499865066412ae752b533d9bc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ea46b14-8b92-4ea1-837a-b596d943765e.eafd5c2499865066412ae752b533d9bc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (868241761, 'Microwave in Bag Steamer Yellow Potatoes, per Lb.', 1.97, '033383004778', 'Microwave in Bag Steamer Yellow Potatoes, per Lb.', 'Microwave In Bag Yellow Potato', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (868823571, 'Fresh Limes, 2lb Bag', 4.98, 'deleted_744430275620', 'Add zest and flavor to your meals and beverages with these Limes. Freshly squeezed limes provide a healthy dose of vitamin C to your diet and are a key ingredient in many recipes, from homemade salsa to chicken dishes. The citrusy tropical flavor of these limes are sure to add a zing to all your cooked meals. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. These limes are sold in a two-pound bag, so you\'ll have plenty for all your culinary creations. Enjoy the refreshing, tart flavor of Limes.', 'Fresh and juicy limes Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies, and tarts Refreshing, tart flavor Seedless', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/dfd60266-c675-4e8a-ae71-257f27bb9984.5df7ac1421edf06ea6618d8d4425adb5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dfd60266-c675-4e8a-ae71-257f27bb9984.5df7ac1421edf06ea6618d8d4425adb5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dfd60266-c675-4e8a-ae71-257f27bb9984.5df7ac1421edf06ea6618d8d4425adb5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (868871229, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094009093', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (869258442, 'Marketside Apple Blue Pecan Salad 4.8oz', 3.27, '681131160858', 'short description is not available', 'Marketside Apple Blue Pecan Salad 4.8oz', 'Marketside', 'https://i5.walmartimages.com/asr/48abf579-ea81-45fb-bc85-a99efa1ea811.d2ff0d1f317dab85fbece56665f0409f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48abf579-ea81-45fb-bc85-a99efa1ea811.d2ff0d1f317dab85fbece56665f0409f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/48abf579-ea81-45fb-bc85-a99efa1ea811.d2ff0d1f317dab85fbece56665f0409f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (869368850, 'Diced Tri Color Pepper Bagged 7oz', 2.58, '643550000603', 'short description is not available', 'Diced Tri Color Pepper Bagged 7oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (869961239, '150pc Pto Rst 5# Wa', 490.5, '405508134927', 'short description is not available', '150pc Pto Rst 5# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (870677386, 'Fresh Tangerine, Each', 0.44, '846189044493', 'Enjoy the juicy goodness of citrus when you eat a Fresh Tangerine. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, tangerines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, tangerines are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the tangerines hang out in a bowl on your counter or table to breathe. Compact and portable, tangerines are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious Fresh Tangerines on hand for an easy, healthy treat.', 'Fresh Tangerine, Each Fresh, delicious, tangerine Pleasing sweet-tart flavor Excellent source of vitamin C, potassium, and folic acid For maximum flavor, do not refrigerate Typically seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6b9ea942-4548-4d7e-a2fe-b2c8c8b66a25.04a1152f2e89f7692a98bf2f004bd772.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6b9ea942-4548-4d7e-a2fe-b2c8c8b66a25.04a1152f2e89f7692a98bf2f004bd772.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6b9ea942-4548-4d7e-a2fe-b2c8c8b66a25.04a1152f2e89f7692a98bf2f004bd772.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (870866429, '120pc Apl Mactosh 5#', 590.4, '400094944462', 'short description is not available', 'Fpp 5# Mactosh 120', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (870898685, 'Mag Melon Cantaloupe, Each', 2.88, 'deleted_717524410085', 'Enjoy a sweet treat when you choose a MAG.nificient Melon Cantaloupe. Grown specifically with consumers\' needs in mind, the MAG.nificent Melon has a more pleasant and concentrated aroma compared to traditional cantaloupes. The melon can be identified by its rich golden outer shell and the juicy inner flesh of the fruit offers consumers a source of fiber, vitamin C, and carotene. The higher Brix content, which includes the amount of sugars, vitamins, minerals, proteins, and other solids, creates an extra sweet flavor for a more delightful tasting cantaloupe. Additionally, the MAG.nificent Melon was developed to have a smaller seed cavity, which provides consumers with more enjoyable fruit and value per melon. Enjoy the delicious taste of fresh cantaloupe with a MAG.nificent Melon Cantaloupe.', 'MAG.nficent Melon Cantaloupe Grown specifically with consumers\' needs in mind More pleasant and concentrated aroma compared to traditional cantaloupes Juicy inner flesh offers a source of fiber, vitamin C, and carotene', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a95d970d-4945-4a70-ae78-07f7d895caa2_1.424ee201a6cd27d3c5fa7181ac4421ef.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a95d970d-4945-4a70-ae78-07f7d895caa2_1.424ee201a6cd27d3c5fa7181ac4421ef.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a95d970d-4945-4a70-ae78-07f7d895caa2_1.424ee201a6cd27d3c5fa7181ac4421ef.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (871213146, 'Yellow Flesh Peaches, per Pound', 1.58, '405506835567', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (871214007, 'Large Avocado 3 Count Bag', 4.48, 'deleted_850758006393', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (871741879, 'Freshness Guaranteed Watermelon 10 Oz', 3.48, 'deleted_681131036658', 'short description is not available', 'Freshness Guaranteed Watermelon 10 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (871850011, 'Avocado 4 Ct Bag', 6.97, 'deleted_636442480058', 'short description is not available', 'Large Avocado 4 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (872227632, 'Fresh Lemons, 2 lb Bag', 3.92, 'deleted_605049551331', 'Add zest and flavor to your meals and beverages with these fresh Lemons. A great source of vitamin C, lemons are a staple citrus fruit essential for any kitchen. Slice them and use them in your iced or hot tea or use the lemon juice to make satisfying and refreshing strawberry lemonade. Zest the lemon peel to use in recipes such as lemon cookies or a tasty lemon loaf. You can also use lemons in savory recipes like asparagus with lemon zest or shrimp scampi with linguini. Enhance the flavor of your next meal with fresh Lemons.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Add to your iced or hot tea Make a satisfying and refreshing strawberry lemonade Use lemon zest to make lemon cookies or lemon loaf Adds flavor to a variety or recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/03038099-488e-4089-9289-df46ee43fe7a.55fc8dfe15cdf98e017420d5cd6b61e3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/03038099-488e-4089-9289-df46ee43fe7a.55fc8dfe15cdf98e017420d5cd6b61e3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/03038099-488e-4089-9289-df46ee43fe7a.55fc8dfe15cdf98e017420d5cd6b61e3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (872428720, 'Fieldpack Unbranded Mixed Bell Pepper 3 Pack', 3.37, 'deleted_813155020980', 'short description is not available', 'Fieldpack Unbranded Mixed Bell Pepper 3 Pack', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (872901864, '200pc Pto Red 5# Id', 1094, '405515325912', 'short description is not available', '200pc Pto Red 5# Id', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (873080295, 'Watermelon Seedless', 4.48, '400094985281', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (873883574, 'Premium Red Grape Tomato, 16 oz', 4.98, 'deleted_884051050814', 'Bring the fresh, delicious taste of Grape Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this package of Grape Tomatoes.', 'Premium Red Grape Tomatoes 1 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (874178965, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094346709', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (874179580, 'Fresh California Grown Red Grapes', 1.72, '', 'short description is not available', 'Fresh California Grown Red Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/895d03c9-285d-4bd4-b57d-4c9698a58ef3_2.f5230e016b3af9d9a7a3cab970c8df88.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/895d03c9-285d-4bd4-b57d-4c9698a58ef3_2.f5230e016b3af9d9a7a3cab970c8df88.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/895d03c9-285d-4bd4-b57d-4c9698a58ef3_2.f5230e016b3af9d9a7a3cab970c8df88.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (874689889, '1# Bag Limes', 2.97, '813155021000', 'short description is not available', '1# Bag Limes', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (874726772, '180pc Apple Gala 3#', 561.6, '405665856373', 'short description is not available', '180pc Apple Gala 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (875164963, 'Tasteful Selections Sunburst Blend 2-Bite Baby Potatoes 24oz', 3.58, 'deleted_826088526108', 'The union of two of our two most popular varieties has created this great potato offering, Sunburst Blend™ potatoes! Creamy textures and tender skins create this blend’s flavor fusion that will satisfy your household. These baby potatoes are packed with nutritional powers including Vitamin C, B6, Iron, Protein and provide more Potassium than a banana. Baby potatoes are a whole food, naturally gluten-free, high in fiber and rich in minerals with no additives or GMOs. Because they aren’t refined or have sugar added, they are a complex carbohydrate (good carbs) that is absorbed slowly into the body and keeps you feeling fuller longer with energy to burn.', 'Pre-Washed to save you time in the kitchen No need to peel-Thin skinned but NOT thin on taste! Fast, Easy Prep For additional information and recipes, visit tastefulselections.com', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/9c47daae-856a-4b7f-9158-0105865a102e.0ef1ce7e7655070245814231133626df.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c47daae-856a-4b7f-9158-0105865a102e.0ef1ce7e7655070245814231133626df.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c47daae-856a-4b7f-9158-0105865a102e.0ef1ce7e7655070245814231133626df.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (875573688, 'Duda Farm Fresh Foods Dandy Celery Sticks, 1 lb', 2.98, '073150152011', 'Celery Sticks 1 lb (454 g) No waste. All natural. Preservative free. Gluten free. Fruits & veggies, more matters. www.dudafresh.com. Get ideas and share yours! Twitter - At Dandy_Fresh. Facebook - Dandy Fresh Fruits and Vegetables. For recipes & tips text celery to 99000. Produce of USA. Keep refrigerated. 1 lb (454 g) Oviedo, FL 32765', 'Celery Sticks No waste. All natural. Preservative free. Gluten free. Fruits & veggies, more matters. www.dudafresh.com. Get ideas and share yours! Twitter - At Dandy_Fresh. Facebook - Dandy Fresh Fruits and Vegetables. For recipes & tips text celery to 99000. Produce of USA.', 'Duda Farm Fresh Foods', 'https://i5.walmartimages.com/asr/6498690f-f05d-46ec-9739-db3de30a126d.0bb148b5ac34351f15b1cc7ba7de7f33.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6498690f-f05d-46ec-9739-db3de30a126d.0bb148b5ac34351f15b1cc7ba7de7f33.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6498690f-f05d-46ec-9739-db3de30a126d.0bb148b5ac34351f15b1cc7ba7de7f33.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (875707062, 'Fresh Grape Red Globe, Bag', 2.17, '405767277083', 'Treat yourself to the delicious, juicy flavor of Fresh Green Seedless Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the fresh taste of Fresh Green Seedless Grapes.', 'Fresh Red Globe Seeded Grapes Bag Bursting with flavor and known for their large size Enjoy a handful as a fresh snack Add to a stunning cheese board or charcuterie plate Dry them to make raisins', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ef792e1b-5d00-4bdf-954c-34f14e8bc325.96dcbb55011e69c157a4b3999ae80cdd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ef792e1b-5d00-4bdf-954c-34f14e8bc325.96dcbb55011e69c157a4b3999ae80cdd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ef792e1b-5d00-4bdf-954c-34f14e8bc325.96dcbb55011e69c157a4b3999ae80cdd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (875729202, 'Sweet Onions, each', 0.86, 'deleted_813682015688', 'short description is not available', 'Bulk Sweet Onions', 'Fresh Produce', 'https://i5.walmartimages.com/asr/20e2cec5-74da-4481-ba2f-437a37f574a0_1.58a77675997b6e7da785398e536c8c1a.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20e2cec5-74da-4481-ba2f-437a37f574a0_1.58a77675997b6e7da785398e536c8c1a.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20e2cec5-74da-4481-ba2f-437a37f574a0_1.58a77675997b6e7da785398e536c8c1a.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (876015309, '200pc Pto Idaho 5#', 794, '405500368887', 'short description is not available', '200pc Pto Idaho 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (876369860, 'Freshness Guaranteed Chipotle Guacamole, 8 oz', 2.98, '681131305259', 'Turn up the smokiness with Freshness Guaranteed Chipotle Guacamole. This tasty guacamole features a creamy combination of Hass Avocados, chipotle peppers, jalapeno peppers, onions, and zesty mix of herbs and spices to ensure a mouth full of flavor in every bite. Add a dollop to your quesadillas, burgers, burritos, and sandwiches for a taste that will have you coming back for seconds. With 8 servings per container, this guacamole is perfect for serving up at small gatherings, barbecues, and game nights with family and friends. Plus, the inclusion of the reclosable lid in the packaging helps maintain its freshness between snack sessions. Scoop up some flavor with Freshness Guaranteed Chipotle Guacamole. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Spark Fresh Item.', 'Freshness Guaranteed Chipotle Guacamole, 8 oz: Smokey flavor profile 8 servings per container Pairs perfectly with chips Delicious as a spread on wraps, sandwiches, and toast', 'Fresh Produce', 'https://i5.walmartimages.com/asr/24f3afbc-7ff4-4506-a902-d3c69f9cdd15_1.32162f3e120eb765342a87f5f7d8b39c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24f3afbc-7ff4-4506-a902-d3c69f9cdd15_1.32162f3e120eb765342a87f5f7d8b39c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24f3afbc-7ff4-4506-a902-d3c69f9cdd15_1.32162f3e120eb765342a87f5f7d8b39c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (876768778, 'Fresh Saturn Peach, 1.3 lb Container', 4.34, '000000031134', 'Treat everyone to the sweet taste of Fresh California Grown Saturn Peaches. Also known as donut peaches, this fruit is great to hand out to the kids as a tasty after-school snack. Add these peaches to a fruit salad to serve at your next party or to a delectable salad as a sweet topping. Serve them with cheese, salami, and almonds for a wonderful picnic cheese plate. You could also slice them to top your yogurt and granola for a healthy breakfast, or even make a tasty peach crumble dessert for your next dinner party. The culinary opportunities are endless with Fresh California Grown Saturn Peaches.', 'Fresh California Grown Saturn Peaches: Also known as donut peaches because of their unique shape Sweet and juicy Hand out to the kids as a tasty after-school snack Use to make a delicious fruit salad Slice and use top your yogurt and granola for a healthy breakfast', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5ccffb25-de52-4c58-b33d-1e8303b758b5.291871104347784b221ee737f9f7dd58.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5ccffb25-de52-4c58-b33d-1e8303b758b5.291871104347784b221ee737f9f7dd58.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5ccffb25-de52-4c58-b33d-1e8303b758b5.291871104347784b221ee737f9f7dd58.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (877050540, 'Fieldpack Unbranded Org Rainbow Chard 5oz', 4.88, '028764001712', 'short description is not available', 'Fieldpack Unbranded Org Rainbow Chard 5oz', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (877224146, 'Marketside Fresh Celery Sticks, 1.6 oz, 4 Pack', 1.97, '681131161510', 'Marketside Celery Sticks are a tasty and smart snack that you can enjoy any time of the day. Celery is a low calorie snack that is also a good source of fiber, calcium and potassium. These celery sticks come in a ready-to-eat package making it easy to enjoy on the go for you and your kids. Pair with peanut butter for a delicious, protein-rich snack or dip in your favorite dressing for quick, flavorful treat. Keep this plastic package refrigerated for a cool, refreshing taste. Enjoy a refreshing snack with the wholesome taste of Marketside Celery Sticks. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Fresh Celery Sticks, 1.6 oz, 4 Pack 4 pack of celery sticks Pair with peanut butter for a delicious, protein-rich snack or dip in your favorite dressing for quick, flavorful treat Good source of fiber Only 5 calories per pack Packaged in a 6.4 oz plastic bag', 'Marketside', 'https://i5.walmartimages.com/asr/090a5a24-e3be-4728-964b-57952404b359.1f02ca476740e5e2d70e0e31dc28058f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/090a5a24-e3be-4728-964b-57952404b359.1f02ca476740e5e2d70e0e31dc28058f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/090a5a24-e3be-4728-964b-57952404b359.1f02ca476740e5e2d70e0e31dc28058f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (877306194, 'Tomatoes On The Vine Per Lb', 2.48, '405569812864', 'short description is not available', 'Tomatoes On The Vine Per Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (877334089, 'Pink Cripps Apples 5 Lb Bag', 5.29, '847473005930', 'short description is not available', 'Pink Cripps Apples 5 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (877603885, '180pc Pto Rst 10# Rp', 1074.6, '400094860762', 'short description is not available', '180pc Pto Rst 10# Rp', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (877755984, 'Fairytale Pumpkin, 1 Each', 8.98, '000000048477', 'Fairytale Pumpkin, 1 Each', 'Fairytale Pumpkin', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (877873370, 'Watermelon Seedless', 5.68, '400094579435', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (877981011, 'Jalapeno Peppers Half Pint Clamshell', 1.78, '813055013457', 'short description is not available', 'Jalapeno Peppers Half Pint Clamshell', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (878055805, 'Ruby Frost Apples 2 Lb Bag', 4.97, '863046000119', 'short description is not available', 'Snap Dragon Ruby Frost Apples 2 Lb Bag', 'Snap Dragon', 'https://i5.walmartimages.com/asr/c9dc9ba1-a552-4d1f-9b6d-aece5ce9c5f8.400805bfd55af71ecdbfd00d3e4f4f16.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c9dc9ba1-a552-4d1f-9b6d-aece5ce9c5f8.400805bfd55af71ecdbfd00d3e4f4f16.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c9dc9ba1-a552-4d1f-9b6d-aece5ce9c5f8.400805bfd55af71ecdbfd00d3e4f4f16.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (878377860, 'Fresh Grown Yellow Nectarines, 1 Lb.', 2.38, 'deleted_845792040366', 'Yellow Nectarines- PLU 4036', 'Fresh Grown Yellow Nectarines', 'Farm2You', 'https://i5.walmartimages.com/asr/b55a583a-8ba0-4ec5-a8d9-163f4110fb46_1.86473738179987a06a016888c0bf6da9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b55a583a-8ba0-4ec5-a8d9-163f4110fb46_1.86473738179987a06a016888c0bf6da9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b55a583a-8ba0-4ec5-a8d9-163f4110fb46_1.86473738179987a06a016888c0bf6da9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (878447739, 'Key West Pimiento Cubanelle Peppers', 0.23, '860046000163', 'Key West Pimiento, 22 Lb.', 'Key West Pimiento Cubanelle Peppers', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/e9c77d66-9802-4715-8fc0-d9bcfbb3ab22.7aa27787324d0f9686e033b5a4334590.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9c77d66-9802-4715-8fc0-d9bcfbb3ab22.7aa27787324d0f9686e033b5a4334590.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9c77d66-9802-4715-8fc0-d9bcfbb3ab22.7aa27787324d0f9686e033b5a4334590.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (878535075, 'Serrano Peppers', 2.54, '812181022180', 'short description is not available', 'Serrano Peppers', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (878576025, 'Produce Unbranded Red Bell Pepper, 1 Each', 1.38, 'deleted_856977005292', 'Enhance your meals with the delicious flavor of Red Bell Peppers. This vegetable contains essential vitamins such as A and C, and minerals including calcium and magnesium. Red bell pepper, also known as red capsicum, has a crisp flavor that enhances a variety of recipes. Dice bell peppers and put them in a hearty chili, slice them, saute them with onions or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out red bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper that will have the family asking for seconds. They also taste delicious raw alongside other vegetables. Add your favorite dip for a healthy, crunchy crudite. Cooked or uncooked, Red Bell Peppers are an excellent item to have on hand.', 'Red Bell Pepper, 1 each: Naturally low in calories Exceptionally rich in vitamin C and other antioxidants Delicious cooked or uncooked Create delicious recipes with fresh red peppers', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/4f92e5bb-3fc7-4894-9fac-11af41bfb025.69c58e1f4a487c78f9684a3050ca8d0a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4f92e5bb-3fc7-4894-9fac-11af41bfb025.69c58e1f4a487c78f9684a3050ca8d0a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4f92e5bb-3fc7-4894-9fac-11af41bfb025.69c58e1f4a487c78f9684a3050ca8d0a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (878779585, 'Kanzi Apples 2 Lb Bag', 4.44, '847473004599', 'short description is not available', 'Kanzi Apples 2 Lb Bag', 'KANZI', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (878846683, 'Watermelon Seedless', 4.48, '400094373279', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (879052740, 'Services Reduced Program Dept 94', 0.03, '251682000004', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (879166444, 'Marketside Beyond Baby Spinach & Spring Mix Salad, 4 oz Clam Shell, Fresh', 3.73, '194346001491', 'Enjoy the fresh flavor of Marketside Beyond Baby Spinach and Spring Mix. These greens are indoor and vertically grown for peak-season freshness all year long. Indoor vertical farms are a controlled growing environment giving each plant the optimal amount of light and nutrients for fresh and flavorful produce any time of the year. Farming vertically means our produce can be grown using significantly less water and land than traditional outdoor farms. Create something delicious with Marketside Beyond Baby Spinach and Spring Mix. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Beyond Baby Spinach & Spring Mix, 4 oz: Baby spinach, baby romaine, baby leaf lettuce, baby red lettuce (ingredients may vary) Indoor and vertically grown for peak-season freshness all year long No pesticides, herbicides or fungicides applied to our greens Convenient peel and reseal packaging Keep refrigerated until ready to enjoy', 'Marketside Beyond', 'https://i5.walmartimages.com/asr/5b194752-285e-41fb-a852-b6b7b07550a5.3da6a678067e8e34fbc6b1a6faa29a80.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b194752-285e-41fb-a852-b6b7b07550a5.3da6a678067e8e34fbc6b1a6faa29a80.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b194752-285e-41fb-a852-b6b7b07550a5.3da6a678067e8e34fbc6b1a6faa29a80.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (879252399, 'Melocotones 2lb', 4.88, '', 'short description is not available', 'Melocotones 2lb', 'Unbranded', 'https://i5.walmartimages.com/asr/ec224b9a-aa1f-4506-835d-758d692733c5.89ffd50e19d294a579a9b9d12aabffd5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec224b9a-aa1f-4506-835d-758d692733c5.89ffd50e19d294a579a9b9d12aabffd5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec224b9a-aa1f-4506-835d-758d692733c5.89ffd50e19d294a579a9b9d12aabffd5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (879720857, 'Acorn Squash', 1.18, '095829555398', 'short description is not available', 'Acorn Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/42805330-9346-4dd4-9362-9b71d0491d13.47ac454488713e49f4a0d82c51449b00.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42805330-9346-4dd4-9362-9b71d0491d13.47ac454488713e49f4a0d82c51449b00.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42805330-9346-4dd4-9362-9b71d0491d13.47ac454488713e49f4a0d82c51449b00.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (881396026, '125pc Pto Rst Jmb 8#', 721.25, '405720426985', 'short description is not available', '125pc Pto Rst Jmb 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (881490672, 'Plum, Each', 0.5, '405753578101', 'short description is not available', 'Plum, Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (881951659, 'Broccoli Florets 8z', 2.48, '782796025213', 'short description is not available', 'Broccoli Florets 8z', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (882217355, 'Red Potatoes, 3 Lb.', 3.47, 'deleted_033383510019', 'Red Potatoes, 3 Lb.', 'Red Potatoes 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (882446465, 'Fresh Kokomo Grapes, 1 Lb', 3.48, '854957001241', 'short description is not available', 'Fresh Kokomo Grapes, 1 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (882558704, 'Sweet Potatoes 3 Lb Bag', 2.88, 'deleted_854811008003', 'short description is not available', 'Sweet Potatoes 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/01c537ea-5b71-4040-89c3-a81c294d0bfd_2.c6f3f5e9c0e397e1b9352a2f992e65f9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/01c537ea-5b71-4040-89c3-a81c294d0bfd_2.c6f3f5e9c0e397e1b9352a2f992e65f9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/01c537ea-5b71-4040-89c3-a81c294d0bfd_2.c6f3f5e9c0e397e1b9352a2f992e65f9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (882644365, 'Tasteful Selection Sea Salt & Herb Org Tray 16oz 2 bites potatoes', 5.97, '826088989026', 'Our Micro Tray is all about convenience – this kit contains organic, fresh baby potatoes and an expertly blended organic seasoning packet. Health, freshness and convenience ready in minutes! Is Low calories, Non-GMO, Gluten Free, Source of Potassium. Ingredients: Organic Potatoes, Sea Salt, Organic Parsley, Organic Paprika, Organic Black Pepper, Organic Rosemary, Organic Thyme, Organic Sunflower Oil, Organic Garlic Oil.', 'Gluten Free NON-GMO Source of Potassium Organic Low in Calories', 'Tasteful Selection', 'https://i5.walmartimages.com/asr/daa90e73-74a3-4d9a-b627-0c687e1ce93b.6d8089c01bad8723f9671411bf0dbbd3.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/daa90e73-74a3-4d9a-b627-0c687e1ce93b.6d8089c01bad8723f9671411bf0dbbd3.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/daa90e73-74a3-4d9a-b627-0c687e1ce93b.6d8089c01bad8723f9671411bf0dbbd3.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (882820944, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094988862', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (882876417, 'Yellow Flesh Peaches, per Pound', 1.58, '400094273371', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (883508064, 'Rainier Cherries, Half Pint', 2.98, '888289403671', 'Rainier Cherries, Half Pint', 'Rainier Cherries 1/2 Dry Pint', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (883640849, 'Fresh Cosmic Crisp Apples, Each', 0.94, '000000035071', 'Meet your new favorite apple, the Cosmic Crisp. Cosmic Crisp Apples are prized for their vibrant red color, pearl-colored flesh, perfectly balanced flavor and delightfully crisp texture. An excellent choice for baking, snacking and entertaining, Cosmic Crisp Apples are the delicious result of 20 years of research by Washington State University’s world-class tree fruit breeding program. The Cosmic Crisps is a cross of the Enterprise and Honeycrisp varieties. The large, juicy and red apple has a perfectly balanced flavor and firm texture, making it ideal for snacking, cooking, baking, and entertaining. The striking color and shape of the Cosmic Crisp shines in fresh decor like wreaths, floral arrangements and tablescapes.', 'Apple Cosmic Crisp, Each Cross of the Enterprise and Honeycrisp varieties Large, juicy and red apple has a perfectly balanced flavor and firm texture Ideal for snacking, cooking, baking, and entertaining Shines in fresh decor like wreaths, floral arrangements and tablescapes Adds flavor to a variety of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6e8284d0-ba2f-497a-92c1-705aac4f63d1.8b2619781e5d3318cab2bf21805b9741.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6e8284d0-ba2f-497a-92c1-705aac4f63d1.8b2619781e5d3318cab2bf21805b9741.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6e8284d0-ba2f-497a-92c1-705aac4f63d1.8b2619781e5d3318cab2bf21805b9741.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (883971287, 'Mother Earth Products Crunchy Seedless Red Grape Halves, 2 Cup Jar', 7.98, '810919034504', 'Mother Earth Products Freeze Dried Red Grape Halves (Seedless): a healthy & convenient addition to every area of your life without the headache: emergency preparedness, snacking, long and short term storage, traveling, everyday cooking, hiking, backpacking, spicing up your recipes, etc. – use it now or later. Mother Earth Products Freeze Dried Red Grape Halves (Seedless) are made with real, Non-GMO Red Grapes: preservative free, additive free, & kosher - a guilt-free, hearty food that makes eating wonderfully delectable & appealing, without the hassle of weekly trips to the store or the worry of spoiling. It’s so delicious you won’t store it away and hope you never have to use it. Taste the Goodness of Mother Earth Products.', '100% red grapes; long term storage; short term storage; pantry; portable; convenient; nothing added; emergency preparedness; great flavor; easy to cook with; can eat straight from container without reconstituting; snack on immediately', 'Mother Earth Products', 'https://i5.walmartimages.com/asr/1cd0b4ed-cd9e-4dec-b7b8-a08cf168faad.38222b539f1cc9bba28743db6f3f51ed.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1cd0b4ed-cd9e-4dec-b7b8-a08cf168faad.38222b539f1cc9bba28743db6f3f51ed.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1cd0b4ed-cd9e-4dec-b7b8-a08cf168faad.38222b539f1cc9bba28743db6f3f51ed.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (885019162, 'Marketside Chopped Bacon Bleu Salad Bowl, 7.5 Oz.', 2.98, '681131160919', 'Marketside Chopped Bacon Bleu Salad Bowl, 7.5 Oz.', 'Marketside Salad Bowl Chopped Bacon Bleu 7.5 Oz.', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (885064063, 'Fresh Jumbo Blueberries, 9.5oz', 4.98, '', 'Create decadent meals with sweet and light Fresh Blueberries. Enjoy them for breakfast, lunch, dinner, or dessert. Use them to make a lemon and blueberry galette, bake them into delicious blueberry muffins, cook up a sweet and savory pizza topped with blueberries and bacon, or reduce them for a sauce to use on grilled chicken or cheesecake. They contain essential vitamins and nutrients like, vitamin C, vitamin K, antioxidants, and manganese making them perfect for a healthy diet', 'Light, refreshing taste Healthy treat Prior to serving gently wash them with cool water Refrigerate your berries in the original container to maintain freshness', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (885125828, 'Satsuma, 3lb bag', 3.76, 'deleted_000195001011', 'Tangerines, Bag 3 LB', 'Satsuma, 3lb bag', 'Rivers Best', 'https://i5.walmartimages.com/asr/13f5550d-3930-45fa-8ae3-ebbb44c02bb7_1.fb1d7db9e65406f92a2aa5b6df6a03da.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13f5550d-3930-45fa-8ae3-ebbb44c02bb7_1.fb1d7db9e65406f92a2aa5b6df6a03da.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13f5550d-3930-45fa-8ae3-ebbb44c02bb7_1.fb1d7db9e65406f92a2aa5b6df6a03da.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (885551930, 'Freshness Guaranteed Fajita Mix, 8 oz', 2.88, '681131093026', 'Freshness Guaranteed Fajita Mix brings together crisp yellow onions, green bell peppers, and red bell peppers that are sliced and ready to add vibrant flavor to your favorite meals. This colorful blend offers a convenient way to prepare quick weeknight dinners, whether you are making sizzling stovetop fajitas, layering veggies into tacos, or adding fresh taste to salads and rice bowls. Each ingredient is prepped to save you time while still delivering a satisfying crunch and natural sweetness that enhances every bite. With its versatile use and fresh taste, Freshness Guaranteed Fajita Mix makes it simple to enjoy delicious meals with ease. Freshness Guaranteed Fajita Mix helps you create flavorful dishes your whole family will love. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Fajita Mix, 8 oz Pre sliced mix of yellow onions and bell peppers Ready to use for quick meal prep Great for fajitas, tacos, salads, and rice bowls Adds fresh flavor and crisp texture to dishes Convenient eight ounce portion size', 'Fresh Produce', 'https://i5.walmartimages.com/asr/61196911-adfa-41d2-8d51-f7aabe3f890e.2950ffd58d31f5b945df797ee6960a3b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/61196911-adfa-41d2-8d51-f7aabe3f890e.2950ffd58d31f5b945df797ee6960a3b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/61196911-adfa-41d2-8d51-f7aabe3f890e.2950ffd58d31f5b945df797ee6960a3b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (885660123, 'Services Reduced Program Dept 94', 0.01, '251860000000', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (886107948, '100 Calorie Skinny Potatoes, 3 Lb.', 1.5, '760314010101', '100 Calorie Skinny Potatoes, 3 Lb.', '100 Cal Skinny Potatoes 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (886635855, 'Yellow Flesh Peaches, per Pound', 1.58, '400094343272', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (886962116, 'Fresh Passion Fruit, Each', 2.74, '405655340523', 'Get ready for a tropical taste bomb with this juicy Fresh Passion Fruit. This fresh and whole fruit has a hard purple shell protecting the bright yellow interior with black seeds. Cut the fruit in half, scoop the pulp out with a spoon and enjoy. If it\'s too tart, try sprinkling sugar to sweeten the treat. You can also use this fresh passion fruit in several baking recipes including a delicious cream pie or fruit truffles. You can even use them to make a marinade or a passion fruit vinaigrette. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Fresh Passion Fruit.', 'Fresh Passion Fruit, Each Sweet and juicy Fresh and whole fruit with a hard purple shell Scoop the pulp out with a spoon and enjoy Use to make a delicious cream pie or fruit truffles Make a marinade or a passion fruit vinaigrette salad dressing', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f74ab571-6ff0-4784-877d-37200a1c3d84.7743cedecfeafb038f3be240bff14bb5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f74ab571-6ff0-4784-877d-37200a1c3d84.7743cedecfeafb038f3be240bff14bb5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f74ab571-6ff0-4784-877d-37200a1c3d84.7743cedecfeafb038f3be240bff14bb5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (887064557, 'Organic Whole White Mushrooms, 16 oz', 4.94, 'deleted_037102281419', 'Experience the fresh taste of Organic Whole White Mushrooms. If you\'re looking for a traditional mushroom with a mild earthy taste, white mushrooms are just what you need. They\'ve remained the most popular mushroom for several decades, and although all mushrooms are versatile, white mushrooms are the most versatile of them all. Pre-cleaned and in their whole form, they are perfect for slicing, dicing, and cutting however you like to create culinary works all your own. They are free of fat and cholesterol and are low in calories and sodium. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try out Organic Whole White Mushrooms.', 'Organic Whole White Mushrooms, 16 oz: 16-ounce package of organic whole white mushrooms Naturally fat-free Cholesterol-free Low in calories, carbs and sodium Fresh and all natural Natural source of the antioxidant selenium Great for salads, pizzas, and much more', 'Monterey', 'https://i5.walmartimages.com/asr/d1646df2-1733-46b0-875a-4c3904c55eab.56c455cc7999bc321eafcef945330e53.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d1646df2-1733-46b0-875a-4c3904c55eab.56c455cc7999bc321eafcef945330e53.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d1646df2-1733-46b0-875a-4c3904c55eab.56c455cc7999bc321eafcef945330e53.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (887082105, 'Fresh Juici Apple, Each', 1.06, '000000034678', 'Fresh Juici Apple is a refreshing and crisp apple variety known for its juicy and sweet flavor. Each apple is carefully selected and handpicked to ensure maximum freshness and quality. With a bright, vibrant red skin and a delightful crunch, Fresh Juici Apple is the perfect snack or ingredient to add a burst of natural sweetness to any dish. Whether enjoyed on its own or used in desserts, salads, or smoothies, each Fresh Juici Apple promises a satisfying and mouthwatering experience.', 'Fresh, whole, juicy and sweet apple Exceptional Juiciness: Juici Apples are known for their exceptional juiciness, providing a refreshing and satisfying eating experience. With every bite, you can enjoy the burst of natural juice that runs down your chin, making them perfect for quenching your thirst or satisfying a craving for something juicy and delicious Crisp Texture: Juici Apples have a crisp and firm texture that adds to their overall appeal. Whether you prefer biting into a crunchy apple or slicing it for a crisp addition to salads or desserts, Juici Apples maintain their texture and freshness, ensuring a delightful eating experience every time. Sweet and Tangy Flavor: Juici Apples offer a perfect balance of sweetness and tanginess, making them a popular choice for apple lovers. The natural sweetness is complemented by a subtle tang, creating a flavor profile that is both refreshing and satisfying. Whether eaten on their own or used in various culinary creations, Juici Apples bring a burst of flavor to every dish.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e83cfb54-40f6-433a-8f3a-5e11af4bdc93.49ba5b028ba589a44e3f8e9d4541e6d8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e83cfb54-40f6-433a-8f3a-5e11af4bdc93.49ba5b028ba589a44e3f8e9d4541e6d8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e83cfb54-40f6-433a-8f3a-5e11af4bdc93.49ba5b028ba589a44e3f8e9d4541e6d8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (887737552, 'Fresh Green Beans', 1.68, '846764007912', 'short description is not available', 'Fresh Green Beans', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1a37a01a-9421-40d2-a9f9-15eeab602903_3.aa9b18d1a89c21ecce44e5def855d938.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a37a01a-9421-40d2-a9f9-15eeab602903_3.aa9b18d1a89c21ecce44e5def855d938.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a37a01a-9421-40d2-a9f9-15eeab602903_3.aa9b18d1a89c21ecce44e5def855d938.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (887852760, 'Aerofarms Kale Microgreens Salad, 2 oz Clam Shell, Fresh', 3.98, '815063021233', 'Sweet and wholesome, AeroFarms kale microgreens are tender, mild, and a versatile recipe staple. Our Micro Kale falls in the light blue portion of the AeroFarms FlavorSpectrum™, representing a slight sweetness with green, mellow notes. Microgreens can contain considerably higher levels of vitamins and carotenoids—about 5X greater—than their mature plant counterparts, according to the United States Department of Agriculture. AeroFarms greens are grown with zero pesticides and are ready to enjoy right out of the container. Taste the AeroFarms difference - enjoy Micro Kale by adding a heaping handful to boost any meal including sandwiches, wraps, soups, salads, smoothies, takeout, and more.', 'Bursting With Flavor No Pesticides Ever No Washing Needed', 'AeroFarms', 'https://i5.walmartimages.com/asr/ed564ed1-22b7-4c5f-bcb3-b12dd66d7b54.4013cd0646ae8b403ba679d138fb3519.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed564ed1-22b7-4c5f-bcb3-b12dd66d7b54.4013cd0646ae8b403ba679d138fb3519.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed564ed1-22b7-4c5f-bcb3-b12dd66d7b54.4013cd0646ae8b403ba679d138fb3519.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (889601050, 'Valley Fruit Pulp Guava Pouch', 4.97, '040232599781', 'Valley Fruit Pulp Guava Pouch', 'Valley Fruit Pulp Guava Pouch', 'VALLEY FRUIT', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (890201414, 'City Farms Baby Kale Clam 4 Oz', 6.43, '850010794044', 'short description is not available', 'City Farms Baby Kale Clam 4 Oz', 'Fresh City Farms', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (890997301, 'Topline Red Sweet Bell Pepper, 1 Each', 1.48, 'deleted_856122001414', 'Enhance your meals with the delicious flavor of Greenhouse grown Red Bell Peppers. Red bell pepper has a crisp flavor that enhances a variety of recipes. Dice bell peppers and put them in a hearty chili, slice them and add to a deli sandwich, saute them with onions and serve on a hoagie roll with a bratwurst, or stir-fry with thinly-sliced steak and serve with rice. A hollowed-out red bell pepper can be filled with sausage, mushrooms and rice to create a delicious stuffed pepper. They also taste delicious raw alongside other vegetables. Red Bell Peppers are an excellent item to have on hand.', 'Naturally low in calories, Exceptionally rich in vitamin C and other antioxidants Delicious cooked or uncooked Create delicious recipes with fresh red peppers', 'Topline', 'https://i5.walmartimages.com/asr/ae41f786-235a-4e11-85e4-a94167855ff2_1.639f373825d8a43561d2a6af551f12b7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ae41f786-235a-4e11-85e4-a94167855ff2_1.639f373825d8a43561d2a6af551f12b7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ae41f786-235a-4e11-85e4-a94167855ff2_1.639f373825d8a43561d2a6af551f12b7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (891543948, 'Organic White Beech Mushrooms, 3.5 oz', 3.98, 'deleted_021706672339', 'Experience the fresh taste of Organic White Beech Mushrooms. Beech mushrooms have a crunchy texture that offers a delicate, mild flavor that is both satisfyingly sweet and nutty. Perfect for soups, stews, sauces, or stir-fry\'s, Beech mushrooms retain their crisp texture when added as the last ingredient. Try sauteeing or roasting them on their own for a delectable side dish. They are free of fat and cholesterol and are low in calories and sodium. Plus, mushrooms are a natural source of the antioxidant selenium, making them an excellent addition to your diet. For a natural ingredient that will bring a marvelous taste and texture to your meal, be sure to try out Organic White Beech Mushrooms.', 'Organic White Beech Mushrooms, 3.5 oz: 3.5-ounce package of organic white Beech mushrooms Delicate, mild flavor that is both satisfyingly sweet and nutty Naturally fat-free Cholesterol-free Low in calories, carbs and sodium Fresh and all natural Natural source of the antioxidant selenium Great for soups, stews, sauces, or stir-fry\'s', 'PRODUCE', 'https://i5.walmartimages.com/asr/23d49ade-ad0e-400a-b275-b3a39e4e816f.2a0faf07104a43c26c0ce17b8f33ad05.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/23d49ade-ad0e-400a-b275-b3a39e4e816f.2a0faf07104a43c26c0ce17b8f33ad05.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/23d49ade-ad0e-400a-b275-b3a39e4e816f.2a0faf07104a43c26c0ce17b8f33ad05.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (892235937, 'Walmart Produce Peeled Apple Slices 5/2 Oz', 3.58, '717524716187', 'short description is not available', 'Walmart Produce Peeled Apple Slices 5/2 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (892287001, 'Fresh Green Seedless Grapes, Bag (2.25 lbs/Bag Est.)', 1.97, 'deleted_850016309006', 'Treat yourself to the delicious, juicy flavor of Fresh Green Seedless Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the fresh taste of Fresh Green Seedless Grapes.', 'Fresh Green Seedless Grapes Bag Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (892298806, '120pc Apl Red Del 5#', 656.4, '405667991393', 'short description is not available', '120pc Apl Red Del 5#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (892815036, 'Tito Fresh Ground Garlic Ajo Molido 16 oz', 8.99, '026552000206', 'Tito Fresh Ground Garlic ideal for sofrito. The ingredients are: ground garlic, salt, citric acid, and sodium benzoate.', 'Product of Spain Ready to Use 16 oz Jar', 'TiTo', 'https://i5.walmartimages.com/asr/651b27c3-2482-4618-a98c-b023fb360c46.2488a66913f5fc2635bcb2f6a2769f44.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/651b27c3-2482-4618-a98c-b023fb360c46.2488a66913f5fc2635bcb2f6a2769f44.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/651b27c3-2482-4618-a98c-b023fb360c46.2488a66913f5fc2635bcb2f6a2769f44.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (893073648, 'Fresh Blueberries, 6 oz', 3.58, 'deleted_850003027104', 'Fresh Blueberries, 6 oz', 'Glitter Pearly-Lustre Shell Pattern Phone Case For IPhone14/14Plus/14Pro/14ProMax, IPhone13/13Mini/13Pro/13ProMax, IPhone12/12Mini/12Pro/12ProMax, IPhone11/11Pro/11Pro Max ,IPhoneX/XS/XSMax Item id:NH01667Copy Surface Treatment Process:Glossy Feature:Other Material:Silicone', 'Fresh Produce', 'https://i5.walmartimages.com/asr/268303f5-fc97-42aa-918a-196ae1788a89.42916db89075095356dab1ee956330ea.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/268303f5-fc97-42aa-918a-196ae1788a89.42916db89075095356dab1ee956330ea.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/268303f5-fc97-42aa-918a-196ae1788a89.42916db89075095356dab1ee956330ea.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (893092837, 'Bagged Poblano Pepper', 2.64, 'deleted_812181022111', 'short description is not available', 'Bagged Poblano Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (893124763, 'Fresh Grape Tomato, 4 oz Cup', 3.48, '751666778955', 'Add color and flavor to your next meal with Grape Tomatoes. Similar to larger Roma tomatoes, grape tomatoes have a lower water content than cherry tomatoes, making them meatier, more flavorful, and even a little tidier with every bite. They are hardier and less fragile than a traditional tomato as well, so there\'s no need to worry about bruising either. Perfectly bite-sized, grape tomatoes are not only a simple and delicious addition to salads and pasta, but also serve as a quick and convenient snack all on their own. Plus, grape tomatoes have a longer shelf-life, which means it\'s perfectly fine to keep them in storage for several days at a time. All you have to do is grab and enjoy to experience the class tomato taste of Grape tomatoes.', 'Grape Tomatoes, 3 Pack: Lower water content and longer shelf-life than cherry tomatoes Hardier and more resistant to bruising than traditional tomatoes Conveniently bite-sized Quick and excellent addition to salads and snack trays Best stored at room temperature out of sunlight', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4d9b5b48-29cf-4c7c-8a7c-66fe79ad773f.2ea0e86a9295a70684f4b48b21b4d443.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4d9b5b48-29cf-4c7c-8a7c-66fe79ad773f.2ea0e86a9295a70684f4b48b21b4d443.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4d9b5b48-29cf-4c7c-8a7c-66fe79ad773f.2ea0e86a9295a70684f4b48b21b4d443.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (893193482, 'Organic Microwavable Potatoes, 1 Each', 1.28, '681131180757', 'Organic Microwavable Potatoes, 1 Each', 'Organic Microwavable Potatoes Per Each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cb8a1622-c7f4-421a-ae12-8382baeceeb5_1.137a209ba0a329a5761fabd5687baa6c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb8a1622-c7f4-421a-ae12-8382baeceeb5_1.137a209ba0a329a5761fabd5687baa6c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb8a1622-c7f4-421a-ae12-8382baeceeb5_1.137a209ba0a329a5761fabd5687baa6c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (893452467, '200pc Pto Idaho 5#', 794, '405513948816', 'short description is not available', '200pc Pto Idaho 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (893491711, 'Freshness Guaranteed Fresh Red Seedless Grapes', 2.28, '', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (893900089, 'California Grown Peaches, per Pound', 1.58, '400094858943', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (894756996, 'Green Grapes, per lb', 2.37, 'deleted_812985016118', 'short description is not available', 'Fresh Green Seedless Grapes, per lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a051cac-7566-4a38-a65d-1b1293cf0288_1.9f4661a6a0e78e1981608c78abd1b74a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (895067952, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094155158', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (895086702, 'Taylor Farms® Snack Pack Apples & Peanut Butter 3.8oz', 2.97, '030223060161', 'What\'s sweet savory and has your name written all over it? Our Taylor Farms Apples & Cheese snack tray. With delectable apples sweet carrots premium cheddar cheese and raw packed almonds you will feel like you just went to the local farmer\'s market. Make sure to try Taylor Farms Apples & Cheese snack trays today.', 'Washed and ready to enjoy Perfect snack for all ages Fits perfectly in lunch boxes Easy to pack on-the-go Enjoy at school, work, in the car, outside or anywhere else you need a snack!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b16ad03e-4071-449e-856b-fd4e0f4d65bc.b7e40c81e5645e5a4fc4a79407f0816c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b16ad03e-4071-449e-856b-fd4e0f4d65bc.b7e40c81e5645e5a4fc4a79407f0816c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b16ad03e-4071-449e-856b-fd4e0f4d65bc.b7e40c81e5645e5a4fc4a79407f0816c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (895457715, 'Watermelon Seedless', 4.48, '400094673089', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (895597040, 'Org Red Kale', 1.98, '000000946230', 'short description is not available', 'Org Red Kale', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (895640730, 'Fieldpack Unbranded Fresh Strawberries 2#', 4.74, 'deleted_857889003024', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 2#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/7b731147-acb8-48df-8c43-c711f550bbcc.1096d150f89a6c9bcf2dff7aadc14d51.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7b731147-acb8-48df-8c43-c711f550bbcc.1096d150f89a6c9bcf2dff7aadc14d51.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7b731147-acb8-48df-8c43-c711f550bbcc.1096d150f89a6c9bcf2dff7aadc14d51.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (895861900, '90pc Apple Gala 3#', 280.8, '405666177040', 'short description is not available', '90pc Apple Gala 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (896402409, 'Fieldpack Unbranded Fresh Strawberries 1#', 4.12, '400094377604', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (896696786, 'Natural Delights Gluten-Free Whole Fresh Medjool Dates, 8 Oz', 3.98, '097923000965', 'Natural Delights Whole Medjool Dates 8oz Pouch are Fresh and World\'s finest. They are a great snacking date that are naturally sweet and are perfectly healthy for you. Natural Delights Whole Medjool Dates are good source of fiber with no added sugar. Please go to naturaldelights.com for more great information. These fresh Medjool dates are non-pitted and have no preservatives. Product of USA. Best if refrigerated. Contains pits. May contain nuts.', '8oz Conventional Whole Pouch Premium. 4 grams of fiber. No additives. 281 mg potassium. No pesticides. Non GMO. 50% more potassium than bananas (By weight (USDA nutrient database)). Kosher for Passover. NaturalDelights.com. Great for your Health All Natural Great source of Fiber All Vegan\"', 'Natural Delights', 'https://i5.walmartimages.com/asr/bef6106e-411e-40d0-b12d-ddff67c9f887.d6c8c310df6b77d85e1cf33a15926b4c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bef6106e-411e-40d0-b12d-ddff67c9f887.d6c8c310df6b77d85e1cf33a15926b4c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bef6106e-411e-40d0-b12d-ddff67c9f887.d6c8c310df6b77d85e1cf33a15926b4c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (897186733, 'Freshness Guaranteed Strawberries & Blueberries 14 Oz', 6.97, '681131037150', 'short description is not available', 'Freshness Guaranteed Strawberries & Blueberries 14 Oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/0766f3c3-a2fd-414c-a47f-e14dc8c5c085.5c238a95a3d88c2e270d6780d2dedf2c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0766f3c3-a2fd-414c-a47f-e14dc8c5c085.5c238a95a3d88c2e270d6780d2dedf2c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0766f3c3-a2fd-414c-a47f-e14dc8c5c085.5c238a95a3d88c2e270d6780d2dedf2c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (899828537, '125pc Pto Idaho 8#', 721.25, '405551518873', 'short description is not available', '125pc Pto Idaho 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (899990770, 'Fresh Candy Drop Grapes, 1 Lb', 6.98, '827470003238', 'short description is not available', 'Fresh Candy Drop Grapes, 1 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (900124183, 'Fresh Red Seedless Grapes, Bag', 5.97, 'deleted_083477999985', 'short description is not available', 'Fresh Red Seedless Grapes, Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (900324057, 'Russet Potatoes, 5 lb bag', 3.98, '056210984647', 'Russet Potatoes, 5 Lb.', 'Russet Potatoes 5 Lb Bag', 'Unbranded', 'https://i5.walmartimages.com/asr/fdc11b8a-ef47-4f78-8527-5d8326ef6a92.09b3966a341ca2a62fe859971fe5687a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fdc11b8a-ef47-4f78-8527-5d8326ef6a92.09b3966a341ca2a62fe859971fe5687a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fdc11b8a-ef47-4f78-8527-5d8326ef6a92.09b3966a341ca2a62fe859971fe5687a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (900408843, 'Fresh White Beans, 12oz', 3.97, '794504173321', 'White beans are versatile and can be used in a variety of dishes, such as soups, stews, salads, dips, and spreads. They can be a great addition to almost all kinds of foods. Use them to make baked beans, pork and beans and soups. Their delicate flavor is great for any stew, dip, cassoulet, sauce, and white chili. They contain many essential nutrients and are very low in saturated fat. It is a good source of protein, iron, and dietary fiber. Most white beans sold commercially are dried or canned. There is also a nutritional difference; dried goods lose most of their water soluble vitamins. These include vitamins B-complex and C. Although neither vitamin is present in great numbers in beans.', 'White beans are an excellent source of fiber, protein, vitamins, and minerals. They may help improve digestion, manage blood sugar levels, promote heart health. Support healthy weight management.', 'Prico', 'https://i5.walmartimages.com/asr/c39a9c5c-404a-4584-ad2a-ee5b401c2af6.381afb9fbfff21ca0596b174b107c7e9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c39a9c5c-404a-4584-ad2a-ee5b401c2af6.381afb9fbfff21ca0596b174b107c7e9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c39a9c5c-404a-4584-ad2a-ee5b401c2af6.381afb9fbfff21ca0596b174b107c7e9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (900672024, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_400094412046', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (900783925, 'Fresh Large Hass Avocado Bag, 3- 4 Count', 3.48, '887214140544', 'Avocados aren’t just great-tasting fresh produce items, but they are a nutrient-dense fruit that can be enjoyed throughout the year. Hass avocados are a versatile ingredient with a creamy texture and mild flavor that can be used in many different types of recipes and dishes that are perfect for enjoying at barbecues and outdoor gatherings with friends and family during the summer. Enjoy Large avocados in countless ways that will make those barbecues and gatherings with family and friends even more exciting. Use avocados in flavorful recipes that everybody can share and enjoy while being together outside. Try avocados in individual Mexican food items like tacos or burritos, as part of appetizers like avocado crostini, or in a fresh guacamole or avocado dip so everybody can dip tortilla chips into something delicious. The possibilities are deliciously endless if you need additional food options for barbecues. Not only is a Large avocado a great ingredient to use in numerous ways, but it is also a healthy food that contributes unsaturated “good” fats and almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9. A Large ripe avocado will have a dark green to nearly black skin color, a bumpy skin texture and should yield to gentle pressure without leaving indentations or feeling mushy. Avocados with a slightly bumpy texture should be ripe in 1 to 2 days. They will also be somewhat firm and have a dark green and black speckled color. Once you’ve selected the perfect bag of avocados, you’ll be ready to enjoy all kinds of different healthy foods and recipes for the next time you’re enjoying an outdoor gathering with friends and families.', 'Bag of 3 to 4 Large Hass Avocados Fresh fruit with a creamy texture and mild flavor Fresh avocados are great for using in tacos, burritos, appetizers, avocado dip and fresh guacamole so that you have delicious food to share and enjoy during barbecues and the summer months A cholesterol free fruit that contains almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9 Large hass avocados are the lowest sugar fruit and provide unsaturated “good fats” that help absorb Vitamin A, Vitamin D, Vitamin K and Vitamin E Large ripe avocados will have dark green to nearly black skin color, a bumpy texture and should yield to gentle pressure without leaving indentations', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5c798f29-e430-419a-b4aa-36c9ccc4ade2.0ac54bdc229519ee39f7188386f272d8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5c798f29-e430-419a-b4aa-36c9ccc4ade2.0ac54bdc229519ee39f7188386f272d8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5c798f29-e430-419a-b4aa-36c9ccc4ade2.0ac54bdc229519ee39f7188386f272d8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (900920273, 'Marketside Beyond Zero Pesticides Crispy Leaf Lettuce, 4 oz Clam Shell (Fresh)', 3.73, '194346001538', 'Enjoy the fresh flavor of Marketside Beyond Crispy Leaf Lettuce. These greens are indoor and vertically grown for peak-season freshness all year long. Indoor vertical farms are a controlled growing environment giving each plant the optimal amount of light and nutrients for fresh and flavorful produce any time of the year. Farming vertically means our produce can be grown using significantly less water and land than traditional outdoor farms. Create something delicious with Marketside Beyond Crispy Leaf Lettuce. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Fresh and flavorful baby leaf lettuce Indoor and vertically grown for peak-season freshness all year long No pesticides, herbicides or fungicides applied to our greens Convenient peel and reseal packaging Keep refrigerated until ready to enjoy', 'Marketside', 'https://i5.walmartimages.com/asr/a67b4b07-33e0-498c-9204-09254321ba1a.d622efc73c3e756df1f19651df9b8c30.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a67b4b07-33e0-498c-9204-09254321ba1a.d622efc73c3e756df1f19651df9b8c30.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a67b4b07-33e0-498c-9204-09254321ba1a.d622efc73c3e756df1f19651df9b8c30.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (901103828, 'Butternut Squash', 1.18, '095829555466', 'short description is not available', 'Butternut Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (901544614, 'Fresh Christmas Tree Medley Tomato, 1 lb Package', 3.5, '057836021921', 'Bring the fresh, delicious taste of Christmas Tree Medley Tomatoes into your home. These little, round tomatoes deliver sweet and juicy flavor with each bite, making them a lovely, garden-inspired addition to salads at lunch or dinner, pasta, flatbreads, omelets, and so much more. They are small and bite sized, which makes them easy to enjoy as a healthy snack, whether they\'re on a party tray with other vegetables or tucked inside your kiddo\'s school lunch. However you choose to use them, these tomatoes will add big flavor and unforgettable taste to any meal. Get creative in the kitchen and enjoy some wholesome deliciousness with this festive package of Christmas Tree Medley Tomatoes.', 'Christmas Tree Medley Tomato, 1 lb Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Festive package is shaped like a Christmas tree Store at room temperature for best results', 'Sunset Grown', 'https://i5.walmartimages.com/asr/db0ce5d5-43f4-405f-abcd-357e58204f88.92bef8fe36e4a4881e98f3e52cb713d4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/db0ce5d5-43f4-405f-abcd-357e58204f88.92bef8fe36e4a4881e98f3e52cb713d4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/db0ce5d5-43f4-405f-abcd-357e58204f88.92bef8fe36e4a4881e98f3e52cb713d4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (901694031, 'Fresh Chilean Grown Black Grapes', 1.98, '', 'short description is not available', 'Fresh Chilean Grown Black Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (901712784, '125pc Pto Idaho 8#', 802.5, '405521527577', 'short description is not available', '125pc Pto Idaho 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (901769095, 'Navel Orange Bag, 5 lb', 8.94, 'deleted_605049623052', 'short description is not available', '5# Bag Navel Oranges', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (902175557, 'Fresh Green Beans', 1.68, '854206003019', 'short description is not available', 'Fresh Green Beans', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1b7ca92f-6e8e-4fc1-8797-585ce9a282d2_3.ab50b14a478dd2ebdaf05204fb2afc5a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b7ca92f-6e8e-4fc1-8797-585ce9a282d2_3.ab50b14a478dd2ebdaf05204fb2afc5a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b7ca92f-6e8e-4fc1-8797-585ce9a282d2_3.ab50b14a478dd2ebdaf05204fb2afc5a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (902457972, 'Fresh Organic Red Radish, 12oz Bag', 4.23, '078783908158', 'Serve up something amazing when you cook with Organic Fresh Red Radish. This versatile root vegetable is a great addition to a healthy diet and can be prepared in a variety of ways. Their slightly peppery flavor adds a natural, subtle spice to salads and slaws. Their crisp texture makes them a natural, healthy choice for dips. Try them as a low-carb substitute for potatoes when roasted or as a healthy side dish when grilled. However you choose to use them, these fresh radishes will add big flavor and unforgettable taste to any meal. The culinary possibilities are endless with Organic Fresh Red Radish.', 'Add to a recipe or enjoy on their own Try them grilled, roasted, or pickled Low carb substitute for starchy vegetables High in vitamin C and folate Antioxidant and anti-inflammatory properties support heart and blood health', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4399fc98-4f75-4182-9aa5-8b33fcad4f44.02420ce53bd10676eaf0d13f55c0d82a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4399fc98-4f75-4182-9aa5-8b33fcad4f44.02420ce53bd10676eaf0d13f55c0d82a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4399fc98-4f75-4182-9aa5-8b33fcad4f44.02420ce53bd10676eaf0d13f55c0d82a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (902720742, 'Marketside Super Blend Packaged Salad, 10 oz Bag (Fresh)', 3.28, '681131148368', 'Marketside Super Blend is a crisp, delicious mix of Brussels sprouts, Napa cabbage, kohlrabi, broccoli, carrots and kale. This refreshing super food blend is picked fresh, washed and ready to eat for your convenience. This healthy side is the perfect low-calorie side dish for your next barbecue or family dinner. It pairs well with grilled steaks, baked chicken and smoked salmon. Zest it up and mix in apple-wood smoked bacon, candied pecans, thinly sliced red onion and chipotle ranch. This super blend offers a nutritional benefit due to it being a good source of dietary fiber. Healthy sides are made easy with Marketside Super Blend. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Super Blend Packaged Fresh Salad, 10 oz Mix of crisp shredded broccoli, carrots and red cabbage Picked fresh for you Perfect side dish for backyard barbecues, family gatherings, picnics or weeknight dinners Washed and ready to eat Requires to be kept refrigerated 5 servings per container', 'Marketside', 'https://i5.walmartimages.com/asr/9c9fa858-be64-4af8-970d-cf18a0ab7976_2.7ce610bbd456060e3ef418ccbe39675b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c9fa858-be64-4af8-970d-cf18a0ab7976_2.7ce610bbd456060e3ef418ccbe39675b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9c9fa858-be64-4af8-970d-cf18a0ab7976_2.7ce610bbd456060e3ef418ccbe39675b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (903058075, 'Yellow Flesh Peaches, per Pound', 1.58, '400094966808', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (903140876, 'California Grown Peaches, per Pound', 1.58, '400094949597', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (903335209, 'Jumbo White Onions Per Pound', 0.93, 'deleted_853357002636', 'Add flavor to your next meal with these Fresh, Whole White Onions. For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. You can dice these onions and add them to a fresh garden salad for a satisfying crunch or sprinkle them on top of your fish tacos. White onions also make delicious golden onion rings to serve alongside juicy hamburgers and hot dogs at your next backyard barbecue. You can keep these onions at room temperature until ready to use. Stock your pantry with several Fresh, Whole, White Onions.', 'Fresh whole white onions Ideal ingredient in a variety of recipes Can be sauteed and put in your favorite foods for added flavor Use to top sandwiches, hamburgers, and hot dogs Fresh onions can be stored in a cabinet or pantry and are easy to prepare', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d9e5426b-5e94-4f13-a4f6-827d336299c4_3.116ef0ba6e643dac36ce097d686cfbd9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9e5426b-5e94-4f13-a4f6-827d336299c4_3.116ef0ba6e643dac36ce097d686cfbd9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9e5426b-5e94-4f13-a4f6-827d336299c4_3.116ef0ba6e643dac36ce097d686cfbd9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (903780823, 'Fresh Green Seedless Grapes', 1.78, 'deleted_000000035040', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (903800116, 'Cantaloupe', 2.67, 'deleted_816426010666', 'short description is not available', 'Cantaloupe', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (903882052, 'Fresh Mo Qua Squash, Each', 3.48, '000000048453', 'Mo Qua Squash is a tasty vegetable that the entire family is sure to enjoy. Of Chinese origin and a relative of winter melon, Mo Qua looks like a zucchini with medium green skin and is covered with delicate white hairs. Inside, the flesh is lightly colored and has a mild flavor. This versatile ingredient will absorb the flavors of whatever it is cooked with, and you can use it as you would zucchini or summer squash. Typically, this squash is used in stir fries, added to tasty soups, boiled, or braised. You could also incorporate it into a unique bread recipe or a hearty stew. Add something delicious and nutritious to your next meal with Mo Qua Squash.', 'Lightly colored flesh Mild taste that absorbs flavors of what it is cooked with Use as you would zucchini & summer squash Add to your next stir fry or hearty stew Good source of vitamins Explore delicious new recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cfa3f12f-ae2d-4308-b1b2-c5d7c382c5a9.cbe2841ba662c4df0e80d6e4e145b289.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cfa3f12f-ae2d-4308-b1b2-c5d7c382c5a9.cbe2841ba662c4df0e80d6e4e145b289.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cfa3f12f-ae2d-4308-b1b2-c5d7c382c5a9.cbe2841ba662c4df0e80d6e4e145b289.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (904200338, 'Services Reduced Program Dept 94', 0.01, '251717000009', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (904318451, 'Yellow Flesh Peaches, per Pound', 1.58, '400094838976', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (904384340, 'White Taro Root Whole Fresh, lb', 1.27, '405854077367', 'Create something fresh and delicious with this White Taro Root (Yautia Blanca). Taro, whose appearance is similar to a yam, is a versatile root that can be peeled, mashed, baked, boiled, sauteed, and more. Popular uses of Yautia include deep frying as fritters and chips. You can also use them to make a mouthwatering stew that the entire family will enjoy. Available year round, it is a good source of fiber and potassium. Make your next culinary masterpiece with Yautia Root.', 'Good source of fiber and potassium Low on the glycemic index Can be mashed, baked, boiled, sauteed, and more Deep fry to make fritters and chips Fresh and whole', 'Unbranded', 'https://i5.walmartimages.com/asr/5e3ee717-b24f-4b9b-898c-66b86037dc06.48578ed6e674e9142a56d590374d2689.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5e3ee717-b24f-4b9b-898c-66b86037dc06.48578ed6e674e9142a56d590374d2689.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5e3ee717-b24f-4b9b-898c-66b86037dc06.48578ed6e674e9142a56d590374d2689.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (904573487, 'Mixed Fruit With Lime', 2.48, '782796013401', 'short description is not available', 'Mixed Fruit With Lime', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (904590107, 'Revol Greens Local Greenhouse Grown Leafy Romaine Blend 7.5oz', 2.98, '850024486089', 'short description is not available', 'Revol Greens Leafy Romaine Blend 7.5oz', 'Revol Greens', 'https://i5.walmartimages.com/asr/853c2fb9-99ca-4b27-8fbc-011875ba1817.cd626b2805bba174611cde0cfc2fe46b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/853c2fb9-99ca-4b27-8fbc-011875ba1817.cd626b2805bba174611cde0cfc2fe46b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/853c2fb9-99ca-4b27-8fbc-011875ba1817.cd626b2805bba174611cde0cfc2fe46b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (904620409, 'Packham Pears, 4 lbs', 6.36, 'deleted_899734002080', 'short description is not available', '4lb Bag Of Packham Pears', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (904629588, '256pc On Ylw 3# Ptd', 496.64, '405563879757', 'short description is not available', '256pc On Ylw 3# Ptd', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (905569694, 'Lima Verde Suelta 36-40#', 1.06, '405873138490', 'short description is not available', 'Lima Verde Suelta 36-40#', 'Unbranded', 'https://i5.walmartimages.com/asr/a0452f57-1670-4e5a-9a73-be218b86af6d.fc9457869efbf4cc064630907ae65ba9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a0452f57-1670-4e5a-9a73-be218b86af6d.fc9457869efbf4cc064630907ae65ba9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a0452f57-1670-4e5a-9a73-be218b86af6d.fc9457869efbf4cc064630907ae65ba9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (905677021, 'Corn Husk shipper', 3945.6, '712810008168', 'short description is not available', 'Corn Husk shipper', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (906716072, 'Organic Cherry Tomato - 4.5\" Pot - Up to 2000 Cherry Tomatoes', 4.99, '811332038605', 'CHERRY TOMATO: A cherry tomato is a smaller garden variety of tomato. It is popular as a snack and in salads. Cherry tomatoes range in size from a thumbtip up to the size of a golf ball, and can range from being round to slightly oblong in shape. The more oblong ones often share characteristics with plum tomatoes, and are known as grape tomatoes. Sweet Million Cherry Tomato - Plant produces heavy yields of 1\" red cherry tomatoes. Very sweet and flavorful. Plant can produces over 500 cherry tomatoes. Crack Resistant. Excellent for salads and snacks. Suitable for home garden or market growers.', 'Plant produces heavy yields of 1\" red cherry tomatoes Excellent for salads and snacks Suitable for home garden or market growers Very sweet and flavorful. Indeterminate, 60 days.', 'Hirt\'s Gardens', 'https://i5.walmartimages.com/asr/8c01bcdc-5928-4d97-bed4-8f8def82a46a_1.b802f9d8a7a55340c058d76de532ce6f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8c01bcdc-5928-4d97-bed4-8f8def82a46a_1.b802f9d8a7a55340c058d76de532ce6f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8c01bcdc-5928-4d97-bed4-8f8def82a46a_1.b802f9d8a7a55340c058d76de532ce6f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (906767873, 'Fresh Red Grapefruit, 5 lb Bag', 5.98, 'deleted_899734002349', 'Red grapefruit offers a perfect balance of sweetness and tanginess, with its vibrant ruby-red flesh and juicy texture. Packed with vitamin C, antioxidants, and fiber, it’s a nutritious and refreshing choice for breakfasts, salads, or healthy snacks. Add a burst of color, flavor, and health benefits to your meals with this versatile citrus fruit! Available in a 5 lb bag.', 'Fresh red grapefruit is great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a grapefruit sprinkled with sugar in the morning Slice it up and put it in salad for lunch or dinner Make delicious grapefruit bars Great source of vitamin C and vitamin A You\'ll have plenty for everyone with this 3-pound bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/9183bc36-5af9-4986-bb8b-d0051507c3fe.990659cf83a79a12424f34a36a70d080.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9183bc36-5af9-4986-bb8b-d0051507c3fe.990659cf83a79a12424f34a36a70d080.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9183bc36-5af9-4986-bb8b-d0051507c3fe.990659cf83a79a12424f34a36a70d080.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (906939512, 'Manzanas Honeycrisp Empacada', 3.97, '033383046853', 'short description is not available', 'Manzanas Honeycrisp Empacada', 'Unbranded', 'https://i5.walmartimages.com/asr/fdffb720-8b75-43df-bffe-4ffc4e9369d8_3.d4460fa9146eb9716b5804d61d4b26b9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fdffb720-8b75-43df-bffe-4ffc4e9369d8_3.d4460fa9146eb9716b5804d61d4b26b9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fdffb720-8b75-43df-bffe-4ffc4e9369d8_3.d4460fa9146eb9716b5804d61d4b26b9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (907008607, 'Tomato Cherry Sweet Bites 14oz', 3.27, '057836021808', 'short description is not available', 'Tomato Cherry Sweet Bites 14oz', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (907329012, 'Fieldpack Unbranded Fresh Organic Strawberries 1#', 4.48, 'deleted_066022003795', 'short description is not available', 'Fieldpack Unbranded Fresh Organic Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/dd7491e8-5267-4493-9e9c-13e36492b8de.f22ba1e55f40b2169a3544503c13186b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd7491e8-5267-4493-9e9c-13e36492b8de.f22ba1e55f40b2169a3544503c13186b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd7491e8-5267-4493-9e9c-13e36492b8de.f22ba1e55f40b2169a3544503c13186b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (907489466, 'Jumbo White Onions Per Pound', 1.44, 'deleted_811009021886', 'Add flavor to your next meal with these Fresh, Whole White Onions. For breakfast, you could dice them and add to an omelet loaded with cheese, ham, and mushrooms. You can dice these onions and add them to a fresh garden salad for a satisfying crunch or sprinkle them on top of your fish tacos. White onions also make delicious golden onion rings to serve alongside juicy hamburgers and hot dogs at your next backyard barbecue. You can keep these onions at room temperature until ready to use. Stock your pantry with several Fresh, Whole, White Onions.', 'Fresh whole white onions Ideal ingredient in a variety of recipes Can be sauteed and put in your favorite foods for added flavor Use to top sandwiches, hamburgers, and hot dogs Fresh onions can be stored in a cabinet or pantry and are easy to prepare', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (907789685, 'Organic Apple & Pear Gift Box 4ct', 6.88, '847473001611', 'short description is not available', 'Organic Apple & Pear Gift Box 4ct', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (908051273, '150pc Pto Red 5# Wa', 865.5, '405507983328', 'short description is not available', '150pc Pto Red 5# Wa', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (908160902, '200pc Pto Red 5# Bw', 794, '405505080715', 'short description is not available', '200pc Pto Red 5# Bw', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (908316592, 'Tomato on the Vine, Bag', 1.98, 'deleted_679508111022', 'Keep your recipes simple and classic with fresh tomatoes on the vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, this fresh produce item is sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Walmart\'s Tomatoes On The Vine and keep your dishes looking great and tasting equally as excellent.', 'Tomatoes On The Vine, 1 lb: 1-pound bag of tomatoes on the vine Vine helps tomatoes maintain peak freshness and flavor Perfect for slicing, dicing, crushing and blending Great for sandwiches, pastas, pizzas and salsas Essential ingredient in every home-cook\'s kitchen', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (908403903, '120pc Apl Granny 5#', 600, '405672893415', 'short description is not available', '120pc Apl Granny 5#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (908517839, 'Bowery Farming Bowery Salad Spinach Mix 4oz', 2.98, '851536007526', 'short description is not available', 'Bowery Farming Bowery Salad Spinach Mix 4oz', 'Bowery Farming', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (909030024, 'Mini Zucchini 1lb Tray', 3.99, '699058030017', 'short description is not available', 'Mini Zucchini, Zukies Authentic mini zucchini mini-courgettes authentiques. Delicious raw & cooked. muccifarms.com. Facebook. Twitter. Pinterest. Instagram. (hashtag)Tasteitraw. Product of Mexico.', 'Mucci Farms', 'https://i5.walmartimages.com/asr/f50915a8-eda1-4c81-9b2b-fdd213f50f84.e271370f955047e2b87ac3be856b43be.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f50915a8-eda1-4c81-9b2b-fdd213f50f84.e271370f955047e2b87ac3be856b43be.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f50915a8-eda1-4c81-9b2b-fdd213f50f84.e271370f955047e2b87ac3be856b43be.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (909652248, 'Mann\'s Fresh Broccoli Veggie Sides, 8.8 oz', 3.97, '716519009815', 'Elevate mealtime with the Mann\'s Broccoli Veggie Sides. Made with a lemon herb sauce, this side of veggies is a perfect addition to your meals. Pair them with a perfectly cooked steak and potatoes for a delicious meal that will have you feeling like you dined at the best steakhouse in town. You can also serve them with grilled scallops and roles for a well-rounded dinner your friends and family is sure to love. In just three minutes, you can be enjoying the delicious taste of this broccoli. Simply place the bag in the microwave, microwave on high for three minutes, stir until combined, and enjoy. Complete your meals with the Mann\'s Broccoli Veggie Sides.', 'Broccoli with a lemon herb sauce Pair with steak and potatoes for a mouthwatering meal Serve with grilled scallops and rolls for a well-rounded meal Ready in just 3 minutes Perfect addition to your meals', 'Mann\'s', 'https://i5.walmartimages.com/asr/3c279077-8ded-418f-a514-fef4f7f6f061.06931b9424468194552c47a33970d3c1.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3c279077-8ded-418f-a514-fef4f7f6f061.06931b9424468194552c47a33970d3c1.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3c279077-8ded-418f-a514-fef4f7f6f061.06931b9424468194552c47a33970d3c1.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (910778087, 'Potato Morning Pearl 24 Oz Bag', 3.29, '629307120541', 'short description is not available', 'Potato Morning Pearl 24 Oz Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (910846388, 'Fresh Cubanelle Peppers, 16 Ounce Bag', 2.64, '711069541181', 'Add rich flavor and color to your meals with these fresh Cubanelle Peppers. These versatile peppers are light green in color before they ripen and then turn red once they\'re ripe. The Cubanelle is a mild pepper that may be used much like you would use a bell pepper. Try these peppers stuffed with your favorite ingredients like cheese, sirloin steak, and zesty spices. You could also use them in your next stir fry to add a mild sweetness or even pan fry them and season them for a quick and tasty snack. They are low in calories, and they\'re a great source of vitamins C and A. Create your next culinary masterpiece with fresh Cubanelle Peppers.', 'Mild and sweet Perfect stuffed with your favorite ingredients Try them in your next stir fry Fry and season by themselves for a quick and nutritious snack Low in calories Good source of vitamins A and C t has a fine and tender texture, with thinner walls than bell peppers.', 'Bailey Farms', 'https://i5.walmartimages.com/asr/1f285a52-be08-4a0d-bda1-50cde88b8636.a536b065baf8b47490357acee2c1d0dc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f285a52-be08-4a0d-bda1-50cde88b8636.a536b065baf8b47490357acee2c1d0dc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f285a52-be08-4a0d-bda1-50cde88b8636.a536b065baf8b47490357acee2c1d0dc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (911026374, 'Fresh Green Seedless Grapes', 2.88, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (911509204, 'Red Potatoes 3 Lb Bag', 3.24, 'deleted_842281099461', 'Red 3# Potatoes in a Boil Ready Bag', 'Red Potatoes 3lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b3b1bea9-a83b-408f-a96c-7aedc81b43a2.be48ad90096b4dcd2357695436683eba.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3b1bea9-a83b-408f-a96c-7aedc81b43a2.be48ad90096b4dcd2357695436683eba.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3b1bea9-a83b-408f-a96c-7aedc81b43a2.be48ad90096b4dcd2357695436683eba.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (911878713, 'Fresh Half Runner Beans', 4.48, '711069541266', 'short description is not available', 'Fresh Half Runner Beans', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (912408331, 'Pepper Mini Sweet', 2.98, 'deleted_885773051127', 'short description is not available', 'Pepper Mini Sweet', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (912767931, 'Yellow Flesh Peaches, per Pound', 1.58, '400094608685', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (913190127, 'Diced Green Onions', 2.58, '782796013265', 'short description is not available', 'Diced Green Onions', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (913191274, 'Red Onions 3 Lb Bag', 3.54, 'deleted_041220594696', 'short description is not available', 'Red Onions 3 Lb Bag', 'HJZWTS', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (913282525, '180pc Orange Nvl 3#', 715, '405712292178', 'short description is not available', '180pc Orange Nvl 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (913381828, 'Fresh Whole Tomato on the Vine, 1.5 lb Bag', 2.97, 'deleted_069905815249', 'Keep your recipes simple and classic with Fresh Whole Tomatoes on the Vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, this fresh produce is sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Fresh Whole Tomatoes on the Vine and keep your dishes looking great and tasting equally as excellent.', 'Fresh Whole Tomato on the Vine, 1.5 lb Bag Firm and juicy flesh and unmistakably delicious flavor Comes right to your kitchen still on the vine Slice them up to garnish a sandwich or burger for added flavor and texture Dice them up to create a pizza or pasta topping Crush them up to make a decadent bruschetta or sauce Finely blend them to create your own personalized salsa', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (913639932, 'Gala Apples 3 Lb Bag', 3.12, 'deleted_400094813133', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (913709215, 'Fresh Hot House Strawberries, 1 lb', 4.47, 'deleted_699058999116', 'short description is not available', 'Fresh Hot House Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0ea46b14-8b92-4ea1-837a-b596d943765e.eafd5c2499865066412ae752b533d9bc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ea46b14-8b92-4ea1-837a-b596d943765e.eafd5c2499865066412ae752b533d9bc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0ea46b14-8b92-4ea1-837a-b596d943765e.eafd5c2499865066412ae752b533d9bc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (913726597, 'Fresh Garlic Mesh 3 count (60 units/case)', 1.77, '651973539129', 'Fresh Garlic Mesh 3 count (60 units/case)', 'Fresh garlic mesh, also known as garlic netting, is a practical tool for storing garlic bulbs Garlic products, whether fresh, peeled, or in paste form, offer a range of benefits that can enhance both your culinary creations and your health TIO PACO FRESH PRODUCE is a family business that has been importaing and distributing garlic to its valued customers across the country for over 20 years.', 'Tio Paco', 'https://i5.walmartimages.com/asr/2bab40be-511a-49bf-8505-fb753f5df3db.b7274649fc16d946feb7571cdb8df816.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2bab40be-511a-49bf-8505-fb753f5df3db.b7274649fc16d946feb7571cdb8df816.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2bab40be-511a-49bf-8505-fb753f5df3db.b7274649fc16d946feb7571cdb8df816.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (913960675, 'Green Giant Yellow Creamer Potato, 1.5 Lb.', 3.57, 'deleted_605806003707', 'Green Giant Yellow Creamer Potato, 1.5 Lb.', 'Yellow Green Giant Creamer Potato 1.5 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (914389946, 'Yellow Onions, 3 Lb.', 1.94, 'deleted_400094849415', 'Yellow Onions, 3 Lb.', 'Yellow Onions 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (914436487, 'Freshness Guaranteed Small Fruit Tray', 7.97, '681131036696', 'short description is not available', 'Freshness Guaranteed Small Fruit Tray', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (914503460, 'Jicama Wraps - Fresh cut Jicama Slices 7.5 Ounce Net Weight per Tray', 3.98, '850800007170', 'Introducing Jicama Wraps, the perfect alternative to traditional tortillas. Made from thinly sliced fresh-cut jicama, these wraps offer a refreshing and crisp texture. With their natural sweetness and low calorie content, Jicama Wraps are a guilt-free and delicious choice for wrapping your favorite fillings. Say goodbye to heavy tortillas and embrace the light and flavorful experience of Jicama Wraps. Enjoy a healthier twist on your favorite wraps today!', '7.5oz Net Content Jicama Slices Keto Introducing Jicama Wraps, the perfect alternative to traditional tortillas. Made from thinly sliced fresh-cut jicama, these wraps offer a refreshing and crisp texture. With their natural sweetness and low calorie content, Jicama Wraps are a guilt-free and delicious choice for wrapping your favorite fillings. Say goodbye to heavy tortillas and embrace the light and flavorful experience of Jicama Wraps. Enjoy a healthier twist on your favorite wraps today! Find this at your local Walmart!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/cc509c96-bb8c-4a44-88f7-8c92d4a9af6b.a9e9ab8b682243fdac912658b1e4e587.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc509c96-bb8c-4a44-88f7-8c92d4a9af6b.a9e9ab8b682243fdac912658b1e4e587.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc509c96-bb8c-4a44-88f7-8c92d4a9af6b.a9e9ab8b682243fdac912658b1e4e587.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (914648758, 'Milpero Tomatillos, 1 lb', 2.52, '750455000819', '', '', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/30293232-4f93-4396-87f4-cfbf6860e8e3_1.0914342035279c84c0139d0538ce7c33.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/30293232-4f93-4396-87f4-cfbf6860e8e3_1.0914342035279c84c0139d0538ce7c33.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/30293232-4f93-4396-87f4-cfbf6860e8e3_1.0914342035279c84c0139d0538ce7c33.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (914688792, 'Ready Pac Bistro Kale Apple Pecan Salad Bowl, 5.75 oz', 3.48, '077745270463', 'Kale Apple Pecan Premium Salad Bowl', 'Kale Apple Pecan Premium Salad Bowl - Chopped Kale, Diced Apples, Swiss Cheese, Candied Pecans, Dried Cranberries, Carrots and Red Cabbage with a Country Dijon Dressing. Fork included, 360 calories per serving, 7g of protein per serving.', 'Ready Pac Foods', 'https://i5.walmartimages.com/asr/369249ee-ee2b-43ed-8741-5b83dce57010_1.63887a357a38759cb0b43c691d65ec7f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/369249ee-ee2b-43ed-8741-5b83dce57010_1.63887a357a38759cb0b43c691d65ec7f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/369249ee-ee2b-43ed-8741-5b83dce57010_1.63887a357a38759cb0b43c691d65ec7f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (915293418, 'Marketside Organic Zucchini, 6 oz, 2 Count', 2.96, 'deleted_681131221054', 'Marketside Organic Zucchini is an extremely versatile vegetable that is a must-have for every cook. You can prepare zucchini in a variety of ways. You can choose to eat it raw, or you can saute it slightly with olive oil and salt. If you?re trying to cut down on carbohydrates, zucchini noodles are a great alternative to pasta. Simply use a spiralizer, julienne peeler or a knife to create thin strips of zucchini. Once you have your zucchini noodles, you can saute or bake them and add them to your favorite sauce. You can even use zucchini to make zucchini nut bread. The culinary possibilities are endless with Marketside Organic Zucchini. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Zucchini, 6 oz, 2 Count: USDA Organic Use to make zucchini noodles Refrigerate after opening Use within 2-3 days of opening Only about 30-50 calories per zucchini', 'Marketside', 'https://i5.walmartimages.com/asr/7587f0b5-1ce2-4db8-85ce-753c12329bf9_2.131d850bfa91440b880b52dc8bb5af65.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7587f0b5-1ce2-4db8-85ce-753c12329bf9_2.131d850bfa91440b880b52dc8bb5af65.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7587f0b5-1ce2-4db8-85ce-753c12329bf9_2.131d850bfa91440b880b52dc8bb5af65.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (915401299, 'Fresh California Grown Nectarines, 1 Lb.', 1.78, 'deleted_400094220412', 'Fresh California Grown Nectarines, 1 Lb.', 'Fresh California Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (915452605, 'Thai Peppers', 3.48, 'deleted_860001220650', 'short description is not available', 'Thai Peppers', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (915478216, 'Fresh Bibb Lettuce, 1 Each', 2.88, '852256005465', 'Discover the freshness of Aeroponic butter lettuce, cultivated in Faribault, MN. Grown in a vertical indoor agricultural system, each unit contains one head of this crisp and vibrant lettuce. Packaged in a classic clamshell, this 4-count box pack ensures the highest quality and convenience. Indulge in the unparalleled freshness of Faribault-grown Aeroponic butter lettuce, perfect for elevating your salads and culinary creations.', 'Full head of lettuce with clean roots included (industry standard) The product stays fresher longer. The plant is still alive. Promoting a more healthy product. Soft, delicate variety of lettuce. Nutritional content is the same as conventional. Roots are misted with the nutrient rich water. Broad, green leaves are great for chopping for salads or using whole with lettuce wraps.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6a30faf5-2c0e-4ed6-8620-5d933661a532.afab3e32a32cb3ced949b048118efda7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a30faf5-2c0e-4ed6-8620-5d933661a532.afab3e32a32cb3ced949b048118efda7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a30faf5-2c0e-4ed6-8620-5d933661a532.afab3e32a32cb3ced949b048118efda7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (915957991, 'Fresh Red Seedless Grapes', 1.84, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (916002571, 'Freshness Guaranteed Mango Medium', 5.27, '262828000000', 'Freshness Guaranteed Mango Medium in plastic tray. Has delicious fresh cut Mango slices.', 'Freshness Guaranteed Mango Medium', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (916131366, 'Fieldpack Unbranded Fresh Iceberg Lettuce', 1.98, '', 'short description is not available', 'Fieldpack Unbranded Fresh Iceberg Lettuce', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (916277118, 'Fresh Strawberries 1#', 1.56, '400094383216', 'short description is not available', 'Fresh Strawberries 1#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (916602504, 'Freshness Guaranteed Whole Brown Mushrooms 8oz', 2.17, 'deleted_699058820083', 'short description is not available', 'Freshness Guaranteed Whole Brown Mushrooms 8oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (916631508, 'Zespri Sungold Fresh Kiwi Fruit, 2 lb Package', 8.97, '818849020062', 'Unexpectedly sweet and juicy, Zespri™ SunGold™ kiwi is no ordinary kiwi. Treat yourself to a refreshing, tropical-sweet taste explosion. This unique variety of Golden kiwi is packed with 20+ vitamins and minerals including 3x the Vitamin C of an orange per serving, as much potassium as a medium banana, and low glycemic index. You can start your day with this fresh kiwi fruit for breakfast, a quick snack, kiwi smoothie, or serve it up as a fresh fruit tray with all your favorite fruits like strawberries, grapes, apples, cherry, bananas and more. This 2lb pack of fresh fruit produce is perfect for families and fruit lovers alike. Non GMO Project verified. nongmoproject.org', 'Tropical-sweet taste Sweet and juicy Non GMO Project verified Packed with 20+ vitamins and minerals', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2b7ed80c-aad9-48a5-a836-9f6ec671175e.1dca9b0da795995a71ea8ec9f5da382f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2b7ed80c-aad9-48a5-a836-9f6ec671175e.1dca9b0da795995a71ea8ec9f5da382f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2b7ed80c-aad9-48a5-a836-9f6ec671175e.1dca9b0da795995a71ea8ec9f5da382f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (916731004, 'Watermelon Seedless', 4.48, '400094255834', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (916982385, 'Fresh Crispin Apples, Each', 1.27, '000000041102', 'Crispin Apples, Each - Enjoy the savory sweetness of our Crispin Apples, individually sold, perfect for your daily snack or culinary needs. These apples are known for their juicy crunch and honey-like taste. They are firm with a vibrant green color that may exhibit a slight yellow tint when ripe. Crispin Apples are excellent for baking, snacking, or adding a sweet crunch to your salads. They are not only delicious but also packed with nutrients like Vitamin C and fiber. Enjoy the quality and freshness of our hand-picked Crispin Apples.', 'Crispin Apples, Each', 'Unbranded', 'https://i5.walmartimages.com/asr/dabbb6eb-8e71-42e3-833e-4948eab559e8.4d6547e6499dc3b9102728627170509a.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dabbb6eb-8e71-42e3-833e-4948eab559e8.4d6547e6499dc3b9102728627170509a.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dabbb6eb-8e71-42e3-833e-4948eab559e8.4d6547e6499dc3b9102728627170509a.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (917271516, 'Services Reduced Program Dept 94', 0.01, '251679000000', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (917624846, 'Marketside Adora Seedless® Black Grapes', 4.27, 'deleted_812985018051', 'short description is not available', 'Marketside Adora Seedless® Black Grapes', 'Marketside', 'https://i5.walmartimages.com/asr/897ced2b-1ad8-483a-a101-eadaac5ea8b5_2.e0bc2d5d1cd753fa6ebb4f72ead4842f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/897ced2b-1ad8-483a-a101-eadaac5ea8b5_2.e0bc2d5d1cd753fa6ebb4f72ead4842f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/897ced2b-1ad8-483a-a101-eadaac5ea8b5_2.e0bc2d5d1cd753fa6ebb4f72ead4842f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (917800435, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094288153', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (918447069, 'Artichoke Hearts, Whole (Orlando) 88.2 oz (2500g) Can', 80.71, '847311687557', 'Dr. Wt.54.7 oz (1550g)30/40 count.Artichoke hearts can be served hot or cold. Try them in your favorite meat dish or as an addition to any salad.Ingredients: artichoke water salt and citric acid.Product of Spain.', 'Dr. Wt.54.7 oz (1550g)30/40 count.Artichoke hearts can be served hot or cold. Try them in your favorite meat dish or as an addition to any salad.Ingredients: artichoke water salt and citric acid.Product of Spain.', 'Orlando', 'https://i5.walmartimages.com/asr/2e67c4c1-c5ca-43e4-984d-01e5938a1d1c.b33b1ae86b902cf8d54d2e7c76236ef0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2e67c4c1-c5ca-43e4-984d-01e5938a1d1c.b33b1ae86b902cf8d54d2e7c76236ef0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2e67c4c1-c5ca-43e4-984d-01e5938a1d1c.b33b1ae86b902cf8d54d2e7c76236ef0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (918451857, 'Yellow Flesh Peaches, per Pound', 1.58, '400094723777', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (918464122, 'Mini Cucumbers', 2.48, 'deleted_699058601644', 'short description is not available', 'Mini Cucumbers', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (918852718, 'That’s Tasty Puree Garlic 2.8 oz, Refrigerated', 3.94, '768573300322', 'Introducing our Organic Garlic 2.8 oz Puree, the perfect solution for those who want to enjoy the rich flavor of fresh garlic without the hassle of peeling and chopping. Expertly crafted from high-quality, organic ingredients, this versatile puree is an excellent substitute for traditional garlic cloves in any recipe. With its smooth texture and robust taste, our garlic puree is guaranteed to elevate your dishes to new heights of deliciousness. Conveniently packaged in a 2.8 oz container, this must-have kitchen staple is always ready to save the day when you need a quick and easy way to add that unmistakable garlic flavor. Choose our Organic Garlic Puree for an effortless, time-saving cooking experience that doesn\'t compromise on taste or quality.', 'Organic Garlic Puree 2.8oz Introducing our Organic Garlic 2.8 oz Puree, the perfect solution for those who want to enjoy the rich flavor of fresh garlic without the hassle of peeling and chopping. Expertly crafted from high-quality, organic ingredients, this versatile puree is an excellent substitute for traditional garlic cloves in any recipe. With its smooth texture and robust taste, our garlic puree is guaranteed to elevate your dishes to new heights of deliciousness. Conveniently packaged in a 2.8 oz container, this must-have kitchen staple is always ready to save the day when you need a quick and easy way to add that unmistakable garlic flavor. Choose our Organic Garlic Puree for an effortless, time-saving cooking experience that doesn\'t compromise on taste or quality.', 'Shenandoah Growers', 'https://i5.walmartimages.com/asr/fb853b6c-e81f-43ac-be4b-ad97068411c4_1.81f9462058eee3ad96e308686bef65e0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb853b6c-e81f-43ac-be4b-ad97068411c4_1.81f9462058eee3ad96e308686bef65e0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb853b6c-e81f-43ac-be4b-ad97068411c4_1.81f9462058eee3ad96e308686bef65e0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (918927737, 'Fresh Red Seedless Grapes', 1.66, '', 'short description is not available', 'Fresh Red Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (919153410, 'Naturesweet Cherry Tomato Display, 1 Package', 0.01, 'deleted_405510163946', 'short description is not available', 'Naturesweet Cherry Tomato Display', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (919206749, 'Red Globe Seeded Grapes, Bag', 1.98, '', 'short description is not available', 'Red Globe Seeded Grapes, Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (919435377, 'Large Avocado 3 Count Bag', 4.98, 'deleted_088721410841', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (919484438, 'Fresh Jalapenos, 8 Ounce Bag', 1, '711069542270', 'Enhance your meals with the delicious flavor of Jalapeno Peppers. Naturally low in calories, fat, and cholesterol, this vegetable is a great source of vitamins C, B6, A, and K, as well as folate and manganese. Jalapeno peppers have a range of pungency, and a crisp flavor that enhances a variety of recipes. Stuff jalapeno peppers with cheese and wrap in bacon for everyone?s favorite poppers, add them to enchiladas, put some diced jalapeno in your famous chili recipe, or make a zesty salsa using fresh jalapeno peppers. You can even add some diced jalapeno peppers and cheese to cornbread batter for a delectable chile cheese cornbread that will have everyone asking for seconds. Lunches and dinners are more scrumptious when fresh Jalapeno Peppers are part of the meal. Also known as Jalapeño, Spicy chili, Filfil har and Mirch around the world.', 'Naturally low in calories Rich in vitamins C, B6, A, and K Stuff jalapeno peppers and wrap in bacon for poppers, add to enchiladas or chili, or make a zesty salsa Approximately 3-5 peppers per .25 lb Versatile and delicious', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ed77cf30-f88d-40cc-933b-f6b2415c3db9.4a2704eabaf798127e7bdae5b5411559.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed77cf30-f88d-40cc-933b-f6b2415c3db9.4a2704eabaf798127e7bdae5b5411559.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ed77cf30-f88d-40cc-933b-f6b2415c3db9.4a2704eabaf798127e7bdae5b5411559.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (919642904, 'Fresh Granny Smith Apples, 3 lb Bag', 5.47, '', 'Treat yourself to Freshness Granny Smith Apples (Manzana Verde). Granny Smith apples are firm and juicy with a crisp texture and a tart, acidic, yet subtly sweet flavor, perfect for use in a variety of dishes morning, noon, and night. Slice them up and cook in a skillet with brown sugar, butter, cloves, and nutmeg for a simple, sweet treat. Mix them with cabbage, grapes, honey, mayonnaise and, celery to make a fresh, apple slaw for a summer cookout. Use them to make a sweet, classic apple pie that your friends and family with love. Create delicious meals and treats with Freshness Guaranteed Granny Smith Apples.', 'Firm and juicy with a crisp texture and a tart, acidic, yet subtly sweet flavor Great for breakfast, lunch, dinner, or dessert Cook in a skillet with butter, brown sugar, and spices; mix with cabbage, grapes, honey, mayonnaise and, celery for apple slaw; or make a classic apple pie Versatile ingredient perfect for both savory and sweet dishes Meets or exceeds U.S. Extra Fancy They have a creamy white flesh with low acidity', 'Unbranded', 'https://i5.walmartimages.com/asr/737c9964-cec4-4154-a2f2-6ebcb94683cb.5fa488f67759a15d60f44660045281df.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/737c9964-cec4-4154-a2f2-6ebcb94683cb.5fa488f67759a15d60f44660045281df.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/737c9964-cec4-4154-a2f2-6ebcb94683cb.5fa488f67759a15d60f44660045281df.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (919823032, '240pc On Swt 3# Lm', 984, '405541087501', 'short description is not available', '240pc On Swt 3# Lm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (919836644, 'Fresh Green Seedless Grapes', 1.78, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (919947069, '200pc Pto Rst 5# Bm', 648, '405508088183', 'short description is not available', '200pc Pto Rst 5# Bm', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (920076971, '170pc Pie Pumpkin Ca', 445, '405517454757', 'short description is not available', '170pc Pie Pumpkin Ca', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (920275475, 'Tom Grape 10oz', 2.48, '400094311462', 'short description is not available', 'Tom Grape 10oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (920732323, 'Marketside Organic Russet Potatoes, 3 Lb.', 4.54, '405655990384', 'Marketside Organic Russet Potatoes, 3 Lb.', 'Marketside Organic Russet Potatoes 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (921859857, 'Freshness Guaranteed Salsa Topped Guacamole, 8 oz', 2.88, '681131354837', 'Find a new fresh flavor you\'re sure to love with the Freshness Guaranteed Salsa Topped Guacamole. This tasty duo features a creamy and chunky combination of Hass avocados, tomato puree, tomatoes, onions, jalapeno peppers, tomatillos, garlic, lime juice, cilantro and zesty mix of herbs and spices to ensure a mouthful of flavor in every bite. Add a dollop to your quesadillas, burgers, burritos, and sandwiches for a taste that will have you coming back for seconds. With 8 servings per container, this guacamole is perfect for small gatherings, parties, barbecues, and game nights with family and friends. Plus, the reclosable lid in the packaging helps maintain freshness between snack sessions. Scoop up some flavor with Freshness Guaranteed Salsa Topped Guacamole. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Spark Fresh item.', 'Freshness Guaranteed Salsa Topped Guacamole, 8 oz: Mild heat level 8 servings per container makes this an ideal dish to serve at parties Pairs perfectly with chips Delicious as a spread on wraps and sandwiches', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d4cc5a08-857f-493d-96f6-63c2fa3057cd.930a1618786ff84074926f218b55bdfa.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4cc5a08-857f-493d-96f6-63c2fa3057cd.930a1618786ff84074926f218b55bdfa.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4cc5a08-857f-493d-96f6-63c2fa3057cd.930a1618786ff84074926f218b55bdfa.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (921967334, 'Melissas Dried Guajillo Chile 8 Oz', 3.98, '045255150896', 'short description is not available', 'Melissas Dried Guajillo Chile 8 Oz', 'Melissa\'s', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (922051244, 'Fresh Sugar Plum, 1 lb', 2.28, '683953002279', 'Sugar plums are a delicious summertime treat! Also known as Tulare Giant variety fresh prunes, these fruits are grown on trees and picked when ripe and ready to eat. Their oblong shape makes them unique, and their sweetness keeps you coming back for more! They do contain a seed, just like a traditional plum. These make for an excellent eating experience.', 'Unique shape Clam Shell Delicious fruit for snack or baking Refrigeration recommended for longer shelf life Proudly grown in California', 'Farm2You', 'https://i5.walmartimages.com/asr/ee77d83d-a18c-40ed-a9ea-edf6961bb435.3f9eea03dcbee3df85c2ba60a24a34f1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ee77d83d-a18c-40ed-a9ea-edf6961bb435.3f9eea03dcbee3df85c2ba60a24a34f1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ee77d83d-a18c-40ed-a9ea-edf6961bb435.3f9eea03dcbee3df85c2ba60a24a34f1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (922147920, 'California Grown Peaches, per Pound', 1.58, '400094336533', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (922406361, 'Fresh Medley Tomato, 10oz', 2.5, '850019660111', 'Bring the fresh, delicious taste of Fresh Medley Tomatoes to your kitchen. These tomatoes are greenhouse grown giving them sweet, juicy flavor in every bite. These multi-colored medley tomatoes come in hues of orange, red and yellow, which adds a nice bit of vibrant color to your meals. Use them to top salads at lunch or dinner, mix them into pasta salads, or add them to omelets for a fresh bite. They are bite sized, which makes them easy to enjoy as a snack, if desired, and there\'s plenty to use in all your favorite recipes. Get creative in the kitchen with Nature Fresh Farms Medley Tomatoes today', 'Ideal for salads, omelets and many other delicious recipes Fresh Medley Grape Tomato, Colorful blend of fresh, high-flavor snacking tomatoes Great for snacking', 'Hypermart', 'https://i5.walmartimages.com/asr/e70701bf-a31a-410e-8839-3096a6c25c5d.407289f00baf2b639b55cc06878304c0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e70701bf-a31a-410e-8839-3096a6c25c5d.407289f00baf2b639b55cc06878304c0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e70701bf-a31a-410e-8839-3096a6c25c5d.407289f00baf2b639b55cc06878304c0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (922721123, 'Yellow Nectarine, 2 lb Carton', 4.48, 'deleted_683953000978', 'Fresh California Grown Nectarines, 2 Lb.', 'Fresh California Grown White Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8457b6b1-f2e5-4de8-b5b2-5a1e9a0dbfb8_3.549500606ada1fbeededab28ab301c2d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8457b6b1-f2e5-4de8-b5b2-5a1e9a0dbfb8_3.549500606ada1fbeededab28ab301c2d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8457b6b1-f2e5-4de8-b5b2-5a1e9a0dbfb8_3.549500606ada1fbeededab28ab301c2d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (922970797, 'Yellow Flesh Peaches, per Pound', 1.58, '400094342992', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (923112054, 'Fresh Green Seedless Grapes', 1.78, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (923494481, 'Fresh Manzanas (Apples) Honeycrisp Sueltas 80-88, Package, Sweet', 1.68, 'deleted_405735750013', 'Our Honeycrisp apples are bursting with flavor and are the perfect snack for any time of day! These crisp and juicy apples have a sweet yet slightly tart taste that will leave your taste buds wanting more. They\'re also a great source of fiber and essential vitamins, making them a healthy snack choice. Try them today and taste the difference!', 'Honeycrisp apples are a crowd-pleasing variety that offer a unique balance of sweetness and tartness. With their crisp texture and juicy flesh, these apples are perfect for snacking, baking, and cooking. Honeycrisp apples are also an excellent source of dietary fiber and vitamin C, making them a healthy addition to any diet. Our Honeycrisp apples are carefully selected and packed at the peak of their freshness to ensure maximum flavor and quality. Whether you\'re enjoying them on their own, using them in a recipe, or sharing them with friends and family, Honeycrisp apples are sure to delight with their delicious taste and satisfying crunch. Find these in your local stores!', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/acd65b99-40ff-4ed2-b462-0f75f6712d69.bf4c015bb0a078e28ccc96ca424f86ab.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acd65b99-40ff-4ed2-b462-0f75f6712d69.bf4c015bb0a078e28ccc96ca424f86ab.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/acd65b99-40ff-4ed2-b462-0f75f6712d69.bf4c015bb0a078e28ccc96ca424f86ab.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (923627393, 'Fresh Cauliflower Florets With Parmesan Butter', 2.98, '716519012693', 'Indulge in the delicious taste of our Fresh Cauliflower Florets with Parmesan Butter, a delectable side dish that combines the best of healthy and flavorful ingredients. These tender, perfectly-cooked florets are coated in a rich and creamy parmesan butter, offering a melt-in-your-mouth experience with every bite. Simple and ready to serve, this dish makes it easy to enjoy a gourmet treat while getting a dose of essential nutrients at the same time.', 'Cauliflower Florets With Parmesan Butter Indulge in the delicious taste of our Fresh Cauliflower Florets with Parmesan Butter, a delectable side dish that combines the best of healthy and flavorful ingredients. These tender, perfectly-cooked florets are coated in a rich and creamy parmesan butter, offering a melt-in-your-mouth experience with every bite. Simple and ready to serve, this dish makes it easy to enjoy a gourmet treat while getting a dose of essential nutrients at the same time.', 'Mann\'s', 'https://i5.walmartimages.com/asr/269decb8-5030-4a64-94d4-2868723c208f_1.645047f7a392e1844e5db0540ebde501.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/269decb8-5030-4a64-94d4-2868723c208f_1.645047f7a392e1844e5db0540ebde501.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/269decb8-5030-4a64-94d4-2868723c208f_1.645047f7a392e1844e5db0540ebde501.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (923788758, '150pc On Walla 4#', 447, '405515146951', 'short description is not available', '150pc On Walla 4#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (923869639, 'That\'s Tasty Sweet Greens Organic Lettuce Duo, 5 oz', 2.18, '768573710091', 'That\'s Tasty Sweet Greens Organic Lettuce Duo gives you truly delicious organic flavor that you can trust. This lettuce has a high sweetness and a medium crispness for a perfect bite every time, and perfectly combines both green and red leaf lettuce. It is locally and sustainably grown in the USA, free from pesticides, and Non-GMO. Use it to make delicious salads topped with your favorite croutons, nuts, cheese, vegetables, protein and dressing for a fresh taste in every bite. Use it to top sandwiches and burgers, use it to stuff delicious pita bread, or create yummy wraps. Enjoy freshness you can see with That\'s Tasty Sweet Greens Organic Lettuce Duo.', 'That\'s Tasty Sweet Greens Organic Lettuce Duo, 5 oz: Pure USDA certified organic flavor Locally and sustainably grown in the USA High sweetness and medium crispness Free from pesticides and Non-GMO Top burgers and sandwiches or make delicious salads Combination of green and red leaf lettuce for a perfect bite every time', 'That\'s Tasty', 'https://i5.walmartimages.com/asr/0d133256-62e8-4faa-94da-cb1a5ec18646.fcb9696a54e44fac70736b7c9f77cd2e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d133256-62e8-4faa-94da-cb1a5ec18646.fcb9696a54e44fac70736b7c9f77cd2e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d133256-62e8-4faa-94da-cb1a5ec18646.fcb9696a54e44fac70736b7c9f77cd2e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (924240231, 'Ready Pac Foods Bistro Zesty Mediterranean Salad Kit', 3.63, '077745253312', 'When all you want is a fresh and zesty salad, this crispy, tasty blend hits just the right spot. Simply pour the blend of Green Cabbage, Romaine Lettuce, Red Cabbage, Carrots and Parsley into a bowl, toss with the tangy Sumac Vinaigrette, sprinkle the Feta Cheese, Herb Seasoned Flatbread Strips and Dried Apricots onto the salad and you have a perfect crunch and savory salad for you to enjoy.', 'Bistro Zesty Mediterranean Kit', 'Ready Pac Foods', 'https://i5.walmartimages.com/asr/cd93f565-75ba-45fc-a049-519ce1610e5a.dd79e8fbeac9af35b448373318bfcf3d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cd93f565-75ba-45fc-a049-519ce1610e5a.dd79e8fbeac9af35b448373318bfcf3d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cd93f565-75ba-45fc-a049-519ce1610e5a.dd79e8fbeac9af35b448373318bfcf3d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (924795925, '240pc On Swt 3# Ca', 715.2, '405555388748', 'short description is not available', '240pc On Swt 3# Ca', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (924882024, 'Fresh Green Seedless Grapes', 1.98, '', 'short description is not available', 'Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (925804940, '100pc Orange Navel8#', 797, '405510607495', 'short description is not available', '100pc Orange Navel8#', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (925881081, 'Fresh Red Seedless Grapes, Bag', 1.68, 'deleted_850550002814', 'short description is not available', 'Fresh Red Seedless Grapes, Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (926101259, 'Fresh Pink Guava, Each', 3.93, '851502006331', 'Fresh Pink Guava is a tropical fruit known for its sweet, fragrant flavor and vibrant pink interior. With its green outer skin and juicy, rosy flesh, this fruit is both delicious and refreshing. Guava can be enjoyed sliced fresh, blended into smoothies, or used to create jams, juices, and desserts. Packed with natural nutrients, it\'s a wholesome snack that brings a taste of the tropics to your table. Whether eaten on its own or added to recipes, Fresh Pink Guava is a flavorful way to enjoy fresh produce.', 'Fresh Pink Guava, Each Features a green outer skin with pink, juicy flesh Sweet and fragrant tropical flavor Perfect for eating fresh, blending, or cooking Great for smoothies, juices, jams, and desserts Wholesome fruit option with natural nutrients', 'Unbranded', 'https://i5.walmartimages.com/asr/0facf6b8-efd8-451d-8c94-804d4434a7da.263c23026f5432a62c30e50663c1e6c4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0facf6b8-efd8-451d-8c94-804d4434a7da.263c23026f5432a62c30e50663c1e6c4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0facf6b8-efd8-451d-8c94-804d4434a7da.263c23026f5432a62c30e50663c1e6c4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (927585753, 'Green Pepper 3-pack', 1.94, '071106900112', 'short description is not available', 'Green Pepper 3-pack', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (927760104, 'Peruvian Black Seedless Grapes', 2.98, '', 'short description is not available', 'Peruvian Black Seedless Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (927992619, 'Gourmet212 Stuffed Cabbage Leaves 14.11oz., 6 Pack', 62.95, '191822007282', 'You might have loved cabbage. In fact, you might have searched ?cabbage rolls near me? or where can I buy cabbage rolls? on the Internet before; now, you are at the right place to buy some stuffed cabbage leaves. Stuffed cabbage leaves are a very popular dish in Turkey. They can be prepared with both olive oil and ground meat. To be able to offer you a vegan dish, we prefer to make it with olive oil. It is ready to serve so you can open and immediately serve the stuffed cabbage leaves to your guests. Also, you can take it with you to the workplace and enjoy this cheap and healthy meal during your lunch break. You can buy our product in inner peace because of the reasons given below: It is ready to serve It is prepared with extra virgin olive oil It is all natural It is Kosher Certified It is Halal Certified Ingredients: Cabbage 34,6%, Onion 26%, Rice 21,7%, Extra virgin olive oil 5%, Sunflower oil, Tomato paste 3%, Pepper Paste, Spice mix (mint, black pepper, dill, parsley), Salt, Water, Acidity Regulator (Citric acid). Enjoy the healthy stuffed cabbage leaves. Bon appetite!', 'Gourmet212 Stuffed Cabbage Leaves 14.11oz (Pack of 6), Fresh Vegetable Preserved in Airtight Stainless Steel Tin Canned. It is Halal and Kosher Certified. The stuffed cabbage leaves are a dish highly appreciated in Turkey. You can make them with olive oil and minced meat. It is all-natural and prepared with extra virgin olive oil. Ingredients: Rice 21.7%, Cabbage 34,6%, Onion 26%, Extra virgin olive oil 5%, Tomato paste 3%, Sunflower oil, Pepper Paste, Spice mix (mint, black pepper, dill, parsley), Salt, Water, Acidity Regulator (Citric acid).', 'Gourmet212', 'https://i5.walmartimages.com/asr/892924f6-cbfa-4cba-91a0-1b1b383ad826.3b85985f665a08a93c265e6aedd45c5d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/892924f6-cbfa-4cba-91a0-1b1b383ad826.3b85985f665a08a93c265e6aedd45c5d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/892924f6-cbfa-4cba-91a0-1b1b383ad826.3b85985f665a08a93c265e6aedd45c5d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (928100850, 'Avocado 3 Ct Bag', 4.48, 'deleted_636442400018', 'short description is not available', 'Avocado 3 Ct Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (928161481, 'Yellow Flesh Peaches, per Pound', 1.58, '400094730416', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (928221370, 'Sugar Cane Bulk', 0.98, 'deleted_000000047906', 'short description is not available', 'Sugar Cane Bulk', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/43fad02f-6260-4703-9cad-c91f3246ac46_1.fde3e1d4842c6bd5e61cb031a1edbba2.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/43fad02f-6260-4703-9cad-c91f3246ac46_1.fde3e1d4842c6bd5e61cb031a1edbba2.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/43fad02f-6260-4703-9cad-c91f3246ac46_1.fde3e1d4842c6bd5e61cb031a1edbba2.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (928979605, 'Tomato on the Vine, Bag', 1.98, '', 'Keep your recipes simple and classic with fresh tomatoes on the vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, this fresh produce item is sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Walmart\'s Tomatoes On The Vine and keep your dishes looking great and tasting equally as excellent.', 'Tomato on the Vine, Bag: Wholesome, versatile, and delicious Ideal ingredient for a variety of dishes Make a zesty tomato sauce to go along with your favorite pasta Enjoy on their own as a nutritious snack Make a flavorful salsa or add some pop to your guacamole', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (929099565, 'White Salt Potatoes Whole Fresh, 5 lb Bag', 5.24, '077890926918', 'These Fresh Idaho Potatoes are a must-have for any pantry. With so many ways to prepare potatoes, you\'ll want to add them to every meal. For breakfast, you could make crispy hash browns smothered in cheese and diced ham or add them to a savory omelet. For lunch or dinner, you could use these fresh potatoes to make au gratin potatoes, garlic mashed potatoes, or a baked potato loaded with cheese, sour cream, green onions, and bacon bits. If you\'re hosting a neighborhood get-together, you can use them to make creamy potato salad or homestyle French fries. Serve up something delicious when you cook with Fresh Idaho Potatoes.', 'White Salt Potatoes Whole Fresh, 5 lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (929297252, 'Fresh Bartlett Pears, 3 lb Bag', 3.78, '829570305243', 'Savor the sweet taste of Fresh Bartlett Pears. Bartlett Pears are aromatic and have a definitive pear flavor that make them great for breakfast, lunch, dinner, and dessert. Chop the pears up and add them to muffins with walnuts and vanilla for a sweet treat that’s great for breakfast to get your morning started on a high note. Slice them up and top a pizza with prosciutto, goat cheese, and arugula for a mouthwatering meal perfect for a family dinner or dinner party. Cut the pear in half and cook it in a skillet with butter, brown sugar, and vanilla and serve with a scoop of vanilla ice cream for a decadent dessert. Enjoy tasty meals any time of day with Fresh Bartlett Pears.', 'Fresh Bartlett Pears, 3 lb Bag Sweet, crisp, and juicy Excellent snacking pear Make a creamy smoothie or a nutritious juice blend Add to your salad for extra crunch and flavor Adds flavor to a variety of recipes Make pear butter or poached pears Make sweet desserts like pear cobbler, pear crisp or pear tarts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/44bb606a-512b-4168-a56c-d7786ff254db.dee214abc8bfffb8294163c2b428ce57.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44bb606a-512b-4168-a56c-d7786ff254db.dee214abc8bfffb8294163c2b428ce57.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/44bb606a-512b-4168-a56c-d7786ff254db.dee214abc8bfffb8294163c2b428ce57.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (929555387, 'Gem Avocado 3 Count Bag', 6.94, 'deleted_887214001401', 'short description is not available', 'Gem Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (929921177, 'Services Reduced Program Dept 94', 0.01, '251712000004', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (930095582, 'Revol Greens Spring Mix Salad, 4 oz Clam Shell, Fresh', 2.98, '865638000415', 'Revol Greens® Spring Mix is a blend of tender and crisp baby lettuce. All Revol Greens® lettuce is grown inside a greenhouse and harvested daily, 365 days a year. Our regional greenhouse locations allow us to reach nearly all our customers within 24-48 hours of harvest, so that our greens arrive incredibly fresh and at peak nutritional value. Find this at your local Walmart. Whole Fruit.', 'Locally grown in a protected greenhouse environment Sustainably grown with 90% less water than field grown lettuce Non-GMO', 'Revol Greens', 'https://i5.walmartimages.com/asr/39f919c1-2ff7-40ed-b9b6-8a13a0a87c87.62a16b332c5781366ed41580f3de0f21.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39f919c1-2ff7-40ed-b9b6-8a13a0a87c87.62a16b332c5781366ed41580f3de0f21.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/39f919c1-2ff7-40ed-b9b6-8a13a0a87c87.62a16b332c5781366ed41580f3de0f21.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (930101033, 'Pinata Apples 2 Lb Bag', 2.43, '741839003502', 'short description is not available', 'Pinata Apples 2 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e205a841-27e0-49e9-8975-16562454774f_1.58b2fcdaed996dd86131d70223e70d39.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e205a841-27e0-49e9-8975-16562454774f_1.58b2fcdaed996dd86131d70223e70d39.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e205a841-27e0-49e9-8975-16562454774f_1.58b2fcdaed996dd86131d70223e70d39.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (930311013, 'Watermelon Seedless', 4.98, '400094393932', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (930593592, 'Mini Sweet Peppers', 2.88, 'deleted_817818010035', 'short description is not available', 'Mini Sweet Peppers', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (930682868, 'Fieldpack Unbranded Fresh Strawberries 1#', 2.24, 'deleted_857895003001', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4e7dab6a-c54b-48f7-9bd2-57f5d211501d_1.3ba50bfdf1c7f082056c0f5022edf182.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4e7dab6a-c54b-48f7-9bd2-57f5d211501d_1.3ba50bfdf1c7f082056c0f5022edf182.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4e7dab6a-c54b-48f7-9bd2-57f5d211501d_1.3ba50bfdf1c7f082056c0f5022edf182.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (931174476, '90pc Pto Rst 10# Ff', 444.6, '405530518122', 'short description is not available', '90pc Pto Rst 10# Ff', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (931192536, 'Fresh Red Grapes, lb', 4.98, '', 'Treat yourself to the delicious, juicy flavor of Fresh Red (Uvas) Grapes Bag. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh Red Grapes.', 'Grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes', 'Dole', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (931337435, 'Mother Earth Products Dehydrated Mushrooms, 2 Full Cup Mylar Bag', 6.61, '810919032593', 'Mother Earth Products Dehydrated Champignon Mushrooms: a healthy & convenient addition to every area of your life without the headache: emergency preparedness, snacking, long and short term storage, traveling, everyday cooking, hiking, backpacking, spicing up your recipes, etc. use it now or later. Mother Earth Products Dehydrated Champignon Mushrooms are made with real, Non-GMO Champignon Mushrooms, no additives or preservatives, & is kosher - a guilt-free, robust food that makes eating tasty & rewarding, without the hassle of weekly trips to the store or the worry of spoiling. It?s so delicious you won?t store it away and hope you never have to use it. Taste the Goodness of Mother Earth Products', '100% champignon mushrooms; spice; good for all recipes, especially soups, stir fry, and pizza; long term storage; short term storage; pantry; portable; convenient; nothing added; emergency preparedness; great flavor; easy to cook with', 'Mother Earth Products', 'https://i5.walmartimages.com/asr/ffabef4d-d373-4746-b62f-00cea74602c9.bacb9cfdcbfd6c3c5943c52bb83196ae.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ffabef4d-d373-4746-b62f-00cea74602c9.bacb9cfdcbfd6c3c5943c52bb83196ae.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ffabef4d-d373-4746-b62f-00cea74602c9.bacb9cfdcbfd6c3c5943c52bb83196ae.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (931456800, 'Idaho Potatoes, 10 Lb.', 4.44, '811857021915', 'Idaho Potatoes, 10 Lb.', 'Idaho Potatoes 10 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (931472621, 'Jumbo White Onions Per Pound', 0.51, 'deleted_887051000155', 'short description is not available', 'Jumbo White Onions Per Pound', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1174e614-3db8-42bc-a9bc-635561546278_3.d9983023dccdee5bd7f6c384f3ead1d8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1174e614-3db8-42bc-a9bc-635561546278_3.d9983023dccdee5bd7f6c384f3ead1d8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1174e614-3db8-42bc-a9bc-635561546278_3.d9983023dccdee5bd7f6c384f3ead1d8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (931737940, 'Donut Nectarines, 1 Lb.', 2.78, '000000034371', 'Donut Nectarines, 1 Lb.', 'Nectarine Donut', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (931756165, 'Fresh Cherry Tomato, 10 oz Clam Shell', 3.77, '850019660098', 'Bring the fresh, delicious taste of Cherry Tomatoes into your home. Because of their notable flavor and thicker skin, they are a versatile tomato that\'s great for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, cherry tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with these fresh Cherry Tomatoes', 'Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Store at room temperature for best result', 'Hypermart', 'https://i5.walmartimages.com/asr/578d4ae4-f572-4c0a-8e70-e0211eaf69de.01dfebe8f8dfa182b80d67301ce0511a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/578d4ae4-f572-4c0a-8e70-e0211eaf69de.01dfebe8f8dfa182b80d67301ce0511a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/578d4ae4-f572-4c0a-8e70-e0211eaf69de.01dfebe8f8dfa182b80d67301ce0511a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (931868278, 'Apple Slices 5/2 Oz', 4.97, '077745250595', 'short description is not available', 'Apple Slices 5/2 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (932739562, 'California Grown Peaches, per Pound', 1.58, '400094989142', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (933510172, 'Savory Italian Herb Ready Sides', 4.97, '816719020464', 'short description is not available', 'Savory Italian Herb Ready Sides', 'CHURCH BROTHERS FARMS', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (934023112, 'Organic Red Potatoes, 3 Lb.', 4.96, 'deleted_852883004473', 'Organic Red Potatoes, 3 Lb.', 'Organic Red Potatoes 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0a4dfa35-5429-4279-957e-e493ff5058cb.3e67fada51c0833194a908c200bfc926.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a4dfa35-5429-4279-957e-e493ff5058cb.3e67fada51c0833194a908c200bfc926.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0a4dfa35-5429-4279-957e-e493ff5058cb.3e67fada51c0833194a908c200bfc926.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (934348903, 'BrightFarms Baby Kale 3oz', 2.98, '857062004428', 'These tender, leafy greens have a light and refreshing flavor. Raw or sautéed, our baby kale pairs well with lemon juice and olive oil. Toss in cheese and nuts for a delicious salad, or season and roast it for a deliciously healthy snack. Locally Grown Non-GMO Project Certified Pesticide Free', '', 'BrightFarms', 'https://i5.walmartimages.com/asr/16d88251-dad7-42b4-a82c-8e5bfd96ca88_2.2d7d7e029763b329c9cf1e3f9e12fdc0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/16d88251-dad7-42b4-a82c-8e5bfd96ca88_2.2d7d7e029763b329c9cf1e3f9e12fdc0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/16d88251-dad7-42b4-a82c-8e5bfd96ca88_2.2d7d7e029763b329c9cf1e3f9e12fdc0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (934564540, 'Org Rainbow Chard', 1.96, 'deleted_000000945134', 'short description is not available', 'Org Rainbow Chard', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (934855418, 'Marketside Spring Mix Salad Blend, 5 oz Bag, Fresh', 2.73, '681131354998', 'Marketside Spring Mix is made with a wholesome medley of baby lettuce blend, baby greens blend, and radicchio. This mix is packed fresh, washed and ready to eat for your convenience. Use it to create your very own personalized salads that are tossed with your favorite vegetables, protein, nuts, and dressing, use it as a topping on sandwiches and pizzas, or simply enjoy it as a healthy side. As a good source of nutritional benefits such as dietary fiber, calcium, and iron, Marketside Spring Mix is an easy way to get your veggies in every day. Enjoy fresh from the farm taste with Marketside Spring Mix. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Spring Mix Salad Blend, 5 oz Bag, Fresh Wholesome mix of baby lettuce blend, baby greens blend, and radicchio Washed and ready to eat 15 calories per serving 1 serving per package', 'Marketside', 'https://i5.walmartimages.com/asr/9f0b7fb0-c10b-4007-b73d-4ff83cb0ffcd.cff151b0cc9bbd1f7bee1de5dddbb767.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9f0b7fb0-c10b-4007-b73d-4ff83cb0ffcd.cff151b0cc9bbd1f7bee1de5dddbb767.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9f0b7fb0-c10b-4007-b73d-4ff83cb0ffcd.cff151b0cc9bbd1f7bee1de5dddbb767.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (935853482, 'Services Reduced Program Dept 94', 0.01, '251800000008', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (935905349, '180pc Apl Granny 3#', 651.6, '405663964391', 'short description is not available', '180pc Apl Granny 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (936560938, 'Pure Green Farms Baby Green Leaf Salad, 8 oz Clam Shell, Fresh', 4.48, '850014580049', 'Our hydroponic Baby Green Leaf lettuce is a crispy baby green lettuce with brilliant flavor', 'Keep Refridgerated, Greenhouse Grown in the USA, Pesticide Free', 'Pure Green Farms', 'https://i5.walmartimages.com/asr/085b0929-9da9-41f0-85c9-dff69291c06c.29e04f6fbd5ac826585a0200113a86b4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/085b0929-9da9-41f0-85c9-dff69291c06c.29e04f6fbd5ac826585a0200113a86b4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/085b0929-9da9-41f0-85c9-dff69291c06c.29e04f6fbd5ac826585a0200113a86b4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (936984554, '840pc Pomegranate', 1663.2, '405719722098', 'short description is not available', '840pc Pomegranate', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (937234240, 'Whole White Mushrooms, 8 oz', 1.97, 'deleted_771163000717', 'These White Mushrooms are nutritious and delicious. White mushrooms have a small stem, smooth cap, and mild flavor that pairs well with a variety of dishes....', '365 by Whole Foods Market products give you that dance-down-the-aisles feeling, virtual aisles too! Our huge range of choices with premium ingredients at prices you can get down with makes grocery shopping so much more than tossing the basics in your cart.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/d1869514-5857-4206-9213-344fc79b54e7.a3f0ac546ccebbde286fa5470baad20a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d1869514-5857-4206-9213-344fc79b54e7.a3f0ac546ccebbde286fa5470baad20a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d1869514-5857-4206-9213-344fc79b54e7.a3f0ac546ccebbde286fa5470baad20a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (937633562, 'Fresh Yellow Watermelon Seeded, Each', 5.77, '000000043304', 'Treat yourself to a sweet Fresh Yellow Seeded Watermelon. Enjoy this tasty watermelon on its own as a healthy snack or incorporate it into a variety of delicious recipes. For breakfast, you can make a sweet fruit bowl with sliced watermelon, strawberries, pineapple, banana, and kiwi. For an extra special treat, top with a dollop of whipped cream. Fresh seeded watermelons are rich in micronutrients! You can also serve up this watermelon at your next neighborhood barbecue, use it to make a refreshing sorbet, or make a delicious summertime cocktail.', 'Fresh Seeded Yellow Watermelon: Enjoy a Fresh Seeded Yellow Watermelon on its own or add to a mixed fruit salad Serve at your next neighborhood barbecue Get creative and make a watermelon cocktail or a refreshing sorbet Sweet and Juicy Explore all the delicious ways to add fresh yellow watermelon to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (937808617, '240pc On Ylw 3# Cfv', 465.6, '400094859131', 'short description is not available', '240pc On Ylw 3# Cfv', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (937835653, 'Pink Apples, Each', 2.27, '', 'short description is not available', 'Pink Apples, Each', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (938390922, 'Hatch Chili Medium 2lb Bag', 3.94, '037842056766', 'Unique flavored pepper grown in the hatch valley of New Mexico. For amazing flavor, simply roast, peel and add to your favorite recipe. Perfect at breakfast in your burrito or omelette. Spice up your salsa and quacamole or add to your favorite dinner dish such as burgers, pizza, enchiladas, and much more.', 'Unique flavored pepper grown in the hatch valley of New Mexico. For amazing flavor, simply roast, peel and add to your favorite recipe. Perfect at breakfast in your burrito or omelette. Spice up your salsa and quacamole or add to your favorite dinner dish such as burgers, pizza, enchiladas, and much more.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/73225738-58e8-4de0-af06-f4a3e69e82da_1.de688b32640d5c837e71d458fce176d2.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/73225738-58e8-4de0-af06-f4a3e69e82da_1.de688b32640d5c837e71d458fce176d2.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/73225738-58e8-4de0-af06-f4a3e69e82da_1.de688b32640d5c837e71d458fce176d2.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (938776704, 'Robinson Red Grapes Cup', 1.98, '717524720542', 'short description is not available', 'Robinson Red Grapes Cup', 'Robinson', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (939359643, '10# Bag Grapefruit', 5.42, '033383120676', 'The ideal balance between tart and sweet, this Fresh Red Grapefruit is great for both savory and sweet dishes any time of day. Enjoy half of a grapefruit sprinkled with sugar with some eggs in the morning for a light, sweet breakfast. Slice it up and put in a salad with spinach, avocado, and red onion topped with a mustard and balsamic vinegar dressing for lunch or dinner. Make delicious grapefruit bars that showcase the sweet and tartness of this versatile fruit. In addition, it\'s a great source of vitamin C and vitamin A. With such versatility, Fresh Red Grapefruit will become a pantry staple in your home.', 'Fresh red grapefruit is great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a grapefruit sprinkled with sugar in the morning', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9b84af97-6b8d-4eae-b425-f5c61f424ac5.24cc26efbf95c43c758eac871c485527.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b84af97-6b8d-4eae-b425-f5c61f424ac5.24cc26efbf95c43c758eac871c485527.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b84af97-6b8d-4eae-b425-f5c61f424ac5.24cc26efbf95c43c758eac871c485527.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (939382679, 'Spring Mix Salad, 4.5 Oz.', 2.98, '860000030601', 'Better Fields Farm Spring Mix, 4.5 oz', 'Baby Lettuce BlendPacked FreshLocally GrownNon-GMOHydroponically GrownPerishable; keep refrigeratedNet weight 4.5 oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/188f2a2b-6ede-4ba8-b5f4-3d76d7194cf8_3.948c6d71b66aeb15af49ee8dca9d15b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/188f2a2b-6ede-4ba8-b5f4-3d76d7194cf8_3.948c6d71b66aeb15af49ee8dca9d15b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/188f2a2b-6ede-4ba8-b5f4-3d76d7194cf8_3.948c6d71b66aeb15af49ee8dca9d15b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (939451042, '3lb Bag Of Bosc Pears', 4.97, '', 'short description is not available', '3lb Bag Of Bosc Pears', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (939548154, '100pc Pto Idado 10#', 597, '405546470896', 'short description is not available', '100pc Pto Idado 10#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (940171210, 'Freshness Guaranteed Watermelon 42 Oz', 9.97, 'deleted_681131036641', 'short description is not available', 'Freshness Guaranteed Watermelon 42 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (940457348, 'Ogp Red Cherry Samples', 0.01, '405836139359', 'Enjoy our deliciously sweet red cherries grown in Washington. Full of nutrition, these fresh red cherries are not only delicious, but also packed with vitamins and minerals like vitamin C, potassium, and vitamin B complex. Enjoy these cherries on their own, as part of desserts and entrees, or add them to drinks. Cherries can stay fresh when frozen for up to three months, so you\'ll be able to enjoy them throughout the fall and winter seasons. Make sure you use a freezer bag that removes as much air as possible. Then, when you\'re ready to eat them, thaw cherries in the refrigerator and enjoy. Get powerful nutrition and flavor with these Fresh Red Cherries.', 'Ogp Red Cherry Samples Bursting with antioxidants, phytochemicals, vitamins, nutrients, and fiber Rich source of vitamin C, potassium, and vitamin B complex Versatile and delicious Wonderful addition to entrees, desserts, and beverages To enjoy fresh cherries: store in the refrigerator and wash just before eating Grown in Washington', 'Fresh Produce', 'https://i5.walmartimages.com/asr/079a8787-8441-42a5-8fe1-b783c7973664.805d57aadb9f606d0e5e63b4697002d9.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/079a8787-8441-42a5-8fe1-b783c7973664.805d57aadb9f606d0e5e63b4697002d9.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/079a8787-8441-42a5-8fe1-b783c7973664.805d57aadb9f606d0e5e63b4697002d9.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (940651956, '200pc Pto Ykn/red 5#', 1074, '405547375299', 'short description is not available', '200pc Pto Ykn/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (940726662, 'Organic Green Seedless Grapes, 2 Lb', 5.98, '816426012851', 'Organic Fresh Green Seedless Grapes', 'Selected and stored fresh,Sourced with high quality standards,Recommended to wash before consuming,Delicious on their own as a healthy snack or as part of a recipe,Refrigerate immediately for maximum shelf life and flavor', 'Zinfandel', 'https://i5.walmartimages.com/asr/35d7e77c-4759-4f47-867e-6f2fbc6f0d35.25e0a4d66df6db6d4fa7cd432770f66f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35d7e77c-4759-4f47-867e-6f2fbc6f0d35.25e0a4d66df6db6d4fa7cd432770f66f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/35d7e77c-4759-4f47-867e-6f2fbc6f0d35.25e0a4d66df6db6d4fa7cd432770f66f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (940947941, '120pc Grapefruit 5#', 717.6, '405785123195', 'short description is not available', '120pc Grapefruit 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (941331025, 'Yellow Flesh Peaches, per Pound', 1.58, '400094341063', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (942081086, 'Calming Comfort 12pc', 1200, '', 'short description is not available', 'Calming Comfort 12pc', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (942553424, 'Vidalia Onions, 2 Lb.', 2.88, 'deleted_743568601516', 'Vidalia Onions, 2 Lb.', 'Vidalia Onions 2 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (943161785, 'Robinson Fresh Green Seedless Grapes', 9.97, 'deleted_095829600418', 'short description is not available', 'Robinson Fresh Green Seedless Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/b857d6b9-e7f5-4603-8eea-0dbc43dd2c38.d51063bf9750b5c0d3c66c73d01418ed.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b857d6b9-e7f5-4603-8eea-0dbc43dd2c38.d51063bf9750b5c0d3c66c73d01418ed.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b857d6b9-e7f5-4603-8eea-0dbc43dd2c38.d51063bf9750b5c0d3c66c73d01418ed.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (943315102, '125pc Pto Russet 8#', 802.5, '405551652393', 'short description is not available', '125pc Pto Russet 8#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (943367003, 'Diced Red Onions', 2.58, '782796022298', 'short description is not available', 'Diced Red Onions', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (943409312, 'AVO LBAG 10/5 48', 3.28, '', 'Avocados', 'Large Avocado 5 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (943513700, 'Bako Sweet Organic Purple Skin Sweet Potatoes, 14 Oz', 4.47, '819614010417', 'Grown from the sweet spot of California, these Organic Purple Sweet Potatoes are purple on the outside and white on the inside. They are an exotic alternative to traditional sweet potatoes. Firm and dense with a mildly sweet with a full, nutty flavor and a vanilla aroma. Sweet potatoes are a superfood and can be enjoyed in many ways, making it easy to feed your family the best.', 'Ready to enjoy Loaded with Vitamin A Good source of fiber Nutritious Superfood Triple Washed Non-GMO', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2ba9b483-b873-4187-b59f-afaad71a840a.1dc9854b6e39d7fddee95a080562ea9c.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ba9b483-b873-4187-b59f-afaad71a840a.1dc9854b6e39d7fddee95a080562ea9c.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2ba9b483-b873-4187-b59f-afaad71a840a.1dc9854b6e39d7fddee95a080562ea9c.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (943996470, '200pc Pto Idado 5#', 648, '405511900960', 'short description is not available', '200pc Pto Idado 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (944197720, 'Fortune Brand Dried Black Fungus, Whole, 4 Oz, 50 Ct', 66.47, '022652206968', 'DRIED BLACK FUNGUS WHOLE', 'Fortune Brand Dried Black Fungus, Whole, 4 Oz, 50 Ct', 'FORTUNE BRAND', 'https://i5.walmartimages.com/asr/8ddcc758-8506-437d-9ee8-b55b2ca27c93.ea9903dedbd3272e0c9f970fadc26873.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ddcc758-8506-437d-9ee8-b55b2ca27c93.ea9903dedbd3272e0c9f970fadc26873.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ddcc758-8506-437d-9ee8-b55b2ca27c93.ea9903dedbd3272e0c9f970fadc26873.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (944244583, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094129319', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (946239668, '90pc Apple Fuji 3#', 447.3, '405665886547', 'short description is not available', '90pc Apple Fuji 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (946480895, 'Melon De Agua 65#', 0.78, '405873138377', 'short description is not available', 'Melon De Agua 65#', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (946620858, 'Gourmet Banana Shallots 1 Lb Mesh Bag', 1.88, '', 'short description is not available', 'Gourmet Banana Shallots 1 Lb Mesh Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (946839978, 'Local Roots Baby Butter Blend, 4.5 oz', 2.98, '853911006254', 'An upgraded mix of heritage baby butterhead lettuces.', 'Grown locallyGrown with zero pesticides or herbicidesGrown with up to 99% less waterHigh in Chlorophyll & Vitamins', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f2356a4b-5140-4b01-9815-3d33db1f5b6f.d86afa30451a222a238a3093f4b250ba.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f2356a4b-5140-4b01-9815-3d33db1f5b6f.d86afa30451a222a238a3093f4b250ba.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f2356a4b-5140-4b01-9815-3d33db1f5b6f.d86afa30451a222a238a3093f4b250ba.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (946886270, '120pc Apl Red Del 5#', 656.4, '405667988591', 'short description is not available', '120pc Apl Red Del 5#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (947758886, 'Gourmet212 Grilled Artichokes Marinated In Oil 7.05oz (12 Pack), Glass, Jarred, Fresh', 87.95, '191822005073', 'Aegean?s olive oil dishes are very famous. Taste of Mediterranean and light color artichokes will give with tasty broad bean or as a mezze The light color artichoke will give you Mediterranean taste with broad beans or serve as mezze. It is being served with potatoes, green beans and carrots at most fish restaurants.', 'Gourmet212 Grilled Artichokes Marinated In Oil 7.05oz (12 Pack), Airtight Glass Jar, Kosher, and Halal Certified, Fresh Grilled Artichokes, being served with potatoes, green beans, and carrots at most fish restaurants. Store in Cold and Dry places, away from direct sunlight. Keep refrigerated after opening. Amount per serving Calories 30.', 'Gourmet212', 'https://i5.walmartimages.com/asr/6224954b-8ae5-4a72-b799-ee0930877163.befceb6e45f2099908b3a489b7590921.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6224954b-8ae5-4a72-b799-ee0930877163.befceb6e45f2099908b3a489b7590921.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6224954b-8ae5-4a72-b799-ee0930877163.befceb6e45f2099908b3a489b7590921.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (947928125, '180pc Apple Gala 3#', 561.6, '405667977953', 'short description is not available', '180pc Apple Gala 3#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (948454395, 'Fieldpack Unbranded Bunch Radishes', 1.97, 'deleted_811944020951', 'short description is not available', 'Fieldpack Unbranded Bunch Radishes', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (948724302, '180pc Pto Rst 10# Ff', 889.2, '400094860410', 'short description is not available', '180pc Pto Rst 10# Ff', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (948785852, 'Yellow Flesh Peaches, per Pound', 1.58, '400094437452', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (948818803, 'Freshness Guaranteed Cantaloupe 10 Oz', 3.12, 'deleted_681131036511', 'short description is not available', 'Freshness Guaranteed Cantaloupe 10 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (948904558, 'Fresh Cocktail Tomato, 1 lb Package', 2.98, '751666613850', 'Holding the ideal balance of sweetness and acidity, it\'s easy to see why Cocktail Tomatoes are called the tomato lover\'s tomato. Cocktail Tomatoes are small in size, making them an ideal choice for appetizers to pair with your everyday meals and for when you\'re entertaining guests. You can combine these tasty little tomatoes with fresh mozzarella and basil drizzled with olive oil or slice them up and add them to a freshly tossed salad. If you\'re feeling something classic, you can always cut one up to add that fresh tomato taste to a sandwich or dice up a few to make a delightful pizza topping. Plus, Cocktail Tomatoes are packed with nutrients, including vitamins A, B6, B12, C, D, E, K, phosphorous, magnesium and zinc, so you can feel good about adding some extra flavor to your meals. Be sure to add Cocktail Tomatoes to your inventory of fresh ingredients today.', 'Cocktail Tomatoes, 16 oz The tomato lover\'s tomato Small size is ideal for salads and appetizers To maintain sweetness, do not refrigerate 16-oz package of fresh, whole Cocktail tomatoes These European-style whole tomatoes are ideal all year long', 'Fresh Produce', 'https://i5.walmartimages.com/asr/522d842b-bea3-446b-9f17-8fd6889a97e4.c6bcf7c8099a0081480129465e3ba397.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/522d842b-bea3-446b-9f17-8fd6889a97e4.c6bcf7c8099a0081480129465e3ba397.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/522d842b-bea3-446b-9f17-8fd6889a97e4.c6bcf7c8099a0081480129465e3ba397.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (949006005, 'Strawberry Cherries, 1 Lb.', 5.98, '813200013615', 'Strawberry Cherries, 1 Lb.', 'Strawberry Cherry 1 Lb Clam', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (949041021, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094987049', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (949711977, 'Mann\'s Steakhouse Baby Broccolini, 6oz', 4.47, '716519009846', 'Broccolini baby broccoli is a delicious cross between Chinese kale and broccoli which gives you the floret of the broccoli and stem of the kale. It is 100% edible with a sweet, earthy taste and tender stem. Baby broccolini resembles broccoli but has longer, thinner stems and smaller florets. Its overall appearance is more delicate compared to regular broccoli. Baby broccolini is rich in vitamins, minerals, and antioxidants. It\'s a good source of vitamin C, vitamin K, vitamin A, folate, and fiber. It also contains sulforaphane, a compound known for its potential health benefits.', 'Mann\'s Steakhouse Baby Broccolini, 6oz Tender stems Washable ready to eat Non GMO Bag is quick peel you can stem in bag It\'s a good source of vitamin C, vitamin K, vitamin A, folate, and fiber', 'Mann\'s', 'https://i5.walmartimages.com/asr/96fdfa2f-f9c1-47d6-bb31-11a5b0a905c4.675c81d360398c778e4ab075720880ae.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fdfa2f-f9c1-47d6-bb31-11a5b0a905c4.675c81d360398c778e4ab075720880ae.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fdfa2f-f9c1-47d6-bb31-11a5b0a905c4.675c81d360398c778e4ab075720880ae.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (950108553, 'Organic Gummyberries Grapes, 1 Lb', 3.48, 'deleted_816426012776', 'short description is not available', 'Organic Gummyberries Grapes, 1 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (950183992, 'Organic Microwavable Potatoes, 1 Each', 1.28, 'deleted_813652010781', 'Organic Microwavable Potatoes, 1 Each', 'Organic Microwavable Potatoes Per Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (950609802, '200pc Pto Idaho 5#', 794, '405532298664', 'short description is not available', '200pc Pto Idaho 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (951255674, 'Expert Gardner 4PK Cherry Tomato Cherry Mix', 3.48, '783975662465', 'Seville Farms, Plant', 'Expert Gardener Merchandise', 'Expert Gardener', 'https://i5.walmartimages.com/asr/6915b86e-2426-4689-aaf1-246c0e286933.fd04b2f4e14b050329378e0a2a6f4863.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6915b86e-2426-4689-aaf1-246c0e286933.fd04b2f4e14b050329378e0a2a6f4863.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6915b86e-2426-4689-aaf1-246c0e286933.fd04b2f4e14b050329378e0a2a6f4863.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (951345661, '180pc Apple Gala 3#', 561.6, '405668326927', 'short description is not available', '180pc Apple Gala 3#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (951468352, 'Pineapple Chunks 6oz', 2.28, '095309661014', 'short description is not available', 'Pineapple Chunks 6oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (951621036, 'Fresh Blend Rosemary Red Potatoes', 3.48, '834344010032', 'short description is not available', 'Fresh Blend Rosemary Red Potatoes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (951953827, 'Yellow Flesh Peaches, per Pound', 1.58, '405528875497', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (952289630, 'Persian Limes, 1 Each', 0.32, 'deleted_899858002003', 'Persian Limes, 1 Each', 'Bulk Persian Limes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/2e9c4e3b-9f49-4b8c-a97e-f6c596062ee1_1.124ce6c905ef9e00297755994dfb347a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2e9c4e3b-9f49-4b8c-a97e-f6c596062ee1_1.124ce6c905ef9e00297755994dfb347a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2e9c4e3b-9f49-4b8c-a97e-f6c596062ee1_1.124ce6c905ef9e00297755994dfb347a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (952337983, 'Prico Pinapple Chunks 12 oz.', 4.27, '794504171723', 'Enjoy the sweet, tropical flavor of Fresh Pineapple Chunks (Pina Fresca). These pre-cut chunks are great for breakfast, lunch, dessert, or when you want a snack. Pineapple is a good source of vitamin C, vitamin A and vitamin B6 making them an excellent healthy treat. You can eat the chunks right out of the container, infuse them with water and mint for a refreshing drink, or chop them up and make a mouthwatering pineapple salsa with jalapenos, tomatoes, and red onion.', 'Sweet, refreshing treat Great for breakfast, lunch, dessert, or when you want a snack Good source of vitamin C, vitamin A, and vitamin B6 Enjoy right out of the container, infuse with water and mint, or mix with jalapenos, tomatoes, and red onion for salsa Share with friends and family or keep for yourself Comes in a reclosable container to help maintain freshness Save times', 'Prico', 'https://i5.walmartimages.com/asr/57caef23-ba8c-4fc6-b34b-5b05a007ac75.e8ad8b3b739a1932dae15f82929a2e9e.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/57caef23-ba8c-4fc6-b34b-5b05a007ac75.e8ad8b3b739a1932dae15f82929a2e9e.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/57caef23-ba8c-4fc6-b34b-5b05a007ac75.e8ad8b3b739a1932dae15f82929a2e9e.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (952551665, 'Services Reduced Program Dept 94', 0.01, '251699000004', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (952684382, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094514252', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (952737628, 'Freshness Guaranteed Seasonal Blend Large', 4.67, '262832000003', 'Enjoy the sweet, refreshing taste of Freshness Guaranteed Seasonal Blend. This pre-cut Seasonal Blend is great for breakfast, lunch, dessert, or when you want a snack. You can eat them right out of the container, use them to infuse water for a refreshing drink. This Seasonal Blend is great for sharing with friends and family or keeping it for yourself. It comes in a reclosable container to help maintain freshness. Bring home Freshness Guaranteed seasonal blend today for a refreshing, healthy treat.Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Seasonal Blend Large', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (953493255, 'Butternut Squash', 1.18, '814570010037', 'Butternut Squash', 'Butternut Squash', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1aba52b1-fe49-4a42-9c40-46343599055c.22d3b024f67049ab25bc7ef990fdf1f4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (953528927, 'Fresh Blueberries, 1 lb Container', 3.98, '812049006154', 'Create decadent meals with sweet and light Fresh Blueberries. Enjoy them for breakfast, lunch, dinner, or dessert. Use them to make a lemon and blueberry galette, bake them into delicious blueberry muffins, cook up a sweet and savory pizza topped with blueberries and bacon, or reduce them for a sauce to use on grilled chicken or cheesecake. They contain essential vitamins and nutrients like, vitamin C, vitamin K, antioxidants, and manganese making them perfect for a healthy diet. Prior to serving simply gently wash them with cool water and enjoy the fresh taste. Refrigerate the berries to keep them fresh and ready for use. Pick up Fresh Blueberries today and savor the delectable flavor.', 'Fresh Blueberries, 1 lb: Best when enjoyed at room temperature Light, refreshing taste Healthy treat Prior to serving gently wash them with cool water Refrigerate your berries in the original container to maintain freshness They should approximately last 3-5 days after purchase Keep dry for optimal freshness', 'Unbranded', 'https://i5.walmartimages.com/asr/95dcb6db-b793-4da5-8bdc-f0884cc337fc.aa761c55c1ab1460c3451fbc379b662a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95dcb6db-b793-4da5-8bdc-f0884cc337fc.aa761c55c1ab1460c3451fbc379b662a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95dcb6db-b793-4da5-8bdc-f0884cc337fc.aa761c55c1ab1460c3451fbc379b662a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (953912455, 'Grape Tomatoes', 2.48, '405565638055', 'short description is not available', 'Grape Tomatoes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (954212028, 'Fresh Snapdragon Apples, 2 lb Bag', 4.97, '863046000126', 'Snapdragon apples are renowned for their extraordinary sweetness, epic flavor, and incredible juiciness, making them the perfect choice for a healthy snack. These apples provide a legendary eating experience and are conveniently sized to fit in lunchboxes or enjoy on the go. Packed with fiber, they offer a nutritious alternative to a second cup of coffee, leaving you satisfied and prepared for any adventure. Developed by Cornell University in Ithaca, NY, and grown by 150 dedicated farmers in New York State, SnapDragon apples guarantee exceptional homegrown quality.', 'Apples, SnapDragon 2-1/4 inch diameter. Monster crunch. SnapDragonApple.com. US extra fancy. Crunchy with a sweet & juicy flavor you will love! Get a Bite of Monster Crunch: Our passion is for growing - and eating - great apples. So when this new delight came along from the renowned breeders at Cornell University 145 New York apple growers fell in love. We\'ve called it SnapDragon, for its snappy monster crunch and spicy-sweet flavor. Chomp a SnapDragon apple whenever you need a feel good energy boost and a sweet treat. For more information and to meet the growers, visit: SnapDragonApple.com. New York State Apple Country. Facebook: crunchtimeapplegrowers. Twitter: crunchtimeapple. Coated with food grade vegetable and or shellac based wax resin to maintain freshness. Grown in New York. Produce of USA.', 'Unbranded', 'https://i5.walmartimages.com/asr/c3909f9b-900a-4aea-963f-02db91550ace.4e34e750fb58e7a55ed07f20a855a97f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3909f9b-900a-4aea-963f-02db91550ace.4e34e750fb58e7a55ed07f20a855a97f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c3909f9b-900a-4aea-963f-02db91550ace.4e34e750fb58e7a55ed07f20a855a97f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (954235515, 'New Mexico Hatch Chili Medium 25 lbs Sold by Case Only', 24, '400094597811', 'Unique flavored pepper grown in the hatch valley of New Mexico. For amazing flavor, simply roast, peel and add to your favorite recipe. Perfect at breakfast in your burrito or omelette. Spice up your salsa and quacamole or add to your favorite dinner dish such as burgers, pizza, enchiladas, and much more.', 'New Mexico Hatch Chili Pepper. Unique flavored pepper grown in the hatch valley of New Mexico. For amazing flavor, simply roast, peel and add to your favorite recipe. Perfect at breakfast in your burrito or omelet. Spice up your salsa and guacamole or add to your favorite dinner dish such as burgers, pizza, enchiladas, and much more. Find this at your local Walmart!', 'Unbranded', 'https://i5.walmartimages.com/asr/5d611345-7645-4550-a344-60fee62e194c.45df74559c9d9a920d6e84e65d0bc606.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d611345-7645-4550-a344-60fee62e194c.45df74559c9d9a920d6e84e65d0bc606.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5d611345-7645-4550-a344-60fee62e194c.45df74559c9d9a920d6e84e65d0bc606.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (954589520, 'Freshness Guaranteed Mango Berry Tray 10 Oz', 5, '681131037037', 'short description is not available', 'Freshness Guaranteed Mango Berry Tray 10 Oz', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (954832750, 'Large Avocado 3 Count Bag', 5.18, 'deleted_850758006386', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (954842803, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094334423', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (955051966, 'Fresh Grown Thomcord Grapes 1.5#', 2.98, '818994013902', 'short description is not available', 'Fresh Grown Thomcord Grapes 1.5#', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (955316688, 'Fresh Cherry Tomato, 10 oz Clam Shell', 3.77, '882035200019', 'Fresh cherry tomatoes are a quick and flavorful addition to any homemade meal. Perfect for mixing into a fresh salad, adding into a pasta dish, or enjoying on their own, this fresh produce item provides marvelous texture, vibrant color, and an amazingly smooth taste that easily compliments your recipes. Juicy and delicious, grape tomatoes are known for their beautiful bright red color, thick skin, low water content, and long shelf-life. They\'re low in calories, are a good source of fiber, and contain vitamins A and C, lycopene and other vitamins and minerals, which means on top of bringing exceptional flavor and texture depth to the table, they also offer essential nutrients to lend themselves as a wholesome ingredient to any culinary creation. Whether you\'re looking for a quick and healthy snack or a deliciously easy ingredient to add to a meal, these Cherry Tomatoes are the perfect choice.', 'Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches', 'Hypermart', 'https://i5.walmartimages.com/asr/5b28a40a-4499-4ba3-a7f6-ee38d96cd269.bf3d665731aae6cbee414111e0f1ef96.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b28a40a-4499-4ba3-a7f6-ee38d96cd269.bf3d665731aae6cbee414111e0f1ef96.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5b28a40a-4499-4ba3-a7f6-ee38d96cd269.bf3d665731aae6cbee414111e0f1ef96.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (955363885, 'Services Reduced Program Dept 94', 0.01, '251674000005', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (955558459, 'Yellow Flesh Peaches, per Pound', 1.58, '400094601662', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (955746256, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094988794', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (956531524, 'Mango Spears 16oz', 9.96, '045009891211', '16oz cut mango spears', '16oz of cut Mango Spears', 'Fresh Produce', 'https://i5.walmartimages.com/asr/59439a49-659b-403d-85b2-62b055a02d27.0a8513bfabd0e05498dbf0307104aacd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59439a49-659b-403d-85b2-62b055a02d27.0a8513bfabd0e05498dbf0307104aacd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/59439a49-659b-403d-85b2-62b055a02d27.0a8513bfabd0e05498dbf0307104aacd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (956649122, 'Butter Lettuce', 2.98, 'deleted_812349029006', 'Edible Garden living butterhead lettuce is 100% hydroponically grown and delivered to your grocer live, with root systems intact. This gives the sweet, tender leaves maximum flavor and nutrition that lasts. Care Instructions: Because our Butterhead lettuce is grown hydroponically, it cannot be replanted in soil.', 'Butter Lettuce produce organic hydroponic', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5208a339-8452-44bd-8a17-2054f172f35d.2777e73ea737d3da567c323979b99ac6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5208a339-8452-44bd-8a17-2054f172f35d.2777e73ea737d3da567c323979b99ac6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5208a339-8452-44bd-8a17-2054f172f35d.2777e73ea737d3da567c323979b99ac6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (957113693, 'Gourmet212 Oven Roasted Cherry Tomatoes 8.11oz, 12 Pack', 112.95, '191822004922', 'Have you tried semi dried cherry tomatoes? If your answer is no, you should try our product to not to miss out. Sun dried tomatoes are highly recommended just as semi dried tomatoes if it is not the season of fresh tomatoes, however, oven semi dried tomatoes are closer to natural tomato taste than sun dried tomatoes. The semi dried tomatoes are juicier and lighter in color and are also sliced. They are then put in high quality ovens for 6-7 hours with low temperatures. Dehydrated slowly, semi dried tomatoes preserve their taste in flavored oil for long time without any additives. This product is packed with so high quality that keeps fresh for one year on the shelf without oxygen exposure. Some reasons to buy our semi dried cherry tomatoes: It is Halal Certified It is Kosher Certified It?s made with seasonal tomatoes It?s the perfect product for any meat or chicken dish It?s a delicious ingredient for antipasti, pizza, salad, sandwich and pasta Ingredients: sun dried tomatoes (57%), canola oil, salt, sugar, vinegar, garlic powder, spices, acidity regulator (citric acid), antioxidant (ascorbic acid) If you like cherry tomatoes, you shouldn?t miss this product.', 'Gourmet212 Oven Roasted Cherry Tomatoes 8.11 oz (12 Pack), Stuffed, Airtight Glass Jarred The semi-dried tomatoes are juicier and lighter in color. They are put in high-quality ovens for 6-7 hours with low temperatures. Dehydrated slowly, semi-dried tomatoes preserve their taste in flavored oil for a long time without any additives. It is Halal and Kosher Certified Ingredients: sun-dried tomatoes (57%), canola oil, salt, sugar, vinegar, garlic powder, spices, acidity regulator (citric acid), antioxidant (ascorbic acid).', 'Gourmet212', 'https://i5.walmartimages.com/asr/6a0f8f82-f93a-4624-bc49-7767d339a7d8.ff0982393d9e79b38ff96159da8d8ceb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a0f8f82-f93a-4624-bc49-7767d339a7d8.ff0982393d9e79b38ff96159da8d8ceb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a0f8f82-f93a-4624-bc49-7767d339a7d8.ff0982393d9e79b38ff96159da8d8ceb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (957136706, 'Fresh Grown Yellow Peaches', 1.58, '400094275443', 'short description is not available', 'Fresh Grown Yellow Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (957249774, 'Watermelon Seedless', 4.48, '400094476802', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (957442773, 'Yellow Flesh Peaches, per Pound', 1.58, '400094342787', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (957588422, 'Freshness Guaranteed Whole Portabella Caps 6oz', 2.88, 'deleted_699058820120', 'short description is not available', 'Freshness Guaranteed Whole Portabella Caps 6oz', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (957590499, 'Orange Bell Pepper, each', 1.24, 'deleted_684924031212', 'short description is not available', 'Orange Bell Pepper', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/3baaa636-adc3-465f-866b-50df64d60cc5_1.f77c2c82ddd623cd8667196b6ac97a43.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3baaa636-adc3-465f-866b-50df64d60cc5_1.f77c2c82ddd623cd8667196b6ac97a43.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3baaa636-adc3-465f-866b-50df64d60cc5_1.f77c2c82ddd623cd8667196b6ac97a43.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (957662010, 'Freshness Guaranteed Snack Trio', 4.28, '263032000008', 'short description is not available', 'Freshness Guaranteed Snack Trio', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (958175477, 'Fresh Sweet Carnival Grapes, Sample Bag', 0.01, '885282001385', 'short description is not available', 'Fresh Sweet Carnival Grapes, Sample Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/9777b788-02f6-4ba6-8de2-98c8f4e49521.dbb5f8a653c34d67e6e20db67daf6993.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9777b788-02f6-4ba6-8de2-98c8f4e49521.dbb5f8a653c34d67e6e20db67daf6993.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9777b788-02f6-4ba6-8de2-98c8f4e49521.dbb5f8a653c34d67e6e20db67daf6993.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (958319693, 'Freshness Guaranteed Mango Habanero Guacamole, 8 oz', 2.88, '681131354820', 'Find a new fresh flavor you\'re sure to love with the Freshness Guaranteed Mango Habanero Guacamole. This tasty guacamole features a creamy combination of Hass avocados, mango, jalapeno peppers, onion, cilantro, and a habanero puree to ensure a mouthful of flavor in every bite. Add a dollop to your quesadillas, burgers, burritos, and sandwiches for a taste that will have you coming back for seconds. With 8 servings per container, this guacamole is perfect for small gatherings, parties, barbecues, and game nights with family and friends. Plus, the reclosable lid in the packaging helps maintain freshness between snack sessions. Scoop up some flavor with Freshness Guaranteed Mango Habanero Guacamole. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Spark Fresh item.', 'Freshness Guaranteed Mango Habanero Guacamole, 8 oz: High heat level 8 servings per container makes this an ideal dish to serve at parties Pairs perfectly with chips Delicious as a spread on wraps, sandwiches, and toast', 'Fresh Produce', 'https://i5.walmartimages.com/asr/bc8326d3-6437-4bdb-befd-0874d3a892fd.e717cdc404c3699757c19cab20d4f7b0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc8326d3-6437-4bdb-befd-0874d3a892fd.e717cdc404c3699757c19cab20d4f7b0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bc8326d3-6437-4bdb-befd-0874d3a892fd.e717cdc404c3699757c19cab20d4f7b0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (958589014, 'Watermelon Seedless', 4.98, '400094924808', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (958759284, 'Microwave in Bag Yellow Potatoes, 1 Lb.', 2.48, '024617180870', 'Microwave in Bag Yellow Potatoes, 1 Lb.', 'Microwave In Bag Yellow Potatoes 16 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (959245639, 'Watermelon Seedless', 4.48, '400094414293', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (959274657, 'Organic Russet Potatoes, 3 lb bag', 3.66, 'deleted_095829400032', 'Organic Russet Potatoes, 3 Lb.', 'Organic Russet Potatoes, 3 lb bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/fdc11b8a-ef47-4f78-8527-5d8326ef6a92.09b3966a341ca2a62fe859971fe5687a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fdc11b8a-ef47-4f78-8527-5d8326ef6a92.09b3966a341ca2a62fe859971fe5687a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fdc11b8a-ef47-4f78-8527-5d8326ef6a92.09b3966a341ca2a62fe859971fe5687a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (959620009, 'Tasteful Selections Sunset Fingerling Potato Bag, 24 oz', 4.88, '826088749071', 'A medley of our delicious fingerling potatoes, ranging from buttery to nutty. Something for everyone, Sunset Fingerlings™ bring a medley of our delicious fingerling potatoes to your table. Serve your guests a bouquet of flavors and textures, ranging from buttery to nutty. Copy Right Tasteful Selections', 'Tasteful Selections Sunset Fingerling Mesh, 24oz Ranging from buttery to nutty Serve your guest a bouquet of flavors and texture', 'Tasteful Selections', 'https://i5.walmartimages.com/asr/60698f67-4f9c-4f26-86ba-7e83b0b06cda.d5063ffeaa7a955e9a8cdc8ffaf77f98.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/60698f67-4f9c-4f26-86ba-7e83b0b06cda.d5063ffeaa7a955e9a8cdc8ffaf77f98.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/60698f67-4f9c-4f26-86ba-7e83b0b06cda.d5063ffeaa7a955e9a8cdc8ffaf77f98.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (959655816, 'Limes, 1 Lb.', 2.97, '086903100054', 'Limes, 1 Lb.', '1# Bag Limes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/aa7311c2-100b-415f-bfcc-06ec70a10913_1.251cd3ec98b2618be14072fe1bbafe50.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa7311c2-100b-415f-bfcc-06ec70a10913_1.251cd3ec98b2618be14072fe1bbafe50.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa7311c2-100b-415f-bfcc-06ec70a10913_1.251cd3ec98b2618be14072fe1bbafe50.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (960369410, '100pc Pto Rst 10# #2', 494, '405546445313', 'short description is not available', '100pc Pto Rst 10# #2', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (961051740, 'Bunch Beets', 2.24, 'deleted_885435999972', 'Bunch Beets', 'Noted for their deep ruby hue, Beets taste like sweet spinach. To retain color, flavor and nutrients, cook Beets whole. Peel off the skin once beets have cooled. Serve in salad or reheat as a side dish. Ideal Temperature: 33 F. Beets are subject to wilting because of rapid water loss and should be kept in sufficiently high humidity.', 'Ratto Bros.', 'https://i5.walmartimages.com/asr/a67c6996-cbf2-4c18-b34f-3b3db3cd048d.aac89ac9abfa2230723fc51239b7b1a9.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a67c6996-cbf2-4c18-b34f-3b3db3cd048d.aac89ac9abfa2230723fc51239b7b1a9.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a67c6996-cbf2-4c18-b34f-3b3db3cd048d.aac89ac9abfa2230723fc51239b7b1a9.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (961244705, 'Fieldpack Unbranded Fresh Strawberries 1#', 1.56, '400094381748', 'short description is not available', 'Fieldpack Unbranded Fresh Strawberries 1#', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (961560977, 'Fieldpack Unbranded Organic Rainbow Kale', 1.96, 'deleted_073574860073', 'Produce See more', 'Greens Cooking', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b6795348-79ff-4095-93af-6967ce3177a2.e6370e5da7b9aa7066e1c35c85a953ae.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b6795348-79ff-4095-93af-6967ce3177a2.e6370e5da7b9aa7066e1c35c85a953ae.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b6795348-79ff-4095-93af-6967ce3177a2.e6370e5da7b9aa7066e1c35c85a953ae.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (961638214, 'Juici Cosmic Crisp Apple 2# Bag', 4.47, '741839350026', 'short description is not available', 'Juici Cosmic Crisp Apple 2# Bag', 'Juici', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (961969660, 'Belmont Ajo en Pasta Garlic Paste 16 oz', 7.49, '721371251692', 'Belmont Garlic Paste is Peru\'s Famous Garlic Paste. It is used in many traditional Peruvian dishes. Ingredients are Garlic, Salt and Citric Acid.', 'Imported from Peru Famous Garlic Paste No Preservative NET WT 16 oz Refrigerate After Opening', 'Belmont Bruins', 'https://i5.walmartimages.com/asr/0bee10b1-6ef6-45b8-a3ce-bceb2fcaa7be.b9e0cfe34fcbf1613e360b06cf3107e0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0bee10b1-6ef6-45b8-a3ce-bceb2fcaa7be.b9e0cfe34fcbf1613e360b06cf3107e0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0bee10b1-6ef6-45b8-a3ce-bceb2fcaa7be.b9e0cfe34fcbf1613e360b06cf3107e0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (962183333, '240pc On Ylw 3# Bm', 465.59, '405509802481', 'short description is not available', '240pc On Ylw 3# Bm', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (962321127, 'Marketside Fresh Sugar Snap Peas, 16 oz', 5.98, 'deleted_681131221757', 'Add fresh and ready to eat sugar snap peas to your meal with Marketside Sugar Snap Peas. These sugar snap peas are a great source of iron and dietary fiber. Marketside Sugar Snap Peas are a quick and healthy side dish and a great addition to any meal. Marketside Sugar Snap Peas are packed fresh, washed and ready to eat for your convenience. They have a delicious crisp texture and a vibrant green color that is sure to add a pop to all your dishes. Enjoy them as a healthy side or use them in all your favorite recipes. They are a great addition to stir fry and other Asian cuisines. Season them with salt, pepper and butter and serve with grilled chicken breast, grilled squash and bread for a filling dinner. Toss them with fresh cut carrot sticks for a tasty snack at the office. Snacking is made healthy with Marketside Sugar Snap Peas. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Fresh Sugar Snap Peas, 20 oz Washed and ready to eat Great addition to any meal Pieces of snap peas are a healthy snack Packaged in a 20 oz plastic bag', 'Marketside', 'https://i5.walmartimages.com/asr/af5d4f46-6d0e-47ec-8252-3393db4ff537.6efab2818454908624eb17162a3cbdf3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af5d4f46-6d0e-47ec-8252-3393db4ff537.6efab2818454908624eb17162a3cbdf3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af5d4f46-6d0e-47ec-8252-3393db4ff537.6efab2818454908624eb17162a3cbdf3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (962629382, 'Watermelon Seedless', 4.48, '400094339954', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (962872489, '200pc Pto Red 5# Co', 794, '405505737480', 'short description is not available', '200pc Pto Red 5# Co', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (963108381, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094361337', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (963221691, 'Red Bell Pepper', 1.38, '894107001127', 'short description is not available', 'Red Bell Pepper', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (963651842, 'Freshness Guaranteed Strawberry Blueberry Blend Medium', 6.4, '263026000007', 'short description is not available', 'Freshness Guaranteed Strawberry Blueberry Blend Medium', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (963767388, 'California Grown Peaches, per Pound', 1.58, '400094511596', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (963814939, 'Fresh Mango, Each', 0.84, '000000004312', 'Savor the irresistible taste of a Fresh Mango. Mangoes are an excellent fruit to add to your breakfast, lunch, dinner, or dessert. For breakfast, you can chop the mango up and add it to yogurt or a smoothie for a sweet treat that\'s sure to get your morning started on a high note. For dessert, you could use a mango to make a refreshing sorbet or put a tropical twist on a cobbler. You can also use it to make creamy milkshakes or delicious juices that everyone is sure to enjoy. The culinary possibilities are endless when you keep your kitchen stocked with Fresh Mangoes.', 'Fresh Mango, Each Irresistibly sweet and juicy Delicious on its own or in a variety of recipes Make a creamy milkshake or a nutritious juice blend Add to yogurt or a smoothie Use to top your salad for a tropical twist', 'Produce', 'https://i5.walmartimages.com/asr/e9e75016-b10e-440a-bcaa-e3a15059dc62.09b33d2b939bd00c657331183d8f2936.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9e75016-b10e-440a-bcaa-e3a15059dc62.09b33d2b939bd00c657331183d8f2936.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9e75016-b10e-440a-bcaa-e3a15059dc62.09b33d2b939bd00c657331183d8f2936.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (963844756, 'Red Potatoes, 5 Lb.', 5.68, 'deleted_032109200050', 'Red Potatoes, 5 Lb.', 'Red Potatoes 5 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (963868963, 'Little Leaf Farms Baby Red and Green Leaf Lettuce Salad Blend, 4 oz Clam Shell, Fresh', 2.98, '857394006114', 'Little Leaf Farms Baby Red & Green Leaf lettuce combines our signature crispy green leaf with a pop of color and texture from our softer red leaf lettuce, making it the perfect addition to any salad or sandwich. Our deliciously crisp, wonderfully fresh, and uniquely long-lasting greens are grown in a state-of-the-art, sustainable greenhouse that harnesses sunlight and fresh rainwater. With an a fully automated, hands-free growing process to seeding to packaging, there’s no need to wash. Just open the container and enjoy!', 'Grown in a greenhouse for consistent quality and freshness year-round. Combines the classic crispness of green leaf lettuce with the vibrant color and softer texture of red leaf lettuce. Perfect for salads, sandwiches, wraps, and as a colorful garnish. Pesticide, Herbicide, and Fungicide Free Non GMO Offers a unique balance of flavors, textures, and colors for visually appealing dishes', 'Little Leaf Farms', 'https://i5.walmartimages.com/asr/0d9ce7e7-0a2e-4f5f-ac70-fdac7e110bd7.645eabc05aaddfb455fb432d4ef4a4a2.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d9ce7e7-0a2e-4f5f-ac70-fdac7e110bd7.645eabc05aaddfb455fb432d4ef4a4a2.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d9ce7e7-0a2e-4f5f-ac70-fdac7e110bd7.645eabc05aaddfb455fb432d4ef4a4a2.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (963873484, 'Gesex Smart Fruit Peaches', 3.97, '814746010847', 'Gesex Smart Fruit Peaches', 'Gesex Smart Fruit Peaches', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/080ada59-035b-4e4e-a5e7-f4c34386e9cb.59c74b4ed4ad125646cf450deb060118.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/080ada59-035b-4e4e-a5e7-f4c34386e9cb.59c74b4ed4ad125646cf450deb060118.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/080ada59-035b-4e4e-a5e7-f4c34386e9cb.59c74b4ed4ad125646cf450deb060118.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (964141971, 'Services Reduced Program Dept 94', 0.01, '251865000005', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (965084592, 'Dried Mushroom Kibble by Its Delish, 8 Oz Bag Dark Chilean Dehydrated and Chopped Boletus Luteus Mushrooms for Cooking and Flavoring', 34.99, '799137109266', 'Dried Kibbled Mushrooms by Its Delish Boletus Luteus mushrooms is a wild-grown dark mushroom with a deep and earthy flavor, commonly called the brown or Chilean mushroom, sorted, washed, trimmed, and air-dried. There are a good source of vitamin, minerals and protein. These are 100% all-natural with no added ingredients or preservatives. These chopped mushroom flakes are used in a wide variety of applications for rich-flavored mushroom for including sauces, gravy, soups, vegetable stock, broth and stews, pasta products, meats and sausages, seasoning blends, salad products, pot pies, and casseroles and ready meals. Prep Instruction Ideas: Add these mushrooms while slow cooking soups, stews, sauces, casseroles and other foods with sufficient liquid content. In other applications, hydrate by using 1 part dried mushroom and 5 parts water. Simmer for 10-15 minutes. Add water if necessary. Yields 1 oz equals about 1/2 cup dry. Generally, air dried vegetables double in volume when hydrated. Dry/Fresh Ratio 1 lb of air dried boletus luteus mushrooms, once rehydrated, equals approximately 6 lbs of fresh prepared boletus luteus mushrooms. Storage Suggestion Best if used within 18 months. Store tightly sealed in a dry location away from sunlight. Tip: For ready to use mushrooms, soak the dry mushrooms in a sealed container and store in the refrigerator. Stock up and enjoy! About It\'s Delish! It\'s Delish was established in 1992 and is located in North Hollywood, California. It\'s Delish is a food manufacturer and distributor who produces over 500 gourmet food products including licorice, sour belts, taffies, caramels, Jordan almonds, chocolates, nuts, fruits, trail mixes, spices, and the spice blends. It\'s Delish also produces organics and all-natural products. We give you the opportunity to order from the factory direct!', 'PREMIUM - Gourmet Dried Mushrooms Kibble Similar to Porcini and chopped into small dices VALUE SIZE - Half Pound 8 Oz, about four cups dry Bag by the Its Delish brand ENHANCE your culinary experience with hearty flavor, bold taste and vibrant aroma. Add rich flavors paired with vitamins, minerals and protein to your favorite recipes and dishes AWESOME in sauces, gravy, soups, vegetable stock, broth and stews, pasta products, meats and sausages, seasoning blends, salad products, pot pies, risottos and casseroles and ready meals. QUALITY - Certified Kosher OU Parve, Non-Dairy, Vegan, All-Natural, No MSG, No preservatives, Gluten Free, Packaged in the USA and Shipped to you Direct!', 'It\'s Delish', 'https://i5.walmartimages.com/asr/3dfff43c-9e22-4dc1-836c-5695c1015375.83b92677bde7b4a648328e18edbab474.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3dfff43c-9e22-4dc1-836c-5695c1015375.83b92677bde7b4a648328e18edbab474.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3dfff43c-9e22-4dc1-836c-5695c1015375.83b92677bde7b4a648328e18edbab474.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (965704234, 'Mr Lucky Eat Smart Strawberry Harvest, 10oz', 4.97, '709351301414', 'Eat smart Starwberry salad is crisp greens crunchy veggies make it fresh - quinoa, almonds and feta cheese make it hearty. Toss everything in a sweet strawberry dressing and enjoy a salad as a summer day. This is a Superfood salad you won\'t forget.', 'Chopped Salad Kit, Strawberry Harvest Salad & Toppings: 7.5 oz Dressing 2.5 oz No colors, flavors, preservatives, and sweeteners from artificial sources. Gluten free Triple washed Ready to use! 7 superfoods.', 'Mr. Lucky', 'https://i5.walmartimages.com/asr/b6ea47b2-a0af-4f81-a380-b78a3b6a0b9c.aef630eb231aa7b89ee435652715645b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b6ea47b2-a0af-4f81-a380-b78a3b6a0b9c.aef630eb231aa7b89ee435652715645b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b6ea47b2-a0af-4f81-a380-b78a3b6a0b9c.aef630eb231aa7b89ee435652715645b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (966204122, 'Organic Microwavable Potatoes, 1 Each', 1.28, 'deleted_039186108088', 'Organic Microwavable Potatoes, 1 Each', 'Organic Microwavable Potatoes Per Each', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (966511751, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, '400094925423', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (966541325, 'Fresh California Grown Red Grapes', 1.76, '', 'short description is not available', 'Fresh California Grown Red Grapes', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/75085d11-683d-4e00-93f1-beaca87be296_2.c4ef5e77a256c0efb44a5ede52358f14.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75085d11-683d-4e00-93f1-beaca87be296_2.c4ef5e77a256c0efb44a5ede52358f14.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/75085d11-683d-4e00-93f1-beaca87be296_2.c4ef5e77a256c0efb44a5ede52358f14.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (966769640, 'Back to the Roots Organic Tomato \'Red Cherry\', 1 Seed packet', 2.97, '810667031800', 'Our 100% Organic and non-GMO red cherry tomatoes are small in size, brightly red and offer a sweet and juicy taste. These seeds are heirloom-quality, meaning they are open pollinated and passed down without being modified for at least 50-years. Additionally, once you grow your tomatoes, you can harvest the seeds and save them to plant the following year.', 'Annual seeds give rise to indeterminate/vining plants, allowing for harvesting throughout the season Organic USA seeds 100% guaranteed to grow: we\'re on a mission to get America growing, if you are not satisfied or have any issues, just shoot us a note and our dedicated garden support team will make sure we get you growing or send you a refund/replacement, let\'s grow, together #Growonegiveone, help us make gardening a part of every classroom, share a photo of your growing garden and we\'ll donate a grow kit and stem curriculum to an elementary school classroom of your choice', 'Back to the Roots', 'https://i5.walmartimages.com/asr/54e1324f-efe9-44dd-896f-2829d12d6d05.3fdc25c17ffe642dc9e0d39cf2d7df51.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54e1324f-efe9-44dd-896f-2829d12d6d05.3fdc25c17ffe642dc9e0d39cf2d7df51.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/54e1324f-efe9-44dd-896f-2829d12d6d05.3fdc25c17ffe642dc9e0d39cf2d7df51.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (967450467, 'Fresh Whole Japanese Purple Yam', 1.86, '000000033336', 'Introducing our delectable Japanese Purple Yam, a vibrant, nutrient-rich, and exotic delicacy that will elevate your culinary experience. Grown in the fertile soils , this unique tuber boasts a striking purple hue, velvety texture, and a delightful balance of sweet and earthy flavors. Packed with antioxidants, vitamins, and minerals, the Japanese Purple Yam is not only a feast for the eyes but a powerhouse of health benefits. Whether incorporated into savory dishes, enticing desserts, or enjoyed simply roasted, our Japanese Purple Yams will undoubtedly add an unforgettable touch of elegance and taste to your dining table.', 'Fresh Japanese Purple Yam Introducing our delectable Japanese Purple Yam, a vibrant, nutrient-rich, and exotic delicacy that will elevate your culinary experience. Grown in the fertile soils , this unique tuber boasts a striking purple hue, velvety texture, and a delightful balance of sweet and earthy flavors. Packed with antioxidants, vitamins, and minerals, the Japanese Purple Yam is not only a feast for the eyes but a powerhouse of health benefits. Whether incorporated into savory dishes, enticing desserts, or enjoyed simply roasted, our Japanese Purple Yams will undoubtedly add an unforgettable touch of elegance and taste to your dining table.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/2eb7b9a4-d8aa-473d-9d67-88a9c0b38373.5313774622659e3ac14ebe3bf89931ef.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2eb7b9a4-d8aa-473d-9d67-88a9c0b38373.5313774622659e3ac14ebe3bf89931ef.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2eb7b9a4-d8aa-473d-9d67-88a9c0b38373.5313774622659e3ac14ebe3bf89931ef.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (967806372, 'Purple Eggplant', 1.18, 'deleted_857419005221', 'short description is not available', 'Purple Eggplant', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (967961497, 'Freshness Guaranteed Fresh Green Seedless Grapes', 2.08, '', 'short description is not available', 'Freshness Guaranteed Fresh Green Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (968567065, '180pc Pto Rst 10# Co', 889.2, '405510110728', 'short description is not available', '180pc Pto Rst 10# Co', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (968786782, 'Yellow Potatoes Whole Fresh, 5lb Bag', 4.47, 'deleted_688286000084', 'Fresh Yellow Potatoes (Papa Amarilla) are a staple for your kitchen this holiday season. Use yellow potatoes to create a variety of cooked and baked dishes- from creamy, flavorful mashed potatoes, to fluffy, filling baked potatoes topped with cheese, bacon, and sour cream, or cheesy, succulent au gratin potatoes. Make fried potatoes for a hearty holiday breakfast, shred them for hash browns, or use these yellow potatoes to make a pleasing, tummy-warming potato soup to chase away the chill on a cold winter\'s day. Make time-honored family favorite recipes or create new favorites with Yellow Potatoes', '5-pound bag of yellow potatoes Perfect for mashing, frying, baking, soups, and French fries Rich in potassium, vitamin C and iron Cholesterol, fat, and sodium free Versatile, flavorful kitchen staple', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/7241df1c-cbbb-4a39-98e9-266b41cc2c77.5102649422b8d27f97009da4c0dfcc99.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7241df1c-cbbb-4a39-98e9-266b41cc2c77.5102649422b8d27f97009da4c0dfcc99.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7241df1c-cbbb-4a39-98e9-266b41cc2c77.5102649422b8d27f97009da4c0dfcc99.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (969208657, 'Organic Kale And Collard Mix 5oz', 2.47, '060556606002', 'short description is not available', 'Organic Kale And Collard Mix 5oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (969294256, 'Fresh California Grown Peaches, 1 Lb.', 1.58, '400094859506', 'Fresh California Grown Peaches, 1 Lb.', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (970029152, 'Fresh Navel Orange, LB', 1.37, '406523179498', 'Enjoy the juicy goodness of Fresh Navel Oranges (China Nebo). A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these navel oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Fresh Navel Oranges add flavor to any meal or beverage', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes', 'Unbranded', 'https://i5.walmartimages.com/asr/05a33b9e-e4f0-4b24-8ba0-28dc215544fe.95088f3c9af8ad72e4d74ecfeb07d36e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/05a33b9e-e4f0-4b24-8ba0-28dc215544fe.95088f3c9af8ad72e4d74ecfeb07d36e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/05a33b9e-e4f0-4b24-8ba0-28dc215544fe.95088f3c9af8ad72e4d74ecfeb07d36e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (970068030, 'Fresh Cactus Pears, Each', 0.75, '000000042550', 'Become a part of the prickly pear sensation with our fresh produce Cactus Pears! Slightly sweet and so refreshing, the prickly pear, also known as nopal or higo chumbo, is widely revered for the unique flavor it adds to a variety of beverages and treats. Simply remove the flesh from the studded skin and extract the fruit\'s natural juices to use as a drink mixer, flavoring for confections, or in glazes and marinades. You can also cut the flesh, or the entire cactus pear, skin and all, into slices to add to your morning scrambled eggs, dice it up to throw into a salad, or eat as is for a quick, wholesome snack. Both a fruit and a vegetable, your body is sure to thank you for adding a little Cactus Pear to your diet.', 'Fresh Cactus Pears, Each Spiny fruit harvested from Opuntia cacti Commonly referred to as prickly pear, nopal, Tuna Fruit or higo chumbo Slightly sweet in flavor with a taste similar to watermelon Extracted juice makes a delicious addition to beverages, confections, and glazes Also good for slicing or dicing and adding to salads or eating alone May come in a plastic bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4ee0f26c-585c-4056-96df-d299d54f20a5.217584c930baa530ac7d5164e76120f0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ee0f26c-585c-4056-96df-d299d54f20a5.217584c930baa530ac7d5164e76120f0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4ee0f26c-585c-4056-96df-d299d54f20a5.217584c930baa530ac7d5164e76120f0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (970353831, 'Fresh Peruvian Grown Black Grapes', 1.98, '', 'short description is not available', 'Fresh Peruvian Grown Black Grapes', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (970387502, 'Organic Microwavable Potatoes, 1 Each', 1.28, 'deleted_061061000583', 'Organic Microwavable Potatoes, 1 Each', 'Organic Microwavable Potatoes', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (970583858, 'Carrot, Bale Cello 5lb', 5.44, '007981692903', 'short description is not available', 'Carrot, Bale Cello 5lb', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (970954242, 'Fiesta Blend Russet Potatoes, 3 Lb.', 1.98, '813652010149', 'Fiesta Blend Russet Potatoes, 3 Lb.', 'Russet Potatoes W/fiesta Blend 3 Lb Bag', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (971187745, 'Workers Shirt Jacket', 3.29, '000000040921', 'This is a demonstration store. You can purchase products like this from Baby & Company The Workers Shirt is a durable cotton weave built with structure. Able bodied and eager. Three exterior pockets. One interior pockets. Button closure at front. Hansen. Color Black. 100% Cotton. Made in EU. Matt is wearing a Medium. Matt is 6’2”, Chest 38”, Waist 31”, Inseam 34.5”. Shop our collection of Hansen.', 'Workers Shirt Jacket', 'Unbranded', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (971282432, 'Mini Pepper Sweet', 3.24, 'deleted_812000020236', 'short description is not available', 'Mini Pepper Sweet', 'Fresh Produce', 'https://i5.walmartimages.com/asr/6c014785-73a7-4ac6-a033-64d45b36659a.16cf9112fbc65757ab642016a1e18628.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6c014785-73a7-4ac6-a033-64d45b36659a.16cf9112fbc65757ab642016a1e18628.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6c014785-73a7-4ac6-a033-64d45b36659a.16cf9112fbc65757ab642016a1e18628.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (971462065, 'Fresh Green Seedless Grapes, 2 Lb', 6.47, 'deleted_850859002232', 'Our vine-fresh green seedless grapes are the perfect addition to your healthy lifestyle. Our sweet and juicy grapes are the perfect snack for any time of day. With fresh produce and organic ingredients, you can be sure that you’re getting the best quality grapes. These grapes are the perfect complement to salads, smoothies, or simply enjoyed on their own. Grab a bunch today and taste the difference for yourself!', '- Our green seedless grapes are the perfect addition to any fruit bowl or snack plate for a refreshing touch of sweet goodness. Our fresh produce is grown with care and harvested at peak ripeness to ensure the best possible flavor and texture in every grape. Enjoy the peace of mind that comes with knowing you\'re getting only the best organic ingredients with every bite of our green seedless grapes. From a midday snack to a dessert topping, these grapes are a deliciously versatile choice for anyone who loves sweet, juicy fruit.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/e227d687-d4b5-4f05-a61e-e55f8f526075.39679801746d29ef48d99c92d7e4bcef.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e227d687-d4b5-4f05-a61e-e55f8f526075.39679801746d29ef48d99c92d7e4bcef.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e227d687-d4b5-4f05-a61e-e55f8f526075.39679801746d29ef48d99c92d7e4bcef.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (971595616, 'Fresh Mini Sweet Peppers 1 lb Bag', 3.24, '', 'Introducing our Fresh Mini Sweet Peppers 1 lb Bag, the perfect addition to your culinary creations! Bursting with vibrant colors and irresistible sweetness, these peppers are hand-selected for their exceptional quality. Whether you\'re sautéing, grilling, or enjoying them raw, their crisp texture and delightful flavor will elevate any dish. Packed with essential vitamins, this bag of goodness is a must-have for healthy and flavorful meals.', 'Fresh mini sweet peppers bags of 1 lb Introducing our Fresh Mini Sweet Peppers 1 lb Bag, the perfect addition to your culinary creations! Bursting with vibrant colors and irresistible sweetness, these peppers are hand-selected for their exceptional quality. Whether you\'re sautéing, grilling, or enjoying them raw, their crisp texture and delightful flavor will elevate any dish. Packed with essential vitamins, this bag of goodness is a must-have for healthy and flavorful meals.', 'Produce Team', 'https://i5.walmartimages.com/asr/2c1c7b20-27dd-41a0-8b95-4babfa0e497d.2458258d43c06186c229d72d0b5914ab.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2c1c7b20-27dd-41a0-8b95-4babfa0e497d.2458258d43c06186c229d72d0b5914ab.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2c1c7b20-27dd-41a0-8b95-4babfa0e497d.2458258d43c06186c229d72d0b5914ab.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (971741097, 'Fresh Green Seedless Grapes, 2 Lb', 5.97, 'deleted_881006020182', 'short description is not available', 'Fresh Green Seedless Grapes, 2 Lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (971866125, 'WHOLLY Diced Avocado Carton 2', 4.98, 'deleted_616112266069', 'When you are ready for the delicious flavor of perfectly ripe avocados and you don’t have time to wait on a fussy fresh fruit, it’s WHOLLY AVOCADO Diced Avocado to the rescue! Made with 100% Hass avocados, hand-scooped at the height of freshness, and nothing else add to your favorite omelet or toast for a breakfast finishing touch. An ideal flavor enhancer to keep on hand in your refrigerator that makes a great topping for snacks or entrees. Top soups, salads, or sandwiches for a convenient addition to your favorite lunch or dinner. Our diced avocado is gluten-free, Non-GMO, a great source of omega-3 fatty acids and fiber, and has no preservatives added. Add your own flavors or enjoy as-is. Includes one, 4 oz plastic Tray (2 Pack) of WHOLLY AVOCADO Diced Avocado. All trademarks, logos and images are owned by Hormel Foods Corporation, its subsidiaries and affiliates. Copyright MegaMex Foods, LLC', 'Made with hand-scooped 100% Hass Avocados; Vegan, Kosher, Gluten-free No Preservatives added and no artificial flavors The perfect addition to breakfast, lunch, or dinner! Spread it on a burger or sandwich; makes a delicious dip for chips or vegetables; or swap it for mayo in an upgraded version of chicken salad Enjoy as a ready-made appetizer, a side to your favorite Mexican dish, or while watching the big game with a crowd Includes one, 4 oz plastic Tray (2 Pack) of WHOLLY AVOCADO Diced Avocado; Packaged for freshness and great taste Find in the refrigerated section at your favorite grocery store', 'WHOLLY GUACAMOLE', 'https://i5.walmartimages.com/asr/c68473f9-cbd6-427e-b3fb-e3f0f39dac34.cbe521df89e3cd660e047e55ae14eaf7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c68473f9-cbd6-427e-b3fb-e3f0f39dac34.cbe521df89e3cd660e047e55ae14eaf7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c68473f9-cbd6-427e-b3fb-e3f0f39dac34.cbe521df89e3cd660e047e55ae14eaf7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (972118408, 'California Grown Peaches, per Pound', 1.58, '400094987254', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (973037834, 'Del Monte Citrus Salad with Red and White Grapefruit and Oranges in 100% Juice, 20 oz Bowl', 4.28, '024000008392', 'Del Monte Citrus Salad in 100% Juice 20 oz Bowl is the perfect balance of sweet and tart in our citrus medley, which includes Vitamin-C packed red grapefruit, white grapefruit and orange slices. Refreshingly chilled, Del Monte Citrus Salad in extra light syrup is picked at the peak of ripeness. This delicious fruit salad is prefect for smoothies, topping for yogurt, cereal, salads, and more. Combine with your favorite flavored gelatin for a fun and festive treat. For a tasty dessert, top with crumbled chocolate cream-filled cookies. Also makes a colorful and refreshing fruit topping for ice cream or frozen yogurt. Del Monte works hard to cultivate the freshest, most nutritious fruits and vegetable to use in every one of our products. When you trust Del Monte, you can be sure what you\'re buying is the peak of quality and nutrition.', 'Del Monte Citrus Salad in 100% Juice 20 oz Bowl provides the delicious taste of juicy grapefruit and oranges in every fruit cup Bite-sized red grapefruit and orange pieces are picked and packed at the peak of freshness and bursting with juicy flavor for a nourishing and convenient fruit snack Bring a pack of fruit cups for a weekend trip with the family, or pack citrus salad cups in a school lunchbox for a tasty school snack Del Monte Citrus Salad is made from sun-sweetened citrus that is grown in nutrient-rich soils and packed in light syrup to ensure premium quality & taste Del Monte Citrus Salad is the perfect balance of sweet and tart ideal for breakfast, salads, smoothies and snacking', 'Del Monte', 'https://i5.walmartimages.com/asr/c0508bd7-87a8-49ac-aacc-e798e42d34d3.6bc73e42d4da8a29766e4d8bd24f47ca.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0508bd7-87a8-49ac-aacc-e798e42d34d3.6bc73e42d4da8a29766e4d8bd24f47ca.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0508bd7-87a8-49ac-aacc-e798e42d34d3.6bc73e42d4da8a29766e4d8bd24f47ca.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (973521345, 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094334492', 'Fresh Chilean Grown Yellow Nectarines, 1 Lb.', 'Fresh Chilean Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (974450724, 'Fresh Cut In-Store Half Pineapple', 1.68, '262966000009', 'This Fresh Cut In-Store Half Pineapple is a sweet and juicy delight, conveniently prepped for immediate enjoyment. This tropical treat is not just mouth-wateringly tasty, but it\'s also cut in half to save you time. It\'s a ready-to-eat solution, perfect for smoothies, salads, or as a standalone snack. This product saves you the hassle of slicing and dicing, making it a must-have addition to your shopping list for a healthy, hassle-free lifestyle. So why wait? Relish the exotic, tropical goodness of this Fresh Cut In-Store Half Pineapple today.', 'Fresh Cut In-Store Half Pineapple Freshly cut in-store to ensure maximum freshness and quality Ideal for smoothies, salads, or a standalone snack Offers mouth-watering taste and tropical delight with every bite Perfect solution for a quick, healthy snack without the prep time', 'Fresh Produce', 'https://i5.walmartimages.com/asr/f9f0b931-26c4-4af2-ba3a-cd755114750b.8ce70467e8b359e1e29b85e10f401a5d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f9f0b931-26c4-4af2-ba3a-cd755114750b.8ce70467e8b359e1e29b85e10f401a5d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f9f0b931-26c4-4af2-ba3a-cd755114750b.8ce70467e8b359e1e29b85e10f401a5d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (975109376, '75pc Orange Navel 8#', 778.5, '405753299143', 'short description is not available', '75pc Orange Navel 8#', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (975574654, 'Limes, 3 ct', 0.98, '072240547270', '3ct Limes', 'Limes, 3 ct', 'Fresh Produce', 'https://i5.walmartimages.com/asr/72f22166-9a07-47e7-827e-4ae1ee763c47_2.1073430cfe73ba808a68584206c1bec1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/72f22166-9a07-47e7-827e-4ae1ee763c47_2.1073430cfe73ba808a68584206c1bec1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/72f22166-9a07-47e7-827e-4ae1ee763c47_2.1073430cfe73ba808a68584206c1bec1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (975748605, 'Mixed Dragon Fruit', 5.98, 'deleted_865151000220', 'short description is not available', 'Mixed Dragon Fruit', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (975757851, 'Marketside Vegetable Stew Medley, 32 oz', 5.98, '681131161558', 'Marketside Vegetable Stew Medley is fresh picked, washed and ready-to-cook for your convenience. Our medley consists of a wholesome blend of red and yellow potatoes, carrots, yellow onions and garlic. This vegetable blend is perfect for stews, casseroles, stir fry, pot roast and more. Follow our delicious pot roast with vegetables recipe located on the back of this packaging. This veggie mix is also a great low calorie source of dietary fiber and potassium. Dinner is made easy with the fresh and wholesome taste of Marketside Vegetable Stew Medley. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Vegetable Stew Medley, 32 oz: Blend of red and yellow potatoes, carrots, yellow onions and garlic Picked fresh for you Washed and ready to cook Net weight 32 oz', 'Marketside', 'https://i5.walmartimages.com/asr/f65e1196-4a53-4e4a-a22d-77201b62d532_2.2a95f544905b06e13a9f535c0305e270.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f65e1196-4a53-4e4a-a22d-77201b62d532_2.2a95f544905b06e13a9f535c0305e270.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f65e1196-4a53-4e4a-a22d-77201b62d532_2.2a95f544905b06e13a9f535c0305e270.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (976165775, 'Marketside Mks Maple Bourbon Chop Salad Kit', 3.98, '681131428965', 'short description is not available', 'Marketside Mks Maple Bourbon Chop Salad Kit', 'Marketside', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (976377689, 'Gala Apples 3 Lb Bag', 3.37, 'deleted_813635010906', '', '', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (976380053, 'Ginger Root 8oz Bag', 2.48, '883616005184', 'Ginger Root, this extremely versatile root is known for its popularity in Asian and Indian cooking. The Chinese, Japanese, and East Indians use Ginger Root in many forms by grating or grinding them. Fresh Ginger is available in two forms; Young Ginger and Mature Ginger. Young Ginger is very tender and has a milder flavor than its mature counterpart, which has a tough skin that preserves a peppery, slightly sweet-hot flesh underneath. Grown in Jamaica, India, Africa, and China, Ginger is a gnarled and knobby root that has a brown, dry skin and a pale yellow to ivory flesh. Ginger Root serves a variety of usages and is utilized to make confections, baked goods, and even certain liqueurs. Ginger is the flavor of popular beverages like Ginger Ale and Ginger Beer. It is delicious in many savory dishes such as soups, curries, and meats and is indispensable in the making of sweets such as Gingerbread, Gingersnaps, and many spice cookies.', 'Ginger Root • Possesses antioxidant activity that counteracts with molecules that can cause damage in the body • Has antimicrobial properties • Prevents nausea and motion sickness • Helps maintain the body’s detoxification process • Incorporating ginger in your meals along with a good diet may positively support brain health', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/8ee6a2ca-60a2-4d08-b6cb-f2eebc5eefcb.334460ebb8576f34c344068ec3675dbc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ee6a2ca-60a2-4d08-b6cb-f2eebc5eefcb.334460ebb8576f34c344068ec3675dbc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8ee6a2ca-60a2-4d08-b6cb-f2eebc5eefcb.334460ebb8576f34c344068ec3675dbc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (976676953, 'Fresh Pink Apples, 3lb Bag', 5.98, '840208101167', 'Treat yourself to the delicious, crisp taste of Pink Lady Apples. These apples are known for their vivid green skin covered in a pinkish blush, crunchy texture, and tart taste with a sweet finish. Enjoy one with breakfast or lunch or as a fresh snack any time of day. with Pink Lady Apples. Super tasty Fresh Produce made with organic ingredients.', 'Fresh Pink Lady Apples, 3 lb Bag: Includes 3 pounds of tart, crisp apples Tart taste with a sweet finish Pair them with sharp cheeses and crackers for a stunning appetizer board Can be enjoyed fresh or cooked into both savory and sweet dishes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e34d9afd-1874-426f-bdc5-04bb6c739dba.4d3ba5359c53f4b430267f0df102be65.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e34d9afd-1874-426f-bdc5-04bb6c739dba.4d3ba5359c53f4b430267f0df102be65.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e34d9afd-1874-426f-bdc5-04bb6c739dba.4d3ba5359c53f4b430267f0df102be65.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (977085149, 'Desert Pride Green Seedles Grape 2lb', 5.97, 'deleted_817050010558', 'short description is not available', 'Desert Pride Green Seedles Grape 2lb', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1dde54a0-163a-4962-816c-bb46af8e32c9.68f5c6e47c0a381b38022e1436cc0deb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1dde54a0-163a-4962-816c-bb46af8e32c9.68f5c6e47c0a381b38022e1436cc0deb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1dde54a0-163a-4962-816c-bb46af8e32c9.68f5c6e47c0a381b38022e1436cc0deb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (977203341, 'Gourmet212 Roasted Red Pepper 6lb 8.06oz (6 Pack), Tip Can, Fresh', 124.95, '191822007060', 'Like roasted bell peppers, roasted red pepper is ready for taking part of your favorite kitchen supplies. As well as roasted red pepper dip cream cheese and roasted red pepper spread are typical recipes, you can also flavor those peppers with a dab of olive oil, some dry mint and shredded walnut or garlic to have choice morsels. Being essential in Turkish cousine, peppers are used in various ways in Turkish dishes. Pepper paste, fried pepper, and roasted peppers are irreplaceable. Our peppers come from ?anakkale where the world?s most succulent peppers and most beautiful red color are from. In Turkish cousines, roasted pepper is loved and used in breakfast. You can use this delicious product by both adding your meals and spreading on a slice of bread, however you like to eat! Still, it?s recommended for you to try roasted red pepper for any meat and chinken dish. This product will surprise you with its dense flavor and you won?t be regret. There are some reasons why you can prefer to buy this product: ?t is chruncy and meaty texture It ?s Halal Certified It?s Kosher Certified It has lightly sweet and charred flavor It is fire roastedIngredients: Red pepper (65%), water, vinegar. You are missing a lot, unless you don?t discover the beautiful taste of Gourmet212?s roasted red peppers.', 'Gourmet212 Roasted Red Pepper 6lb 8.06 oz (6 Pack), Tip Can, Stainless Steel, It\'s Halal & Kosher Certified, Fresh. Like roasted bell peppers, roasted red pepper is ready for taking part in your favorite kitchen supplies. As well as roasted red pepper dip cream cheese and roasted red pepper spread are typical recipes, you can also flavor those peppers with a dab of olive oil, some dry mint, and shredded walnut or garlic to have choice morsels. Being essential in Turkish cuisine, peppers are used in various ways in Turkish dishes. Ingredients: Red pepper (65%), water, vinegar.', 'Gourmet212', 'https://i5.walmartimages.com/asr/28d190e5-c871-4066-8327-f7515a6b2d5f.bae04826054ae6f64cc837aab091228e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28d190e5-c871-4066-8327-f7515a6b2d5f.bae04826054ae6f64cc837aab091228e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/28d190e5-c871-4066-8327-f7515a6b2d5f.bae04826054ae6f64cc837aab091228e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (977425328, 'Expert Gardener 1g Grape Cynthiana', 11.84, '015066710954', 'short description is not available', 'Expert Gardener 1g Grape Cynthiana', 'Expert Gardener', 'https://i5.walmartimages.com/asr/d0b5df58-0f3e-4990-83e8-ce89be92176b.5931c628a3f6c2516670b564f3202cdb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d0b5df58-0f3e-4990-83e8-ce89be92176b.5931c628a3f6c2516670b564f3202cdb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d0b5df58-0f3e-4990-83e8-ce89be92176b.5931c628a3f6c2516670b564f3202cdb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (977686887, 'Yellow Flesh Peaches, per Pound', 1.58, '400094183854', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (977930924, 'Disney Apple Snacker', 2.5, '732313000681', 'short description is not available', 'Disney Apple Snacker', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (978115165, 'Fresh Envy Apples, 3 lb Bag', 5.97, '847473008085', 'Treat yourself to the ultimate apple experience when you bring home Fresh Envy Apples. Whether sliced on top of salad, served on a platter with your favorite cheese or eaten \"au naturel,\" Envy apple makes the experience so much more memorable and remarkable for you and the ones you love. There are people who simply accept what life offers up and then there are those who seek more. Envy shows that you choose to make each moment supremely delightful and that you know the difference between ordinary and extraordinary. Envy is an invitation to enjoy a small moment to savour and raise your expectations of what an apple can be.', 'Envy apples Enjoy the ultimate apple experience Beautifully balanced sweetness Uplifting fresh aroma Delightfully satisfying crunch Adds flavor to a variety of recipes', 'ENVY APPLES', 'https://i5.walmartimages.com/asr/d4ad9bb9-eb63-4199-8b72-e40044f6fca8.7c4956453b5329d6f022849eb68e1fd3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4ad9bb9-eb63-4199-8b72-e40044f6fca8.7c4956453b5329d6f022849eb68e1fd3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4ad9bb9-eb63-4199-8b72-e40044f6fca8.7c4956453b5329d6f022849eb68e1fd3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (978250154, 'Watermelon Seedless', 4.98, '400094544853', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (978913343, 'Marketside Organic Spring Mix & Feta Salad with Chicken, 4.75oz', 3.76, '681131221238', 'When you want to enjoy a quick and easy salad, grab one of these Marketside Organic Spring Mix and Feta Salad with Chicken bowls. The Spring Mix and Feta salad bowl includes organic spring mix, chicken meat, Feta cheese, and sweetened dried cranberries, all ready to be tossed in the included basil balsamic dressing. This Spring Mix and Feta Salad with Chicken is ideal for a light lunch or dinner. The convenient single serving bowl is a good source of protein, calcium, iron, and vitamins A and C. The salad is easy to toss in the bowl it comes in., and is an easy favorite to round out any lunch or dinner. Bring home a Marketside Spring Mix and Feta Salad with Chicken tonight.Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Organic Spring Mix and Feta Salad with Chicken, 4.75 oz: Quick and easy salad, ready to toss and eat! Spring mix, chicken meat, Feta cheese, sweetened dried cranberries, and basil balsamic dressing included Ideal for a light lunch or dinner Good source of protein, calcium, iron, and vitamins A and C', 'Marketside', 'https://i5.walmartimages.com/asr/0c9fcc82-7ba5-44c5-97b6-40bb59c54b46_3.27124f4c8eb19d96980db5a947b8fca1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0c9fcc82-7ba5-44c5-97b6-40bb59c54b46_3.27124f4c8eb19d96980db5a947b8fca1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0c9fcc82-7ba5-44c5-97b6-40bb59c54b46_3.27124f4c8eb19d96980db5a947b8fca1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (979258270, 'Boomer Gold Potatoes, 1.5 Lb.', 3.44, 'deleted_629307123344', 'Boomer Gold Potatoes, 1.5 Lb.', 'Potatoes, Boomer GoldU.S. No.1 (3/4 in- 1 5/8 in). Fresh. Straight from the farm. Easy pre-washed. Thin skinned. No peeling required. Nutritious. Fat, gluten and cholesterol free. Good source of potassium. Our signature Creamer potato, the Boomer Gold varietal is coveted for its exquisite combination of delicate golden skin, velvety flesh, and naturally butterfly flavor. We have carefully selected every Boomer Gold for consistent sizing to ensure they all cook quickly and evenly whether roasted, boiled, or microwaved. The virtues of being small. 1.855.516.6075. Facebook. Twitter. This bag is not suitable for microwaving. The Little Potato Company is focused on solely on carefully selecting and growing little potatoes that have outstanding flavors, great texture, and better nutrition. It???s all we do. And we harvest our unique, proprietary potato varieties when they???re mature at their best. You can taste the difference! As a mother and businesswoman. I am pleased to bring these little potatoes to you. My father and I grew on our first crop by acre in 1996, sorting, washing, and bagging our first crop by hand. We remain dedicated to bringing back the original, diverse goodness of little potatoes. Our potatoes will have you proclaiming the virtues of being small! Angela. Co-founder and chief potato champion. Product of USA.', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/ce9f8f8a-bb0d-47e7-8a40-cbf5b1567bf3.dce77155402ac9391575a472df95011b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce9f8f8a-bb0d-47e7-8a40-cbf5b1567bf3.dce77155402ac9391575a472df95011b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ce9f8f8a-bb0d-47e7-8a40-cbf5b1567bf3.dce77155402ac9391575a472df95011b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (979524565, '240pc On Ylw 3# Ca', 465.6, '405531776606', 'short description is not available', '240pc On Ylw 3# Ca', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (979575666, 'California Grown Peaches, per Pound', 1.58, '400094429808', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (979818213, 'Fresh SunGold Kiwis, 1lb, Package', 4.97, '815263014325', 'Zespri Kiwi Fruit is a deliciously tangy and nutritious fruit that\'s non-GMO and straight from New Zealand. This unique fruit is bursting with flavor and is packed with vitamin C, fiber, and antioxidants. Enjoy it as a snack or add it to your favorite smoothies and salads for a healthy boost. With Zespri Kiwi Fruit, you can indulge guilt-free knowing that you\'re getting the best quality product out there.', 'Zespri SunGold Kiwi tastes sweeter-than-green kiwi and has a tropically-sweet flavor. Naturally high in vitamin C, providing 100% of your daily vitamin c needs in just one fruit. Easy to eat, just cut, scoop and enjoy. Non-GMO verified. Ripe kiwi should yield to slight pressure like a peach or avocado. Zespri SunGold Kiwi tastes sweeter as it gets softer. Once ripe, keep in the fridge to maintain freshness. For more information, visit Zespri.com', 'Zespri', 'https://i5.walmartimages.com/asr/0dc0ee7c-2d50-43db-8ff2-569d1ec52b09.dd6e34995ce9e037f3ad9e8c8b8b3458.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0dc0ee7c-2d50-43db-8ff2-569d1ec52b09.dd6e34995ce9e037f3ad9e8c8b8b3458.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0dc0ee7c-2d50-43db-8ff2-569d1ec52b09.dd6e34995ce9e037f3ad9e8c8b8b3458.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (980198993, 'Watermelon Seedless', 4.98, '405504888176', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (980657016, 'Fresh Green Beans', 1.68, '881979000068', 'short description is not available', 'Fresh Green Beans', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/7ba597aa-c9c5-44a7-9ba1-b9530ca28fb3_3.3abd1afc930af0dd5611b85d82ac54d2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7ba597aa-c9c5-44a7-9ba1-b9530ca28fb3_3.3abd1afc930af0dd5611b85d82ac54d2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7ba597aa-c9c5-44a7-9ba1-b9530ca28fb3_3.3abd1afc930af0dd5611b85d82ac54d2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (980884115, 'Bowery Sweet & Spicy, 4.5oz, Locally Grown with Zero Pesticides', 2.98, '851536007205', 'Bowery\'s locally grown and pesticide-free Sweet & Spicy mix features oakleaf, butterhead, and mustard greens for a spicier finish. Since 2017, Bowery Farming has been growing the purest produce possible locally in New Jersey. Our indoor farms provide the ideal growing environment for a year-round assortment of pesticide free and non-GMO leafy greens & herbs. We are 100x more productive on the same footprint of land as traditional agriculture and use 95% less water. Bowery only distributes locally, ensuring our greens are delivered within just a few days of harvest.', 'Bowery Sweet & Spicy, 4.5oz, Locally Grown with Zero Pesticides: Locally Grown Zero Pesticides Non-GMO Verified No Need to Wash Grown Indoors', 'Bowery Farming', 'https://i5.walmartimages.com/asr/7b206ea5-8e2c-4414-a553-29f55283b605_2.92e361a7254da48179895558b442b48b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7b206ea5-8e2c-4414-a553-29f55283b605_2.92e361a7254da48179895558b442b48b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7b206ea5-8e2c-4414-a553-29f55283b605_2.92e361a7254da48179895558b442b48b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (980992721, 'CHERRY TOMATO', 2.98, '751666245457', 'CHERRY TOMATO', '', 'GARDEN RIPE', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (981040058, 'Freshness Guaranteed Fruit Cup To Go Summer Blend', 2.28, '263029000004', 'short description is not available', 'Freshness Guaranteed Fruit Cup To Go Summer Blend', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (981351050, 'Kiku Apples 3 Lb Bag', 3.42, '847473005725', 'short description is not available', 'Kiku Apples 3 Lb Bag', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (981555926, 'Marketside Veggies with Ranch Dip, 6 oz, Fresh', 2.5, '681131220934', 'Marketside Veggies Snack Pack comes with a delicious medley of baby carrots, broccoli florets, red grape tomatoes and ranch dip. This snack pack makes it easy to enjoy a healthy snack or light meal anywhere you go. It is perfect for snacking at home, in the office or on the go. It offers nutritional benefits as it is a good source of dietary fiber and potassium. This snack is pre-sliced, washed and ready to eat for your convenience. Enjoy a healthy and refreshing snack with the wholesome taste of Marketside Veggies with Ranch Dip. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Veggies with Ranch Dip, 6 oz, Fresh Includes baby carrots, broccoli florets, red grape tomatoes and ranch dip Good source of dietary fiber Washed and ready to eat Healthy snacking on the go', 'Marketside', 'https://i5.walmartimages.com/asr/3605c13d-747f-4c90-9458-7e0d88155cec_1.4e7d364ec1c75315c1eb30658f88394d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3605c13d-747f-4c90-9458-7e0d88155cec_1.4e7d364ec1c75315c1eb30658f88394d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3605c13d-747f-4c90-9458-7e0d88155cec_1.4e7d364ec1c75315c1eb30658f88394d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (981650541, 'Fresh Multi Color Grapes, 3 Lb', 4.54, '850414002998', 'short description is not available', 'Fresh Multi Color Grapes, 3 Lb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (981713552, 'Organic Butternut Squash Spirals', 3.98, '852287006578', 'short description is not available', 'Organic Butternut Squash Spirals', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (981923194, 'Fresh Navel Oranges, 4 lb Bag', 4.97, '811857021052', 'Fresh Navel Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with a thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 4 lb package, these Fresh Navel Oranges are great for the entire family.', 'Fresh Navel Oranges, 4 lb Bag A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'Unbranded', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (982649277, 'Fresh Delicata Squash, Each', 0.97, '000000004763', 'Create something wholesome and delicious with Fresh Delicata Squash. These versatile vegetables can be used to make savory sides or sweet treats. Try them dipped in batter and fried for a comforting side or, for a healthier option, you can make a filling squash and chicken chowder, or roast them in the oven stuffed with ground turkey. If you\'re looking for something sweet, you can use squash to make a zesty lemon squash bread, a creamy squash custard pie, or even a squash chocolate loaf. Use your imagination to create something amazing and tasty with this squash. The mouthwatering possibilities are endless with this hearty vegetable. Add something amazing to your meals with Fresh Delicata Squash.', 'Fresh Delicata Squash, Each Wholesome and delicious Ideal ingredient for a variety of dishes Make fried squash, a fresh squash salad, or a hearty autumn squash soup Use to make lemon squash bread and squash custard pie Versatile and hearty', 'Produce', 'https://i5.walmartimages.com/asr/f197139f-5a10-4d75-91fb-bb2b00b05809.a7c9660c98a324bb4e87bedf500d233a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f197139f-5a10-4d75-91fb-bb2b00b05809.a7c9660c98a324bb4e87bedf500d233a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f197139f-5a10-4d75-91fb-bb2b00b05809.a7c9660c98a324bb4e87bedf500d233a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (983420035, 'Fresh Grown Yellow Nectarines, 1 Lb.', 1.78, 'deleted_400094357835', 'Fresh Grown Yellow Nectarines, 1 Lb.', 'Fresh Grown Yellow Nectarines', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (983480331, 'Earthbound Farms Fresh Organic Green Beans, 12 oz', 3.77, '032601952815', 'Ready to eat or cook, Earthbound Farms Organic Green Beans are deliciously crispy and organic. These packaged green beans are washed and prepped, ready to be tossed into action in your steamer, saute pan, wok, or casserole. With 30 calories and loads of nutrients per one cup serving, you can have a healthy side dish of fresh produce on the table in no time. To cook organic green beans, you can steam them, saute them in butter or oil, or even toss them in an instant pot very quickly. They are firm enough to stand up well in casseroles (the age-old green bean casserole is a prime example), but they can also be added to Pasta Primavera sauce, minestrone soup, and rice-based casseroles. Cook up something delicious with 12-ounce Earthbound Farms Organic Green Beans.', 'One 12-ounce package of Earthbound Farms Fresh Organic Green Beans contains 4 servings Ready to eat on the go Recipe-ready vegetables Washed and ready to enjoy Fresh organic snack Good source of Vitamin K', 'Earthbound Farm', 'https://i5.walmartimages.com/asr/b529a9c7-2cb9-4611-850d-ab87ada412d8.121f62551a5accaac3c80606ed9ed27f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b529a9c7-2cb9-4611-850d-ab87ada412d8.121f62551a5accaac3c80606ed9ed27f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b529a9c7-2cb9-4611-850d-ab87ada412d8.121f62551a5accaac3c80606ed9ed27f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (983615349, 'Dried Guajillo Chile 8 oz', 3.98, '712810008045', 'Packaged Guajillo Chili Dried 8oz', 'Dried Guajillo Chile 8 Oz', 'Miravalle', 'https://i5.walmartimages.com/asr/27e8796f-62cc-4d88-be14-444698f056a0_1.34efd3bb6e6c09acb0cd437892d5b3cc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/27e8796f-62cc-4d88-be14-444698f056a0_1.34efd3bb6e6c09acb0cd437892d5b3cc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/27e8796f-62cc-4d88-be14-444698f056a0_1.34efd3bb6e6c09acb0cd437892d5b3cc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (984046333, 'Watermelon Seedless', 4.98, '405505522321', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (984254998, 'Yellow Onions 3 Lb Bag', 2.94, 'deleted_857514004006', 'short description is not available', 'Yellow Onions 3 Lb Bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (984391798, 'Valencia Oranges, 1 Each', 0.77, 'deleted_845963000014', 'Valencia Oranges, 1 Each', 'Valencia Oranges', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (984878479, 'California Grown Peaches, per Pound', 1.58, '400094511381', 'California Grown Peaches, per Pound', 'Fresh California Grown Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (985429713, 'Fresh Candy Apple Without Nuts, Each', 0.98, '034986916277', 'Indulge in the timeless pairing of nuts and sweet with our Candy Caramel Fresh Apple with Nuts. This classic dessert is perfect for anyone who loves a little bit of crunch with their sweet treats. We start with a crisp and juicy apple and dip it into a soft, gooey, and delicious red candy caramel coating. Then, we generously sprinkle on a blend of roasted and chopped nuts, adding the perfect amount of crunch to every bite. Our Candy Caramel Apple with Nuts is not only a delicious treat, but also an ideal party supply that can add a touch of fun and entertain your guests. The combination of candied caramel and nuts has been thrilling customers for years, and continues to be a popular choice for those who want to indulge in something sweet and satisfying. So go ahead and treat yourself to a little bit of sweetness with our Candy Caramel Apple with Nuts, and savor the perfect balance of soft, crunchy, and sweet flavors in every bite.', 'Candy Apple, 1 Pack Crunch Topping The Red Candy Caramel Apple with Crunch is covered with soft, gooey, and delicious Red Candy Caramel. This Caramel brings an ever so slightly candied twist to a traditional fresh Apple, but is just as soft and easy to eat! The Crunch is a proprietary sweet, slightly sweetened cereal based coating that does not contain nuts. Combined with a small batch candied caramel recipe, this timeless pairing of crunch and sweet has been thrilling customers, and frustrating competitors ever since.', 'Unbranded', 'https://i5.walmartimages.com/asr/6a0fd4ac-35b6-4f69-b893-38ddce327fbe.8f87e62639eaabf635c0b7ff63bd24e4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a0fd4ac-35b6-4f69-b893-38ddce327fbe.8f87e62639eaabf635c0b7ff63bd24e4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6a0fd4ac-35b6-4f69-b893-38ddce327fbe.8f87e62639eaabf635c0b7ff63bd24e4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (986058341, 'Gala Apples 3 Lb Bag', 3.28, 'deleted_859125002570', 'short description is not available', 'Gala Apples 3 Lb Bag', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (986473836, 'Fresh Green Seedless Grapes, 1.5 Lb', 4.48, '095829210730', 'Seedless Green Grapes, 24 Oz.', 'Fresh Green Seedless Grapes, 1.5 Lb', 'Fresh Produce', 'https://i5.walmartimages.com/asr/63e94312-19b8-4874-9e43-518a58288cee.7e323d21847755a8a1b7fe3f7ff8dad1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/63e94312-19b8-4874-9e43-518a58288cee.7e323d21847755a8a1b7fe3f7ff8dad1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/63e94312-19b8-4874-9e43-518a58288cee.7e323d21847755a8a1b7fe3f7ff8dad1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (986621227, 'Lightly Seasoned Jackfruit', 4.77, '859806003292', 'Young organic jackfruit lightly seasoned ready to eat or add in your favorite dish', 'Jackfruit, Lightly Seasoned Ready to eat or add to your favorite dish. Real-life chopped jackfruit. Use in your favorite dishes. Jack of all foods. Know Jack. Jackfruit [Jak-Froot]: A delicious miracle food, packed full of fiber, low in calories and good any darn time you\'re hungry. King of (The Jungle) Versatility: You can eat it like a meat, veggie or fruit. Hugest Tree-Borne Fruit: Grows to a whopping 100 lbs! All for the Farmers: Straight-from-farm supply chains that put $ back in farmers\' pockets. We\'re About Making Things Better: Good eats; farmers\' lives; our footprint. Take a peek and see what\'s inside! USDA organic. Certified Organic by Ecocert India. Gluten free. Soy free. Vegan. Non GMO Project verified. nongmoproject.org. Excellent source of fiber. Unearth all the wonder of this delicious, jack of all foods at www.TheJackFruitCompany.com. Facebook. Instagram. Twitter. Pinterest. LinkedIn. Product of India.', 'The Jackfruit Company', 'https://i5.walmartimages.com/asr/2c58eb41-9a6f-4905-8c2e-b90f1b9b6042.f1f152f18ef4c0814e9f24e522a1d47f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2c58eb41-9a6f-4905-8c2e-b90f1b9b6042.f1f152f18ef4c0814e9f24e522a1d47f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2c58eb41-9a6f-4905-8c2e-b90f1b9b6042.f1f152f18ef4c0814e9f24e522a1d47f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (986985619, 'Yellow Flesh Peaches, per Pound', 1.58, '400094342640', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (987049362, 'Cauliflower', 2.74, 'deleted_073150129419', 'short description is not available', 'Cauliflower', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/3a5c8c12-4743-477d-894f-bec416048e55_1.5d63fc6518c9cfe44cb50c0048481915.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3a5c8c12-4743-477d-894f-bec416048e55_1.5d63fc6518c9cfe44cb50c0048481915.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3a5c8c12-4743-477d-894f-bec416048e55_1.5d63fc6518c9cfe44cb50c0048481915.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (987223215, 'Fingerling Potatoes, 1.5 Lb.', 3.47, '605806003035', 'Our European style fingerling potato is a small, oblong gourmet potato that is a delicious addition to any meal. A great way to add a touch of gourmet to your diet!', 'Green Giant Fresh Vegetable Blend Mixed fingerling Potato BagFresh Vegetable And Herb', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (987235687, 'Idared Apples 3 Lb Bag', 3.94, '033383085500', 'short description is not available', 'Apples, Michigan, Ida Red Great Lakes, great flavors. Tastes both tangy and tart. Eat fresh or use in cooking. Flesh is white, crisp and juicy. Texture holds up well when baked. Apples are fat free, cholesterol-free & sodium-free! US Extra Fancy 2-1/2 inch min. Apples have been coated with a food grade vegetable or food grade LAC-resin wax. Produce of USA.', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (987238675, 'Fresh Clementines, 2 lb Bag', 5.78, 'deleted_810343021200', 'Enjoy the juicy goodness of citrus when you eat a Fresh Clementine. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, clementines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, clementines are now available year-round in most markets. Clementines are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the mandarins hang out in a bowl on your counter or table to breathe. Compact and portable, clementines are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious Fresh Clementines on hand for an easy, healthy treat.', 'Delicious, sweet, juicy citrus Pleasing sweet-tart flavor Easy to peel and segment Excellent source of vitamin C, potassium, and folic acid For maximum flavor, do not refrigerate Typically seedless You\'ll have plenty for everyone with this 5-pound bag', 'Fresh Produce', 'https://i5.walmartimages.com/asr/5239bd74-c85d-4d08-b8da-c3bc7ef938c8.52a18c9d52147dd9c6402004a243dddd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5239bd74-c85d-4d08-b8da-c3bc7ef938c8.52a18c9d52147dd9c6402004a243dddd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5239bd74-c85d-4d08-b8da-c3bc7ef938c8.52a18c9d52147dd9c6402004a243dddd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (987484376, 'Fresh Farms Better Crunch Lettuce, 12 oz', 2.98, '716519002106', 'Fresh Farms Better Crunch Lettuce is a premium sweet and extra crisp lettuce. It combines the crisp and crunchy bite of iceberg lettuce with the shape, color and nutritional value of a Cos lettuce. This package includes individual leaves that are washed and ready to eat. Use it as the base for your favorite salad, create a delicious lettuce wrap, or top sandwiches and burgers. But it doesn’t stop there! This lettuce is also perfect for grilling and creating lettuce wedges. The possibilities are endless with Fresh Farms Better Crunch Lettuce', 'Premium sweet and extra crisp lettuce Combines the crisp and crunchy bite of iceberg lettuce with the shape, color and nutritional value of a Cos lettuce Includes individual leaves that are washed and ready to eat Great for sandwiches, salads, wedges, wraps, and grilling', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1b341891-9051-4e1b-b008-21b7a0e6563b.9dcb6b23678fea8aa031d96ed3682d00.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b341891-9051-4e1b-b008-21b7a0e6563b.9dcb6b23678fea8aa031d96ed3682d00.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b341891-9051-4e1b-b008-21b7a0e6563b.9dcb6b23678fea8aa031d96ed3682d00.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (987536645, 'Tomato on the Vine, Bag', 1.98, 'deleted_768981111114', 'Keep your recipes simple and classic with fresh tomatoes on the vine. With their vibrant red color, firm and juicy flesh, and unmistakably delicious flavor, this fresh produce item is sure to impress more than just your taste buds. You can slice them up to garnish a sandwich or burger for added flavor and texture, dice them up to create a pizza or pasta topping, crush them up to make a decadent bruschetta or sauce, or finely blend them to create your own personalized salsa. The list is endless! Plus, they come right to your kitchen still on the vine that they grew on, meaning that their mouthwatering taste and freshness will be long-lasting for your culinary convenience. Stock up on Walmart\'s Tomatoes On The Vine and keep your dishes looking great and tasting equally as excellent.', 'Tomato on the Vine, Bag: Wholesome, versatile, and delicious Ideal ingredient for a variety of dishes Make a zesty tomato sauce to go along with your favorite pasta Enjoy on their own as a nutritious snack Make a flavorful salsa or add some pop to your guacamole', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1397cd52-8636-48d7-90a7-3c15d4c3967c.7544db07683e1eed49dbd813de13e291.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (987767825, 'Fieldpack Unbranded Organic Romaine Hearts', 4.52, 'deleted_740695900017', 'short description is not available', 'Fieldpack Unbranded Organic Romaine Hearts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (988059415, '180pc Pto Rst 10# Sc', 1074.6, '400094858318', 'short description is not available', '180pc Pto Rst 10# Sc', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (988486534, 'AVO BBAG 10/5 48 MXMD', 3.48, 'deleted_698539051480', 'Avocados aren’t just great-tasting fresh produce, but they are a nutrient-dense food enjoyed around the world. Because of the creamy texture and mild flavor of Hass avocados, they are a versatile ingredient that can be used in many different types of recipes and dishes. Not only are our jumbo avocado a great ingredient to use in numerous ways, but it is also a healthy food that contributes unsaturated “good” fats and almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9. Jumbo ripe avocados will have dark green to nearly black skin color, a bumpy skin texture and should yield to gentle pressure without leaving indentations or feeling mushy. Avocados with a slightly bumpy texture should be ripe in 1 to 2 days. They will also be somewhat firm and have a dark green and black speckled color. You’ll be ready to enjoy tasty avocados on their own or as part of a salad, fresh guacamole, taco, burrito or avocado toast. The possibilities are deliciously endless.', 'Merchandise', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (988961974, '200pc Pto Ylw/red 5#', 1074, '405536422201', 'short description is not available', '200pc Pto Ylw/red 5#', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (989227041, 'Kale Greens', 1.48, 'deleted_680894652204', 'short description is not available', 'Kale Greens', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (989601315, 'Corn Husks / Hojas Para Tamal, 7 oz', 8.88, '769176001210', 'Corn husks are thin, papery, and have a fibrous texture, also known as hojas de maíz, are a traditional and important ingredient used for preparing many dishes. They are most commonly used to make tamales, a popular dish made of corn masa dough filled with various meats, vegetables, or cheese, then wrapped in a corn husk and steamed. They can be used to wrap and steam food, imparting a subtle corn flavor and aroma. They are also an excellent natural alternative to aluminum foil or parchment paper for wrapping food for grilling or baking. Desing your own fresh dishes ideas!', 'Elevate your culinary skills by using Corn Husks (hojas de maíz) to create authentic tamales, with the added bonus of a subtle corn flavor and aroma Choose an eco-friendly and natural alternative to aluminum foil or parchment paper by using Corn Husks to wrap and steam your favorite dishes Enjoy versatile Corn Husks for grilling or baking, as they not only provide a unique presentation but also keep your food moist and flavorful.', 'Generic', 'https://i5.walmartimages.com/asr/10aa584b-8545-41c0-8dac-f70d7f572aa4.75e28b6a5b2d79e987fa46c953556c40.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/10aa584b-8545-41c0-8dac-f70d7f572aa4.75e28b6a5b2d79e987fa46c953556c40.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/10aa584b-8545-41c0-8dac-f70d7f572aa4.75e28b6a5b2d79e987fa46c953556c40.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (989683053, 'Freshness Guaranteed Watermelon 16 Oz', 4.93, 'deleted_681131036665', 'short description is not available', 'Freshness Guaranteed Watermelon 16 Oz', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (990409869, '63pc Mix Guacamole', 73, '405572084753', 'short description is not available', '63pc Mix Guacamole', '', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (990490483, 'Fresh Large Hass Avocado Bag, 3- 4 Count', 5.52, '', 'Avocados aren’t just great-tasting fresh produce items, but they are a nutrient-dense fruit that can be enjoyed throughout the year. Hass avocados are a versatile ingredient with a creamy texture and mild flavor that can be used in many different types of recipes and dishes that are perfect for enjoying at barbecues and outdoor gatherings with friends and family during the summer. Enjoy Large avocados in countless ways that will make those barbecues and gatherings with family and friends even more exciting. Use avocados in flavorful recipes that everybody can share and enjoy while being together outside. Try avocados in individual Mexican food items like tacos or burritos, as part of appetizers like avocado crostini, or in a fresh guacamole or avocado dip so everybody can dip tortilla chips into something delicious. The possibilities are deliciously endless if you need additional food options for barbecues. Not only is a Large avocado a great ingredient to use in numerous ways, but it is also a healthy food that contributes unsaturated “good” fats and almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9. A Large ripe avocado will have a dark green to nearly black skin color, a bumpy skin texture and should yield to gentle pressure without leaving indentations or feeling mushy. Avocados with a slightly bumpy texture should be ripe in 1 to 2 days. They will also be somewhat firm and have a dark green and black speckled color. Once you’ve selected the perfect bag of avocados, you’ll be ready to enjoy all kinds of different healthy foods and recipes for the next time you’re enjoying an outdoor gathering with friends and families.', 'Bag of 3 to 4 Large Hass Avocados Fresh fruit with a creamy texture and mild flavor Fresh avocados are great for using in tacos, burritos, appetizers, avocado dip and fresh guacamole so that you have delicious food to share and enjoy during barbecues and the summer months A cholesterol free fruit that contains almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9 Large hass avocados are the lowest sugar fruit and provide unsaturated “good fats” that help absorb Vitamin A, Vitamin D, Vitamin K and Vitamin E Large ripe avocados will have dark green to nearly black skin color, a bumpy texture and should yield to gentle pressure without leaving indentations', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (990655113, 'Fresh Whole Cocktail Tomato, 1 lb Package', 2.98, 'deleted_751666651050', 'Holding the ideal balance of sweetness and acidity, it\'s easy to see why Fresh Whole Cocktail Tomatoes are called the tomato lover\'s tomato. Cocktail tomatoes are small, making them an ideal choice for appetizers to pair with your everyday meals and for when you\'re entertaining guests. You can combine these tasty little tomatoes with fresh mozzarella and basil drizzled with olive oil or slice them up and add them to a freshly tossed salad. If you\'re feeling something classic, you can always cut one up to add that fresh tomato taste to a sandwich or dice up a few to make a delightful pizza topping. Be sure to add Fresh Whole Cocktail Tomatoes to your inventory of ingredients today.', 'Fresh Whole Cocktail Tomato, 1 lb Package The tomato lover\'s tomato Small size is great for salads and appetizers Ideal ingredient for a variety of dishes Greenhouse-grown and vine-ripened Pesticide and herbicide free 16-ounce package of cocktail tomatoes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e9cd5b61-4764-440a-824f-27c48ab73adb.9d45497f656a74cee90bea61ec675494.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (991156743, 'Simply Fresh Salad -sweet Kale Superfood', 3.98, '851125002529', 'short description is not available', 'Simply Fresh Salad -sweet Kale Superfood', 'Simply Fresh', 'https://i5.walmartimages.com/asr/b8a59882-aa2e-41ba-a2cd-95d0f6e60a1d.fc37e4f5b86e03c11efaf860e1f34857.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b8a59882-aa2e-41ba-a2cd-95d0f6e60a1d.fc37e4f5b86e03c11efaf860e1f34857.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b8a59882-aa2e-41ba-a2cd-95d0f6e60a1d.fc37e4f5b86e03c11efaf860e1f34857.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (991281730, 'Watermelon Seedless', 4.98, '405503754168', 'short description is not available', 'Watermelon Seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (991328660, '200pc Pto Rst 5# Rpe', 648, '405513948915', 'short description is not available', '200pc Pto Rst 5# Rpe', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (991330783, 'Marketside Pb/jam/crk/crt/grp/choc Candy', 2.98, '859216007262', 'short description is not available', 'Marketside Pb/jam/crk/crt/grp/choc Candy', 'Marketside', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (991777437, 'Freshness Guaranteed Fresh Black Seedless Grapes', 1.88, '', 'short description is not available', 'Freshness Guaranteed Fresh Black Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (992056139, '500lb Cabbage Green', 340, '405787755493', 'short description is not available', '500lb Cabbage Green', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (992082640, 'Saturn Peach, Each', 4.6, 'deleted_898429002596', 'short description is not available', 'Fresh California Grown Saturn Peaches', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ec9062fe-a556-49d2-895f-ee4ea3ba7410.3620454ae412399e02bd262f8cc3b7da.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec9062fe-a556-49d2-895f-ee4ea3ba7410.3620454ae412399e02bd262f8cc3b7da.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec9062fe-a556-49d2-895f-ee4ea3ba7410.3620454ae412399e02bd262f8cc3b7da.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (992735174, 'Baby Spring Mix Tender Baby Lettuce and Greens, 11 oz', 3.98, '071279275031', 'Our Spring Mix contains carefully selected tender baby lettuces and greens, picked when the tiny leaves are perfect and whole. Our Spring Mix is not only flavorful, but also quite beautiful.', 'Thoroughly Washed Ready to Eat Non-GMO', 'Unbranded', 'https://i5.walmartimages.com/asr/ceb70df1-9f56-439d-84ab-0e947c47d624.0654e52b2daf9efe0ddd90e5b6ee7293.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ceb70df1-9f56-439d-84ab-0e947c47d624.0654e52b2daf9efe0ddd90e5b6ee7293.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ceb70df1-9f56-439d-84ab-0e947c47d624.0654e52b2daf9efe0ddd90e5b6ee7293.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (993017637, 'Cherry on the Vine Tomato, 12 oz Package', 4.48, '689259004931', 'Fresh Cherry on the Vine Tomatoes are the perfect cooking tomato. Because of their notable flavor and thicker skin, they are a versatile tomato option that\'s fit for grilling, sauteing, roasting, or baking. Their small size also makes them a quick and simple addition to a fresh salad as well as an excellent finger food for whenever you\'re in the mood for a light snack. Packed with nutrients, cherry on the vine tomatoes are a deliciously healthy ingredient that adds both vibrant color and mouthwatering flavor to any recipe. For the best flavor and freshness, store these tomatoes at room temperature on your kitchen counter. Make your next meal a marvelous one with Cherry on the vine Tomatoes from Walmart.', 'Cherry on the Vine Tomato, 12 oz Package: Wholesome, versatile, and delicious Sweet, juicy flavor in each bite Ideal ingredient for a variety of dishes Perfect for salads, pasta salads, flatbreads, omelets, and healthy snacking Add to party trays or school lunches Delicious and nutritious Store at room temperature for best results', 'Fresh Produce', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f7fda5-2b5f-4b97-8ebb-30cf97ee6cf9.f29785bf74753d7ebddfe7b674383158.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (994358937, 'GRAPE TOMATOES', 2.89, '040232224751', 'GRAPE TOMATOES', '', '', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (994556747, 'Jumbo White Onions Per Pound', 1.46, 'deleted_813682015220', 'short description is not available', 'Jumbo White Onions Per Pound', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d5bafda3-8e57-4581-a370-fa7b050e82b2_3.4ba13350c80dc0962ef5959a1459a13d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d5bafda3-8e57-4581-a370-fa7b050e82b2_3.4ba13350c80dc0962ef5959a1459a13d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d5bafda3-8e57-4581-a370-fa7b050e82b2_3.4ba13350c80dc0962ef5959a1459a13d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (994669807, 'Smitten Apples, Each', 1.18, '000000036276', 'short description is not available', 'Smitten Apples, Each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/d0bf5153-10f4-49c5-b84d-db5e07ac7f66.045ad0388f3477aad7190dc4e04325ec.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d0bf5153-10f4-49c5-b84d-db5e07ac7f66.045ad0388f3477aad7190dc4e04325ec.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d0bf5153-10f4-49c5-b84d-db5e07ac7f66.045ad0388f3477aad7190dc4e04325ec.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (994757251, 'Fresh Yellow Flesh Peaches, 1 Lb.', 1.58, '400094343975', 'Fresh Yellow Flesh Peaches, 1 Lb.', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (994856734, 'Services Reduced Program Dept 94', 0.01, '251873000004', 'short description is not available', 'Services Reduced Program Dept 94', 'SERVICES', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (994883620, 'Mangoes, 1 Each', 0.88, '', 'Although generally not considered to be the best in terms of sweetness and flavor, it is valued for its very long shelf life and tolerance of handling and transportation with little or no bruising or degradation.', 'Mango', 'Fresh Produce', 'https://i5.walmartimages.com/asr/25dbe438-1516-4e59-8eaa-e6c6ee7ba838_1.dc8921bcca4251acf5b96394d5479554.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25dbe438-1516-4e59-8eaa-e6c6ee7ba838_1.dc8921bcca4251acf5b96394d5479554.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/25dbe438-1516-4e59-8eaa-e6c6ee7ba838_1.dc8921bcca4251acf5b96394d5479554.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (994998279, 'Mango', 0.98, '840437101587', 'Savor the irresistible taste of a fresh Mango. Mangoes are an excellent fruit to add to your breakfast, lunch, dinner, or dessert. For breakfast, you can chop the mango up and add it to yogurt or a smoothie for a sweet treat that\'s sure to get your morning started on a high note. For dessert, you could use a mango to make a refreshing sorbet or put a tropical twist on a cobbler. You can also use it to make creamy milkshakes or delicious juices that everyone is sure to enjoy. The culinary possibilities are endless when you keep your kitchen stocked with fresh Mangoes.', 'Irresistibly sweet and juicy Delicious on its own or in a variety of recipes Make a creamy milkshake or a nutritious juice blend Add to yogurt or a smoothie Use to top your salad for a tropical twist', 'Unbranded', 'https://i5.walmartimages.com/asr/cc54242f-cb87-4a25-9baa-fccaa20f5443.64fa79325ad44a7352dcd3c2a8b477be.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc54242f-cb87-4a25-9baa-fccaa20f5443.64fa79325ad44a7352dcd3c2a8b477be.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc54242f-cb87-4a25-9baa-fccaa20f5443.64fa79325ad44a7352dcd3c2a8b477be.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (995007412, 'Vidalia Onions 3 Lb Bag', 2.98, 'deleted_859555001006', 'short description is not available', 'Vidalia Onions 3 Lb Bag', 'Vidalia', 'https://i5.walmartimages.com/asr/a3650612-8d66-4d67-8022-8681602fdd9f.e04682a725dd79f92951985ea1052310.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a3650612-8d66-4d67-8022-8681602fdd9f.e04682a725dd79f92951985ea1052310.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a3650612-8d66-4d67-8022-8681602fdd9f.e04682a725dd79f92951985ea1052310.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (995451931, 'Grape Multi Pack', 4.88, '030223030201', 'Introducing the Grape Multi Pack, a selection of nature\'s finest grapes in one convenient package. Our carefully curated assortment features a variety of colors and flavors, from juicy reds to sweet greens and plump black grapes. This versatile and nutritious snack is perfect for on-the-go enjoyment, lunchboxes, or as a delightful addition to your favorite recipes. Savor the taste of quality and freshness with the Grape Multi Pack, your go-to source for delicious, premium grapes.', 'Grape Multi Pack Introducing the Whole Grape Multi Pack, a selection of nature\'s finest grapes in one convenient package. Our carefully curated assortment features a variety of colors and flavors, from juicy reds to sweet greens and plump black grapes. This versatile and nutritious snack is perfect for on-the-go enjoyment, lunchboxes, or as a delightful addition to your favorite recipes. Savor the taste of quality and freshness with the Grape Multi Pack, your go-to source for delicious, premium grapes. Made with Organic Ingredients.', 'Unbranded', 'https://i5.walmartimages.com/asr/20a46e7f-7126-4e47-aa4e-e1137289cbcb.79d1170b3b21fc8bf50a33b8d723abee.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20a46e7f-7126-4e47-aa4e-e1137289cbcb.79d1170b3b21fc8bf50a33b8d723abee.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/20a46e7f-7126-4e47-aa4e-e1137289cbcb.79d1170b3b21fc8bf50a33b8d723abee.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (995979925, 'Large Avocado 3 Count Bag', 4.48, '', 'short description is not available', 'Large Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bff80901-b099-4450-9ea6-7505bedb8071.7fcbc0bfea3f5d81022267d85718fbb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (996179527, '75pc Orange Navel 8#', 597.75, '400094336878', 'short description is not available', '75pc Orange Navel 8#', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (996405753, 'Mks Organic Mango', 2.98, '681131428668', 'short description is not available', 'Mks Organic Mango', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (996624213, 'Fuji Apples, 3 lbs Bag', 4.97, '033383087139', 'short description is not available', 'Fuji Apples, 3 lbs', '', 'https://i5.walmartimages.com/asr/3fbe8fa1-8778-4260-886a-1c50feccabe7.6c30f44cf9b32173ddb3a3a5fbfa3497.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3fbe8fa1-8778-4260-886a-1c50feccabe7.6c30f44cf9b32173ddb3a3a5fbfa3497.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3fbe8fa1-8778-4260-886a-1c50feccabe7.6c30f44cf9b32173ddb3a3a5fbfa3497.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (998973891, 'Walmart Produce Pineapple Mango 32 Oz', 7.78, '826766252084', 'short description is not available', 'Walmart Produce Pineapple Mango 32 Oz', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (999977230, 'Fresh Sierra Honey Plums, 1 lb', 4.67, '847081000952', 'Elevate your day with the luscious Sierra Honey Plums, 1 lb. Fruit serves as a nutritious snack and a vital component of a wholesome diet for most individuals. It offers fiber, essential vitamins, and minerals. Sierra Honey Plums are no exception, providing vitamin A and other nutrients. Each bite of these plums is delightfully sweet and delectable. Savor one on its own or incorporate it into salads and various recipes. Honey Plums boast a distinctive flavor and a succulent, yet tender texture. Approximately five to seven plums are included per pound pack. Indulge in the irresistible taste of Sierra Honey Plums.', 'Plums, 1 lb Extra sweet and juicy Late season variety Delicious as a snack Excellent ingredient for salads Approximately 5-7 plums per 1 lb pack', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ddc9d80b-3646-4a02-9f9d-81baea8d086a_1.fe9313b8f7907ee770316dc5dbc5c265.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ddc9d80b-3646-4a02-9f9d-81baea8d086a_1.fe9313b8f7907ee770316dc5dbc5c265.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ddc9d80b-3646-4a02-9f9d-81baea8d086a_1.fe9313b8f7907ee770316dc5dbc5c265.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1022175113, 'Fieldpack Unbranded Large Bagged Oranges', 8.94, '791928110062', 'short description is not available', 'KINGS RIVER CA NVL ORNG SNGL FRT BAG FRESH FRUIT', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/f3f3e895-4270-4239-9054-3aba1b21fbbb.5319a5ab6eb42948ee84db536f8f0c4c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3f3e895-4270-4239-9054-3aba1b21fbbb.5319a5ab6eb42948ee84db536f8f0c4c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f3f3e895-4270-4239-9054-3aba1b21fbbb.5319a5ab6eb42948ee84db536f8f0c4c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1022197352, '1# Bag Keylimes', 2.98, 'deleted_857392008011', 'Fresh bagged keylimes.', '1 lb mesh-bag keylimes', 'FRESHQUITA', 'https://i5.walmartimages.com/asr/a742259a-ece3-4072-b13b-9d4a82af6619.fffdeb1d6b2fd423f54643c42c329e81.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a742259a-ece3-4072-b13b-9d4a82af6619.fffdeb1d6b2fd423f54643c42c329e81.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a742259a-ece3-4072-b13b-9d4a82af6619.fffdeb1d6b2fd423f54643c42c329e81.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1026430265, 'Taylor Farms Berry Blend 14oz', 6.97, '030223038306', 'Taylor Farms Mixed Berries, 14 oz, is a vibrant and refreshing blend of fresh strawberries and blueberries—perfectly packed for snacking, topping, or mixing into your favorite meals. Hand-selected for ripeness and flavor, each berry bursts with natural sweetness and juicy texture. Whether you\'re looking to start your day with a nutritious breakfast or need a light, satisfying afternoon snack, this berry mix delivers delicious versatility and a dose of antioxidants. Add it to yogurt, cereal, smoothies, or simply enjoy it on its own. With no added sugars or preservatives, you’re getting nothing but pure fruit goodness. Strawberries and blueberries are both naturally high in Vitamin C, and the mix is low in calories and fat, making it a health-conscious choice you can feel good about. Conveniently packaged in a resealable plastic container to maintain freshness and easy storage in the fridge. This product contains no major allergens and is Dairy-free.', 'Taylor Farms Mixed Berries Strawberry & Blueberry, 14oz Tray (Fresh) Fresh-cut blend of strawberries and blueberries Naturally high in Vitamin C and low in fat', 'Taylor Farms', 'https://i5.walmartimages.com/asr/a20b278b-05cb-4ce2-8a43-f49bc587edb4.0dad52d373e7f2fbf81ebee43d511af8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a20b278b-05cb-4ce2-8a43-f49bc587edb4.0dad52d373e7f2fbf81ebee43d511af8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a20b278b-05cb-4ce2-8a43-f49bc587edb4.0dad52d373e7f2fbf81ebee43d511af8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1034275712, 'Taylor Farms Pineapple Berry Blend, 16 oz Tray', 4.58, '030223038139', 'Taylor Farms fresh cut pineapple berry blend in Plastic Tray ready to be opened and shared. It includes 16 ounces of fresh sweet pineapple and berries.', 'Taylor Farms Pineapple Berry Blend 16 Oz Sweet, refreshing treat Great for breakfast, lunch, dessert, or when you want a snack Good source of nutrients and serving of fruit Enjoy right out of the container, set out for fruit tray, take it with you for lunch, or savor it as a delicious dessert Share with friends and family or keep for yourself Comes in a re-closable container to help maintain freshness', 'Taylor Farms', 'https://i5.walmartimages.com/asr/c0a8afe1-291d-4846-8444-8e72a7210fc6.6b63608a0a65bfe4521966477c338120.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0a8afe1-291d-4846-8444-8e72a7210fc6.6b63608a0a65bfe4521966477c338120.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c0a8afe1-291d-4846-8444-8e72a7210fc6.6b63608a0a65bfe4521966477c338120.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1036186377, 'Granada Entera', 3.47, '406531576920', 'short description is not available', 'Granada Entera', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1042137375, 'Fresh Valencia Oranges, 1 Each', 0.83, '036515340133', 'Known for their sweet flavor, Valencia Oranges have a thin skin and are typically very juicy. It is the most popular orange for juicing. It\'s juice will remain perfectly sweet even after air exposure. With a balanced sweet-to-tart flavor ratio that carries over to their juice, Valencia Oranges are widely available during the spring and summer months. Use Valencia oranges to make fresh orange juice, or use their flesh, juice, and zest in baked goods, cocktails, sauces, and marinades. Keep some sunshine on hand with Valencia Oranges. Available by the each.', 'Fresh Valencia oranges Thin skin and very juicy Most popular orange for juicing Balanced sweet-to-tart flavor ratio Widely available during the spring and summer months Use their flesh, juice, and zest in baked goods, cocktails, sauces, and marinades', 'Fresh Produce', 'https://i5.walmartimages.com/asr/a6054c7f-7e7b-4de8-9f04-1f87bafa4c3e.76cf34255799375020421060def8bb2e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6054c7f-7e7b-4de8-9f04-1f87bafa4c3e.76cf34255799375020421060def8bb2e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6054c7f-7e7b-4de8-9f04-1f87bafa4c3e.76cf34255799375020421060def8bb2e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1049977058, 'Del Monte No Sugar Added Citrus Salad with Grapefruit and Orange, 52 oz Jar', 8.97, '024000258148', 'Del Monte No Sugar Added Citrus Salad, 52 oz Jar makes it easy to enjoy high quality fruit in minutes. Enjoy the perfect balance of sweet and tart in our citrus medley, which includes Vitamin-C packed red grapefruit, white grapefruit and orange slices with no added sugar. Refreshingly chilled, Del Monte Citrus Salad is picked at the peak of ripeness and hand-cut for your convenience. Picked and packed at the peak of freshness, the jarred fruit slices are ideal as part of a quick lunch snack or as a flavorful addition to fruit cocktail. Each jar is easy to open, reseal, and store for a convenient fruit snack whenever you need delicious fruit on-the-go. Bring wholesome goodness to your family with Del Monte!', 'One 52 oz jar of Del Monte No Sugar Added Citrus Salad Del Monte No Sugar Added Citrus Salad offers a quick and easy way to have a citrus fruit snack in just minutes Made with red grapefruit, white grapefruit and orange slices picked at the peak of freshness and immersed in sweetened water Del Monte No Sugar Added Citrus Salad is ideal for fruit cocktail or salads Bring wholesome goodness to your family with Del Monte No Sugar Added Citrus Salad', 'Del Monte', 'https://i5.walmartimages.com/asr/8a01b7a2-c891-492c-ad94-2734be27b796.0333d5240da848684c19d98af383570d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8a01b7a2-c891-492c-ad94-2734be27b796.0333d5240da848684c19d98af383570d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8a01b7a2-c891-492c-ad94-2734be27b796.0333d5240da848684c19d98af383570d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1061983099, 'OS SEEDLESS GREEN GRAPES 6/3LBS', 55, '066022002378', 'Whether round or oval, red, green, or black, a platter of freshly rinsed grapes offers the perfect opportunity to pluck, pop, and savor. They bring luscious color to charcuterie boards and are the perfect complement to sharp cheeses with their crisp texture and palate-cleansing, sweet taste. Ocean Spray® fresh grapes are passionately grown and hand-picked to come straight from the farm to your family.', 'Whether round or oval, red, green, or black, a platter of freshly rinsed grapes offers the perfect opportunity to pluck, pop, and savor. They bring luscious color to charcuterie boards and are the perfect complement to sharp cheeses with their crisp texture and palate-cleansing, sweet taste. Ocean Spray® fresh grapes are passionately grown and hand-picked to come straight from the farm to your family.', 'Ocean Spray', 'https://i5.walmartimages.com/asr/d97e6cfc-0b5a-4783-af55-6ffbec5f8635.a7d4dcd96bbe69eebdb59a5f3c4d9cf0.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d97e6cfc-0b5a-4783-af55-6ffbec5f8635.a7d4dcd96bbe69eebdb59a5f3c4d9cf0.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d97e6cfc-0b5a-4783-af55-6ffbec5f8635.a7d4dcd96bbe69eebdb59a5f3c4d9cf0.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1064046885, 'Fresh Navel Oranges, 8 lb Bag', 8.94, 'deleted_605049623175', 'Enjoy the juicy goodness of these Large Bagged Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, these Large Bagged Oranges will add flavor to any meal or beverage.', 'A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1064764886, 'Clementines, 3lb Bag', 4.97, '033383103167', 'Enjoy the juicy goodness of citrus when you eat a Clementine. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, clementines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, clementines are now available year-round in most markets. Clementines are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the mandarins hang out in a bowl on your counter or table to breathe. Compact and portable, clementines are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious Clementines on hand for an easy, healthy treat.', 'Delicious, sweet, juicy citrus Pleasing sweet-tart flavor Easy to peel and segment Excellent source of vitamin C, potassium, and folic acid For maximum flavor, do not refrigerate Typically seedless', 'Fresh Produce', 'https://i5.walmartimages.com/asr/33ea1138-975e-47a4-81ff-62d88546df67.419bf6bc44206b42dccd3becbd04f4a4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/33ea1138-975e-47a4-81ff-62d88546df67.419bf6bc44206b42dccd3becbd04f4a4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/33ea1138-975e-47a4-81ff-62d88546df67.419bf6bc44206b42dccd3becbd04f4a4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1086250163, 'Taylor Farms Fresh Ready to Eat Grapes, 10 oz Tray', 3.47, '030223038191', 'Treat yourself to the delicious, juicy flavor of Fresh Red Seedless Grapes. These grapes are bursting with flavor and are completely seedless. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks.', 'Fresh Red Seedless Grapes Seedless grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Great for using in fruit salad Freeze and use as fun ice cubes', 'Taylor Farms', 'https://i5.walmartimages.com/asr/a882a702-0240-474e-a825-0dce31e60512.441b50947b8ae65532bbccb3fdee1258.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a882a702-0240-474e-a825-0dce31e60512.441b50947b8ae65532bbccb3fdee1258.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a882a702-0240-474e-a825-0dce31e60512.441b50947b8ae65532bbccb3fdee1258.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1106481646, 'Welchs Red Delicious Fresh Apple, 3lb Bag', 5.97, '095829211324', 'Treat yourself to the delicious, sweet taste of Red Delicious Apples. These apples are known for their classic sweet flavor with mild acidity and creamy white flesh with low acidity. Crisp and juicy, these apples have higher levels of antioxidants due to the rich, deep red skin. Enjoy one with breakfast or lunch or as a fresh snack any time of day. An excellent snacking or juicing apple, the Red Delicious is an excellent addition to green, fruit, and chopped salads, or an unexpected twist to sandwiches, quesadillas, or burgers. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests', 'Sweet, crisp, and juicy Creamy white flesh with low acidity Excellent snacking apple Higher antioxidants due to the rich, deep red skin Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp, and apple pie', 'Welch\'s', 'https://i5.walmartimages.com/asr/32f0433e-70bd-4ceb-8bd7-28f615589881.b5b83a9a712a0f2a4c09950d9de5e087.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32f0433e-70bd-4ceb-8bd7-28f615589881.b5b83a9a712a0f2a4c09950d9de5e087.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32f0433e-70bd-4ceb-8bd7-28f615589881.b5b83a9a712a0f2a4c09950d9de5e087.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1119801872, 'Aguacate Hass Calibre 48 CAT 1', 0.68, '', 'hass avocado variety of Colombian origin with high quality standards.', 'hass avocado variety of Colombian origin with high quality standards.', 'Aguacate Variedad Hass', 'https://i5.walmartimages.com/asr/5dab0b48-92fd-4b64-9a0e-5de3a17d1305.121e1fb9446d82c719e304d775d8f990.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5dab0b48-92fd-4b64-9a0e-5de3a17d1305.121e1fb9446d82c719e304d775d8f990.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5dab0b48-92fd-4b64-9a0e-5de3a17d1305.121e1fb9446d82c719e304d775d8f990.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1141798970, 'Taylor Farms Fresh Cut Pineapple, 16 oz Tray', 4.97, '030223034124', 'Experience a burst of tropical flavors with these Pineapple Chunks. The pre-cut chunks of ripe pineapple are juicy and sweet to taste and are packed in its own juice. Carry them with you and eat them straight out of the tray any time you want, at home or on-the-go. You can also use them to top desserts and ice creams, in a fruit salad or blend them with milk to make milkshakes. Pineapples are known to have a number of nutrients, and they are especially rich in vitamin C. Add some fresh fruits to your daily menu today.', 'Taylor Farms Pineapple 16 Oz', 'Taylor Farms', 'https://i5.walmartimages.com/asr/a9c50194-fc96-4737-a2b1-d452112fe698.b4959e74794ff38c5c0d8a11040c5a62.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9c50194-fc96-4737-a2b1-d452112fe698.b4959e74794ff38c5c0d8a11040c5a62.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a9c50194-fc96-4737-a2b1-d452112fe698.b4959e74794ff38c5c0d8a11040c5a62.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1162104468, 'Taylor Farms Fresh Cut Watermelon, 10 oz Tray', 2.77, '030223034339', 'Experience a burst of summertime goodness with this delicious Freshness Guaranteed Watermelon. This pre-cut ripe watermelon is juicy, sweet, and refreshing to the taste. In addition, watermelons are a great natural source of vitamins A and C. Carry them with you and eat them straight out of the tray any time you want, at home, or on-the-go. Pair them with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use them as a naturally sweet ingredient in a fruit salad. Add some fresh fruit to your daily menu with this Freshness Guaranteed Watermelon.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Taylor Farms Watermelon 10 Oz', 'Taylor Farms', 'https://i5.walmartimages.com/asr/e3fdb010-55de-48ca-af46-613334b68d93.94b2582af64ae59ab6e0f4720f34dcc1.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3fdb010-55de-48ca-af46-613334b68d93.94b2582af64ae59ab6e0f4720f34dcc1.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e3fdb010-55de-48ca-af46-613334b68d93.94b2582af64ae59ab6e0f4720f34dcc1.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1165865931, 'Fresh Honeycrisp Apple, 2lb', 5.87, '095829211553', 'Treat yourself to the delicious, crisp taste of Honeycrisp Apples. These medium-to-large apples are known for their light green and yellow background covered with a red-orange flush and a strong hint of pink, and a honey-sweet, tart flavor. Enjoy one with breakfast or lunch or as a fresh snack any time of day. Best of all, these delicious apples hold up well when cooked and can be used in both savory and sweet dishes. They can be used for baking, snacking, salads, pairing, or made into a delicious sauce that pairs perfectly with pork. Try incorporating them into soups and compotes or using to make yummy jam or juice. Use them to create apple crisp, pie and strudel for a sweet treat. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Honeycrisp Apples.', 'Fresh, light green and yellow background covered with a red-orange flush and a strong hint of pink Honey-sweet, tart flavor with a sugar hint Cross of Macoun apple and honey gold apple Good for baking and applesauce Can be enjoyed fresh or cooked into both savory and sweet dishes', 'Welch\'s', 'https://i5.walmartimages.com/asr/3321ed9d-e8d0-43e0-9c16-102054998725.88a05ca32f0899ab2ce41addcb7d399c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3321ed9d-e8d0-43e0-9c16-102054998725.88a05ca32f0899ab2ce41addcb7d399c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3321ed9d-e8d0-43e0-9c16-102054998725.88a05ca32f0899ab2ce41addcb7d399c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1168581168, 'Navel Oranges', 0.88, 'deleted_895359002450', 'short description is not available', 'Navels 3107', 'PRODUCE UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1175460573, 'Fresh Strawberries, 8.8 oz Container', 2.08, '854877007378', 'The sweet, juicy flavor of Fresh Strawberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like, vitamin C, dietary fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Strawberries today and savor the delectable flavor.', 'Prior to serving gently wash them and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4be7094f-7907-4580-944d-3cd4c0b2d238.ffcf0a1145778a1e5f7c1cabef12c9fd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4be7094f-7907-4580-944d-3cd4c0b2d238.ffcf0a1145778a1e5f7c1cabef12c9fd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4be7094f-7907-4580-944d-3cd4c0b2d238.ffcf0a1145778a1e5f7c1cabef12c9fd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1184621251, 'Mr Lucky Guayaba Fresca Eco Amigable', 4.47, '614360002019', 'short description is not available', 'Mr Lucky Guayaba Fresca Eco Amigable', 'Mr. Lucky', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1195801994, 'Fresh Grown Pluots 2lb Bag', 4.94, 'deleted_813187011147', 'FMLY TREE FARMS PLMCT SNGL FRT BAG', 'FMLY TREE FARMS PLMCT SNGL FRT BAG FRESH FRUIT', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1202191751, 'Freshness Guaranteed Clementines', 3.97, '717524701251', 'short description is not available', 'Freshness Guaranteed Clementines', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1203128877, 'Taylor Farms Fresh Cut Pineapple, 42 oz Tray', 9.76, '030223037996', 'Experience a burst of tropical flavors with these Pineapple Chunks. The pre-cut chunks of ripe pineapple are juicy and sweet to taste and are packed in its own juice. Carry them with you and eat them straight out of the tray any time you want, at home or on-the-go. You can also use them to top desserts and ice creams, in a fruit salad or blend them with milk to make milkshakes. Pineapples are known to have a number of nutrients, and they are especially rich in vitamin C. Add some fresh fruits to your daily menu today.', 'Taylor Farms Pineapple 42 Oz', 'Taylor Farms', 'https://i5.walmartimages.com/asr/bd3b8d4b-5acc-4548-b768-30a4a859169c.5ca4a345af806ff28ea513b58592aa35.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd3b8d4b-5acc-4548-b768-30a4a859169c.5ca4a345af806ff28ea513b58592aa35.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd3b8d4b-5acc-4548-b768-30a4a859169c.5ca4a345af806ff28ea513b58592aa35.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1210193138, 'Fresh SnapDragon Apples 3lb Bag', 5.97, '860000460200', 'Indulge in the crisp and juicy goodness of SnapDragon Apples with our convenient 3lb bag! Packed with a sweet, snappy taste and a hint of spice, these apples, harvested fresh, promise a delight in every bite. Perfect for snacking, baking, or adding a sweet crunch to your salads. Grab this 3lb bag of SnapDragon Apples and experience the perfect blend of health and taste right at your fingertips. Don\'t miss out, buy now!', 'Exceptional Flavor: SnapDragon Apples boast a unique sweet, snappy taste with a hint of spice, making them perfect for a range of culinary uses. Crisp and Juicy: Known for their exceptionally crisp texture, these apples offer a satisfying crunch and juicy bite every time. Versatile Use: Whether you\'re looking to snack, add a sweet crunch to your salads, sandwich or charcuterie, the SnapDragon apple is a perfect choice.', 'PRODUCE BRANDED', 'https://i5.walmartimages.com/asr/a140c159-e4b0-442a-b830-115d3a56c486.1d9a69561adb0f764a12db4972c42165.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a140c159-e4b0-442a-b830-115d3a56c486.1d9a69561adb0f764a12db4972c42165.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a140c159-e4b0-442a-b830-115d3a56c486.1d9a69561adb0f764a12db4972c42165.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1220602065, 'Freshness Guaranteed Fresh Red Seedless Grapes', 1.78, 'deleted_052901034967', 'short description is not available', 'Freshness Guaranteed Fresh Red Seedless Grapes', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1220781969, 'Freshness Guaranteed Berry Smoothie', 3.97, '717524655066', 'short description is not available', 'Freshness Guaranteed Berry Smoothie', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1221639621, 'Freshness Guaranteed Strawberries & Blueberries 10 Oz', 6.47, 'deleted_717524102072', 'short description is not available', 'Freshness Guaranteed Strawberries & Blueberries 10 Oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1223347497, 'Pomegranate Arils, Ready to Eat Pomegranate Seeds, 4 oz Cup', 4.97, 'deleted_897671002729', 'Pomegranate Arils are the edible fruit from the inside of a Pomegranate. Pomegranates are a Super Food, High in Fiber and are Heart Healthy with no preservatives added.', 'Super Food High in Fiber Heart Healthy Pomegranate Arils 4oz Cups Convenient Plastic Cups filled with Pomegranate Arils, Fresh Cut Pomegranate With breathable film to allow fruit to respire naturally No Preservatives added', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e2b57207-1693-4d82-a338-32175e834b79.8b86da968a128826fc85ac7ea1a271b6.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2b57207-1693-4d82-a338-32175e834b79.8b86da968a128826fc85ac7ea1a271b6.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2b57207-1693-4d82-a338-32175e834b79.8b86da968a128826fc85ac7ea1a271b6.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1234143390, 'GoVerden Classic Guacamole 8oz', 4.43, '850002858358', 'GoVerden Classic Guacamole 8oz is all natural, fresh, and non-GMO certified. So, no artificial ingredients, no preservatives; nothing added that you wouldn\'t use at home. Our love and care for avocados is evident in every bite, taking special care to the selection, harvesting, ripening, and handling of each avocado. Try it today, it actually goes with everything. Nachos? Hamburgers? Chips and Guac? Go natural, go for more, GoVerden.', 'GoVerden Classic Guacamole is as creamy and chunky as you want it to be. GoVerden Classic Guacamole is an all-natural, all-fresh product with non-GMO ingredients, such as Hass Avocado. GoVerden Classic Guacamole is a ready to enjoy, ready to share, ready to eat product.', 'GoVerden', 'https://i5.walmartimages.com/asr/3d4d4354-68a2-41ab-a030-7eccbeda4df7.f52e84bc7df9d2651d0e4da84ccec66e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d4d4354-68a2-41ab-a030-7eccbeda4df7.f52e84bc7df9d2651d0e4da84ccec66e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d4d4354-68a2-41ab-a030-7eccbeda4df7.f52e84bc7df9d2651d0e4da84ccec66e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1245313437, 'Taylor Farms Fresh Cut Pineapple, 10 oz Tray', 3.72, '030223038177', 'Experience a burst of tropical flavors with these Pineapple Chunks. The pre-cut chunks of ripe pineapple are juicy and sweet to taste and are packed in its own juice. Carry them with you and eat them straight out of the tray any time you want, at home or on-the-go. You can also use them to top desserts and ice creams, in a fruit salad or blend them with milk to make milkshakes. Pineapples are known to have a number of nutrients, and they are especially rich in vitamin C. Add some fresh fruits to your daily menu today.', 'Taylor Farms Pineapple 10 Oz', 'Taylor Farms', 'https://i5.walmartimages.com/asr/32d95209-c1e0-4d4e-ae92-414dccc481f9.a38d16c45252568f1512bc60605107a5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32d95209-c1e0-4d4e-ae92-414dccc481f9.a38d16c45252568f1512bc60605107a5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/32d95209-c1e0-4d4e-ae92-414dccc481f9.a38d16c45252568f1512bc60605107a5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1263674646, 'Mandarin 2# Bag', 6.97, 'deleted_858410005142', 'short description is not available', 'Mandarin 2# Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1263871290, 'Del Monte No Sugar Added Red Grapefruit, 52 oz Jar', 8.97, '024000258155', 'Del Monte No Sugar Added Red Grapefruit, 52 oz Jar makes it easy to enjoy high quality fruit in minutes. Red Grapefruit is packed with delicious, ripe grapefruit slices in sweet water for a ready to eat fruit snack you can feel good about. Del Monte No Sugar Added Red Grapefruit offers a good source of Vitamin C, has 50% less sugar and 30% fewer calories than Grapefruit in Extra Light Syrup, making them a convenient, wholesome and ready to eat citrus fruit option for busy nights. Picked and packed at the peak of freshness, peeled and sectioned, and immersed in sweetened water,* the jarred fruit slices are ideal as part of a quick lunch snack or as a flavorful addition to fruit cocktail. Each jar is easy to open, reseal, and store for a convenient fruit snack whenever you need delicious fruit on-the-go. Bring wholesome goodness to your family with Del Monte!', 'One 52 oz jar of Del Monte No Sugar Added Red Grapefruit Del Monte No Sugar Added Red Grapefruit offers a quick and easy way to have a citrus fruit snack in just minutes Made with red grapefruit picked at the peak of freshness and immersed in sweet water Del Monte No Sugar Added Red Grapefruit is ideal for fruit cocktail Bring wholesome goodness to your family with Del Monte No Sugar Added Red Grapefruit', 'Del Monte', 'https://i5.walmartimages.com/asr/a6bfce45-3005-43f1-8803-a2696e67034e.809ef532f8583c5f6056a38c8cb4ecfb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6bfce45-3005-43f1-8803-a2696e67034e.809ef532f8583c5f6056a38c8cb4ecfb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6bfce45-3005-43f1-8803-a2696e67034e.809ef532f8583c5f6056a38c8cb4ecfb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1265941554, 'Fresh Yellow Mango, Bag', 2.88, '853516005270', 'Treat yourself to a burst of tropical goodness when you bring home a bag of Yellow Honey Mangos. Mangoes boast a deliciously sweet fragrance and juicy flavor that is sure to wake up your taste buds. They are packed with over 20 vitamins and minerals including A and C, making them not only scrumptious but also a healthy treat. They can be used for everything from salads and smoothies to fresh salsas and luscious desserts. For the best experience, these mangos should be cut in half, sliced while in the peel and then scooped out. Bring home a bag of Yellow Honey Mangos today.', 'Deliciously fresh, sweet and juicy. Packed with sweet tropical flavor. Makes a healthy snack.', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1267241868, 'Freshness Guaranteed Fresh Pineapple Rings', 5.97, '194346097166', 'Enjoy the sweet, tropical flavor of Freshness Guaranteed Pineapple Rings. These pre-cut chunks are great for breakfast, lunch, dessert, or when you want a snack. Pineapple is a good source of vitamin C, vitamin A and vitamin B6 making them an excellent healthy treat. You can eat the rings right out of the container, infuse them with water and mint for a refreshing drink, use them to make a decadent pineapple upside down cake, or chop them up and make a mouthwatering pineapple salsa with jalapenos, tomatoes, and red onion. There’s plenty for sharing with friends and family or keeping it for yourself, and it comes in a reclosable container to help maintain freshness. Bring home Freshness Guaranteed Pineapple Rings today for a refreshing, healthy treat. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Fresh Pineapple Rings Sweet, refreshing treat Great for breakfast, lunch, dessert, or when you want a snack Good source of vitamin C, vitamin A, and vitamin B6 Enjoy right out of the container, infuse with water and mint, or mix with jalapenos, tomatoes, and red onion for salsa Share with friends and family or keep for yourself Comes in a re-closable container to help maintain freshness', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1a5299b2-5911-4f32-ac18-29f48e9aab82.0527a7cfaffd130c0d22468bb1351534.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a5299b2-5911-4f32-ac18-29f48e9aab82.0527a7cfaffd130c0d22468bb1351534.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1a5299b2-5911-4f32-ac18-29f48e9aab82.0527a7cfaffd130c0d22468bb1351534.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1268556456, 'Fresh Candy Hearts Grapes, 1 Lb', 3.48, 'deleted_816426013223', 'short description is not available', 'Fresh Candy Hearts Grapes, 1 Lb', 'Unbranded', 'https://i5.walmartimages.com/asr/cb6817d9-7eef-4c14-9855-5767ba5ee227.35c45745998497af1a10efbec8397f83.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb6817d9-7eef-4c14-9855-5767ba5ee227.35c45745998497af1a10efbec8397f83.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb6817d9-7eef-4c14-9855-5767ba5ee227.35c45745998497af1a10efbec8397f83.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1297483964, 'Fresh Grapefruit, 5 lb Bag', 5.98, 'deleted_895359002917', 'Sun-kissed by a tropical climate and nourished from sandy soils, a grapefruit that is so juicy, so tasty and so healthy to start your day. Sweet with a splash of tang, affectionados love its sophisticated yet simple taste; amateurs are surprised by its fun and sweet flavor. Grown with the utmost respect of our land and hand picked by our farmers, these grapefruit bring a smile and love to the doorstep.', 'Fresh red grapefruit is great for both savory and sweet dishes Enjoy it for breakfast, lunch, dinner, or dessert Enjoy half a grapefruit sprinkled with sugar in the morning Slice it up and put it in salad for lunch or dinner Make delicious grapefruit bars Great source of vitamin C and vitamin A You\'ll have plenty for everyone with this 3-pound bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/9183bc36-5af9-4986-bb8b-d0051507c3fe.990659cf83a79a12424f34a36a70d080.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9183bc36-5af9-4986-bb8b-d0051507c3fe.990659cf83a79a12424f34a36a70d080.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9183bc36-5af9-4986-bb8b-d0051507c3fe.990659cf83a79a12424f34a36a70d080.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1304662369, 'Fresh Mangoes, 1 lb. Sweet', 0.98, '406612238853', 'Savor the irresistible taste of a fresh Mango. Mangoes are an excellent fruit to add to your breakfast, lunch, dinner, or dessert. For breakfast, you can chop the mango up and add it to yogurt or a smoothie for a sweet treat that\'s sure to get your morning started on a high note. For dessert, you could use a mango to make a refreshing sorbet or put a tropical twist on a cobbler. You can also use it to make creamy milkshakes or delicious juices that everyone is sure to enjoy. The culinary possibilities are endless when you keep your kitchen stocked with fresh Mangoes.', 'Irresistibly sweet and juicy Delicious on its own or in a variety of recipes Make a creamy milkshake or a nutritious juice blend Add to yogurt or a smoothie Use to top your salad for a tropical twist Ideal for snacks', 'Unbranded', 'https://i5.walmartimages.com/asr/657c375b-a3ae-4ae1-ada4-b55d12c5dbe7.cafccbf56bd6d2c9b390bc175ef69d5f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/657c375b-a3ae-4ae1-ada4-b55d12c5dbe7.cafccbf56bd6d2c9b390bc175ef69d5f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/657c375b-a3ae-4ae1-ada4-b55d12c5dbe7.cafccbf56bd6d2c9b390bc175ef69d5f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1307577489, 'Kiwi Clamshell 1lb', 2.43, '818849020024', 'Zespri Kiwifruit Green 1 lb', 'Delicious sweet and tangy kiwi fruit Packed with Vitamin C, fiber and antioxidants with a scrumptious fruit taste Enjoy a fresh kiwi with your breakfast to start your day off on the right foot Bring one to work and treat yourself to a scrumptious healthy snack at the office Great for school lunches Perfect for topping desserts', 'Unbranded', 'https://i5.walmartimages.com/asr/aa064c6b-1e3e-4dbf-8a9d-e07774955f9e.8862e9be7dc5567453155cc4b08aeabc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa064c6b-1e3e-4dbf-8a9d-e07774955f9e.8862e9be7dc5567453155cc4b08aeabc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa064c6b-1e3e-4dbf-8a9d-e07774955f9e.8862e9be7dc5567453155cc4b08aeabc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1309140331, 'Superfresh Kids Pink Lady, 2lb', 5.77, '883391000824', 'Treat yourself to the delicious, crisp taste of Pink Lady Apples. These apples are known for their vivid green skin covered in a pinkish blush, crunchy texture, and tart taste with a sweet finish. Enjoy one with breakfast or lunch or as a fresh snack any time of day. with Pink Lady Apples. Super tasty Fresh Produce made with great ingredients.', 'Includes 3 pounds of tart, crisp apples Tart taste with a sweet finish Pair them with sharp cheeses and crackers for a stunning appetizer board Can be enjoyed fresh or cooked into both savory and sweet dishe', 'Superfesh Kids', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1314816753, 'Daisy Organic De Anjou Pear, 2lb', 4.97, '847473004834', 'Treat your family to the amazing taste of Anjou Pears. Tantalizingly crisp, these pears are deliciously sweet and juicy. These are excellent snacking pears, but you can also use them in a variety of recipes. For breakfast, use these pears to make a rich and creamy yogurt parfait or a nutritious juice blend', 'Sweet, crisp & juicy Excellent snacking pear Make a creamy smoothie or a nutritious juice blend Add to your salad for extra crunch & flavor Adds flavor to a variety of recipes', 'Daisy Girl', 'https://i5.walmartimages.com/asr/38f27ba1-1bc1-4822-a10d-651f47f0141b.ebef2c824346c2262fc42f0a388e13e3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/38f27ba1-1bc1-4822-a10d-651f47f0141b.ebef2c824346c2262fc42f0a388e13e3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/38f27ba1-1bc1-4822-a10d-651f47f0141b.ebef2c824346c2262fc42f0a388e13e3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1315663736, 'Org Avocado 3 Count Bag', 3.98, '', 'short description is not available', 'Org Avocado 3 Count Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/a31d272d-ed41-4e65-bbff-eb2556a2ccf2.d31c0d0f9fcc2a3ef2e80686c5ca9528.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a31d272d-ed41-4e65-bbff-eb2556a2ccf2.d31c0d0f9fcc2a3ef2e80686c5ca9528.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a31d272d-ed41-4e65-bbff-eb2556a2ccf2.d31c0d0f9fcc2a3ef2e80686c5ca9528.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1332989523, 'Fresh Gold Kiwi Organic 1lb Clamshell', 5.47, '818849020109', 'Fresh Sungold Kiwi is a vibrant and delicious fruit that\'s perfect for adding some sweetness to your diet. With its bright yellow flesh and smooth texture, it\'s a great addition to salads, smoothies, or as a snack on its own. Packed with vitamins and nutrients, Fresh Sungold Kiwi is a healthy and tasty choice for any occasion. Try it today and enjoy the juicy sweetness of this unique fruit!', 'SWEET! - A golden variety of kiwi that has a unique tropical-sweet taste Zespri gold kiwi is 100% grower owner, and we only do kiwis Translation: we\'re a little obsessed with growing the best Packing is 100% recyclable Ripe kiwi should yield to slight pressure and taste sweeter as it gets softer 1 lb. pack is perfect to share with friends and family Packed full of nutrients with 20+ vitamins and minerals Natural high in vitamin C, providing 100% of your daily vitamin C needs in one fruit Easy to eat, just cut in half, scoop with a spoon and enjoy!', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b2f2150a-4337-4370-b030-1d1d711a458a.1ededd59fc6d87c10c96bf0ec50b44f2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b2f2150a-4337-4370-b030-1d1d711a458a.1ededd59fc6d87c10c96bf0ec50b44f2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b2f2150a-4337-4370-b030-1d1d711a458a.1ededd59fc6d87c10c96bf0ec50b44f2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1334035958, 'Fresh Seedless Lemons, 1 lb Bag', 2.98, '072240546785', 'Wonderful Seedless Lemons. They’re juicy, zesty, naturally seedless, and Non-GMO Project Verified. They are everything you love about lemons, minus the pesky little seeds. Make cooking and juicing a breeze. Make a great addition to your nutritious beverages, meals, and desserts. There’s a whole lot more to Wonderful Seedless Lemons than meets the rind. Available in a 1-pound bag.', 'Naturally seedless Great source of vitamin C Use to add zest and flavor to your meals and beverages Add to your iced or hot tea Make a satisfying and refreshing strawberry lemonade Adds flavor to a variety or recipes Available in a 1-pound bag', 'Wonderful', 'https://i5.walmartimages.com/asr/5f1b5e2d-5083-4a34-b693-7e0407e0a53f.deaf32c1062ae2f79e0bc9d52eaa1c17.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5f1b5e2d-5083-4a34-b693-7e0407e0a53f.deaf32c1062ae2f79e0bc9d52eaa1c17.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5f1b5e2d-5083-4a34-b693-7e0407e0a53f.deaf32c1062ae2f79e0bc9d52eaa1c17.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1337423463, 'Welchs Granny Smith Fresh Apple, 3lb Bag', 5.97, '095829211348', 'Treat yourself to Welch Granny Smith Apples. Granny Smith apples are firm and juicy with a crisp texture and a tart, acidic, yet subtly sweet flavor, perfect for use in a variety of dishes morning, noon, and night. Slice them up and cook in a skillet with brown sugar, butter, cloves, and nutmeg for a simple, sweet treat. Mix them with cabbage, grapes, honey, mayonnaise and, celery to make a fresh, apple slaw for a summer cookout. Use them to make a sweet, classic apple pie that your friends and family with love.', 'Firm and juicy with a crisp texture and a tart, acidic, yet subtly sweet flavor Great for breakfast, lunch, dinner, or dessert Cook in a skillet with butter, brown sugar, and spices; mix with cabbage, grapes, honey, mayonnaise and, celery for apple slaw; or make a classic apple pie Versatile ingredient perfect for both savory and sweet dishes', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/f134bdf1-e64e-4088-ab87-bc0fca64add5.3fe6af3369948d447cc0a561a0fce7dc.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f134bdf1-e64e-4088-ab87-bc0fca64add5.3fe6af3369948d447cc0a561a0fce7dc.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f134bdf1-e64e-4088-ab87-bc0fca64add5.3fe6af3369948d447cc0a561a0fce7dc.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1381993158, 'Melissas Melissa Lemon Juice', 1.97, '045255154610', 'Melissas Melissa Lemon Juice', 'Melissas Melissa Lemon Juice', 'Melissa\'s', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1387079649, 'Melissas Melissa Lime Juice', 1.97, '045255154627', 'Melissas Melissa Lime Juice', 'Melissas Melissa Lime Juice', 'Melissa\'s', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/24893ec1-4563-41fa-9efb-42ba1d0d5e98.f417a4c35f49d4ecd5c479905aa827b3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1391361284, 'Fieldpack Unbranded Papaya', 1.24, '', 'Get flavor and nutrition with our Fresh Papaya. Papaya is a tropical fruit that originated in the tropics of the Americas and is known to be a great source of vitamins C, A, fiber, and antioxidants. When ripe, this fruit has a butter-like texture with a fairly sweet flavor similar to cantaloupe and can be eaten raw, without skin or seeds. Papaya can be prepared in a variety of ways; you can mix them with grapefruit and avocado for a bright summer salad, add them to a zesty salsa for some sweetness, freeze them and turn them into refreshing popsicle spears, or bake them in the oven with a melted brown sugar mixture. The sky\'s the limit! Get ready for a taste-bud party with Fresh Papaya.', 'Creamy, butter-like flavor when ripe Rich in vitamins A, C, fiber, and antioxidants Fairly sweet flavor like cantaloupe and mango Great addition to smoothies, salads, salsa, and more Delicious and nutritious', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1394735690, 'Seedless Watermelon Bin', 317.65, 'deleted_860036002207', 'Seedless watermelon is a delicious, sweet fruit. Watermelon is perfect for healthy snacking, fun gatherings, and feeding large families. A summertime favorite that is dense in nutrients and packs delicious, juicy flavor. Watermelon is especially tasty when served cold, and enjoys a long shelf life. . Enjoy watermelon on its own, or try it in salads, desserts, and more. Its red, sweet fruit is enjoyable at picnics or simply out of a bowl in your own home. Try a fresh watermelon today!', 'Seedless Watermelon, 1 Each Sweet Juicy Fresh Dense in nutrients Perfect for families or large gatherings Healthy snack Long shelf life', 'Optima', 'https://i5.walmartimages.com/asr/d2e7598b-13ec-4dd8-86f5-f31ac3dfec9e.d31fe27ba791a600950a5c23d83b80f1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d2e7598b-13ec-4dd8-86f5-f31ac3dfec9e.d31fe27ba791a600950a5c23d83b80f1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d2e7598b-13ec-4dd8-86f5-f31ac3dfec9e.d31fe27ba791a600950a5c23d83b80f1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1409092994, 'Freshness Guaranteed Apple Breakfast Bowl', 4.47, '717524671387', 'short description is not available', 'Freshness Guaranteed Apple Breakfast Bowl', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1417275771, 'Fresh Driscoll\'s Sweetest Batch Blackberries, 10 oz Container', 4.76, '715756100668', 'Sweetest batch blackberries are a special variety selected for their extra-sweet deliciousness. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as a topping for pancakes, bake them in a mouthwatering tream, mix them with lemon and water for a flavorful and refreshing drink. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them and enjoy the fresh taste. Refrigerate the berries in original Clam Shell to keep them fresh and ready for use.', 'Premium selection Only Driscoll\'s grows Sweetest Batch berries from proprietary berry varieties Bursting with flavors exceptional blackberry flavor, these juicy blackberries are selected for their extra-sweet deliciousness Refrigerate your blackberries in the original Clam Shell tray to maintain freshness Delicious on their own as a healthy snack or as part of a recipe Rich in vitamin C', 'Driscolls, Inc.', 'https://i5.walmartimages.com/asr/a4ba4ce6-631d-4561-8716-6b6841b976bf.374a620b9822abb2c00d98e8915a61ef.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a4ba4ce6-631d-4561-8716-6b6841b976bf.374a620b9822abb2c00d98e8915a61ef.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a4ba4ce6-631d-4561-8716-6b6841b976bf.374a620b9822abb2c00d98e8915a61ef.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1435822379, '5lb Bag Fresh Peelz California Mandarin Orange', 7.97, 'deleted_091636000182', 'You peel them, then you eat them. There isn\'t a simpler snack than Peelz mandarins. They are quick, easy, nutritious and delicious. Happy hour, lunch hour, power hour, any hour–Peelz bring those extra feels to life.', 'California Grown Easy Peel Seedless Vegan Non-GMO Fresh Bagged Mandarins', 'Peelz', 'https://i5.walmartimages.com/asr/bd991d70-6535-491d-af5b-0f42e5854444.728446b06766cc2da1b1dc73908e13d0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd991d70-6535-491d-af5b-0f42e5854444.728446b06766cc2da1b1dc73908e13d0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd991d70-6535-491d-af5b-0f42e5854444.728446b06766cc2da1b1dc73908e13d0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1448178248, 'Fresh Navel Oranges, 8 lb Bag', 8.94, 'deleted_848163004776', 'Fresh Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 8 lb package.', 'A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1466471285, 'Kiwis Hayward', 4.27, '', 'short description is not available', 'Kiwis Hayward', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1480742816, 'Driscoll\'s Fresh Mixed Berry Rainbow Pack, 7 oz. Container', 5.98, '715756500185', 'Indulge in the sweet and tangy taste of freshness with this irresistible mix of juicy blueberries, luscious blackberries, and plump raspberries. Our carefully selected berries are packed in a convenient clamshell container, perfect for snacking on the go or adding a burst of flavor to your favorite recipes. The berries in our Rainbow Pack are freshly picked and carefully handled to ensure maximum flavor and nutrition. With no added sugars or preservatives, you can enjoy these berries guilt-free. Plus, they\'re an excellent source of antioxidants, fiber, and vitamins to support a healthy lifestyle. Whether you\'re looking for a quick breakfast boost, a midday snack, or a delicious addition to your favorite salads, smoothies, or yogurt parfaits, our Rainbow Pack clamshell has got you covered. So go ahead, treat yourself to a taste of paradise with every bite!', 'Are you ready to experience the vibrant taste and health benefits of Fresh Berries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Berries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of blueberries, blackberries and raspberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day.', 'Driscoll\'s, Inc.', 'https://i5.walmartimages.com/asr/7814d58b-31cc-4f6f-94ad-0780c97f02b7.1da19af803b3f810e1343c6ce51c995a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7814d58b-31cc-4f6f-94ad-0780c97f02b7.1da19af803b3f810e1343c6ce51c995a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7814d58b-31cc-4f6f-94ad-0780c97f02b7.1da19af803b3f810e1343c6ce51c995a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1487358163, 'Fresh Organic Blueberries, 18 oz Container', 7.56, '812049009605', 'Fresh Blueberries are a delightful and nutritious treat that brings a burst of flavor to any dish. These plump and juicy berries are picked at the peak of freshness, ensuring a sweet and tangy taste that is hard to resist. Perfect for snacking, baking, or adding to your favorite recipes, these blueberries are a versatile fruit that can be enjoyed in countless ways. Whether you sprinkle them on top of your morning cereal, blend them into a smoothie, or bake them into a delicious pie, Fresh Blueberries are sure to satisfy your cravings for a healthy and delicious snack.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Blueberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Blueberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of blueberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these blue gems into your baking endeavors, whether it\'s muffins, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are blueberries delicious, but they also offer an array of health benefits. Loaded with antioxidants, vitamins, and dietary fiber, blueberries are known to promote heart health, support brain function, and boost the immune system. They are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Blueberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Blueberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/57ef4ede-61ce-40f5-a4fa-950ffe107d57.42b40429fe4f42dbb6af6a4486ca135d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/57ef4ede-61ce-40f5-a4fa-950ffe107d57.42b40429fe4f42dbb6af6a4486ca135d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/57ef4ede-61ce-40f5-a4fa-950ffe107d57.42b40429fe4f42dbb6af6a4486ca135d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1532424484, 'Fresh White Nectarines, 2 lb Bag', 4.48, '810248031878', 'Discover the delightful sweetness of these Fresh White Nectarines. Enjoy them on their own as a sweet snack or use them in a variety of recipes. For breakfast, you could slice them to put into your oatmeal or use them to make a delicious yogurt parfait. You can also use these fresh nectarines in several baking recipes including a comforting crisp topped with ice cream, a tasty upside-down cake, or a scrumptious tart. You can even use them to make a jam or a smooth sorbet. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Fresh White Nectarines.', 'Fresh White Nectarines, 2lb Bag Slice as a sweet topping for waffles or pancakes Add to iced tea to create a refreshing summertime flavor Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Enjoy on their own as a satisfying snack', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e4ece64c-b28b-4c34-a1c0-b4876e0a3760.d541c68c2edd514e5d0a099bc88bdd19.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4ece64c-b28b-4c34-a1c0-b4876e0a3760.d541c68c2edd514e5d0a099bc88bdd19.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4ece64c-b28b-4c34-a1c0-b4876e0a3760.d541c68c2edd514e5d0a099bc88bdd19.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1567276662, 'Fresh Red Kiwi, 1 lb Package', 5, '014668530014', 'Savor the irresistible taste of Fresh Red Kiwi. Enjoy this tasty kiwi on its own as a healthy snack or incorporate it into a variety of delicious recipes. For breakfast, you can make a sweet fruit bowl with sliced kiwi, strawberries, pineapple, and cantaloupe. For an extra special treat, top with a dollop of whipped cream. Cut it into small pieces and put it in a fresh salad along with chicken, cucumbers, tomatoes, and a light dressing. You can even use kiwi to make a sweet sorbet or scrumptious muffins. Enjoy the sweet and juicy taste of Fresh Red Kiwi.', 'Fresh Red Kiwi, 1 lb Package Flavorful addition to many recipes Enjoy on its own or add to a mixed fruit salad Add to your fresh garden salad Get creative and make a refreshing sorbet Explore all the delicious ways to add fresh kiwi to your favorite recipes', 'Unbranded', 'https://i5.walmartimages.com/asr/bf8797ca-1c58-49d0-a318-e1ce2ca09e38.b180bb1eb433e4e63fb27da156ad1ad4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf8797ca-1c58-49d0-a318-e1ce2ca09e38.b180bb1eb433e4e63fb27da156ad1ad4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bf8797ca-1c58-49d0-a318-e1ce2ca09e38.b180bb1eb433e4e63fb27da156ad1ad4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1572264967, 'Sweet Gourmet Fresh Bosc Pear, 2lbs Bag', 4.97, '847473004155', 'Discover the Fresh Bosc Pear - a premium produce with a sweet and juicy taste, distinctive elongated shape, and brownish-golden skin. Perfect for snacking, cooking, and baking, this versatile fruit holds up well under heat and adds a touch of sweetness to your dishes in theri 2 Lb Bag presentation. Rich in essential vitamins and minerals, the Bosc pear is a nutritious and healthy addition to your fruit basket. Order now and indulge in the goodness of this delicious fruit.', 'Indulge in the sweet and juicy flavor of our Sweet Gourmet Bosc Pears! Hand-selected for their irresistible taste and exceptional quality, these pears are perfect for snacking, baking, or adding to your favorite salads Each 2lb bag is filled with premium pears that are carefully harvested at peak ripeness to ensure maximum sweetness and flavor. With their soft, buttery texture and delicate skin, these pears are a true gourmet delight. Plus, they\'re packed with essential nutrients and antioxidants, making them a healthy and delicious choice for any time of day. Whether you\'re enjoying them as a snack or using them in your favorite recipes, our Sweet Gourmet Bosc Pears are sure to satisfy your sweet tooth and elevate your culinary creations. Don\'t miss out on this delectable and healthy treat - order yours today!', 'Sweet Gourmet', 'https://i5.walmartimages.com/asr/3866b95c-bb90-4016-b3e6-098cce8edda2.d8d4ba6c1612a33bdea814be6077e6c5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3866b95c-bb90-4016-b3e6-098cce8edda2.d8d4ba6c1612a33bdea814be6077e6c5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3866b95c-bb90-4016-b3e6-098cce8edda2.d8d4ba6c1612a33bdea814be6077e6c5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1584572816, 'Bulk Lemons', 0.58, 'deleted_725422040532', 'short description is not available', 'Bulk Lemons', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1587808087, 'Fresh Limes, 2 lb Bag', 4.98, 'deleted_095829600395', 'Add zest and flavor to your meals and beverages with these Limes. Freshly squeezed limes provide a healthy dose of vitamin C to your diet and are a key ingredient in many recipes, from homemade salsa to chicken dishes. The citrusy tropical flavor of these limes are sure to add a zing to all your cooked meals. Drizzle lime juice over fish or add it to your favorite sauces. Serve wedges of raw lime with your favorite cocktails and use them when baking cakes, cookies, and tarts. These limes are sold in a two-pound bag, so you\'ll have plenty for all your culinary creations. Enjoy the refreshing, tart flavor of Limes.', 'Fresh and juicy limes Drizzle lime juice over fish or add it to your favorite sauces Serve wedges of raw lime with your favorite cocktails Use them when baking cakes, cookies, and tarts Refreshing, tart flavor Seedless', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/01030543-b4e9-494a-a36c-9ed4cdadf5e9.db4f01fa29b2cfff8a217c3dd99c6b23.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/01030543-b4e9-494a-a36c-9ed4cdadf5e9.db4f01fa29b2cfff8a217c3dd99c6b23.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/01030543-b4e9-494a-a36c-9ed4cdadf5e9.db4f01fa29b2cfff8a217c3dd99c6b23.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1591209191, 'Fieldpack Unbranded Fresh Strawberries 2 lb Bag', 4.32, 'deleted_850042995051', 'short description is not available', 'Fresh Strawberries, 2 lb Best when enjoyed at room temperature Light, refreshing taste Healthy sweet treat Prior to serving gently wash them and remove leafy cap Refrigerate your strawberries in the original container to maintain freshness, they should approximately last 3-5 days after purchase Keep dry for optimal freshness', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1599172053, 'Fresh Valencia Oranges, 1 Each', 0.97, 'deleted_000000040136', 'Known for their sweet flavor, Valencia Oranges have a thin skin and are typically very juicy. It is the most popular orange for juicing. It\'s juice will remain perfectly sweet even after air exposure. With a balanced sweet-to-tart flavor ratio that carries over to their juice, Valencia Oranges are widely available during the spring and summer months. Use Valencia oranges to make fresh orange juice, or use their flesh, juice, and zest in baked goods, cocktails, sauces, and marinades. Keep some sunshine on hand with Valencia Oranges. Available by the each.', 'Valencia Oranges Small in size, bursting in flavor Sweet and tangy Typically more difficult to peel than navel Typically more juicier than a navel Available by the each', 'Fresh Produce', 'https://i5.walmartimages.com/asr/383d6fe9-8325-4619-a4eb-af17f924bd38.bba0fcace8118f8889d6846da04fb9dd.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/383d6fe9-8325-4619-a4eb-af17f924bd38.bba0fcace8118f8889d6846da04fb9dd.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/383d6fe9-8325-4619-a4eb-af17f924bd38.bba0fcace8118f8889d6846da04fb9dd.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1622484445, 'Freshness Guaranteed Pineapple Breakfast Bowl', 4.47, '717524671370', 'short description is not available', 'Freshness Guaranteed Pineapple Breakfast Bowl', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1622897274, 'Fresh Navel Oranges, 8 lb Bag', 8.94, 'deleted_818654011743', 'Enjoy the juicy goodness of these Large Bagged Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, these Large Bagged Oranges will add flavor to any meal or beverage.', 'A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1627132362, 'Wonderful Pomegrante Granada', 3.47, '406569425092', 'short description is not available', 'Wonderful Pomegrante Granada', 'WONDERFUL', 'https://i5.walmartimages.com/asr/8e97d70d-382a-454e-a04f-81a7d15be75b.cd4eb5620f1de4b827928eac63bc0af1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e97d70d-382a-454e-a04f-81a7d15be75b.cd4eb5620f1de4b827928eac63bc0af1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8e97d70d-382a-454e-a04f-81a7d15be75b.cd4eb5620f1de4b827928eac63bc0af1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1638069540, 'Superfresh Kids Fuji Apples, 2lb', 4.97, '883391000039', 'There is an inherent spicy-savory flavor to these Fuji Apples that makes them an all-around favorite for both fresh and cooked uses. It is perhaps natural that this apple, with its Japanese heritage, would pair well with Asian flavors such as cilantro, chili pepper, rice vinegar and sesame. This is a wine-friendly apple, making it a good choice for recipes served as an appetizer or main course accompanied by wine. It pairs particularly well with Riesling, Chianti, Merlot and Pinot Noir wines.', 'Super sweet Fresh and sophisticated flavor Hints of spice and savory earth character Juicy and aromatic Healthy snack', 'Superfresh Kids', 'https://i5.walmartimages.com/asr/a6b0c885-1e17-4e40-b422-94e049649e49.160bff1b1d9038e51f7a76f259eaecf2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6b0c885-1e17-4e40-b422-94e049649e49.160bff1b1d9038e51f7a76f259eaecf2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6b0c885-1e17-4e40-b422-94e049649e49.160bff1b1d9038e51f7a76f259eaecf2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1657099619, 'Watermelon', 0.97, '406555458110', 'short description is not available', 'Watermelon', 'Unbranded', 'https://i5.walmartimages.com/asr/14487aaf-d86a-4b46-acaf-7621b90286bb.fb737768267fcdc95c33f355b730ad15.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/14487aaf-d86a-4b46-acaf-7621b90286bb.fb737768267fcdc95c33f355b730ad15.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/14487aaf-d86a-4b46-acaf-7621b90286bb.fb737768267fcdc95c33f355b730ad15.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1677195107, 'Fresh Navel Oranges, 4 lb Bag', 8.98, '014668120017', 'Fresh Navel Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with a thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 4 lb package, these Fresh Navel Oranges are great for the entire family.', 'Fresh Navel Oranges, 4 lb Bag A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0039e8fe-9fd3-45e9-a4e3-ba5a49d3d9a4.a2f2806080b5f6e94ea11458020db16e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0039e8fe-9fd3-45e9-a4e3-ba5a49d3d9a4.a2f2806080b5f6e94ea11458020db16e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0039e8fe-9fd3-45e9-a4e3-ba5a49d3d9a4.a2f2806080b5f6e94ea11458020db16e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1698410900, 'Freshness Guaranteed Oranges & Grapefruit', 3.97, '717524701268', 'short description is not available', 'Freshness Guaranteed Oranges & Grapefruit', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1703778874, 'Fresh Sumo Citrus Mandarin, 2lb Bag', 5.74, 'deleted_725422000079', 'Bursting with juicy sweetness, Sumo Citrus Mandarins are one of the world\'s largest and sweetest mandarins. Distinguished for its Top Knot and uneven skin, this rare seedless hybrid variety delivers the ultimate citrus experience: incredibly sweet and easy-to-peel, without the mess! Can you peel it in one go? Each bag includes two pounds of Sumo Citrus Mandarins, so you can share the sweetest obsession! For best flavor, don\'t refrigerate Sumo Citrus Mandarins. Compact and portable, Sumo Citrus Mandarins are great to pack in your lunchbox, toss into our gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Share the sweetness with Sumo Citrus Mandarins.', 'One of the world\'s largest and sweetest mandarins No mess and easy-to-peel for more fun Each bag contains 2 pounds of Sumo Citrus Mandarins Incredibly sweet and seedless The perfect on-the-go snack', 'Sumo Citrus', 'https://i5.walmartimages.com/asr/187211cd-42d7-4851-9958-781f44b37aa6.1b06330a47dcfb08cd86f7132b033f09.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/187211cd-42d7-4851-9958-781f44b37aa6.1b06330a47dcfb08cd86f7132b033f09.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/187211cd-42d7-4851-9958-781f44b37aa6.1b06330a47dcfb08cd86f7132b033f09.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1715859885, 'Fresh Apricots, lb', 2.28, '406533017759', 'short description is not available', 'Fresh Apricots, lb', 'Unbranded', 'https://i5.walmartimages.com/asr/947ce4fd-9610-4470-a43f-9de27118c2b3.7c361eaa14939b58f1f5c7baf162e9a3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/947ce4fd-9610-4470-a43f-9de27118c2b3.7c361eaa14939b58f1f5c7baf162e9a3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/947ce4fd-9610-4470-a43f-9de27118c2b3.7c361eaa14939b58f1f5c7baf162e9a3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1732105323, 'Ingrilli 100% Lemon Juice from Concentrate, 4 Fl Oz Squeeze Bottles (Pack of 3)', 12.4, '642709101710', 'The Highest Product Standards From our orchard-to-bottle manufacturing process to our strict quality standards, we take pride in knowing that every bottle of Ingrilli products lives up to the Ingrilli family name. TRULY ORGANIC PRODUCTS At Ingrilli, we don’t just “label” our organic line as such – we live it. We test every batch of our organic products against common pesticides, and we have zero tolerance for any contamination or preservatives. That’s why we’ve earned the official USDA Organic seal of approval. NON-GMO Ingrilli is proud to be an official participant of the Non-GMO Project, and we are Non-GMO Project verified for all of our products. A TRADITION OF HIGH MANUFACTURING STANDARDS When we first opened our doors in 1880, we promised to deliver the highest-quality, freshest products on the market – and we still live to that standard today. That’s why we only use the freshest fruit and the latest production equipment, processes, and facilities to produce every bottle of Ingrilli juice on the shelves', 'FRESH FLAVOR, FRESH TASTE: Made from Argentinian and Brazilian 100% lemon juice concentrate, Ingrilli tastes as fresh as cutting into fresh lemons VERSATILE FLAVOR: Ingrilli Lemon Juice can be used for cooking, baking, salads and drink mixers. GOOD FOR EVERYONE: Ingrilli Lemon juice is is Non-GMO Project Verified, OU kosher certified, Vegan Certified and Gluten-Free', 'Ingrilli', 'https://i5.walmartimages.com/asr/3cbabd0c-5616-4708-9105-82c00edf9947.cf776292cff59bc6bbb7f4773d75669c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cbabd0c-5616-4708-9105-82c00edf9947.cf776292cff59bc6bbb7f4773d75669c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cbabd0c-5616-4708-9105-82c00edf9947.cf776292cff59bc6bbb7f4773d75669c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1732560925, 'Fresh Blueberries, 1 Pint Container', 3.17, '033383221014', 'Fresh Blueberries are a delightful and nutritious treat that brings a burst of flavor to any dish. These plump and juicy berries are picked at the peak of freshness, ensuring a sweet and tangy taste that is hard to resist. Perfect for snacking, baking, or adding to your favorite recipes, these blueberries are a versatile fruit that can be enjoyed in countless ways. Whether you sprinkle them on top of your morning cereal, blend them into a smoothie, or bake them into a delicious pie, Fresh Blueberries are sure to satisfy your cravings for a healthy and delicious snack.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Blueberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Blueberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of blueberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these blue gems into your baking endeavors, whether it\'s muffins, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are blueberries delicious, but they also offer an array of health benefits. Loaded with antioxidants, vitamins, and dietary fiber, blueberries are known to promote heart health, support brain function, and boost the immune system. They are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Blueberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Blueberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/58566f1b-31b1-4e76-b0c2-39403a93c0c7.c8b5bd91935856cbdb15b7587d8c031e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58566f1b-31b1-4e76-b0c2-39403a93c0c7.c8b5bd91935856cbdb15b7587d8c031e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58566f1b-31b1-4e76-b0c2-39403a93c0c7.c8b5bd91935856cbdb15b7587d8c031e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1768002064, 'Large Bagged Oranges', 9.96, 'deleted_605049623076', 'short description is not available', 'Large Bagged Oranges', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1781899163, 'Fresh Sweet Sapphire Black Seedless Grape, 2 Lb', 3.48, 'deleted_855199008494', 'short description is not available', 'Fresh Sweet Sapphire Black Seedless Grape, 2 Lb', 'Unbranded', 'https://i5.walmartimages.com/asr/d9c5680d-fced-48a2-8e27-9e4a67d5bc75.890d8fe474586d43179ca364afb149e2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9c5680d-fced-48a2-8e27-9e4a67d5bc75.890d8fe474586d43179ca364afb149e2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9c5680d-fced-48a2-8e27-9e4a67d5bc75.890d8fe474586d43179ca364afb149e2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1790604366, 'Taylor Farms Melon Trio with Cantaloupe, Honeydew, and Watermelon, 16 oz Tray', 6.47, '030223038276', 'Introducing Taylor Farms Melon Trio, your go-to choice for a refreshing, nutritious, and delicious snack! This 16oz medley brings together juicy watermelon, sweet cantaloupe, and succulent honeydew melon, offering a vibrant burst of flavors. Each melon is carefully picked at peak ripeness, ensuring the perfect balance of taste and texture. Ideal for a quick snack, summer picnics, or a delightful addition to your fruit platter, Taylor Farms Melon Trio is the ultimate treat for your taste buds and a healthy option for the whole family.', 'Taylor Farms Melon Trio 16 Oz Introducing Taylor Farms Melon Trio, your go-to choice for a refreshing, nutritious, and delicious snack! This 16oz medley brings together juicy watermelon, sweet cantaloupe, and succulent honeydew melon, offering a vibrant burst of flavors. Each melon is carefully picked at peak ripeness, ensuring the perfect balance of taste and texture. Ideal for a quick snack, summer picnics, or a delightful addition to your fruit platter, Taylor Farms Melon Trio is the ultimate treat for your taste buds and a healthy option for the whole family.', 'Taylor Farms', 'https://i5.walmartimages.com/asr/033a8788-0eba-4fda-a2ed-8c764d32ec73.1a11444053c0eddce2ba608d54b36eff.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/033a8788-0eba-4fda-a2ed-8c764d32ec73.1a11444053c0eddce2ba608d54b36eff.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/033a8788-0eba-4fda-a2ed-8c764d32ec73.1a11444053c0eddce2ba608d54b36eff.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1799988531, 'Organic Limes 1# Bag', 2.98, 'deleted_857392008189', 'Fresh bagged organic limes', '1 lb mesh-bag organic persian lime', 'FRESHQUITA', 'https://i5.walmartimages.com/asr/afcbe2ac-a8d9-4165-b891-5e12cc4bb587.5a9ac963525b28f279d074f701e0600c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/afcbe2ac-a8d9-4165-b891-5e12cc4bb587.5a9ac963525b28f279d074f701e0600c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/afcbe2ac-a8d9-4165-b891-5e12cc4bb587.5a9ac963525b28f279d074f701e0600c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1810869685, 'Fieldpack Unbranded Watermelon Seedless', 5.67, 'deleted_850046329234', 'Enjoy the sweet, refreshing taste of a Seedless Watermelon. Seedless Watermelon is great for breakfast, lunch, dessert, or when you want a snack. Watermelon is a good source of vitamin C, vitamin A, and potassium making them an excellent healthy treat. Cut the watermelon into chunks for a quick snack, infuse it with water for a refreshing drink, or chop it up and make a mouthwatering watermelon salad with feta and mint. This watermelon is great for sharing with friends and family or keep it for yourself. Bring it to your next cookout or get it as a sweet after dinner treat with friends.', 'Fresh Seedless Watermelon: Enjoy a fresh Seedless Watermelon on its own or add to a mixed fruit salad Serve at your next neighborhood barbecue Get creative and make a watermelon cocktail or a refreshing sorbet Sweet and Juicy Explore all the delicious ways to add fresh watermelon to your favorite recipes', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1829446358, 'Avocado Per Each', 1.18, '', 'short description is not available', 'Avocado Per Each', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/0b27dfbf-7446-495a-9169-7a4870dca6e4.8dc71e65fc81b403186e3f7bc997aa63.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b27dfbf-7446-495a-9169-7a4870dca6e4.8dc71e65fc81b403186e3f7bc997aa63.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0b27dfbf-7446-495a-9169-7a4870dca6e4.8dc71e65fc81b403186e3f7bc997aa63.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1844288190, 'Welchs Fuji Fresh Apple, 3 lb Bag', 4.67, 'deleted_095829211331', 'There is an inherent spicy-savory flavor to these Fuji Apples that makes them an all-around favorite for both fresh and cooked uses. It is perhaps natural that this apple, with its Japanese heritage, would pair well with Asian flavors such as cilantro, chili pepper, rice vinegar and sesame. This is a wine-friendly apple, making it a good choice for recipes served as an appetizer or main course accompanied by wine. It pairs particularly well with Riesling, Chianti, Merlot and Pinot Noir wines.', 'Super sweet Fresh and sophisticated flavor Hints of spice and savory earth character Juicy and aromatic Healthy snack', 'Welch\'s', 'https://i5.walmartimages.com/asr/9f63f465-13e0-477d-ba11-d56869eab2a5.c54edd59621326df5b8f5bcc14dbc69a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9f63f465-13e0-477d-ba11-d56869eab2a5.c54edd59621326df5b8f5bcc14dbc69a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9f63f465-13e0-477d-ba11-d56869eab2a5.c54edd59621326df5b8f5bcc14dbc69a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1855868814, 'Fieldpack Marketside Yumi Organic Seedless Watermelon', 14.97, '045009899583', 'Enjoy the sweet, refreshing taste of a Seedless Watermelon. Seedless Watermelon is great for breakfast, lunch, dessert, or when you want a snack. Watermelon is a good source of vitamin C, vitamin A, and potassium making them an excellent healthy treat. Cut the watermelon into chunks for a quick snack, infuse it with water for a refreshing drink, or chop it up and make a mouthwatering watermelon salad with feta and mint. This watermelon is great for sharing with friends and family or keep it for yourself. Bring it to your next cookout or get it as a sweet after dinner treat with friends.', 'Fresh Seedless Watermelon: Enjoy a fresh Seedless Watermelon on its own or add to a mixed fruit salad Serve at your next neighborhood barbecue Get creative and make a watermelon cocktail or a refreshing sorbet Sweet and Juicy Explore all the delicious ways to add fresh watermelon to your favorite recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1884281156, 'Sliced Apples 1.75oz', 1, '649632001834', 'Fresh cut sliced Apples are a delicious healthy snack. It contains 1.75 ounces of ready to eat sliced apples.', 'Sliced Apples 1.75oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1899624331, 'Taylor Farms Fresh Cut Mango, 16 oz Tray', 5.44, '030223034131', 'Enjoy the sweet, tropical flavor of Mango. These precut pieces are great for breakfast, lunch, dessert, or when you want a snack. Mango is a good source of vitamin C making it an excellent healthy treat. You can eat it right out of the container, infuse them with water and mint for a refreshing drink, or chop them up and make a mouthwatering mango salsa with jalapenos, tomatoes, and red onion. With 16-ounces in each container, this mango is great for sharing with friends and family or keep it for yourself. It comes in a closable container to help maintain freshness. Bring home Mango today for a refreshing, healthy treat. Convenient solutions with value added in every item.', 'Marketside Mango 16 oz Comes in a re-closable container to help maintain freshness Great for breakfast, lunch, dessert, or when you want a snack No preservatives, artificial colors, or artificial flavors Convenient and portable Share with friends and family or keep for yourself Make a fruit bowl topped with whipped cream or a yogurt parfait Enjoy on their own or in a variety of recipes', 'Taylor Farms', 'https://i5.walmartimages.com/asr/98601406-cfdc-4672-8f92-efec82897713.30231b3dc9a3d7da241f416509aa032c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/98601406-cfdc-4672-8f92-efec82897713.30231b3dc9a3d7da241f416509aa032c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/98601406-cfdc-4672-8f92-efec82897713.30231b3dc9a3d7da241f416509aa032c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1906351227, 'Tropic Sun Kiwi Verfrut Clam 1.5lb', 2.97, '', 'Treat yourself to the delicious and refreshing taste of kiwi. Kiwi are known for their sweet, tangy, and soft flesh and nutritional benefits. They are packed with vitamin C, fiber, and antioxidants. They\'re also fat-free and have a low glycemic index. Enjoy a fresh kiwi with your breakfast to start your day off on the right foot or bring one to work and treat yourself to a scrumptious healthy snack at the office. You can also serve them up in a big fresh fruit salad with all your favorite fruits like strawberries, apples, blueberries and more. They\'re even perfect for topping pies, tres leches cakes, tarts and more for dessert. The possibilities are endless when you bring home Kiwi', 'Delicious sweet and tangy kiwi fruit Packed with Vitamin C, fiber and antioxidants with a scrumptious fruit taste Enjoy a fresh kiwi with your breakfast to start your day off on the right foot Bring one to work and treat yourself to a scrumptious healthy snack at the office Great for school lunches', 'Tropic sun', 'https://i5.walmartimages.com/asr/5cd05ccd-4ea5-4083-83f7-026c65c70d52.a74e07db6e6b4a75f7ad77e2fb28eef8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5cd05ccd-4ea5-4083-83f7-026c65c70d52.a74e07db6e6b4a75f7ad77e2fb28eef8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5cd05ccd-4ea5-4083-83f7-026c65c70d52.a74e07db6e6b4a75f7ad77e2fb28eef8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1910053051, 'Welch\'s Peaches 2 lbs', 4.92, '095829211560', 'Welch\'s Peaches 2 lbs', 'Welch’s® Fresh peaches are grown in the United States and Chile. A Welch’s® Fresh peach contains approximately 39 calories. They are rich in vital minerals such as potassium, copper, fluoride, and iron, as well as health-promoting antioxidants.', 'Welch\'s', 'https://i5.walmartimages.com/asr/e41e970d-0f11-4ca2-83b9-178071fb73a4.cc1694540743d6d4ca45709e9541d00b.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e41e970d-0f11-4ca2-83b9-178071fb73a4.cc1694540743d6d4ca45709e9541d00b.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e41e970d-0f11-4ca2-83b9-178071fb73a4.cc1694540743d6d4ca45709e9541d00b.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1945557206, 'APPLE RED 5# VALUE', 4.98, '804305001904', 'APPLE RED 5# VALUE', 'Freshness Guaranteed Red Apples, 5 lb Bag: Sweet, crisp, and juicy Creamy white flesh with low acidity Excellent snacking apple Higher antioxidants due to the rich, deep red skin Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp, and apple pie Sweet, crisp, and juicy Creamy white flesh with low acidity Excellent snacking apple Higher antioxidants due to the rich, deep red skin Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp, and apple pie Adds flavor to a variety of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b3e1c937-7675-4007-89c6-1071b69fb0f0.327b55f97321fce18fc6c8a946edf834.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3e1c937-7675-4007-89c6-1071b69fb0f0.327b55f97321fce18fc6c8a946edf834.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3e1c937-7675-4007-89c6-1071b69fb0f0.327b55f97321fce18fc6c8a946edf834.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1951826257, 'JUICE LEMONADE', 76.21, '', 'What says relaxing with family and friends better than a big glass of ice-cold lemonade? Ours is sweet, tart, so refreshing and chock full of Vitamin C. Perfect for enjoying those long, lazy days of summer... all year long.', 'No artificial sweeteners or high fructose corn syrup added No artificial flavors, colors or preservatives Gluten-free No GMO ingredients 100% Daily Value Vitamin C', 'Langers', 'https://i5.walmartimages.com/asr/19000fc1-e2ab-4d87-9081-fd6f6e1d0c97.b597b5f794b5347109336fb8ee72469f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19000fc1-e2ab-4d87-9081-fd6f6e1d0c97.b597b5f794b5347109336fb8ee72469f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/19000fc1-e2ab-4d87-9081-fd6f6e1d0c97.b597b5f794b5347109336fb8ee72469f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1983247185, 'Large Bagged Oranges', 8.94, 'deleted_850045535049', 'short description is not available', 'Large Bagged Oranges', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1985015337, 'Taylor Farms Fresh Cut Watermelon, 38 oz Tray', 9.24, '030223038009', 'Taylor Farms Watermelon 38 ounces in a plastic container with lid. Perfect fresh sweet watermelon perfect for parties or to be shared.', 'Taylor Farms Watermelon 38 Oz', 'Taylor Farms', 'https://i5.walmartimages.com/asr/256a79c3-9e5a-4943-a249-3c1ad075117e.ec907ca72a1b05af3b7bc05e063f05c3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/256a79c3-9e5a-4943-a249-3c1ad075117e.ec907ca72a1b05af3b7bc05e063f05c3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/256a79c3-9e5a-4943-a249-3c1ad075117e.ec907ca72a1b05af3b7bc05e063f05c3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (1987845157, 'Fresh Organic Blueberries Dry Pint Container', 4.96, '858110006050', 'Fresh Blueberries are a delightful and nutritious treat that brings a burst of flavor to any dish. These plump and juicy berries are picked at the peak of freshness, ensuring a sweet and tangy taste that is hard to resist. Perfect for snacking, baking, or adding to your favorite recipes, these blueberries are a versatile fruit that can be enjoyed in countless ways. Whether you sprinkle them on top of your morning cereal, blend them into a smoothie, or bake them into a delicious pie, Fresh Blueberries are sure to satisfy your cravings for a healthy and delicious snack.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Blueberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Blueberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of blueberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these blue gems into your baking endeavors, whether it\'s muffins, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are blueberries delicious, but they also offer an array of health benefits. Loaded with antioxidants, vitamins, and dietary fiber, blueberries are known to promote heart health, support brain function, and boost the immune system. They are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Blueberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Blueberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/c2ba8df8-8d4a-4cb4-8141-d81b19fcc6e4.e53fe1f9eaa58f9ff95ae592f0f3db95.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c2ba8df8-8d4a-4cb4-8141-d81b19fcc6e4.e53fe1f9eaa58f9ff95ae592f0f3db95.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c2ba8df8-8d4a-4cb4-8141-d81b19fcc6e4.e53fe1f9eaa58f9ff95ae592f0f3db95.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2000589495, 'HARVEAST Dried Apple Slices | Unsulfured Gourmet Dehydrated Apples, No Sugar, Gluten Free, Kosher, Vegan, Non-GMO | Dried Sliced Apple Fruit in Resealable Bag, Delicious Healthy Snack 20 Oz 2 Pack', 41.13, '686754386012', 'Why Choose HARVEAST Dried Apple Slices? We at HARVEAST take pride in cultivating delicious, healthy & mouthwateringly sweet dried apples from the hearty & robust apple trees on our farm. Our all-natural dehydrated apple slices are responsibly grown and packaged with care without the use of gluten, preservatives, GMO or added sugar/sulfur. They are tasted, tested and inspected several times throughout the growing, cultivating and drying process to maintain great taste & consumer safety. Our hard work pays off when we see our customers enjoying our mouthwatering dried apples. Four Image Highlights 2 Pound Resealable Bag After you are done snacking on these delicious dried apple slices, simply reseal the included bag to keep them fresh and flavorful. Need to satisfy your sweet tooth again? Simply unseal the bag and snack away. No more chip clips or food storage clamps needed! Perfect Gourmet Snack Gift Your loved one, friends and family will love these delicious dehydrated apple fruit slices! They are a perfect healthy snack gift for people of all ages and lifestyles. Gift it to them for a birthday, Mother’s Day, Christmas, Father’s Day or any other special occasion! Remarkably Nutritious & Flavorsome These dried apples are a hearty, healthy and absolutely delicious snack. You will love how each bite offers a tender, yet chewy texture, as well as delightfully sweet taste. Get a large percentage of your daily value in vitamins, fiber, potassium and other minerals when snacking on this dried fruit. Delicious Ingredient for Snacks & Meals You will love how you can add these dehydrated apple slices to your daily yogurt, smoothies, salad, tea, oatmeal, granola, trail mix, ice cream, cake, pie & other meals! Want to make a delicious meat & cheese platter? Add this delectable dried fruit to your next charcutier board to impress your friends and family!', 'Delicious Dried Apple Slices - These kosher dehydrated apples are unsulfured for your health & safety. They have a lusciously sweet taste, while also providing you outstanding nutritional value. They are rich in many vitamins and minerals, particularly vitamin C and potassium. Healthy Snack for the Entire Family - You will be amazed that such a delectable treat can provide your body an abundance of fiber, vitamin C, potassium, vitamin K, vitamin B6, manganese, and copper! Our non-GMO dried apple slices are fat-free. low in calories & high in flavor! Truly a perfect addition for the kid s lunch box or simply a healthy nibble to satisfy your sweet-tooth. Gluten Free, Kosher, Vegan, Unsulfured - Rest easy knowing that these dried apple fruit slices are all-natural, unsulfured, gluten free, vegan & Kosher! No sugar or syrups are ever added in the process of cultivating or packaging these dehydrated apples. It is a healthy & mouth-watering snack! Add to Yogurt, Smoothies, Cereal & Salad - Add these delicious & delicate dried apple slices to your favorite snacks & meals. We have customers all over the world use these nutritious dried apples in their yogurt, smoothies, salad, cereal, cheese platter, charcutier boards, granola, trail mix, pies, cakes, ice cream & much more! Cultivated & Dried to Perfection - We take pride in growing & sourcing our gourmet dried apple slices directly from our farm-grown, luscious & robust apple trees. Our premium dehydrated apples are naturally grown and dried without the use of harmful chemicals or GMOs.', 'HARVEAST', 'https://i5.walmartimages.com/asr/2606894b-59f5-422e-9575-5bd575bc3627.db516e7bf7431b73ed9b54b6c989f616.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2606894b-59f5-422e-9575-5bd575bc3627.db516e7bf7431b73ed9b54b6c989f616.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2606894b-59f5-422e-9575-5bd575bc3627.db516e7bf7431b73ed9b54b6c989f616.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2016610380, 'Taylor Farms Fresh Cut Watermelon, 32 oz Tray', 7.36, 'deleted_030223038016', 'Enjoy the refreshing sweetness of Taylor Farms Cut Watermelon. Hand-picked at peak ripeness, our juicy watermelon slices are a perfect summer treat. Each bite bursts with flavor and hydrating goodness. Whether enjoyed on its own or added to fruit salads, smoothies, or desserts, our cut watermelon is sure to satisfy your cravings. Indulge in this delicious, ready-to-eat delight today.', 'Taylor Farms Watermelon 32 Oz Tub Enjoy the refreshing sweetness of Taylor Farms Cut Watermelon. Hand-picked at peak ripeness, our juicy watermelon slices are a perfect summer treat. \\ Each bite bursts with flavor and hydrating goodness. Whether enjoyed on its own or added to fruit salads, smoothies, or desserts, our cut watermelon is sure to satisfy your cravings. Indulge in this delicious, ready-to-eat delight today.', 'Taylor Farms', 'https://i5.walmartimages.com/asr/dd1294d4-57ec-477e-9524-d4f7b5f39f04.41fbe85d27a5d2a09b8263ed29fb9575.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd1294d4-57ec-477e-9524-d4f7b5f39f04.41fbe85d27a5d2a09b8263ed29fb9575.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/dd1294d4-57ec-477e-9524-d4f7b5f39f04.41fbe85d27a5d2a09b8263ed29fb9575.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2118600458, 'Seedless Watermelon Bin', 317.65, 'deleted_860036002214', 'Seedless watermelon is a delicious, sweet fruit. Watermelon is perfect for healthy snacking, fun gatherings, and feeding large families. A summertime favorite that is dense in nutrients and packs delicious, juicy flavor. Watermelon is especially tasty when served cold, and enjoys a long shelf life. . Enjoy watermelon on its own, or try it in salads, desserts, and more. Its red, sweet fruit is enjoyable at picnics or simply out of a bowl in your own home. Try a fresh watermelon today!', 'Seedless Watermelon, 1 Each Sweet Juicy Fresh Dense in nutrients. Perfect for families Great for large gatherings Long shelf life Healthy Snack', 'Optima', 'https://i5.walmartimages.com/asr/d2e7598b-13ec-4dd8-86f5-f31ac3dfec9e.d31fe27ba791a600950a5c23d83b80f1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d2e7598b-13ec-4dd8-86f5-f31ac3dfec9e.d31fe27ba791a600950a5c23d83b80f1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d2e7598b-13ec-4dd8-86f5-f31ac3dfec9e.d31fe27ba791a600950a5c23d83b80f1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2131486870, 'Yellow Mango Bag', 4.92, '851039002165', 'Treat yourself to a burst of tropical goodness when you bring home a bag of Yellow Honey Mangos. Mangoes boast a deliciously sweet fragrance and juicy flavor that is sure to wake up your taste buds. They are packed with over 20 vitamins and minerals including A and C, making them not only scrumptious but also a healthy treat. They can be used for everything from salads and smoothies to fresh salsas and luscious desserts. For the best experience, these mangos should be cut in half, sliced while in the peel and then scooped out. Bring home a bag of Yellow Honey Mangos today.', 'Deliciously fresh, sweet and juicy. Packed with sweet tropical flavor. Makes a healthy snack.', 'Unbranded', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2143745234, 'Bulk Lemons', 0.58, 'deleted_810343020616', 'short description is not available', 'Medium Lemon', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2157109169, 'Taylor Farms Fruit Bowl W/coconut 10 Oz', 5.97, '030223038283', 'Introducing our mouthwatering Taylor Farms Fruit Bowl with coconut, a perfect blend of fresh, wholesome ingredients to satisfy your taste buds and nutritional needs. This bountiful fruit bowl features fresh cut ingredients, it is the ultimate choice for parties, picnics, or a nutritious snack. Relish the delightful harmony of flavors and textures while enjoying the benefits of fresh, quality produce.', 'Taylor Farms Fruit Bowl with Coconut 10 Oz Blend of Fresh and Wholesome ingredients Fruit Bowl that Features Fresh Ingredients', 'Taylor Farms', 'https://i5.walmartimages.com/asr/ae5054c0-ea2a-4df8-a02d-270f2953352d.13e364e09be22fcef911facdd6c870d2.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ae5054c0-ea2a-4df8-a02d-270f2953352d.13e364e09be22fcef911facdd6c870d2.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ae5054c0-ea2a-4df8-a02d-270f2953352d.13e364e09be22fcef911facdd6c870d2.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2183980195, 'Sliced Sweet Apples 1.75oz', 1, '649632001841', 'Enjoy a convenient, fresh snack at home or on-the-go. This snack pack features fresh cut red sweet apples. Make snack time fresh and easy with Sliced Sweet Apples it contains 1.75 ounces.', 'Sliced Sweet Apples 1.75oz', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2203737783, 'Freshness Guaranteed Seasonal Fruit Blend 16 Oz', 7.97, 'deleted_717524792099', 'Enjoy a healthy snack with an assortment of refreshing fruits in this Fruit blend.Arranged in a transparent tray with a lid. Tender and sweet, these different fruits provide you with many essential nutrients you need every day, along with a blend of different flavors. The pre-cut fruits also make it a convenient option for snacking. For a special treat, use them to make a delicious yogurt parfait or a tasty fruit salad. Keep refrigerated until ready to enjoy. Add some fresh fruit to your daily menu today with this Fruit Blend.', 'Freshness Guaranteed Seasonal Fruit Blend 16 Oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2236861684, 'Fresh Mighty Red Strawberries, 20 oz Container', 5.47, '812049005157', 'The sweet, juicy flavor of Fresh Mighty Red Strawberries make them a refreshing and delicious treat. These strawberries are larger than normal strawberries, making them perfect for dipping in chocolate. Decorate them with white-chocolate drizzle, crushed nuts, chocolate sprinkles, and more for a special touch. They are great for special occasions such as Valentine’s Day, Easter, and Mother’s Day or strawberry desserts. They contain essential vitamins and nutrients like vitamin C, dietary fiber, potassium, vitamin B and magnesium, making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Mighty Red Strawberries today and savor the delectable flavor.', 'Sweet and juicy treat for all ages Larger than normal strawberries Perfect for dipping in chocolate Decorate them with white chocolate drizzle, crushed nuts, chocolate sprinkles for a strawberry dessert Contain essential vitamins and nutrients Prior to serving gently wash them and remove leafy cap Refrigerate your strawberries in the original container to maintain freshness, they should approximately last 3-5 days after purchase', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/8fdba577-a091-4d41-afad-9ed9628023ce.caeb8b4457242a6f0927aa459595512b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8fdba577-a091-4d41-afad-9ed9628023ce.caeb8b4457242a6f0927aa459595512b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8fdba577-a091-4d41-afad-9ed9628023ce.caeb8b4457242a6f0927aa459595512b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2253140533, 'Fresh Sugarbee Apples, 2lb Bag', 4.72, 'deleted_812333012793', 'Introducing the SugarBee apple - a crunchy and juicy delight that\'s perfect for snacking, baking, or cooking. Our apples are grown with love and care, hand-picked at their peak ripeness for maximum natural sweetness. With a unique combination of sweet and tart flavors, the SugarBee apple is sure to become your new favorite. Plus, they\'re non-GMO and sustainably grown, making them a nutritious and eco-friendly choice. Order now and experience the taste of pure goodness!', 'Crunchy Fresh Apples Min. Dia. 63 mm (2-1/2 inch). Oh honey, that\'s good! U.S. Extra fancy. May be coated with food-grade vegetable and/or shellac-based wax resin to maintain freshness. Fresh Produce of USA. Whole and made with organic ingredients.', 'SugarBee', 'https://i5.walmartimages.com/asr/a6a29b9a-2fb7-439a-b837-911c8bb2b7fc.8f9f8170b8c55867216cd5be38f2cb75.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6a29b9a-2fb7-439a-b837-911c8bb2b7fc.8f9f8170b8c55867216cd5be38f2cb75.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a6a29b9a-2fb7-439a-b837-911c8bb2b7fc.8f9f8170b8c55867216cd5be38f2cb75.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2295105827, 'Fresh Extra Small Greenhouse Grown Strawberries, 12 oz Container', 2.17, '699058999918', 'Add some sweetness to your day with extra small, snacking-sized greenhouse grown strawberries. These fun, sweet and flavorful strawberries are part of our premium selection. Each small strawberry is great to be enjoyed as a yummy and healthy snack. Serve up a bowl plain or topped with whipped cream for a delicious treat. Add to fruit salads, ice cream, yogurt or milkshakes. Use it to top off cereal, pancakes or waffles. They contain essential vitamins and nutrients like vitamin C, dietary fiber, potassium, vitamin B and magnesium, making them perfect for a healthy diet. It is also great as a topping on cheesecake and other dessert recipes. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use.', 'Fresh Extra Small Greenhouse Grown Strawberries, 12 oz Package: Premium selection Prior to serving gently wash the strawberries and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/3f63b4a1-93b8-4f9b-b41e-297e4ae95b8b.567e78bdadb679b76727d80d03a33aa1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3f63b4a1-93b8-4f9b-b41e-297e4ae95b8b.567e78bdadb679b76727d80d03a33aa1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3f63b4a1-93b8-4f9b-b41e-297e4ae95b8b.567e78bdadb679b76727d80d03a33aa1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2380214976, 'Taylor Farms Fruit Bowl with Watermelon, Cantaloupe, Pineapple, and Grapes, 40 oz Tray', 10.97, '030223038337', 'Taylor Farms fresh cut Fruit bowl in Plastic Tray. Ready to be opened and shared. It includes 40 ounces of assorted fruit.', 'Taylor Farms Fruit Bowl 40 Oz', 'Taylor Farms', 'https://i5.walmartimages.com/asr/93cb1aa3-05b3-46ec-869a-b474dc164c90.92064ee0c50b765612148ee48f6bacb7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/93cb1aa3-05b3-46ec-869a-b474dc164c90.92064ee0c50b765612148ee48f6bacb7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/93cb1aa3-05b3-46ec-869a-b474dc164c90.92064ee0c50b765612148ee48f6bacb7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2387305951, 'Welch\'s Fresh Black Plums - Sweet & Juicy Snack', 5.47, '095829211584', 'Experience the delightful taste of Welch\'s Fresh Black Plums, perfect for a healthy snack or as part of your favorite dishes. These sweet, juicy plums are packed with fiber, vitamin A, and other essential nutrients. Enjoy them fresh, as they are, or add them to salads for a burst of flavor. Each pound has approximately 3-4 plums, offering a meaty yet juicy texture for your enjoyment. Whether as a snack or ingredient, these plums enhance your diet with their unique taste and healthy benefits.', 'Welch\'s Fresh Black Plums provide a sweet and juicy experience. Approximately 3-4 plums per pound ensure fresh quality. Ideal for snacking or adding to salads and recipes. Rich source of vitamin A and essential nutrients. Fresh condition ensures optimal taste and texture. Enhances a healthy diet with fiber and vitamins.', 'Welch\'s', 'https://i5.walmartimages.com/asr/8fb9678b-cf67-4306-89c7-8756c5727941.022d54a44fab14367fdd71c846faca85.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8fb9678b-cf67-4306-89c7-8756c5727941.022d54a44fab14367fdd71c846faca85.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8fb9678b-cf67-4306-89c7-8756c5727941.022d54a44fab14367fdd71c846faca85.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2401603739, 'Taylor Farms Fresh Cut Mango, 10 oz Tray', 3.97, '030223034209', 'Freshness Guaranteed Mango in plastic tray. Has delicious fresh cut Mango slices it contains 10 ounces of mango.', 'Taylor Farms Mango 10 Oz', 'Taylor Farms', 'https://i5.walmartimages.com/asr/47177ecd-ae41-4070-8830-0274cb62544a.9be94ec9bb18f50ad63c71bcb1bafed3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/47177ecd-ae41-4070-8830-0274cb62544a.9be94ec9bb18f50ad63c71bcb1bafed3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/47177ecd-ae41-4070-8830-0274cb62544a.9be94ec9bb18f50ad63c71bcb1bafed3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2413650945, 'Fresh Navel Oranges, 4 lb Bag', 4.96, 'deleted_850029221111', 'Fresh Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 4 lb package.', 'Florida red grapefruit grown sustainably with respect to the environment. From get well gifts to congratulations gifts, it makes the perfect healthy gift. High in Vitamin C and A making it a healthy choice. Perfect blend of tart and sweet. Enjoy it for yourself or send it as a gift. Mailed straight from the grower in Indian River County Florida as fresh as it gets!', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2438543741, 'Freshness Guaranteed Sunshine Trio 16 Oz', 7.47, 'deleted_717524776945', 'short description is not available', 'Freshness Guaranteed Sunshine Trio 16 Oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2439709182, 'Fresh Navel Orange, lb', 0.97, '406585344018', 'Enjoy the juicy goodness of Fresh Navel Oranges (China Nebo). A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these navel oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Fresh Navel Oranges add flavor to any meal or beverage', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes', 'Unbranded', 'https://i5.walmartimages.com/asr/05a33b9e-e4f0-4b24-8ba0-28dc215544fe.95088f3c9af8ad72e4d74ecfeb07d36e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/05a33b9e-e4f0-4b24-8ba0-28dc215544fe.95088f3c9af8ad72e4d74ecfeb07d36e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/05a33b9e-e4f0-4b24-8ba0-28dc215544fe.95088f3c9af8ad72e4d74ecfeb07d36e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2482832018, 'Fresh Navel Oranges, 4 lb Bag', 4.96, 'deleted_605049623151', 'Stock up on several of these juicy Lemons to enjoy with each day while meal planning. Squeeze a few to make delicious homemade lemonade and provide a healthy dose of vitamin C to your diet. Drizzle lemon juice over fish or add it to your favorite sauces. Serve slices with your favorite cocktails and use when baking cakes, cookies and tarts. They are sold in-store at a per-unit price, so you can stock up on as many as you need. You can even buy just one single lemon at a time. Pair them with other fresh fruit from Walmart.', 'Florida red grapefruit grown sustainably with respect to the environment. From get well gifts to congratulations gifts, it makes the perfect healthy gift. High in Vitamin C and A making it a healthy choice. Perfect blend of tart and sweet. Enjoy it for yourself or send it as a gift. Mailed straight from the grower in Indian River County Florida as fresh as it gets!', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2569986501, 'Ingrilli 100% Lemon Juice from Concentrate, 7 Fl Oz Squeeze Bottles (Pack of 3)', 15.98, '642709101833', 'The Highest Product Standards From our orchard-to-bottle manufacturing process to our strict quality standards, we take pride in knowing that every bottle of Ingrilli products lives up to the Ingrilli family name. TRULY ORGANIC PRODUCTS At Ingrilli, we don’t just “label” our organic line as such – we live it. We test every batch of our organic products against common pesticides, and we have zero tolerance for any contamination or preservatives. That’s why we’ve earned the official USDA Organic seal of approval. NON-GMO Ingrilli is proud to be an official participant of the Non-GMO Project, and we are Non-GMO Project verified for all of our products. A TRADITION OF HIGH MANUFACTURING STANDARDS When we first opened our doors in 1880, we promised to deliver the highest-quality, freshest products on the market – and we still live to that standard today. That’s why we only use the freshest fruit and the latest production equipment, processes, and facilities to produce every bottle of Ingrilli juice on the shelves', 'FRESH FLAVOR, FRESH TASTE: Made from Argentinian and Brazilian 100% lemon juice concentrate, Ingrilli tastes as fresh as cutting into fresh lemons VERSATILE FLAVOR: Ingrilli 100% Lemon Juice can be used for cooking, baking, salads and drink mixers. GOOD FOR EVERYONE: Ingrilli 100% Lemon Juice is Non-GMO Project Verified, OU kosher certified, Vegan Certified and Gluten-Free', 'Ingrilli', 'https://i5.walmartimages.com/asr/531b1eb0-95fc-453d-89b9-56f16af423a5.d1d46245d2a47ee56120c38cf9dc9044.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/531b1eb0-95fc-453d-89b9-56f16af423a5.d1d46245d2a47ee56120c38cf9dc9044.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/531b1eb0-95fc-453d-89b9-56f16af423a5.d1d46245d2a47ee56120c38cf9dc9044.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2570036938, 'Fresh Driscoll\'s Sweetest Batch Strawberries, 14 oz Container', 5.52, '715756200542', 'The berry bursting with flavors of strawberry candy and fruit punch, these juicy strawberries are selected for their extra-sweet deliciousness. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell to keep them fresh and ready for use.', 'Premium selection Only Driscoll\'s grows Sweetest Batch berries from one proprietary berry variety. Bursting with flavors of strawberry candy and fruit punch, these juicy strawberries are selected for their extra-sweet deliciousness. Refrigerate your strawberries in the original Clam Shell tray to maintain freshness Delicious on their own as a healthy snack or as part of a recipe Rich in vitamin C', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/d4cc2d9e-9131-4451-aa01-febbb93a447b.14ec8c66ee7e19906d7717b9e841e0e5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4cc2d9e-9131-4451-aa01-febbb93a447b.14ec8c66ee7e19906d7717b9e841e0e5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d4cc2d9e-9131-4451-aa01-febbb93a447b.14ec8c66ee7e19906d7717b9e841e0e5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2597709776, 'Taylor Farms Fresh Cut Pineapple, 32 oz Tray', 8.66, '030223038023', 'Taylor Farms fresh cut Pineapple 32 ounces in a plastic container ready to be opened and shared.', 'Taylor Farms Pineapple 32 Oz', 'Taylor Farms', 'https://i5.walmartimages.com/asr/08cb7ce2-6194-472f-bec9-912d1847f661.8b311952cf8f8a556a4985e2e4227bab.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/08cb7ce2-6194-472f-bec9-912d1847f661.8b311952cf8f8a556a4985e2e4227bab.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/08cb7ce2-6194-472f-bec9-912d1847f661.8b311952cf8f8a556a4985e2e4227bab.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2617193510, 'Fresh Navel Oranges, 4 lb Bag', 4.96, 'deleted_845857001431', 'Fresh Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 4 lb package.', 'Florida red grapefruit grown sustainably with respect to the environment. From get well gifts to congratulations gifts, it makes the perfect healthy gift. High in Vitamin C and A making it a healthy choice. Perfect blend of tart and sweet. Enjoy it for yourself or send it as a gift. Mailed straight from the grower in Indian River County Florida as fresh as it gets!', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2663226391, 'Fresh Driscoll\'s Sweetest Batch Strawberries, 10 oz Container', 3.33, '715756200511', 'The berry bursting with flavors of strawberry candy and fruit punch, these juicy strawberries are selected for their extra-sweet deliciousness. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell to keep them fresh and ready for use.', 'Premium selection Sourced with high quality standards Recommended to wash before consuming Refrigerate your strawberries in the original Clam Shell tray to maintain freshness Keep dry for optimal freshness Delicious on their own as a healthy snack or as part of a recipe Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/185c27d2-ca68-425c-ad91-2105a7cbabea.50f669434dbcd90b3a8d40c6d048ecc4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/185c27d2-ca68-425c-ad91-2105a7cbabea.50f669434dbcd90b3a8d40c6d048ecc4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/185c27d2-ca68-425c-ad91-2105a7cbabea.50f669434dbcd90b3a8d40c6d048ecc4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2710388201, 'Fresh Driscoll\'s Sweetest Batch Raspberries, 6 oz Container', 4.99, '715756100637', 'Sweetest batch raspberries are a special variety selected for their extra-sweet deliciousness. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as a topping for pancakes, bake them in a mouthwatering bread, mix them with lemon and water for a flavorful and refreshing drink. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them and enjoy the fresh taste. Refrigerate the berries in original Clam Shell to keep them fresh and ready for use.', 'Premium selection Only Driscoll\'s grows Sweetest Batch berries from proprietary berry variety Bursting with delicious raspberry flavor, these juicy raspberries are selected for their extra-sweet deliciousness. Refrigerate your raspberries in the original Clam Shell tray to maintain freshness', 'Driscoll\'s Inc.', 'https://i5.walmartimages.com/asr/8f2cd517-b15b-4ac8-a715-149b6e315a91.ce2d785d0b327d01b97fe7875f35e41f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8f2cd517-b15b-4ac8-a715-149b6e315a91.ce2d785d0b327d01b97fe7875f35e41f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8f2cd517-b15b-4ac8-a715-149b6e315a91.ce2d785d0b327d01b97fe7875f35e41f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2726721698, 'Fresh Florida Sapodilla, Each', 3.33, '897505002093', 'Discover the sweet and creamy flavor of fresh florida sapodilla, a tropical fruit with a unique taste and texture. with its brown skin and soft, buttery pulp, this sapodilla is perfect for snacking, adding to salads, or using in recipes. try it today and experience the exotic taste of florida!', 'Sweet and Creamy: Sapodillas are known for their sweet and creamy flesh, perfect for snacking or using in recipes. High in Fiber: Sapodillas are a good source of dietary fiber, making them a great choice for those looking to increase their fiber intake. No Added Preservatives: Fresh Florida Sapodillas are free from added preservatives, ensuring you get the best flavor and texture. Fresh Florida Sapodilla', 'Fresh Produce', 'https://i5.walmartimages.com/asr/4bbd11c4-573a-4b82-8a75-a438df7293b8.3eb91bc1f0898735c780e9a6067cc7fa.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4bbd11c4-573a-4b82-8a75-a438df7293b8.3eb91bc1f0898735c780e9a6067cc7fa.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4bbd11c4-573a-4b82-8a75-a438df7293b8.3eb91bc1f0898735c780e9a6067cc7fa.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2738417602, 'Taylor Farms Fresh Cut Watermelon, 16 oz Tray', 3.84, '030223034117', 'Experience a burst of summertime goodness with this delicious Freshness Guaranteed Watermelon. This pre-cut ripe watermelon is juicy, sweet, and refreshing to the taste. In addition, watermelons are a great natural source of vitamins A and C. Carry them with you and eat them straight out of the tray any time you want, at home, or on-the-go. Pair them with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use them as a naturally sweet ingredient in a fruit salad. Add some fresh fruit to your daily menu with this Freshness Guaranteed Watermelon.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Watermelon, 16 oz Tray: Pre-cut watermelon chunks Convenient take-and-go packaging Good source of vitamins A and C No preservatives, artificial colors or artificial flavors Perfect for your next backyard cookout Net weight: 16 oz Sweet and Juicy', 'Taylor Farms', 'https://i5.walmartimages.com/asr/f01c3f51-10f7-4f52-ab3d-5eb1b87a24b4.546b7f6eb29df5f8c35c73f813cf7818.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f01c3f51-10f7-4f52-ab3d-5eb1b87a24b4.546b7f6eb29df5f8c35c73f813cf7818.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f01c3f51-10f7-4f52-ab3d-5eb1b87a24b4.546b7f6eb29df5f8c35c73f813cf7818.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2748105343, 'Mandarins 5lb Bag', 7.97, 'deleted_091636000274', 'You peel \'em, then you eat \'em. There isn\'t a simpler snack. They are quick, easy, nutritious and delicious. Happy hour, lunch hour, power hour, any hour–mandarins bring those extra feels to life', 'Easy Peel Seedless Sweet and Juicy', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/bd991d70-6535-491d-af5b-0f42e5854444.728446b06766cc2da1b1dc73908e13d0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd991d70-6535-491d-af5b-0f42e5854444.728446b06766cc2da1b1dc73908e13d0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/bd991d70-6535-491d-af5b-0f42e5854444.728446b06766cc2da1b1dc73908e13d0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2778650860, 'Cantaloupe', 2.5, '406585080961', 'short description is not available', 'Cantaloupe', 'Unbranded', 'https://i5.walmartimages.com/asr/ec0bf0b8-528f-4c46-944b-0d398d032554.5d6f2a67795900032c4b0d32ff2044fc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec0bf0b8-528f-4c46-944b-0d398d032554.5d6f2a67795900032c4b0d32ff2044fc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ec0bf0b8-528f-4c46-944b-0d398d032554.5d6f2a67795900032c4b0d32ff2044fc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2788874263, 'Fresh Red Grapes', 117.28, 'deleted_850550002036', 'Treat yourself to the delicious, juicy flavor of Fresh Red Grapes. These grapes are bursting with flavor, so you can easily enjoy a handful as a fresh snack any time of day. Enjoy them for breakfast, lunch, dinner, or dessert. They are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the fresh taste of Fresh Red Grapes.', 'Fresh Red Grapes: Red grapes that are bursting with delicious flavor Enjoy a handful as a fresh snack any time of day Pair with your favorite meats and cheeses for a charcuterie appetizer Incorporate into fruit salad Perfect for quick, easy and healthy snacks Freeze them and use as ice cubes that won\'t melt', 'GRAPE', 'https://i5.walmartimages.com/asr/5a44901d-7c8a-4a2a-93b4-6e7fc95f51e2_1.c4f0beae139d3380b74c19e82e90f2fe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a44901d-7c8a-4a2a-93b4-6e7fc95f51e2_1.c4f0beae139d3380b74c19e82e90f2fe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a44901d-7c8a-4a2a-93b4-6e7fc95f51e2_1.c4f0beae139d3380b74c19e82e90f2fe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2799892982, 'Fieldpack Unbranded Papaya', 1.14, 'deleted_857962007376', 'Get flavor and nutrition with our Fresh Papaya. Papaya is a tropical fruit that originated in the tropics of the Americas and is known to be a great source of vitamins C, A, fiber, and antioxidants. When ripe, this fruit has a butter-like texture with a fairly sweet flavor similar to cantaloupe and can be eaten raw, without skin or seeds. Papaya can be prepared in a variety of ways; you can mix them with grapefruit and avocado for a bright summer salad, add them to a zesty salsa for some sweetness, freeze them and turn them into refreshing popsicle spears, or bake them in the oven with a melted brown sugar mixture. The sky\'s the limit! Get ready for a taste-bud party with Fresh Papaya.', 'Creamy, butter-like flavor when ripe Rich in vitamins A, C, fiber, and antioxidants Fairly sweet flavor like cantaloupe and mango Great addition to smoothies, salads, salsa, and more Delicious and nutritious', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2817506512, 'Freshness Guaranteed Melon Trio Medium', 8.98, '263526000002', 'short description is not available', 'Freshness Guaranteed Melon Trio Medium', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2829893059, 'Rancho Meladuco California-Grown Medjool Dates, Whole Fresh Un-Pitted, 1 lb. Box Dates', 10.9, '851418008139', 'Did you know dates are the only Superfood that tastes like Candy? Soft and chewy, dates taste like caramel and brown sugar. Our 1 lb. box of sweet and delicious California Grown Medjool Dates will become your new favorite go-to sweet treat. Dates are a nutrient dense, bite sized fruit grown in the warm sunny deserts of Southern California under our plentiful Sunshine. Celebrating the history of California\'s date farms and love affair with dates, you\'ll find a recipe for the classic roadside date shake right on the box. Dates are the better-for-you natural \"candy\", providing sustained energy and fuel for both competitive athletes and everyday people alike, and are versatile enough to add a touch of sweetness to countless dishes and recipes. Dates contain more potassium ounce for ounce than bananas and are a good source of daily fiber as well as containing iron, magnesium and other essential vitamins and nutrients. Despite their sweetness dates are lower on the glycemic index for people monitoring their blood sugar. We love our dates stuffed with a little crunchy nut butter, ice cream, or even tangy blue cheese. Chop them and add to oatmeal, yogurt, salads, or savory dishes or add them to your baked goods for a nutrient dense natural sweetener. Dates are one of the top trending foods for good reason and we\'re sure you\'ll fall in love with dates too! These dates contain a seed so please enjoy with care and remove the seed before eating. Allergen warning: our dates are packed in a facility that may also process tree nuts & peanuts. Allergens not contained: free of soy, gluten, egg, dairy, casein. Condition: Whole, un-pitted Organic Medjool dates. No sugar added. Shelf stable, but to enhance freshness store in a cool location.', 'One pound box of whole, un-pitted Medjool Dates Approximately 20-25 dates per pound Contains a seed, remove before eating. Tastes like caramel and brown sugar with hints of cinnamon Naturally sweet, whole fruit and nutrient dense superfood No added sugar CONTAINS WHOLE, UN-PITTED CALIFORNIA GROWN MEDJOOL DATES- Grown and hand picked in the Coachella Valley of Southern California. Our Dates are a delicious and nutritious snack that is perfect for any occasion. Our Dates are naturally SWEET and SOFT, and are packed with essential vitamins and minerals. They are a great source of dietary fibers, and are a great way to satisfy your sweet tooth without the guilt. Enjoy them as a snack, or add them to your favorite recipes for a delicous and healthy treat.', 'Rancho Meladuco Date Farm', 'https://i5.walmartimages.com/asr/4b1f0262-0812-4cfb-9787-f20dadcc6e10.4937c4155238eeb5f3dac0fe1d377544.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4b1f0262-0812-4cfb-9787-f20dadcc6e10.4937c4155238eeb5f3dac0fe1d377544.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4b1f0262-0812-4cfb-9787-f20dadcc6e10.4937c4155238eeb5f3dac0fe1d377544.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2838447209, '2.5lbs Organic Pitted Dates | 100% Algerian Deglet Noor | Certified ORGANIC, NON-GMO, VEGAN, KOSHER, naturally sweet and Gluten-free, NO sugar added, NO sulfurs or preservatives, Nut-Free.', 17.99, '860003981009', 'The Soleil Deglet Noor dates bring you a taste of tradition, purity, and nutritional goodness—all in one bite. No matter if you’re seeking organic dates pitted unsweetened or looking to stock up on dates bulk, this is the quality you’ve been waiting for. USDA ORGANIC CERTIFIED & ALL-NATURAL These halal dates are USDA Organic certified and made with nothing but nature—no added sugar, no sulfurs, no preservatives. Our pitted dates organic no sugar added are also non-GMO, gluten-free, and nut-free, making them a clean, guilt-free snack for any lifestyle. AUTHENTIC ALGERIAN DEGLET NOOR Harvested from Algeria’s sunlit oases, our Deglet dates—also known as Deglet Noor dates organic pitted—are cherished for their light golden translucence and firm texture. As one of the most sought-after dry dates, they’ve earned their title as “the Queen of all dates.” DISTINCTIVE FLAVOR & TEXTURE With just the right amount of medium sweetness, these dates organic offer a chewy bite and finish with a nutty note similar to roasted peanuts. They’re perfect straight out of the bag or added to recipes. NATURALLY ENERGIZING Rich in vitamins, minerals, and balanced natural sugars, these organic dates pitted unsweetened provide lasting energy. They’re an ideal snack, especially great dates for pregnancy, active lifestyles, or whenever you crave something sweet. PURITY YOU CAN TASTE From datiles naturales organicos to datiles organicos sin azucar, these seedless snacks are known across cultures for their purity and nutritional value. Available in organic dates bulk package for everyday enjoyment. Enjoy the heritage and flavor with the Soleil Deglet Noor dates organic pitted — your perfect choice for clean, nourishing, and versatile snacking. ORDER yours NOW. Whether you\'re stocking up on deglet dates bulk or trying dry dates for the first time, there\'s no better way to snack naturally.', 'USDA Organic Certified – Grown without synthetic pesticides or fertilizers, the Soleil organic pitted dates meet the highest organic standards and are fully USDA Organic certified. Premium Deglet Noor Variety – Known as \"the Queen of all dates,\" Deglet Noor organic dates (meaning \"dates of light\") are prized for their translucent appearance, medium sweetness, and firm texture. Delicious Nutty Flavor – These dried dates pitted no sugar added taste yummy and offer a pleasant, nutty aftertaste reminiscent of lightly roasted peanuts, making them a naturally satisfying treat. Nutrient-Rich Energy Boost – With balanced natural sugars, vitamins, and essential minerals, the organic dates pitted snacks make a healthy option when craving something sweet or a quick source of energy. 100% Natural & Allergen-Friendly – Non-GMO, gluten-free, nut-free, with no added sugar, sulfurs, or preservatives, these seedless dates are a clean and guilt-free indulgence. Healthy natural and delicious snack for the whole family!', 'Soleil', 'https://i5.walmartimages.com/asr/38566fae-5327-4b0e-b49c-e4de24fecc0c.0a8d2f5746cbcda5b716b39ea34c7017.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/38566fae-5327-4b0e-b49c-e4de24fecc0c.0a8d2f5746cbcda5b716b39ea34c7017.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/38566fae-5327-4b0e-b49c-e4de24fecc0c.0a8d2f5746cbcda5b716b39ea34c7017.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2857471990, 'Freshness Guaranteed Fruit Mix Large', 10.98, '263522000006', 'Enjoy a healthy snack with an assortment of popular fruits in this Freshness Guaranteed Fruit Mix. Arranged to perfection in a partitioned tray with a transparent lid. Tender and sweet, these different fruits provide you with the essential nutrients you need every day as you go on with your busy life. The separate partitions and the pre-cut fruits also make it a convenient option for snacking. Enjoy the sweet goodness of this Freshness Guaranteed Fruit Mix. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Fruit Mix Large', 'Freshness Guaranteed', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2878973462, 'Freshness Guaranteed Fresh Fruit Medley Bowl, 10 oz', 5.97, '194346097180', 'Experience a burst of fresh flavor with this Freshness Guaranteed Fresh Fruit Medley Bowl. This delicious medley contains strawberries, blueberries and coconut and blueberries arranged in a transparent tray with a lid. Carry them with you and eat them straight out of the tray any time you want, at home or on the go. You can also use them to top desserts and ice creams, in a fruit salad or blend them with ice to make smoothies. Add some fresh fruit to your day with this Freshness Guaranteed Fresh Fruit Medley Bowl. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Fresh Fruit Medley Bowl, 10 oz Delicious mix of strawberries, blueberries, and coconuts Sweet, refreshing treat Great for breakfast, lunch, dessert, or when you want a snack Ingredients may vary by season Enjoy right out of the container, blend into a smoothie, or use as a fresh topping for ice cream and more Share with friends and family or keep for yourself Comes in a re-closable container to help maintain freshness', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/b0f678f1-7013-4d96-8246-a276a875f782.943dda685e9845a4b5860c0f72b1280f.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b0f678f1-7013-4d96-8246-a276a875f782.943dda685e9845a4b5860c0f72b1280f.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b0f678f1-7013-4d96-8246-a276a875f782.943dda685e9845a4b5860c0f72b1280f.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2891463141, 'Melon Trio 16 Oz', 6.47, 'deleted_717524415806', 'short description is not available', 'Melon Trio 16 Oz', 'Unbranded', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2892696341, 'Superfresh Granny Smith Kids Apples, 2lb - Fresh Tart & Crisp Variety', 5.46, '883391000794', 'Discover the irresistible flavor of Superfresh Granny Smith Apples. These crisp and juicy apples are known for their tart, subtly sweet taste and firm texture. Perfect for various recipes, they can be used in both savory and sweet dishes. Enjoy them fresh, as a snack, or incorporate them into your meals for breakfast, lunch, and dinner. Cook them with butter and spices for a simple delight, or create an apple pie that everyone loves. Superfresh Granny Smith Apples are ideal for every occasion and meal.', 'Firm and juicy with a crisp texture and a tart, acidic, yet subtly sweet flavor Perfect for breakfast, lunch, dinner, or dessert Enjoy fresh as a snack or cook in a skillet for easy dishes Create sweet treats like apple pies or savory dishes like apple slaw Flexible ingredient for a wide range of recipes Naturally grown and handpicked for the best quality', 'Superfresh Kids', 'https://i5.walmartimages.com/asr/ddb68a2a-e882-4080-9913-b66b38c8e217.572b8479db3d0b2a326737e498ad1730.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ddb68a2a-e882-4080-9913-b66b38c8e217.572b8479db3d0b2a326737e498ad1730.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ddb68a2a-e882-4080-9913-b66b38c8e217.572b8479db3d0b2a326737e498ad1730.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2918254984, 'Fresh Driscoll\'s Tropical Bliss Strawberries, 9 oz Container', 3.99, '715756211333', 'The berry bursting with natural flavors of fruit punch, pineapple and passionfruit, these juicy strawberries are selected for their extra-sweet deliciousness. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, or mix them with cucumbers for a light and flavorful salad. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use.', 'Premium selection Only Driscoll\'s grows Tropical Bliss Strawberries from one proprietary berry variety. Driscoll\'s Tropical Bliss Strawberries combine the classic flavor or sweet berries and refreshing notes of tropical punch, with hints of pineapple and passionfruit. With naturally white and yellow hues, they are perfectly ripe and intensely sweet at first, balanced by a crisp finish. Refrigerate your strawberries in the original Clam Shell tray to maintain freshness Delicious on their own as a healthy snack or as part of a recipe Rich in vitamin C', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/1ebc796c-b840-4e08-8c39-300760d84f57.c4c6ec410d9547a3a86630a4b703f559.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1ebc796c-b840-4e08-8c39-300760d84f57.c4c6ec410d9547a3a86630a4b703f559.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1ebc796c-b840-4e08-8c39-300760d84f57.c4c6ec410d9547a3a86630a4b703f559.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2927637126, 'Fieldpack Unbranded Fresh Blueberries Dry Pint', 3.96, '793573199850', 'short description is not available', 'Fieldpack Unbranded Fresh Blueberries Dry Pint', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (2948406945, 'Fresh Strawberries, 1 lb', 3.24, '852575008741', 'The sweet, juicy flavor of Fresh Strawberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like, vitamin C, dietary fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Strawberries today and savor the delectable flavor.', 'Prior to serving gently wash the fruit and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/b54a64ad-e961-46cf-b60c-bc763716fb0b.a481cdfd237c5ab5438d5c9e90bead07.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b54a64ad-e961-46cf-b60c-bc763716fb0b.a481cdfd237c5ab5438d5c9e90bead07.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b54a64ad-e961-46cf-b60c-bc763716fb0b.a481cdfd237c5ab5438d5c9e90bead07.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3013821133, 'Fresh Blueberries, 6 oz', 4.12, '850011052044', 'Fresh Blueberries are a delightful and nutritious treat that brings a burst of flavor to any dish. These plump and juicy berries are picked at the peak of freshness, ensuring a sweet and tangy taste that is hard to resist. Perfect for snacking, baking, or adding to your favorite recipes, these blueberries are a versatile fruit that can be enjoyed in countless ways. Whether you sprinkle them on top of your morning cereal, blend them into a smoothie, or bake them into a delicious pie, Fresh Blueberries are sure to satisfy your cravings for a healthy and delicious snack.', 'Are you ready to experience the vibrant taste and health benefits of Fresh Blueberries? These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Blueberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of blueberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack, or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these blue gems into your baking endeavors, whether it\'s muffins, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are blueberries delicious, but they also offer an array of health benefits. Loaded with antioxidants, vitamins, and dietary fiber, blueberries are known to promote heart health, support brain function, and boost the immune system. They are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Blueberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Blueberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness. Fresh', 'Fresh Produce', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3046250946, 'Welch Fresh Black Seedless Grapes, 3lb', 9.97, '095829210556', 'Treat yourself to the delicious, juicy flavor of Fresh Black Seedless Grapes. These grapes are bursting with flavor and are completely seedless, so you can easily enjoy a handful as a fresh snack any time of day. Prized for their lush, juicy pulp, very sweet flavors, and highly aromatic skins that offer a pleasant chewiness, they are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto.', 'Welch fresh black Seedless Grape Wash before use Keep refrigerated', 'Welch\'s', 'https://i5.walmartimages.com/asr/04f6076f-bc86-46c9-a597-5bd2f455c266.ec41895adce76827f713d880764e05a9.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/04f6076f-bc86-46c9-a597-5bd2f455c266.ec41895adce76827f713d880764e05a9.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/04f6076f-bc86-46c9-a597-5bd2f455c266.ec41895adce76827f713d880764e05a9.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3048415499, 'Ingrilli 100% Lemon Juice from Concentrate, 7 Fl Oz Squeeze Bottles (Pack of 6)', 21.98, '642709101840', 'The Highest Product Standards From our orchard-to-bottle manufacturing process to our strict quality standards, we take pride in knowing that every bottle of Ingrilli products lives up to the Ingrilli family name. TRULY ORGANIC PRODUCTS At Ingrilli, we don’t just “label” our organic line as such – we live it. We test every batch of our organic products against common pesticides, and we have zero tolerance for any contamination or preservatives. That’s why we’ve earned the official USDA Organic seal of approval. NON-GMO Ingrilli is proud to be an official participant of the Non-GMO Project, and we are Non-GMO Project verified for all of our products. A TRADITION OF HIGH MANUFACTURING STANDARDS When we first opened our doors in 1880, we promised to deliver the highest-quality, freshest products on the market – and we still live to that standard today. That’s why we only use the freshest fruit and the latest production equipment, processes, and facilities to produce every bottle of Ingrilli juice on the shelves', 'FRESH FLAVOR, FRESH TASTE: Made from Argentinian and Brazilian 100% lemon juice concentrate, Ingrilli tastes as fresh as cutting into fresh lemons VERSATILE FLAVOR: Ingrilli 100% Lemon Juice can be used for cooking, baking, salads and drink mixers. GOOD FOR EVERYONE: Ingrilli 100% Lemon Juice is Non-GMO Project Verified, OU kosher certified, Vegan Certified and Gluten-Free', 'Ingrilli', 'https://i5.walmartimages.com/asr/531b1eb0-95fc-453d-89b9-56f16af423a5.d1d46245d2a47ee56120c38cf9dc9044.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/531b1eb0-95fc-453d-89b9-56f16af423a5.d1d46245d2a47ee56120c38cf9dc9044.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/531b1eb0-95fc-453d-89b9-56f16af423a5.d1d46245d2a47ee56120c38cf9dc9044.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3109520666, 'Nature Fresh USDA Organic Greenhouse Grown Strawberries, 12 oz Container', 6.98, '689259005723', 'The sweet, juicy flavor of Fresh USDA Organic Greenhouse Grown Strawberries make them a refreshing and delicious treat. These sweet and flavorful strawberries are our premium selection. They are great for homemade smoothies, desserts, or enjoying as a yummy and healthy snack. Serve up a bowl plain or topped with whipped cream for a delicious treat. Add to fruit salads, ice cream, yogurt or milkshakes. Use it to top off cereal, pancakes or waffles. It is also great as a topping for strawberry cheesecake and other dessert recipes. These organic berries contain essential vitamins and nutrients like, vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use.', 'Premium selection Certified organic Prior to serving gently wash the strawberries and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'Nature Fresh', 'https://i5.walmartimages.com/asr/eb86f20b-ffe7-4a37-8ec3-d7b714915603.f01b04d31fe002da0f41d0e4f43348a6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eb86f20b-ffe7-4a37-8ec3-d7b714915603.f01b04d31fe002da0f41d0e4f43348a6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/eb86f20b-ffe7-4a37-8ec3-d7b714915603.f01b04d31fe002da0f41d0e4f43348a6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3132157567, 'Del Monte Pineapple Mango Chunks in Extra Light Syrup, 52', 8.97, '024000258209', 'Del Monte Pineapple Mango Chunks in Extra Light Syrup, 52 oz Jar makes it easy to enjoy high quality fruit in minutes. Pineapple and mango chunks are carefully packed in extra light syrup for a ready to eat fruit snack you can feel good about. Del Monte Pineapple Mango Chunks in Extra Light Syrup offers a good source of Vitamin C, making a convenient, wholesome and ready to eat fruit option for busy nights. Picked and packed at the peak of freshness, and immersed in extra light syrup, the Del Monte jarred fruit is ideal as part of a quick lunch snack or as a flavorful addition to fruit cocktail or salads. Each jar is easy to open, reseal, and store for a convenient fruit snack whenever you need delicious fruit on-the-go. Bring wholesome goodness to your family with Del Monte!', 'One 52 oz jar of Del Monte Pineapple Mango Chunks in Extra Light Syrup Del Monte Pineapple Mango Chunks in Extra Light Syrup offers a quick and easy way to have a citrus fruit snack in just minutes Made with pineapple and mango picked at the peak of freshness and immersed in extra light syrup Del Monte Pineapple Mango Chunks in Extra Light Syrup is ideal for fruit cocktail or salads Bring wholesome goodness to your family with Del Monte Pineapple Mango Chunks in Extra Light Syrup', 'Del Monte', 'https://i5.walmartimages.com/asr/5904b2c7-5c23-45a1-85d6-cec38c052ae0.12bb5a1debf27855b50f07921a11b676.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5904b2c7-5c23-45a1-85d6-cec38c052ae0.12bb5a1debf27855b50f07921a11b676.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5904b2c7-5c23-45a1-85d6-cec38c052ae0.12bb5a1debf27855b50f07921a11b676.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3194841369, 'Freshness Guaranteed Fruit Mix, 32 oz', 7.97, '194346121526', 'Indulge in a burst of fruity goodness with Freshness Guaranteed Fruit Mix! This delectable blend of cantaloupe, grapes, and blueberries is perfect for snacking, potlucks, and dinner parties. You can also use it to add a sweet, flavorful touch to your desserts, ice creams, fruit salads, or smoothies. Packed with essential nutrients, this tender and sweet fruit mix offers a medley of flavors that will leave your taste buds craving for more. Treat yourself to some fresh fruits every day with Freshness Guaranteed Fruit Mix. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Fruit Mix, 32 oz Delicious blend of cantaloupe, grapes, and blueberries Bring the container to a potluck, dinner party, or enjoy some straight out of the container Use to top desserts and ice creams, in a fruit salad, or blend them with ice to make smoothies', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/886b4c94-b246-46a4-aae8-bfad30a3b6ac.c9f318b45c967c031be8a53c557fd762.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/886b4c94-b246-46a4-aae8-bfad30a3b6ac.c9f318b45c967c031be8a53c557fd762.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/886b4c94-b246-46a4-aae8-bfad30a3b6ac.c9f318b45c967c031be8a53c557fd762.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3255413172, 'Fresh Apricots, 1 lb', 3.98, '033383402505', 'Treat everyone to the sweet taste of Fresh California Grown Apricots. These apricots are great to pack in lunches or to hand out to the kids as a tasty after-school snack. Add these apricots to a fruit salad to serve at your next party or to a delectable salad as a sweet topping. Serve them with cheese, salami, and almonds for a wonderful picnic cheese plate. You could also slice them to top your yogurt and granola for a healthy breakfast, or even make a tasty apricot crumble dessert for your next dinner party. The culinary opportunities are endless with Fresh California Grown Apricots.', 'Fresh California Grown Apricots, 16 oz Clam Shell Enjoy on their own as a satisfying snack Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Slice as a sweet topping for waffles or pancakes Add to iced tea to create a refreshing summertime flavor', 'Produce UB', 'https://i5.walmartimages.com/asr/58f608b4-1e61-4e2d-b399-29535b43cac3.699ad7120cdb554eaec886680d225c20.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f608b4-1e61-4e2d-b399-29535b43cac3.699ad7120cdb554eaec886680d225c20.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/58f608b4-1e61-4e2d-b399-29535b43cac3.699ad7120cdb554eaec886680d225c20.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3273044853, 'Fresh Navel Oranges, 4 lb Bag', 4.96, 'deleted_818654011712', 'Fresh Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 4 lb package.', 'A good addition to a healthy diet Easy to peel segments High in Vitamin C and A making it a healthy choice. Perfect blend of tart and sweet. Enjoy it for yourself or send it as a gift. Mailed straight from the grower in Indian River County Florida as fresh as it gets! Store fresh oranges at room temperature or refrigerate', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f74666a9-0646-412e-8ee6-752fde0782cc.09c0b695647707e0e81564cda80ceb95.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3324679059, 'Del Monte Red Grapefruit in Extra Light Syrup, 52 oz Jar', 8.97, '024000258162', 'Del Monte Red Grapefruit in Extra Light Syrup, 52 oz Jar makes it easy to enjoy high quality fruit in minutes. Red Grapefruit is packed with delicious, ripe grapefruit slices in extra light syrup for a ready to eat fruit snack you can feel good about. Del Monte Red Grapefruit in Extra Light Syrup offers a good source of Vitamin C, making a convenient, wholesome and ready to eat citrus fruit option for busy nights. Picked and packed at the peak of freshness, peeled and sectioned, and immersed in extra light syrup, the jarred fruit slices are ideal as part of a quick lunch snack or as a flavorful addition to fruit cocktail. Each jar is easy to open, reseal, and store for a convenient fruit snack whenever you need delicious fruit on-the-go. Bring wholesome goodness to your family with Del Monte!', 'One 52 oz jar of Del Monte Red Grapefruit in Extra Light Syrup Del Monte Red Grapefruit in Extra Light Syrup offers a quick and easy way to have a citrus fruit snack in just minutes Made with red grapefruit picked at the peak of freshness and immersed in extra light syrup Del Monte Red Grapefruit in Extra Light Syrup is ideal for fruit cocktail or salads Bring wholesome goodness to your family with Del Monte Red Grapefruit in Extra Light Syrup', 'Del Monte', 'https://i5.walmartimages.com/asr/aa7099b7-725d-4df9-ba62-1cf0af297908.099f2ac0ff45898ca86c20aead92fa1a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa7099b7-725d-4df9-ba62-1cf0af297908.099f2ac0ff45898ca86c20aead92fa1a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/aa7099b7-725d-4df9-ba62-1cf0af297908.099f2ac0ff45898ca86c20aead92fa1a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3453246207, 'Pitted Dates - 10oz-Naturally Sweet and Nutrient-Rich Pitted Dates', 9.98, '783214600234', 'Indulge in the naturally sweet and nutrient-rich goodness of Pitted Dates - 10oz. These delicious fruits offer a satisfyingly sweet flavor that is perfect for curbing cravings and providing a quick energy boost. Packed with essential vitamins, minerals, and fiber, pitted dates are not only delicious but also offer numerous health benefits. They are naturally rich in antioxidants and are known to support digestion, boost energy levels, and promote overall well-being. Enjoy pitted dates straight out of the package as a convenient and wholesome snack option. Their chewy texture and sweet taste make them a delightful treat for any time of day. Additionally, you can easily incorporate pitted dates into your favorite recipes, such as smoothies, baked goods, salads, and more, for added sweetness and nutritional value. Each package contains 10oz of pitted dates, providing ample quantity for snacking or cooking needs. Whether you\'re at home, at work, or on the go, these conveniently packaged dates are perfect for satisfying hunger and nourishing your body with natural goodness. Choose pitted dates as a healthier alternative to processed snacks, as they are low in fat, cholesterol-free, and offer a natural source of sweetness that is free from added sugars. Elevate your snacking experience with the wholesome goodness of pitted dates and enjoy a delicious and nutritious treat with every bite. Net Weight:10 oz', 'Natural Sweetness: These pitted dates offer a naturally sweet flavor, perfect for satisfying sweet cravings without added sugars. Nutrient-Rich: Pitted Dates are packed with essential vitamins, minerals, and fiber, making them a wholesome and nutritious snack option. Versatile Use: Enjoy pitted dates on their own as a quick and convenient snack, or incorporate them into recipes for added sweetness and texture. Convenient Packaging: Each package contains 10oz of pitted dates, providing a convenient and portable snack option for on-the-go indulgence. Healthy Snacking: Dates are low in fat and cholesterol-free, making them an excellent choice for those looking to maintain a balanced and healthy diet.', 'Motherland Groceries', 'https://i5.walmartimages.com/asr/42228025-ba16-4bf4-b998-6dae6d2136ca.024cbd31eb47043482a4ea0e5faeac26.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42228025-ba16-4bf4-b998-6dae6d2136ca.024cbd31eb47043482a4ea0e5faeac26.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/42228025-ba16-4bf4-b998-6dae6d2136ca.024cbd31eb47043482a4ea0e5faeac26.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3474874939, 'Freshness Guaranteed Watermelon 32 Oz', 7.36, 'deleted_717524409614', 'Experience a burst of summertime goodness with this delicious Freshness Guaranteed Watermelon. This pre-cut ripe watermelon is juicy, sweet, and refreshing to the taste. In addition, watermelons are a great natural source of vitamins A and C. Carry them with you and eat them straight out of the tray any time you want, at home, or on-the-go. Pair them with a tasty salad or sandwich for a nutritious and delicious lunch. You can also use them as a naturally sweet ingredient in a fruit salad. Add some fresh fruit to your daily menu with this Freshness Guaranteed Watermelon.Freshness Guaranteed provides you and your family with high quality fresh food that save you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Watermelon 32 Oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3506401309, 'Fresh Envy Apples, 2 lb Bag', 4.97, 'deleted_804305001270', 'Treat yourself to the ultimate apple experience when you bring home Fresh Envy Apples. Whether sliced on top of salad, served on a platter with your favorite cheese or eaten \"au naturel,\" Envy apple makes the experience so much more memorable and remarkable for you and the ones you love. There are people who simply accept what life offers up and then there are those who seek more. Envy shows that you choose to make each moment supremely delightful and that you know the difference between ordinary and extraordinary. Envy is an invitation to enjoy a small moment to savour and raise your expectations of what an apple can be.', 'Envy apples Enjoy the ultimate apple experience Beautifully balanced sweetness Uplifting fresh aroma Delightfully satisfying crunch Adds flavor to a variety of recipes', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1b8e5adc-122a-4e3b-8afc-fdfd0859b0ad.43ed09716e46e0bb470a86621df2af36.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b8e5adc-122a-4e3b-8afc-fdfd0859b0ad.43ed09716e46e0bb470a86621df2af36.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1b8e5adc-122a-4e3b-8afc-fdfd0859b0ad.43ed09716e46e0bb470a86621df2af36.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3540968236, 'Fresh Grown White Nectarines', 0.76, 'deleted_799424030358', 'short description is not available', 'Fresh Grown White Nectarines', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3662658848, 'Fresh Clementines, 3lb Bag', 6.47, '860003000670', 'Enjoy the juicy goodness of citrus when you eat a Fresh Clementine. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Among the smallest fruits in the orange family, clementines have a pleasing sweet-tart flavor and are typically seedless. Generally a winter fruit, clementines are now available year-round in most markets. Clementines are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the mandarins hang out in a bowl on your counter or table to breathe. Compact and portable, clementines are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious Fresh Clementines on hand for an easy, healthy treat.', 'Delicious, sweet, juicy citrus Pleasing sweet-tart flavor Easy to peel and segment Excellent source of vitamin C, potassium, and folic acid For maximum flavor, do not refrigerate Typically seedless You\'ll have plenty for everyone with this 3-pound bag', 'Fieldpack Unbranded', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d9ab5cfa-d0a8-4811-89a4-21340d203979.38416fb0219739eb6a2502179f5b8a34.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3709040623, 'Ingrilli 100% Lemon Juice from Concentrate, 4 Fl Oz Squeeze Bottles (Pack of 24)', 31.92, '642709101741', 'The Highest Product Standards From our orchard-to-bottle manufacturing process to our strict quality standards, we take pride in knowing that every bottle of Ingrilli products lives up to the Ingrilli family name. TRULY ORGANIC PRODUCTS At Ingrilli, we don’t just “label” our organic line as such – we live it. We test every batch of our organic products against common pesticides, and we have zero tolerance for any contamination or preservatives. That’s why we’ve earned the official USDA Organic seal of approval. NON-GMO Ingrilli is proud to be an official participant of the Non-GMO Project, and we are Non-GMO Project verified for all of our products. A TRADITION OF HIGH MANUFACTURING STANDARDS When we first opened our doors in 1880, we promised to deliver the highest-quality, freshest products on the market – and we still live to that standard today. That’s why we only use the freshest fruit and the latest production equipment, processes, and facilities to produce every bottle of Ingrilli juice on the shelves', 'FRESH FLAVOR, FRESH TASTE: Made from Argentinian and Brazilian 100% lemon juice concentrate, Ingrilli tastes as fresh as cutting into fresh lemons VERSATILE FLAVOR: Ingrilli Lemon Juice can be used for cooking, baking, salads and drink mixers. GOOD FOR EVERYONE: Ingrilli Lemon juice is is Non-GMO Project Verified, OU kosher certified, Vegan Certified and Gluten-Free', 'Ingrilli', 'https://i5.walmartimages.com/asr/3cbabd0c-5616-4708-9105-82c00edf9947.cf776292cff59bc6bbb7f4773d75669c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cbabd0c-5616-4708-9105-82c00edf9947.cf776292cff59bc6bbb7f4773d75669c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cbabd0c-5616-4708-9105-82c00edf9947.cf776292cff59bc6bbb7f4773d75669c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3711629612, '11LB Large Size Medjool Dates-Golden Dates Farm-California Fresh-Dried Fruits', 46, '727785392273', 'Our Medjool dates have no added preservatives and no chemical. They taste great and are the best quality you will get at a reasonable price. They are naturally and locally grown in California by Golden Dates Farm. These Medjool dates have plenty of health benefits. They contain potassium, fibers, vitamin B, and much more. Simply eat them as a snack on their own or add them to oatmeal, shakes, baked goods, or smoothies. If you have any questions feel free to message us!', 'Fresh Medjool Dates Large Size Dried Fruit Sweet Juicy Naturally and Locally Grown in California Dried Fruit Medjool', 'Golden Dates Farm', 'https://i5.walmartimages.com/asr/1927d188-da79-42b2-8e93-7e42234d2955.97d9b453ebac89f65c5d02ed5e40b07f.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1927d188-da79-42b2-8e93-7e42234d2955.97d9b453ebac89f65c5d02ed5e40b07f.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1927d188-da79-42b2-8e93-7e42234d2955.97d9b453ebac89f65c5d02ed5e40b07f.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3775809406, 'Fresh Navel Oranges, 8 lb Bag', 8.94, 'deleted_033383130064', 'Enjoy the juicy goodness of these Large Bagged Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, these Large Bagged Oranges will add flavor to any meal or beverage.', 'A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3794301012, 'Seneca Original Apple Chips | Made from Fresh 100% Red Delicious Apples | Yakima Valley Orchards | Seasonally Picked | Crisped Apple Perfection | Foil-Lined Freshness Bag | 0.7 ounce (Pack of 24)', 30.99, '', 'Seneca Original Apple Chips are seasonally grown and harvested from orchards located in the fertile, rich volcanic soils of the Pacific Northwest\'s Yakima Valley region in Washington State.', 'Seneca Original Apple Chips | Made from Fresh 100% Red Delicious Apples | Yakima Valley Orchards | Seasonally Picked | Crisped Apple Perfection | Foil-Lined Freshness Bag | 0.7 ounce (Pack of 24)', 'Seneca Foods', 'https://i5.walmartimages.com/asr/d3c4c41e-f7bb-4671-844c-c9ea62534744.221b83be577b0ebe164c2ae791ecdf16.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d3c4c41e-f7bb-4671-844c-c9ea62534744.221b83be577b0ebe164c2ae791ecdf16.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d3c4c41e-f7bb-4671-844c-c9ea62534744.221b83be577b0ebe164c2ae791ecdf16.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3851283793, 'Medjool Dates: Naturally Sweet, Pure, and Chemical-Free', 14.99, '783214599569', 'Savor the untainted sweetness with our Medjool Dates – a naturally sweet, pure, and chemical-free delight. Experience the purely plump and juicy texture of these dates, free from any chemical additives, ensuring an authentic and unaltered taste that nature intended. Our Medjool Dates provide a nutrient boost without the use of any chemicals, Enjoy their natural sweetness on its own or incorporate them into your sweet and savory dishes, adding a chemical-free touch to your culinary creations. Experience a natural and chemical-free energy boost with the high content of natural sugars like glucose, fructose, and sucrose found in Medjool Dates. Whether enjoyed as a quick vitality snack or integrated into your meals, these dates stand as a wholesome and natural choice. For your convenience and purity, our premium Organic Medjool Dates come pit-freed, ensuring an unaltered, chemical-free snacking experience. Elevate your snacking moments with the simplicity and authenticity of Organic Medjool Dates – a pure and naturally sweet gem.', 'Unadulterated Sweetness: Our Medjool Dates are a naturally sweet delight, untainted by chemicals, providing a pure and genuine flavor. Purely Plump and Juicy: Indulge in the purely plump and juicy texture of our Medjool Dates, free from any chemical additives, ensuring an authentic and unaltered taste. Chemical-Free : Our Organic Medjool Dates offer a nutrient-rich snack without the use of any chemicals. Versatile Culinary Delight: Enjoy the pure and natural sweetness of Medjool Dates on their own or incorporate them into sweet and savory dishes, adding a chemical-free sweetness to your culinary creations. Energy Boost, Naturally: With natural sugars like glucose, fructose, and sucrose, these dates provide a natural and chemical-free energy boost, making them a wholesome choice for quick vitality. Pit-Freed and Unaltered: Our premium Organic Medjool Dates come pit-freed, ensuring an unaltered, chemical-free snacking experience, maintaining the integrity of these naturally sweet gems.', 'Motherland Groceries', 'https://i5.walmartimages.com/asr/95ea795f-9644-4c4c-8cf8-ef0ee8739999.cf69436d080378aa20aa0242a8bbcdef.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95ea795f-9644-4c4c-8cf8-ef0ee8739999.cf69436d080378aa20aa0242a8bbcdef.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/95ea795f-9644-4c4c-8cf8-ef0ee8739999.cf69436d080378aa20aa0242a8bbcdef.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3864761761, 'Fresh Navel Oranges, 8 lb Bag', 8.94, 'deleted_036515110088', 'Fresh Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 8 lb package.', 'A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3882100423, 'Freshness Guaranteed Seasonal Fruit Blend 10 Oz', 3.57, 'deleted_717524784254', 'Freshness Guaranteed Seasonal Fruit Blend 10 ounces in a plastic container. This delicious Seasonal Fruit Blend is ready to eat and is a healthy snack.', 'Freshness Guaranteed Seasonal Fruit Blend 10 Oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1935136a-1e17-4b5f-8d6a-b362a07e7163.03d5778a809fbcaa05e17582053f6cf0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3912916823, 'Ingrilli 100% Lemon Juice from Concentrate, 4 Fl Oz Squeeze Bottles (Pack of 6)', 15.43, '642709101727', 'The Highest Product Standards From our orchard-to-bottle manufacturing process to our strict quality standards, we take pride in knowing that every bottle of Ingrilli products lives up to the Ingrilli family name. TRULY ORGANIC PRODUCTS At Ingrilli, we don’t just “label” our organic line as such – we live it. We test every batch of our organic products against common pesticides, and we have zero tolerance for any contamination or preservatives. That’s why we’ve earned the official USDA Organic seal of approval. NON-GMO Ingrilli is proud to be an official participant of the Non-GMO Project, and we are Non-GMO Project verified for all of our products. A TRADITION OF HIGH MANUFACTURING STANDARDS When we first opened our doors in 1880, we promised to deliver the highest-quality, freshest products on the market – and we still live to that standard today. That’s why we only use the freshest fruit and the latest production equipment, processes, and facilities to produce every bottle of Ingrilli juice on the shelves', 'FRESH FLAVOR, FRESH TASTE: Made from Argentinian and Brazilian 100% lemon juice concentrate, Ingrilli tastes as fresh as cutting into fresh lemons VERSATILE FLAVOR: Ingrilli Lemon Juice can be used for cooking, baking, salads and drink mixers. GOOD FOR EVERYONE: Ingrilli Lemon juice is is Non-GMO Project Verified, OU kosher certified, Vegan Certified and Gluten-Free', 'Ingrilli', 'https://i5.walmartimages.com/asr/3cbabd0c-5616-4708-9105-82c00edf9947.cf776292cff59bc6bbb7f4773d75669c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cbabd0c-5616-4708-9105-82c00edf9947.cf776292cff59bc6bbb7f4773d75669c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3cbabd0c-5616-4708-9105-82c00edf9947.cf776292cff59bc6bbb7f4773d75669c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3916211150, 'Fresh Lemon, Each', 0.58, '', 'Lemons are a kitchen essential, known for their bright yellow color and tangy, refreshing flavor. Perfect for cooking, baking, and beverages, they add a zesty touch to both sweet and savory dishes. Packed with vitamin C and natural antioxidants, lemons are not only delicious but also a nutritious choice for enhancing your meals and drinks with vibrant freshness. Available by the each.', 'Sold individually Firm fruit with spots of green will be the most tart but; the flavor will mellow and rind will yellow more over time Packed with vitamin C Ideal for making lemon water, iced tea, and lemonade Use for adding flavor to baked fish and sauces Tasty ingredient in desserts Available for in-store purchase only', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/5594b6bc-4970-4e57-9041-01e84cef443a.0d5cc90345977bc8ddaa7c6602a4c383.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5594b6bc-4970-4e57-9041-01e84cef443a.0d5cc90345977bc8ddaa7c6602a4c383.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5594b6bc-4970-4e57-9041-01e84cef443a.0d5cc90345977bc8ddaa7c6602a4c383.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3976863513, 'Fresh Passion Fruit, Each', 2.74, 'deleted_851502006348', 'Get ready for a tropical taste bomb with this juicy Fresh Passion Fruit. This fresh and whole fruit has a hard purple shell protecting the bright yellow interior with black seeds. Cut the fruit in half, scoop the pulp out with a spoon and enjoy. If it\'s too tart, try sprinkling sugar to sweeten the treat. You can also use this fresh passion fruit in several baking recipes including a delicious cream pie or fruit truffles. You can even use them to make a marinade or a passion fruit vinaigrette. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Fresh Passion Fruit.', 'Fresh Passion Fruit, Each Sweet and juicy Fresh and whole fruit with a hard purple shell Scoop the pulp out with a spoon and enjoy Use to make a delicious cream pie or fruit truffles Make a marinade or a passion fruit vinaigrette salad dressing', 'Fresh Produce', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3980497997, 'Freshness Guaranteed Melon Mix, 32 oz', 9.97, '194346121519', 'Get ready for a burst of fruity goodness with Freshness Guaranteed Melon Mix! This delicious blend of cantaloupe and honeydew is perfect for snacking, potlucks, and dinner parties. You can also use it to add a sweet, flavorful touch to your desserts, ice creams, fruit salads, or smoothies. Packed with essential nutrients, this tender and sweet fruit blend offers a medley of flavors that you need every day. Add some fresh fruits to your daily menu today with Freshness Guaranteed Melon Mix! Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Melon Mix, 32 oz Delicious blend of cantaloupe and honeydew Bring the container to a potluck, dinner party, or enjoy some straight out of the container Use to top desserts and ice creams, in a fruit salad, or blend them with ice to make smoothies', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/b2f6ec48-59eb-4747-b132-10fbc6935e69.4fbb2f9483ad19ed042cd2d8defa4d48.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b2f6ec48-59eb-4747-b132-10fbc6935e69.4fbb2f9483ad19ed042cd2d8defa4d48.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b2f6ec48-59eb-4747-b132-10fbc6935e69.4fbb2f9483ad19ed042cd2d8defa4d48.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (3989756577, 'Fresh Navel Oranges, 8 lb Bag', 8.94, 'deleted_845857001448', 'Fresh Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 8 lb package.', 'A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/96fc49a5-e281-4329-8a19-8da6dd59fb9f.182dd7b4be8635bae8fefed18a8eefd1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5044430820, 'MEDJOOL DATES. Premium Fresh Small Dates. Packed in Box. Tight Skin Naturally Grown in California. (5lb)', 28.99, '744365767306', 'Small Premium Medjool Dates Grown in California at Golden Dates Farm Packed in Boxes - Experience the essence of natural sweetness with our Small Premium Medjool Dates! These petite gems are handpicked for exceptional quality, delivering a delightful burst of flavor. With their 30% moisture content and chewy texture, they\'re ideal for snacking, culinary creations, or gifting on special occasions. Store in a cool, dry area, store in the box or container in the refrigerator or freezer. A healthy and natural sweet snack that is loaded with beneficial vitamins and minerals. Direct from our farm to your door! Grown and packed in California USA - Free Priority Mail USPS Shipping.', 'Medjool Dates packed in shrink wrapped box. Straight from our farm to your door. No Preservatives, Non GMO, Vegan, No artificial additives. Mother Nature’s gift. Healthy & tasty all natural energy. Perfect for snacking, sweetening cereals or your favorite drink. High in Fiber, Antioxidants, Omega Fats, and loaded with Protein. Low Carb\'s. Naturally Heart Healthy & Cholesterol Free. Healthy life style’s Essentials. Vegetarian /Vegan delight from California Desert.', 'Golden Dates Farm', 'https://i5.walmartimages.com/asr/5a9518b5-dc05-4f7e-8a97-5c92c1f256ce.250bc48c0e2a2304125451926dc0287a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a9518b5-dc05-4f7e-8a97-5c92c1f256ce.250bc48c0e2a2304125451926dc0287a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a9518b5-dc05-4f7e-8a97-5c92c1f256ce.250bc48c0e2a2304125451926dc0287a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5070057477, 'MEDJOOL DATES. Premium Fresh Small Dates. Packed in Box. Tight Skin Naturally Grown in California. (11lb)', 49.99, '744365767313', 'Small Premium Medjool Dates Grown in California at Golden Dates Farm Packed in Boxes - Experience the essence of natural sweetness with our Small Premium Medjool Dates! These petite gems are handpicked for exceptional quality, delivering a delightful burst of flavor. With their 30% moisture content and chewy texture, they\'re ideal for snacking, culinary creations, or gifting on special occasions. Store in a cool, dry area, store in the box or container in the refrigerator or freezer. A healthy and natural sweet snack that is loaded with beneficial vitamins and minerals. Direct from our farm to your door! Grown and packed in California USA.', 'Medjool Dates packed in shrink wrapped box. Straight from our farm to your door. No Preservatives, Non GMO, Vegan, No artificial additives. Mother Nature’s gift. Healthy & tasty all natural energy. Perfect for snacking, sweetening cereals or your favorite drink. High in Fiber, Antioxidants, Omega Fats, and loaded with Protein. Low Carb\'s. Naturally Heart Healthy & Cholesterol Free. Healthy life style’s Essentials. Vegetarian /Vegan delight from California Desert. . .', 'Golden Dates Farm', 'https://i5.walmartimages.com/asr/5a9518b5-dc05-4f7e-8a97-5c92c1f256ce.250bc48c0e2a2304125451926dc0287a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a9518b5-dc05-4f7e-8a97-5c92c1f256ce.250bc48c0e2a2304125451926dc0287a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5a9518b5-dc05-4f7e-8a97-5c92c1f256ce.250bc48c0e2a2304125451926dc0287a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5094408659, 'Fresh Picasso Melon, Each', 4.48, '736558000505', 'Treat yourself to the refreshing flavor of a fresh Picasso Melon. Enjoy this tasty melon on its own as a healthy snack or incorporate it into a variety of delicious recipes. For breakfast, you can make a sweet fruit bowl with sliced melon, strawberries, pineapple, and kiwi. For an extra special treat, top with a dollop of whipped cream. Cut it into small pieces and put it in a fresh salad along with chicken, cucumbers, tomatoes, and a light dressing. You can even use Picasso Melon to make a refreshing summer cocktail, a spreadable jam or a light sorbet. Enjoy the sweet and juicy taste of fresh Picasso Melon.', 'Ideal addition to every kitchen Flavorful addition to many recipes Enjoy on its own or add to a mixed fruit salad Add to your fresh garden salad Get creative & make a fruit cocktail or a refreshing sorbet Explore all the delicious ways to add fresh Picasso Melon to your favorite recipes', 'Picasso Melon', 'https://i5.walmartimages.com/asr/55e9f3c9-c8fd-408b-90b7-ad8cd7d4e0ac.87ba527096a51a093cc249a8c1307d1b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/55e9f3c9-c8fd-408b-90b7-ad8cd7d4e0ac.87ba527096a51a093cc249a8c1307d1b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/55e9f3c9-c8fd-408b-90b7-ad8cd7d4e0ac.87ba527096a51a093cc249a8c1307d1b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5148256463, 'Fresh Limes, 2 lb Bag', 4.98, '', 'Limes are a versatile citrus fruit, loved for their tangy, refreshing flavor and vibrant green color. Perfect for enhancing drinks, marinades, and desserts, they add a zesty twist to both sweet and savory dishes. Rich in vitamin C and bursting with aroma, limes are a kitchen staple that brings freshness and flavor to every meal. Available in a 2 lb bag.', 'Fresh Limes, 2 lb Bag', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/9b785f2a-eb91-4f60-a730-e2708689b315.26c32c3ac789cd1fc6c60ee0b6ce4106.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b785f2a-eb91-4f60-a730-e2708689b315.26c32c3ac789cd1fc6c60ee0b6ce4106.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9b785f2a-eb91-4f60-a730-e2708689b315.26c32c3ac789cd1fc6c60ee0b6ce4106.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5148386130, 'Fresh Peelz Lemon, Each', 0.58, '091636001356', 'Indulge in the freshness of California with our Fresh Peelz Lemon. Each lemon is carefully picked under the radiant Californian sunshine, bringing you the classic tart flavor that lemons are renowned for. Whether you\'re looking to add a zesty kick to your meals or refresh your drinks with some citrus flair, these versatile lemons are perfect for any culinary endeavor. From enhancing your favorite dishes to lending their zest to baking and drinks, these lemons are a must-have kitchen essential.', 'Classic Tart Lemon Flavor Juicy and Versatile for Any Use Grown in California Sunshine Great for Cooking, Baking, and Drinks Perfect for Enhancing Culinary Creations Fresh and High-Quality Lemons', 'Peelz Citrus', 'https://i5.walmartimages.com/asr/53ff1194-05a9-43bd-a4f2-d25e93e39ce5.4db69282de6274ecbeb055a8982c525c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/53ff1194-05a9-43bd-a4f2-d25e93e39ce5.4db69282de6274ecbeb055a8982c525c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/53ff1194-05a9-43bd-a4f2-d25e93e39ce5.4db69282de6274ecbeb055a8982c525c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5157327534, 'Fresh Tangerines, 2 lb Bag', 2.88, '848163004479', 'Tangerines, with their small size and convenient peel, are a fantastic choice for a quick snack in lunch boxes or while on the move. They have a delightful sweetness, few seeds, and offer numerous health benefits. Tangerines are rich in Vitamin A, provide ample fiber, folate, and potassium. Whether enjoyed on their own or combined with a crisp leafy green salad, tangerines are a delicious and nutritious option.', 'Fresh Tangerines, 2 lb Bag Bursting with vitamins Make a creamy smoothie or a delicious tart Add to a salad or use as a garnish for a cocktail Easy to peel and segment', 'Noble', 'https://i5.walmartimages.com/asr/919f649b-7bbe-4281-bb2f-13828389d1b4.5d62aab1b53dc50c22701af463773588.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/919f649b-7bbe-4281-bb2f-13828389d1b4.5d62aab1b53dc50c22701af463773588.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/919f649b-7bbe-4281-bb2f-13828389d1b4.5d62aab1b53dc50c22701af463773588.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5211389478, 'Fresh Organic Oranges, 4 lb Bag', 5.97, '095829310775', 'Enjoy the fresh sweetness of Marketside Organic Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite adult beverage. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Marketside Organic Oranges add flavor to any meal or beverage.Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', '4 lb Bag of Fresh Organic Oranges Great Source of Vitamin C Ideal for Snacks and Recipes Perfect for Smoothies and Desserts Guaranteed Freshness by Walmart Sourced from Trusted Farmers', 'Fresh Produce', 'https://i5.walmartimages.com/asr/e4685626-7fd0-4eab-8c9d-f3c718b76a30.e976058c7d2944efc5b70d2b64001d5c.webp?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4685626-7fd0-4eab-8c9d-f3c718b76a30.e976058c7d2944efc5b70d2b64001d5c.webp?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e4685626-7fd0-4eab-8c9d-f3c718b76a30.e976058c7d2944efc5b70d2b64001d5c.webp?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5246028175, 'Freshness Guaranteed Mixed Fruit Bowl, 20 oz', 9.98, '194346219520', 'Enjoy a delicious treat with our Freshness Guaranteed Fruit Blend. This 20-ounce package contains a refreshing mix of ripe, and juicy grapes and apples, all cut and ready for you to enjoy. Every piece has a crisp, sweet taste that can be savored right from the pack. Our fruit blend is a perfect addition to your breakfast, a great snack for work or school, or a refreshing side dish at any meal. The resealable packaging helps keep the fruit fresh between snacking. Enjoy the quality and convenience of our Freshness Guaranteed Fruit Blend with Grapes & Apples. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Fruit Blend with Grapes & Apples, 20 oz (Refrigerated) Mix of ripe, and juicy grapes and apples, all cut and ready for you to enjoy Great snack for work or school Refreshing side dish at any meal Re-closable container to maintain freshness at refrigerated temperatures', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/d1926c7d-a8cb-48aa-9d2e-98ccafd6cfe6.0b10a7e22e57eeac4ab4f997602678bb.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d1926c7d-a8cb-48aa-9d2e-98ccafd6cfe6.0b10a7e22e57eeac4ab4f997602678bb.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d1926c7d-a8cb-48aa-9d2e-98ccafd6cfe6.0b10a7e22e57eeac4ab4f997602678bb.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5251436560, 'Freshness Guaranteed Tropical Berry 10oz', 7.97, '194346219506', 'short description is not available', 'Freshness Guaranteed Tropical Berry 10oz', 'Freshness Guaranteed', 'https://i5.walmartimages.com/asr/c31daf9c-71c7-4bd9-9b65-25d5a030a9cb.87ac6bf1f84b897164170bd946ee9a37.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c31daf9c-71c7-4bd9-9b65-25d5a030a9cb.87ac6bf1f84b897164170bd946ee9a37.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c31daf9c-71c7-4bd9-9b65-25d5a030a9cb.87ac6bf1f84b897164170bd946ee9a37.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5256904046, 'Fresh Organic Oranges, 3 lb Bag', 5.97, '033383104027', 'Enjoy the fresh sweetness of Fresh Organic Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite adult beverage. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Fresh Organic Oranges add flavor to any meal or beverage.', 'Fresh Organic Oranges, 3 lb Bag Great source of vitamin C Fresh, sweet citrus flavor for snacking or recipes Versatile for breakfast, lunch, desserts, and beverages Ideal for smoothies, salads, marmalade, and sorbet', 'Unbranded', 'https://i5.walmartimages.com/asr/cb01a034-7861-4b08-a68d-de81e21bbbab.d2a4092166d7fcb05d80e44fafa4f1f2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb01a034-7861-4b08-a68d-de81e21bbbab.d2a4092166d7fcb05d80e44fafa4f1f2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cb01a034-7861-4b08-a68d-de81e21bbbab.d2a4092166d7fcb05d80e44fafa4f1f2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5257897434, 'Melocotones, 1 Lb.', 1.45, '400094119730', 'Melocotones, 1 Lb.', 'Melocotones', 'Unbranded', 'https://i5.walmartimages.com/asr/1afffc75-ca5d-46d5-80bc-7b95deac75e2.91f173824ccfe4f2f276a7bd8203557e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1afffc75-ca5d-46d5-80bc-7b95deac75e2.91f173824ccfe4f2f276a7bd8203557e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1afffc75-ca5d-46d5-80bc-7b95deac75e2.91f173824ccfe4f2f276a7bd8203557e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5288715245, 'Imported Medjool Dates, 3 Pounds – Unsweetened and Unsulphured , Vegan, Sirtfood, Bulk Dates.', 27.07, '840374818586', 'Imported Medjool dates have been considered a delicacy for thousands of years. Their exceptional nutritional value as well as their delightfully sweet flavor earned them a place at the tables of kings. Today dates are not the luxury food they used to be, so everyone can enjoy the benefits they offer. These fruits are delicious, sweet, free of “bad” fats, and give you a boost of energy. Imported Medjool dates contain 50% more potassium than bananas. Imported Medjool dates make a great standalone snack, and they can also be used in a variety of recipes. They go especially well with granolas, candy, biscuits, and salads. You can also add them to special cereal dishes, like couscous or wild rice casserole. Adding some dates to sweeten your protein shake can improve its taste as well as boost its nutritional value.', '✔️Premium Quality, Large Size, Fat Free, Cholesterol Free, Sodium Free, High in Potassium, Grown in Israel. ✔️The Imported Medjool Dates are the finest dates in the world. Dates are thought to be one of the world’s oldest cultivated fruits. ✔️Each date is handpicked to ensure its exceptional quality and size. Imported Medjool Dates are truly the cream of a very exclusive crop. These dates are the largest, the sweetest and the juiciest. Extremely meaty dates with tiny pits. Imported Medjool Dates are fresh and ready for you to enjoy in your home. They are great for cooking, baking and snacking. ✔️The Imported Medjool Dates from Food to Live are high in vitamins, and minerals.', 'Food to Live', 'https://i5.walmartimages.com/asr/b48cfe91-f008-4767-a383-c70b48abf7ac.11f7cc13075447451fa30fad65ff1578.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b48cfe91-f008-4767-a383-c70b48abf7ac.11f7cc13075447451fa30fad65ff1578.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b48cfe91-f008-4767-a383-c70b48abf7ac.11f7cc13075447451fa30fad65ff1578.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5295981573, 'Fresh Bluey Kiwi Fruit, 2 lb Clamshell', 5.12, '732313002425', 'Introducing this delightful Fresh Kiwi Fruit, a vibrant and flavorful treat that will make your taste buds dance with joy! Our Kiwi fruit, featuring Bluey, offers a delightful twist on this delicious fruit. Bluey, the lovable and mischievous character from the popular animated series, adds an extra element of fun and excitement to your Kiwi fruit experience. With its bright green flesh and a burst of tangy sweetness, this Kiwi fruit is sure to delight both kids and adults alike. But it\'s not just about the playful character on the packaging - the real star of the show is the Kiwi fruit itself. Packed with essential vitamins and minerals, our Kiwi fruit is a nutritional powerhouse. With a high vitamin C content, it supports a healthy immune system and helps keep you feeling your best. The fiber content aids in digestion and promotes a healthy gut, while the antioxidants present in Kiwi fruit contribute to overall well-being. Not only is our Kiwi fruit healthy, but it\'s also incredibly versatile. Slice it up and add it to your breakfast cereal or yogurt for a burst of freshness. Blend it into a smoothie for a refreshing and nutritious drink. Or simply enjoy it as a snack on its own - the choice is yours! With its fuzzy brown skin and vibrant green flesh, our Kiwi fruit, featuring Bluey, is not only a feast for the taste buds but also a visual delight. Its unique appearance and irresistible flavor make it a standout fruit that is bound to impress your family and friends. So why wait? Treat yourself to the delightful combination of Kiwi fruit and Bluey and experience the joy and goodness they bring. Order your Kiwi fruit with Bluey today and embark on a delicious and nutritious journey that will leave you wanting more!', 'Fresh Bluey Kiwi Fruit, 2 lb Clamshell Delicious sweet and tangy kiwi fruit Packed with Vitamin C, fiber and antioxidants with a scrumptious fruit taste Slice it up and add it to your breakfast cereal or yogurt for a burst of freshness Blend it into a smoothie for a refreshing and nutritious drink', 'Fresh Produce', 'https://i5.walmartimages.com/asr/8da49291-9aab-4833-9092-c01683a3b360.480a8bed82ccb9328c62291a3619a14c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8da49291-9aab-4833-9092-c01683a3b360.480a8bed82ccb9328c62291a3619a14c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8da49291-9aab-4833-9092-c01683a3b360.480a8bed82ccb9328c62291a3619a14c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5364758046, 'Fresh Bluey Kiwi Fruit, 1 lb Clamshell', 33.98, '732313002418', 'Introducing the delightful Fresh Kiwi Fruit, a vibrant and flavorful treat that will make your taste buds dance with joy! Our Kiwi fruit, featuring Bluey, offers a delightful twist on this delicious fruit. Bluey, the lovable and mischievous character from the popular animated series, adds an extra element of fun and excitement to your Kiwi fruit experience. With its bright green flesh and a burst of tangy sweetness, this Kiwi fruit is sure to delight both kids and adults alike. But it\'s not just about the playful character on the packaging - the real star of the show is the Kiwi fruit itself. Packed with essential vitamins and minerals, our Kiwi fruit is a nutritional powerhouse. With a high vitamin C content, it supports a healthy immune system and helps keep you feeling your best. The fiber content aids in digestion and promotes a healthy gut, while the antioxidants present in Kiwi fruit contribute to overall well-being. Not only is our Kiwi fruit healthy, but it\'s also incredibly versatile. Slice it up and add it to your breakfast cereal or yogurt for a burst of freshness. Blend it into a smoothie for a refreshing and nutritious drink. Or simply enjoy it as a snack on its own - the choice is yours! With its fuzzy brown skin and vibrant green flesh, our Kiwi fruit, featuring Bluey, is not only a feast for the taste buds but also a visual delight. Its unique appearance and irresistible flavor make it a standout fruit that is bound to impress your family and friends. So why wait? Treat yourself to the delightful combination of Kiwi fruit and Bluey and experience the joy and goodness they bring. Order your Fresh Kiwi Fruit with Bluey today and embark on a delicious and nutritious journey that will leave you wanting more!', 'Fresh Bluey Kiwi Fruit, 1 lb Clamshell Delicious sweet and tangy kiwi fruit Packed with vitamin C, fiber and antioxidants with a scrumptious fruit taste Enjoy a fresh kiwi with your breakfast to start your day off on the right foot Bring one to work and treat yourself to a scrumptious healthy snack at the office Great for school lunches Perfect for topping desserts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/26a01767-b95e-4fc6-b3c5-9203a35d0495.932ffc123d5b7300a358e6c6fc812148.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/26a01767-b95e-4fc6-b3c5-9203a35d0495.932ffc123d5b7300a358e6c6fc812148.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/26a01767-b95e-4fc6-b3c5-9203a35d0495.932ffc123d5b7300a358e6c6fc812148.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5442106978, 'Fresh Local Roots Greenhouse Grown Strawberries, 10 oz Container', 3.67, '850048924765', 'The sweet, juicy flavor of Greenhouse Grown Strawberries make them a refreshing and delicious treat. These sweet and flavorful strawberries are grown in a greenhouse and found in our premium selection. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like vitamin C, dietary fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Greenhouse Grown Strawberries today and savor the delectable flavor.', 'Fresh Greenhouse Grown Strawberries, 10 oz: Premium selection Prior to serving gently wash the strawberries and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'Local Roots', 'https://i5.walmartimages.com/asr/373f0c0a-d976-4518-967c-9e8c626d1a10.fd992b4534c99ffa7bba91525be393cb.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/373f0c0a-d976-4518-967c-9e8c626d1a10.fd992b4534c99ffa7bba91525be393cb.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/373f0c0a-d976-4518-967c-9e8c626d1a10.fd992b4534c99ffa7bba91525be393cb.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5458257362, 'WHOLLY GUACAMOLE Restaurant Style Medium, 7.5 oz Plastic Bowl', 4.97, '616112353561', 'WHOLLY GUACAMOLE Restaurant Style Guacamole is crafted with everything “extra” – for more flavor, more enjoyment and more family pleasing dinner solutions. With a kick of jalapeno pepper, this medium-spiced guac is sure to ignite your senses and make Taco Night a success. Add Restaurant style to your sandwich or salad, create the perfect veggie dip, or enjoy it with tortilla chips for a tasty snack. Gluten-free, vegan, kosher and has no preservatives added. An ideal flavor enhancer to keep on hand in your refrigerator that’s the perfect companion for sandwiches, dipping and more. Includes one, 7.5oz plastic bowl of WHOLLY GUACAMOLE Restaurant Style Medium. All trademarks, logos and images are owned by Hormel Foods Corporation, its subsidiaries and affiliates. Copyright MegaMex Foods, LLC', 'Made with hand-scooped 100% Hass Avocados; Vegan, Kosher, Gluten-free No Preservatives added and no artificial flavors The perfect addition to breakfast, lunch, or dinner! Spread it on a burger, sandwich, or toast; makes a delicious dip for chips or vegetables; or swap it for mayo in an upgraded version of chicken salad Enjoy as a ready-made appetizer, a side to your favorite Mexican dish, or while watching the big game with a crowd Includes one, 7.5 oz plastic bowl of WHOLLY GUACAMOLE Restaurant Style Medium; Packaged for freshness and great taste', 'WHOLLY GUACAMOLE', 'https://i5.walmartimages.com/asr/ab2df63d-8376-4f37-b176-0c5ce3b9bd06.660cdf9e08e9251e560f4fac40cebc20.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ab2df63d-8376-4f37-b176-0c5ce3b9bd06.660cdf9e08e9251e560f4fac40cebc20.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ab2df63d-8376-4f37-b176-0c5ce3b9bd06.660cdf9e08e9251e560f4fac40cebc20.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5474918527, 'Fresh Jumbo Blueberries, 9.8 oz Container', 5.22, '812049006185', 'Hand-picked at the peak of freshness, our Fresh Jumbo Blueberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Enjoy them straight out of the container as a refreshing and guilt-free snack or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. The possibilities are endless with these Fresh Jumbo Blueberries.', 'Fresh Jumbo Blueberries, 9.8 oz Container Over twice the size of an average blueberry and bursting with flavor Add to your cereal or yogurt Blend them into a smoothie or add them to baked goods Loaded with antioxidants, vitamins, and dietary fiber Explore all the delicious ways to add fresh blueberries to your favorite recipes', 'Multiple', 'https://i5.walmartimages.com/asr/917f864c-0a9d-4924-b555-91120c735786.b3b8a71f8ed27a7ccb25dfdf368225cf.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/917f864c-0a9d-4924-b555-91120c735786.b3b8a71f8ed27a7ccb25dfdf368225cf.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/917f864c-0a9d-4924-b555-91120c735786.b3b8a71f8ed27a7ccb25dfdf368225cf.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5538151410, 'Fieldpack Unbranded Fresh Grown Yellow Peaches', 3.24, '405679097960', 'Fieldpack Unbranded Fresh Grown Yellow Peaches', 'Tree Ripe Peach', 'Unbranded', 'https://i5.walmartimages.com/asr/3c583c46-e570-460f-8e9c-7febc8531b31_1.e24f01e0bb4d79a848a29a6874ef4a4a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3c583c46-e570-460f-8e9c-7febc8531b31_1.e24f01e0bb4d79a848a29a6874ef4a4a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3c583c46-e570-460f-8e9c-7febc8531b31_1.e24f01e0bb4d79a848a29a6874ef4a4a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5613730291, 'Fresh White Peaches, 2 lb Bag', 4.48, '810248031861', 'Discover the delightful sweetness of these Fresh White Peaches. Enjoy them on their own as a sweet snack or use them in a variety of recipes. For breakfast, you could slice them to put into your oatmeal or use them to make a delicious yogurt parfait. You can also use these fresh peaches in several baking recipes including a comforting crisp topped with ice cream, a tasty upside-down cake, or a scrumptious tart. You can even use them to make a jam or a smooth sorbet. However you choose to use them, their sweet flavor will bring a smile to everyone\'s face. Treat the family to the irresistible taste of Fresh White Peaches.', 'Enjoy on their own as a satisfying snack Use in a variety of baking recipes Make a tasty jam or a smooth sorbet Slice as a sweet topping for waffles or pancakes Add to iced tea to create a refreshing summertime flavor', 'Fresh Produce', 'https://i5.walmartimages.com/asr/07cd6088-a317-43fd-9d0a-2e03b11a6488.3cebee9dacdb588607b78d96acb1e592.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/07cd6088-a317-43fd-9d0a-2e03b11a6488.3cebee9dacdb588607b78d96acb1e592.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/07cd6088-a317-43fd-9d0a-2e03b11a6488.3cebee9dacdb588607b78d96acb1e592.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5617599069, 'PalmSpring Premium Sagae Dates - 400gm', 21.99, '', 'Experience the ultimate taste of wellness with our PalmSpring Premium Saudi Dates. Sourced directly from the lush palm oases of Saudi Arabia, these dates are a treasure trove of health and flavor. Our carefully selected, plump dates are all-natural, making them a perfect guilt-free snack for health enthusiasts and gourmets alike.', 'RAW VEGAN GLUTEN FREE NO SUGAR ADDED GOOD SOURCE OF FIBER NON-GMO 100% NATURAL', 'PALMSPRING', 'https://i5.walmartimages.com/asr/d5ee1105-a88c-4a68-8e19-641a564facea.bbef7726ec11b73fa3ffb5f67e784f0a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d5ee1105-a88c-4a68-8e19-641a564facea.bbef7726ec11b73fa3ffb5f67e784f0a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/d5ee1105-a88c-4a68-8e19-641a564facea.bbef7726ec11b73fa3ffb5f67e784f0a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5625681207, 'Welchs Kiwi Clamshell 1.3lb', 2.97, '095829211690', 'Treat yourself to the delicious and refreshing taste of kiwi. Kiwi are known for their sweet, tangy, and soft flesh and nutritional benefits. They are packed with vitamin C, fiber, and antioxidants. They\'re also fat-free and have a low glycemic index. Enjoy a fresh kiwi with your breakfast to start your day off on the right foot or bring one to work and treat yourself to a scrumptious healthy snack at the office. You can also serve them up in a big fresh fruit salad with all your favorite fruits like strawberries, apples, blueberries and more. They\'re even perfect for topping pies, tres leches cakes, tarts and more for dessert. The possibilities are endless when you bring home Kiwi', 'Delicious sweet and tangy kiwi fruit Packed with Vitamin C, fiber and antioxidants with a scrumptious fruit taste Great for school lunches Perfect for topping desserts', 'Welch', 'https://i5.walmartimages.com/asr/3457fe20-82d9-477f-91ed-17770dc7a761.a4d298cea4f5dd40beab44fc27a28240.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3457fe20-82d9-477f-91ed-17770dc7a761.a4d298cea4f5dd40beab44fc27a28240.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3457fe20-82d9-477f-91ed-17770dc7a761.a4d298cea4f5dd40beab44fc27a28240.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5676328193, 'PALMSPRING Premium Safawi Dates 400g', 21.99, '', 'Indulge in the rich and naturally sweet taste of PalmSpring Premium Safawi Dates - 400gm. These premium dried fruits from Saudi Arabia are a healthy snack or versatile addition to your recipes. Made by PALMSPRING, they are 100% natural, non-GMO, raw, vegan, gluten-free, and a good source of fiber. Enjoy the wholesome goodness of PalmSpring Premium Safawi Dates without added sugar.', 'No sugar added Good source of fiber Non-GMO Raw Vegan Gluten-free 100% natural', 'PALMSPRING', 'https://i5.walmartimages.com/asr/c75fd4de-5032-4d83-b874-281027a32679.e99ce9e21455489c42930bd9d9d18cab.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c75fd4de-5032-4d83-b874-281027a32679.e99ce9e21455489c42930bd9d9d18cab.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c75fd4de-5032-4d83-b874-281027a32679.e99ce9e21455489c42930bd9d9d18cab.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5716723627, 'Fresh Driscoll\'s Raspberries, 8 oz Heart-Shaped Container', 6.99, '715756100538', 'The sweet, juicy flavor of Fresh Raspberries make them a refreshing and delicious treat. The heart-shaped clamshell makes the perfect gift for special occasions. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with yogurt and granola for a light and flavorful snack, or enjoy their delicious flavor all on their own. They contain essential vitamins and nutrients like, vitamin C, dietary fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Strawberries today and savor the delectable flavor.', 'The sweet, juicy flavor of Fresh Raspberries make them a refreshing and delicious treat. The heart-shaped clamshell makes the perfect gift for special occasions. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with yogurt and granola for flavorful snack, or enjoy them as a snack on their own. They contain essential vitamins and nutrients like, vitamin C, dietary fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use. Pick up Fresh Raspberries today and savor the delectable flavor.', 'Driscoll\'s Inc.', 'https://i5.walmartimages.com/asr/5374279a-523f-4aaa-9381-260a15dc595f.4264bd5ea4fa42f12a76ae0e6653fe5f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5374279a-523f-4aaa-9381-260a15dc595f.4264bd5ea4fa42f12a76ae0e6653fe5f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5374279a-523f-4aaa-9381-260a15dc595f.4264bd5ea4fa42f12a76ae0e6653fe5f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5740868866, 'PALMSPRING Ajwa Dates - Raw Vegan Gluten-Free 400g', 21.99, '', 'PalmSpring Premium Ajwa Dates - 400gm offers a delightful taste of natural sweetness, sourced directly from Saudi Arabia\'s fertile lands. These premium dried fruits embody the essence of quality and purity, ensuring a RAW VEGAN GLUTEN FREE 100% NATURAL experience with every bite. Perfect for those seeking wholesome indulgence, PalmSpring Premium Ajwa Dates redefine the standards of dried fruits with their exceptional flavor and authenticity.', 'RAW VEGAN GLUTEN FREE 100% NATURAL', 'PALMSPRING', 'https://i5.walmartimages.com/asr/2aaf739d-ce55-4a52-8ba2-626e8e163432.93ff211e8b45598207ca9296c70da78b.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2aaf739d-ce55-4a52-8ba2-626e8e163432.93ff211e8b45598207ca9296c70da78b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/2aaf739d-ce55-4a52-8ba2-626e8e163432.93ff211e8b45598207ca9296c70da78b.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5800382851, 'Pomegranate Arils, Ready to Eat Pomegranate Seeds, 8 oz Cup', 6.97, 'deleted_683953001777', 'Pomegranate Seeds Conventional, Fresh Cut Pomegranate, Super Food, High in Fiber, Heart Healthy in a plastic cup.', 'High in Fiber No Preservatives3 Washed and Ready to Eat Heart Healthy Super Food', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/fb89360b-14e6-4bae-b2e0-30b40e1202b7.ecdcb1ac6e5f31d9491f5581098c5f98.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb89360b-14e6-4bae-b2e0-30b40e1202b7.ecdcb1ac6e5f31d9491f5581098c5f98.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/fb89360b-14e6-4bae-b2e0-30b40e1202b7.ecdcb1ac6e5f31d9491f5581098c5f98.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (5980119684, 'Fresh Ready to Eat Mixed Red and Green Grapes', 5.22, '263689000000', 'Enjoy a refreshing burst of natural sweetness with our fresh ready to eat mixed red and green grapes. This assortment features a vibrant combination of juicy red and crisp green grapes, each carefully handpicked and plucked from the stem for your convenience. Rich in antioxidants and vitamins, these grapes offer a nutritious snack option. Their appealing colors add a delightful visual touch to any fruit bowl or salad. Savor the contrasting flavors of the succulent reds and tangy greens in every bite. They\'re ideal for snacking, adding to dishes, or creating a flavorful grape juice. Relish the goodness of Fresh Mixed Grapes today.', 'Fresh Mixed Grapes Handpicked for their freshness and juiciness, ensuring a delightful snack experience Features a mix of red and green grapes, offering contrasting flavors Great for snacking, adding to fruit bowls, salads, or making refreshing grape juice Vibrant red and green colors add a touch of freshness to any dish', 'Fresh Produce', 'https://i5.walmartimages.com/asr/ecba6cc8-8412-4ed1-8c90-b948734eaf6b.6954dbd60503d9f051441c07e2c50ea8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecba6cc8-8412-4ed1-8c90-b948734eaf6b.6954dbd60503d9f051441c07e2c50ea8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ecba6cc8-8412-4ed1-8c90-b948734eaf6b.6954dbd60503d9f051441c07e2c50ea8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (6695573280, 'Organic California Medjool Dates, 1 Pound – Non-GMO Whole Dry Fancy Dates with Pits', 18.32, '840374820749', 'Indulge in nature\'s candy with delectable California Medjool Dates from Food to Live . These soft, juicy, and unsweetened dates are a guilt-free treat packed with fiber, B vitamins, and essential minerals like calcium, iron, copper, and selenium. Grown and harvested in the USA, these non-GMO, vegan, kosher, and gluten-free dates are the perfect snack for those following a Sirtfood diet or simply looking to boost their nutritional intake. With a large size and meaty texture, these dates are sure to satisfy your sweet cravings without any added sugars or sulfites. Enjoy them straight out of the bag or incorporate them into your favorite recipes. Boasting a long shelf life of up to 1.5 years, these Organic California Medjool Dates are a convenient and delicious addition to your pantry.', '✔️MEDJOOL DATES: Unsweetened Organic California Medjool Dates with pits from Food to Live, perfect as a nutritious snack. ✔️NON-GMO & VEGAN: These fancy dates are non-GMO, unsulphured, vegan, kosher, gluten-free, and sodium-free. ✔️NUTRIENT-RICH: Rich in fiber, B vitamins, calcium, iron, copper, and selenium, making Organic California Medjool Dates a great addition to your diet. ✔️SOFT & JUICY: Enjoy the delightful taste of Organic California Medjool Dates from Food to Live, nature\'s candy - soft, juicy. ✔️LONG-LASTING FRESHNESS: With proper storage, these dates can stay fresh for up to 1 year.', 'Food to Live', 'https://i5.walmartimages.com/asr/15e38386-2f10-483b-8988-58e254c973a7.19c4c6c4d6b6eb2b4f04ba57ddb103a6.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/15e38386-2f10-483b-8988-58e254c973a7.19c4c6c4d6b6eb2b4f04ba57ddb103a6.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/15e38386-2f10-483b-8988-58e254c973a7.19c4c6c4d6b6eb2b4f04ba57ddb103a6.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (7593624638, 'Fresh Small Hass Avocado Bag, 4-5 Count', 6.87, '852761008609', 'Avocados aren’t just great-tasting fresh produce items, but they are a nutrient-dense fruit that can be enjoyed throughout the year. Hass avocados are a versatile ingredient with a creamy texture and mild flavor that can be used in many different types of recipes and dishes that are perfect for enjoying at barbecues and outdoor gatherings with friends and family during the summer. Enjoy Small avocados in countless ways that will make those barbecues and gatherings with family and friends even more exciting. Use avocados in flavorful recipes that everybody can share and enjoy while being together outside. Try avocados in individual Mexican food items like tacos or burritos, as part of appetizers like avocado crostini, or in a fresh guacamole or avocado dip so everybody can dip tortilla chips into something delicious. The possibilities are deliciously endless if you need additional food options for barbecues. Not only is a Small avocado a great ingredient to use in numerous ways, but it is also a healthy food that contributes unsaturated “good” fats and almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9. A Small ripe avocado will have a dark green to nearly black skin color, a bumpy skin texture and should yield to gentle pressure without leaving indentations or feeling mushy. Avocados with a slightly bumpy texture should be ripe in 1 to 2 days. They will also be somewhat firm and have a dark green and black speckled color. Once you’ve selected the perfect bag of avocados, you’ll be ready to enjoy all kinds of different healthy foods and recipes for the next time you’re enjoying an outdoor gathering with friends and families.', 'Bag of 4 Small Hass Avocados Fresh fruit with a creamy texture and mild flavor Fresh avocados are great for using in tacos, burritos, appetizers, avocado dip and fresh guacamole so that you have delicious food to share and enjoy during barbecues and the summer months A cholesterol free fruit that contains almost 20 vitamins, minerals and phytonutrients including Vitamin E, Vitamin K, Vitamin C and Vitamins B5 and B9 Small hass avocados are the lowest sugar fruit and provide unsaturated “good fats” that help absorb Vitamin A, Vitamin D, Vitamin K and Vitamin E Small ripe avocados will have dark green to nearly black skin color, a bumpy texture and should yield to gentle pressure without leaving indentations', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/57d0ccdc-b7fa-4f73-aae4-42a1b8f4f64d.408d0c83a663cb912c7a4dbf7d130792.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/57d0ccdc-b7fa-4f73-aae4-42a1b8f4f64d.408d0c83a663cb912c7a4dbf7d130792.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/57d0ccdc-b7fa-4f73-aae4-42a1b8f4f64d.408d0c83a663cb912c7a4dbf7d130792.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (8940073338, 'Super Fresh Kids Golden Apple, 2lb Pouch', 4.47, '883391000053', 'The Super fresh Kids 2lb apples are an ideal choice for the whole family to easily enjoy fresh fruit. Packed in a convenient 2-pound bag, these apples are selected for their quality — freshness, firmness, and great taste — and are specially designed so that children can easily handle them. This packaging provides enough fruit for multiple snacks and is perfect for taking to work, school, or keeping at home ready to slice. Additionally, the Super fresh brand (through Super fresh Growers) has designed this packaging with attention to detail: games and graphics aimed at children, fruit sized comfortably for their hands, and a family-oriented approach that makes this bag an appealing option for everyday consumption.', 'Convenient 2lb bag of fresh apples, perfect for families. High-quality selection: fresh, firm, and flavorful apples. Kid-friendly design: apples sized for small hands for easy handling. Attractive packaging: features games and graphics aimed at children. Ideal for snacks: suitable for school, work, or at-home consumption. Family-oriented: encourages healthy fruit consumption in daily routines. Ready-to-use: easy to slice or eat on the go.', 'Superfresh Kids', 'https://i5.walmartimages.com/asr/9764efea-094a-43c0-9c39-7579ee148427.e3df7a783575561c6a61dccc45d7c80d.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9764efea-094a-43c0-9c39-7579ee148427.e3df7a783575561c6a61dccc45d7c80d.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9764efea-094a-43c0-9c39-7579ee148427.e3df7a783575561c6a61dccc45d7c80d.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (8951705922, 'Super Fresh Kids Gala Apple, 2lb Pouch', 4.47, '883391000800', 'The Super fresh Kids Gala 2lb apples offer a fun and nutritious option for children and families alike. Packed in a 2-pound bag, these Gala apples have been selected for their mild, slightly sweet flavor, crisp bite, and appealing size for small hands. The packaging features friendly graphics aimed at young children, making them ideal for snacks, taking to school or the park, or simply having at home ready as a healthy treat. The brand combines quality and presentation to encourage the daily consumption of fresh fruit among kids, while parents enjoy the convenience and taste of an accessible and delicious apple.', 'Convenient 2lb bag of fresh Gala apples. Sweet and mild flavor with a crisp, crunchy texture. Kid-friendly size: apples sized for small hands for easy handling. Attractive packaging: features fun and friendly graphics aimed at children. Ideal for snacks: perfect for school, park, or at-home consumption. Promotes healthy eating: encourages children to eat fresh fruit daily. Ready-to-use: easy to slice or eat on the go.', 'Superfresh Kids', 'https://i5.walmartimages.com/asr/359fe44e-21cb-46ae-87e9-237b0d87aed8.4cacd32d67a531083d1c0f47664d3809.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/359fe44e-21cb-46ae-87e9-237b0d87aed8.4cacd32d67a531083d1c0f47664d3809.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/359fe44e-21cb-46ae-87e9-237b0d87aed8.4cacd32d67a531083d1c0f47664d3809.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (10062874809, 'Fresh Apples Red Value Bag, 5lb', 4.98, 'deleted_888289402285', 'Treat yourself to the sweet taste of Freshness Guaranteed Red Apples. These apples are known for their classic sweet flavor with mild acidity and creamy white flesh with low acidity. Crisp and juicy, these apples have higher levels of antioxidants due to the rich, deep red skin. Enjoy one with breakfast or lunch or as a fresh snack any time of day. An excellent snacking or juicing apple, the Red is an excellent addition to green, fruit, and chopped salads, or an unexpected twist to sandwiches, quesadillas, or burgers. You can even pair them with sharp cheeses and crackers to create a stunning appetizer cheese board to share with guests. The possibilities are endless with Freshness Guaranteed Red Apples. Freshness Guaranteed provides you and your family with high-quality fresh food that saves you time and money, many of which are cooked fresh or prepared in stores. Convenient solutions with value added in every Freshness Guaranteed item.', 'Freshness Guaranteed Red Apples, 5 lb Bag: Sweet, crisp, and juicy Creamy white flesh with low acidity Excellent snacking apple Higher antioxidants due to the rich, deep red skin Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp, and apple pie Sweet, crisp, and juicy Creamy white flesh with low acidity Excellent snacking apple Higher antioxidants due to the rich, deep red skin Make a creamy smoothie or a nutritious juice blend Serve with your pancake breakfast Adds flavor to a variety of recipes Make apple butter or applesauce Make sweet desserts like apple cobbler, apple crisp, and apple pie Adds flavor to a variety of recipes', 'Fresh Produce', 'https://i5.walmartimages.com/asr/0039e8fe-9fd3-45e9-a4e3-ba5a49d3d9a4.a2f2806080b5f6e94ea11458020db16e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0039e8fe-9fd3-45e9-a4e3-ba5a49d3d9a4.a2f2806080b5f6e94ea11458020db16e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0039e8fe-9fd3-45e9-a4e3-ba5a49d3d9a4.a2f2806080b5f6e94ea11458020db16e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (12739971135, 'Fresh USDA Organic WOW Greenhouse Grown Strawberries, 10 oz Container', 5.97, '057836960015', 'The sweet, juicy flavor of Fresh USDA Organic Greenhouse Grown Strawberries make them a refreshing and delicious treat. These sweet and flavorful strawberries are our premium selection. They are great for homemade smoothies, desserts, or enjoying as a yummy and healthy snack. Serve up a bowl plain or topped with whipped cream for a delicious treat. Add to fruit salads, ice cream, yogurt or milkshakes. Use it to top off cereal, pancakes or waffles. It is also great as a topping for strawberry cheesecake and other dessert recipes. These organic berries contain essential vitamins and nutrients like, vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use.', 'Premium selection Certified organic Prior to serving gently wash the strawberries and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful strawberry salad, or puree them to make a delicious cocktail', 'SUNSET', 'https://i5.walmartimages.com/asr/99ab7d06-22be-415d-8079-ff24650b8799.fa9f060bb87df8eed8014f782ffb9fa7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/99ab7d06-22be-415d-8079-ff24650b8799.fa9f060bb87df8eed8014f782ffb9fa7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/99ab7d06-22be-415d-8079-ff24650b8799.fa9f060bb87df8eed8014f782ffb9fa7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (12852163028, 'Fresh Pears Bartlett Bulk, Each', 0.88, '000000044097', 'Savor the sweet taste of Fresh Bartlett Pears. Bartlett Pears are aromatic and have a definitive pear flavor that make them great for breakfast, lunch, dinner, and dessert. Chop the pears up and add them to muffins with walnuts and vanilla for a sweet treat that’s great for breakfast to get your morning started on a high note. Slice them up and top a pizza with prosciutto, goat cheese, and arugula for a mouthwatering meal perfect for a family dinner or dinner party. Cut the pear in half and cook it in a skillet with butter, brown sugar, and vanilla and serve with a scoop of vanilla ice cream for a decadent dessert. Enjoy tasty meals any time of day with Fresh Bartlett Pears.', 'Fresh Bartlett Pears, Bulk Sweet, crisp, and juicy Excellent snacking pear Make a creamy smoothie or a nutritious juice blend Add to your salad for extra crunch and flavor Adds flavor to a variety of recipes Make pear butter or poached pears Make sweet desserts like pear cobbler, pear crisp or pear tarts', 'Fresh Produce', 'https://i5.walmartimages.com/asr/30cc8efb-5b20-4ac6-bb3c-9fa90c794fa0.b89a069e7c9c472c3d7510e72ba4edae.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/30cc8efb-5b20-4ac6-bb3c-9fa90c794fa0.b89a069e7c9c472c3d7510e72ba4edae.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/30cc8efb-5b20-4ac6-bb3c-9fa90c794fa0.b89a069e7c9c472c3d7510e72ba4edae.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (12934961111, 'Fresh Sweet Rainier Cherries, 1.25 LB Bag', 6.97, '850421002219', 'Enjoy the vibrant taste of summer with our Fresh Sweet Rainier Cherries. Known for their golden-yellow color with a blush of red, Rainier cherries offer a uniquely sweet flavor and crisp texture that sets them apart.', 'Appearance: Pale yellow skin with a red blush, creamy yellow flesh. Texture: Semi-firm, plump, and tender flesh. Low in calories. Contain antioxidants like anthocyanins, which may have anti-inflammatory and anti-cancer properties.', 'PRODUCE ITEM', 'https://i5.walmartimages.com/asr/51cacfa1-6f44-469b-9cb2-5ba659fc078f.baec78caf7b135268aba9b1d08dd294e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/51cacfa1-6f44-469b-9cb2-5ba659fc078f.baec78caf7b135268aba9b1d08dd294e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/51cacfa1-6f44-469b-9cb2-5ba659fc078f.baec78caf7b135268aba9b1d08dd294e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (13484116304, 'Fresh USDA Organic Nature Fresh Greenhouse Grown Strawberries, 10 oz Container', 4.98, '689259006096', 'The sweet, juicy flavor of Fresh USDA Organic Greenhouse Grown Strawberries make them a refreshing and delicious treat. These sweet and flavorful strawberries are our premium selection. They are great for homemade smoothies, desserts, or enjoying as a yummy and healthy snack. Serve up a bowl plain or topped with whipped cream for a delicious treat. Add to fruit salads, ice cream, yogurt or milkshakes. Use it to top off cereal, pancakes or waffles. It is also great as a topping for strawberry cheesecake and other dessert recipes. These organic berries contain essential vitamins and nutrients like, vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell tray to keep them fresh and ready for use.', 'Premium selection Certified organic Prior to serving gently wash the strawberries and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/db00e0eb-42ff-46b9-8086-27191d4712c5.65d2a895443b1d3b3eccdbbfeb472a63.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/db00e0eb-42ff-46b9-8086-27191d4712c5.65d2a895443b1d3b3eccdbbfeb472a63.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/db00e0eb-42ff-46b9-8086-27191d4712c5.65d2a895443b1d3b3eccdbbfeb472a63.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (13508117005, 'Fresh Kiwi, 1lb Package', 2.43, '756110195852', 'Treat yourself to the delicious and refreshing taste of kiwi. Kiwi are known for their sweet, tangy, and soft flesh and nutritional benefits. They are packed with vitamin C, fiber, and antioxidants. They\'re also fat-free and have a low glycemic index. Enjoy a fresh kiwi with your breakfast to start your day off on the right foot or bring one to work and treat yourself to a scrumptious healthy snack at the office. You can also serve them up in a big fresh fruit salad with all your favorite fruits like strawberries, apples, blueberries and more. They\'re even perfect for topping pies, tres leches cakes, tarts and more for dessert. The possibilities are endless when you bring home Kiwi', 'Delicious sweet and tangy kiwi fruit Packed with Vitamin C, fiber and antioxidants with a scrumptious fruit taste Enjoy a fresh kiwi with your breakfast to start your day off on the right foot Bring one to work and treat yourself to a scrumptious healthy snack at the office Great for school lunches Perfect for topping desserts', 'Unbranded', 'https://i5.walmartimages.com/asr/6ffef26e-8b4c-437a-a8e3-d9a9a3bdabd6.ea046fd5847687c2a43c54107770e41c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6ffef26e-8b4c-437a-a8e3-d9a9a3bdabd6.ea046fd5847687c2a43c54107770e41c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/6ffef26e-8b4c-437a-a8e3-d9a9a3bdabd6.ea046fd5847687c2a43c54107770e41c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (13736673403, 'Kiwi Clamshell 1lb', 2.93, 'deleted_014668501007', 'Mighties Kiwi', 'Delicious sweet and tangy kiwi fruit Packed with Vitamin C, fiber and antioxidants with a scrumptious fruit taste Enjoy a fresh kiwi with your breakfast to start your day off on the right foot', 'PRODUCE UNBRANDED', 'https://i5.walmartimages.com/asr/3f0ac4b1-084a-4ac7-9a73-64aca0daf6c3.cbe453816e4dc6b00ce2c1fb28fbbb29.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3f0ac4b1-084a-4ac7-9a73-64aca0daf6c3.cbe453816e4dc6b00ce2c1fb28fbbb29.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3f0ac4b1-084a-4ac7-9a73-64aca0daf6c3.cbe453816e4dc6b00ce2c1fb28fbbb29.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (13793119436, 'DOMEX SUPERFRESH GROWERS', 4.94, '888289401158', 'DOMEX SPRFR GRWRS APL SNGL FRT BAG', 'Apples, Organic, Granny Smith 2-3/8 in min dia. USDA Organic. Certified Organic by Washington State Department of Agriculture. US extra fancy. daisygirlorganics.com. cmiorchards.com. Facebook/DaisyGirlOrganics. Product of USA.', 'Unbranded', 'https://i5.walmartimages.com/asr/f260b4ba-7f38-4e6a-a0dc-dbd39ab62739_1.57732e503dd596fe3cb77e6c4dc995c0.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f260b4ba-7f38-4e6a-a0dc-dbd39ab62739_1.57732e503dd596fe3cb77e6c4dc995c0.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f260b4ba-7f38-4e6a-a0dc-dbd39ab62739_1.57732e503dd596fe3cb77e6c4dc995c0.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (14158265066, 'Shams Pitted Pressed Date Paste | Baking Dates | 14.1 oz (Pack of 4)', 23.99, '794711995792', 'Elevate your baking with Shams Pitted Pressed Date Paste, the perfect all-natural sweetener made from high-quality, pitted dates. At 28.2 oz, this generous jar is packed with the rich, caramel-like flavor of dates, offering a healthier alternative to refined sugars and artificial sweeteners. Ideal for a variety of recipes, from cakes and cookies to smoothies and energy bars, this date paste provides natural sweetness, fiber, and essential nutrients in every bite. Made from carefully selected dates and pressed to perfection, Shams Date Paste has a smooth, velvety texture that blends easily into your favorite baking creations. Whether you\'re baking treats, adding sweetness to savory dishes, or making homemade snacks, this versatile paste adds depth and flavor while keeping your recipes wholesome and delicious. Choose Shams Pitted Pressed Date Paste for a naturally sweet, nutritious, and flavorful ingredient to enhance your culinary creations!', 'Premium Shams Pitted Pressed Date Paste for Rich, Natural Sweetness – Made from 100% high-quality, pitted dates, offering a rich, smooth texture and natural, caramel-like sweetness perfect for a wide range of recipes. Ideal for Baking and Cooking – This versatile date paste is a perfect ingredient for baking, smoothies, energy bars, or as a healthier sweetener for sauces, dressings, and snacks. Ample Supply and Long-Lasting Freshness – Generously packaged in a large 28.2 oz jar, ensuring you have plenty of this nutrient-rich date paste on hand for frequent use. Naturally Sweet, No Added Sugar or Preservatives – A wholesome, pure product with no added sugars, artificial sweeteners, or preservatives, making it a clean, natural alternative to processed sweeteners. Rich in Fiber, Potassium, and Nutrients – Packed with natural fiber, potassium, and essential nutrients, this date paste provides a nutritious and delicious way to add natural sweetness to your meals.', 'Shams', 'https://i5.walmartimages.com/asr/f0ca3d0c-2f6f-4e49-bd2e-78e8740f5c79.8f7c320065fc836faa0d058be3555fe5.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f0ca3d0c-2f6f-4e49-bd2e-78e8740f5c79.8f7c320065fc836faa0d058be3555fe5.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f0ca3d0c-2f6f-4e49-bd2e-78e8740f5c79.8f7c320065fc836faa0d058be3555fe5.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (14694750135, 'Organic Medjool Dates 2Lbs', 25, '860003432853', 'Organic Medjool Dates 2Lbs', 'Organic Packed with nutrients Fresh from our farms', 'Natures Anthem', 'https://i5.walmartimages.com/asr/c967c932-2e0e-43e1-80e5-127450abaa5c.45efa3f42af5b3d51e1c6e9b9fdb5901.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c967c932-2e0e-43e1-80e5-127450abaa5c.45efa3f42af5b3d51e1c6e9b9fdb5901.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c967c932-2e0e-43e1-80e5-127450abaa5c.45efa3f42af5b3d51e1c6e9b9fdb5901.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (14993803615, 'Fresh Navel Oranges, 4 lb Bag', 3.97, '095829601712', 'Fresh Navel Oranges are a good addition to a healthy diet along with other fruit. They\'re oval with a thick, easy-to-remove peel and segments that separate cleanly. Oranges are a fruit that contains vitamin C and other nutrients that can be eaten as is or juiced for a smooth beverage at breakfast. It is suitable for use in all kinds of sweet and savory dishes, from cakes to weeknight chicken dinners. Citric acid fruits like oranges can be stored at room temperature for several days or in the refrigerator for up to two weeks. Available in a 4 lb package, these Fresh Navel Oranges are great for the entire family.', 'Fresh Navel Oranges, 4 lb Bag A good addition to a healthy diet Easy to peel segments Contains vitamin C and other nutrients Can be juiced for a breakfast beverage Suitable for use in all kinds of sweet and savory dishes Store fresh oranges at room temperature or refrigerate', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (15020316716, 'Marketside Fresh Cut Pineapple, 24 oz Tray', 6.47, '194346455942', 'Treat yourself to a refreshing taste of the tropics with the 24 oz bowl of Marketside Cut Pineapple. Hand-cut for peak ripeness, this bowl is packed with sweet, golden pineapple that’s bursting with juicy flavor and ready to enjoy right out of the container. Whether you\'re adding it to your morning smoothie, packing it for a quick snack, or serving it as a healthy side at dinner, this pineapple delivers a crisp texture and naturally sweet taste that everyone will love. Packaged in a peel and reseal container, it’s designed for maximum freshness and on-the-go convenience: perfect for busy lifestyles, school lunches, or outdoor adventures. Backed by the Marketside commitment to quality, the Pineapple Bowl makes it easier than ever to bring high-quality, ready-to-eat fruit into your daily routine. Fresh ideas and quality ingredients, that\'s how Marketside brings the best foods to your table. We are committed to deliver freshness that you can taste and see. Marketside offers the best in fresh food, guaranteed by Walmart, working in partnership with farmers, bakers and chefs for the highest quality, authentic ingredients and favorite recipes.', 'Marketside Fresh Cut Pineapple, 24 oz Tray Sweet, juicy, and hand-cut for peak ripeness and maximum flavor No prep needed; perfect for quick snacks, lunch sides, or healthy desserts Keeps fruit fresh longer and adds grab-and-go convenience Ideal for busy mornings, school lunches, or road trip snacks Great for smoothies, fruit salads, yogurt bowls, or just as-is Shareable portion that’s great for families or entertaining', 'Marketside', 'https://i5.walmartimages.com/asr/a7919365-d74e-4c77-a0d8-986676daf9ec.82ae4437f61ab969e2adc490746458ce.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a7919365-d74e-4c77-a0d8-986676daf9ec.82ae4437f61ab969e2adc490746458ce.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a7919365-d74e-4c77-a0d8-986676daf9ec.82ae4437f61ab969e2adc490746458ce.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (15354824613, '(3 pack) Rancho Meladuco California-Grown Medjool Dates, Whole Fresh Un-Pitted, 1 lb. Box Dates', 32.7, '460325017242', 'Did you know dates are the only Superfood that tastes like Candy? Soft and chewy, dates taste like caramel and brown sugar. Our 1 lb. box of sweet and delicious California Grown Medjool Dates will become your new favorite go-to sweet treat. Dates are a nutrient dense, bite sized fruit grown in the warm sunny deserts of Southern California under our plentiful Sunshine. Celebrating the history of California\'s date farms and love affair with dates, you\'ll find a recipe for the classic roadside date shake right on the box. Dates are the better-for-you natural \"candy\", providing sustained energy and fuel for both competitive athletes and everyday people alike, and are versatile enough to add a touch of sweetness to countless dishes and recipes. Dates contain more potassium ounce for ounce than bananas and are a good source of daily fiber as well as containing iron, magnesium and other essential vitamins and nutrients. Despite their sweetness dates are lower on the glycemic index for people monitoring their blood sugar. We love our dates stuffed with a little crunchy nut butter, ice cream, or even tangy blue cheese. Chop them and add to oatmeal, yogurt, salads, or savory dishes or add them to your baked goods for a nutrient dense natural sweetener. Dates are one of the top trending foods for good reason and we\'re sure you\'ll fall in love with dates too! These dates contain a seed so please enjoy with care and remove the seed before eating. Allergen warning: our dates are packed in a facility that may also process tree nuts & peanuts. Allergens not contained: free of soy, gluten, egg, dairy, casein. Condition: Whole, un-pitted Organic Medjool dates. No sugar added. Shelf stable, but to enhance freshness store in a cool location.', 'One pound box of whole, un-pitted Medjool Dates Approximately 20-25 dates per pound Contains a seed, remove before eating. Tastes like caramel and brown sugar with hints of cinnamon Naturally sweet, whole fruit and nutrient dense superfood No added sugar CONTAINS WHOLE, UN-PITTED CALIFORNIA GROWN MEDJOOL DATES- Grown and hand picked in the Coachella Valley of Southern California. Our Dates are a delicious and nutritious snack that is perfect for any occasion. Our Dates are naturally SWEET and SOFT, and are packed with essential vitamins and minerals. They are a great source of dietary fibers, and are a great way to satisfy your sweet tooth without the guilt. Enjoy them as a snack, or add them to your favorite recipes for a delicous and healthy treat.', 'Rancho Meladuco', 'https://i5.walmartimages.com/asr/9636fe50-358a-41c3-800f-90678c60bc07.6ef5a666f5392aa59e7f3c368ecd9304.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9636fe50-358a-41c3-800f-90678c60bc07.6ef5a666f5392aa59e7f3c368ecd9304.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/9636fe50-358a-41c3-800f-90678c60bc07.6ef5a666f5392aa59e7f3c368ecd9304.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (15421721133, 'Fresh Blueberries Driscoll\'s Sweetest Batch, Dry Pint Container', 6.62, '715756500178', 'Sweetest batch blueberries are a special variety selected for their extra-sweet deliciousness. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as a topping for pancakes, bake them in a mouthwatering bread, mix them with lemon and water for a flavorful and refreshing drink. They contain essential vitamins and nutrients like vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them and enjoy the fresh taste. Refrigerate the berries in original Clam Shell to keep them fresh and ready for use.', 'Premium selection Only Driscoll\'s grows Sweetest Batch Blueberries from proprietary berry variety Bursting with delicious flavor, these juicy berries are selected for their extra-sweet deliciousness. Refrigerate your blueberries in the original package to maintain freshness Delicious on their own as a healthy snack or as part of a recipe', 'Driscoll\'s Inc.', 'https://i5.walmartimages.com/asr/a3ba3fa6-7184-42d2-b90a-43679b696992.442d97fdaae27d3eb475c188a1c1b64a.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a3ba3fa6-7184-42d2-b90a-43679b696992.442d97fdaae27d3eb475c188a1c1b64a.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/a3ba3fa6-7184-42d2-b90a-43679b696992.442d97fdaae27d3eb475c188a1c1b64a.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (15444959398, 'Premium Khudri Saudi Dates (2.2 LB) – Fresh, Nutrient-Rich, High in Antioxidants & Fiber – Whole Dates from Saudi Arabia – Entaj Al Nakheel brand', 20.99, '', 'Indulge in the natural sweetness and rich flavor of Khudri dates from Entaj Al Nakheel, a premium selection imported directly from Saudi Arabia. These whole dates are carefully harvested and packaged to preserve their soft, chewy texture and nutritional benefits. Packed with fiber and antioxidants, these versatile dates make for a delightful healthy snack, perfect for baking, smoothies, or as a natural sweetener. The elegant packaging, adorned with traditional geometric patterns, makes this 2.2 lb box an excellent gift choice or a sophisticated addition to your pantry.', 'Indulge in the natural sweetness of premium Khudri dates from Entaj Al Nakheel, a brand that sources these dates directly from Saudi Arabia. These whole dates are carefully harvested and packaged to preserve their rich, authentic flavor and soft, chewy texture. Naturally packed with fiber and antioxidants, these dates can satisfy your sweet cravings while providing nutritional benefits. The elegant packaging, adorned with traditional geometric patterns, makes these dates an excellent gift choice or a sophisticated addition to your pantry. Enjoy these dates as a wholesome snack any time of day, or use them in cooking, baking, or as a natural sweetener in your recipes. The protective window box preserves the freshness of the dates while allowing you to see the product.', 'Entaj Al Nakheel', 'https://i5.walmartimages.com/asr/11e11544-9107-4961-833c-a680891b1488.39bcf6b126dbfdec5954abaefe1f9af3.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/11e11544-9107-4961-833c-a680891b1488.39bcf6b126dbfdec5954abaefe1f9af3.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/11e11544-9107-4961-833c-a680891b1488.39bcf6b126dbfdec5954abaefe1f9af3.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (16228157176, 'Welchs Green Grapes, 3 Lb', 9.97, '095829210112', 'Treat yourself to the delicious, juicy flavor of Fresh /White Grapes. These grapes are bursting with sweet flavor, so you can easily enjoy a handful as a fresh snack any time of day. Enjoy them for breakfast, lunch, dinner, or dessert. They are also perfect for creating stunning cheese boards and charcuterie plates by pairing them with fresh cheese, crackers, or delectable meats like prosciutto. If you want to be really creative, you can freeze them and use them and ice cubes that won\'t melt and release water into your favorite drinks. Treat yourself to the whole fresh taste of Fresh White Grapes. Fresh Product.', 'Freeze and use as cubes Great for using in fruit salad Pair with your favorite meats and cheeses for a charcuterie appetizer', 'Welch\'s', 'https://i5.walmartimages.com/asr/4e50cb5f-2717-4b43-9153-16c69e3f6627.be4a6973b570bf7c5b7820b6e8eeeae7.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4e50cb5f-2717-4b43-9153-16c69e3f6627.be4a6973b570bf7c5b7820b6e8eeeae7.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4e50cb5f-2717-4b43-9153-16c69e3f6627.be4a6973b570bf7c5b7820b6e8eeeae7.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (16462316478, 'Fresh Sour Oranges for Juicing and Cooking', 1.98, '897505002604', 'Fresh Sour Oranges are ideal for adding tangy citrus flavor to recipes. These tart and tangy fruits, known for their slightly bitter undertone, are perfect for culinary applications such as marinades, dressings, beverages, and traditional dishes. Typically medium-sized with a thick, textured peel, they exhibit a vibrant orange color when ripe. Whether you\'re cooking, juicing, or making a refreshing beverage, these sour oranges bring a zesty zing to any dish. Enjoy the unique flavor and aromatic freshness that only sour oranges can deliver.', 'Fresh Sour Oranges for a perfect tangy flavor Tart and tangy with a slightly bitter undertone, ideal for culinary and beverage applications Medium-sized fruit with a thick, textured peel; bright orange color when ripe Ideal for cooking and juicing Food condition: Fresh Fruit type: Citrus', 'Fresh King Inc/Unity Groves', 'https://i5.walmartimages.com/asr/56ca316a-4c2e-4653-b00e-78c33eab874e.9de35614fd46be44016e9f9094b45473.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56ca316a-4c2e-4653-b00e-78c33eab874e.9de35614fd46be44016e9f9094b45473.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/56ca316a-4c2e-4653-b00e-78c33eab874e.9de35614fd46be44016e9f9094b45473.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (16511653326, 'Fresh Tropical Breadfruit - Versatile and Nutritious Alternative', 1.38, '897505002598', 'Fresh Breadfruit is a versatile tropical fruit prized for its starchy texture and mild flavor. When cooked, it becomes tender and hearty, making it a satisfying addition to both sweet and savory recipes. This fresh fruit can be baked, boiled, fried, or roasted, and is often used as a wholesome alternative to potatoes or rice. With its golden-green exterior and creamy white interior, it brings a taste of the islands right to your kitchen. Enjoy Fresh Breadfruit as part of a nourishing meal or experiment with it in your favorite recipes for a unique twist. Fresh Breadfruit is a delicious way to add variety to your table. Food Condition: Fresh.', 'Fresh Breadfruit, Each Large tropical fruit with a mild, starchy flavor Can be baked, boiled, fried, or roasted Excellent alternative to potatoes or rice Golden-green exterior with creamy white interior Perfect for both sweet and savory recipes Also known as \'Ulu\' and \'Panapen\' around the world. Food Condition: Fresh.', 'Unbranded', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/68dc6b98-1c47-4d5b-8edf-ec73d319a040.8753fc2505594b8a1f11e7be644cfebe.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (16511957433, 'Welch\'s Blueberries 6oz', 3.87, '095829210686', 'Fresh Blueberries are a delightful and nutritious treat that brings a burst of flavor to any dish. These plump and juicy berries are picked at the peak of freshness, ensuring a sweet and tangy taste that is hard to resist. Perfect for snacking, baking, or adding to your favorite recipes, these blueberries are a versatile fruit that can be enjoyed in countless ways. Whether you sprinkle them on top of your morning cereal, blend them into a smoothie, or bake them into a delicious pie, Fresh Blueberries are sure to satisfy your cravings for a healthy and delicious snack.', 'These little bursts of flavor are not only delicious but also packed with nutrients, making them an ideal addition to your diet. Hand-picked at the peak of freshness, our Fresh Blueberries are plump, juicy, and bursting with natural sweetness. Each berry is carefully selected to ensure the perfect balance of sweetness and tanginess, ensuring a delightful taste sensation with every bite. The versatility of blueberries knows no bounds. Enjoy them straight out of the container as a refreshing and guilt-free snack or sprinkle them over your morning cereal or yogurt for a burst of fruity goodness. Blend them into a smoothie for a nutritious and energizing drink that will kickstart your day. Get creative in the kitchen and incorporate these blue gems into your baking endeavors, whether it\'s muffins, cakes, or pies, their vibrant color and juicy texture will enhance any recipe. Not only are blueberries delicious, but they also offer an array of health benefits. Loaded with antioxidants, vitamins, and dietary fiber, blueberries are known to promote heart health, support brain function, and boost the immune system. They are a nutritious choice that will keep you feeling good from the inside out. Our Fresh Blueberries come conveniently packaged and can be enjoyed immediately or stored in the refrigerator for later use. The possibilities are endless with these versatile berries, allowing you to explore new culinary creations and indulge in their wholesome goodness. Treat yourself to the delightful taste and nutritional benefits of Fresh Blueberries. Elevate your dishes, satisfy your cravings, and experience the joy of these plump and juicy berries. Order your batch today and unlock a world of flavor and wellness.', 'Welch\'s', 'https://i5.walmartimages.com/asr/92f21f75-4f8b-4b8c-812c-84473f813869.b7912692e380478f5a100991660f3ae7.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/92f21f75-4f8b-4b8c-812c-84473f813869.b7912692e380478f5a100991660f3ae7.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/92f21f75-4f8b-4b8c-812c-84473f813869.b7912692e380478f5a100991660f3ae7.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (16804910930, 'Welch Cherries, 1 Lb.', 6.97, '095829211621', 'Cherries are a family favorite: ideal as a snack, the perfect addition to breakfast with oatmeal or yogurt, an excellent ingredient for baking or salads, and delicious on their own. Our family recipe for cherry cookies is a hit with family and friends. Rich in antioxidants, they are a source of vitamin C, potassium, and fiber. Low in calories compared to other sweet fruits, they have been associated with anti-inflammatory benefits and improved sleep thanks to their natural melatonin content.', 'Rich in antioxidants, they are a source of vitamin C, potassium, and fiber. Ideal for snacks They are usually eaten fresh, in desserts or in jams They help reduce oxidative stress and contribute to cardiovascular health.', 'Welch\'s', 'https://i5.walmartimages.com/asr/c41d615c-e21e-45bc-8ee1-85d7cc6999a5.a2f7b4488207c40d7995718007abee6c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c41d615c-e21e-45bc-8ee1-85d7cc6999a5.a2f7b4488207c40d7995718007abee6c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c41d615c-e21e-45bc-8ee1-85d7cc6999a5.a2f7b4488207c40d7995718007abee6c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (16975920583, 'Fresh Rambutan Clam 12 oz - Exotic Fresh Fruit', 4.97, '000000030410', 'Rambutans are tropical fruits native to Southeast Asia. Their spikey red shell makes them visually distinct, reminiscent of a hairy lychee. Inside, the juicy and sweet white flesh closely resembles that of a lychee, offering a delightful balance of sweet and tangy flavors. Ideal for a refreshing snack or a unique addition to fruit salads. Sold fresh, these rambutans are carefully packed in a 12 oz clam shell to ensure they arrive in perfect condition, ready to bring a tropical touch to your fruit bowl.', 'Fresh tropical rambutan fruits, known for their sweet and juicy flavor. 12 oz clam shell ensures freshness and convenience. Ideal for snacking, fruit salads, or tropical recipes. Naturally sourced from Southeast Asia, an exotic addition to your fruit selection. Supports a healthy diet with rich fiber and vitamins. Fast delivery with optimal refrigeration to maintain quality.', 'Unbranded', 'https://i5.walmartimages.com/asr/392edd21-1311-4e90-8ab4-a2d4e49bd34a.f57f876be1f72078125ae14ff5b0e6a4.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/392edd21-1311-4e90-8ab4-a2d4e49bd34a.f57f876be1f72078125ae14ff5b0e6a4.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/392edd21-1311-4e90-8ab4-a2d4e49bd34a.f57f876be1f72078125ae14ff5b0e6a4.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17081672250, 'Yellow Peach, 2 lb Bag', 3.88, '033383322186', 'Yellow Flesh Peaches, per Pound', 'Fresh Yellow Flesh Peaches', 'Fresh Produce', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17280560931, '80 Acres Farms Micro-topia Microgreens, 0.75 oz Clam Shell, Fresh', 2.98, '817578022415', '80 Acres Farms Micro-topia Microgreens is a symphony of lively flavors, colors and textures harmoniously blended to make your mouth sing.', 'Zero Pesticides Sustainably Grown Fresher Longer No Need To Wash Non-GMO Grown Indoors', '80 Acres Farms', 'https://i5.walmartimages.com/asr/1f8483d7-8149-4eb1-9a89-b8526719eab2.2b7e2f4ae0465c008c5efab7b353ab0a.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f8483d7-8149-4eb1-9a89-b8526719eab2.2b7e2f4ae0465c008c5efab7b353ab0a.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1f8483d7-8149-4eb1-9a89-b8526719eab2.2b7e2f4ae0465c008c5efab7b353ab0a.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17283650637, 'Thai Guava Fresh Tropical Fruit, Each', 1.32, '897505002611', 'Thai Guava is a fresh, crisp, and refreshing tropical fruit ideal for snacking or enhancing your favorite dishes. It features a vibrant green skin with a pale interior and offers a mildly sweet flavor with a crunchy texture, making it a unique treat. Enjoy it fresh with a sprinkle of salt or chili for an adventurous twist, or incorporate it into salads and smoothies. Thai Guava is a fresh, juicy fruit option providing a tropical experience that’s both delicious and versatile. Experience it fresh for the ultimate taste.', 'Thai Guava, Each Bright green skin with pale, crisp interior Mildly sweet flavor with crunchy texture Great for snacking, salads, or smoothies Can be paired with salt or chili for a bold taste Refreshing tropical fruit option Available fresh for optimal taste', 'Unbranded', 'https://i5.walmartimages.com/asr/5db2abb0-5b85-4289-bd09-89334a0d17d4.89e6322dda6b3556d68e1982ce4b7af1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5db2abb0-5b85-4289-bd09-89334a0d17d4.89e6322dda6b3556d68e1982ce4b7af1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5db2abb0-5b85-4289-bd09-89334a0d17d4.89e6322dda6b3556d68e1982ce4b7af1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17358255648, 'Fresh Whole Shallots 16oz Bag', 2.88, '045255126501', 'Experience the exquisite flavor of Fresh Whole Shallots, perfect for enhancing any dish. These 16oz bags are filled with fresh, aromatic, and versatile shallots, which are indispensable for chefs and home cooks alike. They provide a milder taste than onions, making them ideal for salads, dressings, and more. Their fine texture and unique blend of garlic and onion flavors elevate your culinary creations, whether sautéed, roasted, or used raw. Keep these handy for adding depth and flair to sauces, marinades, and soups.', 'Fresh and Aromatic: Our whole shallots are carefully sourced to ensure premium quality and rich flavors. Versatile Ingredient: Perfect for use in a wide variety of recipes, from salads to sauces. Food Condition: Fresh, ensuring you get the best taste and texture. Ideal for Cooking: Adds depth and flair to your culinary creations with its unique garlic-onion flavor.', 'Unbranded', 'https://i5.walmartimages.com/asr/5cb7625b-8a08-4125-bf87-74e2105f20fd.6a315818580725349bb4f8bc82b2e62f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5cb7625b-8a08-4125-bf87-74e2105f20fd.6a315818580725349bb4f8bc82b2e62f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/5cb7625b-8a08-4125-bf87-74e2105f20fd.6a315818580725349bb4f8bc82b2e62f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17401664280, 'Bright Farms Butter Crunch 8 Oz', 4.97, '850051825158', 'BrightFarms Butter Crunch is the perfect base for any salad, burger or sandwich. It combines our signature Crunchy Green Leaf Lettuce with our Sweet Baby Butter for an approachable and satisfying blend that is versatile and packed with texture. Grown nearby in a state-of-the-art greenhouse, the salad greens go from farm to store in as little as 24 hours ensuring they are fresh, crunchy and long-lasting in your fridge -- in fact we guarantee it! By growing indoors using a hands-free growing process, we eliminate the use of pesticides on our produce so that the greens are ready to eat from the container, with no need to wash. At BrightFarms, we are on a mission to grow salads in a way that is better for people and the planet, transforming the way people eat and enjoy fresh produce - and shaping a more sustainable future for food.', 'Pesticide, herbicide and fungicide free greens Greenhouse grown, for guaranteed fresh greens year-round No need to wash Responsibly grown, harnessing the power of technology to do more with less: less water, less land, less shipping fuel to produce more Non-GMO Perfect for salads, sandwiches, wraps and more', 'BrightFarms', 'https://i5.walmartimages.com/asr/4f37c7f7-12b8-441f-bd31-ca357e7f5dcd.00142ac5563c1347abd76f3f16dff76c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4f37c7f7-12b8-441f-bd31-ca357e7f5dcd.00142ac5563c1347abd76f3f16dff76c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/4f37c7f7-12b8-441f-bd31-ca357e7f5dcd.00142ac5563c1347abd76f3f16dff76c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17452455869, 'Flavorables Vampire Killer Seasoned Fresh Petite Potatoes in Microwave-Safe 16 oz Tray', 4.48, '813652011450', 'Flavorables® Fresh Petite Potatoes – Vampire Killer Seasoning is a delightful fresh vegetable option that transforms snack time into a bold flavor adventure. This 16 oz microwave-safe pack is designed for ultimate convenience and taste. Fresh potatoes are seasoned with Spiceology\'s “Vampire Killer” blend that includes garlic, Parmesan, onion, and sea salt. Ready to cook in minutes, these fresh potatoes offer a crispy texture whether prepared in the microwave or air fryer. Perfect for key occasions as a snack, a flavorful side, or a standout at parties, these fresh potatoes appeal to adventurous eaters who love bold flavors.', '16 oz pack for convenient snacking – easy to prepare and share. Unique and bold flavor profile – Garlic, Parmesan, sea salt, and onion come together in the “Vampire Killer” seasoning for a taste that stands out. Crispy texture for maximum enjoyment – cooks quickly in the microwave or air fryer for a satisfying bite. Perfect for parties and gatherings – a flavorful side dish or snack that pairs with any occasion. High-quality ingredients used – real fresh petite potatoes with authentic spices from Spiceology®. Ideal for adventurous snackers – crafted for those who crave big flavors and bold combinations with a fresh twist.', 'Flavorables', 'https://i5.walmartimages.com/asr/13fd16ef-4e96-4cba-afab-7a771295f295.c94ebc2bfc77e765141e37a7c004bb17.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13fd16ef-4e96-4cba-afab-7a771295f295.c94ebc2bfc77e765141e37a7c004bb17.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/13fd16ef-4e96-4cba-afab-7a771295f295.c94ebc2bfc77e765141e37a7c004bb17.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17489620872, '20 Pack Clear Plastic Berry Clamshell Vented Container for blueberry, Cherry Tomatoes', 29.49, '', '20 Pack Clear Plastic Berry Clamshell Vented Container for blueberry, Cherry Tomatoes', 'Material: blueberry Clamshell Container is made of PET material, which is safe and odorless, has a good preservation function, and is convenient and practical. Set includes: 20 packs of blueberry containers, the size of each blueberry container is: 5-1/4X4X4 Inch, hinged box for fruit, salad The clear design allows you to clearly see the berries inside. Clear plastic berry containers are the perfect display solution for farmers markets and produce stands.', 'JLK-ZHOU', 'https://i5.walmartimages.com/asr/c79f8005-aa6b-4d77-83c5-59b6fb87655f.4c535245a926703e5f3d4700a84fec65.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c79f8005-aa6b-4d77-83c5-59b6fb87655f.4c535245a926703e5f3d4700a84fec65.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c79f8005-aa6b-4d77-83c5-59b6fb87655f.4c535245a926703e5f3d4700a84fec65.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17530472909, 'Cucumber Trellis for Climbing Plants Outdoor, 63”x 63” Foldable A-Frame Garden Trellis for Raised Bed with Climbing Net and Plant Support Clip for Vegetable Grape Tomato', 31.49, '', 'Garden trellis are an essential and important element in the gardening life, and beautiful plants need heart to take care of them. The charm of plants lies in their ability to reflect the flavour of nature in the most delicate way, while adding life to our home life. A-frame cucumber trellis can grow various plants from both sides of the trellis. These shapes promote airflow for the climber, and the plant will have plenty of sunlight to maximize photosynthesis. Let you get a better harvest. Hassle-free to assemble and disassemble for compact storage in the off-season. Light weight, easy to move. Legs insert into soil for the best stability, stands up in heavy winds. The included netting, clips, and ties can also provide appropriate support and exercise for growing plants, keeping vegetable and fruit vines away from the ground, which is a good solution to the problem of overweight vines and easy to harvest. A garden climbing frame is suitable for providing support for climbing plants such as cucumbers, peas, zucchini, grapes, tomatoes, flowers, etc. Help you make the most of limited garden space and harvest more fruits! Widely Applicable:', '🍇【A Frame Design】The A-shaped design provides 2 growing surfaces to plant your beloved vegetables and flowers, and the inclined design not only maximizes the use of garden space, provides a good growing environment for plants, but also enables your plants to get more sunlight to cultivate higher quality fruits and vegetables, enabling you to maximize harvest and yield. 🥒【High Quality & Perfect Size】Our trellis for cucumbers is made of high quality plastic coated steel pipes in the size of 63 x 63 inches, with a weatherproof, rustproof, durable surface coating that will serve you well for a long time. The triangular design provides stability in windy areas, it will stand firmly and protect your plants well even in harsh weather conditions. 🍅【Let Your Plants Thrive】: Don\'t let your cucumber plants tangle or get stuck in the shade, the garden trellis for vegetables is equipped with nylon mesh and plant binding to fix and support plants, providing a clear climbing path for your plants, and effectively preventing branches and leaves from falling off or breaking, make them more beautifu and healthy.', 'HZY', 'https://i5.walmartimages.com/asr/8357f843-280e-420e-b90d-ba30d36fe5e4.31c094b439bce6a8727c47ae49717fe3.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8357f843-280e-420e-b90d-ba30d36fe5e4.31c094b439bce6a8727c47ae49717fe3.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8357f843-280e-420e-b90d-ba30d36fe5e4.31c094b439bce6a8727c47ae49717fe3.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17530522751, '48 x 48 Inch Garden Cucumber Trellis Vegetable Arch Trellis Green Bean Pea Grape Tomato Squash Trellises for Raised Bed Climbing Plants Outdoor', 42.95, '', 'Help others learn more about this product by uploading a video!5.0 out of 5 stars 48 x 48 Inch Garden Cucumber Trellis Vegetable Arch Trellis Green Bean Pea Grape Tomato Squash Trellises for Raised Bed Climbing Plants Outdoor Share: Found a lower price? Let us know. Although we can\'t match every price reported, we\'ll use your feedback to ensure that our prices remain competitive. Fields with an asterisk * are required** 010203040506070809101112 01020304050607080910111213141516171819202122232425262728293031 *Enter the store name where you found this product* Please select province Please select province * 010203040506070809101112 01020304050607080910111213141516171819202122232425262728293031 Submit Feedback Warranty & Support Feedback', 'Arch Cucumber Trellis: The A-shaped garden trellis is more stable than the traditional A-Frame garden trellis. The garden arch trellis is designed in the shape of a A, allowing for rows to be planted on either side. The arched design maximizes the use of garden space. The garden vegetable trellis provides a good growing environment for climbing plants. Large Garden Cucumber Trellis: Dimensions (L x H): 122 * 122 cm / 48 x 48 inches. The gardening trellis is equipped with nylon netting and plant straps to secure and support plants, increase the vertical space for vegetable and fruit vines, and effectively prevent branches from falling off and breaking. Premium Material: Our cucumber garden trellis is made of durable metal coated steel core. The coating makes the garden arch trellis rust and water resistant. Reliable strength resists damage from heat and harsh weather. Durable nylon netting supports the sturdy melon crop.', 'HZY', 'https://i5.walmartimages.com/asr/0d96db96-1e89-46ab-828d-e904decae2fd.ec9a9627b9aa259562d101e638610630.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d96db96-1e89-46ab-828d-e904decae2fd.ec9a9627b9aa259562d101e638610630.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/0d96db96-1e89-46ab-828d-e904decae2fd.ec9a9627b9aa259562d101e638610630.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17533171400, 'Baby Goblins Mini Decorative Pumpkins, Fresh, 3-Count Pack', 3.28, '823298001883', 'Add a touch of Halloween magic to your seasonal décor with Baby Goblins Mini Pumpkins. These fresh, solid dark green pumpkins bring bold color and natural charm to fall decorating. Perfect for tablescapes, party accents, and porch displays, this convenient 3-pack makes it simple to create a festive look indoors or out.', 'Fresh mini pumpkins in solid dark green color Seasonal accents for Halloween décor, autumn parties, and festive displays Compact size works well for tabletops, centerpieces, and mantels Three-pack offers versatile decorating options Each pumpkin is naturally unique in shape and appearance', 'Baby Goblins', 'https://i5.walmartimages.com/asr/e76ecfed-ae07-41f4-9cba-7671a9cd66cf.346bf696124c7248650185dd0be140e2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e76ecfed-ae07-41f4-9cba-7671a9cd66cf.346bf696124c7248650185dd0be140e2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e76ecfed-ae07-41f4-9cba-7671a9cd66cf.346bf696124c7248650185dd0be140e2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17559058041, 'Thickened Cucumber Trellis for Raised Garden Bed,Foldable Frame Metal Vegetable Trellis for Climbing Plants Outdoor Plant Support for Grape Tomato Peas, Fruit, Vine,Bean(Green)', 49.99, '', 'The sleek metal design adds a touch of modern elegance to your outdoor space, while their foldable frame makes them convenient to store when not in use. Thickened Cucumber Trellis for Raised Garden Bed,Foldable Frame Metal Vegetable Trellis for Climbing Plants Outdoor Plant Support for Grape Tomato Peas, Fruit, Vine,Bean(Green) Share: Found a lower price? Let us know. Although we can\'t match every price reported, we\'ll use your feedback to ensure that our prices remain competitive. Fields with an asterisk * are required **01020304050607080910111201020304050607080910111213141516171819202122232425262728293031*Enter the store name where you found this product*Please select province Please select province *01020304050607080910111201020304050607080910111213141516171819202122232425262728293031Submit Feedback Suitable for Many Kinds of Climbing Vegetable Vine Foldable Frame Metal Garden Trellis Foldable Frame Metal Garden Trellis Foldable Frame Metal Garden Trellis Sturdy Frame is Quite an Aesthetic Asset to Your Garden. Easy to Assemble and Disassemble Videos for this product Foldable Frame Metal Garden Trellis Warranty & Support Feedback', '【HIGH COST PERFORMANCE】Besides the frame trellis, we also provide multiple accessories for your need.Includes 8 x panel trellis, 12 x screw, 6 x ground stakes,20Pcs cable zip ties,a pair of gloves.You may assemble the unit according to the picture.It can also be combined into your favorite or suitable shape. 【DURABLE METAL TRELLS】Trellis frame is made of high duty alloy with Powder Coating that is Anti-Corrosion,Waterproof,Sunscreen and Colorfast.It can withstand harsh weather conditions and will last for many planting seasons.No need to replace your plant Trellis every year. 【EASY TO USE and STORE】Simply fasten the panel with screws,A beautiful garden vegetable frames is perfectly set up,It is easy to be foldable and convenient to store after dismantling.', 'HZY', 'https://i5.walmartimages.com/asr/af2f8fdc-654a-4379-8e13-5e1ab3f4f3e4.0269616a9fb89d3c1d5e45b987511ce2.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af2f8fdc-654a-4379-8e13-5e1ab3f4f3e4.0269616a9fb89d3c1d5e45b987511ce2.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/af2f8fdc-654a-4379-8e13-5e1ab3f4f3e4.0269616a9fb89d3c1d5e45b987511ce2.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17561561312, 'Cucumber Trellis for Raised Beds, 45 x 53 Inch Adjustable Size A-Frame Garden Trellis for Climbing Plant Outdoors with Climbing Net and Plant Support Clip for Vegetable Grape Tomato Garden Supplies', 39.09, '', 'Page 11Page 1 of 1 Cucumber Trellis for Raised Beds, 45 x 53 Inch Adjustable Size A-Frame Garden Trellis for Climbing Plant Outdoors with Climbing Net and Plant Support Clip for Vegetable Grape Tomato Garden Supplies Share: Found a lower price? Let us know. Although we can\'t match every price reported, we\'ll use your feedback to ensure that our prices remain competitive. Fields with an asterisk * are required** 010203040506070809101112 01020304050607080910111213141516171819202122232425262728293031 *Enter the store name where you found this product* Please select province Please select province * 010203040506070809101112 01020304050607080910111213141516171819202122232425262728293031 Submit Feedback LifeisLuck LifeisLuck Videos for this product A-Frame Cucumber Trellis for Raised Beds for Vegetable Videos for this product Trellis for Cucumbers If You\'d Like To Grow Your Own Food Videos for this product Customer Review: Not symmetrical and crooked Warranty & Support Feedback', 'Customizable A-Frame Structure: Elevate your garden with our versatile Adjustable-size A-frame garden trellis for cucumbers. Crafted with 37 straight stakes of 15.74 inches, 2 longer straight stakes of 18.1 inches, 4 A-Fork connectors, and 4 straight connectors, this trellis adapts to your garden\'s needs, providing optimal support for cucumber plants and other climbing vegetables. Innovative Equal Tee and Equal Cross Design: Experience unparalleled stability with the inclusion of 10 equal Tee and 10 equal Cross connectors in our cucumber trellis. This thoughtfully designed vegetable trellis ensures that your cucumber plants, as well as other climbing plants like beans and tomatoes, stand firm and secure throughout the growing season. Durable Construction for Longevity: Crafted with durability in mind, our cucumber trellis features 30 cable zip ties for secure attachment and 1 Pack of 1.8*2.7m garden netting for added climbing. (The size of the net can be cut at will according to your own needs, or fixed with cable ties). Whether you\'re looking for a sturdy trellis for climbing plants outdoors or a reliable cucumber trellis for a raised bed, our product guarantees longevity and resistance to the elements.', 'HZY', 'https://i5.walmartimages.com/asr/ae517f46-d939-4bc8-9c87-40cb3961f201.29e58dacb6cd4ecfdd665a39dab5d691.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ae517f46-d939-4bc8-9c87-40cb3961f201.29e58dacb6cd4ecfdd665a39dab5d691.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/ae517f46-d939-4bc8-9c87-40cb3961f201.29e58dacb6cd4ecfdd665a39dab5d691.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17562170306, 'Baby Ghosts & Goblins Mini Decorative Pumpkins, Fresh Green & White, 4-Count pack', 3.28, '823298001937', 'Celebrate Halloween and autumn gatherings with Baby Ghosts and Goblins Mini Pumpkins. These fresh, solid-colored pumpkins feature a mix of deep green and creamy white tones that add bold contrast to seasonal decorating. The 4 count bag makes it simple to style centerpieces, brighten porch displays, or create unique party accents. Baby Ghosts and Goblins Mini Pumpkins bring a festive and versatile touch to fall celebrations.', 'Fresh mini pumpkins in solid green and white colors Seasonal accents for Halloween décor, fall parties, and autumn displays Compact size makes them ideal for centerpieces, tabletops, and mantels Four-pack provides decorating versatility and value Naturally unique in shape and appearance for authentic seasonal style', 'Frey Farms', 'https://i5.walmartimages.com/asr/e2f9ae44-a574-4f4a-8727-357ff294f3d0.e2db5b2cd2aee4a7970f75b4ab824429.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2f9ae44-a574-4f4a-8727-357ff294f3d0.e2db5b2cd2aee4a7970f75b4ab824429.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/e2f9ae44-a574-4f4a-8727-357ff294f3d0.e2db5b2cd2aee4a7970f75b4ab824429.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17601611107, 'Fresh Peeled Garlic Cloves, 1lb', 5.97, '', 'Garlic Cloves are perfect for salad dressings, marinades, sushi, stir fry & wok cooking, veggies, seafood, chicken & other meats.. Its a must-have in Indian curries. This is a convenient way of making Indian curries with ginger already in a paste. Use it at the beginning of cooking to create a sweet, garlicky base. Add it at the end- traditionally garlic bread, marinades and sauces- for a deeper, more pungent flavor.', 'Makes vegetable ornament more realistic and lifelike It can also be used as an enlightenment toy for children to learn about kinds of vegetables. Suitable for home, supermarket, vegetable shop, art training institution, kindergarten, hotel, etc', 'Unbranded', 'https://i5.walmartimages.com/asr/c8d11d6f-307c-4553-bf25-5bffdff9e3bc.4cff24e8924b18f565b784fb70d06252.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8d11d6f-307c-4553-bf25-5bffdff9e3bc.4cff24e8924b18f565b784fb70d06252.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/c8d11d6f-307c-4553-bf25-5bffdff9e3bc.4cff24e8924b18f565b784fb70d06252.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17687202926, 'Sunchaser Apples 3lb Bag', 3.22, '883391004907', 'Naturally Sweet, Wildly Adventurous. Sunchaser™ apples are sweet, crisp, and ready to fuel your day. Take one with you and bite into adventure. Sunchaser apples sport warm, sweet flavors with a gentle crunch, and familiar aromatics that remind you of your fun days outside with family and friends. Grown in the heart of Washington state apple country, Sunchaser apples soak up summer sun, clean water, and healthy soils, packing flavor and nutrients for your next great escape. Powered by the perfect balance of carbohydrates, fiber, and natural sugars, Sunchaser apples give you clean, steady energy for life’s everyday adventures. Send it with Sunchaser apples!', 'Naturally sweet, crisp, and ready to fuel your day. Warm, sweet flavors. Gentle crunch and familiar aromatics. Perfect balance of carbohydrates, fiber, and natural sugars', 'Sunchaser', 'https://i5.walmartimages.com/asr/76352ca5-3b1e-4d99-a220-3abc6a8111a5.4a976baa8cd6430c1f5a6def0b64f920.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/76352ca5-3b1e-4d99-a220-3abc6a8111a5.4a976baa8cd6430c1f5a6def0b64f920.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/76352ca5-3b1e-4d99-a220-3abc6a8111a5.4a976baa8cd6430c1f5a6def0b64f920.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17703609853, 'Djon-Djon Dried Mushrooms 20g', 4.98, '850008908651', 'Quisqueya Djon-Djon Dried Mushrooms bring the rich, earthy flavor of Haiti’s most beloved culinary ingredient to your kitchen. Known for their deep umami taste and distinctive aroma, Djon-Djon mushrooms are a staple in Haitian cuisine, most famously used in Diri Djon Djon (black mushroom rice). These premium dried mushrooms are carefully selected, sun-dried, and packed to preserve their natural flavor and nutrients.', 'Authentic Haitian Ingredient – Sourced and produced in Haiti for true Caribbean flavor. Rich, Earthy Taste – Adds depth and umami to rice, stews, soups, and sauces. Premium Quality – Carefully dried to lock in aroma, flavor, and nutrients. Nutrient-Rich – Good source of protein and iron, low in fat and sodium. Versatile Use – Ideal for traditional Haitian dishes like Diri Djon Djon, as well as gourmet recipes. Easy to Prepare – Simply soak in hot water before use to release its signature flavor. Shelf-Stable – Long storage life when kept in a cool, dry place. Convenient Size – 0.70 oz (20g) pouch, perfect for home cooking.', 'Quisqueya', 'https://i5.walmartimages.com/asr/deaacf40-fd49-4d42-942e-364fd4fb6e28.ff3ac57629344b9dc820b01511e1ff43.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/deaacf40-fd49-4d42-942e-364fd4fb6e28.ff3ac57629344b9dc820b01511e1ff43.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/deaacf40-fd49-4d42-942e-364fd4fb6e28.ff3ac57629344b9dc820b01511e1ff43.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17768064974, 'Quiskeya Djon-Djon Dried Mushrooms 50g', 9.58, '850008908385', 'Quisqueya Djon-Djon Dried Mushrooms bring the rich, earthy flavor of Haiti’s most beloved culinary ingredient to your kitchen. Known for their deep umami taste and distinctive aroma, Djon-Djon mushrooms are a staple in Haitian cuisine, most famously used in Diri Djon Djon (black mushroom rice). These premium dried mushrooms are carefully selected, sun-dried, and packed to preserve their natural flavor and nutrients.', 'Authentic Haitian Ingredient – Sourced and produced in Haiti for true Caribbean flavor. Rich, Earthy Taste – Adds depth and umami to rice, stews, soups, and sauces. Premium Quality – Carefully dried to lock in aroma, flavor, and nutrients. Nutrient-Rich – Good source of protein and iron, low in fat and sodium. Versatile Use – Ideal for traditional Haitian dishes like Diri Djon Djon, as well as gourmet recipes. Easy to Prepare – Simply soak in hot water before use to release its signature flavor. Shelf-Stable – Long storage life when kept in a cool, dry place.', 'Quisqueya', 'https://i5.walmartimages.com/asr/deaacf40-fd49-4d42-942e-364fd4fb6e28.ff3ac57629344b9dc820b01511e1ff43.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/deaacf40-fd49-4d42-942e-364fd4fb6e28.ff3ac57629344b9dc820b01511e1ff43.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/deaacf40-fd49-4d42-942e-364fd4fb6e28.ff3ac57629344b9dc820b01511e1ff43.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17799813927, 'Organic Grape Tomato', 4.97, '811717030590', 'short description is not available', 'Organic Grape Tomato', 'Unbranded', 'https://i5.walmartimages.com/asr/1d884035-a21a-401a-9426-0c96471dc865.815df32a6a555b69d5439739ef296a1e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d884035-a21a-401a-9426-0c96471dc865.815df32a6a555b69d5439739ef296a1e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1d884035-a21a-401a-9426-0c96471dc865.815df32a6a555b69d5439739ef296a1e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17806260260, 'Grape Tomatoes', 2.77, '852366005133', 'short description is not available', 'Grape Tomatoes', 'Unbranded', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (17980859105, 'Fresh Colada Royale Pineapple', 4.88, '643126972334', 'Boldly Exotic. Pure indulgence. Dole’s latest tropical masterpiece, 15 years in the making and exclusively grown in Honduras, is a completely non-GMO pineapple variety that redefines indulgence. Its soft golden color is lighter and brighter than your typical pineapple, signaling a more refined fruit—juicier, more aromatic, and bursting with a sweet and tangy complexity that truly captivates the palate. With a smaller core for maximum edible fruit and 2.5X higher vitamin B6 levels than other pineapples, Colada Royale™ is as nutritionally rich as it is indulgent. This fresh tropical fruit is perfect for both culinary creativity and everyday luxury. Colada Royale™ isn’t just grown, it’s nurtured with intention. A portion of every purchase supports the development of a community center in Honduras, dedicated to delivering education, healthcare, and vocational training to uplift the region where the fruit’s journey began.', 'Fresh Colada Royale Pineapple Naturally sweeter, golden-fleshed pineapple with a refined tropical flavor Nutritionally rich with 2.5X more vitamin B6 than typical pineapples Supports education, healthcare, and community growth in Honduras', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/8a81f072-bd1a-4390-9bf6-b6645c071227.c882d7f00b1eeefacab2f6b37149f89d.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8a81f072-bd1a-4390-9bf6-b6645c071227.c882d7f00b1eeefacab2f6b37149f89d.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8a81f072-bd1a-4390-9bf6-b6645c071227.c882d7f00b1eeefacab2f6b37149f89d.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18002104746, 'Fresh Navel Oranges, 8 lb Bag', 9.97, '072240601187', 'Enjoy the juicy goodness of Fresh Navel Oranges. A great source of vitamin C, these oranges can be a satisfying afternoon snack, or you can use them in a variety of recipes. For breakfast, use these navel oranges to make a rich and creamy smoothie or serve them alongside your pancakes, sausage, and eggs. Slice these oranges and use them to add flavor to a lunchtime salad or as a garnish for your favorite cocktail. Oranges are used in many tasty desserts like ambrosia, orange bars, and zesty orange pie. Get creative in the kitchen and make homemade orange marmalade or a refreshing orange sorbet. However you choose to use them, Fresh Navel Oranges add flavor to any meal or beverage.', 'Great source of vitamin C Use to add zest and flavor to your meals and beverages Enjoy on their own or in a variety of recipes Make a creamy orange smoothie Serve with your pancake breakfast Adds flavor to a variety or recipes Use as a garnish for your favorite cocktail Make sweet desserts like ambrosia, orange bars, and orange pie', 'FIELDPACK UNBRANDED', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18061719361, 'Prico Fresh Squash Chunks, 16oz', 2.97, '687398561063', 'Add some fresh flavor to your meal with \"Calabaza en Trozos\" fresh squash. This versatile vegetable can be used in a variety of dishes to create delicious and decadent meals. You place in the slow cooker with chicken breast, kidney beans, and spices. Create tasty and flavorful meals with this vegetable.', 'Versatile ingredient Roast the whole squash for the perfect side dish put into a slow cooker, and mix with chicken breast, beans, and spices for a flavorful dish Versatile ingredient Roast the whole squash for the perfect side dish or chop into cubes, put into a slow cooker, and mix with chicken breast, beans, and spices for a flavorful dish Use it to create a sweet and decadent pie', 'PRICO PRODUCE LLC', 'https://i5.walmartimages.com/asr/3d930da9-7178-4bb0-b48d-728ebb5dbea4.689e07664daabd8535976b6a726f2f06.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d930da9-7178-4bb0-b48d-728ebb5dbea4.689e07664daabd8535976b6a726f2f06.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/3d930da9-7178-4bb0-b48d-728ebb5dbea4.689e07664daabd8535976b6a726f2f06.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18124201399, 'Spice World Fresh Garlic Sleeve, 3 Count', 1.74, '070969000908', 'Take your culinary creations to the next level with fresh, flavorful Garlic. Garlic\'s signature flavors become caramelized and sweeter when cooked, making it a perfect accompaniment to many dishes such as pasta, shrimp, chicken, stews, and more. Garlic also goes great in creamed soups, on all types of roasts, in a variety of egg dishes, or used simply with sauteed or roasted vegetables. To prepare garlic for cooking, you\'ll need to break it up into individual cloves and peel the skin. Once you\'ve done this, you can mince the garlic by chopping it into fine pieces. Spice up your next meal with a tasty clove of fresh Garlic.', 'Spice World Fresh Garlic Bulbs, 3 count', 'Fresh Produce', 'https://i5.walmartimages.com/asr/1987f303-5f7b-4250-a4be-15735b797999.ee158276b27318447e0e876cc3b1291b.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1987f303-5f7b-4250-a4be-15735b797999.ee158276b27318447e0e876cc3b1291b.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/1987f303-5f7b-4250-a4be-15735b797999.ee158276b27318447e0e876cc3b1291b.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18264416588, 'Fresh Jalapeno Pepper, Approx. 3-5 per 0.25 Pound', 0.41, '000000047135', 'Jalapeno Peppers, 1 Lb.', 'Jalapeno Pepper, 1 each: Naturally low in calories Rich in vitamins C, B6, A, and K Stuff jalapeno peppers and wrap in bacon for poppers, add to enchiladas or chili, or make a zesty salsa Approximately 3-5 peppers per .25 lb Versatile and delicious Jalapeno Peppers, 1 lb. Approximately 17 jalapenos per lb.', 'Fresh Produce', 'https://i5.walmartimages.com/asr/540e857c-d063-4ad1-96a4-553c237171b3.080e0d33d92e26a5822927761234c7f1.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/540e857c-d063-4ad1-96a4-553c237171b3.080e0d33d92e26a5822927761234c7f1.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/540e857c-d063-4ad1-96a4-553c237171b3.080e0d33d92e26a5822927761234c7f1.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18264416589, 'Fresh Kishu Kisses Mandarins, 1 lb Bag', 1.64, '899783002147', 'Enjoy the delightful freshness of Kishu Kisses Mandarins, perfect for snacking anytime. These miniature mandarins offer a burst of sweetness and tang with every bite, packed in a convenient 1 lb bag. Great for kids and adults alike, they are easy to peel and full of flavor, making them an ideal choice for healthy munching throughout the day. With high vitamin C content and other nutritional benefits, these mandarins are both delicious and nutritious, sourced and packaged with care for superior quality and taste.', 'Sweet and tangy flavor ideal for fresh snacking Each bag contains 1 lb of tiny mandarins Easy to peel and enjoy for all ages Packed with Vitamin C and essential nutrients Perfect for adding zest to your fruit salads', 'Kishu Kisses', 'https://i5.walmartimages.com/asr/f489b337-9c7f-4b1e-83b7-e5af3681c33c.3c70ddca48cdf1acacaf7b9241a934dc.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f489b337-9c7f-4b1e-83b7-e5af3681c33c.3c70ddca48cdf1acacaf7b9241a934dc.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/f489b337-9c7f-4b1e-83b7-e5af3681c33c.3c70ddca48cdf1acacaf7b9241a934dc.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18296219457, 'Fresh Green Leaf Lettuce, Each', 2.62, '882623762677', 'Fresh Green Leaf Lettuce is the perfect way to add more greens to your diet. This leafy lettuce is the perfect base for creating a variety of salads. Chop it up, add a protein like grilled chicken, a cheese like feta, candied pecans, and dried cranberries with a sweet vinaigrette for a sweet and tangy salad. Add it to spring rolls for a crunchy, refreshing addition. You could use it as a lettuce boat or wrap when you are wanting to still eat leafy greens but don\'t want a salad. It\'s low in calories making it perfect for adding to a healthy diet. Enjoy the crisp and refreshing taste of Fresh Green Leaf Lettuce.', 'Fresh Green Leaf Lettuce, Each Perfect base for creating salads Chop it and mix with grilled chicken, feta cheese, candied pecans, dried cranberries and a vinaigrette Add it to a spring roll for fresh addition Use it as a lettuce wrap or lettuce boat for something different Low calorie making it perfect for a healthy diet', 'Fresh Produce', 'https://i5.walmartimages.com/asr/43584fcd-d522-41d9-8b26-c8e671d4850e.86fe376258eaa7ba3a75e3e261877292.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/43584fcd-d522-41d9-8b26-c8e671d4850e.86fe376258eaa7ba3a75e3e261877292.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/43584fcd-d522-41d9-8b26-c8e671d4850e.86fe376258eaa7ba3a75e3e261877292.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18314008883, 'Fresh Peelz California Mandarin Oranges, 3 lb Bag', 3.97, '091636000021', 'Peelz mandarin oranges are nature’s most convenient snack; juicy, sweet, and easy to peel. Grown in California and picked at peak ripeness, these seedless mandarin oranges are a great source of vitamin C and perfect for busy days, lunch boxes, or healthy snacking at home. No prep, no mess; just delicious citrus flavor in every bite. Peelz mandarin oranges are happiness you can hold.', 'Fresh mandarin oranges Seedless, sweet, and easy-to-peel Excellent source of vitamin C Great for snacks, school lunches, and on-the-go Grown and harvested in California Naturally flavorful and refreshing', 'Peelz Citrus', 'https://i5.walmartimages.com/asr/7c8c9121-96a3-4d5e-8da8-6981f68f9dbb.33ecd59b68702f0e535a4b203736e185.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c8c9121-96a3-4d5e-8da8-6981f68f9dbb.33ecd59b68702f0e535a4b203736e185.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/7c8c9121-96a3-4d5e-8da8-6981f68f9dbb.33ecd59b68702f0e535a4b203736e185.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18334352056, 'Fresh Strawberries, 2 lb Package', 8.78, '715756200221', 'The sweet, juicy flavor of Fresh Strawberries make them a refreshing and delicious treat. Enjoy them for breakfast, lunch, dinner, or dessert. Use them as topping for pancakes, bake them in a mouthwatering bread, mix them with cucumbers for a light and flavorful salad, or puree them for strawberry shortcake. They contain essential vitamins and nutrients like, vitamin C, fiber, potassium, vitamin B and magnesium making them perfect for a healthy diet. Prior to serving simply gently wash them, remove the leafy caps, and enjoy the fresh taste. Refrigerate the berries in original Clam Shell to keep them fresh and ready for use. Pick up Fresh Strawberries today and savor the delectable flavor.', 'Fresh Strawberries, 2 lb: Prior to serving gently wash them and remove leafy cap Refrigerate your strawberries in the original Clam Shell container to maintain freshness Keep dry for optimal freshness Rich in vitamin C Use them as topping for pancakes, mix them with spinach and goat cheese for a light and flavorful salad, or puree them to make a delicious cocktail', 'FIELDPACK UNBRANDED', '', '', ''); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18340206833, 'Fresh Peelz California Mandarin Oranges, 5 lb Bag', 6.67, '091636000038', 'Peelz mandarin oranges are nature’s most convenient snack; juicy, sweet, and easy to peel. Grown in California and picked at peak ripeness, these seedless mandarin oranges are a great source of vitamin C and perfect for busy days, lunch boxes, or healthy snacking at home. No prep, no mess; just delicious citrus flavor in every bite. Peelz mandarin oranges are happiness you can hold.', 'Fresh mandarin oranges Seedless, sweet, and easy-to-peel Excellent source of vitamin C Great for snacks, school lunches, and on-the-go Grown and harvested in California Naturally flavorful and refreshing', 'Peelz Citrus', 'https://i5.walmartimages.com/asr/8eb8e0f4-d2f7-47fd-95a1-a5a1378897bc.a65fd83ff834e5a470d1be3e51b7daac.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8eb8e0f4-d2f7-47fd-95a1-a5a1378897bc.a65fd83ff834e5a470d1be3e51b7daac.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8eb8e0f4-d2f7-47fd-95a1-a5a1378897bc.a65fd83ff834e5a470d1be3e51b7daac.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18340256470, 'Organic Grape Tomato', 3.98, '741243001453', 'short description is not available', 'Organic Grape Tomato', 'Unbranded', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b95ba6f2-9927-49d6-91b9-a5cb893c49ac.a4ecb396d30d1009ae015fe71c1afa7e.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18379756903, 'Brightfarms Butter Crunch 4 Oz', 2.48, '857062004992', 'BrightFarms Butter Crunch is the perfect base for any salad, burger or sandwich. It combines our signature Crunchy Green Leaf Lettuce with our Sweet Baby Butter for an approachable and satisfying blend that is versatile and packed with texture. Grown nearby in a state-of-the-art greenhouse, the salad greens go from farm to store in as little as 24 hours ensuring they are fresh, crunchy and long-lasting in your fridge -- in fact we guarantee it! By growing indoors using a hands-free growing process, we eliminate the use of pesticides on our produce so that the greens are ready to eat from the container, with no need to wash. At BrightFarms, we are on a mission to grow salads in a way that is better for people and the planet, transforming the way people eat and enjoy fresh produce - and shaping a more sustainable future for food.', 'Pesticide, herbicide and fungicide free greens Greenhouse grown, for guaranteed fresh greens year-round No need to wash Responsibly grown, harnessing the power of technology to do more with less: less water, less land, less shipping fuel to produce more Non-GMO Perfect for salads, sandwiches, wraps and more', 'BrightFarms', 'https://i5.walmartimages.com/asr/b3a8160d-9f4a-409e-97ec-bce088429a1a.d75498a01d56c4f0e2c5d8431982aa04.png?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3a8160d-9f4a-409e-97ec-bce088429a1a.d75498a01d56c4f0e2c5d8431982aa04.png?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/b3a8160d-9f4a-409e-97ec-bce088429a1a.d75498a01d56c4f0e2c5d8431982aa04.png?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18404772802, 'Rambutan Bag 12oz', 4.98, '858335003872', 'Fresh Rambutan brings a burst of tropical sweetness to your table with its juicy, mildly tart flavor and exotic appeal. This unique fruit has a soft, translucent flesh that\'s easy to peel and enjoy, revealing a refreshing taste similar to lychee or grapes. The seed in the center can even be cooked and eaten, adding versatility to your kitchen creations. Perfect for snacking, fruit salads, or party platters, rambutan makes a colorful and fun addition to any occasion. Add a touch of the tropics to your day with Fresh Rambutan.', 'Rambutan Bag 12oz Sweet and mildly acidic tropical fruit with juicy flesh Easy to peel to enjoy the soft, refreshing inside Seed in the center can be cooked and eaten Great for fruit salads, desserts, or snacking Vibrant, eye-catching fruit ideal for entertaining', 'Unbranded', 'https://i5.walmartimages.com/asr/77e6eb3b-0889-432a-a260-8b57077acea9.ca904ceed7db4651ca4f1cee9934400f.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77e6eb3b-0889-432a-a260-8b57077acea9.ca904ceed7db4651ca4f1cee9934400f.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77e6eb3b-0889-432a-a260-8b57077acea9.ca904ceed7db4651ca4f1cee9934400f.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18545811032, 'Fresh Mandarin, 2 lb Bag', 4.47, '856552006898', 'Enjoy the juicy goodness of citrus when you eat a Fresh Mandarin Orange. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Generally a winter fruit, mandarins are now available year-round in most markets. Mandarins are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the mandarins hang out in a bowl on your counter or table to breathe. Compact and portable, mandarins are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious fresh mandarin on hand for an easy, healthy treat.', 'Excellent source of vitamin C, potassium, and folic acid Easy to peel and segment Delicious, sweet, juicy citrus', 'Tropic sun', 'https://i5.walmartimages.com/asr/77fe3f93-6452-4025-86fb-580abf7cfee1.7211c31e4ad71d91494cdfed05f06348.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77fe3f93-6452-4025-86fb-580abf7cfee1.7211c31e4ad71d91494cdfed05f06348.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77fe3f93-6452-4025-86fb-580abf7cfee1.7211c31e4ad71d91494cdfed05f06348.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (18827366854, 'Fresh Whole Yellow Jumbo Onion, lb', 1.77, '400094290262', 'Cebolla Amarillas, 1 Lb.', 'Less pungent than other varieties of onions Mild, sweet flavor Great in dishes that feature onion as a primary flavor, like onion soup Yummy addition to salads and sandwiches Store in the refrigerator for best results Packed with minerals and vitamins Delicious and nutritious', 'Cebolla Amarillas', 'https://i5.walmartimages.com/asr/8adcca7f-66b3-443c-a934-933e6b40f4e5.814b32ee4d8a412896cf27b4bf01095c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8adcca7f-66b3-443c-a934-933e6b40f4e5.814b32ee4d8a412896cf27b4bf01095c.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/8adcca7f-66b3-443c-a934-933e6b40f4e5.814b32ee4d8a412896cf27b4bf01095c.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (19131953443, 'Welch Fresh Mandarin, 2 lb Bag', 4.47, '095829851704', 'Enjoy the juicy goodness of citrus when you eat a Fresh Mandarin Orange. Deliciously sweet and juicy, these orange orbs of goodness are very easy to peel. Generally a winter fruit, mandarins are now available year-round in most markets. Mandarins are an excellent source of vitamin C, potassium, and folic acid. For maximum flavor, don\'t refrigerate; just let the mandarins hang out in a bowl on your counter or table to breathe. Compact and portable, mandarins are great to pack in your lunchbox, toss into your gym bag for a post-workout refreshment, or take on a road trip as a healthy alternative to those gas station snacks. Keep some easy-to-peel, juicy, sweet, and delicious fresh mandarin on hand for an easy, healthy treat.', 'Excellent source of vitamin C, potassium, and folic acid Easy to peel and segment Delicious, sweet, juicy citrus', 'Welch\'s', 'https://i5.walmartimages.com/asr/77fe3f93-6452-4025-86fb-580abf7cfee1.7211c31e4ad71d91494cdfed05f06348.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77fe3f93-6452-4025-86fb-580abf7cfee1.7211c31e4ad71d91494cdfed05f06348.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/77fe3f93-6452-4025-86fb-580abf7cfee1.7211c31e4ad71d91494cdfed05f06348.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); -INSERT INTO `Walmart` (`item_id`, `name`, `retail_price`, `upc`, `shortDescription`, `longDescription`, `brandName`, `thumbnailImage`, `mediumImage`, `largeImage`) VALUES (19226723392, 'FRESH SQUASH CHAYOTE', 2.27, '687398561285', 'Create tasty meals and side dishes with Chayote Squash. It\'s ideal to use for creating authentic Cajun cuisine and can be grilled, stir-fried, boiled, steamed or baked. This chayote squash can also be sliced or shredded and used in salads and slaws, or you can boil it and mash like a potato. It has a mild and slightly sweet taste with light notes of cucumber. Naturally low in calories and fat, chayote squash is an excellent source of vitamin C, vitamin B6, folate, fiber, and potassium. Expand your culinary repertoire when you use Chayote Squash to create delicious dishes.', 'Ideal for making authentic Cajun dishes Can be grilled, stir-fried, boiled, steamed or baked Slice or shred raw chayote to use in salads and slaws Mild and slightly sweet taste Provides an excellent source of vitamin C, vitamin B6, folate, dietary fiber and potassium Use in soups, stews, curries and casseroles', 'PRICO PRODUCE', 'https://i5.walmartimages.com/asr/cc50caec-e342-4082-af5d-863233ba8261.d00f4210171436005691efba725fa6a8.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc50caec-e342-4082-af5d-863233ba8261.d00f4210171436005691efba725fa6a8.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff', 'https://i5.walmartimages.com/asr/cc50caec-e342-4082-af5d-863233ba8261.d00f4210171436005691efba725fa6a8.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff'); diff --git a/WalmartPipeline/TaxonomyBrowsing/generateTaxonomy.js b/WalmartPipeline/TaxonomyBrowsing/generateTaxonomy.js index c5191c3..3722cc0 100644 --- a/WalmartPipeline/TaxonomyBrowsing/generateTaxonomy.js +++ b/WalmartPipeline/TaxonomyBrowsing/generateTaxonomy.js @@ -1,74 +1,60 @@ +/** + * generateTaxonomy.js + * + * Downloads the Walmart product taxonomy and saves it to JSON. + * Run this first, then use browseTaxonomyExport.js to pick which + * subtrees you want to export as CSVs. + * + * Needs WM_CONSUMER_ID, WM_KEY_VERSION, WM_PRIVATE_KEY in .env. + */ + +import dotenv from 'dotenv'; +dotenv.config(); import crypto from 'crypto'; import fs from 'fs'; import path from 'path'; +import { fileURLToPath } from 'url'; -// Walmart base -const BASE = 'https://developer.api.walmart.com'; +const __filename = fileURLToPath(import.meta.url); -// Taxonomy endpoint (Affiliates v1 taxonomy docs) -// If your earlier working script used a different path, swap it here. +const BASE = 'https://developer.api.walmart.com'; const TAXONOMY_PATH = '/api-proxy/service/affil/product/v2/taxonomy'; -// Output files -const OUT_PRETTY = path.resolve(process.cwd(), 'taxonomy.json'); -const OUT_RAW = path.resolve(process.cwd(), 'taxonomy_raw.json'); - -/* -------------------- AUTH / HEADERS -------------------- */ - -const keyData = { - consumerId: '39d025f8-e575-48cf-aa4e-22f89da4c16f', - keyVer: '5', // keep as STRING; must match walmart.io key version exactly - privateKeyPem: `-----BEGIN RSA PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC1hpiZMh1pyN6k -oDO95qK3L+/uY3M+sUpcnQkuNdFPBChh3jxEjn3zQLm88rdBTKQVqDD8E7g2KBHX -wYaSiKqqXcBkMkPfEEyTE/I//BjDF5dS+sgR6uIJmfsNVIVkY7laxo0STFCO3G+V -gkHTp8u/lJ5Aa8NSxu4BYlR0wBpze40aHYBeQw/+QuPvZzNeUf5YNC3rs5eId2f5 -N0rA2mZfY1myzE6UarW+5+WrWbkR0Bwrvs+8B/S8Jh4QFmh2EDaucisx96MXSH5S -3BuzBxqE9Txo4TKGu0y/aDmRU1Ij5WP88VnURU3vna1UF5n/pPw6InzvcQkeGS1o -thpyvCvtAgMBAAECggEABFOmXm5twvqOQpRa0/Gxo9YX/0iJoZPPdcPhLdF5N/lU -bqdUGeyojxoD41rkHviDXpXH9x9YxwevQp7QcrygjsU6Xv2YuekC3j69ycjcHKqf -UlygHdc3O2r/tHOr1G2RFhITIIbHEqSpqqY9ke7paxtaOQKojqpL/F1jdr8WduM9 -WQqbpgk+Hc6PIYVdUeALMX+IGNWbZiX6zqm85IKUdAA4/V0RCMl/j9ySBP6TsT06 -5IXK63urXl+AOJh1tHV79GP/waETEc6rQ8Ntn9p3HsUtsx6qiLSky7E2m2L3rdVd -LOzM2vVQDKr0SMGfx4/ZA79OJbLvJnwon9l4WdxmeQKBgQDb4L7sI4FnnD7uAaV5 -NTxt6ELJIpgxalTXbGiD6BoGN7LPbRfLJmKP4pGbNkfxtLZKsrTXOE1z5bTurRzY -dsH9pEmhBf7SdYtNrnPZCfOwpZaK/PyVdIggnaAiVYD6Q5urNcTltOA9SLdxGJyE -Ny8GpdB/ItmRCUkru4uk8L3KFQKBgQDTWOaBQRPvrL7sl4nVrTlfaxDTYulFgqSx -j3ag+RBhCwvFVNxb710moIEtThpDnaLNJCc6JQ+QebrsDP7Q49eOxqKbbbLOHGrt -akkeMROg6+MaL7HMAMsjCj7hBnpSjCg94ldHuJ0d8/PB60amIES/TTOyTsssxIlD -HcoX4JsIeQKBgDVHF/wP/mMksPrq2zWreKEJDmW+RDJ1GWm5kvmjW+r1xBYO0R0g -h/FlbPK3DGe86g7fjoI32kyi9FyBBeRNomPbUxv5X+2PHdoM03Vbu/ippvi2pF1y -hymgCBVJsp7xkt7BgJxIX6152TlGRWakGHj75LFpuF40ac52+zdUPiihAoGASmQU -XpKljctkOKruXUPn2eo5te4u5cSia81vmCGS3lWhAwhnuAR86Ue9sFC5detajpKX -LCQ3Ykc2wDeiyawpB5xrSAJI2buu93pd2j60BgSBn4oCLyhoWCEXGOXK0Jt83qt4 -xUn6I7zmo+9Iotjg2eU2uSB663sSRYmKxPTOHSECgYEAr9GDqLgORkKWwXhMAe3h -R0tYdGzWqpOiVNi1hcNMGfNwQekfIAM9NVarIib5JYPkSQQQWJZVXcTlR2YZbf9/ -P5VgNbNkV23Nq7j926cpbSlgb+UsZOCC5zTaJ0L6oePnK5R38v54y2XC9ccqW6FP -sVP5T4Vx30thw2cpbOY227Q= ------END RSA PRIVATE KEY-----`, -}; - -function canonicalizeForSignature({ consumerId, ts, keyVer }) { - const map = { - 'WM_CONSUMER.ID': String(consumerId).trim(), - 'WM_CONSUMER.INTIMESTAMP': String(ts).trim(), - 'WM_SEC.KEY_VERSION': String(keyVer).trim(), - }; +function loadCredentials() { + const consumerId = process.env.WM_CONSUMER_ID; + const keyVer = process.env.WM_KEY_VERSION; + const privateKeyPem = process.env.WM_PRIVATE_KEY; + + if (!consumerId || !keyVer || !privateKeyPem) { + throw new Error( + 'Missing Walmart credentials in .env: WM_CONSUMER_ID, WM_KEY_VERSION, WM_PRIVATE_KEY', + ); + } - const sortedKeys = Object.keys(map).sort(); - return sortedKeys.map((k) => map[k]).join('\n') + '\n'; + return { consumerId, keyVer, privateKeyPem }; } -function buildAuthHeaders() { - const id = String(keyData.consumerId).trim(); - const kv = String(keyData.keyVer).trim(); +// same signing logic as fetchProducts.js - Walmart needs this on every request +function buildAuthHeaders(creds) { + const id = String(creds.consumerId).trim(); + const kv = String(creds.keyVer).trim(); const ts = String(Date.now()).trim(); - const toSign = canonicalizeForSignature({ consumerId: id, ts, keyVer: kv }); + const fields = { + 'WM_CONSUMER.ID': id, + 'WM_CONSUMER.INTIMESTAMP': ts, + 'WM_SEC.KEY_VERSION': kv, + }; + + const canonicalized = + Object.keys(fields) + .sort() + .map((k) => fields[k]) + .join('\n') + '\n'; const signature = crypto - .sign('RSA-SHA256', Buffer.from(toSign, 'utf8'), { - key: keyData.privateKeyPem, + .sign('RSA-SHA256', Buffer.from(canonicalized, 'utf8'), { + key: creds.privateKeyPem, padding: crypto.constants.RSA_PKCS1_PADDING, }) .toString('base64'); @@ -83,44 +69,51 @@ function buildAuthHeaders() { }; } -/* -------------------- MAIN -------------------- */ +// fetches the taxonomy and saves two files: the raw response and a pretty-printed version +export async function run(opts = {}) { + const outPretty = + opts.outPretty ?? path.resolve(process.cwd(), 'taxonomy.json'); + const outRaw = + opts.outRaw ?? path.resolve(process.cwd(), 'taxonomy_raw.json'); + + const creds = loadCredentials(); -async function main() { const url = new URL(BASE + TAXONOMY_PATH); url.searchParams.set('format', 'json'); console.log('Requesting taxonomy:'); console.log(url.toString(), '\n'); - const headers = buildAuthHeaders(); - + const headers = buildAuthHeaders(creds); const res = await fetch(url.toString(), { headers }); const text = await res.text(); // Always save raw response for debugging - fs.writeFileSync(OUT_RAW, text, 'utf8'); - console.log(`Saved raw response to: ${OUT_RAW}`); + fs.writeFileSync(outRaw, text, 'utf8'); + console.log(`Saved raw response to: ${outRaw}`); if (!res.ok) { throw new Error(`HTTP ${res.status} ${res.statusText}\n${text}`); } - // Parse + pretty print let data; try { data = JSON.parse(text); } catch (e) { throw new Error( - `Response was not valid JSON. Raw response saved to taxonomy_raw.json.\nParse error: ${e.message}`, + `Response was not valid JSON. Raw response saved to ${path.basename(outRaw)}.\nParse error: ${e.message}`, ); } - fs.writeFileSync(OUT_PRETTY, JSON.stringify(data, null, 4), 'utf8'); - console.log(`Saved pretty taxonomy to: ${OUT_PRETTY}`); + fs.writeFileSync(outPretty, JSON.stringify(data, null, 4), 'utf8'); + console.log(`Saved taxonomy to: ${outPretty}`); + + return data; } -main().catch((e) => { - console.error('\nFailed to download taxonomy:'); - console.error(e.message); - process.exit(1); -}); +if (process.argv[1] === __filename) { + run().catch((e) => { + console.error('\nFailed to download taxonomy:', e.message); + process.exit(1); + }); +} diff --git a/WalmartPipeline/classify_ingredients.py b/WalmartPipeline/classify_ingredients.py index b679053..8537e10 100644 --- a/WalmartPipeline/classify_ingredients.py +++ b/WalmartPipeline/classify_ingredients.py @@ -1,20 +1,20 @@ #!/usr/bin/env python3 """ -Food Product Ingredient Classifier — Hybrid Edition (M4 Optimised) +classify_ingredients.py -Three-pass strategy: - Pass 1 — Explicit keyword rules (~65% of products, instant) - Pass 2 — Food-category default (~25% more, instant, no LLM) - Pass 3 — LLM for true unknowns (~10% or less) +Reads all the CSVs from walmart_CSVs/ and figures out which products are +cooking ingredients. Uses three passes: + 1. Keyword rules - catches ~65% of products instantly + 2. Category check - another ~25%, no LLM needed + 3. Ollama LLM - handles the remaining ~10% that are genuinely ambiguous -Recommended for Apple Silicon M4: +Run with --no-llm to skip the LLM entirely (that's the default from runner.js). +If you do want LLM mode, make sure ollama is running first: ollama pull llama3.2:1b - python classify_ingredients.py /path/to/folder -m llama3.2:1b -w 8 -b 25 + python classify_ingredients.py /path/to/csvs -m llama3.2:1b -w 8 -Setup: - 1. Install Ollama: https://ollama.com/download - 2. Pull model: ollama pull llama3.2:1b - 3. Run: python classify_ingredients.py /path/to/csv/folder -m llama3.2:1b -w 8 +The 15 category tags (PRODUCE, PROTEIN, DAIRY, etc.) are shared with +kroger_catalogue.js - any changes here should be reflected there too. """ import csv @@ -27,16 +27,16 @@ from concurrent.futures import ThreadPoolExecutor, as_completed from threading import Lock -# ── Configuration ───────────────────────────────────────────────────────────── - -DEFAULT_MODEL = "llama3.2:1b" # fastest model; still accurate for classification -DEFAULT_WORKERS = 8 # M4 unified memory handles this easily +# --- Configuration --- +DEFAULT_MODEL = "llama3.2:1b" +DEFAULT_WORKERS = 8 DEFAULT_BATCH = 25 OLLAMA_BASE_URL = "http://localhost:11434" -# ══════════════════════════════════════════════════════════════════════════════ -# PASS 1 — EXPLICIT KEYWORD RULES -# ══════════════════════════════════════════════════════════════════════════════ +# --- keyword rules --- +# These two sets handle most of the work without touching the LLM. +# Non-ingredient check runs first so things like "frozen dinner" don't +# accidentally match "frozen vegetable" in the ingredient rules below. NON_INGREDIENT_KEYWORDS = { # Prepared / frozen meals @@ -133,277 +133,357 @@ "deli prepared", "deli meals", } +# Ingredient rules - format is (keyword set, [tags to assign]). +# Synced with the search terms in kroger_catalogue.js FOOD_CATEGORIES. +# Kroger terms come first (marked "canonical"), then Walmart-specific variants. +# Keywords are matched against lowercased product name + category_name. + INGREDIENT_RULES: list[tuple[set[str], list[str]]] = [ - # PRODUCE - ({"fresh vegetable", "fresh fruit", "organic vegetable", "organic fruit", - "frozen vegetable", "frozen fruit", - "broccoli", "cauliflower", "spinach", "kale", "arugula", "romaine", - "iceberg lettuce", "butter lettuce", "mixed greens", "collard greens", - "brussels sprout", "cabbage", "bok choy", "napa cabbage", - "carrot", "celery", "cucumber", "zucchini", "squash", - "bell pepper", "jalapeño", "serrano pepper", "habanero", - "poblano", "anaheim pepper", "banana pepper", - "cherry tomato", "grape tomato", "roma tomato", - "red onion", "yellow onion", "white onion", "shallot", - "scallion", "green onion", "leek", - "garlic bulb", "garlic clove", "garlic head", - "portobello", "shiitake", "cremini", "button mushroom", - "oyster mushroom", "enoki", "chanterelle", - "asparagus", "artichoke", "beet", "turnip", "parsnip", - "sweet potato", "yam", "russet potato", "red potato", "yukon gold", - "fingerling potato", "corn on the cob", "fresh corn", - "green bean", "snap pea", "sugar snap", "snow pea", - "eggplant", "okra", "fennel bulb", "radish", "jicama", - "apple", "pear", "orange", "lemon", "lime", "grapefruit", - "banana", "mango", "pineapple", "papaya", "kiwi", - "strawberry", "blueberry", "raspberry", "blackberry", - "watermelon", "cantaloupe", "honeydew", - "peach", "nectarine", "plum", "apricot", "cherry", - "avocado", "fig", "pomegranate", "passion fruit", - }, ["PRODUCE"]), - # FRESH HERBS - ({"fresh basil", "fresh parsley", "fresh cilantro", "fresh thyme", - "fresh rosemary", "fresh mint", "fresh dill", "fresh chives", - "fresh tarragon", "fresh oregano", "fresh sage", - "fresh lemongrass", "fresh ginger root", "fresh turmeric root", - "herb bunch", "herb packet", - }, ["FRESH_HERB"]), - # PROTEIN - ({"chicken breast", "chicken thigh", "chicken wing", "chicken leg", - "chicken tender", "whole chicken", "chicken drumstick", - "ground chicken", "ground turkey", "turkey breast", "whole turkey", - "ground beef", "beef chuck", "beef brisket", "beef rib", - "flank steak", "skirt steak", "ribeye", "sirloin", "tenderloin", - "beef roast", "beef stew meat", "beef short rib", - "pork chop", "pork loin", "pork belly", "pork shoulder", - "pork tenderloin", "baby back rib", "pork rib", "spare rib", - "ham steak", "uncured ham", "spiral ham", - "lamb chop", "lamb leg", "ground lamb", "rack of lamb", - "salmon fillet", "salmon steak", "whole salmon", - "tuna steak", "tuna fillet", "tilapia", "cod fillet", "halibut", - "mahi mahi", "sea bass", "snapper", "trout", "catfish", - "shrimp", "scallop", "lobster tail", "crab leg", "crab meat", - "clam", "mussel", "oyster", "squid", "octopus", - "bacon", "pancetta", "prosciutto", "salami", "pepperoni", - "chorizo", "andouille", "bratwurst", "italian sausage", - "breakfast sausage", "sausage link", "sausage patty", - "deli turkey", "deli ham", "deli roast beef", "deli chicken", - "lunch meat", "deli meat", "sliced meat", - "tofu", "extra firm tofu", "silken tofu", "firm tofu", - "tempeh", "seitan", "textured vegetable protein", - "edamame", "black bean", "pinto bean", "kidney bean", - "chickpea", "lentil", "split pea", "navy bean", - "great northern bean", "cannellini bean", "fava bean", - "dozen eggs", "large eggs", "medium eggs", "free range egg", - "cage free egg", "organic egg", "egg whites", "liquid egg", - }, ["PROTEIN"]), - # DAIRY - ({"whole milk", "skim milk", "2% milk", "1% milk", "nonfat milk", - "reduced fat milk", "lactose free milk", "organic milk", - "buttermilk", "evaporated milk", "condensed milk", "dry milk", - "powdered milk", - "heavy cream", "heavy whipping cream", "whipping cream", - "half and half", "light cream", - "sour cream", "creme fraiche", - "cream cheese", "neufchatel", "mascarpone", "ricotta", - "cottage cheese", "farmers cheese", - "fresh mozzarella", "burrata", - "cheddar cheese", "cheddar block", "shredded cheddar", - "parmesan", "parmigiano", "romano cheese", "asiago", - "gruyere", "emmental", "swiss cheese", - "gouda", "edam", "havarti", "fontina", "provolone", - "brie", "camembert", "gorgonzola", "roquefort", "stilton", - "blue cheese", "feta cheese", "queso fresco", "queso blanco", - "monterey jack", "colby", "pepper jack", - "butter stick", "unsalted butter", "salted butter", "european butter", - "ghee jar", "clarified butter", - "greek yogurt", "plain yogurt", "whole milk yogurt", "nonfat yogurt", - "skyr", "kefir", "whipped cream can", - }, ["DAIRY"]), - # GRAIN - ({"all purpose flour", "bread flour", "whole wheat flour", - "cake flour", "pastry flour", "self rising flour", - "almond flour", "coconut flour", "oat flour", "rye flour", - "spelt flour", "cassava flour", "chickpea flour", "rice flour", - "white rice", "brown rice", "jasmine rice", "basmati rice", - "arborio rice", "wild rice", "instant rice", - "spaghetti", "penne", "rigatoni", "fusilli", "rotini", - "farfalle", "linguine", "fettuccine", "tagliatelle", - "angel hair", "orzo", "macaroni", "lasagna noodle", - "egg noodle", "ramen noodle", "soba noodle", "udon noodle", - "rice noodle", "vermicelli noodle", "glass noodle", - "rolled oat", "quick oat", "steel cut oat", "instant oat", - "cornmeal", "polenta", "grits", "semolina", - "breadcrumb", "panko", "plain breadcrumb", "italian breadcrumb", - "bread loaf", "sandwich bread", "whole wheat bread", "white bread", - "sourdough bread", "french bread", "baguette", "ciabatta", - "pita bread", "naan", "flatbread", - "flour tortilla", "corn tortilla", - "quinoa", "farro", "bulgur", "couscous", "barley", "millet", - "amaranth", "teff", "freekeh", "crouton", "stuffing mix", - }, ["GRAIN"]), - # BAKING - ({"baking soda", "baking powder", "cream of tartar", - "active dry yeast", "instant yeast", "rapid rise yeast", - "vanilla extract", "almond extract", "peppermint extract", - "lemon extract", "orange extract", - "food coloring", "gel food color", - "cocoa powder", "dutch process cocoa", "unsweetened cocoa", - "chocolate chip", "mini chocolate chip", "white chocolate chip", - "dark chocolate chip", "baking chocolate", "unsweetened chocolate", - "bittersweet chocolate", "semisweet chocolate", - "sprinkle", "nonpareil", "decorating sugar", "sanding sugar", - "cake mix", "brownie mix", "cookie mix", "muffin mix", - "pancake mix", "waffle mix", "biscuit mix", - "powdered sugar", "confectioners sugar", "icing sugar", - "granulated sugar", "cane sugar", - "brown sugar", "dark brown sugar", "light brown sugar", - "turbinado sugar", "raw sugar", "demerara sugar", - "corn syrup", "light corn syrup", "dark corn syrup", "molasses", - }, ["BAKING"]), - # SPICE - ({"black pepper", "white pepper", "peppercorn", - "sea salt", "kosher salt", "table salt", "himalayan salt", - "fleur de sel", "smoked salt", "celery salt", "garlic salt", - "garlic powder", "onion powder", - "cumin", "ground cumin", "cumin seed", - "paprika", "smoked paprika", "sweet paprika", "hot paprika", - "chili powder", "ancho chili", "chipotle powder", - "cayenne", "red pepper flake", "crushed red pepper", - "cinnamon", "ground cinnamon", "cinnamon stick", - "nutmeg", "ground nutmeg", - "oregano", "dried oregano", "thyme", "dried thyme", - "rosemary", "dried rosemary", "basil", "dried basil", - "bay leaf", "turmeric", "ground turmeric", - "coriander", "ground coriander", "fennel seed", "caraway seed", - "cardamom", "clove", "allspice", "ginger", "ground ginger", - "mustard seed", "ground mustard", "fenugreek", "nigella seed", - "sumac", "za'atar", "herbs de provence", "italian seasoning", - "old bay", "cajun seasoning", "creole seasoning", - "taco seasoning", "fajita seasoning", "ranch seasoning", - "curry powder", "garam masala", "ras el hanout", - "five spice", "everything bagel seasoning", - "lemon pepper", "steak seasoning", "bbq rub", "dry rub", - "vanilla bean", "saffron", "annatto", "achiote", - "dill weed", "dried dill", "marjoram", "dried sage", - }, ["SPICE"]), - # OIL_FAT - ({"olive oil", "extra virgin olive oil", - "vegetable oil", "canola oil", "sunflower oil", "safflower oil", - "corn oil", "soybean oil", "peanut oil", "grapeseed oil", - "avocado oil", "coconut oil", "palm oil", - "sesame oil", "toasted sesame oil", - "walnut oil", "flaxseed oil", "truffle oil", - "cooking spray", "nonstick spray", "baking spray", - "shortening", "vegetable shortening", "crisco", - "lard", "rendered lard", "duck fat", - "beef tallow", "margarine stick", "vegan butter", - }, ["OIL_FAT"]), - # CONDIMENT - ({"soy sauce", "tamari", "liquid aminos", "coconut aminos", - "fish sauce", "oyster sauce", "hoisin sauce", - "worcestershire sauce", - "hot sauce", "sriracha", "tabasco", "cholula", - "chili garlic sauce", "sambal oelek", "gochujang", - "apple cider vinegar", "white vinegar", "distilled vinegar", - "red wine vinegar", "white wine vinegar", "balsamic vinegar", - "sherry vinegar", "rice vinegar", "malt vinegar", - "dijon mustard", "whole grain mustard", "yellow mustard", - "ketchup", "mayonnaise", "light mayonnaise", - "relish", "sweet relish", "dill relish", - "bbq sauce", "barbecue sauce", "steak sauce", - "buffalo sauce", "wing sauce", - "teriyaki sauce", "ponzu sauce", "sweet chili sauce", - "pad thai sauce", "stir fry sauce", - "tahini", "miso paste", "red miso", "white miso", - "tomato paste", "marinara sauce", "pasta sauce", - "alfredo sauce", "pesto sauce", - "enchilada sauce", "salsa verde", "mole sauce", - "salsa jar", "chunky salsa", - "pickle", "dill pickle", "bread and butter pickle", - "pickled jalapeno", "giardiniera", - "capers", "anchovy paste", "anchovy fillet", - "sun dried tomato", "roasted red pepper", - "horseradish prepared", "wasabi paste", - }, ["CONDIMENT"]), - # CANNED_GOOD - ({"canned tomato", "diced tomato", "crushed tomato", "stewed tomato", - "whole peeled tomato", "san marzano", "fire roasted tomato", - "canned bean", "canned black bean", "canned chickpea", - "canned kidney bean", "canned pinto bean", "canned navy bean", - "canned lentil", "canned white bean", "canned cannellini", - "canned corn", "canned pumpkin", "canned yam", - "canned artichoke", "canned beet", "canned mushroom", - "canned water chestnut", "canned bamboo", - "canned green bean", "canned pea", "canned spinach", - "coconut milk can", "coconut cream can", "lite coconut milk", - "chicken broth", "beef broth", "vegetable broth", - "chicken stock", "beef stock", "bone broth", - "canned tuna", "canned salmon", "canned sardine", - "canned anchovy", "canned crab", "canned clam", - "rotel", "green chili can", "chipotle in adobo", - }, ["CANNED_GOOD"]), - # SWEETENER - ({"honey", "raw honey", "manuka honey", "clover honey", - "maple syrup", "pure maple syrup", - "agave", "agave nectar", "date syrup", "date sugar", - "stevia", "monk fruit sweetener", "erythritol", - "brown rice syrup", - }, ["SWEETENER"]), - # NUT_SEED - ({"almonds", "raw almonds", "roasted almonds", "sliced almonds", - "slivered almonds", "almond meal", - "walnuts", "walnut halves", "pecans", "cashews", - "pistachios", "pine nuts", "hazelnuts", "macadamia nut", - "brazil nut", "peanut", "raw peanut", "roasted peanut", - "peanut butter", "almond butter", "cashew butter", - "sunflower seed", "pumpkin seed", "pepita", - "sesame seed", "chia seed", "flaxseed", "ground flax", - "hemp seed", "poppy seed", - }, ["NUT_SEED"]), - # THICKENER - ({"cornstarch", "corn starch", "arrowroot", "arrowroot powder", - "tapioca starch", "tapioca pearl", "potato starch", - "unflavored gelatin", "agar agar", "agar powder", - "xanthan gum", "guar gum", "pectin", - }, ["THICKENER"]), - # ALCOHOL (cooking) - ({"cooking wine", "dry sherry", "mirin", "sake cooking", - "rice wine", "shaoxing wine", - }, ["ALCOHOL"]), - # OTHER_INGR (catch-all pantry) - ({"nutritional yeast", "dried mushroom", "porcini dried", - "seaweed", "nori sheet", "kombu", "wakame", - "dashi", "bonito flake", "matcha powder", - "rose water", "orange blossom water", "liquid smoke", - "raisin", "currant", "sultana", - "dried cranberry", "dried cherry", "dried apricot", "dried fig", - "dried date", "dried mango", "dried blueberry", "dried tomato", - "canned fruit", "canned peach", "canned pear", "canned pineapple", - "maraschino cherry", - "lemon juice bottle", "lime juice bottle", - "jam", "jelly", "preserves", "fruit spread", "marmalade", - "chutney", - "caramel sauce", "caramel topping", - "sweetened condensed milk", - "cream of mushroom soup", "cream of chicken soup", - "french onion soup can", - "harissa", "curry paste", "red curry paste", "green curry paste", - "yellow curry paste", "massaman paste", - "coconut butter", "cacao nib", "carob powder", - "vital wheat gluten", "citric acid", - "meat tenderizer", - "vinegar", - }, ["OTHER_INGR"]), -] -# ══════════════════════════════════════════════════════════════════════════════ -# PASS 2 — FOOD-CATEGORY DEFAULT -# If a product's category looks like a food/grocery category (and wasn't -# caught by explicit non-ingredient rules), assume it IS an ingredient. -# This eliminates most of the LLM queue. -# ══════════════════════════════════════════════════════════════════════════════ + # --- PRODUCE --- + ({ + # Kroger search terms (canonical) + "fresh vegetable", "fresh fruit", "organic vegetable", "organic fruit", + "broccoli", "cauliflower", "spinach", "kale", "romaine", "mixed greens", + "brussels sprout", "cabbage", "carrot", "celery", "cucumber", "zucchini", + "bell pepper", "jalapeño", "cherry tomato", "roma tomato", + "red onion", "yellow onion", "shallot", "scallion", "leek", + "garlic bulb", "portobello", "shiitake", "cremini mushroom", + "asparagus", "artichoke", "beet", "turnip", "parsnip", + "sweet potato", "russet potato", "red potato", "yukon gold", + "corn on cob", "green bean", "snap pea", "snow pea", "eggplant", + "fennel", "radish", "apple", "pear", "orange", "lemon", "lime", + "banana", "mango", "pineapple", "papaya", "kiwi", + "strawberry", "blueberry", "raspberry", "blackberry", + "watermelon", "cantaloupe", "peach", "nectarine", "plum", "cherry", + "avocado", "pomegranate", + # Walmart-specific variants + "frozen vegetable", "frozen fruit", + "arugula", "iceberg lettuce", "butter lettuce", "collard greens", + "bok choy", "napa cabbage", + "serrano pepper", "habanero", "poblano", "anaheim pepper", "banana pepper", + "grape tomato", + "white onion", "green onion", + "garlic clove", "garlic head", + "cremini", "button mushroom", "oyster mushroom", "enoki", "chanterelle", + "fennel bulb", "jicama", "okra", + "yam", "fingerling potato", "fresh corn", "corn on the cob", + "sugar snap", "eggplant", + "grapefruit", "honeydew", "apricot", "fig", "passion fruit", + }, ["PRODUCE"]), + + # --- FRESH_HERB --- + ({ + # Kroger search terms (canonical) + "fresh basil", "fresh parsley", "fresh cilantro", "fresh thyme", + "fresh rosemary", "fresh mint", "fresh dill", "fresh chives", + "fresh tarragon", "fresh oregano", "fresh sage", + "fresh lemongrass", "fresh ginger root", + # Walmart-specific variants + "fresh turmeric root", "herb bunch", "herb packet", + }, ["FRESH_HERB"]), + + # --- PROTEIN --- + ({ + # Kroger search terms (canonical) + "chicken breast", "chicken thigh", "chicken wing", "chicken drumstick", + "ground chicken", "whole chicken", "ground turkey", "turkey breast", + "ground beef", "beef chuck", "beef brisket", "ribeye", "sirloin", + "flank steak", "skirt steak", "beef roast", "beef short rib", + "pork chop", "pork loin", "pork belly", "pork shoulder", + "pork tenderloin", "baby back rib", "spiral ham", "ham steak", + "lamb chop", "lamb leg", "ground lamb", + "salmon fillet", "tuna fillet", "tilapia", "cod fillet", "halibut", + "mahi mahi", "sea bass", "trout", "catfish", + "shrimp", "scallop", "lobster tail", "crab leg", "crab meat", + "clam", "mussel", "oyster", + "bacon", "pancetta", "prosciutto", "salami", "pepperoni", + "chorizo", "andouille", "bratwurst", "italian sausage", + "breakfast sausage", + "deli turkey", "deli ham", "deli roast beef", "deli chicken", + "lunch meat", + "extra firm tofu", "silken tofu", "tempeh", "seitan", "edamame", + "black bean", "pinto bean", "kidney bean", "chickpea", "lentil", + "split pea", "navy bean", "cannellini bean", + "large eggs", "cage free egg", "organic egg", "egg whites", + # Walmart-specific variants + "chicken tender", "chicken leg", "whole turkey", + "beef rib", "tenderloin", "beef stew meat", + "pork rib", "spare rib", "uncured ham", + "rack of lamb", + "salmon steak", "whole salmon", "tuna steak", + "snapper", "squid", "octopus", + "sausage link", "sausage patty", "deli meat", "sliced meat", + "tofu", "firm tofu", "textured vegetable protein", + "great northern bean", "fava bean", + "dozen eggs", "medium eggs", "free range egg", "liquid egg", + }, ["PROTEIN"]), + + # --- DAIRY --- + ({ + # Kroger search terms (canonical) + "whole milk", "skim milk", "2% milk", "lactose free milk", "organic milk", + "buttermilk", "evaporated milk", "condensed milk", "powdered milk", + "heavy cream", "heavy whipping cream", "half and half", "light cream", + "sour cream", "creme fraiche", + "cream cheese", "mascarpone", "ricotta", "cottage cheese", + "fresh mozzarella", "burrata", + "cheddar cheese", "parmesan", "romano cheese", "asiago", + "gruyere", "swiss cheese", "gouda", "havarti", "fontina", "provolone", + "brie", "camembert", "gorgonzola", "blue cheese", + "feta cheese", "queso fresco", "monterey jack", "pepper jack", + "unsalted butter", "salted butter", "european butter", "ghee", + "greek yogurt", "plain yogurt", "whole milk yogurt", "skyr", "kefir", + # Walmart-specific variants + "1% milk", "nonfat milk", "reduced fat milk", + "whipping cream", "dry milk", + "neufchatel", "farmers cheese", + "cheddar block", "shredded cheddar", + "parmigiano", "emmental", "edam", + "roquefort", "stilton", "queso blanco", "colby", + "butter stick", "ghee jar", "clarified butter", + "nonfat yogurt", "whipped cream can", + }, ["DAIRY"]), + + # --- GRAIN --- + ({ + # Kroger search terms (canonical) + "all purpose flour", "bread flour", "whole wheat flour", + "cake flour", "almond flour", "coconut flour", "oat flour", "rye flour", + "chickpea flour", "rice flour", "cassava flour", + "white rice", "brown rice", "jasmine rice", "basmati rice", + "arborio rice", "wild rice", + "spaghetti", "penne", "rigatoni", "fusilli", "farfalle", + "linguine", "fettuccine", "angel hair", "orzo", "macaroni", + "lasagna noodle", "egg noodle", "ramen noodle", "soba noodle", + "udon noodle", "rice noodle", + "rolled oats", "quick oats", "steel cut oats", + "cornmeal", "polenta", "grits", "semolina", + "panko", "plain breadcrumb", + "sandwich bread", "whole wheat bread", "sourdough bread", + "french bread", "pita bread", "naan", "flatbread", + "flour tortilla", "corn tortilla", + "quinoa", "farro", "bulgur", "couscous", "barley", "millet", + # Walmart-specific variants + "pastry flour", "self rising flour", "spelt flour", "oat flour", + "instant rice", + "rotini", "tagliatelle", "vermicelli noodle", "glass noodle", + "rolled oat", "quick oat", "steel cut oat", "instant oat", + "breadcrumb", "italian breadcrumb", + "bread loaf", "white bread", "baguette", "ciabatta", + "amaranth", "teff", "freekeh", "crouton", "stuffing mix", + }, ["GRAIN"]), + + # --- BAKING --- + ({ + # Kroger search terms (canonical) + "baking soda", "baking powder", "cream of tartar", + "active dry yeast", "instant yeast", + "vanilla extract", "almond extract", "peppermint extract", + "cocoa powder", "dutch process cocoa", + "chocolate chips", "white chocolate chips", "baking chocolate", + "powdered sugar", "granulated sugar", "cane sugar", + "brown sugar", "turbinado sugar", "demerara sugar", + "corn syrup", "molasses", + "cake mix", "brownie mix", "pancake mix", "waffle mix", "muffin mix", + # Walmart-specific variants + "rapid rise yeast", + "lemon extract", "orange extract", + "food coloring", "gel food color", + "unsweetened cocoa", + "chocolate chip", "mini chocolate chip", "dark chocolate chip", + "white chocolate chip", "unsweetened chocolate", + "bittersweet chocolate", "semisweet chocolate", + "sprinkle", "nonpareil", "decorating sugar", "sanding sugar", + "cookie mix", "biscuit mix", + "confectioners sugar", "icing sugar", + "dark brown sugar", "light brown sugar", + "raw sugar", "light corn syrup", "dark corn syrup", + }, ["BAKING"]), + + # --- SPICE --- + ({ + # Kroger search terms (canonical) + "black pepper", "white pepper", "peppercorn", + "sea salt", "kosher salt", "himalayan salt", "garlic salt", + "garlic powder", "onion powder", + "cumin", "paprika", "smoked paprika", "chili powder", + "cayenne", "red pepper flake", + "cinnamon", "nutmeg", "oregano", "thyme", "rosemary", + "basil dried", "bay leaf", "turmeric", "coriander", + "fennel seed", "cardamom", "clove", "allspice", + "ground ginger", "mustard seed", "ground mustard", "fenugreek", + "sumac", "za'atar", "herbs de provence", "italian seasoning", + "cajun seasoning", "taco seasoning", + "curry powder", "garam masala", "ras el hanout", "five spice", + "lemon pepper", "steak seasoning", "bbq rub", + "vanilla bean", "saffron", "dill weed", "marjoram", + # Walmart-specific variants + "table salt", "fleur de sel", "smoked salt", "celery salt", + "ground cumin", "cumin seed", + "sweet paprika", "hot paprika", "ancho chili", "chipotle powder", + "crushed red pepper", + "ground cinnamon", "cinnamon stick", "ground nutmeg", + "dried oregano", "dried thyme", "dried rosemary", "dried basil", + "ground turmeric", "ground coriander", "caraway seed", + "nigella seed", + "old bay", "creole seasoning", "fajita seasoning", "ranch seasoning", + "everything bagel seasoning", + "dry rub", "annatto", "achiote", + "dried dill", "dried sage", + }, ["SPICE"]), + + # --- OIL_FAT --- + ({ + # Kroger search terms (canonical) + "olive oil", "extra virgin olive oil", + "vegetable oil", "canola oil", "sunflower oil", "safflower oil", + "corn oil", "soybean oil", "peanut oil", "grapeseed oil", + "avocado oil", "coconut oil", "sesame oil", "toasted sesame oil", + "walnut oil", "flaxseed oil", "truffle oil", + "cooking spray", "nonstick spray", + "shortening", "lard", "duck fat", "beef tallow", + "vegan butter", + # Walmart-specific variants + "palm oil", + "baking spray", + "vegetable shortening", "crisco", + "rendered lard", + "margarine stick", + }, ["OIL_FAT"]), + + # --- CONDIMENT --- + ({ + # Kroger search terms (canonical) + "soy sauce", "tamari", "liquid aminos", "coconut aminos", + "fish sauce", "oyster sauce", "hoisin sauce", "worcestershire sauce", + "hot sauce", "sriracha", "tabasco", "cholula", "sambal oelek", "gochujang", + "apple cider vinegar", "white vinegar", "red wine vinegar", + "white wine vinegar", "balsamic vinegar", "rice vinegar", "malt vinegar", + "dijon mustard", "whole grain mustard", "yellow mustard", + "ketchup", "mayonnaise", "relish", + "bbq sauce", "barbecue sauce", "steak sauce", "buffalo sauce", + "teriyaki sauce", "ponzu sauce", "sweet chili sauce", "stir fry sauce", + "tahini", "miso paste", + "tomato paste", "marinara sauce", "pasta sauce", "alfredo sauce", "pesto", + "enchilada sauce", "salsa verde", "salsa jar", + "pickle", "dill pickle", "pickled jalapeno", "giardiniera", + "capers", "sun dried tomato", "roasted red pepper", + "horseradish", "wasabi paste", + # Walmart-specific variants + "chili garlic sauce", + "distilled vinegar", "sherry vinegar", + "light mayonnaise", "sweet relish", "dill relish", + "wing sauce", "pad thai sauce", + "red miso", "white miso", + "pesto sauce", "mole sauce", "chunky salsa", + "bread and butter pickle", + "anchovy paste", "anchovy fillet", + "horseradish prepared", + }, ["CONDIMENT"]), + + # --- CANNED_GOOD --- + ({ + # Kroger search terms (canonical) + "canned tomato", "diced tomato", "crushed tomato", "whole peeled tomato", + "san marzano", "fire roasted tomato", + "canned black bean", "canned chickpea", "canned kidney bean", + "canned pinto bean", "canned navy bean", "canned cannellini", + "canned corn", "canned pumpkin", "canned artichoke", "canned mushroom", + "canned water chestnut", "canned green bean", + "coconut milk can", "coconut cream", + "chicken broth", "beef broth", "vegetable broth", + "chicken stock", "beef stock", "bone broth", + "canned tuna", "canned salmon", "canned sardine", "canned anchovy", + "canned crab", "canned clam", + "chipotle in adobo", "green chili can", + # Walmart-specific variants + "stewed tomato", + "canned bean", "canned lentil", "canned white bean", + "canned yam", "canned beet", "canned bamboo", + "canned pea", "canned spinach", + "coconut cream can", "lite coconut milk", + "rotel", + }, ["CANNED_GOOD"]), + + # --- SWEETENER --- + ({ + # Kroger search terms (canonical) + "honey", "raw honey", "manuka honey", + "maple syrup", "pure maple syrup", + "agave nectar", "date syrup", + "stevia", "monk fruit sweetener", "erythritol", + # Walmart-specific variants + "clover honey", + "agave", + "date sugar", "brown rice syrup", + }, ["SWEETENER"]), + + # --- NUT_SEED --- + ({ + # Kroger search terms (canonical) + "raw almonds", "sliced almonds", "slivered almonds", + "walnut halves", "pecans", "cashews", "pistachios", + "pine nuts", "hazelnuts", "macadamia nut", "brazil nut", + "peanut butter", "almond butter", "cashew butter", + "sunflower seed", "pumpkin seed", "pepita", + "sesame seed", "chia seed", "flaxseed", "hemp seed", "poppy seed", + # Walmart-specific variants + "almonds", "roasted almonds", "almond meal", + "walnuts", "peanut", "raw peanut", "roasted peanut", + "ground flax", + }, ["NUT_SEED"]), + + # --- THICKENER --- + ({ + # Kroger search terms (canonical) + "cornstarch", "arrowroot powder", "tapioca starch", + "unflavored gelatin", "agar agar", "xanthan gum", "guar gum", "pectin", + # Walmart-specific variants + "corn starch", "arrowroot", + "tapioca pearl", "potato starch", + "agar powder", + }, ["THICKENER"]), + + # --- ALCOHOL (cooking only) --- + ({ + # Kroger search terms (canonical) + "cooking wine", "dry sherry", "mirin", "sake", "rice wine", "shaoxing wine", + # Walmart-specific variants + "sake cooking", + }, ["ALCOHOL"]), + + # --- OTHER_INGR (catch-all pantry) --- + ({ + # Kroger search terms (canonical) + "nutritional yeast", "dried mushroom", "nori sheet", "kombu", "wakame", + "dashi", "bonito flake", "matcha powder", + "rose water", "liquid smoke", + "raisins", "dried cranberry", "dried apricot", "dried fig", + "dried mango", "dried date", + "canned peach", "canned pear", "canned pineapple", + "lemon juice", "lime juice", + "jam", "jelly", "fruit preserves", "marmalade", "chutney", + "caramel sauce", "sweetened condensed milk", + "cream of mushroom soup", "cream of chicken soup", + "harissa", "red curry paste", "green curry paste", "yellow curry paste", + "coconut butter", "cacao nibs", "vital wheat gluten", "citric acid", + # Walmart-specific variants + "porcini dried", "seaweed", + "orange blossom water", + "raisin", "currant", "sultana", "dried cherry", "dried blueberry", + "dried tomato", "canned fruit", "maraschino cherry", + "lemon juice bottle", "lime juice bottle", + "fruit spread", + "caramel topping", "french onion soup can", + "curry paste", "massaman paste", + "cacao nib", "carob powder", "meat tenderizer", "vinegar", + }, ["OTHER_INGR"]), +] +# Pass 2 - if the category name looks like a food/grocery category and the +# product didn't get flagged as a non-ingredient, assume it's an ingredient. +# This knocks out most of what's left without needing the LLM. FOOD_CATEGORY_KEYWORDS = { "food", "grocery", "groceries", "pantry", "cooking", "baking", "ingredient", "produce", "meat", "seafood", "poultry", "dairy", @@ -418,7 +498,7 @@ "broth", "stock", "soup base", "cheese", "butter", "egg", "milk", "cream", "yogurt", "bread", "tortilla", "wrap", - "breakfast", "cereal grain", # NOTE: cereal grain ≠ "cereal" (covered by non-ingredient) + "breakfast", "cereal grain", # NOTE: "cereal grain" ≠ "cereal" (covered by non-ingredient) } @@ -429,10 +509,7 @@ def normalise(text: str) -> str: def is_food_category(category: str) -> bool: """Return True if the category string looks like a food/grocery category.""" cat = normalise(category) - for kw in FOOD_CATEGORY_KEYWORDS: - if kw in cat: - return True - return False + return any(kw in cat for kw in FOOD_CATEGORY_KEYWORDS) def rule_classify(row: dict) -> dict | None: @@ -458,11 +535,9 @@ def rule_classify(row: dict) -> dict | None: if is_food_category(category): return {"ingredient": True, "classifiers": ["OTHER_INGR"]} - return None # truly ambiguous → LLM + return None # truly ambiguous -> LLM -# ── Ollama helpers ───────────────────────────────────────────────────────────── - def check_ollama_running(): try: req = urllib.request.urlopen(f"{OLLAMA_BASE_URL}/api/tags", timeout=5) @@ -477,7 +552,7 @@ def check_ollama_running(): 2. If yes, assign 1-3 tags: PROTEIN, DAIRY, PRODUCE, GRAIN, BAKING, SPICE, OIL_FAT, CONDIMENT, CANNED_GOOD, SWEETENER, NUT_SEED, ALCOHOL, THICKENER, FRESH_HERB, OTHER_INGR -Respond ONLY with a JSON array — one object per product in the same order. +Respond ONLY with a JSON array - one object per product in the same order. Each: {"ingredient": true/false, "classifiers": ["TAG"]} No explanation. No markdown. Only the JSON array.""" @@ -519,10 +594,15 @@ def parse_json_array(text: str, expected: int) -> list[dict]: def build_prompt(row: dict) -> str: - parts = [f"Name: {row.get('name','').strip()}"] - if cat := row.get("category_name","").strip(): + """Build an LLM prompt line for a single product row.""" + parts = [f"Name: {row.get('name', '').strip()}"] + if brand := row.get("brandName", "").strip(): + parts.append(f"Brand: {brand}") + if size := row.get("size", "").strip(): + parts.append(f"Size: {size}") + if cat := row.get("category_name", "").strip(): parts.append(f"Category: {cat}") - if sd := row.get("shortDescription","").strip()[:200]: + if sd := row.get("shortDescription", "").strip()[:200]: parts.append(f"Desc: {sd}") return " | ".join(parts) @@ -543,13 +623,20 @@ def classify_batch_llm(model: str, batch: list[dict], retries: int = 2) -> list[ time.sleep(1) -# ── CSV I/O ─────────────────────────────────────────────────────────────────── +# Output columns - matches what fetchProducts.js produces (we added size, brandName, upc +# and dropped the image/color fields we don't need). +OUTPUT_FIELDS = [ + "name", "brandName", "size", "upc", + "ingredient", "classifiers", + "retail_price", "thumbnailImage", +] + def read_csvs(folder: str) -> list[dict]: csv.field_size_limit(10_000_000) rows = [] for csv_file in Path(folder).glob("*.csv"): - print(f" Reading {csv_file.name} …") + print(f" Reading {csv_file.name} ...") with open(csv_file, newline="", encoding="utf-8-sig") as f: for row in csv.DictReader(f): rows.append(row) @@ -558,35 +645,31 @@ def read_csvs(folder: str) -> list[dict]: def write_output(classified: list[dict], output_path: str): - fieldnames = ["name", "ingredient", "classifiers", "retail_price", - "thumbnailImage", "mediumImage", "largeImage", "color"] with open(output_path, "w", newline="", encoding="utf-8") as f: - writer = csv.DictWriter(f, fieldnames=fieldnames) + writer = csv.DictWriter(f, fieldnames=OUTPUT_FIELDS) writer.writeheader() writer.writerows(classified) n_ingr = sum(1 for r in classified if r["ingredient"]) - print(f"\nSaved → {output_path}") + print(f"\nSaved -> {output_path}") print(f" {n_ingr:,} ingredients / {len(classified):,} total products") def to_output_row(row: dict, result: dict) -> dict: return { - "name": row.get("name", ""), - "ingredient": result.get("ingredient", False), - "classifiers": "|".join(result.get("classifiers", [])), - "retail_price": row.get("retail_price", ""), + "name": row.get("name", ""), + "brandName": row.get("brandName", ""), + "size": row.get("size", ""), + "upc": row.get("upc", ""), + "ingredient": result.get("ingredient", False), + "classifiers": "|".join(result.get("classifiers", [])), + "retail_price": row.get("retail_price", ""), "thumbnailImage": row.get("thumbnailImage", ""), - "mediumImage": row.get("mediumImage", ""), - "largeImage": row.get("largeImage", ""), - "color": row.get("color", ""), } -# ── Main ────────────────────────────────────────────────────────────────────── - def main(): parser = argparse.ArgumentParser( - description="Hybrid rule+LLM ingredient classifier — M4 optimised." + description="Classify Walmart products as cooking ingredients using keyword rules + optional LLM." ) parser.add_argument("input_folder") parser.add_argument("-o", "--output", default="classified_ingredients.csv") @@ -597,16 +680,16 @@ def main(): parser.add_argument("-b", "--batch", type=int, default=DEFAULT_BATCH, help=f"Products per LLM call (default: {DEFAULT_BATCH})") parser.add_argument("--no-llm", action="store_true", - help="Skip LLM pass — output rules + category-default only (fast)") + help="Skip LLM pass - output rules + category-default only (fast)") args = parser.parse_args() - print(f"\n📂 Reading CSVs from: {args.input_folder}") + print(f"\nReading CSVs from: {args.input_folder}") rows = read_csvs(args.input_folder) if not rows: - print("⚠ No rows found.") + print("No rows found.") return - # ── Pass 1 + 2: Rule-based + category default (instant) ────────────────── + # Pass 1 + 2: keyword rules + category fallback (no LLM needed) print("\nPass 1+2: Rule-based + food-category default ...") t0 = time.time() @@ -629,20 +712,24 @@ def main(): if args.no_llm: print(f"\n--no-llm: outputting rule-classified rows only.") print(f" Skipping {len(llm_queue):,} unclassified products entirely.") - classified = [to_output_row(row, results[i]) for i, row in enumerate(rows) if results[i] is not None] + classified = [ + to_output_row(row, results[i]) + for i, row in enumerate(rows) + if results[i] is not None + ] write_output(classified, args.output) print(f" Total wall time: {(time.time()-t0)/60:.1f} min") return - # ── Pass 3: LLM for true unknowns ───────────────────────────────────────── + # Pass 3: ask the LLM about anything the rules couldn't figure out if llm_queue: - print(f"\nPass 3: LLM classification for {len(llm_queue):,} products …") + print(f"\nPass 3: LLM classification for {len(llm_queue):,} products ...") print(f" Model: {args.model} | Workers: {args.workers} | Batch: {args.batch}") - print(f" 💡 Tip: make sure you ran ollama pull {args.model}\n") + print(f" Tip: make sure you ran ollama pull {args.model}\n") available = check_ollama_running() if available is None: - print("⚠ Ollama not reachable — marking unknowns as non-ingredient.") + print("Ollama not reachable - marking unknowns as non-ingredient.") for orig_idx, _ in llm_queue: results[orig_idx] = {"ingredient": False, "classifiers": []} elif args.model.split(":")[0] not in available: @@ -650,8 +737,8 @@ def main(): for orig_idx, _ in llm_queue: results[orig_idx] = {"ingredient": False, "classifiers": []} else: - only_rows = [r for _, r in llm_queue] - batches = [ + only_rows = [r for _, r in llm_queue] + batches = [ (llm_queue[i : i + args.batch], only_rows[i : i + args.batch]) for i in range(0, len(llm_queue), args.batch) ] @@ -690,4 +777,4 @@ def process(b_idx, idx_row_pairs, row_batch): if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/WalmartPipeline/fetchProducts.js b/WalmartPipeline/fetchProducts.js index 9178e86..8eddef1 100644 --- a/WalmartPipeline/fetchProducts.js +++ b/WalmartPipeline/fetchProducts.js @@ -1,92 +1,83 @@ +/** + * fetchProducts.js + * + * Pulls Walmart food products by category and saves them to CSVs. + * You can import run() from another script or just run this file directly. + * + * Credentials go in .env: + * WM_CONSUMER_ID, WM_KEY_VERSION, WM_PRIVATE_KEY + * + * All the config options (page size, delays, dedup settings, etc.) have + * defaults so calling run() with no arguments should just work. + */ + +import dotenv from 'dotenv'; +dotenv.config(); import crypto from 'crypto'; import fs from 'fs'; import path from 'path'; +import { fileURLToPath } from 'url'; -const CATEGORIES_DIR = 'WalmartPipeline/Categories'; -const OUT_DIR = 'WalmartPipeline/walmart_CSVs'; +const __filename = fileURLToPath(import.meta.url); -// Walmart endpoint const BASE = 'https://developer.api.walmart.com'; const PAGINATED_PATH = '/api-proxy/service/affil/product/v2/paginated/items'; - -// Page and Category Ping Delay -const COUNT_PER_PAGE = 500; -const REQUEST_DELAY_MS = 25; // between pages -const CATEGORY_DELAY_MS = 25; // between categories - -// Retry Attempt Tuning -const FETCH_ATTEMPTS = 5; -const RETRY_BASE_DELAY_MS = 50; - -// Output behavior -const EXPORT_PARENT_ROWS_TOO = false; // false = leaf-ish only -const DEDUPE_WITHIN_EACH_CATEGORY_CSV = true; // dedupe itemId inside each category CSV -const DEDUPE_WITHIN_SUBTREE_AGG = true; // dedupe within subtree aggregate -const DEDUPE_MASTER = false; // dedupe in global master - -// Logging const MAX_ERROR_BODY_CHARS = 1200; -/* -------------------- AUTH / HEADERS -------------------- */ - -const keyData = { - consumerId: '39d025f8-e575-48cf-aa4e-22f89da4c16f', - keyVer: '5', // keep as STRING; must match walmart.io key version exactly - privateKeyPem: `-----BEGIN RSA PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC1hpiZMh1pyN6k -oDO95qK3L+/uY3M+sUpcnQkuNdFPBChh3jxEjn3zQLm88rdBTKQVqDD8E7g2KBHX -wYaSiKqqXcBkMkPfEEyTE/I//BjDF5dS+sgR6uIJmfsNVIVkY7laxo0STFCO3G+V -gkHTp8u/lJ5Aa8NSxu4BYlR0wBpze40aHYBeQw/+QuPvZzNeUf5YNC3rs5eId2f5 -N0rA2mZfY1myzE6UarW+5+WrWbkR0Bwrvs+8B/S8Jh4QFmh2EDaucisx96MXSH5S -3BuzBxqE9Txo4TKGu0y/aDmRU1Ij5WP88VnURU3vna1UF5n/pPw6InzvcQkeGS1o -thpyvCvtAgMBAAECggEABFOmXm5twvqOQpRa0/Gxo9YX/0iJoZPPdcPhLdF5N/lU -bqdUGeyojxoD41rkHviDXpXH9x9YxwevQp7QcrygjsU6Xv2YuekC3j69ycjcHKqf -UlygHdc3O2r/tHOr1G2RFhITIIbHEqSpqqY9ke7paxtaOQKojqpL/F1jdr8WduM9 -WQqbpgk+Hc6PIYVdUeALMX+IGNWbZiX6zqm85IKUdAA4/V0RCMl/j9ySBP6TsT06 -5IXK63urXl+AOJh1tHV79GP/waETEc6rQ8Ntn9p3HsUtsx6qiLSky7E2m2L3rdVd -LOzM2vVQDKr0SMGfx4/ZA79OJbLvJnwon9l4WdxmeQKBgQDb4L7sI4FnnD7uAaV5 -NTxt6ELJIpgxalTXbGiD6BoGN7LPbRfLJmKP4pGbNkfxtLZKsrTXOE1z5bTurRzY -dsH9pEmhBf7SdYtNrnPZCfOwpZaK/PyVdIggnaAiVYD6Q5urNcTltOA9SLdxGJyE -Ny8GpdB/ItmRCUkru4uk8L3KFQKBgQDTWOaBQRPvrL7sl4nVrTlfaxDTYulFgqSx -j3ag+RBhCwvFVNxb710moIEtThpDnaLNJCc6JQ+QebrsDP7Q49eOxqKbbbLOHGrt -akkeMROg6+MaL7HMAMsjCj7hBnpSjCg94ldHuJ0d8/PB60amIES/TTOyTsssxIlD -HcoX4JsIeQKBgDVHF/wP/mMksPrq2zWreKEJDmW+RDJ1GWm5kvmjW+r1xBYO0R0g -h/FlbPK3DGe86g7fjoI32kyi9FyBBeRNomPbUxv5X+2PHdoM03Vbu/ippvi2pF1y -hymgCBVJsp7xkt7BgJxIX6152TlGRWakGHj75LFpuF40ac52+zdUPiihAoGASmQU -XpKljctkOKruXUPn2eo5te4u5cSia81vmCGS3lWhAwhnuAR86Ue9sFC5detajpKX -LCQ3Ykc2wDeiyawpB5xrSAJI2buu93pd2j60BgSBn4oCLyhoWCEXGOXK0Jt83qt4 -xUn6I7zmo+9Iotjg2eU2uSB663sSRYmKxPTOHSECgYEAr9GDqLgORkKWwXhMAe3h -R0tYdGzWqpOiVNi1hcNMGfNwQekfIAM9NVarIib5JYPkSQQQWJZVXcTlR2YZbf9/ -P5VgNbNkV23Nq7j926cpbSlgb+UsZOCC5zTaJ0L6oePnK5R38v54y2XC9ccqW6FP -sVP5T4Vx30thw2cpbOY227Q= ------END RSA PRIVATE KEY-----`, -}; - -function canonicalizeForSignature({ consumerId, ts, keyVer }) { - const map = { - 'WM_CONSUMER.ID': String(consumerId).trim(), - 'WM_CONSUMER.INTIMESTAMP': String(ts).trim(), - 'WM_SEC.KEY_VERSION': String(keyVer).trim(), - }; +// columns we actually care about for ingredient matching +// dropped a bunch of stuff (images, ratings, tracking URLs) that we don't need +// added size because it helps with dedup and matching later + +const COLUMNS = [ + 'item_id', + 'name', + 'brandName', + 'size', + 'retail_price', + 'upc', + 'subtree_name', + 'category_id', + 'category_name', + 'category_path', + 'shortDescription', + 'thumbnailImage', +]; + +function loadCredentials() { + const consumerId = process.env.WM_CONSUMER_ID; + const keyVer = process.env.WM_KEY_VERSION; + const privateKeyPem = process.env.WM_PRIVATE_KEY; + + if (!consumerId || !keyVer || !privateKeyPem) { + throw new Error( + 'Missing Walmart credentials in .env: WM_CONSUMER_ID, WM_KEY_VERSION, WM_PRIVATE_KEY', + ); + } - const sortedKeys = Object.keys(map).sort(); - return sortedKeys.map((k) => map[k]).join('\n') + '\n'; + return { consumerId, keyVer, privateKeyPem }; } -function buildAuthHeaders() { - const id = String(keyData.consumerId).trim(); - const kv = String(keyData.keyVer).trim(); +// Walmart requires a signed auth header on every request +function buildAuthHeaders(creds) { + const id = String(creds.consumerId).trim(); + const kv = String(creds.keyVer).trim(); const ts = String(Date.now()).trim(); - const toSign = canonicalizeForSignature({ - consumerId: id, - ts, - keyVer: kv, - }); + const fields = { + 'WM_CONSUMER.ID': id, + 'WM_CONSUMER.INTIMESTAMP': ts, + 'WM_SEC.KEY_VERSION': kv, + }; + + const canonicalized = + Object.keys(fields) + .sort() + .map((k) => fields[k]) + .join('\n') + '\n'; const signature = crypto - .sign('RSA-SHA256', Buffer.from(toSign, 'utf8'), { - key: keyData.privateKeyPem, + .sign('RSA-SHA256', Buffer.from(canonicalized, 'utf8'), { + key: creds.privateKeyPem, padding: crypto.constants.RSA_PKCS1_PADDING, }) .toString('base64'); @@ -101,8 +92,6 @@ function buildAuthHeaders() { }; } -/* -------------------- helpers -------------------- */ - function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } @@ -128,11 +117,8 @@ function formatISO(d) { } function msToHMS(ms) { - const totalSeconds = Math.floor(ms / 1000); - const hours = Math.floor(totalSeconds / 3600); - const minutes = Math.floor((totalSeconds % 3600) / 60); - const seconds = totalSeconds % 60; - return `${hours}h ${minutes}m ${seconds}s (${ms} ms)`; + const s = Math.floor(ms / 1000); + return `${Math.floor(s / 3600)}h ${Math.floor((s % 3600) / 60)}m ${s % 60}s`; } function safeTruncate(s, n) { @@ -141,8 +127,7 @@ function safeTruncate(s, n) { return str.slice(0, n) + `... [truncated ${str.length - n} chars]`; } -/* -------------------- CSV parsing -------------------- */ - +// simple CSV parser - handles quoted fields and escaped quotes function parseCSV(text) { const rows = []; let i = 0; @@ -174,14 +159,12 @@ function parseCSV(text) { i++; continue; } - if (c === ',') { row.push(field); field = ''; i++; continue; } - if (c === '\n') { row.push(field); field = ''; @@ -190,12 +173,10 @@ function parseCSV(text) { i++; continue; } - if (c === '\r') { i++; continue; } - field += c; i++; } @@ -210,23 +191,16 @@ function parseCSV(text) { function rowsToObjects(rows) { if (!rows.length) return []; - const header = rows[0].map((h) => h.trim()); - const output = []; - - for (let r = 1; r < rows.length; r++) { + return rows.slice(1).map((cols) => { const obj = {}; - for (let c = 0; c < header.length; c++) { - obj[header[c]] = rows[r][c] ?? ''; - } - output.push(obj); - } - - return output; + header.forEach((h, i) => { + obj[h] = cols[i] ?? ''; + }); + return obj; + }); } -/* -------------------- subtree helpers -------------------- */ - function getDepth(pathValue) { const s = String(pathValue ?? '').trim(); if (!s) return Number.POSITIVE_INFINITY; @@ -237,7 +211,6 @@ function pickSubtreeRoot(objs) { const candidates = objs.filter( (o) => String(o.id ?? '').trim() && String(o.name ?? '').trim(), ); - if (!candidates.length) return null; candidates.sort((a, b) => { @@ -253,75 +226,56 @@ function pickSubtreeRoot(objs) { function isParentRow(allRows, row) { const p = String(row.path ?? '').trim(); if (!p) return false; - const prefix = p.endsWith('/') ? p : p + '/'; return allRows.some((o) => String(o.path ?? '').startsWith(prefix)); } -/* -------------------- row conversion -------------------- */ - function itemToRow(item, extra) { return { - subtree_id: extra.subtree_id, - subtree_name: extra.subtree_name, - - category_id: extra.category_id, - category_name: extra.category_name, - category_path: extra.category_path, - item_id: item?.itemId ?? '', name: item?.name ?? '', - msrp: item?.msrp ?? '', + brandName: item?.brandName ?? '', + size: item?.size ?? '', retail_price: item?.salePrice ?? '', upc: item?.upc ?? '', + subtree_name: extra.subtree_name, + category_id: extra.category_id, + category_name: extra.category_name, + category_path: extra.category_path, shortDescription: item?.shortDescription ?? '', - longDescription: item?.longDescription ?? '', - brandName: item?.brandName ?? '', thumbnailImage: item?.thumbnailImage ?? '', - mediumImage: item?.mediumImage ?? '', - largeImage: item?.largeImage ?? '', - color: item?.color ?? '', - customerRating: item?.customerRating ?? '', - stock: item?.stock ?? '', - productTrackingUrl: item?.productTrackingUrl ?? '', - categoryNode: item?.categoryNode ?? '', }; } -function csvHeader(columns) { - return columns.join(',') + '\n'; +function csvHeader() { + return COLUMNS.join(',') + '\n'; } -function rowToCSVLine(row, columns) { - return columns.map((k) => escapeCSV(row[k])).join(',') + '\n'; +function rowToCSVLine(row) { + return COLUMNS.map((k) => escapeCSV(row[k])).join(',') + '\n'; } -/* -------------------- Walmart fetching -------------------- */ - -async function fetchPage(url, attempts = FETCH_ATTEMPTS) { +async function fetchPage(url, creds, attempts, retryBaseDelayMs) { for (let i = 0; i < attempts; i++) { - const headers = buildAuthHeaders(); + const headers = buildAuthHeaders(creds); const res = await fetch(url, { headers }); - if (res.ok) { - return await res.json(); - } + if (res.ok) return await res.json(); const status = res.status; - const statusText = res.statusText; - const body = await res.text().catch(() => ''); - if (status === 429 || (status >= 500 && status <= 599)) { - const backoff = RETRY_BASE_DELAY_MS * Math.pow(2, i); - await sleep(backoff); + await sleep(retryBaseDelayMs * Math.pow(2, i)); continue; } - const err = new Error(`HTTP ${status} ${statusText}`); - err.httpStatus = status; - err.httpStatusText = statusText; - err.url = url; - err.responseBody = safeTruncate(body, MAX_ERROR_BODY_CHARS); + const body = await res.text().catch(() => ''); + const err = new Error(`HTTP ${status} ${res.statusText}`); + Object.assign(err, { + httpStatus: status, + httpStatusText: res.statusText, + url, + responseBody: safeTruncate(body, MAX_ERROR_BODY_CHARS), + }); throw err; } @@ -330,65 +284,43 @@ async function fetchPage(url, attempts = FETCH_ATTEMPTS) { throw err; } -async function fetchAllItemsForCategory(categoryId) { +async function fetchAllItemsForCategory(categoryId, creds, cfg) { let url = new URL(BASE + PAGINATED_PATH); url.searchParams.set('category', categoryId); - url.searchParams.set('count', String(COUNT_PER_PAGE)); + url.searchParams.set('count', String(cfg.countPerPage)); const allItems = []; while (true) { - const data = await fetchPage(url.toString()); + const data = await fetchPage( + url.toString(), + creds, + cfg.fetchAttempts, + cfg.retryBaseDelayMs, + ); const items = Array.isArray(data?.items) ? data.items : []; - allItems.push(...items); - if (!data?.nextPageExist || !data?.nextPage) { - break; - } + if (!data?.nextPageExist || !data?.nextPage) break; url = new URL( data.nextPage.startsWith('http') ? data.nextPage : BASE + data.nextPage, ); - - await sleep(REQUEST_DELAY_MS); + await sleep(cfg.requestDelayMs); } return allItems; } -/* -------------------- Logging / finalization -------------------- */ - -const runState = { - startedAt: new Date(), - endedAt: null, - exitReason: 'completed', - subtreeFilesProcessed: 0, - categoryRowsAttempted: 0, - categoryRowsSucceeded: 0, - categoryRowsFailed: 0, - failures: [], -}; - -let finalized = false; -let masterStreamRef = null; - -function writeRunLogFile(outPath) { +// write a JSON log file at the end so we can see what happened and debug failures +function writeRunLog(outPath, runState) { const endedAt = runState.endedAt ?? new Date(); - const elapsedMs = endedAt.getTime() - runState.startedAt.getTime(); - - const logFolder = path.resolve(outPath); - if (!fs.existsSync(logFolder)) { - fs.mkdirSync(logFolder, { recursive: true }); - } - + const elapsed = endedAt.getTime() - runState.startedAt.getTime(); const logName = `run_log_${sanitizeFilename(formatISO(runState.startedAt))}.json`; - const logPath = path.join(logFolder, logName); - const payload = { startedAt: formatISO(runState.startedAt), endedAt: formatISO(endedAt), - elapsed: msToHMS(elapsedMs), + elapsed: msToHMS(elapsed), exitReason: runState.exitReason, counts: { subtreeFilesProcessed: runState.subtreeFilesProcessed, @@ -398,73 +330,37 @@ function writeRunLogFile(outPath) { }, failures: runState.failures, }; - - fs.writeFileSync(logPath, JSON.stringify(payload, null, 4), 'utf8'); - console.log(`Log written: ${OUT_DIR}/${path.basename(logPath)}`); -} - -function finalizeAndExit(outPath, reason, code = 0) { - if (finalized) { - process.exit(code); - return; - } - - finalized = true; - runState.exitReason = reason ?? runState.exitReason; - runState.endedAt = new Date(); - - try { - if (masterStreamRef && !masterStreamRef.closed) { - masterStreamRef.end(); - } - } catch (_) {} - - try { - writeRunLogFile(outPath); - } catch (e) { - console.error('Failed to write log file:', e); - } - - process.exit(code); -} - -function registerExitHandlers(outPath) { - process.on('SIGINT', () => finalizeAndExit(outPath, 'SIGINT (Ctrl+C)', 130)); - process.on('SIGTERM', () => finalizeAndExit(outPath, 'SIGTERM', 143)); - - process.on('uncaughtException', (err) => { - runState.failures.push({ - type: 'uncaughtException', - message: String(err?.message ?? err), - stack: String(err?.stack ?? ''), - when: formatISO(new Date()), - }); - finalizeAndExit(outPath, 'uncaughtException', 1); - }); - - process.on('unhandledRejection', (reason) => { - runState.failures.push({ - type: 'unhandledRejection', - message: String(reason?.message ?? reason), - stack: String(reason?.stack ?? ''), - when: formatISO(new Date()), - }); - finalizeAndExit(outPath, 'unhandledRejection', 1); - }); + fs.writeFileSync( + path.join(outPath, logName), + JSON.stringify(payload, null, 2), + 'utf8', + ); + console.log(`Log written: ${logName}`); } -/* -------------------- main -------------------- */ +export async function run(config = {}) { + const cfg = { + categoriesDir: config.categoriesDir ?? 'WalmartPipeline/Categories', + outDir: config.outDir ?? 'WalmartPipeline/walmart_CSVs', + countPerPage: config.countPerPage ?? 500, + requestDelayMs: config.requestDelayMs ?? 25, + categoryDelayMs: config.categoryDelayMs ?? 25, + fetchAttempts: config.fetchAttempts ?? 5, + retryBaseDelayMs: config.retryBaseDelayMs ?? 50, + exportParentRows: config.exportParentRows ?? false, + dedupeWithinCategory: config.dedupeWithinCategory ?? true, + dedupeWithinSubtree: config.dedupeWithinSubtree ?? true, + dedupeMaster: config.dedupeMaster ?? false, + }; -async function main() { - const categoriesPath = path.resolve(process.cwd(), CATEGORIES_DIR); - const outPath = path.resolve(process.cwd(), OUT_DIR); + const creds = loadCredentials(); - registerExitHandlers(outPath); + const categoriesPath = path.resolve(process.cwd(), cfg.categoriesDir); + const outPath = path.resolve(process.cwd(), cfg.outDir); if (!fs.existsSync(categoriesPath)) { - throw new Error(`Missing folder: ${categoriesPath}`); + throw new Error(`Missing categories folder: ${categoriesPath}`); } - if (!fs.existsSync(outPath)) { fs.mkdirSync(outPath, { recursive: true }); } @@ -477,198 +373,176 @@ async function main() { throw new Error(`No .csv files found in ${categoriesPath}`); } - const columns = [ - 'subtree_id', - 'subtree_name', - 'category_id', - 'category_name', - 'category_path', - 'item_id', - 'name', - 'msrp', - 'retail_price', - 'upc', - 'shortDescription', - 'longDescription', - 'brandName', - 'thumbnailImage', - 'mediumImage', - 'largeImage', - 'color', - 'customerRating', - 'stock', - 'productTrackingUrl', - 'categoryNode', - ]; + const runState = { + startedAt: new Date(), + endedAt: null, + exitReason: 'completed', + subtreeFilesProcessed: 0, + categoryRowsAttempted: 0, + categoryRowsSucceeded: 0, + categoryRowsFailed: 0, + failures: [], + }; const masterFile = path.join(outPath, 'ALL_SUBTREES_PRODUCTS.csv'); const masterStream = fs.createWriteStream(masterFile, { encoding: 'utf8' }); - masterStreamRef = masterStream; - masterStream.write(csvHeader(columns)); + masterStream.write(csvHeader()); - const seenMaster = DEDUPE_MASTER ? new Set() : null; + const seenMaster = cfg.dedupeMaster ? new Set() : null; let masterCount = 0; - for (const file of subtreeFiles) { - const subtreeCsvPath = path.join(categoriesPath, file); - const text = fs.readFileSync(subtreeCsvPath, 'utf8'); - - const parsed = parseCSV(text); - const objsRaw = rowsToObjects(parsed); - - if (!objsRaw.length) { - continue; - } - - const root = pickSubtreeRoot(objsRaw); - const subtree_name = root?.name ?? path.basename(file, '.csv'); - const subtree_id = root?.id ?? ''; - - const subtreeLabel = sanitizeFilename( - `${subtree_name}_${subtree_id || 'unknown'}`, - ); - - // Subtree aggregate CSV - const subtreeAggFile = path.join(outPath, `${subtreeLabel}__ALL.csv`); - const subtreeAggStream = fs.createWriteStream(subtreeAggFile, { - encoding: 'utf8', - }); - subtreeAggStream.write(csvHeader(columns)); - - const seenSubtreeAgg = DEDUPE_WITHIN_SUBTREE_AGG ? new Set() : null; - let subtreeAggCount = 0; - - const rows = objsRaw - .map((o) => ({ - id: String(o.id ?? '').trim(), - name: String(o.name ?? '').trim(), - path: String(o.path ?? '').trim(), - })) - .filter((o) => o.id && o.name); - - for (const row of rows) { - const parent = isParentRow(rows, row); - - if (!EXPORT_PARENT_ROWS_TOO && parent) { - continue; - } - - runState.categoryRowsAttempted++; - - await sleep(CATEGORY_DELAY_MS); - - let items; - try { - items = await fetchAllItemsForCategory(row.id); - runState.categoryRowsSucceeded++; - } catch (e) { - runState.categoryRowsFailed++; - - runState.failures.push({ - type: 'categoryFetchFailed', - subtreeFile: file, - subtreeName: subtree_name, - subtreeId: subtree_id, - categoryId: row.id, - categoryName: row.name, - categoryPath: row.path, - message: String(e?.message ?? e), - httpStatus: e?.httpStatus ?? null, - url: e?.url ?? null, - responseBody: e?.responseBody ?? null, - stack: String(e?.stack ?? ''), - when: formatISO(new Date()), - }); - - console.error(`Failed category ${row.id} (${row.name}): ${e.message}`); - continue; - } - - const categoryLabel = sanitizeFilename( - `${subtree_name}_${subtree_id}__${row.name}_${row.id}`, + try { + for (const file of subtreeFiles) { + const subtreeCsvPath = path.join(categoriesPath, file); + const text = fs.readFileSync(subtreeCsvPath, 'utf8'); + const parsed = parseCSV(text); + const objsRaw = rowsToObjects(parsed); + + if (!objsRaw.length) continue; + + const root = pickSubtreeRoot(objsRaw); + const subtree_name = root?.name ?? path.basename(file, '.csv'); + const subtree_id = root?.id ?? ''; + const subtreeLabel = sanitizeFilename( + `${subtree_name}_${subtree_id || 'unknown'}`, ); - const categoryFile = path.join(outPath, `${categoryLabel}.csv`); - const categoryStream = fs.createWriteStream(categoryFile, { + + const subtreeAggFile = path.join(outPath, `${subtreeLabel}__ALL.csv`); + const subtreeAggStream = fs.createWriteStream(subtreeAggFile, { encoding: 'utf8', }); - categoryStream.write(csvHeader(columns)); - - const seenCategory = DEDUPE_WITHIN_EACH_CATEGORY_CSV ? new Set() : null; - let categoryCount = 0; - - for (const item of items) { - const itemId = String(item?.itemId ?? ''); - if (!itemId) continue; - - if (seenCategory) { - if (seenCategory.has(itemId)) continue; - seenCategory.add(itemId); + subtreeAggStream.write(csvHeader()); + + const seenSubtreeAgg = cfg.dedupeWithinSubtree ? new Set() : null; + let subtreeAggCount = 0; + + const rows = objsRaw + .map((o) => ({ + id: String(o.id ?? '').trim(), + name: String(o.name ?? '').trim(), + path: String(o.path ?? '').trim(), + })) + .filter((o) => o.id && o.name); + + for (const row of rows) { + if (!cfg.exportParentRows && isParentRow(rows, row)) continue; + + runState.categoryRowsAttempted++; + await sleep(cfg.categoryDelayMs); + + let items; + try { + items = await fetchAllItemsForCategory(row.id, creds, cfg); + runState.categoryRowsSucceeded++; + } catch (e) { + runState.categoryRowsFailed++; + runState.failures.push({ + type: 'categoryFetchFailed', + subtreeFile: file, + subtreeName: subtree_name, + categoryId: row.id, + categoryName: row.name, + categoryPath: row.path, + message: String(e?.message ?? e), + httpStatus: e?.httpStatus ?? null, + url: e?.url ?? null, + responseBody: e?.responseBody ?? null, + when: formatISO(new Date()), + }); + console.error( + `Failed category ${row.id} (${row.name}): ${e.message}`, + ); + continue; } - const outRow = itemToRow(item, { - subtree_id, - subtree_name, - category_id: row.id, - category_name: row.name, - category_path: row.path, + const categoryLabel = sanitizeFilename( + `${subtree_name}_${subtree_id}__${row.name}_${row.id}`, + ); + const categoryFile = path.join(outPath, `${categoryLabel}.csv`); + const categoryStream = fs.createWriteStream(categoryFile, { + encoding: 'utf8', }); + categoryStream.write(csvHeader()); + + const seenCategory = cfg.dedupeWithinCategory ? new Set() : null; + let categoryCount = 0; - // Per-category CSV - categoryStream.write(rowToCSVLine(outRow, columns)); - categoryCount++; + for (const item of items) { + const itemId = String(item?.itemId ?? ''); + if (!itemId) continue; + + if (seenCategory) { + if (seenCategory.has(itemId)) continue; + seenCategory.add(itemId); + } - // Subtree aggregate (dedup optional) - if (seenSubtreeAgg) { - if (!seenSubtreeAgg.has(itemId)) { - seenSubtreeAgg.add(itemId); - subtreeAggStream.write(rowToCSVLine(outRow, columns)); + const outRow = itemToRow(item, { + subtree_name, + category_id: row.id, + category_name: row.name, + category_path: row.path, + }); + + categoryStream.write(rowToCSVLine(outRow)); + categoryCount++; + + if (seenSubtreeAgg) { + if (!seenSubtreeAgg.has(itemId)) { + seenSubtreeAgg.add(itemId); + subtreeAggStream.write(rowToCSVLine(outRow)); + subtreeAggCount++; + } + } else { + subtreeAggStream.write(rowToCSVLine(outRow)); subtreeAggCount++; } - } else { - subtreeAggStream.write(rowToCSVLine(outRow, columns)); - subtreeAggCount++; - } - // Master (dedup optional) - if (seenMaster) { - if (!seenMaster.has(itemId)) { - seenMaster.add(itemId); - masterStream.write(rowToCSVLine(outRow, columns)); + if (seenMaster) { + if (!seenMaster.has(itemId)) { + seenMaster.add(itemId); + masterStream.write(rowToCSVLine(outRow)); + masterCount++; + } + } else { + masterStream.write(rowToCSVLine(outRow)); masterCount++; } - } else { - masterStream.write(rowToCSVLine(outRow, columns)); - masterCount++; } - } - await new Promise((resolve) => categoryStream.end(resolve)); - - if (categoryCount != 0) { - console.log( - `Wrote category CSV: ${path.basename(categoryFile)} (${categoryCount} rows)`, - ); + await new Promise((resolve) => categoryStream.end(resolve)); + if (categoryCount > 0) { + console.log( + `Wrote ${path.basename(categoryFile)} (${categoryCount} rows)`, + ); + } } - } - - await new Promise((resolve) => subtreeAggStream.end(resolve)); - - runState.subtreeFilesProcessed++; - console.log( - `Wrote subtree aggregate CSV: ${path.basename(subtreeAggFile)} (${subtreeAggCount} rows)`, - ); + await new Promise((resolve) => subtreeAggStream.end(resolve)); + runState.subtreeFilesProcessed++; + console.log( + `Wrote ${path.basename(subtreeAggFile)} (${subtreeAggCount} rows)`, + ); + } + } finally { + await new Promise((resolve) => masterStream.end(resolve)); + runState.endedAt = new Date(); + writeRunLog(outPath, runState); } - await new Promise((resolve) => masterStream.end(resolve)); - console.log( - `Wrote master CSV: ${path.basename(masterFile)} (${masterCount} rows)`, - ); + console.log(`Wrote ${path.basename(masterFile)} (${masterCount} rows)`); - finalizeAndExit(outPath, 'completed', 0); + return { + subtreeFilesProcessed: runState.subtreeFilesProcessed, + categoryRowsAttempted: runState.categoryRowsAttempted, + categoryRowsSucceeded: runState.categoryRowsSucceeded, + categoryRowsFailed: runState.categoryRowsFailed, + }; } -main().catch((err) => { - console.error(err); - finalizeAndExit(path.resolve(process.cwd(), OUT_DIR), 'main() catch', 1); -}); +// run directly if called as a script (not imported) +if (process.argv[1] === __filename) { + run().catch((err) => { + console.error(err.message ?? err); + process.exit(1); + }); +} diff --git a/node_modules/.bin/acorn b/node_modules/.bin/acorn deleted file mode 120000 index cf76760..0000000 --- a/node_modules/.bin/acorn +++ /dev/null @@ -1 +0,0 @@ -../acorn/bin/acorn \ No newline at end of file diff --git a/node_modules/.bin/eslint b/node_modules/.bin/eslint deleted file mode 120000 index 810e4bc..0000000 --- a/node_modules/.bin/eslint +++ /dev/null @@ -1 +0,0 @@ -../eslint/bin/eslint.js \ No newline at end of file diff --git a/node_modules/.bin/eslint-config-prettier-check b/node_modules/.bin/eslint-config-prettier-check deleted file mode 120000 index 7d29baa..0000000 --- a/node_modules/.bin/eslint-config-prettier-check +++ /dev/null @@ -1 +0,0 @@ -../eslint-config-prettier/bin/cli.js \ No newline at end of file diff --git a/node_modules/.bin/esparse b/node_modules/.bin/esparse deleted file mode 120000 index 7423b18..0000000 --- a/node_modules/.bin/esparse +++ /dev/null @@ -1 +0,0 @@ -../esprima/bin/esparse.js \ No newline at end of file diff --git a/node_modules/.bin/esvalidate b/node_modules/.bin/esvalidate deleted file mode 120000 index 16069ef..0000000 --- a/node_modules/.bin/esvalidate +++ /dev/null @@ -1 +0,0 @@ -../esprima/bin/esvalidate.js \ No newline at end of file diff --git a/node_modules/.bin/husky b/node_modules/.bin/husky deleted file mode 120000 index d5c33f5..0000000 --- a/node_modules/.bin/husky +++ /dev/null @@ -1 +0,0 @@ -../husky/bin.js \ No newline at end of file diff --git a/node_modules/.bin/js-yaml b/node_modules/.bin/js-yaml deleted file mode 120000 index 9dbd010..0000000 --- a/node_modules/.bin/js-yaml +++ /dev/null @@ -1 +0,0 @@ -../js-yaml/bin/js-yaml.js \ No newline at end of file diff --git a/node_modules/.bin/mkdirp b/node_modules/.bin/mkdirp deleted file mode 120000 index 017896c..0000000 --- a/node_modules/.bin/mkdirp +++ /dev/null @@ -1 +0,0 @@ -../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/node_modules/.bin/node-lint b/node_modules/.bin/node-lint deleted file mode 120000 index c8c5486..0000000 --- a/node_modules/.bin/node-lint +++ /dev/null @@ -1 +0,0 @@ -../lint/bin/node-lint \ No newline at end of file diff --git a/node_modules/.bin/prettier b/node_modules/.bin/prettier deleted file mode 120000 index 92267ed..0000000 --- a/node_modules/.bin/prettier +++ /dev/null @@ -1 +0,0 @@ -../prettier/bin/prettier.cjs \ No newline at end of file diff --git a/node_modules/.bin/rimraf b/node_modules/.bin/rimraf deleted file mode 120000 index 4cd49a4..0000000 --- a/node_modules/.bin/rimraf +++ /dev/null @@ -1 +0,0 @@ -../rimraf/bin.js \ No newline at end of file diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver deleted file mode 120000 index 317eb29..0000000 --- a/node_modules/.bin/semver +++ /dev/null @@ -1 +0,0 @@ -../semver/bin/semver \ No newline at end of file diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid deleted file mode 120000 index a0e681c..0000000 --- a/node_modules/.bin/uuid +++ /dev/null @@ -1 +0,0 @@ -../uuid/dist-node/bin/uuid \ No newline at end of file diff --git a/node_modules/.bin/which b/node_modules/.bin/which deleted file mode 120000 index f62471c..0000000 --- a/node_modules/.bin/which +++ /dev/null @@ -1 +0,0 @@ -../which/bin/which \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json deleted file mode 100644 index 162308f..0000000 --- a/node_modules/.package-lock.json +++ /dev/null @@ -1,1716 +0,0 @@ -{ - "name": "walmart-io-demo", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^3.0.4" - } - }, - "node_modules/acorn-jsx/node_modules/acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "node_modules/ajv-keywords": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz", - "integrity": "sha512-UVqQ2fa3ELt80oJ/QctN+25n/ccCQf+YXZxYyj2nO1wiIZ58poVAuWpuIkQ//RUqNr/nWK4Byqflyn1omwXlyQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", - "dev": true, - "license": "MIT" - }, - "node_modules/circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true, - "license": "ISC" - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-stdin": "^6.0.0" - }, - "bin": { - "eslint-config-prettier-check": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=3.14.1" - } - }, - "node_modules/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true, - "license": "MIT" - }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", - "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/husky": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", - "dev": true, - "bin": { - "husky": "bin.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true, - "license": "MIT" - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true, - "license": "ISC" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lint": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/lint/-/lint-1.1.2.tgz", - "integrity": "sha512-kOzKdN0iSdkx57102MxZd64yn32rHaB6xqBMN3hyCRiBV2xiurM75XWvTHWNK/SJBCddHPhjDLV+kNr3Uf1MGg==", - "bin": { - "node-lint": "bin/node-lint" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-rsa": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.1.1.tgz", - "integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==", - "dependencies": { - "asn1": "^0.2.4" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "node_modules/pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==", - "dev": true - }, - "node_modules/rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==", - "dev": true, - "dependencies": { - "rx-lite": "*" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, - "node_modules/table/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true, - "license": "MIT" - }, - "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, - "license": "MIT" - }, - "node_modules/uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist-node/bin/uuid" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true, - "license": "ISC" - } - } -} diff --git a/node_modules/acorn-jsx/LICENSE b/node_modules/acorn-jsx/LICENSE deleted file mode 100644 index 6d1e4f4..0000000 --- a/node_modules/acorn-jsx/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2012-2014 by Ingvar Stepanyan - -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. diff --git a/node_modules/acorn-jsx/README.md b/node_modules/acorn-jsx/README.md deleted file mode 100644 index cd9674c..0000000 --- a/node_modules/acorn-jsx/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# Acorn-JSX - -[![Build Status](https://travis-ci.org/RReverser/acorn-jsx.svg?branch=master)](https://travis-ci.org/RReverser/acorn-jsx) -[![NPM version](https://img.shields.io/npm/v/acorn-jsx.svg)](https://www.npmjs.org/package/acorn-jsx) - -This is plugin for [Acorn](http://marijnhaverbeke.nl/acorn/) - a tiny, fast JavaScript parser, written completely in JavaScript. - -It was created as an experimental alternative, faster [React.js JSX](http://facebook.github.io/react/docs/jsx-in-depth.html) parser. - -According to [benchmarks](https://github.com/RReverser/acorn-jsx/blob/master/test/bench.html), Acorn-JSX is 2x faster than official [Esprima-based parser](https://github.com/facebook/esprima) when location tracking is turned on in both (call it "source maps enabled mode"). At the same time, it consumes all the ES6+JSX syntax that can be consumed by Esprima-FB (this is proved by [official tests](https://github.com/RReverser/acorn-jsx/blob/master/test/tests-jsx.js)). - -**UPDATE [14-Apr-2015]**: Facebook implementation started [deprecation process](https://github.com/facebook/esprima/issues/111) in favor of Acorn + Acorn-JSX + Babel for parsing and transpiling JSX syntax. - -## Transpiler - -Please note that this tool only parses source code to JSX AST, which is useful for various language tools and services. If you want to transpile your code to regular ES5-compliant JavaScript with source map, check out the [babel transpiler](https://babeljs.io/) which uses `acorn-jsx` under the hood. - -## Usage - -You can use module directly in order to get Acorn instance with plugin installed: - -```javascript -var acorn = require('acorn-jsx'); -``` - -Or you can use `inject.js` for injecting plugin into your own version of Acorn like following: - -```javascript -var acorn = require('acorn-jsx/inject')(require('./custom-acorn')); -``` - -Then, use `plugins` option whenever you need to support JSX while parsing: - -```javascript -var ast = acorn.parse(code, { - plugins: { jsx: true } -}); -``` - -Note that official spec doesn't support mix of XML namespaces and object-style access in tag names (#27) like in ``, so it was deprecated in `acorn-jsx@3.0`. If you still want to opt-in to support of such constructions, you can pass the following option: - -```javascript -var ast = acorn.parse(code, { - plugins: { - jsx: { allowNamespacedObjects: true } - } -}); -``` - -Also, since most apps use pure React transformer, a new option was introduced that allows to prohibit namespaces completely: - -```javascript -var ast = acorn.parse(code, { - plugins: { - jsx: { allowNamespaces: false } - } -}); -``` - -Note that by default `allowNamespaces` is enabled for spec compliancy. - -## License - -This plugin is issued under the [MIT license](./LICENSE). diff --git a/node_modules/acorn-jsx/index.js b/node_modules/acorn-jsx/index.js deleted file mode 100644 index 58c8677..0000000 --- a/node_modules/acorn-jsx/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./inject')(require('acorn')); diff --git a/node_modules/acorn-jsx/inject.js b/node_modules/acorn-jsx/inject.js deleted file mode 100644 index 2bc4e9f..0000000 --- a/node_modules/acorn-jsx/inject.js +++ /dev/null @@ -1,433 +0,0 @@ -'use strict'; - -var XHTMLEntities = require('./xhtml'); - -var hexNumber = /^[\da-fA-F]+$/; -var decimalNumber = /^\d+$/; - -module.exports = function(acorn) { - var tt = acorn.tokTypes; - var tc = acorn.tokContexts; - - tc.j_oTag = new acorn.TokContext('...', true, true); - - tt.jsxName = new acorn.TokenType('jsxName'); - tt.jsxText = new acorn.TokenType('jsxText', {beforeExpr: true}); - tt.jsxTagStart = new acorn.TokenType('jsxTagStart'); - tt.jsxTagEnd = new acorn.TokenType('jsxTagEnd'); - - tt.jsxTagStart.updateContext = function() { - this.context.push(tc.j_expr); // treat as beginning of JSX expression - this.context.push(tc.j_oTag); // start opening tag context - this.exprAllowed = false; - }; - tt.jsxTagEnd.updateContext = function(prevType) { - var out = this.context.pop(); - if (out === tc.j_oTag && prevType === tt.slash || out === tc.j_cTag) { - this.context.pop(); - this.exprAllowed = this.curContext() === tc.j_expr; - } else { - this.exprAllowed = true; - } - }; - - var pp = acorn.Parser.prototype; - - // Reads inline JSX contents token. - - pp.jsx_readToken = function() { - var out = '', chunkStart = this.pos; - for (;;) { - if (this.pos >= this.input.length) - this.raise(this.start, 'Unterminated JSX contents'); - var ch = this.input.charCodeAt(this.pos); - - switch (ch) { - case 60: // '<' - case 123: // '{' - if (this.pos === this.start) { - if (ch === 60 && this.exprAllowed) { - ++this.pos; - return this.finishToken(tt.jsxTagStart); - } - return this.getTokenFromCode(ch); - } - out += this.input.slice(chunkStart, this.pos); - return this.finishToken(tt.jsxText, out); - - case 38: // '&' - out += this.input.slice(chunkStart, this.pos); - out += this.jsx_readEntity(); - chunkStart = this.pos; - break; - - default: - if (acorn.isNewLine(ch)) { - out += this.input.slice(chunkStart, this.pos); - out += this.jsx_readNewLine(true); - chunkStart = this.pos; - } else { - ++this.pos; - } - } - } - }; - - pp.jsx_readNewLine = function(normalizeCRLF) { - var ch = this.input.charCodeAt(this.pos); - var out; - ++this.pos; - if (ch === 13 && this.input.charCodeAt(this.pos) === 10) { - ++this.pos; - out = normalizeCRLF ? '\n' : '\r\n'; - } else { - out = String.fromCharCode(ch); - } - if (this.options.locations) { - ++this.curLine; - this.lineStart = this.pos; - } - - return out; - }; - - pp.jsx_readString = function(quote) { - var out = '', chunkStart = ++this.pos; - for (;;) { - if (this.pos >= this.input.length) - this.raise(this.start, 'Unterminated string constant'); - var ch = this.input.charCodeAt(this.pos); - if (ch === quote) break; - if (ch === 38) { // '&' - out += this.input.slice(chunkStart, this.pos); - out += this.jsx_readEntity(); - chunkStart = this.pos; - } else if (acorn.isNewLine(ch)) { - out += this.input.slice(chunkStart, this.pos); - out += this.jsx_readNewLine(false); - chunkStart = this.pos; - } else { - ++this.pos; - } - } - out += this.input.slice(chunkStart, this.pos++); - return this.finishToken(tt.string, out); - }; - - pp.jsx_readEntity = function() { - var str = '', count = 0, entity; - var ch = this.input[this.pos]; - if (ch !== '&') - this.raise(this.pos, 'Entity must start with an ampersand'); - var startPos = ++this.pos; - while (this.pos < this.input.length && count++ < 10) { - ch = this.input[this.pos++]; - if (ch === ';') { - if (str[0] === '#') { - if (str[1] === 'x') { - str = str.substr(2); - if (hexNumber.test(str)) - entity = String.fromCharCode(parseInt(str, 16)); - } else { - str = str.substr(1); - if (decimalNumber.test(str)) - entity = String.fromCharCode(parseInt(str, 10)); - } - } else { - entity = XHTMLEntities[str]; - } - break; - } - str += ch; - } - if (!entity) { - this.pos = startPos; - return '&'; - } - return entity; - }; - - - // Read a JSX identifier (valid tag or attribute name). - // - // Optimized version since JSX identifiers can't contain - // escape characters and so can be read as single slice. - // Also assumes that first character was already checked - // by isIdentifierStart in readToken. - - pp.jsx_readWord = function() { - var ch, start = this.pos; - do { - ch = this.input.charCodeAt(++this.pos); - } while (acorn.isIdentifierChar(ch) || ch === 45); // '-' - return this.finishToken(tt.jsxName, this.input.slice(start, this.pos)); - }; - - // Transforms JSX element name to string. - - function getQualifiedJSXName(object) { - if (object.type === 'JSXIdentifier') - return object.name; - - if (object.type === 'JSXNamespacedName') - return object.namespace.name + ':' + object.name.name; - - if (object.type === 'JSXMemberExpression') - return getQualifiedJSXName(object.object) + '.' + - getQualifiedJSXName(object.property); - } - - // Parse next token as JSX identifier - - pp.jsx_parseIdentifier = function() { - var node = this.startNode(); - if (this.type === tt.jsxName) - node.name = this.value; - else if (this.type.keyword) - node.name = this.type.keyword; - else - this.unexpected(); - this.next(); - return this.finishNode(node, 'JSXIdentifier'); - }; - - // Parse namespaced identifier. - - pp.jsx_parseNamespacedName = function() { - var startPos = this.start, startLoc = this.startLoc; - var name = this.jsx_parseIdentifier(); - if (!this.options.plugins.jsx.allowNamespaces || !this.eat(tt.colon)) return name; - var node = this.startNodeAt(startPos, startLoc); - node.namespace = name; - node.name = this.jsx_parseIdentifier(); - return this.finishNode(node, 'JSXNamespacedName'); - }; - - // Parses element name in any form - namespaced, member - // or single identifier. - - pp.jsx_parseElementName = function() { - var startPos = this.start, startLoc = this.startLoc; - var node = this.jsx_parseNamespacedName(); - if (this.type === tt.dot && node.type === 'JSXNamespacedName' && !this.options.plugins.jsx.allowNamespacedObjects) { - this.unexpected(); - } - while (this.eat(tt.dot)) { - var newNode = this.startNodeAt(startPos, startLoc); - newNode.object = node; - newNode.property = this.jsx_parseIdentifier(); - node = this.finishNode(newNode, 'JSXMemberExpression'); - } - return node; - }; - - // Parses any type of JSX attribute value. - - pp.jsx_parseAttributeValue = function() { - switch (this.type) { - case tt.braceL: - var node = this.jsx_parseExpressionContainer(); - if (node.expression.type === 'JSXEmptyExpression') - this.raise(node.start, 'JSX attributes must only be assigned a non-empty expression'); - return node; - - case tt.jsxTagStart: - case tt.string: - return this.parseExprAtom(); - - default: - this.raise(this.start, 'JSX value should be either an expression or a quoted JSX text'); - } - }; - - // JSXEmptyExpression is unique type since it doesn't actually parse anything, - // and so it should start at the end of last read token (left brace) and finish - // at the beginning of the next one (right brace). - - pp.jsx_parseEmptyExpression = function() { - var node = this.startNodeAt(this.lastTokEnd, this.lastTokEndLoc); - return this.finishNodeAt(node, 'JSXEmptyExpression', this.start, this.startLoc); - }; - - // Parses JSX expression enclosed into curly brackets. - - - pp.jsx_parseExpressionContainer = function() { - var node = this.startNode(); - this.next(); - node.expression = this.type === tt.braceR - ? this.jsx_parseEmptyExpression() - : this.parseExpression(); - this.expect(tt.braceR); - return this.finishNode(node, 'JSXExpressionContainer'); - }; - - // Parses following JSX attribute name-value pair. - - pp.jsx_parseAttribute = function() { - var node = this.startNode(); - if (this.eat(tt.braceL)) { - this.expect(tt.ellipsis); - node.argument = this.parseMaybeAssign(); - this.expect(tt.braceR); - return this.finishNode(node, 'JSXSpreadAttribute'); - } - node.name = this.jsx_parseNamespacedName(); - node.value = this.eat(tt.eq) ? this.jsx_parseAttributeValue() : null; - return this.finishNode(node, 'JSXAttribute'); - }; - - // Parses JSX opening tag starting after '<'. - - pp.jsx_parseOpeningElementAt = function(startPos, startLoc) { - var node = this.startNodeAt(startPos, startLoc); - node.attributes = []; - node.name = this.jsx_parseElementName(); - while (this.type !== tt.slash && this.type !== tt.jsxTagEnd) - node.attributes.push(this.jsx_parseAttribute()); - node.selfClosing = this.eat(tt.slash); - this.expect(tt.jsxTagEnd); - return this.finishNode(node, 'JSXOpeningElement'); - }; - - // Parses JSX closing tag starting after ''); - } - } - - node.openingElement = openingElement; - node.closingElement = closingElement; - node.children = children; - if (this.type === tt.relational && this.value === "<") { - this.raise(this.start, "Adjacent JSX elements must be wrapped in an enclosing tag"); - } - return this.finishNode(node, 'JSXElement'); - }; - - // Parses entire JSX element from current position. - - pp.jsx_parseElement = function() { - var startPos = this.start, startLoc = this.startLoc; - this.next(); - return this.jsx_parseElementAt(startPos, startLoc); - }; - - acorn.plugins.jsx = function(instance, opts) { - if (!opts) { - return; - } - - if (typeof opts !== 'object') { - opts = {}; - } - - instance.options.plugins.jsx = { - allowNamespaces: opts.allowNamespaces !== false, - allowNamespacedObjects: !!opts.allowNamespacedObjects - }; - - instance.extend('parseExprAtom', function(inner) { - return function(refShortHandDefaultPos) { - if (this.type === tt.jsxText) - return this.parseLiteral(this.value); - else if (this.type === tt.jsxTagStart) - return this.jsx_parseElement(); - else - return inner.call(this, refShortHandDefaultPos); - }; - }); - - instance.extend('readToken', function(inner) { - return function(code) { - var context = this.curContext(); - - if (context === tc.j_expr) return this.jsx_readToken(); - - if (context === tc.j_oTag || context === tc.j_cTag) { - if (acorn.isIdentifierStart(code)) return this.jsx_readWord(); - - if (code == 62) { - ++this.pos; - return this.finishToken(tt.jsxTagEnd); - } - - if ((code === 34 || code === 39) && context == tc.j_oTag) - return this.jsx_readString(code); - } - - if (code === 60 && this.exprAllowed) { - ++this.pos; - return this.finishToken(tt.jsxTagStart); - } - return inner.call(this, code); - }; - }); - - instance.extend('updateContext', function(inner) { - return function(prevType) { - if (this.type == tt.braceL) { - var curContext = this.curContext(); - if (curContext == tc.j_oTag) this.context.push(tc.b_expr); - else if (curContext == tc.j_expr) this.context.push(tc.b_tmpl); - else inner.call(this, prevType); - this.exprAllowed = true; - } else if (this.type === tt.slash && prevType === tt.jsxTagStart) { - this.context.length -= 2; // do not consider JSX expr -> JSX open tag -> ... anymore - this.context.push(tc.j_cTag); // reconsider as closing tag context - this.exprAllowed = false; - } else { - return inner.call(this, prevType); - } - }; - }); - }; - - return acorn; -}; diff --git a/node_modules/acorn-jsx/node_modules/.bin/acorn b/node_modules/acorn-jsx/node_modules/.bin/acorn deleted file mode 120000 index cf76760..0000000 --- a/node_modules/acorn-jsx/node_modules/.bin/acorn +++ /dev/null @@ -1 +0,0 @@ -../acorn/bin/acorn \ No newline at end of file diff --git a/node_modules/acorn-jsx/node_modules/acorn/.editorconfig b/node_modules/acorn-jsx/node_modules/acorn/.editorconfig deleted file mode 100644 index c14d5c6..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/.editorconfig +++ /dev/null @@ -1,7 +0,0 @@ -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true diff --git a/node_modules/acorn-jsx/node_modules/acorn/.gitattributes b/node_modules/acorn-jsx/node_modules/acorn/.gitattributes deleted file mode 100644 index fcadb2c..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text eol=lf diff --git a/node_modules/acorn-jsx/node_modules/acorn/.npmignore b/node_modules/acorn-jsx/node_modules/acorn/.npmignore deleted file mode 100644 index ecba291..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -/.tern-port -/test -/local diff --git a/node_modules/acorn-jsx/node_modules/acorn/.tern-project b/node_modules/acorn-jsx/node_modules/acorn/.tern-project deleted file mode 100644 index 6718ce0..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/.tern-project +++ /dev/null @@ -1,6 +0,0 @@ -{ - "plugins": { - "node": true, - "es_modules": true - } -} \ No newline at end of file diff --git a/node_modules/acorn-jsx/node_modules/acorn/.travis.yml b/node_modules/acorn-jsx/node_modules/acorn/.travis.yml deleted file mode 100644 index d9ee88b..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: node_js -sudo: false -node_js: - - '0.12' - - '4' - - '5' - - '6' diff --git a/node_modules/acorn-jsx/node_modules/acorn/AUTHORS b/node_modules/acorn-jsx/node_modules/acorn/AUTHORS deleted file mode 100644 index 1b2061c..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/AUTHORS +++ /dev/null @@ -1,59 +0,0 @@ -List of Acorn contributors. Updated before every release. - -Adrian Rakovsky -Alistair Braidwood -Amila Welihinda -Andres Suarez -Angelo -Aparajita Fishman -Arian Stolwijk -Artem Govorov -Brandon Mills -Charles Hughes -Conrad Irwin -Daniel Tschinder -David Bonnet -Domenico Matteo -ForbesLindesay -Forbes Lindesay -Gilad Peleg -impinball -Ingvar Stepanyan -Jackson Ray Hamilton -Jesse McCarthy -Jiaxing Wang -Joel Kemp -Johannes Herr -Jordan Klassen -Jürg Lehni -keeyipchan -Keheliya Gallaba -Kevin Irish -Kevin Kwok -krator -Marijn Haverbeke -Martin Carlberg -Mathias Bynens -Mathieu 'p01' Henri -Matthew Bastien -Max Schaefer -Max Zerzouri -Mihai Bazon -Mike Rennie -Nicholas C. Zakas -Nick Fitzgerald -Olivier Thomann -Oskar Schöldström -Paul Harper -Peter Rust -PlNG -Prayag Verma -ReadmeCritic -r-e-d -Richard Gibson -Rich Harris -Rich-Harris -Sebastian McKenzie -Timothy Gu -Toru Nagashima -zsjforcn diff --git a/node_modules/acorn-jsx/node_modules/acorn/CHANGELOG.md b/node_modules/acorn-jsx/node_modules/acorn/CHANGELOG.md deleted file mode 100644 index 16b8212..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/CHANGELOG.md +++ /dev/null @@ -1,159 +0,0 @@ -## 3.3.0 (2016-07-25) - -### Bug fixes - -Fix bug in tokenizing of regexp operator after a function declaration. - -Fix parser crash when parsing an array pattern with a hole. - -### New features - -Implement check against complex argument lists in functions that -enable strict mode in ES7. - -## 3.2.0 (2016-06-07) - -### Bug fixes - -Improve handling of lack of unicode regexp support in host -environment. - -Properly reject shorthand properties whose name is a keyword. - -Don't crash when the loose parser is called without options object. - -### New features - -Visitors created with `visit.make` now have their base as _prototype_, -rather than copying properties into a fresh object. - -Make it possible to use `visit.ancestor` with a walk state. - -## 3.1.0 (2016-04-18) - -### Bug fixes - -Fix issue where the loose parser created invalid TemplateElement nodes -for unclosed template literals. - -Properly tokenize the division operator directly after a function -expression. - -Allow trailing comma in destructuring arrays. - -### New features - -The walker now allows defining handlers for `CatchClause` nodes. - -## 3.0.4 (2016-02-25) - -### Fixes - -Allow update expressions as left-hand-side of the ES7 exponential -operator. - -## 3.0.2 (2016-02-10) - -### Fixes - -Fix bug that accidentally made `undefined` a reserved word when -parsing ES7. - -## 3.0.0 (2016-02-10) - -### Breaking changes - -The default value of the `ecmaVersion` option is now 6 (used to be 5). - -Support for comprehension syntax (which was dropped from the draft -spec) has been removed. - -### Fixes - -`let` and `yield` are now “contextual keywords”, meaning you can -mostly use them as identifiers in ES5 non-strict code. - -A parenthesized class or function expression after `export default` is -now parsed correctly. - -### New features - -When `ecmaVersion` is set to 7, Acorn will parse the exponentiation -operator (`**`). - -The identifier character ranges are now based on Unicode 8.0.0. - -Plugins can now override the `raiseRecoverable` method to override the -way non-critical errors are handled. - -## 2.7.0 (2016-01-04) - -### Fixes - -Stop allowing rest parameters in setters. - -Make sure the loose parser always attaches a `local` property to -`ImportNamespaceSpecifier` nodes. - -Disallow `y` rexexp flag in ES5. - -Disallow `\00` and `\000` escapes in strict mode. - -Raise an error when an import name is a reserved word. - -## 2.6.4 (2015-11-12) - -### Fixes - -Fix crash in loose parser when parsing invalid object pattern. - -### New features - -Support plugins in the loose parser. - -## 2.6.2 (2015-11-10) - -### Fixes - -Don't crash when no options object is passed. - -## 2.6.0 (2015-11-09) - -### Fixes - -Add `await` as a reserved word in module sources. - -Disallow `yield` in a parameter default value for a generator. - -Forbid using a comma after a rest pattern in an array destructuring. - -### New features - -Support parsing stdin in command-line tool. - -## 2.5.2 (2015-10-27) - -### Fixes - -Fix bug where the walker walked an exported `let` statement as an -expression. - -## 2.5.0 (2015-10-27) - -### Fixes - -Fix tokenizer support in the command-line tool. - -In the loose parser, don't allow non-string-literals as import -sources. - -Stop allowing `new.target` outside of functions. - -Remove legacy `guard` and `guardedHandler` properties from try nodes. - -Stop allowing multiple `__proto__` properties on an object literal in -strict mode. - -Don't allow rest parameters to be non-identifier patterns. - -Check for duplicate paramter names in arrow functions. diff --git a/node_modules/acorn-jsx/node_modules/acorn/LICENSE b/node_modules/acorn-jsx/node_modules/acorn/LICENSE deleted file mode 100644 index a35ebf4..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2012-2016 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. diff --git a/node_modules/acorn-jsx/node_modules/acorn/README.md b/node_modules/acorn-jsx/node_modules/acorn/README.md deleted file mode 100644 index 0c514d5..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/README.md +++ /dev/null @@ -1,407 +0,0 @@ -# Acorn - -[![Build Status](https://travis-ci.org/ternjs/acorn.svg?branch=master)](https://travis-ci.org/ternjs/acorn) -[![NPM version](https://img.shields.io/npm/v/acorn.svg)](https://www.npmjs.com/package/acorn) -[Author funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png?force)](https://marijnhaverbeke.nl/fund/) - -A tiny, fast JavaScript parser, written completely in JavaScript. - -## Community - -Acorn is open source software released under an -[MIT license](https://github.com/ternjs/acorn/blob/master/LICENSE). - -You are welcome to -[report bugs](https://github.com/ternjs/acorn/issues) or create pull -requests on [github](https://github.com/ternjs/acorn). For questions -and discussion, please use the -[Tern discussion forum](https://discuss.ternjs.net). - -## Installation - -The easiest way to install acorn is with [`npm`][npm]. - -[npm]: https://www.npmjs.com/ - -```sh -npm install acorn -``` - -Alternately, download the source. - -```sh -git clone https://github.com/ternjs/acorn.git -``` - -## Components - -When run in a CommonJS (node.js) or AMD environment, exported values -appear in the interfaces exposed by the individual files, as usual. -When loaded in the browser (Acorn works in any JS-enabled browser more -recent than IE5) without any kind of module management, a single -global object `acorn` will be defined, and all the exported properties -will be added to that. - -### Main parser - -This is implemented in `dist/acorn.js`, and is what you get when you -`require("acorn")` in node.js. - -**parse**`(input, options)` is used to parse a JavaScript program. -The `input` parameter is a string, `options` can be undefined or an -object setting some of the options listed below. The return value will -be an abstract syntax tree object as specified by the -[ESTree spec][estree]. - -When encountering a syntax error, the parser will raise a -`SyntaxError` object with a meaningful message. The error object will -have a `pos` property that indicates the character offset at which the -error occurred, and a `loc` object that contains a `{line, column}` -object referring to that same position. - -[estree]: https://github.com/estree/estree - -- **ecmaVersion**: Indicates the ECMAScript version to parse. Must be - either 3, 5, 6, or 7. This influences support for strict mode, the set - of reserved words, and support for new syntax features. Default is 6. - - **NOTE**: Only 'stage 4' (finalized) ECMAScript 7 features are being - implemented by Acorn. That means that most of the draft standard is - not yet being parsed. - -- **sourceType**: Indicate the mode the code should be parsed in. Can be - either `"script"` or `"module"`. - -- **onInsertedSemicolon**: If given a callback, that callback will be - called whenever a missing semicolon is inserted by the parser. The - callback will be given the character offset of the point where the - semicolon is inserted as argument, and if `locations` is on, also a - `{line, column}` object representing this position. - -- **onTrailingComma**: Like `onInsertedSemicolon`, but for trailing - commas. - -- **allowReserved**: If `false`, using a reserved word will generate - an error. Defaults to `true` for `ecmaVersion` 3, `false` for higher - versions. When given the value `"never"`, reserved words and - keywords can also not be used as property names (as in Internet - Explorer's old parser). - -- **allowReturnOutsideFunction**: By default, a return statement at - the top level raises an error. Set this to `true` to accept such - code. - -- **allowImportExportEverywhere**: By default, `import` and `export` - declarations can only appear at a program's top level. Setting this - option to `true` allows them anywhere where a statement is allowed. - -- **allowHashBang**: When this is enabled (off by default), if the - code starts with the characters `#!` (as in a shellscript), the - first line will be treated as a comment. - -- **locations**: When `true`, each node has a `loc` object attached - with `start` and `end` subobjects, each of which contains the - one-based line and zero-based column numbers in `{line, column}` - form. Default is `false`. - -- **onToken**: If a function is passed for this option, each found - token will be passed in same format as tokens returned from - `tokenizer().getToken()`. - - If array is passed, each found token is pushed to it. - - Note that you are not allowed to call the parser from the - callback—that will corrupt its internal state. - -- **onComment**: If a function is passed for this option, whenever a - comment is encountered the function will be called with the - following parameters: - - - `block`: `true` if the comment is a block comment, false if it - is a line comment. - - `text`: The content of the comment. - - `start`: Character offset of the start of the comment. - - `end`: Character offset of the end of the comment. - - When the `locations` options is on, the `{line, column}` locations - of the comment’s start and end are passed as two additional - parameters. - - If array is passed for this option, each found comment is pushed - to it as object in Esprima format: - - ```javascript - { - "type": "Line" | "Block", - "value": "comment text", - "start": Number, - "end": Number, - // If `locations` option is on: - "loc": { - "start": {line: Number, column: Number} - "end": {line: Number, column: Number} - }, - // If `ranges` option is on: - "range": [Number, Number] - } - ``` - - Note that you are not allowed to call the parser from the - callback—that will corrupt its internal state. - -- **ranges**: Nodes have their start and end characters offsets - recorded in `start` and `end` properties (directly on the node, - rather than the `loc` object, which holds line/column data. To also - add a [semi-standardized][range] `range` property holding a - `[start, end]` array with the same numbers, set the `ranges` option - to `true`. - -- **program**: It is possible to parse multiple files into a single - AST by passing the tree produced by parsing the first file as the - `program` option in subsequent parses. This will add the toplevel - forms of the parsed file to the "Program" (top) node of an existing - parse tree. - -- **sourceFile**: When the `locations` option is `true`, you can pass - this option to add a `source` attribute in every node’s `loc` - object. Note that the contents of this option are not examined or - processed in any way; you are free to use whatever format you - choose. - -- **directSourceFile**: Like `sourceFile`, but a `sourceFile` property - will be added (regardless of the `location` option) directly to the - nodes, rather than the `loc` object. - -- **preserveParens**: If this option is `true`, parenthesized expressions - are represented by (non-standard) `ParenthesizedExpression` nodes - that have a single `expression` property containing the expression - inside parentheses. - -[range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678 - -**parseExpressionAt**`(input, offset, options)` will parse a single -expression in a string, and return its AST. It will not complain if -there is more of the string left after the expression. - -**getLineInfo**`(input, offset)` can be used to get a `{line, -column}` object for a given program string and character offset. - -**tokenizer**`(input, options)` returns an object with a `getToken` -method that can be called repeatedly to get the next token, a `{start, -end, type, value}` object (with added `loc` property when the -`locations` option is enabled and `range` property when the `ranges` -option is enabled). When the token's type is `tokTypes.eof`, you -should stop calling the method, since it will keep returning that same -token forever. - -In ES6 environment, returned result can be used as any other -protocol-compliant iterable: - -```javascript -for (let token of acorn.tokenizer(str)) { - // iterate over the tokens -} - -// transform code to array of tokens: -var tokens = [...acorn.tokenizer(str)]; -``` - -**tokTypes** holds an object mapping names to the token type objects -that end up in the `type` properties of tokens. - -#### Note on using with [Escodegen][escodegen] - -Escodegen supports generating comments from AST, attached in -Esprima-specific format. In order to simulate same format in -Acorn, consider following example: - -```javascript -var comments = [], tokens = []; - -var ast = acorn.parse('var x = 42; // answer', { - // collect ranges for each node - ranges: true, - // collect comments in Esprima's format - onComment: comments, - // collect token ranges - onToken: tokens -}); - -// attach comments using collected information -escodegen.attachComments(ast, comments, tokens); - -// generate code -console.log(escodegen.generate(ast, {comment: true})); -// > 'var x = 42; // answer' -``` - -[escodegen]: https://github.com/estools/escodegen - -### dist/acorn_loose.js ### - -This file implements an error-tolerant parser. It exposes a single -function. The loose parser is accessible in node.js via `require("acorn/dist/acorn_loose")`. - -**parse_dammit**`(input, options)` takes the same arguments and -returns the same syntax tree as the `parse` function in `acorn.js`, -but never raises an error, and will do its best to parse syntactically -invalid code in as meaningful a way as it can. It'll insert identifier -nodes with name `"✖"` as placeholders in places where it can't make -sense of the input. Depends on `acorn.js`, because it uses the same -tokenizer. - -### dist/walk.js ### - -Implements an abstract syntax tree walker. Will store its interface in -`acorn.walk` when loaded without a module system. - -**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][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.) - -**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. - -**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`. - -**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). - -## Command line interface - -The `bin/acorn` utility can be used to parse a file from the command -line. It accepts as arguments its input file and the following -options: - -- `--ecma3|--ecma5|--ecma6|--ecma7`: Sets the ECMAScript version to parse. Default is - version 5. - -- `--module`: Sets the parsing mode to `"module"`. Is set to `"script"` otherwise. - -- `--locations`: Attaches a "loc" object to each node with "start" and - "end" subobjects, each of which contains the one-based line and - zero-based column numbers in `{line, column}` form. - -- `--allow-hash-bang`: If the code starts with the characters #! (as in a shellscript), the first line will be treated as a comment. - -- `--compact`: No whitespace is used in the AST output. - -- `--silent`: Do not output the AST, just return the exit status. - -- `--help`: Print the usage information and quit. - -The utility spits out the syntax tree as JSON data. - -## Build system - -Acorn is written in ECMAScript 6, as a set of small modules, in the -project's `src` directory, and compiled down to bigger ECMAScript 3 -files in `dist` using [Browserify](http://browserify.org) and -[Babel](http://babeljs.io/). If you are already using Babel, you can -consider including the modules directly. - -The command-line test runner (`npm test`) uses the ES6 modules. The -browser-based test page (`test/index.html`) uses the compiled modules. -The `bin/build-acorn.js` script builds the latter from the former. - -If you are working on Acorn, you'll probably want to try the code out -directly, without an intermediate build step. In your scripts, you can -register the Babel require shim like this: - - require("babel-core/register") - -That will allow you to directly `require` the ES6 modules. - -## Plugins - -Acorn is designed support allow plugins which, within reasonable -bounds, redefine the way the parser works. Plugins can add new token -types and new tokenizer contexts (if necessary), and extend methods in -the parser object. This is not a clean, elegant API—using it requires -an understanding of Acorn's internals, and plugins are likely to break -whenever those internals are significantly changed. But still, it is -_possible_, in this way, to create parsers for JavaScript dialects -without forking all of Acorn. And in principle it is even possible to -combine such plugins, so that if you have, for example, a plugin for -parsing types and a plugin for parsing JSX-style XML literals, you -could load them both and parse code with both JSX tags and types. - -A plugin should register itself by adding a property to -`acorn.plugins`, which holds a function. Calling `acorn.parse`, a -`plugins` option can be passed, holding an object mapping plugin names -to configuration values (or just `true` for plugins that don't take -options). After the parser object has been created, the initialization -functions for the chosen plugins are called with `(parser, -configValue)` arguments. They are expected to use the `parser.extend` -method to extend parser methods. For example, the `readToken` method -could be extended like this: - -```javascript -parser.extend("readToken", function(nextMethod) { - return function(code) { - console.log("Reading a token!") - return nextMethod.call(this, code) - } -}) -``` - -The `nextMethod` argument passed to `extend`'s second argument is the -previous value of this method, and should usually be called through to -whenever the extended method does not handle the call itself. - -Similarly, the loose parser allows plugins to register themselves via -`acorn.pluginsLoose`. The extension mechanism is the same as for the -normal parser: - -```javascript -looseParser.extend("readToken", function(nextMethod) { - return function() { - console.log("Reading a token in the loose parser!") - return nextMethod.call(this) - } -}) -``` - -### Existing plugins - - - [`acorn-jsx`](https://github.com/RReverser/acorn-jsx): Parse [Facebook JSX syntax extensions](https://github.com/facebook/jsx) - - [`acorn-es7-plugin`](https://github.com/MatAtBread/acorn-es7-plugin/): Parse [async/await syntax proposal](https://github.com/tc39/ecmascript-asyncawait) - - [`acorn-object-spread`](https://github.com/UXtemple/acorn-object-spread): Parse [object spread syntax proposal](https://github.com/sebmarkbage/ecmascript-rest-spread) - - [`acorn-es7`](https://www.npmjs.com/package/acorn-es7): Parse [decorator syntax proposal](https://github.com/wycats/javascript-decorators) - - [`acorn-objj`](https://www.npmjs.com/package/acorn-objj): [Objective-J](http://www.cappuccino-project.org/learn/objective-j.html) language parser built as Acorn plugin diff --git a/node_modules/acorn-jsx/node_modules/acorn/bin/acorn b/node_modules/acorn-jsx/node_modules/acorn/bin/acorn deleted file mode 100755 index cf4acd5..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/bin/acorn +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -var path = require('path'); -var fs = require('fs'); -var acorn = require('../dist/acorn.js'); - -var infile; -var forceFile; -var silent = false; -var compact = false; -var tokenize = false; -var options = {} - -function help(status) { - var print = (status == 0) ? console.log : console.error - print("usage: " + path.basename(process.argv[1]) + " [--ecma3|--ecma5|--ecma6|--ecma7]") - print(" [--tokenize] [--locations] [---allow-hash-bang] [--compact] [--silent] [--module] [--help] [--] [infile]") - process.exit(status) -} - -for (var i = 2; i < process.argv.length; ++i) { - var arg = process.argv[i] - if ((arg == "-" || arg[0] != "-") && !infile) infile = arg - else if (arg == "--" && !infile && i + 2 == process.argv.length) forceFile = infile = process.argv[++i] - else if (arg == "--ecma3") options.ecmaVersion = 3 - else if (arg == "--ecma5") options.ecmaVersion = 5 - else if (arg == "--ecma6") options.ecmaVersion = 6 - else if (arg == "--ecma7") options.ecmaVersion = 7 - else if (arg == "--locations") options.locations = true - else if (arg == "--allow-hash-bang") options.allowHashBang = true - else if (arg == "--silent") silent = true - else if (arg == "--compact") compact = true - else if (arg == "--help") help(0) - else if (arg == "--tokenize") tokenize = true - else if (arg == "--module") options.sourceType = 'module' - else help(1) -} - -function run(code) { - var result - if (!tokenize) { - try { result = acorn.parse(code, options) } - catch(e) { console.error(e.message); process.exit(1) } - } else { - result = [] - var tokenizer = acorn.tokenizer(code, options), token - while (true) { - try { token = tokenizer.getToken() } - catch(e) { console.error(e.message); process.exit(1) } - result.push(token) - if (token.type == acorn.tokTypes.eof) break - } - } - if (!silent) console.log(JSON.stringify(result, null, compact ? null : 2)) -} - -if (forceFile || infile && infile != "-") { - run(fs.readFileSync(infile, "utf8")) -} else { - var code = "" - process.stdin.resume() - process.stdin.on("data", function (chunk) { return code += chunk; }) - process.stdin.on("end", function () { return run(code); }) -} \ No newline at end of file diff --git a/node_modules/acorn-jsx/node_modules/acorn/bin/generate-identifier-regex.js b/node_modules/acorn-jsx/node_modules/acorn/bin/generate-identifier-regex.js deleted file mode 100644 index 100e8cf..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/bin/generate-identifier-regex.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -// Which Unicode version should be used? -var version = '9.0.0'; - -var start = require('unicode-' + version + '/Binary_Property/ID_Start/code-points.js') - .filter(function(ch) { return ch > 0x7f; }); -var last = -1; -var cont = [0x200c, 0x200d].concat(require('unicode-' + version + '/Binary_Property/ID_Continue/code-points.js') - .filter(function(ch) { return ch > 0x7f && search(start, ch, last + 1) == -1; })); - -function search(arr, ch, starting) { - for (var i = starting; arr[i] <= ch && i < arr.length; last = i++) - if (arr[i] === ch) - return i; - return -1; -} - -function pad(str, width) { - while (str.length < width) str = "0" + str; - return str; -} - -function esc(code) { - var hex = code.toString(16); - if (hex.length <= 2) return "\\x" + pad(hex, 2); - else return "\\u" + pad(hex, 4); -} - -function generate(chars) { - var astral = [], re = ""; - for (var i = 0, at = 0x10000; i < chars.length; i++) { - var from = chars[i], to = from; - while (i < chars.length - 1 && chars[i + 1] == to + 1) { - i++; - to++; - } - if (to <= 0xffff) { - if (from == to) re += esc(from); - else if (from + 1 == to) re += esc(from) + esc(to); - else re += esc(from) + "-" + esc(to); - } else { - astral.push(from - at, to - from); - at = to; - } - } - return {nonASCII: re, astral: astral}; -} - -var startData = generate(start), contData = generate(cont); - -console.log("let nonASCIIidentifierStartChars = \"" + startData.nonASCII + "\""); -console.log("let nonASCIIidentifierChars = \"" + contData.nonASCII + "\""); -console.log("const astralIdentifierStartCodes = " + JSON.stringify(startData.astral)); -console.log("const astralIdentifierCodes = " + JSON.stringify(contData.astral)); diff --git a/node_modules/acorn-jsx/node_modules/acorn/bin/update_authors.sh b/node_modules/acorn-jsx/node_modules/acorn/bin/update_authors.sh deleted file mode 100755 index 466c8db..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/bin/update_authors.sh +++ /dev/null @@ -1,6 +0,0 @@ -# Combine existing list of authors with everyone known in git, sort, add header. -tail --lines=+3 AUTHORS > AUTHORS.tmp -git log --format='%aN' | grep -v abraidwood >> AUTHORS.tmp -echo -e "List of Acorn contributors. Updated before every release.\n" > AUTHORS -sort -u AUTHORS.tmp >> AUTHORS -rm -f AUTHORS.tmp diff --git a/node_modules/acorn-jsx/node_modules/acorn/dist/.keep b/node_modules/acorn-jsx/node_modules/acorn/dist/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/acorn-jsx/node_modules/acorn/dist/acorn.es.js b/node_modules/acorn-jsx/node_modules/acorn/dist/acorn.es.js deleted file mode 100644 index 4460957..0000000 --- a/node_modules/acorn-jsx/node_modules/acorn/dist/acorn.es.js +++ /dev/null @@ -1,3112 +0,0 @@ -// Reserved word lists for various dialects of the language - -var reservedWords = { - 3: "abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile", - 5: "class enum extends super const export import", - 6: "enum", - 7: "enum", - strict: "implements interface let package private protected public static yield", - strictBind: "eval arguments" -} - -// And the keywords - -var ecma5AndLessKeywords = "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this" - -var keywords = { - 5: ecma5AndLessKeywords, - 6: ecma5AndLessKeywords + " const class extends export import super" -} - -// ## Character categories - -// Big ugly regular expressions that match characters in the -// whitespace, identifier, and identifier-start categories. These -// are only applied when a character is found to actually have a -// code point above 128. -// Generated by `bin/generate-identifier-regex.js`. - -var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc" -var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d4-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d01-\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f" - -var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]") -var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]") - -nonASCIIidentifierStartChars = nonASCIIidentifierChars = null - -// These are a run-length and offset encoded representation of the -// >0xffff code points that are a valid part of identifiers. The -// offset starts at 0x10000, and each pair of numbers represents an -// offset to the next range, and then a size of the range. They were -// generated by bin/generate-identifier-regex.js -var astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,17,26,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,26,45,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,785,52,76,44,33,24,27,35,42,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,54,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,86,25,391,63,32,0,449,56,264,8,2,36,18,0,50,29,881,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,881,68,12,0,67,12,65,0,32,6124,20,754,9486,1,3071,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,4149,196,60,67,1213,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,10591,541] -var astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,1306,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,52,0,13,2,49,13,10,2,4,9,83,11,7,0,161,11,6,9,7,3,57,0,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,87,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,423,9,838,7,2,7,17,9,57,21,2,13,19882,9,135,4,60,6,26,9,1016,45,17,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,2214,6,110,6,6,9,792487,239] - -// This has a complexity linear to the value of the code. The -// assumption is that looking up astral identifier characters is -// rare. -function isInAstralSet(code, set) { - var pos = 0x10000 - for (var i = 0; i < set.length; i += 2) { - pos += set[i] - if (pos > code) return false - pos += set[i + 1] - if (pos >= code) return true - } -} - -// Test whether a given character code starts an identifier. - -function isIdentifierStart(code, astral) { - if (code < 65) return code === 36 - if (code < 91) return true - if (code < 97) return code === 95 - if (code < 123) return true - if (code <= 0xffff) return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) - if (astral === false) return false - return isInAstralSet(code, astralIdentifierStartCodes) -} - -// Test whether a given character is part of an identifier. - -function isIdentifierChar(code, astral) { - if (code < 48) return code === 36 - if (code < 58) return true - if (code < 65) return false - if (code < 91) return true - if (code < 97) return code === 95 - if (code < 123) return true - if (code <= 0xffff) return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) - if (astral === false) return false - return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes) -} - -// ## Token types - -// The assignment of fine-grained, information-carrying type objects -// allows the tokenizer to store the information it has about a -// token in a way that is very cheap for the parser to look up. - -// All token type variables start with an underscore, to make them -// easy to recognize. - -// The `beforeExpr` property is used to disambiguate between regular -// expressions and divisions. It is set on all token types that can -// be followed by an expression (thus, a slash after them would be a -// regular expression). -// -// The `startsExpr` property is used to check if the token ends a -// `yield` expression. It is set on all token types that either can -// directly start an expression (like a quotation mark) or can -// continue an expression (like the body of a string). -// -// `isLoop` marks a keyword as starting a loop, which is important -// to know when parsing a label, in order to allow or disallow -// continue jumps to that label. - -var TokenType = function TokenType(label, conf) { - if ( conf === void 0 ) conf = {}; - - this.label = label - this.keyword = conf.keyword - this.beforeExpr = !!conf.beforeExpr - this.startsExpr = !!conf.startsExpr - this.isLoop = !!conf.isLoop - this.isAssign = !!conf.isAssign - this.prefix = !!conf.prefix - this.postfix = !!conf.postfix - this.binop = conf.binop || null - this.updateContext = null -}; - -function binop(name, prec) { - return new TokenType(name, {beforeExpr: true, binop: prec}) -} -var beforeExpr = {beforeExpr: true}; -var startsExpr = {startsExpr: true}; -// Map keyword names to token types. - -var keywordTypes = {} - -// Succinct definitions of keyword token types -function kw(name, options) { - if ( options === void 0 ) options = {}; - - options.keyword = name - return keywordTypes[name] = new TokenType(name, options) -} - -var tt = { - num: new TokenType("num", startsExpr), - regexp: new TokenType("regexp", startsExpr), - string: new TokenType("string", startsExpr), - name: new TokenType("name", startsExpr), - eof: new TokenType("eof"), - - // Punctuation token types. - bracketL: new TokenType("[", {beforeExpr: true, startsExpr: true}), - bracketR: new TokenType("]"), - braceL: new TokenType("{", {beforeExpr: true, startsExpr: true}), - braceR: new TokenType("}"), - parenL: new TokenType("(", {beforeExpr: true, startsExpr: true}), - parenR: new TokenType(")"), - comma: new TokenType(",", beforeExpr), - semi: new TokenType(";", beforeExpr), - colon: new TokenType(":", beforeExpr), - dot: new TokenType("."), - question: new TokenType("?", beforeExpr), - arrow: new TokenType("=>", beforeExpr), - template: new TokenType("template"), - ellipsis: new TokenType("...", beforeExpr), - backQuote: new TokenType("`", startsExpr), - dollarBraceL: new TokenType("${", {beforeExpr: true, startsExpr: true}), - - // Operators. These carry several kinds of properties to help the - // parser use them properly (the presence of these properties is - // what categorizes them as operators). - // - // `binop`, when present, specifies that this operator is a binary - // operator, and will refer to its precedence. - // - // `prefix` and `postfix` mark the operator as a prefix or postfix - // unary operator. - // - // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as - // binary operators with a very low precedence, that should result - // in AssignmentExpression nodes. - - eq: new TokenType("=", {beforeExpr: true, isAssign: true}), - assign: new TokenType("_=", {beforeExpr: true, isAssign: true}), - incDec: new TokenType("++/--", {prefix: true, postfix: true, startsExpr: true}), - prefix: new TokenType("prefix", {beforeExpr: true, prefix: true, startsExpr: true}), - logicalOR: binop("||", 1), - logicalAND: binop("&&", 2), - bitwiseOR: binop("|", 3), - bitwiseXOR: binop("^", 4), - bitwiseAND: binop("&", 5), - equality: binop("==/!=", 6), - relational: binop("", 7), - bitShift: binop("<>", 8), - plusMin: new TokenType("+/-", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}), - modulo: binop("%", 10), - star: binop("*", 10), - slash: binop("/", 10), - starstar: new TokenType("**", {beforeExpr: true}), - - // Keyword token types. - _break: kw("break"), - _case: kw("case", beforeExpr), - _catch: kw("catch"), - _continue: kw("continue"), - _debugger: kw("debugger"), - _default: kw("default", beforeExpr), - _do: kw("do", {isLoop: true, beforeExpr: true}), - _else: kw("else", beforeExpr), - _finally: kw("finally"), - _for: kw("for", {isLoop: true}), - _function: kw("function", startsExpr), - _if: kw("if"), - _return: kw("return", beforeExpr), - _switch: kw("switch"), - _throw: kw("throw", beforeExpr), - _try: kw("try"), - _var: kw("var"), - _const: kw("const"), - _while: kw("while", {isLoop: true}), - _with: kw("with"), - _new: kw("new", {beforeExpr: true, startsExpr: true}), - _this: kw("this", startsExpr), - _super: kw("super", startsExpr), - _class: kw("class"), - _extends: kw("extends", beforeExpr), - _export: kw("export"), - _import: kw("import"), - _null: kw("null", startsExpr), - _true: kw("true", startsExpr), - _false: kw("false", startsExpr), - _in: kw("in", {beforeExpr: true, binop: 7}), - _instanceof: kw("instanceof", {beforeExpr: true, binop: 7}), - _typeof: kw("typeof", {beforeExpr: true, prefix: true, startsExpr: true}), - _void: kw("void", {beforeExpr: true, prefix: true, startsExpr: true}), - _delete: kw("delete", {beforeExpr: true, prefix: true, startsExpr: true}) -} - -// Matches a whole line break (where CRLF is considered a single -// line break). Used to count lines. - -var lineBreak = /\r\n?|\n|\u2028|\u2029/ -var lineBreakG = new RegExp(lineBreak.source, "g") - -function isNewLine(code) { - return code === 10 || code === 13 || code === 0x2028 || code == 0x2029 -} - -var nonASCIIwhitespace = /[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/ - -var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g - -function isArray(obj) { - return Object.prototype.toString.call(obj) === "[object Array]" -} - -// Checks if an object has a property. - -function has(obj, propName) { - return Object.prototype.hasOwnProperty.call(obj, propName) -} - -// These are used when `options.locations` is on, for the -// `startLoc` and `endLoc` properties. - -var Position = function Position(line, col) { - this.line = line - this.column = col -}; - -Position.prototype.offset = function offset (n) { - return new Position(this.line, this.column + n) -}; - -var SourceLocation = function SourceLocation(p, start, end) { - this.start = start - this.end = end - if (p.sourceFile !== null) this.source = p.sourceFile -}; - -// The `getLineInfo` function is mostly useful when the -// `locations` option is off (for performance reasons) and you -// want to find the line/column position for a given character -// offset. `input` should be the code string that the offset refers -// into. - -function getLineInfo(input, offset) { - for (var line = 1, cur = 0;;) { - lineBreakG.lastIndex = cur - var match = lineBreakG.exec(input) - if (match && match.index < offset) { - ++line - cur = match.index + match[0].length - } else { - return new Position(line, offset - cur) - } - } -} - -// A second optional argument can be given to further configure -// the parser process. These options are recognized: - -var defaultOptions = { - // `ecmaVersion` indicates the ECMAScript version to parse. Must - // be either 3, or 5, or 6. This influences support for strict - // mode, the set of reserved words, support for getters and - // setters and other features. The default is 6. - ecmaVersion: 6, - // Source type ("script" or "module") for different semantics - sourceType: "script", - // `onInsertedSemicolon` can be a callback that will be called - // when a semicolon is automatically inserted. It will be passed - // th position of the comma as an offset, and if `locations` is - // enabled, it is given the location as a `{line, column}` object - // as second argument. - onInsertedSemicolon: null, - // `onTrailingComma` is similar to `onInsertedSemicolon`, but for - // trailing commas. - onTrailingComma: null, - // By default, reserved words are only enforced if ecmaVersion >= 5. - // Set `allowReserved` to a boolean value to explicitly turn this on - // an off. When this option has the value "never", reserved words - // and keywords can also not be used as property names. - allowReserved: null, - // When enabled, a return at the top level is not considered an - // error. - allowReturnOutsideFunction: false, - // When enabled, import/export statements are not constrained to - // appearing at the top of the program. - allowImportExportEverywhere: false, - // When enabled, hashbang directive in the beginning of file - // is allowed and treated as a line comment. - allowHashBang: false, - // When `locations` is on, `loc` properties holding objects with - // `start` and `end` properties in `{line, column}` form (with - // line being 1-based and column 0-based) will be attached to the - // nodes. - locations: false, - // A function can be passed as `onToken` option, which will - // cause Acorn to call that function with object in the same - // format as tokens returned from `tokenizer().getToken()`. Note - // that you are not allowed to call the parser from the - // callback—that will corrupt its internal state. - onToken: null, - // A function can be passed as `onComment` option, which will - // cause Acorn to call that function with `(block, text, start, - // end)` parameters whenever a comment is skipped. `block` is a - // boolean indicating whether this is a block (`/* */`) comment, - // `text` is the content of the comment, and `start` and `end` are - // character offsets that denote the start and end of the comment. - // When the `locations` option is on, two more parameters are - // passed, the full `{line, column}` locations of the start and - // end of the comments. Note that you are not allowed to call the - // parser from the callback—that will corrupt its internal state. - onComment: null, - // Nodes have their start and end characters offsets recorded in - // `start` and `end` properties (directly on the node, rather than - // the `loc` object, which holds line/column data. To also add a - // [semi-standardized][range] `range` property holding a `[start, - // end]` array with the same numbers, set the `ranges` option to - // `true`. - // - // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678 - ranges: false, - // It is possible to parse multiple files into a single AST by - // passing the tree produced by parsing the first file as - // `program` option in subsequent parses. This will add the - // toplevel forms of the parsed file to the `Program` (top) node - // of an existing parse tree. - program: null, - // When `locations` is on, you can pass this to record the source - // file in every node's `loc` object. - sourceFile: null, - // This value, if given, is stored in every node, whether - // `locations` is on or off. - directSourceFile: null, - // When enabled, parenthesized expressions are represented by - // (non-standard) ParenthesizedExpression nodes - preserveParens: false, - plugins: {} -} - -// Interpret and default an options object - -function getOptions(opts) { - var options = {} - for (var opt in defaultOptions) - options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt] - if (options.allowReserved == null) - options.allowReserved = options.ecmaVersion < 5 - - if (isArray(options.onToken)) { - var tokens = options.onToken - options.onToken = function (token) { return tokens.push(token); } - } - if (isArray(options.onComment)) - options.onComment = pushComment(options, options.onComment) - - return options -} - -function pushComment(options, array) { - return function (block, text, start, end, startLoc, endLoc) { - var comment = { - type: block ? 'Block' : 'Line', - value: text, - start: start, - end: end - } - if (options.locations) - comment.loc = new SourceLocation(this, startLoc, endLoc) - if (options.ranges) - comment.range = [start, end] - array.push(comment) - } -} - -// Registered plugins -var plugins = {} - -function keywordRegexp(words) { - return new RegExp("^(" + words.replace(/ /g, "|") + ")$") -} - -var Parser = function Parser(options, input, startPos) { - this.options = options = getOptions(options) - this.sourceFile = options.sourceFile - this.keywords = keywordRegexp(keywords[options.ecmaVersion >= 6 ? 6 : 5]) - var reserved = options.allowReserved ? "" : - reservedWords[options.ecmaVersion] + (options.sourceType == "module" ? " await" : "") - this.reservedWords = keywordRegexp(reserved) - var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict - this.reservedWordsStrict = keywordRegexp(reservedStrict) - this.reservedWordsStrictBind = keywordRegexp(reservedStrict + " " + reservedWords.strictBind) - this.input = String(input) - - // Used to signal to callers of `readWord1` whether the word - // contained any escape sequences. This is needed because words with - // escape sequences must not be interpreted as keywords. - this.containsEsc = false - - // Load plugins - this.loadPlugins(options.plugins) - - // Set up token state - - // The current position of the tokenizer in the input. - if (startPos) { - this.pos = startPos - this.lineStart = Math.max(0, this.input.lastIndexOf("\n", startPos)) - this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length - } else { - this.pos = this.lineStart = 0 - this.curLine = 1 - } - - // Properties of the current token: - // Its type - this.type = tt.eof - // For tokens that include more information than their type, the value - this.value = null - // Its start and end offset - this.start = this.end = this.pos - // And, if locations are used, the {line, column} object - // corresponding to those offsets - this.startLoc = this.endLoc = this.curPosition() - - // Position information for the previous token - this.lastTokEndLoc = this.lastTokStartLoc = null - this.lastTokStart = this.lastTokEnd = this.pos - - // The context stack is used to superficially track syntactic - // context to predict whether a regular expression is allowed in a - // given position. - this.context = this.initialContext() - this.exprAllowed = true - - // Figure out if it's a module code. - this.strict = this.inModule = options.sourceType === "module" - - // Used to signify the start of a potential arrow function - this.potentialArrowAt = -1 - - // Flags to track whether we are in a function, a generator. - this.inFunction = this.inGenerator = false - // Labels in scope. - this.labels = [] - - // If enabled, skip leading hashbang line. - if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === '#!') - this.skipLineComment(2) -}; - -// DEPRECATED Kept for backwards compatibility until 3.0 in case a plugin uses them -Parser.prototype.isKeyword = function isKeyword (word) { return this.keywords.test(word) }; -Parser.prototype.isReservedWord = function isReservedWord (word) { return this.reservedWords.test(word) }; - -Parser.prototype.extend = function extend (name, f) { - this[name] = f(this[name]) -}; - -Parser.prototype.loadPlugins = function loadPlugins (pluginConfigs) { - var this$1 = this; - - for (var name in pluginConfigs) { - var plugin = plugins[name] - if (!plugin) throw new Error("Plugin '" + name + "' not found") - plugin(this$1, pluginConfigs[name]) - } -}; - -Parser.prototype.parse = function parse () { - var node = this.options.program || this.startNode() - this.nextToken() - return this.parseTopLevel(node) -}; - -var pp = Parser.prototype - -// ## Parser utilities - -// Test whether a statement node is the string literal `"use strict"`. - -pp.isUseStrict = function(stmt) { - return this.options.ecmaVersion >= 5 && stmt.type === "ExpressionStatement" && - stmt.expression.type === "Literal" && - stmt.expression.raw.slice(1, -1) === "use strict" -} - -// Predicate that tests whether the next token is of the given -// type, and if yes, consumes it as a side effect. - -pp.eat = function(type) { - if (this.type === type) { - this.next() - return true - } else { - return false - } -} - -// Tests whether parsed token is a contextual keyword. - -pp.isContextual = function(name) { - return this.type === tt.name && this.value === name -} - -// Consumes contextual keyword if possible. - -pp.eatContextual = function(name) { - return this.value === name && this.eat(tt.name) -} - -// Asserts that following token is given contextual keyword. - -pp.expectContextual = function(name) { - if (!this.eatContextual(name)) this.unexpected() -} - -// Test whether a semicolon can be inserted at the current position. - -pp.canInsertSemicolon = function() { - return this.type === tt.eof || - this.type === tt.braceR || - lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) -} - -pp.insertSemicolon = function() { - if (this.canInsertSemicolon()) { - if (this.options.onInsertedSemicolon) - this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc) - return true - } -} - -// Consume a semicolon, or, failing that, see if we are allowed to -// pretend that there is a semicolon at this position. - -pp.semicolon = function() { - if (!this.eat(tt.semi) && !this.insertSemicolon()) this.unexpected() -} - -pp.afterTrailingComma = function(tokType) { - if (this.type == tokType) { - if (this.options.onTrailingComma) - this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc) - this.next() - return true - } -} - -// Expect a token of a given type. If found, consume it, otherwise, -// raise an unexpected token error. - -pp.expect = function(type) { - this.eat(type) || this.unexpected() -} - -// Raise an unexpected token error. - -pp.unexpected = function(pos) { - this.raise(pos != null ? pos : this.start, "Unexpected token") -} - -var DestructuringErrors = function DestructuringErrors() { - this.shorthandAssign = 0 - this.trailingComma = 0 -}; - -pp.checkPatternErrors = function(refDestructuringErrors, andThrow) { - var trailing = refDestructuringErrors && refDestructuringErrors.trailingComma - if (!andThrow) return !!trailing - if (trailing) this.raise(trailing, "Comma is not permitted after the rest element") -} - -pp.checkExpressionErrors = function(refDestructuringErrors, andThrow) { - var pos = refDestructuringErrors && refDestructuringErrors.shorthandAssign - if (!andThrow) return !!pos - if (pos) this.raise(pos, "Shorthand property assignments are valid only in destructuring patterns") -} - -var pp$1 = Parser.prototype - -// ### Statement parsing - -// Parse a program. Initializes the parser, reads any number of -// statements, and wraps them in a Program node. Optionally takes a -// `program` argument. If present, the statements will be appended -// to its body instead of creating a new node. - -pp$1.parseTopLevel = function(node) { - var this$1 = this; - - var first = true - if (!node.body) node.body = [] - while (this.type !== tt.eof) { - var stmt = this$1.parseStatement(true, true) - node.body.push(stmt) - if (first) { - if (this$1.isUseStrict(stmt)) this$1.setStrict(true) - first = false - } - } - this.next() - if (this.options.ecmaVersion >= 6) { - node.sourceType = this.options.sourceType - } - return this.finishNode(node, "Program") -} - -var loopLabel = {kind: "loop"}; -var switchLabel = {kind: "switch"}; -pp$1.isLet = function() { - if (this.type !== tt.name || this.options.ecmaVersion < 6 || this.value != "let") return false - skipWhiteSpace.lastIndex = this.pos - var skip = skipWhiteSpace.exec(this.input) - var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next) - if (nextCh === 91 || nextCh == 123) return true // '{' and '[' - if (isIdentifierStart(nextCh, true)) { - for (var pos = next + 1; isIdentifierChar(this.input.charCodeAt(pos), true); ++pos) {} - var ident = this.input.slice(next, pos) - if (!this.isKeyword(ident)) return true - } - return false -} - -// Parse a single statement. -// -// If expecting a statement and finding a slash operator, parse a -// regular expression literal. This is to handle cases like -// `if (foo) /blah/.exec(foo)`, where looking at the previous token -// does not help. - -pp$1.parseStatement = function(declaration, topLevel) { - var starttype = this.type, node = this.startNode(), kind - - if (this.isLet()) { - starttype = tt._var - kind = "let" - } - - // Most types of statements are recognized by the keyword they - // start with. Many are trivial to parse, some require a bit of - // complexity. - - switch (starttype) { - case tt._break: case tt._continue: return this.parseBreakContinueStatement(node, starttype.keyword) - case tt._debugger: return this.parseDebuggerStatement(node) - case tt._do: return this.parseDoStatement(node) - case tt._for: return this.parseForStatement(node) - case tt._function: - if (!declaration && this.options.ecmaVersion >= 6) this.unexpected() - return this.parseFunctionStatement(node) - case tt._class: - if (!declaration) this.unexpected() - return this.parseClass(node, true) - case tt._if: return this.parseIfStatement(node) - case tt._return: return this.parseReturnStatement(node) - case tt._switch: return this.parseSwitchStatement(node) - case tt._throw: return this.parseThrowStatement(node) - case tt._try: return this.parseTryStatement(node) - case tt._const: case tt._var: - kind = kind || this.value - if (!declaration && kind != "var") this.unexpected() - return this.parseVarStatement(node, kind) - case tt._while: return this.parseWhileStatement(node) - case tt._with: return this.parseWithStatement(node) - case tt.braceL: return this.parseBlock() - case tt.semi: return this.parseEmptyStatement(node) - case tt._export: - case tt._import: - if (!this.options.allowImportExportEverywhere) { - if (!topLevel) - this.raise(this.start, "'import' and 'export' may only appear at the top level") - if (!this.inModule) - this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'") - } - return starttype === tt._import ? this.parseImport(node) : this.parseExport(node) - - // If the statement does not start with a statement keyword or a - // brace, it's an ExpressionStatement or LabeledStatement. We - // simply start parsing an expression, and afterwards, if the - // next token is a colon and the expression was a simple - // Identifier node, we switch to interpreting it as a label. - default: - var maybeName = this.value, expr = this.parseExpression() - if (starttype === tt.name && expr.type === "Identifier" && this.eat(tt.colon)) - return this.parseLabeledStatement(node, maybeName, expr) - else return this.parseExpressionStatement(node, expr) - } -} - -pp$1.parseBreakContinueStatement = function(node, keyword) { - var this$1 = this; - - var isBreak = keyword == "break" - this.next() - if (this.eat(tt.semi) || this.insertSemicolon()) node.label = null - else if (this.type !== tt.name) this.unexpected() - else { - node.label = this.parseIdent() - this.semicolon() - } - - // Verify that there is an actual destination to break or - // continue to. - for (var i = 0; i < this.labels.length; ++i) { - var lab = this$1.labels[i] - if (node.label == null || lab.name === node.label.name) { - if (lab.kind != null && (isBreak || lab.kind === "loop")) break - if (node.label && isBreak) break - } - } - if (i === this.labels.length) this.raise(node.start, "Unsyntactic " + keyword) - return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement") -} - -pp$1.parseDebuggerStatement = function(node) { - this.next() - this.semicolon() - return this.finishNode(node, "DebuggerStatement") -} - -pp$1.parseDoStatement = function(node) { - this.next() - this.labels.push(loopLabel) - node.body = this.parseStatement(false) - this.labels.pop() - this.expect(tt._while) - node.test = this.parseParenExpression() - if (this.options.ecmaVersion >= 6) - this.eat(tt.semi) - else - this.semicolon() - return this.finishNode(node, "DoWhileStatement") -} - -// Disambiguating between a `for` and a `for`/`in` or `for`/`of` -// loop is non-trivial. Basically, we have to parse the init `var` -// statement or expression, disallowing the `in` operator (see -// the second parameter to `parseExpression`), and then check -// whether the next token is `in` or `of`. When there is no init -// part (semicolon immediately after the opening parenthesis), it -// is a regular `for` loop. - -pp$1.parseForStatement = function(node) { - this.next() - this.labels.push(loopLabel) - this.expect(tt.parenL) - if (this.type === tt.semi) return this.parseFor(node, null) - var isLet = this.isLet() - if (this.type === tt._var || this.type === tt._const || isLet) { - var init$1 = this.startNode(), kind = isLet ? "let" : this.value - this.next() - this.parseVar(init$1, true, kind) - this.finishNode(init$1, "VariableDeclaration") - if ((this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init$1.declarations.length === 1 && - !(kind !== "var" && init$1.declarations[0].init)) - return this.parseForIn(node, init$1) - return this.parseFor(node, init$1) - } - var refDestructuringErrors = new DestructuringErrors - var init = this.parseExpression(true, refDestructuringErrors) - if (this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) { - this.checkPatternErrors(refDestructuringErrors, true) - this.toAssignable(init) - this.checkLVal(init) - return this.parseForIn(node, init) - } else { - this.checkExpressionErrors(refDestructuringErrors, true) - } - return this.parseFor(node, init) -} - -pp$1.parseFunctionStatement = function(node) { - this.next() - return this.parseFunction(node, true) -} - -pp$1.parseIfStatement = function(node) { - this.next() - node.test = this.parseParenExpression() - node.consequent = this.parseStatement(false) - node.alternate = this.eat(tt._else) ? this.parseStatement(false) : null - return this.finishNode(node, "IfStatement") -} - -pp$1.parseReturnStatement = function(node) { - if (!this.inFunction && !this.options.allowReturnOutsideFunction) - this.raise(this.start, "'return' outside of function") - this.next() - - // In `return` (and `break`/`continue`), the keywords with - // optional arguments, we eagerly look for a semicolon or the - // possibility to insert one. - - if (this.eat(tt.semi) || this.insertSemicolon()) node.argument = null - else { node.argument = this.parseExpression(); this.semicolon() } - return this.finishNode(node, "ReturnStatement") -} - -pp$1.parseSwitchStatement = function(node) { - var this$1 = this; - - this.next() - node.discriminant = this.parseParenExpression() - node.cases = [] - this.expect(tt.braceL) - this.labels.push(switchLabel) - - // Statements under must be grouped (by label) in SwitchCase - // nodes. `cur` is used to keep the node that we are currently - // adding statements to. - - for (var cur, sawDefault = false; this.type != tt.braceR;) { - if (this$1.type === tt._case || this$1.type === tt._default) { - var isCase = this$1.type === tt._case - if (cur) this$1.finishNode(cur, "SwitchCase") - node.cases.push(cur = this$1.startNode()) - cur.consequent = [] - this$1.next() - if (isCase) { - cur.test = this$1.parseExpression() - } else { - if (sawDefault) this$1.raiseRecoverable(this$1.lastTokStart, "Multiple default clauses") - sawDefault = true - cur.test = null - } - this$1.expect(tt.colon) - } else { - if (!cur) this$1.unexpected() - cur.consequent.push(this$1.parseStatement(true)) - } - } - if (cur) this.finishNode(cur, "SwitchCase") - this.next() // Closing brace - this.labels.pop() - return this.finishNode(node, "SwitchStatement") -} - -pp$1.parseThrowStatement = function(node) { - this.next() - if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) - this.raise(this.lastTokEnd, "Illegal newline after throw") - node.argument = this.parseExpression() - this.semicolon() - return this.finishNode(node, "ThrowStatement") -} - -// Reused empty array added for node fields that are always empty. - -var empty = [] - -pp$1.parseTryStatement = function(node) { - this.next() - node.block = this.parseBlock() - node.handler = null - if (this.type === tt._catch) { - var clause = this.startNode() - this.next() - this.expect(tt.parenL) - clause.param = this.parseBindingAtom() - this.checkLVal(clause.param, true) - this.expect(tt.parenR) - clause.body = this.parseBlock() - node.handler = this.finishNode(clause, "CatchClause") - } - node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null - if (!node.handler && !node.finalizer) - this.raise(node.start, "Missing catch or finally clause") - return this.finishNode(node, "TryStatement") -} - -pp$1.parseVarStatement = function(node, kind) { - this.next() - this.parseVar(node, false, kind) - this.semicolon() - return this.finishNode(node, "VariableDeclaration") -} - -pp$1.parseWhileStatement = function(node) { - this.next() - node.test = this.parseParenExpression() - this.labels.push(loopLabel) - node.body = this.parseStatement(false) - this.labels.pop() - return this.finishNode(node, "WhileStatement") -} - -pp$1.parseWithStatement = function(node) { - if (this.strict) this.raise(this.start, "'with' in strict mode") - this.next() - node.object = this.parseParenExpression() - node.body = this.parseStatement(false) - return this.finishNode(node, "WithStatement") -} - -pp$1.parseEmptyStatement = function(node) { - this.next() - return this.finishNode(node, "EmptyStatement") -} - -pp$1.parseLabeledStatement = function(node, maybeName, expr) { - var this$1 = this; - - for (var i = 0; i < this.labels.length; ++i) - if (this$1.labels[i].name === maybeName) this$1.raise(expr.start, "Label '" + maybeName + "' is already declared") - var kind = this.type.isLoop ? "loop" : this.type === tt._switch ? "switch" : null - for (var i$1 = this.labels.length - 1; i$1 >= 0; i$1--) { - var label = this$1.labels[i$1] - if (label.statementStart == node.start) { - label.statementStart = this$1.start - label.kind = kind - } else break - } - this.labels.push({name: maybeName, kind: kind, statementStart: this.start}) - node.body = this.parseStatement(true) - this.labels.pop() - node.label = expr - return this.finishNode(node, "LabeledStatement") -} - -pp$1.parseExpressionStatement = function(node, expr) { - node.expression = expr - this.semicolon() - return this.finishNode(node, "ExpressionStatement") -} - -// Parse a semicolon-enclosed block of statements, handling `"use -// strict"` declarations when `allowStrict` is true (used for -// function bodies). - -pp$1.parseBlock = function(allowStrict) { - var this$1 = this; - - var node = this.startNode(), first = true, oldStrict - node.body = [] - this.expect(tt.braceL) - while (!this.eat(tt.braceR)) { - var stmt = this$1.parseStatement(true) - node.body.push(stmt) - if (first && allowStrict && this$1.isUseStrict(stmt)) { - oldStrict = this$1.strict - this$1.setStrict(this$1.strict = true) - } - first = false - } - if (oldStrict === false) this.setStrict(false) - return this.finishNode(node, "BlockStatement") -} - -// Parse a regular `for` loop. The disambiguation code in -// `parseStatement` will already have parsed the init statement or -// expression. - -pp$1.parseFor = function(node, init) { - node.init = init - this.expect(tt.semi) - node.test = this.type === tt.semi ? null : this.parseExpression() - this.expect(tt.semi) - node.update = this.type === tt.parenR ? null : this.parseExpression() - this.expect(tt.parenR) - node.body = this.parseStatement(false) - this.labels.pop() - return this.finishNode(node, "ForStatement") -} - -// Parse a `for`/`in` and `for`/`of` loop, which are almost -// same from parser's perspective. - -pp$1.parseForIn = function(node, init) { - var type = this.type === tt._in ? "ForInStatement" : "ForOfStatement" - this.next() - node.left = init - node.right = this.parseExpression() - this.expect(tt.parenR) - node.body = this.parseStatement(false) - this.labels.pop() - return this.finishNode(node, type) -} - -// Parse a list of variable declarations. - -pp$1.parseVar = function(node, isFor, kind) { - var this$1 = this; - - node.declarations = [] - node.kind = kind - for (;;) { - var decl = this$1.startNode() - this$1.parseVarId(decl) - if (this$1.eat(tt.eq)) { - decl.init = this$1.parseMaybeAssign(isFor) - } else if (kind === "const" && !(this$1.type === tt._in || (this$1.options.ecmaVersion >= 6 && this$1.isContextual("of")))) { - this$1.unexpected() - } else if (decl.id.type != "Identifier" && !(isFor && (this$1.type === tt._in || this$1.isContextual("of")))) { - this$1.raise(this$1.lastTokEnd, "Complex binding patterns require an initialization value") - } else { - decl.init = null - } - node.declarations.push(this$1.finishNode(decl, "VariableDeclarator")) - if (!this$1.eat(tt.comma)) break - } - return node -} - -pp$1.parseVarId = function(decl) { - decl.id = this.parseBindingAtom() - this.checkLVal(decl.id, true) -} - -// Parse a function declaration or literal (depending on the -// `isStatement` parameter). - -pp$1.parseFunction = function(node, isStatement, allowExpressionBody) { - this.initFunction(node) - if (this.options.ecmaVersion >= 6) - node.generator = this.eat(tt.star) - var oldInGen = this.inGenerator - this.inGenerator = node.generator - if (isStatement || this.type === tt.name) - node.id = this.parseIdent() - this.parseFunctionParams(node) - this.parseFunctionBody(node, allowExpressionBody) - this.inGenerator = oldInGen - return this.finishNode(node, isStatement ? "FunctionDeclaration" : "FunctionExpression") -} - -pp$1.parseFunctionParams = function(node) { - this.expect(tt.parenL) - node.params = this.parseBindingList(tt.parenR, false, false, true) -} - -// Parse a class declaration or literal (depending on the -// `isStatement` parameter). - -pp$1.parseClass = function(node, isStatement) { - var this$1 = this; - - this.next() - this.parseClassId(node, isStatement) - this.parseClassSuper(node) - var classBody = this.startNode() - var hadConstructor = false - classBody.body = [] - this.expect(tt.braceL) - while (!this.eat(tt.braceR)) { - if (this$1.eat(tt.semi)) continue - var method = this$1.startNode() - var isGenerator = this$1.eat(tt.star) - var isMaybeStatic = this$1.type === tt.name && this$1.value === "static" - this$1.parsePropertyName(method) - method.static = isMaybeStatic && this$1.type !== tt.parenL - if (method.static) { - if (isGenerator) this$1.unexpected() - isGenerator = this$1.eat(tt.star) - this$1.parsePropertyName(method) - } - method.kind = "method" - var isGetSet = false - if (!method.computed) { - var key = method.key; - if (!isGenerator && key.type === "Identifier" && this$1.type !== tt.parenL && (key.name === "get" || key.name === "set")) { - isGetSet = true - method.kind = key.name - key = this$1.parsePropertyName(method) - } - if (!method.static && (key.type === "Identifier" && key.name === "constructor" || - key.type === "Literal" && key.value === "constructor")) { - if (hadConstructor) this$1.raise(key.start, "Duplicate constructor in the same class") - if (isGetSet) this$1.raise(key.start, "Constructor can't have get/set modifier") - if (isGenerator) this$1.raise(key.start, "Constructor can't be a generator") - method.kind = "constructor" - hadConstructor = true - } - } - this$1.parseClassMethod(classBody, method, isGenerator) - if (isGetSet) { - var paramCount = method.kind === "get" ? 0 : 1 - if (method.value.params.length !== paramCount) { - var start = method.value.start - if (method.kind === "get") - this$1.raiseRecoverable(start, "getter should have no params") - else - this$1.raiseRecoverable(start, "setter should have exactly one param") - } - if (method.kind === "set" && method.value.params[0].type === "RestElement") - this$1.raise(method.value.params[0].start, "Setter cannot use rest params") - } - } - node.body = this.finishNode(classBody, "ClassBody") - return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression") -} - -pp$1.parseClassMethod = function(classBody, method, isGenerator) { - method.value = this.parseMethod(isGenerator) - classBody.body.push(this.finishNode(method, "MethodDefinition")) -} - -pp$1.parseClassId = function(node, isStatement) { - node.id = this.type === tt.name ? this.parseIdent() : isStatement ? this.unexpected() : null -} - -pp$1.parseClassSuper = function(node) { - node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null -} - -// Parses module export declaration. - -pp$1.parseExport = function(node) { - var this$1 = this; - - this.next() - // export * from '...' - if (this.eat(tt.star)) { - this.expectContextual("from") - node.source = this.type === tt.string ? this.parseExprAtom() : this.unexpected() - this.semicolon() - return this.finishNode(node, "ExportAllDeclaration") - } - if (this.eat(tt._default)) { // export default ... - var parens = this.type == tt.parenL - var expr = this.parseMaybeAssign() - var needsSemi = true - if (!parens && (expr.type == "FunctionExpression" || - expr.type == "ClassExpression")) { - needsSemi = false - if (expr.id) { - expr.type = expr.type == "FunctionExpression" - ? "FunctionDeclaration" - : "ClassDeclaration" - } - } - node.declaration = expr - if (needsSemi) this.semicolon() - return this.finishNode(node, "ExportDefaultDeclaration") - } - // export var|const|let|function|class ... - if (this.shouldParseExportStatement()) { - node.declaration = this.parseStatement(true) - node.specifiers = [] - node.source = null - } else { // export { x, y as z } [from '...'] - node.declaration = null - node.specifiers = this.parseExportSpecifiers() - if (this.eatContextual("from")) { - node.source = this.type === tt.string ? this.parseExprAtom() : this.unexpected() - } else { - // check for keywords used as local names - for (var i = 0; i < node.specifiers.length; i++) { - if (this$1.keywords.test(node.specifiers[i].local.name) || this$1.reservedWords.test(node.specifiers[i].local.name)) { - this$1.unexpected(node.specifiers[i].local.start) - } - } - - node.source = null - } - this.semicolon() - } - return this.finishNode(node, "ExportNamedDeclaration") -} - -pp$1.shouldParseExportStatement = function() { - return this.type.keyword || this.isLet() -} - -// Parses a comma-separated list of module exports. - -pp$1.parseExportSpecifiers = function() { - var this$1 = this; - - var nodes = [], first = true - // export { x, y as z } [from '...'] - this.expect(tt.braceL) - while (!this.eat(tt.braceR)) { - if (!first) { - this$1.expect(tt.comma) - if (this$1.afterTrailingComma(tt.braceR)) break - } else first = false - - var node = this$1.startNode() - node.local = this$1.parseIdent(this$1.type === tt._default) - node.exported = this$1.eatContextual("as") ? this$1.parseIdent(true) : node.local - nodes.push(this$1.finishNode(node, "ExportSpecifier")) - } - return nodes -} - -// Parses import declaration. - -pp$1.parseImport = function(node) { - this.next() - // import '...' - if (this.type === tt.string) { - node.specifiers = empty - node.source = this.parseExprAtom() - } else { - node.specifiers = this.parseImportSpecifiers() - this.expectContextual("from") - node.source = this.type === tt.string ? this.parseExprAtom() : this.unexpected() - } - this.semicolon() - return this.finishNode(node, "ImportDeclaration") -} - -// Parses a comma-separated list of module imports. - -pp$1.parseImportSpecifiers = function() { - var this$1 = this; - - var nodes = [], first = true - if (this.type === tt.name) { - // import defaultObj, { x, y as z } from '...' - var node = this.startNode() - node.local = this.parseIdent() - this.checkLVal(node.local, true) - nodes.push(this.finishNode(node, "ImportDefaultSpecifier")) - if (!this.eat(tt.comma)) return nodes - } - if (this.type === tt.star) { - var node$1 = this.startNode() - this.next() - this.expectContextual("as") - node$1.local = this.parseIdent() - this.checkLVal(node$1.local, true) - nodes.push(this.finishNode(node$1, "ImportNamespaceSpecifier")) - return nodes - } - this.expect(tt.braceL) - while (!this.eat(tt.braceR)) { - if (!first) { - this$1.expect(tt.comma) - if (this$1.afterTrailingComma(tt.braceR)) break - } else first = false - - var node$2 = this$1.startNode() - node$2.imported = this$1.parseIdent(true) - if (this$1.eatContextual("as")) { - node$2.local = this$1.parseIdent() - } else { - node$2.local = node$2.imported - if (this$1.isKeyword(node$2.local.name)) this$1.unexpected(node$2.local.start) - if (this$1.reservedWordsStrict.test(node$2.local.name)) this$1.raise(node$2.local.start, "The keyword '" + node$2.local.name + "' is reserved") - } - this$1.checkLVal(node$2.local, true) - nodes.push(this$1.finishNode(node$2, "ImportSpecifier")) - } - return nodes -} - -var pp$2 = Parser.prototype - -// Convert existing expression atom to assignable pattern -// if possible. - -pp$2.toAssignable = function(node, isBinding) { - var this$1 = this; - - if (this.options.ecmaVersion >= 6 && node) { - switch (node.type) { - case "Identifier": - case "ObjectPattern": - case "ArrayPattern": - break - - case "ObjectExpression": - node.type = "ObjectPattern" - for (var i = 0; i < node.properties.length; i++) { - var prop = node.properties[i] - if (prop.kind !== "init") this$1.raise(prop.key.start, "Object pattern can't contain getter or setter") - this$1.toAssignable(prop.value, isBinding) - } - break - - case "ArrayExpression": - node.type = "ArrayPattern" - this.toAssignableList(node.elements, isBinding) - break - - case "AssignmentExpression": - if (node.operator === "=") { - node.type = "AssignmentPattern" - delete node.operator - // falls through to AssignmentPattern - } else { - this.raise(node.left.end, "Only '=' operator can be used for specifying default value.") - break - } - - case "AssignmentPattern": - if (node.right.type === "YieldExpression") - this.raise(node.right.start, "Yield expression cannot be a default value") - break - - case "ParenthesizedExpression": - node.expression = this.toAssignable(node.expression, isBinding) - break - - case "MemberExpression": - if (!isBinding) break - - default: - this.raise(node.start, "Assigning to rvalue") - } - } - return node -} - -// Convert list of expression atoms to binding list. - -pp$2.toAssignableList = function(exprList, isBinding) { - var this$1 = this; - - var end = exprList.length - if (end) { - var last = exprList[end - 1] - if (last && last.type == "RestElement") { - --end - } else if (last && last.type == "SpreadElement") { - last.type = "RestElement" - var arg = last.argument - this.toAssignable(arg, isBinding) - if (arg.type !== "Identifier" && arg.type !== "MemberExpression" && arg.type !== "ArrayPattern") - this.unexpected(arg.start) - --end - } - - if (isBinding && last && last.type === "RestElement" && last.argument.type !== "Identifier") - this.unexpected(last.argument.start) - } - for (var i = 0; i < end; i++) { - var elt = exprList[i] - if (elt) this$1.toAssignable(elt, isBinding) - } - return exprList -} - -// Parses spread element. - -pp$2.parseSpread = function(refDestructuringErrors) { - var node = this.startNode() - this.next() - node.argument = this.parseMaybeAssign(false, refDestructuringErrors) - return this.finishNode(node, "SpreadElement") -} - -pp$2.parseRest = function(allowNonIdent) { - var node = this.startNode() - this.next() - - // RestElement inside of a function parameter must be an identifier - if (allowNonIdent) node.argument = this.type === tt.name ? this.parseIdent() : this.unexpected() - else node.argument = this.type === tt.name || this.type === tt.bracketL ? this.parseBindingAtom() : this.unexpected() - - return this.finishNode(node, "RestElement") -} - -// Parses lvalue (assignable) atom. - -pp$2.parseBindingAtom = function() { - if (this.options.ecmaVersion < 6) return this.parseIdent() - switch (this.type) { - case tt.name: - return this.parseIdent() - - case tt.bracketL: - var node = this.startNode() - this.next() - node.elements = this.parseBindingList(tt.bracketR, true, true) - return this.finishNode(node, "ArrayPattern") - - case tt.braceL: - return this.parseObj(true) - - default: - this.unexpected() - } -} - -pp$2.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowNonIdent) { - var this$1 = this; - - var elts = [], first = true - while (!this.eat(close)) { - if (first) first = false - else this$1.expect(tt.comma) - if (allowEmpty && this$1.type === tt.comma) { - elts.push(null) - } else if (allowTrailingComma && this$1.afterTrailingComma(close)) { - break - } else if (this$1.type === tt.ellipsis) { - var rest = this$1.parseRest(allowNonIdent) - this$1.parseBindingListItem(rest) - elts.push(rest) - if (this$1.type === tt.comma) this$1.raise(this$1.start, "Comma is not permitted after the rest element") - this$1.expect(close) - break - } else { - var elem = this$1.parseMaybeDefault(this$1.start, this$1.startLoc) - this$1.parseBindingListItem(elem) - elts.push(elem) - } - } - return elts -} - -pp$2.parseBindingListItem = function(param) { - return param -} - -// Parses assignment pattern around given atom if possible. - -pp$2.parseMaybeDefault = function(startPos, startLoc, left) { - left = left || this.parseBindingAtom() - if (this.options.ecmaVersion < 6 || !this.eat(tt.eq)) return left - var node = this.startNodeAt(startPos, startLoc) - node.left = left - node.right = this.parseMaybeAssign() - return this.finishNode(node, "AssignmentPattern") -} - -// Verify that a node is an lval — something that can be assigned -// to. - -pp$2.checkLVal = function(expr, isBinding, checkClashes) { - var this$1 = this; - - switch (expr.type) { - case "Identifier": - if (this.strict && this.reservedWordsStrictBind.test(expr.name)) - this.raiseRecoverable(expr.start, (isBinding ? "Binding " : "Assigning to ") + expr.name + " in strict mode") - if (checkClashes) { - if (has(checkClashes, expr.name)) - this.raiseRecoverable(expr.start, "Argument name clash") - checkClashes[expr.name] = true - } - break - - case "MemberExpression": - if (isBinding) this.raiseRecoverable(expr.start, (isBinding ? "Binding" : "Assigning to") + " member expression") - break - - case "ObjectPattern": - for (var i = 0; i < expr.properties.length; i++) - this$1.checkLVal(expr.properties[i].value, isBinding, checkClashes) - break - - case "ArrayPattern": - for (var i$1 = 0; i$1 < expr.elements.length; i$1++) { - var elem = expr.elements[i$1] - if (elem) this$1.checkLVal(elem, isBinding, checkClashes) - } - break - - case "AssignmentPattern": - this.checkLVal(expr.left, isBinding, checkClashes) - break - - case "RestElement": - this.checkLVal(expr.argument, isBinding, checkClashes) - break - - case "ParenthesizedExpression": - this.checkLVal(expr.expression, isBinding, checkClashes) - break - - default: - this.raise(expr.start, (isBinding ? "Binding" : "Assigning to") + " rvalue") - } -} - -var pp$3 = Parser.prototype - -// Check if property name clashes with already added. -// Object/class getters and setters are not allowed to clash — -// either with each other or with an init property — and in -// strict mode, init properties are also not allowed to be repeated. - -pp$3.checkPropClash = function(prop, propHash) { - if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand)) - return - var key = prop.key; - var name - switch (key.type) { - case "Identifier": name = key.name; break - case "Literal": name = String(key.value); break - default: return - } - var kind = prop.kind; - if (this.options.ecmaVersion >= 6) { - if (name === "__proto__" && kind === "init") { - if (propHash.proto) this.raiseRecoverable(key.start, "Redefinition of __proto__ property") - propHash.proto = true - } - return - } - name = "$" + name - var other = propHash[name] - if (other) { - var isGetSet = kind !== "init" - if ((this.strict || isGetSet) && other[kind] || !(isGetSet ^ other.init)) - this.raiseRecoverable(key.start, "Redefinition of property") - } else { - other = propHash[name] = { - init: false, - get: false, - set: false - } - } - other[kind] = true -} - -// ### Expression parsing - -// These nest, from the most general expression type at the top to -// 'atomic', nondivisible expression types at the bottom. Most of -// the functions will simply let the function(s) below them parse, -// and, *if* the syntactic construct they handle is present, wrap -// the AST node that the inner parser gave them in another node. - -// Parse a full expression. The optional arguments are used to -// forbid the `in` operator (in for loops initalization expressions) -// and provide reference for storing '=' operator inside shorthand -// property assignment in contexts where both object expression -// and object pattern might appear (so it's possible to raise -// delayed syntax error at correct position). - -pp$3.parseExpression = function(noIn, refDestructuringErrors) { - var this$1 = this; - - var startPos = this.start, startLoc = this.startLoc - var expr = this.parseMaybeAssign(noIn, refDestructuringErrors) - if (this.type === tt.comma) { - var node = this.startNodeAt(startPos, startLoc) - node.expressions = [expr] - while (this.eat(tt.comma)) node.expressions.push(this$1.parseMaybeAssign(noIn, refDestructuringErrors)) - return this.finishNode(node, "SequenceExpression") - } - return expr -} - -// Parse an assignment expression. This includes applications of -// operators like `+=`. - -pp$3.parseMaybeAssign = function(noIn, refDestructuringErrors, afterLeftParse) { - if (this.inGenerator && this.isContextual("yield")) return this.parseYield() - - var ownDestructuringErrors = false - if (!refDestructuringErrors) { - refDestructuringErrors = new DestructuringErrors - ownDestructuringErrors = true - } - var startPos = this.start, startLoc = this.startLoc - if (this.type == tt.parenL || this.type == tt.name) - this.potentialArrowAt = this.start - var left = this.parseMaybeConditional(noIn, refDestructuringErrors) - if (afterLeftParse) left = afterLeftParse.call(this, left, startPos, startLoc) - if (this.type.isAssign) { - this.checkPatternErrors(refDestructuringErrors, true) - if (!ownDestructuringErrors) DestructuringErrors.call(refDestructuringErrors) - var node = this.startNodeAt(startPos, startLoc) - node.operator = this.value - node.left = this.type === tt.eq ? this.toAssignable(left) : left - refDestructuringErrors.shorthandAssign = 0 // reset because shorthand default was used correctly - this.checkLVal(left) - this.next() - node.right = this.parseMaybeAssign(noIn) - return this.finishNode(node, "AssignmentExpression") - } else { - if (ownDestructuringErrors) this.checkExpressionErrors(refDestructuringErrors, true) - } - return left -} - -// Parse a ternary conditional (`?:`) operator. - -pp$3.parseMaybeConditional = function(noIn, refDestructuringErrors) { - var startPos = this.start, startLoc = this.startLoc - var expr = this.parseExprOps(noIn, refDestructuringErrors) - if (this.checkExpressionErrors(refDestructuringErrors)) return expr - if (this.eat(tt.question)) { - var node = this.startNodeAt(startPos, startLoc) - node.test = expr - node.consequent = this.parseMaybeAssign() - this.expect(tt.colon) - node.alternate = this.parseMaybeAssign(noIn) - return this.finishNode(node, "ConditionalExpression") - } - return expr -} - -// Start the precedence parser. - -pp$3.parseExprOps = function(noIn, refDestructuringErrors) { - var startPos = this.start, startLoc = this.startLoc - var expr = this.parseMaybeUnary(refDestructuringErrors, false) - if (this.checkExpressionErrors(refDestructuringErrors)) return expr - return this.parseExprOp(expr, startPos, startLoc, -1, noIn) -} - -// Parse binary operators with the operator precedence parsing -// algorithm. `left` is the left-hand side of the operator. -// `minPrec` provides context that allows the function to stop and -// defer further parser to one of its callers when it encounters an -// operator that has a lower precedence than the set it is parsing. - -pp$3.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, noIn) { - var prec = this.type.binop - if (prec != null && (!noIn || this.type !== tt._in)) { - if (prec > minPrec) { - var logical = this.type === tt.logicalOR || this.type === tt.logicalAND - var op = this.value - this.next() - var startPos = this.start, startLoc = this.startLoc - var right = this.parseExprOp(this.parseMaybeUnary(null, false), startPos, startLoc, prec, noIn) - var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical) - return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn) - } - } - return left -} - -pp$3.buildBinary = function(startPos, startLoc, left, right, op, logical) { - var node = this.startNodeAt(startPos, startLoc) - node.left = left - node.operator = op - node.right = right - return this.finishNode(node, logical ? "LogicalExpression" : "BinaryExpression") -} - -// Parse unary operators, both prefix and postfix. - -pp$3.parseMaybeUnary = function(refDestructuringErrors, sawUnary) { - var this$1 = this; - - var startPos = this.start, startLoc = this.startLoc, expr - if (this.type.prefix) { - var node = this.startNode(), update = this.type === tt.incDec - node.operator = this.value - node.prefix = true - this.next() - node.argument = this.parseMaybeUnary(null, true) - this.checkExpressionErrors(refDestructuringErrors, true) - if (update) this.checkLVal(node.argument) - else if (this.strict && node.operator === "delete" && - node.argument.type === "Identifier") - this.raiseRecoverable(node.start, "Deleting local variable in strict mode") - else sawUnary = true - expr = this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression") - } else { - expr = this.parseExprSubscripts(refDestructuringErrors) - if (this.checkExpressionErrors(refDestructuringErrors)) return expr - while (this.type.postfix && !this.canInsertSemicolon()) { - var node$1 = this$1.startNodeAt(startPos, startLoc) - node$1.operator = this$1.value - node$1.prefix = false - node$1.argument = expr - this$1.checkLVal(expr) - this$1.next() - expr = this$1.finishNode(node$1, "UpdateExpression") - } - } - - if (!sawUnary && this.eat(tt.starstar)) - return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false), "**", false) - else - return expr -} - -// Parse call, dot, and `[]`-subscript expressions. - -pp$3.parseExprSubscripts = function(refDestructuringErrors) { - var startPos = this.start, startLoc = this.startLoc - var expr = this.parseExprAtom(refDestructuringErrors) - var skipArrowSubscripts = expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")" - if (this.checkExpressionErrors(refDestructuringErrors) || skipArrowSubscripts) return expr - return this.parseSubscripts(expr, startPos, startLoc) -} - -pp$3.parseSubscripts = function(base, startPos, startLoc, noCalls) { - var this$1 = this; - - for (;;) { - if (this$1.eat(tt.dot)) { - var node = this$1.startNodeAt(startPos, startLoc) - node.object = base - node.property = this$1.parseIdent(true) - node.computed = false - base = this$1.finishNode(node, "MemberExpression") - } else if (this$1.eat(tt.bracketL)) { - var node$1 = this$1.startNodeAt(startPos, startLoc) - node$1.object = base - node$1.property = this$1.parseExpression() - node$1.computed = true - this$1.expect(tt.bracketR) - base = this$1.finishNode(node$1, "MemberExpression") - } else if (!noCalls && this$1.eat(tt.parenL)) { - var node$2 = this$1.startNodeAt(startPos, startLoc) - node$2.callee = base - node$2.arguments = this$1.parseExprList(tt.parenR, false) - base = this$1.finishNode(node$2, "CallExpression") - } else if (this$1.type === tt.backQuote) { - var node$3 = this$1.startNodeAt(startPos, startLoc) - node$3.tag = base - node$3.quasi = this$1.parseTemplate() - base = this$1.finishNode(node$3, "TaggedTemplateExpression") - } else { - return base - } - } -} - -// Parse an atomic expression — either a single token that is an -// expression, an expression started by a keyword like `function` or -// `new`, or an expression wrapped in punctuation like `()`, `[]`, -// or `{}`. - -pp$3.parseExprAtom = function(refDestructuringErrors) { - var node, canBeArrow = this.potentialArrowAt == this.start - switch (this.type) { - case tt._super: - if (!this.inFunction) - this.raise(this.start, "'super' outside of function or class") - - case tt._this: - var type = this.type === tt._this ? "ThisExpression" : "Super" - node = this.startNode() - this.next() - return this.finishNode(node, type) - - case tt.name: - var startPos = this.start, startLoc = this.startLoc - var id = this.parseIdent(this.type !== tt.name) - if (canBeArrow && !this.canInsertSemicolon() && this.eat(tt.arrow)) - return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id]) - return id - - case tt.regexp: - var value = this.value - node = this.parseLiteral(value.value) - node.regex = {pattern: value.pattern, flags: value.flags} - return node - - case tt.num: case tt.string: - return this.parseLiteral(this.value) - - case tt._null: case tt._true: case tt._false: - node = this.startNode() - node.value = this.type === tt._null ? null : this.type === tt._true - node.raw = this.type.keyword - this.next() - return this.finishNode(node, "Literal") - - case tt.parenL: - return this.parseParenAndDistinguishExpression(canBeArrow) - - case tt.bracketL: - node = this.startNode() - this.next() - node.elements = this.parseExprList(tt.bracketR, true, true, refDestructuringErrors) - return this.finishNode(node, "ArrayExpression") - - case tt.braceL: - return this.parseObj(false, refDestructuringErrors) - - case tt._function: - node = this.startNode() - this.next() - return this.parseFunction(node, false) - - case tt._class: - return this.parseClass(this.startNode(), false) - - case tt._new: - return this.parseNew() - - case tt.backQuote: - return this.parseTemplate() - - default: - this.unexpected() - } -} - -pp$3.parseLiteral = function(value) { - var node = this.startNode() - node.value = value - node.raw = this.input.slice(this.start, this.end) - this.next() - return this.finishNode(node, "Literal") -} - -pp$3.parseParenExpression = function() { - this.expect(tt.parenL) - var val = this.parseExpression() - this.expect(tt.parenR) - return val -} - -pp$3.parseParenAndDistinguishExpression = function(canBeArrow) { - var this$1 = this; - - var startPos = this.start, startLoc = this.startLoc, val - if (this.options.ecmaVersion >= 6) { - this.next() - - var innerStartPos = this.start, innerStartLoc = this.startLoc - var exprList = [], first = true - var refDestructuringErrors = new DestructuringErrors, spreadStart, innerParenStart - while (this.type !== tt.parenR) { - first ? first = false : this$1.expect(tt.comma) - if (this$1.type === tt.ellipsis) { - spreadStart = this$1.start - exprList.push(this$1.parseParenItem(this$1.parseRest())) - break - } else { - if (this$1.type === tt.parenL && !innerParenStart) { - innerParenStart = this$1.start - } - exprList.push(this$1.parseMaybeAssign(false, refDestructuringErrors, this$1.parseParenItem)) - } - } - var innerEndPos = this.start, innerEndLoc = this.startLoc - this.expect(tt.parenR) - - if (canBeArrow && !this.canInsertSemicolon() && this.eat(tt.arrow)) { - this.checkPatternErrors(refDestructuringErrors, true) - if (innerParenStart) this.unexpected(innerParenStart) - return this.parseParenArrowList(startPos, startLoc, exprList) - } - - if (!exprList.length) this.unexpected(this.lastTokStart) - if (spreadStart) this.unexpected(spreadStart) - this.checkExpressionErrors(refDestructuringErrors, true) - - if (exprList.length > 1) { - val = this.startNodeAt(innerStartPos, innerStartLoc) - val.expressions = exprList - this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc) - } else { - val = exprList[0] - } - } else { - val = this.parseParenExpression() - } - - if (this.options.preserveParens) { - var par = this.startNodeAt(startPos, startLoc) - par.expression = val - return this.finishNode(par, "ParenthesizedExpression") - } else { - return val - } -} - -pp$3.parseParenItem = function(item) { - return item -} - -pp$3.parseParenArrowList = function(startPos, startLoc, exprList) { - return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList) -} - -// New's precedence is slightly tricky. It must allow its argument to -// be a `[]` or dot subscript expression, but not a call — at least, -// not without wrapping it in parentheses. Thus, it uses the noCalls -// argument to parseSubscripts to prevent it from consuming the -// argument list. - -var empty$1 = [] - -pp$3.parseNew = function() { - var node = this.startNode() - var meta = this.parseIdent(true) - if (this.options.ecmaVersion >= 6 && this.eat(tt.dot)) { - node.meta = meta - node.property = this.parseIdent(true) - if (node.property.name !== "target") - this.raiseRecoverable(node.property.start, "The only valid meta property for new is new.target") - if (!this.inFunction) - this.raiseRecoverable(node.start, "new.target can only be used in functions") - return this.finishNode(node, "MetaProperty") - } - var startPos = this.start, startLoc = this.startLoc - node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true) - if (this.eat(tt.parenL)) node.arguments = this.parseExprList(tt.parenR, false) - else node.arguments = empty$1 - return this.finishNode(node, "NewExpression") -} - -// Parse template expression. - -pp$3.parseTemplateElement = function() { - var elem = this.startNode() - elem.value = { - raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, '\n'), - cooked: this.value - } - this.next() - elem.tail = this.type === tt.backQuote - return this.finishNode(elem, "TemplateElement") -} - -pp$3.parseTemplate = function() { - var this$1 = this; - - var node = this.startNode() - this.next() - node.expressions = [] - var curElt = this.parseTemplateElement() - node.quasis = [curElt] - while (!curElt.tail) { - this$1.expect(tt.dollarBraceL) - node.expressions.push(this$1.parseExpression()) - this$1.expect(tt.braceR) - node.quasis.push(curElt = this$1.parseTemplateElement()) - } - this.next() - return this.finishNode(node, "TemplateLiteral") -} - -// Parse an object literal or binding pattern. - -pp$3.parseObj = function(isPattern, refDestructuringErrors) { - var this$1 = this; - - var node = this.startNode(), first = true, propHash = {} - node.properties = [] - this.next() - while (!this.eat(tt.braceR)) { - if (!first) { - this$1.expect(tt.comma) - if (this$1.afterTrailingComma(tt.braceR)) break - } else first = false - - var prop = this$1.startNode(), isGenerator, startPos, startLoc - if (this$1.options.ecmaVersion >= 6) { - prop.method = false - prop.shorthand = false - if (isPattern || refDestructuringErrors) { - startPos = this$1.start - startLoc = this$1.startLoc - } - if (!isPattern) - isGenerator = this$1.eat(tt.star) - } - this$1.parsePropertyName(prop) - this$1.parsePropertyValue(prop, isPattern, isGenerator, startPos, startLoc, refDestructuringErrors) - this$1.checkPropClash(prop, propHash) - node.properties.push(this$1.finishNode(prop, "Property")) - } - return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression") -} - -pp$3.parsePropertyValue = function(prop, isPattern, isGenerator, startPos, startLoc, refDestructuringErrors) { - if (this.eat(tt.colon)) { - prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors) - prop.kind = "init" - } else if (this.options.ecmaVersion >= 6 && this.type === tt.parenL) { - if (isPattern) this.unexpected() - prop.kind = "init" - prop.method = true - prop.value = this.parseMethod(isGenerator) - } else if (this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" && - (prop.key.name === "get" || prop.key.name === "set") && - (this.type != tt.comma && this.type != tt.braceR)) { - if (isGenerator || isPattern) this.unexpected() - prop.kind = prop.key.name - this.parsePropertyName(prop) - prop.value = this.parseMethod(false) - var paramCount = prop.kind === "get" ? 0 : 1 - if (prop.value.params.length !== paramCount) { - var start = prop.value.start - if (prop.kind === "get") - this.raiseRecoverable(start, "getter should have no params") - else - this.raiseRecoverable(start, "setter should have exactly one param") - } - if (prop.kind === "set" && prop.value.params[0].type === "RestElement") - this.raiseRecoverable(prop.value.params[0].start, "Setter cannot use rest params") - } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") { - if (this.keywords.test(prop.key.name) || - (this.strict ? this.reservedWordsStrictBind : this.reservedWords).test(prop.key.name) || - (this.inGenerator && prop.key.name == "yield")) - this.raiseRecoverable(prop.key.start, "'" + prop.key.name + "' can not be used as shorthand property") - prop.kind = "init" - if (isPattern) { - prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key) - } else if (this.type === tt.eq && refDestructuringErrors) { - if (!refDestructuringErrors.shorthandAssign) - refDestructuringErrors.shorthandAssign = this.start - prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key) - } else { - prop.value = prop.key - } - prop.shorthand = true - } else this.unexpected() -} - -pp$3.parsePropertyName = function(prop) { - if (this.options.ecmaVersion >= 6) { - if (this.eat(tt.bracketL)) { - prop.computed = true - prop.key = this.parseMaybeAssign() - this.expect(tt.bracketR) - return prop.key - } else { - prop.computed = false - } - } - return prop.key = this.type === tt.num || this.type === tt.string ? this.parseExprAtom() : this.parseIdent(true) -} - -// Initialize empty function node. - -pp$3.initFunction = function(node) { - node.id = null - if (this.options.ecmaVersion >= 6) { - node.generator = false - node.expression = false - } -} - -// Parse object or class method. - -pp$3.parseMethod = function(isGenerator) { - var node = this.startNode(), oldInGen = this.inGenerator - this.inGenerator = isGenerator - this.initFunction(node) - this.expect(tt.parenL) - node.params = this.parseBindingList(tt.parenR, false, false) - if (this.options.ecmaVersion >= 6) - node.generator = isGenerator - this.parseFunctionBody(node, false) - this.inGenerator = oldInGen - return this.finishNode(node, "FunctionExpression") -} - -// Parse arrow function expression with given parameters. - -pp$3.parseArrowExpression = function(node, params) { - var oldInGen = this.inGenerator - this.inGenerator = false - this.initFunction(node) - node.params = this.toAssignableList(params, true) - this.parseFunctionBody(node, true) - this.inGenerator = oldInGen - return this.finishNode(node, "ArrowFunctionExpression") -} - -// Parse function body and check parameters. - -pp$3.parseFunctionBody = function(node, isArrowFunction) { - var isExpression = isArrowFunction && this.type !== tt.braceL - - if (isExpression) { - node.body = this.parseMaybeAssign() - node.expression = true - } else { - // Start a new scope with regard to labels and the `inFunction` - // flag (restore them to their old value afterwards). - var oldInFunc = this.inFunction, oldLabels = this.labels - this.inFunction = true; this.labels = [] - node.body = this.parseBlock(true) - node.expression = false - this.inFunction = oldInFunc; this.labels = oldLabels - } - - // If this is a strict mode function, verify that argument names - // are not repeated, and it does not try to bind the words `eval` - // or `arguments`. - var useStrict = (!isExpression && node.body.body.length && this.isUseStrict(node.body.body[0])) ? node.body.body[0] : null; - if (this.strict || useStrict) { - var oldStrict = this.strict - this.strict = true - if (node.id) - this.checkLVal(node.id, true) - this.checkParams(node, useStrict) - this.strict = oldStrict - } else if (isArrowFunction) { - this.checkParams(node, useStrict) - } -} - -// Checks function params for various disallowed patterns such as using "eval" -// or "arguments" and duplicate parameters. - -pp$3.checkParams = function(node, useStrict) { - var this$1 = this; - - var nameHash = {} - for (var i = 0; i < node.params.length; i++) { - if (useStrict && this$1.options.ecmaVersion >= 7 && node.params[i].type !== "Identifier") - this$1.raiseRecoverable(useStrict.start, "Illegal 'use strict' directive in function with non-simple parameter list"); - this$1.checkLVal(node.params[i], true, nameHash) - } -} - -// Parses a comma-separated list of expressions, and returns them as -// an array. `close` is the token type that ends the list, and -// `allowEmpty` can be turned on to allow subsequent commas with -// nothing in between them to be parsed as `null` (which is needed -// for array literals). - -pp$3.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) { - var this$1 = this; - - var elts = [], first = true - while (!this.eat(close)) { - if (!first) { - this$1.expect(tt.comma) - if (allowTrailingComma && this$1.afterTrailingComma(close)) break - } else first = false - - var elt - if (allowEmpty && this$1.type === tt.comma) - elt = null - else if (this$1.type === tt.ellipsis) { - elt = this$1.parseSpread(refDestructuringErrors) - if (this$1.type === tt.comma && refDestructuringErrors && !refDestructuringErrors.trailingComma) { - refDestructuringErrors.trailingComma = this$1.lastTokStart - } - } else - elt = this$1.parseMaybeAssign(false, refDestructuringErrors) - elts.push(elt) - } - return elts -} - -// Parse the next token as an identifier. If `liberal` is true (used -// when parsing properties), it will also convert keywords into -// identifiers. - -pp$3.parseIdent = function(liberal) { - var node = this.startNode() - if (liberal && this.options.allowReserved == "never") liberal = false - if (this.type === tt.name) { - if (!liberal && (this.strict ? this.reservedWordsStrict : this.reservedWords).test(this.value) && - (this.options.ecmaVersion >= 6 || - this.input.slice(this.start, this.end).indexOf("\\") == -1)) - this.raiseRecoverable(this.start, "The keyword '" + this.value + "' is reserved") - if (!liberal && this.inGenerator && this.value === "yield") - this.raiseRecoverable(this.start, "Can not use 'yield' as identifier inside a generator") - node.name = this.value - } else if (liberal && this.type.keyword) { - node.name = this.type.keyword - } else { - this.unexpected() - } - this.next() - return this.finishNode(node, "Identifier") -} - -// Parses yield expression inside generator. - -pp$3.parseYield = function() { - var node = this.startNode() - this.next() - if (this.type == tt.semi || this.canInsertSemicolon() || (this.type != tt.star && !this.type.startsExpr)) { - node.delegate = false - node.argument = null - } else { - node.delegate = this.eat(tt.star) - node.argument = this.parseMaybeAssign() - } - return this.finishNode(node, "YieldExpression") -} - -var pp$4 = Parser.prototype - -// This function is used to raise exceptions on parse errors. It -// takes an offset integer (into the current `input`) to indicate -// the location of the error, attaches the position to the end -// of the error message, and then raises a `SyntaxError` with that -// message. - -pp$4.raise = function(pos, message) { - var loc = getLineInfo(this.input, pos) - message += " (" + loc.line + ":" + loc.column + ")" - var err = new SyntaxError(message) - err.pos = pos; err.loc = loc; err.raisedAt = this.pos - throw err -} - -pp$4.raiseRecoverable = pp$4.raise - -pp$4.curPosition = function() { - if (this.options.locations) { - return new Position(this.curLine, this.pos - this.lineStart) - } -} - -var Node = function Node(parser, pos, loc) { - this.type = "" - this.start = pos - this.end = 0 - if (parser.options.locations) - this.loc = new SourceLocation(parser, loc) - if (parser.options.directSourceFile) - this.sourceFile = parser.options.directSourceFile - if (parser.options.ranges) - this.range = [pos, 0] -}; - -// Start an AST node, attaching a start offset. - -var pp$5 = Parser.prototype - -pp$5.startNode = function() { - return new Node(this, this.start, this.startLoc) -} - -pp$5.startNodeAt = function(pos, loc) { - return new Node(this, pos, loc) -} - -// Finish an AST node, adding `type` and `end` properties. - -function finishNodeAt(node, type, pos, loc) { - node.type = type - node.end = pos - if (this.options.locations) - node.loc.end = loc - if (this.options.ranges) - node.range[1] = pos - return node -} - -pp$5.finishNode = function(node, type) { - return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc) -} - -// Finish node at given position - -pp$5.finishNodeAt = function(node, type, pos, loc) { - return finishNodeAt.call(this, node, type, pos, loc) -} - -var TokContext = function TokContext(token, isExpr, preserveSpace, override) { - this.token = token - this.isExpr = !!isExpr - this.preserveSpace = !!preserveSpace - this.override = override -}; - -var types = { - b_stat: new TokContext("{", false), - b_expr: new TokContext("{", true), - b_tmpl: new TokContext("${", true), - p_stat: new TokContext("(", false), - p_expr: new TokContext("(", true), - q_tmpl: new TokContext("`", true, true, function (p) { return p.readTmplToken(); }), - f_expr: new TokContext("function", true) -} - -var pp$6 = Parser.prototype - -pp$6.initialContext = function() { - return [types.b_stat] -} - -pp$6.braceIsBlock = function(prevType) { - if (prevType === tt.colon) { - var parent = this.curContext() - if (parent === types.b_stat || parent === types.b_expr) - return !parent.isExpr - } - if (prevType === tt._return) - return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) - if (prevType === tt._else || prevType === tt.semi || prevType === tt.eof || prevType === tt.parenR) - return true - if (prevType == tt.braceL) - return this.curContext() === types.b_stat - return !this.exprAllowed -} - -pp$6.updateContext = function(prevType) { - var update, type = this.type - if (type.keyword && prevType == tt.dot) - this.exprAllowed = false - else if (update = type.updateContext) - update.call(this, prevType) - else - this.exprAllowed = type.beforeExpr -} - -// Token-specific context update code - -tt.parenR.updateContext = tt.braceR.updateContext = function() { - if (this.context.length == 1) { - this.exprAllowed = true - return - } - var out = this.context.pop() - if (out === types.b_stat && this.curContext() === types.f_expr) { - this.context.pop() - this.exprAllowed = false - } else if (out === types.b_tmpl) { - this.exprAllowed = true - } else { - this.exprAllowed = !out.isExpr - } -} - -tt.braceL.updateContext = function(prevType) { - this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr) - this.exprAllowed = true -} - -tt.dollarBraceL.updateContext = function() { - this.context.push(types.b_tmpl) - this.exprAllowed = true -} - -tt.parenL.updateContext = function(prevType) { - var statementParens = prevType === tt._if || prevType === tt._for || prevType === tt._with || prevType === tt._while - this.context.push(statementParens ? types.p_stat : types.p_expr) - this.exprAllowed = true -} - -tt.incDec.updateContext = function() { - // tokExprAllowed stays unchanged -} - -tt._function.updateContext = function(prevType) { - if (prevType.beforeExpr && prevType !== tt.semi && prevType !== tt._else && - !((prevType === tt.colon || prevType === tt.braceL) && this.curContext() === types.b_stat)) - this.context.push(types.f_expr) - this.exprAllowed = false -} - -tt.backQuote.updateContext = function() { - if (this.curContext() === types.q_tmpl) - this.context.pop() - else - this.context.push(types.q_tmpl) - this.exprAllowed = false -} - -// Object type used to represent tokens. Note that normally, tokens -// simply exist as properties on the parser object. This is only -// used for the onToken callback and the external tokenizer. - -var Token = function Token(p) { - this.type = p.type - this.value = p.value - this.start = p.start - this.end = p.end - if (p.options.locations) - this.loc = new SourceLocation(p, p.startLoc, p.endLoc) - if (p.options.ranges) - this.range = [p.start, p.end] -}; - -// ## Tokenizer - -var pp$7 = Parser.prototype - -// Are we running under Rhino? -var isRhino = typeof Packages == "object" && Object.prototype.toString.call(Packages) == "[object JavaPackage]" - -// Move to the next token - -pp$7.next = function() { - if (this.options.onToken) - this.options.onToken(new Token(this)) - - this.lastTokEnd = this.end - this.lastTokStart = this.start - this.lastTokEndLoc = this.endLoc - this.lastTokStartLoc = this.startLoc - this.nextToken() -} - -pp$7.getToken = function() { - this.next() - return new Token(this) -} - -// If we're in an ES6 environment, make parsers iterable -if (typeof Symbol !== "undefined") - pp$7[Symbol.iterator] = function () { - var self = this - return {next: function () { - var token = self.getToken() - return { - done: token.type === tt.eof, - value: token - } - }} - } - -// Toggle strict mode. Re-reads the next number or string to please -// pedantic tests (`"use strict"; 010;` should fail). - -pp$7.setStrict = function(strict) { - var this$1 = this; - - this.strict = strict - if (this.type !== tt.num && this.type !== tt.string) return - this.pos = this.start - if (this.options.locations) { - while (this.pos < this.lineStart) { - this$1.lineStart = this$1.input.lastIndexOf("\n", this$1.lineStart - 2) + 1 - --this$1.curLine - } - } - this.nextToken() -} - -pp$7.curContext = function() { - return this.context[this.context.length - 1] -} - -// Read a single token, updating the parser object's token-related -// properties. - -pp$7.nextToken = function() { - var curContext = this.curContext() - if (!curContext || !curContext.preserveSpace) this.skipSpace() - - this.start = this.pos - if (this.options.locations) this.startLoc = this.curPosition() - if (this.pos >= this.input.length) return this.finishToken(tt.eof) - - if (curContext.override) return curContext.override(this) - else this.readToken(this.fullCharCodeAtPos()) -} - -pp$7.readToken = function(code) { - // Identifier or keyword. '\uXXXX' sequences are allowed in - // identifiers, so '\' also dispatches to that. - if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\' */) - return this.readWord() - - return this.getTokenFromCode(code) -} - -pp$7.fullCharCodeAtPos = function() { - var code = this.input.charCodeAt(this.pos) - if (code <= 0xd7ff || code >= 0xe000) return code - var next = this.input.charCodeAt(this.pos + 1) - return (code << 10) + next - 0x35fdc00 -} - -pp$7.skipBlockComment = function() { - var this$1 = this; - - var startLoc = this.options.onComment && this.curPosition() - var start = this.pos, end = this.input.indexOf("*/", this.pos += 2) - if (end === -1) this.raise(this.pos - 2, "Unterminated comment") - this.pos = end + 2 - if (this.options.locations) { - lineBreakG.lastIndex = start - var match - while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) { - ++this$1.curLine - this$1.lineStart = match.index + match[0].length - } - } - if (this.options.onComment) - this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos, - startLoc, this.curPosition()) -} - -pp$7.skipLineComment = function(startSkip) { - var this$1 = this; - - var start = this.pos - var startLoc = this.options.onComment && this.curPosition() - var ch = this.input.charCodeAt(this.pos+=startSkip) - while (this.pos < this.input.length && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) { - ++this$1.pos - ch = this$1.input.charCodeAt(this$1.pos) - } - if (this.options.onComment) - this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos, - startLoc, this.curPosition()) -} - -// Called at the start of the parse and after every token. Skips -// whitespace and comments, and. - -pp$7.skipSpace = function() { - var this$1 = this; - - loop: while (this.pos < this.input.length) { - var ch = this$1.input.charCodeAt(this$1.pos) - switch (ch) { - case 32: case 160: // ' ' - ++this$1.pos - break - case 13: - if (this$1.input.charCodeAt(this$1.pos + 1) === 10) { - ++this$1.pos - } - case 10: case 8232: case 8233: - ++this$1.pos - if (this$1.options.locations) { - ++this$1.curLine - this$1.lineStart = this$1.pos - } - break - case 47: // '/' - switch (this$1.input.charCodeAt(this$1.pos + 1)) { - case 42: // '*' - this$1.skipBlockComment() - break - case 47: - this$1.skipLineComment(2) - break - default: - break loop - } - break - default: - if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) { - ++this$1.pos - } else { - break loop - } - } - } -} - -// Called at the end of every token. Sets `end`, `val`, and -// maintains `context` and `exprAllowed`, and skips the space after -// the token, so that the next one's `start` will point at the -// right position. - -pp$7.finishToken = function(type, val) { - this.end = this.pos - if (this.options.locations) this.endLoc = this.curPosition() - var prevType = this.type - this.type = type - this.value = val - - this.updateContext(prevType) -} - -// ### Token reading - -// This is the function that is called to fetch the next token. It -// is somewhat obscure, because it works in character codes rather -// than characters, and because operator parsing has been inlined -// into it. -// -// All in the name of speed. -// -pp$7.readToken_dot = function() { - var next = this.input.charCodeAt(this.pos + 1) - if (next >= 48 && next <= 57) return this.readNumber(true) - var next2 = this.input.charCodeAt(this.pos + 2) - if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.' - this.pos += 3 - return this.finishToken(tt.ellipsis) - } else { - ++this.pos - return this.finishToken(tt.dot) - } -} - -pp$7.readToken_slash = function() { // '/' - var next = this.input.charCodeAt(this.pos + 1) - if (this.exprAllowed) {++this.pos; return this.readRegexp()} - if (next === 61) return this.finishOp(tt.assign, 2) - return this.finishOp(tt.slash, 1) -} - -pp$7.readToken_mult_modulo_exp = function(code) { // '%*' - var next = this.input.charCodeAt(this.pos + 1) - var size = 1 - var tokentype = code === 42 ? tt.star : tt.modulo - - // exponentiation operator ** and **= - if (this.options.ecmaVersion >= 7 && next === 42) { - ++size - tokentype = tt.starstar - next = this.input.charCodeAt(this.pos + 2) - } - - if (next === 61) return this.finishOp(tt.assign, size + 1) - return this.finishOp(tokentype, size) -} - -pp$7.readToken_pipe_amp = function(code) { // '|&' - var next = this.input.charCodeAt(this.pos + 1) - if (next === code) return this.finishOp(code === 124 ? tt.logicalOR : tt.logicalAND, 2) - if (next === 61) return this.finishOp(tt.assign, 2) - return this.finishOp(code === 124 ? tt.bitwiseOR : tt.bitwiseAND, 1) -} - -pp$7.readToken_caret = function() { // '^' - var next = this.input.charCodeAt(this.pos + 1) - if (next === 61) return this.finishOp(tt.assign, 2) - return this.finishOp(tt.bitwiseXOR, 1) -} - -pp$7.readToken_plus_min = function(code) { // '+-' - var next = this.input.charCodeAt(this.pos + 1) - if (next === code) { - if (next == 45 && this.input.charCodeAt(this.pos + 2) == 62 && - lineBreak.test(this.input.slice(this.lastTokEnd, this.pos))) { - // A `-->` line comment - this.skipLineComment(3) - this.skipSpace() - return this.nextToken() - } - return this.finishOp(tt.incDec, 2) - } - if (next === 61) return this.finishOp(tt.assign, 2) - return this.finishOp(tt.plusMin, 1) -} - -pp$7.readToken_lt_gt = function(code) { // '<>' - var next = this.input.charCodeAt(this.pos + 1) - var size = 1 - if (next === code) { - size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2 - if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(tt.assign, size + 1) - return this.finishOp(tt.bitShift, size) - } - if (next == 33 && code == 60 && this.input.charCodeAt(this.pos + 2) == 45 && - this.input.charCodeAt(this.pos + 3) == 45) { - if (this.inModule) this.unexpected() - // `` line comment - this.skipLineComment(3) - this.skipSpace() - return this.nextToken() - } - return this.finishOp(tt.incDec, 2) - } - if (next === 61) return this.finishOp(tt.assign, 2) - return this.finishOp(tt.plusMin, 1) - } - - pp$7.readToken_lt_gt = function(code) { // '<>' - var next = this.input.charCodeAt(this.pos + 1) - var size = 1 - if (next === code) { - size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2 - if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(tt.assign, size + 1) - return this.finishOp(tt.bitShift, size) - } - if (next == 33 && code == 60 && this.input.charCodeAt(this.pos + 2) == 45 && - this.input.charCodeAt(this.pos + 3) == 45) { - if (this.inModule) this.unexpected() - // `` line comment - this.skipLineComment(3) - this.skipSpace() - return this.nextToken() - } - return this.finishOp(tt.incDec, 2) - } - if (next === 61) return this.finishOp(tt.assign, 2) - return this.finishOp(tt.plusMin, 1) -} - -pp.readToken_lt_gt = function(code) { // '<>' - let next = this.input.charCodeAt(this.pos + 1) - let size = 1 - if (next === code) { - size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2 - if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(tt.assign, size + 1) - return this.finishOp(tt.bitShift, size) - } - if (next == 33 && code == 60 && this.input.charCodeAt(this.pos + 2) == 45 && - this.input.charCodeAt(this.pos + 3) == 45) { - if (this.inModule) this.unexpected() - // `` line comment - this.skipLineComment(3); - this.skipSpace(); - return this.nextToken() - } - return this.finishOp(types.incDec, 2) - } - if (next === 61) { return this.finishOp(types.assign, 2) } - return this.finishOp(types.plusMin, 1) - }; - - pp$9.readToken_lt_gt = function(code) { // '<>' - var next = this.input.charCodeAt(this.pos + 1); - var size = 1; - if (next === code) { - size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2; - if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types.assign, size + 1) } - return this.finishOp(types.bitShift, size) - } - if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && - this.input.charCodeAt(this.pos + 3) === 45) { - // `` line comment\n this.skipLineComment(3)\n this.skipSpace()\n return this.nextToken()\n }\n return this.finishOp(tt.incDec, 2)\n }\n if (next === 61) return this.finishOp(tt.assign, 2)\n return this.finishOp(tt.plusMin, 1)\n}\n\npp.readToken_lt_gt = function(code) { // '<>'\n let next = this.input.charCodeAt(this.pos + 1)\n let size = 1\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2\n if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(tt.assign, size + 1)\n return this.finishOp(tt.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `` line comment - this.skipLineComment(3); - this.skipSpace(); - return this.nextToken() - } - return this.finishOp(types.incDec, 2) - } - if (next === 61) { return this.finishOp(types.assign, 2) } - return this.finishOp(types.plusMin, 1) -}; - -pp$9.readToken_lt_gt = function(code) { // '<>' - var next = this.input.charCodeAt(this.pos + 1); - var size = 1; - if (next === code) { - size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2; - if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types.assign, size + 1) } - return this.finishOp(types.bitShift, size) - } - if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && - this.input.charCodeAt(this.pos + 3) === 45) { - // `` line comment\n this.skipLineComment(3)\n this.skipSpace()\n return this.nextToken()\n }\n return this.finishOp(tt.incDec, 2)\n }\n if (next === 61) return this.finishOp(tt.assign, 2)\n return this.finishOp(tt.plusMin, 1)\n}\n\npp.readToken_lt_gt = function(code) { // '<>'\n let next = this.input.charCodeAt(this.pos + 1)\n let size = 1\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2\n if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(tt.assign, size + 1)\n return this.finishOp(tt.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `` line comment - this.skipLineComment(3); - this.skipSpace(); - return this.nextToken() - } - return this.finishOp(types.incDec, 2) - } - if (next === 61) { return this.finishOp(types.assign, 2) } - return this.finishOp(types.plusMin, 1) -}; - -pp$8.readToken_lt_gt = function(code) { // '<>' - var next = this.input.charCodeAt(this.pos + 1); - var size = 1; - if (next === code) { - size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2; - if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types.assign, size + 1) } - return this.finishOp(types.bitShift, size) - } - if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && - this.input.charCodeAt(this.pos + 3) === 45) { - // `` line comment - this.skipLineComment(3); - this.skipSpace(); - return this.nextToken() - } - return this.finishOp(types.incDec, 2) - } - if (next === 61) { return this.finishOp(types.assign, 2) } - return this.finishOp(types.plusMin, 1) -}; - -pp$8.readToken_lt_gt = function(code) { // '<>' - var next = this.input.charCodeAt(this.pos + 1); - var size = 1; - if (next === code) { - size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2; - if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types.assign, size + 1) } - return this.finishOp(types.bitShift, size) - } - if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && - this.input.charCodeAt(this.pos + 3) === 45) { - // ` - - -- [Installation](#installation) - - [Excluding deprecated rules](#excluding-deprecated-rules) -- [CLI helper tool](#cli-helper-tool) -- [Special rules](#special-rules) - - [arrow-body-style and prefer-arrow-callback](#arrow-body-style-and-prefer-arrow-callback) - - [curly](#curly) - - [lines-around-comment](#lines-around-comment) - - [max-len](#max-len) - - [no-confusing-arrow](#no-confusing-arrow) - - [no-mixed-operators](#no-mixed-operators) - - [no-tabs](#no-tabs) - - [no-unexpected-multiline](#no-unexpected-multiline) - - [quotes](#quotes) - - [Enforce backticks](#enforce-backticks) - - [Forbid unnecessary backticks](#forbid-unnecessary-backticks) - - [Example double quote configuration](#example-double-quote-configuration) - - [Example single quote configuration](#example-single-quote-configuration) - - [vue/html-self-closing](#vuehtml-self-closing) -- [Other rules worth mentioning](#other-rules-worth-mentioning) - - [no-sequences](#no-sequences) -- [Contributing](#contributing) -- [License](#license) - - - -## Installation - -Install eslint-config-prettier: - -``` -npm install --save-dev eslint-config-prettier -``` - -Then, add eslint-config-prettier to the "extends" array in your `.eslintrc.*` file. Make sure to put it **last,** so it gets the chance to override other configs. - - -```json -{ - "extends": [ - "some-other-config-you-use", - "prettier" - ] -} -``` - -A few ESLint plugins are supported as well: - -- [@typescript-eslint/eslint-plugin] -- [eslint-plugin-babel] -- [eslint-plugin-flowtype] -- [eslint-plugin-react] -- [eslint-plugin-standard] -- [eslint-plugin-unicorn] -- [eslint-plugin-vue] - -Add extra exclusions for the plugins you use like so: - - -```json -{ - "extends": [ - "some-other-config-you-use", - "prettier", - "prettier/@typescript-eslint", - "prettier/babel", - "prettier/flowtype", - "prettier/react", - "prettier/standard", - "prettier/unicorn", - "prettier/vue" - ] -} -``` - -If you extend a config which uses a plugin, it is recommended to add `"prettier/that-plugin"` (if available). For example, [eslint-config-airbnb] enables [eslint-plugin-react] rules, so `"prettier/react"` is needed: - - -```json -{ - "extends": [ - "airbnb", - "prettier", - "prettier/react" - ] -} -``` - -If you’re unsure which plugins are used, you can usually find them in your `package.json`. - -### Excluding deprecated rules - -Some of the rules that eslint-config-prettier turns off may be deprecated. **This is perfectly fine,** but if you really need to omit the deprecated rules, you can do so by setting the `ESLINT_CONFIG_PRETTIER_NO_DEPRECATED` environment variable to a non-empty value. For example: - -``` -env ESLINT_CONFIG_PRETTIER_NO_DEPRECATED=true npx eslint-find-rules --deprecated index.js -``` - -## CLI helper tool - -eslint-config-prettier also ships with a little CLI tool to help you check if your configuration contains any rules that are unnecessary or conflict with Prettier. - -You can run it using `npx`: - -``` -npx eslint --print-config path/to/main.js | npx eslint-config-prettier-check -``` - -(Change `path/to/main.js` to a file that exists in your project.) - -In theory you need to run `npx eslint --print-config file.js | npx eslint-config-prettier-check` for every single file in your project to be 100% sure that there are no conflicting rules, because ESLint supports having different rules for different files. But usually you’ll have about the same rules for all files, so it is enough to run the command on one file (pick one that you won’t be moving). If you use [multiple configuration files] or [overrides], you can (but you probably don’t need to!) run the above script several times with different `--print-config` arguments, such as: - -``` -npx eslint --print-config index.js | npx eslint-config-prettier-check -npx eslint --print-config test/index.js | npx eslint-config-prettier-check -npx eslint --print-config legacy/main.js | npx eslint-config-prettier-check -``` - -Exit codes: - -- 0: No problems found. -- 1: Unexpected error. -- 2: Conflicting rules found. - -## Special rules - -There a few rules that eslint-config-prettier disables that actually can be enabled in some cases. - -- Some require certain options. The CLI helper tool validates this. -- Some require special attention when writing code. The CLI helper tool warns you if any of those rules are enabled, but can’t tell if anything is problematic. -- Some can cause problems if using [eslint-plugin-prettier] and `--fix`. - -For maximum ease of use, the special rules are disabled by default. If you want them, you need to explicitly specify them in your ESLint config. - -### [arrow-body-style] and [prefer-arrow-callback] - -**These rules might cause problems if using [eslint-plugin-prettier] and `--fix`.** - -If you use any of these rules together with the `prettier/prettier` rule from [eslint-plugin-prettier], you can in some cases end up with invalid code due to a bug in ESLint’s autofix. - -These rules are safe to use if: - -- You don’t use [eslint-plugin-prettier]. In other words, you run `eslint --fix` and `prettier --write` as separate steps. -- You _do_ use [eslint-plugin-prettier], but don’t use `--fix`. (But then, what’s the point?) - -You _can_ still use these rules together with [eslint-plugin-prettier] if you want, because the bug does not occur _all the time._ But if you do, you need to keep in mind that you might end up with invalid code, where you manually have to insert a missing closing parenthesis to get going again. - -If you’re fixing large of amounts of previously unformatted code, consider temporarily disabling the `prettier/prettier` rule and running `eslint --fix` and `prettier --write` separately. - -See these issues for more information: - -- [eslint-config-prettier#31] -- [eslint-config-prettier#71] -- [eslint-plugin-prettier#65] - -When the autofix bug in ESLint has been fixed, the special case for these rules can be removed. - -### [curly] - -**This rule requires certain options.** - -If a block (for example after `if`, `else`, `for` or `while`) contains only one statement, JavaScript allows omitting the curly braces around that statement. This rule enforces if or when those optional curly braces should be omitted. - -If you use the `"multi-line"` or `"multi-or-nest"` option, the rule can conflict with Prettier. - -For example, the `"multi-line"` option allows this line: - - -```js -if (cart.items && cart.items[0] && cart.items[0].quantity === 0) updateCart(cart); -``` - -However, Prettier might consider the line too long and turn it into the following, which the `"multi-line"` option does _not_ allow: - - -```js -if (cart.items && cart.items[0] && cart.items[0].quantity === 0) - updateCart(cart); -``` - -If you like this rule, it can be used just fine with Prettier as long as you don’t use the `"multi-line"` or `"multi-or-nest"` option. - -Example ESLint configuration: - - -```json -{ - "rules": { - "curly": ["error", "all"] - } -} -``` - -### [lines-around-comment] - -**This rule can be used with certain options.** - -This rule requires empty lines before and/or after comments. Prettier preserves blank lines, with two exceptions: - -- Several blank lines in a row are collapsed into a single blank line. This is fine. -- Blank lines at the beginning and end of blocks, objects and arrays are always removed. This may lead to conflicts. - -By default, ESLint requires a blank line above the comment is this case: - - -```js -if (result) { - - /* comment */ - return result; -} -``` - -However, Prettier removes the blank line: - - -```js -if (result) { - /* comment */ - return result; -} -``` - -If you like this rule, it can be used just fine with Prettier as long as you add some extra configuration to allow comments at the start and end of blocks, objects and arrays. - -Example ESLint configuration: - - -```json -{ - "rules": { - "lines-around-comment": [ - "error", - { - "beforeBlockComment": true, - "afterBlockComment": true, - "beforeLineComment": true, - "afterLineComment": true, - "allowBlockStart": true, - "allowBlockEnd": true, - "allowObjectStart": true, - "allowObjectEnd": true, - "allowArrayStart": true, - "allowArrayEnd": true - } - ] - } -} -``` - -### [max-len] - -(The following applies to [vue/max-len] as well.) - -**This rule requires special attention when writing code.** - -Usually, Prettier takes care of following a maximum line length automatically. However, there are cases where Prettier can’t do anything, such as for long strings, regular expressions and comments. Those need to be split up by a human. - -If you’d like to enforce an even stricter maximum line length policy than Prettier can provide automatically, you can enable this rule. Just remember to keep `max-len`’s options and Prettier’s `printWidth` option in sync. - -Keep in mind that you might have to refactor code slightly if Prettier formats lines in a way that the `max-len` rule does not approve of. - -Example ESLint configuration: - - -```json -{ - "rules": { - "max-len": ["error", {"code": 80, "ignoreUrls": true}] - } -} -``` - -### [no-confusing-arrow] - -**This rule requires certain options.** - -For example, the rule could warn about this line: - - -```js -var x = a => 1 ? 2 : 3; -``` - -With `{allowParens: true}` (the default since ESLint 6.0.0), adding parentheses is considered a valid way to avoid the arrow confusion: - - -```js -var x = a => (1 ? 2 : 3); -``` - -While Prettier keeps those parentheses, it removes them if the line is long enough to introduce a line break: - - -```js -EnterpriseCalculator.prototype.calculateImportantNumbers = inputNumber => - 1 ? 2 : 3; -``` - -With `{allowParens: false}`, ESLint instead suggests switching to an explicit return: - - -```js -var x = a => { return 1 ? 2 : 3; }; -``` - -That causes no problems with Prettier. - -If you like this rule, it can be used just fine with Prettier as long as the `allowParens` option is off. - -Example ESLint configuration: - - -```json -{ - "rules": { - "no-confusing-arrow": ["error", { "allowParens": false }] - } -} -``` - -(Note: The CLI helper tool considers `{allowParens: true}` to be the default, which is the case since ESLint 6.0.0. The tool will produce a warning if you use the default even if you use an older version of ESLint. It doesn’t hurt to explicitly set `{allowParens: false}` even though it is technically redundant. This way you are prepared for a future ESLint upgrade and the CLI tool can be kept simple.) - -### [no-mixed-operators] - -**This rule requires special attention when writing code.** - -This rule forbids mixing certain operators, such as `&&` and `||`. - -For example, the rule could warn about this line: - - -```js -var foo = a + b * c; -``` - -The rule suggests adding parentheses, like this: - - -```js -var foo = a + (b * c); -``` - -However, Prettier removes many “unnecessary” parentheses, turning it back to: - - -```js -var foo = a + b * c; -``` - -If you want to use this rule with Prettier, you need to split the expression into another variable: - - -```js -var bar = b * c; -var foo = a + bar; -``` - -Keep in mind that Prettier prints _some_ “unnecessary” parentheses, though: - - -```js -var foo = (a && b) || c; -``` - -Example ESLint configuration: - - -```json -{ - "rules": { - "no-mixed-operators": "error" - } -} -``` - -### [no-tabs] - -**This rule requires certain Prettier options.** - -This rule disallows the use of tab characters at all. It can be used just fine with Prettier as long as you don’t configure Prettier to indent using tabs. - -Example ESLint configuration: - - -```json -{ - "rules": { - "no-tabs": "error" - } -} -``` - -Example Prettier configuration (this is the default, so adding this is not required): - - -```json -{ - "useTabs": false -} -``` - -**Note:** Since [ESlint 5.7.0] this rule can be configured to work regardless of your Prettier configuration: - - -```json -{ - "rules": { - "no-tabs": ["error", {"allowIndentationTabs": true}] - } -} -``` - -A future version of eslint-config-prettier might check for that automatically. - -### [no-unexpected-multiline] - -**This rule requires special attention when writing code.** - -This rule disallows confusing multiline expressions where a newline looks like it is ending a statement, but is not. - -For example, the rule could warn about this: - - -```js -var hello = "world" -[1, 2, 3].forEach(addNumber) -``` - -Prettier usually formats this in a way that makes it obvious that a semicolon was missing: - - -```js -var hello = "world"[(1, 2, 3)].forEach(addNumber); -``` - -However, there are cases where Prettier breaks things into several lines such that the `no-unexpected-multiline` conflicts. - - -```js -const value = text.trim().split("\n")[position].toLowerCase(); -``` - -Prettier breaks it up into several lines, though, causing a conflict: - - -```js -const value = text - .trim() - .split("\n") - [position].toLowerCase(); -``` - -If you like this rule, it can usually be used with Prettier without problems, but occasionally you might need to either temporarily disable the rule or refactor your code. - - -```js -const value = text - .trim() - .split("\n") - // eslint-disable-next-line no-unexpected-multiline - [position].toLowerCase(); - -// Or: - -const lines = text.trim().split("\n"); -const value = lines[position].toLowerCase(); -``` - -**Note:** If you _do_ enable this rule, you have to run ESLint and Prettier as two separate steps (and ESLint first) in order to get any value out of it. Otherwise Prettier might reformat your code in such a way that ESLint never gets a chance to report anything (as seen in the first example). - -Example configuration: - - -```json -{ - "rules": { - "no-unexpected-multiline": "error" - } -} -``` - -### [quotes] - -(The following applies to [babel/quotes] and [@typescript-eslint/quotes] as well.) - -**This rule requires certain options and certain Prettier options.** - -Usually, you don’t need this rule at all. But there are two cases where it could be useful: - -- To enforce the use of backticks rather than single or double quotes for strings. -- To forbid backticks where regular strings could have been used. - -#### Enforce backticks - -If you’d like all strings to use backticks (never quotes), enable the `"backtick"` option. - -Example ESLint configuration: - - -```json -{ - "rules": { - "quotes": ["error", "backtick"] - } -} -``` - -#### Forbid unnecessary backticks - -In the following example, the first array item could have been written with quotes instead of backticks. - - -```js -const strings = [ - `could have been a regular string`, - ` - multiple - lines - `, - `uses ${interpolation}`, - String.raw`\tagged/`, -]; -``` - -If you’d like ESLint to enforce `` `could have been a regular string` `` being written as either `"could have been a regular string"` or `'could have been a regular string'`, you need to use some specific configuration. The `quotes` rule has two options, a string option and an object option. - -- The first (string) option needs to be set to `"single"` or `"double"` and be kept in sync with Prettier’s [singleQuote] option. -- The second (object) option needs the following properties: - - `"avoidEscape": true` to follow Prettier’s [string formatting rules]. - - `"allowTemplateLiterals": false` to disallow unnecessary backticks. - -##### Example double quote configuration - -ESLint: - - -```json -{ - "rules": { - "quotes": [ - "error", - "double", - { "avoidEscape": true, "allowTemplateLiterals": false } - ] - } -} -``` - -Prettier (this is the default, so adding this is not required): - - -```json -{ - "singleQuote": false -} -``` - -##### Example single quote configuration - -ESLint: - - -```json -{ - "rules": { - "quotes": [ - "error", - "single", - { "avoidEscape": true, "allowTemplateLiterals": false } - ] - } -} -``` - -Prettier: - - -```json -{ - "singleQuote": true -} -``` - -### [vue/html-self-closing] - -**This rule requires certain options.** - -This rule enforces whether elements should be self-closing or not. - -Prettier generally preserves the way you wrote your elements: - - -```vue -
-
- - - - -``` - -But for known _void_ HTML elements, Prettier always uses the self-closing style. For example, `` is turned into ``. - -If you like this rule, it can be used just fine with Prettier as long as you set `html.void` to `"any"`. - -Example ESLint configuration: - - -```json -{ - "rules": { - "vue/html-self-closing": [ - "error", - { - "html": { - "void": "any" - } - } - ] - } -} -``` - -## Other rules worth mentioning - -These rules don’t conflict with Prettier, but have some gotchas when used with Prettier. - -### [no-sequences] - -This rule forbids using JavaScript’s confusing comma operator (sequence expressions). This piece of code is not doing what it looks like: - - -```js -matrix[4, 7]; -``` - -Prettier adds parentheses to the above to make it clear that a sequence expression is used: - - -```js -matrix[(4, 7)]; -``` - -However, the `no-sequences` rule allows comma operators if the expression sequence is explicitly wrapped in parentheses. Since Prettier automatically wraps them in parentheses, you might never see any warnings from ESLint about comma operators. - -Ending up with an accidental sequence expression can easily happen while refactoring. If you want ESLint to catch such mistakes, it is recommended to forbid sequence expressions entirely using [no-restricted-syntax] \([as mentioned in the `no-sequences` documentation][no-sequences-full]): - - -```json -{ - "rules": { - "no-restricted-syntax": ["error", "SequenceExpression"] - } -} -``` - -If you still need to use the comma operator for some edge case, you can place an `// eslint-disable-next-line no-restricted-syntax` comment on the line above the expression. `no-sequences` can safely be disabled if you use the `no-restricted-syntax` approach. - -You can also supply a custom message if you want: - - -```json -{ - "rules": { - "no-restricted-syntax": [ - "error", - { - "selector": "SequenceExpression", - "message": "The comma operator is confusing and a common mistake. Don’t use it!" - } - ] - } -} -``` - -## Contributing - -eslint-config-prettier has been tested with: - -- ESLint 7.12.1 - - eslint-config-prettier 6.11.0 and older were tested with ESLint 6.x - - eslint-config-prettier 5.1.0 and older were tested with ESLint 5.x - - eslint-config-prettier 2.10.0 and older were tested with ESLint 4.x - - eslint-config-prettier 2.1.1 and older were tested with ESLint 3.x -- prettier 2.1.2 -- @typescript-eslint/eslint-plugin 4.6.0 -- eslint-plugin-babel 5.3.1 -- eslint-plugin-flowtype 5.2.0 -- eslint-plugin-react 7.21.5 -- eslint-plugin-standard 4.0.2 -- eslint-plugin-unicorn 23.0.0 -- eslint-plugin-vue 7.1.0 - -Have new rules been added since those versions? Have we missed any rules? Is there a plugin you would like to see exclusions for? Open an issue or a pull request! - -If you’d like to add support for eslint-plugin-foobar, this is how you’d go about it: - -First, create `foobar.js`: - - -```js -"use strict"; - -module.exports = { - rules: { - "foobar/some-rule": "off" - } -}; -``` - -Then, create `test-lint/foobar.js`: - - -```js -/* eslint-disable quotes */ -"use strict"; - -// Prettier does not want spaces before the parentheses, but -// `plugin:foobar/recommended` wants one. -console.log(); -``` - -`test-lint/foobar.js` must fail when used with eslint-plugin-foobar and eslint-plugin-prettier at the same time – until `"prettier/foobar"` is added to the "extends" property of an ESLint config. The file should be formatted according to Prettier, and that formatting should disagree with the plugin. - -Finally, you need to mention the plugin in several places: - -- Add `"foobar.js"` to the "files" field in `package.json`. -- Add eslint-plugin-foobar to the "devDependencies" field in `package.json`. -- Make sure that at least one rule from eslint-plugin-foobar gets used in `.eslintrc.base.js`. -- Add it to the list of supported plugins, to the example config and to Contributing section in `README.md`. - -When you’re done, run `npm test` to verify that you got it all right. It runs several other npm scripts: - -- `"test:lint"` makes sure that the files in `test-lint/` pass ESLint when the exclusions from eslint-config-prettier are used. It also lints the code of eslint-config-prettier itself, and checks that Prettier has been run on all files. -- `"test:lint-verify-fail"` is run by a test in `test/lint-verify-fail.test.js`. -- `"test:lint-rules"` is run by a test in `test/rules.test.js`. -- `"test:jest"` runs unit tests that check a number of things: - - That eslint-plugin-foobar is mentioned in all the places shown above. - - That no unknown rules are turned off. This helps catching typos, for example. - - That the CLI works. -- `"test:cli-sanity"` and `"test:cli-sanity-warning"` are sanity checks for the CLI. - -## License - -[MIT](LICENSE). - -[@typescript-eslint/eslint-plugin]: https://github.com/typescript-eslint/typescript-eslint -[@typescript-eslint/quotes]: https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/quotes.md -[eslint 5.7.0]: https://eslint.org/blog/2018/10/eslint-v5.7.0-released -[prettier]: https://github.com/prettier/prettier -[arrow-body-style]: https://eslint.org/docs/rules/arrow-body-style -[babel/quotes]: https://github.com/babel/eslint-plugin-babel#rules -[curly]: https://eslint.org/docs/rules/curly -[eslint-config-airbnb]: https://www.npmjs.com/package/eslint-config-airbnb -[eslint-config-prettier#31]: https://github.com/prettier/eslint-config-prettier/issues/31 -[eslint-config-prettier#71]: https://github.com/prettier/eslint-config-prettier/issues/71 -[eslint-plugin-babel]: https://github.com/babel/eslint-plugin-babel -[eslint-plugin-flowtype]: https://github.com/gajus/eslint-plugin-flowtype -[eslint-plugin-prettier#65]: https://github.com/prettier/eslint-plugin-prettier/issues/65 -[eslint-plugin-prettier]: https://github.com/prettier/eslint-plugin-prettier -[eslint-plugin-react]: https://github.com/yannickcr/eslint-plugin-react -[eslint-plugin-standard]: https://github.com/xjamundx/eslint-plugin-standard -[eslint-plugin-unicorn]: https://github.com/sindresorhus/eslint-plugin-unicorn -[eslint-plugin-vue]: https://github.com/vuejs/eslint-plugin-vue -[lines-around-comment]: https://eslint.org/docs/rules/lines-around-comment -[max-len]: https://eslint.org/docs/rules/max-len -[multiple configuration files]: https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy -[no-confusing-arrow]: https://eslint.org/docs/rules/no-confusing-arrow -[no-mixed-operators]: https://eslint.org/docs/rules/no-mixed-operators -[no-restricted-syntax]: https://eslint.org/docs/rules/no-restricted-syntax -[no-sequences-full]: https://eslint.org/docs/rules/no-sequences#when-not-to-use-it -[no-sequences]: https://eslint.org/docs/rules/no-sequences -[no-tabs]: https://eslint.org/docs/rules/no-tabs -[no-unexpected-multiline]: https://eslint.org/docs/rules/no-unexpected-multiline -[overrides]: https://eslint.org/docs/user-guide/configuring#configuration-based-on-glob-patterns -[prefer-arrow-callback]: https://eslint.org/docs/rules/prefer-arrow-callback -[quotes]: https://eslint.org/docs/rules/quotes -[singlequote]: https://prettier.io/docs/en/options.html#quotes -[string formatting rules]: https://prettier.io/docs/en/rationale.html#strings -[vue/html-self-closing]: https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-self-closing.md -[vue/max-len]: https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/max-len.md diff --git a/node_modules/eslint-config-prettier/babel.js b/node_modules/eslint-config-prettier/babel.js deleted file mode 100644 index 47d0365..0000000 --- a/node_modules/eslint-config-prettier/babel.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -module.exports = { - rules: { - "babel/quotes": 0, - - "babel/object-curly-spacing": "off", - "babel/semi": "off", - }, -}; diff --git a/node_modules/eslint-config-prettier/bin/cli.js b/node_modules/eslint-config-prettier/bin/cli.js deleted file mode 100755 index 208b143..0000000 --- a/node_modules/eslint-config-prettier/bin/cli.js +++ /dev/null @@ -1,207 +0,0 @@ -#!/usr/bin/env node - -"use strict"; - -const fs = require("fs"); -const path = require("path"); -const getStdin = require("get-stdin"); -const validators = require("./validators"); - -const SPECIAL_RULES_URL = - "https://github.com/prettier/eslint-config-prettier#special-rules"; - -if (module === require.main) { - if (process.argv.length > 2 || process.stdin.isTTY) { - console.error( - [ - "This tool checks whether an ESLint configuration contains rules that are", - "unnecessary or conflict with Prettier. It’s supposed to be run like this:", - "", - " npx eslint --print-config path/to/main.js | npx eslint-config-prettier-check", - " npx eslint --print-config test/index.js | npx eslint-config-prettier-check", - "", - "Exit codes:", - "", - "0: No automatically detectable problems found.", - "1: Unexpected error.", - "2: Conflicting rules found.", - "", - "For more information, see:", - "https://github.com/prettier/eslint-config-prettier#cli-helper-tool", - ].join("\n") - ); - process.exit(1); - } - - getStdin() - .then((string) => { - const result = processString(string); - if (result.stderr) { - console.error(result.stderr); - } - if (result.stdout) { - console.error(result.stdout); - } - process.exit(result.code); - }) - .catch((error) => { - console.error("Unexpected error", error); - process.exit(1); - }); -} - -function processString(string) { - let config; - try { - config = JSON.parse(string); - } catch (error) { - return { - stderr: `Failed to parse JSON:\n${error.message}`, - code: 1, - }; - } - - if ( - !( - Object.prototype.toString.call(config) === "[object Object]" && - Object.prototype.toString.call(config.rules) === "[object Object]" - ) - ) { - return { - stderr: `Expected a \`{"rules: {...}"}\` JSON object, but got:\n${string}`, - code: 1, - }; - } - - // This used to look at "files" in package.json, but that is not reliable due - // to an npm bug. See: - // https://github.com/prettier/eslint-config-prettier/issues/57 - const allRules = Object.assign( - Object.create(null), - ...fs - .readdirSync(path.join(__dirname, "..")) - .filter((name) => !name.startsWith(".") && name.endsWith(".js")) - .map((ruleFileName) => require(`../${ruleFileName}`).rules) - ); - - const regularRules = filterRules( - allRules, - (ruleName, value) => value === "off" - ); - const optionsRules = filterRules( - allRules, - (ruleName, value) => value === 0 && ruleName in validators - ); - const specialRules = filterRules( - allRules, - (ruleName, value) => value === 0 && !(ruleName in validators) - ); - - const flaggedRules = Object.keys(config.rules) - .map((ruleName) => { - const value = config.rules[ruleName]; - const arrayValue = Array.isArray(value) ? value : [value]; - const level = arrayValue[0]; - const options = arrayValue.slice(1); - const isOff = level === "off" || level === 0; - return !isOff && ruleName in allRules ? { ruleName, options } : null; - }) - .filter(Boolean); - - const regularFlaggedRuleNames = filterRuleNames( - flaggedRules, - (ruleName) => ruleName in regularRules - ); - const optionsFlaggedRuleNames = filterRuleNames( - flaggedRules, - (ruleName, options) => - ruleName in optionsRules && !validators[ruleName](options) - ); - const specialFlaggedRuleNames = filterRuleNames( - flaggedRules, - (ruleName) => ruleName in specialRules - ); - - if ( - regularFlaggedRuleNames.length === 0 && - optionsFlaggedRuleNames.length === 0 - ) { - const baseMessage = - "No rules that are unnecessary or conflict with Prettier were found."; - - const message = - specialFlaggedRuleNames.length === 0 - ? baseMessage - : [ - baseMessage, - "", - "However, the following rules are enabled but cannot be automatically checked. See:", - SPECIAL_RULES_URL, - "", - printRuleNames(specialFlaggedRuleNames), - ].join("\n"); - - return { - stdout: message, - code: 0, - }; - } - - const regularMessage = [ - "The following rules are unnecessary or might conflict with Prettier:", - "", - printRuleNames(regularFlaggedRuleNames), - ].join("\n"); - - const optionsMessage = [ - "The following rules are enabled with options that might conflict with Prettier. See:", - SPECIAL_RULES_URL, - "", - printRuleNames(optionsFlaggedRuleNames), - ].join("\n"); - - const specialMessage = [ - "The following rules are enabled but cannot be automatically checked. See:", - SPECIAL_RULES_URL, - "", - printRuleNames(specialFlaggedRuleNames), - ].join("\n"); - - const message = [ - regularFlaggedRuleNames.length === 0 ? null : regularMessage, - optionsFlaggedRuleNames.length === 0 ? null : optionsMessage, - specialFlaggedRuleNames.length === 0 ? null : specialMessage, - ] - .filter(Boolean) - .join("\n\n"); - - return { - stdout: message, - code: 2, - }; -} - -function filterRules(rules, fn) { - return Object.keys(rules) - .filter((ruleName) => fn(ruleName, rules[ruleName])) - .reduce((obj, ruleName) => { - obj[ruleName] = true; - return obj; - }, Object.create(null)); -} - -function filterRuleNames(rules, fn) { - return rules - .filter((rule) => fn(rule.ruleName, rule.options)) - .map((rule) => rule.ruleName); -} - -function printRuleNames(ruleNames) { - return ruleNames - .slice() - .sort() - .map((ruleName) => `- ${ruleName}`) - .join("\n"); -} - -exports.processString = processString; diff --git a/node_modules/eslint-config-prettier/bin/validators.js b/node_modules/eslint-config-prettier/bin/validators.js deleted file mode 100644 index a6a9b8a..0000000 --- a/node_modules/eslint-config-prettier/bin/validators.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; - -// These validator functions answer the question “Is the config valid?” – return -// `false` if the options DO conflict with Prettier, and `true` if they don’t. - -module.exports = { - curly(options) { - if (options.length === 0) { - return true; - } - - const firstOption = options[0]; - return firstOption !== "multi-line" && firstOption !== "multi-or-nest"; - }, - - "lines-around-comment"(options) { - if (options.length === 0) { - return false; - } - - const firstOption = options[0]; - return Boolean( - firstOption && - firstOption.allowBlockStart && - firstOption.allowBlockEnd && - firstOption.allowObjectStart && - firstOption.allowObjectEnd && - firstOption.allowArrayStart && - firstOption.allowArrayEnd - ); - }, - - "no-confusing-arrow"(options) { - if (options.length === 0) { - return false; - } - - const firstOption = options[0]; - return firstOption ? firstOption.allowParens === false : false; - }, - - "vue/html-self-closing"(options) { - if (options.length === 0) { - return false; - } - - const firstOption = options[0]; - return Boolean( - firstOption && firstOption.html && firstOption.html.void === "any" - // Enable when Prettier supports SVG: https://github.com/prettier/prettier/issues/5322 - // && firstOption.svg === "any" - ); - }, -}; diff --git a/node_modules/eslint-config-prettier/flowtype.js b/node_modules/eslint-config-prettier/flowtype.js deleted file mode 100644 index 34b8943..0000000 --- a/node_modules/eslint-config-prettier/flowtype.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -module.exports = { - rules: { - "flowtype/boolean-style": "off", - "flowtype/delimiter-dangle": "off", - "flowtype/generic-spacing": "off", - "flowtype/object-type-delimiter": "off", - "flowtype/semi": "off", - "flowtype/space-after-type-colon": "off", - "flowtype/space-before-generic-bracket": "off", - "flowtype/space-before-type-colon": "off", - "flowtype/union-intersection-spacing": "off", - }, -}; diff --git a/node_modules/eslint-config-prettier/index.js b/node_modules/eslint-config-prettier/index.js deleted file mode 100644 index 1cbfd47..0000000 --- a/node_modules/eslint-config-prettier/index.js +++ /dev/null @@ -1,103 +0,0 @@ -"use strict"; - -const includeDeprecated = !process.env.ESLINT_CONFIG_PRETTIER_NO_DEPRECATED; - -module.exports = { - rules: Object.assign( - { - // The following rules can be used in some cases. See the README for more - // information. (These are marked with `0` instead of `"off"` so that a - // script can distinguish them.) - "arrow-body-style": 0, - curly: 0, - "lines-around-comment": 0, - "max-len": 0, - "no-confusing-arrow": 0, - "no-mixed-operators": 0, - "no-tabs": 0, - "no-unexpected-multiline": 0, - "prefer-arrow-callback": 0, - quotes: 0, - // The rest are rules that you never need to enable when using Prettier. - "array-bracket-newline": "off", - "array-bracket-spacing": "off", - "array-element-newline": "off", - "arrow-parens": "off", - "arrow-spacing": "off", - "block-spacing": "off", - "brace-style": "off", - "comma-dangle": "off", - "comma-spacing": "off", - "comma-style": "off", - "computed-property-spacing": "off", - "dot-location": "off", - "eol-last": "off", - "func-call-spacing": "off", - "function-call-argument-newline": "off", - "function-paren-newline": "off", - "generator-star": "off", - "generator-star-spacing": "off", - "implicit-arrow-linebreak": "off", - indent: "off", - "jsx-quotes": "off", - "key-spacing": "off", - "keyword-spacing": "off", - "linebreak-style": "off", - "multiline-ternary": "off", - "newline-per-chained-call": "off", - "new-parens": "off", - "no-arrow-condition": "off", - "no-comma-dangle": "off", - "no-extra-parens": "off", - "no-extra-semi": "off", - "no-floating-decimal": "off", - "no-mixed-spaces-and-tabs": "off", - "no-multi-spaces": "off", - "no-multiple-empty-lines": "off", - "no-reserved-keys": "off", - "no-space-before-semi": "off", - "no-trailing-spaces": "off", - "no-whitespace-before-property": "off", - "no-wrap-func": "off", - "nonblock-statement-body-position": "off", - "object-curly-newline": "off", - "object-curly-spacing": "off", - "object-property-newline": "off", - "one-var-declaration-per-line": "off", - "operator-linebreak": "off", - "padded-blocks": "off", - "quote-props": "off", - "rest-spread-spacing": "off", - semi: "off", - "semi-spacing": "off", - "semi-style": "off", - "space-after-function-name": "off", - "space-after-keywords": "off", - "space-before-blocks": "off", - "space-before-function-paren": "off", - "space-before-function-parentheses": "off", - "space-before-keywords": "off", - "space-in-brackets": "off", - "space-in-parens": "off", - "space-infix-ops": "off", - "space-return-throw-case": "off", - "space-unary-ops": "off", - "space-unary-word-ops": "off", - "switch-colon-spacing": "off", - "template-curly-spacing": "off", - "template-tag-spacing": "off", - "unicode-bom": "off", - "wrap-iife": "off", - "wrap-regex": "off", - "yield-star-spacing": "off", - }, - includeDeprecated && { - // Deprecated since version 4.0.0. - // https://github.com/eslint/eslint/pull/8286 - "indent-legacy": "off", - // Deprecated since version 3.3.0. - // https://eslint.org/docs/rules/no-spaced-func - "no-spaced-func": "off", - } - ), -}; diff --git a/node_modules/eslint-config-prettier/package.json b/node_modules/eslint-config-prettier/package.json deleted file mode 100644 index b11e590..0000000 --- a/node_modules/eslint-config-prettier/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "eslint-config-prettier", - "version": "6.15.0", - "license": "MIT", - "author": "Simon Lydell", - "description": "Turns off all rules that are unnecessary or might conflict with Prettier.", - "repository": "prettier/eslint-config-prettier", - "files": [ - "bin/", - "@typescript-eslint.js", - "babel.js", - "flowtype.js", - "index.js", - "react.js", - "standard.js", - "unicorn.js", - "vue.js" - ], - "bin": { - "eslint-config-prettier-check": "bin/cli.js" - }, - "keywords": [ - "eslint", - "eslintconfig", - "prettier" - ], - "scripts": { - "doctoc": "doctoc README.md && replace \"\\[\\[([\\w/-]+)\\](?:([^\\[\\]]+)\\[([\\w/-]+)\\])?\\]\" \"[\\$1\\$2\\$3]\" README.md", - "prettier": "prettier --write .", - "test:lint": "eslint . && prettier --check .", - "test:lint-verify-fail": "eslint \"test-lint/*.{js,ts,vue}\" --config .eslintrc.base.js --format json", - "test:lint-rules": "eslint index.js --config test-config/.eslintrc.js --format json", - "test:deprecated": "eslint-find-rules --deprecated index.js", - "test:jest": "jest", - "test:cli-sanity": "eslint --print-config index.js | node ./bin/cli.js", - "test:cli-sanity-warning": "eslint --print-config ./bin/cli.js | node ./bin/cli.js", - "test": "npm run test:lint && npm run test:jest && npm run test:cli-sanity && npm run test:cli-sanity-warning" - }, - "dependencies": { - "get-stdin": "^6.0.0" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "4.6.0", - "@typescript-eslint/parser": "4.6.0", - "babel-eslint": "10.1.0", - "cross-spawn": "7.0.3", - "doctoc": "1.4.0", - "eslint": "7.12.1", - "eslint-config-google": "0.14.0", - "eslint-find-rules": "3.6.1", - "eslint-plugin-babel": "5.3.1", - "eslint-plugin-flowtype": "5.2.0", - "eslint-plugin-prettier": "3.1.4", - "eslint-plugin-react": "7.21.5", - "eslint-plugin-standard": "4.0.2", - "eslint-plugin-unicorn": "23.0.0", - "eslint-plugin-vue": "7.1.0", - "jest": "26.6.1", - "prettier": "2.1.2", - "replace": "1.2.0", - "rimraf": "3.0.2", - "typescript": "4.0.5" - }, - "peerDependencies": { - "eslint": ">=3.14.1" - } -} diff --git a/node_modules/eslint-config-prettier/react.js b/node_modules/eslint-config-prettier/react.js deleted file mode 100644 index 3f48553..0000000 --- a/node_modules/eslint-config-prettier/react.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; - -const includeDeprecated = !process.env.ESLINT_CONFIG_PRETTIER_NO_DEPRECATED; - -module.exports = { - rules: Object.assign( - { - "react/jsx-child-element-spacing": "off", - "react/jsx-closing-bracket-location": "off", - "react/jsx-closing-tag-location": "off", - "react/jsx-curly-newline": "off", - "react/jsx-curly-spacing": "off", - "react/jsx-equals-spacing": "off", - "react/jsx-first-prop-new-line": "off", - "react/jsx-indent": "off", - "react/jsx-indent-props": "off", - "react/jsx-max-props-per-line": "off", - "react/jsx-one-expression-per-line": "off", - "react/jsx-props-no-multi-spaces": "off", - "react/jsx-tag-spacing": "off", - "react/jsx-wrap-multilines": "off", - }, - includeDeprecated && { - // Deprecated since version 7.0.0. - // https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md#700---2017-05-06 - "react/jsx-space-before-closing": "off", - } - ), -}; diff --git a/node_modules/eslint-config-prettier/standard.js b/node_modules/eslint-config-prettier/standard.js deleted file mode 100644 index faacadd..0000000 --- a/node_modules/eslint-config-prettier/standard.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -module.exports = { - rules: { - "standard/array-bracket-even-spacing": "off", - "standard/computed-property-even-spacing": "off", - "standard/object-curly-even-spacing": "off", - }, -}; diff --git a/node_modules/eslint-config-prettier/unicorn.js b/node_modules/eslint-config-prettier/unicorn.js deleted file mode 100644 index eb7103e..0000000 --- a/node_modules/eslint-config-prettier/unicorn.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -module.exports = { - rules: { - "unicorn/no-nested-ternary": "off", - "unicorn/number-literal-case": "off", - }, -}; diff --git a/node_modules/eslint-config-prettier/vue.js b/node_modules/eslint-config-prettier/vue.js deleted file mode 100644 index d1b0b67..0000000 --- a/node_modules/eslint-config-prettier/vue.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; - -module.exports = { - rules: { - "vue/html-self-closing": 0, - "vue/max-len": 0, - - "vue/array-bracket-newline": "off", - "vue/array-bracket-spacing": "off", - "vue/arrow-spacing": "off", - "vue/block-spacing": "off", - "vue/block-tag-newline": "off", - "vue/brace-style": "off", - "vue/comma-dangle": "off", - "vue/comma-spacing": "off", - "vue/comma-style": "off", - "vue/dot-location": "off", - "vue/func-call-spacing": "off", - "vue/html-closing-bracket-newline": "off", - "vue/html-closing-bracket-spacing": "off", - "vue/html-end-tags": "off", - "vue/html-indent": "off", - "vue/html-quotes": "off", - "vue/key-spacing": "off", - "vue/keyword-spacing": "off", - "vue/max-attributes-per-line": "off", - "vue/multiline-html-element-content-newline": "off", - "vue/mustache-interpolation-spacing": "off", - "vue/no-extra-parens": "off", - "vue/no-multi-spaces": "off", - "vue/no-spaces-around-equal-signs-in-attribute": "off", - "vue/object-curly-newline": "off", - "vue/object-curly-spacing": "off", - "vue/object-property-newline": "off", - "vue/operator-linebreak": "off", - "vue/script-indent": "off", - "vue/singleline-html-element-content-newline": "off", - "vue/space-in-parens": "off", - "vue/space-infix-ops": "off", - "vue/space-unary-ops": "off", - "vue/template-curly-spacing": "off", - }, -}; diff --git a/node_modules/eslint-scope/CHANGELOG.md b/node_modules/eslint-scope/CHANGELOG.md deleted file mode 100644 index f83857c..0000000 --- a/node_modules/eslint-scope/CHANGELOG.md +++ /dev/null @@ -1,25 +0,0 @@ -v3.7.1 - April 12, 2017 - -* ced6262 Fix: restore previous Scope API exports from escope (#31) (Vitor Balocco) -* 5c3d966 Fix: Remove and Modify tests that contain invalid ES6 syntax (#29) (Reyad Attiyat) - -v3.7.0 - March 17, 2017 - -* 9e27835 Chore: Add files section to package.json (#24) (Ilya Volodin) -* 3e4d123 Upgrade: eslint-config-eslint to 4.0.0 (#21) (Teddy Katz) -* 38c50fb Chore: Rename src to lib and test to tests (#20) (Corbin Uselton) -* f4cd920 Chore: Remove esprima (#19) (Corbin Uselton) -* f81fad5 Revert "Chore: Remove esprima" (#18) (James Henry) -* 31b0085 Chore: Remove es6-map and es6-weakmap as they are included in node4 (#10) (#13) (Corbin Uselton) -* 12a1ca1 Add Makefile.js and eslint (#15) (Reyad Attiyat) -* 7d23f8e Chore: Remove es6-map and es6-weakmap as they are included in node4 (#10) (Corbin Uselton) -* 019441e Chore: Convert to ES6 that is supported on Node 4, commonjs modules and remove Babel (#14) (Corbin Uselton) -* c647f65 Update: Add check for node.body in referencer (#2) (Corbin Uselton) -* eb5c9db Remove browserify and jsdoc (#12) (Corbin Uselton) -* cf38df0 Chore: Update README.md (#3) (James Henry) -* 8a142ca Chore: Add eslint-release scripts (#6) (James Henry) -* e60d8cb Chore: Remove unused bower.json (#5) (James Henry) -* 049c545 Chore: Fix tests for eslint-scope (#4) (James Henry) -* f026aab Chore: Update package.json for eslint fork (#1) (James Henry) -* a94d281 Chore: Update license with JSF copyright (Nicholas C. Zakas) - diff --git a/node_modules/eslint-scope/LICENSE b/node_modules/eslint-scope/LICENSE deleted file mode 100644 index 4419797..0000000 --- a/node_modules/eslint-scope/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -eslint-scope -Copyright JS Foundation and other contributors, https://js.foundation -Copyright (C) 2012-2013 Yusuke Suzuki (twitter: @Constellation) and other contributors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/eslint-scope/README.md b/node_modules/eslint-scope/README.md deleted file mode 100644 index 7e7ce0d..0000000 --- a/node_modules/eslint-scope/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# ESLint Scope - -ESLint Scope is the [ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm) scope analyzer used in ESLint. It is a fork of [escope](http://github.com/estools/escope). - -## Usage - -Install: - -``` -npm i eslint-scope --save -``` - -Example: - -```js -var eslintScope = require('eslint-scope'); -var espree = require('espree'); -var estraverse = require('estraverse'); - -var ast = espree.parse(code); -var scopeManager = eslintScope.analyze(ast); - -var currentScope = scopeManager.acquire(ast); // global scope - -estraverse.traverse(ast, { - enter: function(node, parent) { - // do stuff - - if (/Function/.test(node.type)) { - currentScope = scopeManager.acquire(node); // get current function scope - } - }, - leave: function(node, parent) { - if (/Function/.test(node.type)) { - currentScope = currentScope.upper; // set to parent scope - } - - // do stuff - } -}); -``` - -## Contributing - -Issues and pull requests will be triaged and responded to as quickly as possible. We operate under the [ESLint Contributor Guidelines](http://eslint.org/docs/developer-guide/contributing), so please be sure to read them before contributing. If you're not sure where to dig in, check out the [issues](https://github.com/eslint/eslint-scope/issues). - -## Build Commands - -* `npm test` - run all linting and tests -* `npm run lint` - run all linting - -## License - -ESLint Scope is licensed under a permissive BSD 2-clause license. diff --git a/node_modules/eslint-scope/lib/definition.js b/node_modules/eslint-scope/lib/definition.js deleted file mode 100644 index 172bfe2..0000000 --- a/node_modules/eslint-scope/lib/definition.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - Copyright (C) 2015 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -"use strict"; - -const Variable = require("./variable"); - -/** - * @class Definition - */ -class Definition { - constructor(type, name, node, parent, index, kind) { - - /** - * @member {String} Definition#type - type of the occurrence (e.g. "Parameter", "Variable", ...). - */ - this.type = type; - - /** - * @member {espree.Identifier} Definition#name - the identifier AST node of the occurrence. - */ - this.name = name; - - /** - * @member {espree.Node} Definition#node - the enclosing node of the identifier. - */ - this.node = node; - - /** - * @member {espree.Node?} Definition#parent - the enclosing statement node of the identifier. - */ - this.parent = parent; - - /** - * @member {Number?} Definition#index - the index in the declaration statement. - */ - this.index = index; - - /** - * @member {String?} Definition#kind - the kind of the declaration statement. - */ - this.kind = kind; - } -} - -/** - * @class ParameterDefinition - */ -class ParameterDefinition extends Definition { - constructor(name, node, index, rest) { - super(Variable.Parameter, name, node, null, index, null); - - /** - * Whether the parameter definition is a part of a rest parameter. - * @member {boolean} ParameterDefinition#rest - */ - this.rest = rest; - } -} - -module.exports = { - ParameterDefinition, - Definition -}; - -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/eslint-scope/lib/index.js b/node_modules/eslint-scope/lib/index.js deleted file mode 100644 index f48252f..0000000 --- a/node_modules/eslint-scope/lib/index.js +++ /dev/null @@ -1,165 +0,0 @@ -/* - Copyright (C) 2012-2014 Yusuke Suzuki - Copyright (C) 2013 Alex Seville - Copyright (C) 2014 Thiago de Arruda - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/** - * Escope (escope) is an ECMAScript - * scope analyzer extracted from the esmangle project. - *

- * escope finds lexical scopes in a source program, i.e. areas of that - * program where different occurrences of the same identifier refer to the same - * variable. With each scope the contained variables are collected, and each - * identifier reference in code is linked to its corresponding variable (if - * possible). - *

- * escope works on a syntax tree of the parsed source code which has - * to adhere to the - * Mozilla Parser API. E.g. espree is a parser - * that produces such syntax trees. - *

- * The main interface is the {@link analyze} function. - * @module escope - */ -"use strict"; - -/* eslint no-underscore-dangle: ["error", { "allow": ["__currentScope"] }] */ - -const assert = require("assert"); - -const ScopeManager = require("./scope-manager"); -const Referencer = require("./referencer"); -const Reference = require("./reference"); -const Variable = require("./variable"); -const Scope = require("./scope").Scope; -const version = require("../package.json").version; - -/** - * Set the default options - * @returns {Object} options - */ -function defaultOptions() { - return { - optimistic: false, - directive: false, - nodejsScope: false, - impliedStrict: false, - sourceType: "script", // one of ['script', 'module'] - ecmaVersion: 5, - childVisitorKeys: null, - fallback: "iteration" - }; -} - -/** - * Preform deep update on option object - * @param {Object} target - Options - * @param {Object} override - Updates - * @returns {Object} Updated options - */ -function updateDeeply(target, override) { - - /** - * Is hash object - * @param {Object} value - Test value - * @returns {boolean} Result - */ - function isHashObject(value) { - return typeof value === "object" && value instanceof Object && !(value instanceof Array) && !(value instanceof RegExp); - } - - for (const key in override) { - if (override.hasOwnProperty(key)) { - const val = override[key]; - - if (isHashObject(val)) { - if (isHashObject(target[key])) { - updateDeeply(target[key], val); - } else { - target[key] = updateDeeply({}, val); - } - } else { - target[key] = val; - } - } - } - return target; -} - -/** - * Main interface function. Takes an Espree syntax tree and returns the - * analyzed scopes. - * @function analyze - * @param {espree.Tree} tree - Abstract Syntax Tree - * @param {Object} providedOptions - Options that tailor the scope analysis - * @param {boolean} [providedOptions.optimistic=false] - the optimistic flag - * @param {boolean} [providedOptions.directive=false]- the directive flag - * @param {boolean} [providedOptions.ignoreEval=false]- whether to check 'eval()' calls - * @param {boolean} [providedOptions.nodejsScope=false]- whether the whole - * script is executed under node.js environment. When enabled, escope adds - * a function scope immediately following the global scope. - * @param {boolean} [providedOptions.impliedStrict=false]- implied strict mode - * (if ecmaVersion >= 5). - * @param {string} [providedOptions.sourceType='script']- the source type of the script. one of 'script' and 'module' - * @param {number} [providedOptions.ecmaVersion=5]- which ECMAScript version is considered - * @param {Object} [providedOptions.childVisitorKeys=null] - Additional known visitor keys. See [esrecurse](https://github.com/estools/esrecurse)'s the `childVisitorKeys` option. - * @param {string} [providedOptions.fallback='iteration'] - A kind of the fallback in order to encounter with unknown node. See [esrecurse](https://github.com/estools/esrecurse)'s the `fallback` option. - * @returns {ScopeManager} ScopeManager - */ -function analyze(tree, providedOptions) { - const options = updateDeeply(defaultOptions(), providedOptions); - const scopeManager = new ScopeManager(options); - const referencer = new Referencer(options, scopeManager); - - referencer.visit(tree); - - assert(scopeManager.__currentScope === null, "currentScope should be null."); - - return scopeManager; -} - -module.exports = { - - /** @name module:escope.version */ - version, - - /** @name module:escope.Reference */ - Reference, - - /** @name module:escope.Variable */ - Variable, - - /** @name module:escope.Scope */ - Scope, - - /** @name module:escope.ScopeManager */ - ScopeManager, - analyze -}; - - -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/eslint-scope/lib/pattern-visitor.js b/node_modules/eslint-scope/lib/pattern-visitor.js deleted file mode 100644 index afa6291..0000000 --- a/node_modules/eslint-scope/lib/pattern-visitor.js +++ /dev/null @@ -1,152 +0,0 @@ -/* - Copyright (C) 2015 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -"use strict"; - -/* eslint-disable no-undefined */ - -const Syntax = require("estraverse").Syntax; -const esrecurse = require("esrecurse"); - -/** - * Get last array element - * @param {array} xs - array - * @returns {any} Last elment - */ -function getLast(xs) { - return xs[xs.length - 1] || null; -} - -class PatternVisitor extends esrecurse.Visitor { - static isPattern(node) { - const nodeType = node.type; - - return ( - nodeType === Syntax.Identifier || - nodeType === Syntax.ObjectPattern || - nodeType === Syntax.ArrayPattern || - nodeType === Syntax.SpreadElement || - nodeType === Syntax.RestElement || - nodeType === Syntax.AssignmentPattern - ); - } - - constructor(options, rootPattern, callback) { - super(null, options); - this.rootPattern = rootPattern; - this.callback = callback; - this.assignments = []; - this.rightHandNodes = []; - this.restElements = []; - } - - Identifier(pattern) { - const lastRestElement = getLast(this.restElements); - - this.callback(pattern, { - topLevel: pattern === this.rootPattern, - rest: lastRestElement !== null && lastRestElement !== undefined && lastRestElement.argument === pattern, - assignments: this.assignments - }); - } - - Property(property) { - - // Computed property's key is a right hand node. - if (property.computed) { - this.rightHandNodes.push(property.key); - } - - // If it's shorthand, its key is same as its value. - // If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern). - // If it's not shorthand, the name of new variable is its value's. - this.visit(property.value); - } - - ArrayPattern(pattern) { - for (let i = 0, iz = pattern.elements.length; i < iz; ++i) { - const element = pattern.elements[i]; - - this.visit(element); - } - } - - AssignmentPattern(pattern) { - this.assignments.push(pattern); - this.visit(pattern.left); - this.rightHandNodes.push(pattern.right); - this.assignments.pop(); - } - - RestElement(pattern) { - this.restElements.push(pattern); - this.visit(pattern.argument); - this.restElements.pop(); - } - - MemberExpression(node) { - - // Computed property's key is a right hand node. - if (node.computed) { - this.rightHandNodes.push(node.property); - } - - // the object is only read, write to its property. - this.rightHandNodes.push(node.object); - } - - // - // ForInStatement.left and AssignmentExpression.left are LeftHandSideExpression. - // By spec, LeftHandSideExpression is Pattern or MemberExpression. - // (see also: https://github.com/estree/estree/pull/20#issuecomment-74584758) - // But espree 2.0 parses to ArrayExpression, ObjectExpression, etc... - // - - SpreadElement(node) { - this.visit(node.argument); - } - - ArrayExpression(node) { - node.elements.forEach(this.visit, this); - } - - AssignmentExpression(node) { - this.assignments.push(node); - this.visit(node.left); - this.rightHandNodes.push(node.right); - this.assignments.pop(); - } - - CallExpression(node) { - - // arguments are right hand nodes. - node.arguments.forEach(a => { - this.rightHandNodes.push(a); - }); - this.visit(node.callee); - } -} - -module.exports = PatternVisitor; - -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/eslint-scope/lib/reference.js b/node_modules/eslint-scope/lib/reference.js deleted file mode 100644 index 9529827..0000000 --- a/node_modules/eslint-scope/lib/reference.js +++ /dev/null @@ -1,167 +0,0 @@ -/* - Copyright (C) 2015 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -"use strict"; - -const READ = 0x1; -const WRITE = 0x2; -const RW = READ | WRITE; - -/** - * A Reference represents a single occurrence of an identifier in code. - * @class Reference - */ -class Reference { - constructor(ident, scope, flag, writeExpr, maybeImplicitGlobal, partial, init) { - - /** - * Identifier syntax node. - * @member {espreeIdentifier} Reference#identifier - */ - this.identifier = ident; - - /** - * Reference to the enclosing Scope. - * @member {Scope} Reference#from - */ - this.from = scope; - - /** - * Whether the reference comes from a dynamic scope (such as 'eval', - * 'with', etc.), and may be trapped by dynamic scopes. - * @member {boolean} Reference#tainted - */ - this.tainted = false; - - /** - * The variable this reference is resolved with. - * @member {Variable} Reference#resolved - */ - this.resolved = null; - - /** - * The read-write mode of the reference. (Value is one of {@link - * Reference.READ}, {@link Reference.RW}, {@link Reference.WRITE}). - * @member {number} Reference#flag - * @private - */ - this.flag = flag; - if (this.isWrite()) { - - /** - * If reference is writeable, this is the tree being written to it. - * @member {espreeNode} Reference#writeExpr - */ - this.writeExpr = writeExpr; - - /** - * Whether the Reference might refer to a partial value of writeExpr. - * @member {boolean} Reference#partial - */ - this.partial = partial; - - /** - * Whether the Reference is to write of initialization. - * @member {boolean} Reference#init - */ - this.init = init; - } - this.__maybeImplicitGlobal = maybeImplicitGlobal; - } - - /** - * Whether the reference is static. - * @method Reference#isStatic - * @returns {boolean} static - */ - isStatic() { - return !this.tainted && this.resolved && this.resolved.scope.isStatic(); - } - - /** - * Whether the reference is writeable. - * @method Reference#isWrite - * @returns {boolean} write - */ - isWrite() { - return !!(this.flag & Reference.WRITE); - } - - /** - * Whether the reference is readable. - * @method Reference#isRead - * @returns {boolean} read - */ - isRead() { - return !!(this.flag & Reference.READ); - } - - /** - * Whether the reference is read-only. - * @method Reference#isReadOnly - * @returns {boolean} read only - */ - isReadOnly() { - return this.flag === Reference.READ; - } - - /** - * Whether the reference is write-only. - * @method Reference#isWriteOnly - * @returns {boolean} write only - */ - isWriteOnly() { - return this.flag === Reference.WRITE; - } - - /** - * Whether the reference is read-write. - * @method Reference#isReadWrite - * @returns {boolean} read write - */ - isReadWrite() { - return this.flag === Reference.RW; - } -} - -/** - * @constant Reference.READ - * @private - */ -Reference.READ = READ; - -/** - * @constant Reference.WRITE - * @private - */ -Reference.WRITE = WRITE; - -/** - * @constant Reference.RW - * @private - */ -Reference.RW = RW; - -module.exports = Reference; - -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/eslint-scope/lib/referencer.js b/node_modules/eslint-scope/lib/referencer.js deleted file mode 100644 index b7cdbb6..0000000 --- a/node_modules/eslint-scope/lib/referencer.js +++ /dev/null @@ -1,638 +0,0 @@ -/* - Copyright (C) 2015 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -"use strict"; - -/* eslint-disable no-underscore-dangle */ -/* eslint-disable no-undefined */ - -const Syntax = require("estraverse").Syntax; -const esrecurse = require("esrecurse"); -const Reference = require("./reference"); -const Variable = require("./variable"); -const PatternVisitor = require("./pattern-visitor"); -const definition = require("./definition"); -const assert = require("assert"); - -const ParameterDefinition = definition.ParameterDefinition; -const Definition = definition.Definition; - -/** - * Traverse identifier in pattern - * @param {Object} options - options - * @param {pattern} rootPattern - root pattern - * @param {Refencer} referencer - referencer - * @param {callback} callback - callback - * @returns {void} - */ -function traverseIdentifierInPattern(options, rootPattern, referencer, callback) { - - // Call the callback at left hand identifier nodes, and Collect right hand nodes. - const visitor = new PatternVisitor(options, rootPattern, callback); - - visitor.visit(rootPattern); - - // Process the right hand nodes recursively. - if (referencer !== null && referencer !== undefined) { - visitor.rightHandNodes.forEach(referencer.visit, referencer); - } -} - -// Importing ImportDeclaration. -// http://people.mozilla.org/~jorendorff/es6-draft.html#sec-moduledeclarationinstantiation -// https://github.com/estree/estree/blob/master/es6.md#importdeclaration -// FIXME: Now, we don't create module environment, because the context is -// implementation dependent. - -class Importer extends esrecurse.Visitor { - constructor(declaration, referencer) { - super(null, referencer.options); - this.declaration = declaration; - this.referencer = referencer; - } - - visitImport(id, specifier) { - this.referencer.visitPattern(id, pattern => { - this.referencer.currentScope().__define(pattern, - new Definition( - Variable.ImportBinding, - pattern, - specifier, - this.declaration, - null, - null - )); - }); - } - - ImportNamespaceSpecifier(node) { - const local = (node.local || node.id); - - if (local) { - this.visitImport(local, node); - } - } - - ImportDefaultSpecifier(node) { - const local = (node.local || node.id); - - this.visitImport(local, node); - } - - ImportSpecifier(node) { - const local = (node.local || node.id); - - if (node.name) { - this.visitImport(node.name, node); - } else { - this.visitImport(local, node); - } - } -} - -// Referencing variables and creating bindings. -class Referencer extends esrecurse.Visitor { - constructor(options, scopeManager) { - super(null, options); - this.options = options; - this.scopeManager = scopeManager; - this.parent = null; - this.isInnerMethodDefinition = false; - } - - currentScope() { - return this.scopeManager.__currentScope; - } - - close(node) { - while (this.currentScope() && node === this.currentScope().block) { - this.scopeManager.__currentScope = this.currentScope().__close(this.scopeManager); - } - } - - pushInnerMethodDefinition(isInnerMethodDefinition) { - const previous = this.isInnerMethodDefinition; - - this.isInnerMethodDefinition = isInnerMethodDefinition; - return previous; - } - - popInnerMethodDefinition(isInnerMethodDefinition) { - this.isInnerMethodDefinition = isInnerMethodDefinition; - } - - materializeTDZScope(node, iterationNode) { - - // http://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-forin-div-ofexpressionevaluation-abstract-operation - // TDZ scope hides the declaration's names. - this.scopeManager.__nestTDZScope(node, iterationNode); - this.visitVariableDeclaration(this.currentScope(), Variable.TDZ, iterationNode.left, 0, true); - } - - materializeIterationScope(node) { - - // Generate iteration scope for upper ForIn/ForOf Statements. - const letOrConstDecl = node.left; - - this.scopeManager.__nestForScope(node); - this.visitVariableDeclaration(this.currentScope(), Variable.Variable, letOrConstDecl, 0); - this.visitPattern(letOrConstDecl.declarations[0].id, pattern => { - this.currentScope().__referencing(pattern, Reference.WRITE, node.right, null, true, true); - }); - } - - referencingDefaultValue(pattern, assignments, maybeImplicitGlobal, init) { - const scope = this.currentScope(); - - assignments.forEach(assignment => { - scope.__referencing( - pattern, - Reference.WRITE, - assignment.right, - maybeImplicitGlobal, - pattern !== assignment.left, - init); - }); - } - - visitPattern(node, options, callback) { - if (typeof options === "function") { - callback = options; - options = { processRightHandNodes: false }; - } - traverseIdentifierInPattern( - this.options, - node, - options.processRightHandNodes ? this : null, - callback); - } - - visitFunction(node) { - let i, iz; - - // FunctionDeclaration name is defined in upper scope - // NOTE: Not referring variableScope. It is intended. - // Since - // in ES5, FunctionDeclaration should be in FunctionBody. - // in ES6, FunctionDeclaration should be block scoped. - - if (node.type === Syntax.FunctionDeclaration) { - - // id is defined in upper scope - this.currentScope().__define(node.id, - new Definition( - Variable.FunctionName, - node.id, - node, - null, - null, - null - )); - } - - // FunctionExpression with name creates its special scope; - // FunctionExpressionNameScope. - if (node.type === Syntax.FunctionExpression && node.id) { - this.scopeManager.__nestFunctionExpressionNameScope(node); - } - - // Consider this function is in the MethodDefinition. - this.scopeManager.__nestFunctionScope(node, this.isInnerMethodDefinition); - - const that = this; - - /** - * Visit pattern callback - * @param {pattern} pattern - pattern - * @param {Object} info - info - * @returns {void} - */ - function visitPatternCallback(pattern, info) { - that.currentScope().__define(pattern, - new ParameterDefinition( - pattern, - node, - i, - info.rest - )); - - that.referencingDefaultValue(pattern, info.assignments, null, true); - } - - // Process parameter declarations. - for (i = 0, iz = node.params.length; i < iz; ++i) { - this.visitPattern(node.params[i], { processRightHandNodes: true }, visitPatternCallback); - } - - // if there's a rest argument, add that - if (node.rest) { - this.visitPattern({ - type: "RestElement", - argument: node.rest - }, pattern => { - this.currentScope().__define(pattern, - new ParameterDefinition( - pattern, - node, - node.params.length, - true - )); - }); - } - - // In TypeScript there are a number of function-like constructs which have no body, - // so check it exists before traversing - if (node.body) { - - // Skip BlockStatement to prevent creating BlockStatement scope. - if (node.body.type === Syntax.BlockStatement) { - this.visitChildren(node.body); - } else { - this.visit(node.body); - } - } - - this.close(node); - } - - visitClass(node) { - if (node.type === Syntax.ClassDeclaration) { - this.currentScope().__define(node.id, - new Definition( - Variable.ClassName, - node.id, - node, - null, - null, - null - )); - } - - // FIXME: Maybe consider TDZ. - this.visit(node.superClass); - - this.scopeManager.__nestClassScope(node); - - if (node.id) { - this.currentScope().__define(node.id, - new Definition( - Variable.ClassName, - node.id, - node - )); - } - this.visit(node.body); - - this.close(node); - } - - visitProperty(node) { - let previous; - - if (node.computed) { - this.visit(node.key); - } - - const isMethodDefinition = node.type === Syntax.MethodDefinition; - - if (isMethodDefinition) { - previous = this.pushInnerMethodDefinition(true); - } - this.visit(node.value); - if (isMethodDefinition) { - this.popInnerMethodDefinition(previous); - } - } - - visitForIn(node) { - if (node.left.type === Syntax.VariableDeclaration && node.left.kind !== "var") { - this.materializeTDZScope(node.right, node); - this.visit(node.right); - this.close(node.right); - - this.materializeIterationScope(node); - this.visit(node.body); - this.close(node); - } else { - if (node.left.type === Syntax.VariableDeclaration) { - this.visit(node.left); - this.visitPattern(node.left.declarations[0].id, pattern => { - this.currentScope().__referencing(pattern, Reference.WRITE, node.right, null, true, true); - }); - } else { - this.visitPattern(node.left, { processRightHandNodes: true }, (pattern, info) => { - let maybeImplicitGlobal = null; - - if (!this.currentScope().isStrict) { - maybeImplicitGlobal = { - pattern, - node - }; - } - this.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false); - this.currentScope().__referencing(pattern, Reference.WRITE, node.right, maybeImplicitGlobal, true, false); - }); - } - this.visit(node.right); - this.visit(node.body); - } - } - - visitVariableDeclaration(variableTargetScope, type, node, index, fromTDZ) { - - // If this was called to initialize a TDZ scope, this needs to make definitions, but doesn't make references. - const decl = node.declarations[index]; - const init = decl.init; - - this.visitPattern(decl.id, { processRightHandNodes: !fromTDZ }, (pattern, info) => { - variableTargetScope.__define(pattern, - new Definition( - type, - pattern, - decl, - node, - index, - node.kind - )); - - if (!fromTDZ) { - this.referencingDefaultValue(pattern, info.assignments, null, true); - } - if (init) { - this.currentScope().__referencing(pattern, Reference.WRITE, init, null, !info.topLevel, true); - } - }); - } - - AssignmentExpression(node) { - if (PatternVisitor.isPattern(node.left)) { - if (node.operator === "=") { - this.visitPattern(node.left, { processRightHandNodes: true }, (pattern, info) => { - let maybeImplicitGlobal = null; - - if (!this.currentScope().isStrict) { - maybeImplicitGlobal = { - pattern, - node - }; - } - this.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false); - this.currentScope().__referencing(pattern, Reference.WRITE, node.right, maybeImplicitGlobal, !info.topLevel, false); - }); - } else { - this.currentScope().__referencing(node.left, Reference.RW, node.right); - } - } else { - this.visit(node.left); - } - this.visit(node.right); - } - - CatchClause(node) { - this.scopeManager.__nestCatchScope(node); - - this.visitPattern(node.param, { processRightHandNodes: true }, (pattern, info) => { - this.currentScope().__define(pattern, - new Definition( - Variable.CatchClause, - node.param, - node, - null, - null, - null - )); - this.referencingDefaultValue(pattern, info.assignments, null, true); - }); - this.visit(node.body); - - this.close(node); - } - - Program(node) { - this.scopeManager.__nestGlobalScope(node); - - if (this.scopeManager.__isNodejsScope()) { - - // Force strictness of GlobalScope to false when using node.js scope. - this.currentScope().isStrict = false; - this.scopeManager.__nestFunctionScope(node, false); - } - - if (this.scopeManager.__isES6() && this.scopeManager.isModule()) { - this.scopeManager.__nestModuleScope(node); - } - - if (this.scopeManager.isStrictModeSupported() && this.scopeManager.isImpliedStrict()) { - this.currentScope().isStrict = true; - } - - this.visitChildren(node); - this.close(node); - } - - Identifier(node) { - this.currentScope().__referencing(node); - } - - UpdateExpression(node) { - if (PatternVisitor.isPattern(node.argument)) { - this.currentScope().__referencing(node.argument, Reference.RW, null); - } else { - this.visitChildren(node); - } - } - - MemberExpression(node) { - this.visit(node.object); - if (node.computed) { - this.visit(node.property); - } - } - - Property(node) { - this.visitProperty(node); - } - - MethodDefinition(node) { - this.visitProperty(node); - } - - BreakStatement() {} // eslint-disable-line class-methods-use-this - - ContinueStatement() {} // eslint-disable-line class-methods-use-this - - LabeledStatement(node) { - this.visit(node.body); - } - - ForStatement(node) { - - // Create ForStatement declaration. - // NOTE: In ES6, ForStatement dynamically generates - // per iteration environment. However, escope is - // a static analyzer, we only generate one scope for ForStatement. - if (node.init && node.init.type === Syntax.VariableDeclaration && node.init.kind !== "var") { - this.scopeManager.__nestForScope(node); - } - - this.visitChildren(node); - - this.close(node); - } - - ClassExpression(node) { - this.visitClass(node); - } - - ClassDeclaration(node) { - this.visitClass(node); - } - - CallExpression(node) { - - // Check this is direct call to eval - if (!this.scopeManager.__ignoreEval() && node.callee.type === Syntax.Identifier && node.callee.name === "eval") { - - // NOTE: This should be `variableScope`. Since direct eval call always creates Lexical environment and - // let / const should be enclosed into it. Only VariableDeclaration affects on the caller's environment. - this.currentScope().variableScope.__detectEval(); - } - this.visitChildren(node); - } - - BlockStatement(node) { - if (this.scopeManager.__isES6()) { - this.scopeManager.__nestBlockScope(node); - } - - this.visitChildren(node); - - this.close(node); - } - - ThisExpression() { - this.currentScope().variableScope.__detectThis(); - } - - WithStatement(node) { - this.visit(node.object); - - // Then nest scope for WithStatement. - this.scopeManager.__nestWithScope(node); - - this.visit(node.body); - - this.close(node); - } - - VariableDeclaration(node) { - const variableTargetScope = (node.kind === "var") ? this.currentScope().variableScope : this.currentScope(); - - for (let i = 0, iz = node.declarations.length; i < iz; ++i) { - const decl = node.declarations[i]; - - this.visitVariableDeclaration(variableTargetScope, Variable.Variable, node, i); - if (decl.init) { - this.visit(decl.init); - } - } - } - - // sec 13.11.8 - SwitchStatement(node) { - this.visit(node.discriminant); - - if (this.scopeManager.__isES6()) { - this.scopeManager.__nestSwitchScope(node); - } - - for (let i = 0, iz = node.cases.length; i < iz; ++i) { - this.visit(node.cases[i]); - } - - this.close(node); - } - - FunctionDeclaration(node) { - this.visitFunction(node); - } - - FunctionExpression(node) { - this.visitFunction(node); - } - - ForOfStatement(node) { - this.visitForIn(node); - } - - ForInStatement(node) { - this.visitForIn(node); - } - - ArrowFunctionExpression(node) { - this.visitFunction(node); - } - - ImportDeclaration(node) { - assert(this.scopeManager.__isES6() && this.scopeManager.isModule(), "ImportDeclaration should appear when the mode is ES6 and in the module context."); - - const importer = new Importer(node, this); - - importer.visit(node); - } - - visitExportDeclaration(node) { - if (node.source) { - return; - } - if (node.declaration) { - this.visit(node.declaration); - return; - } - - this.visitChildren(node); - } - - ExportDeclaration(node) { - this.visitExportDeclaration(node); - } - - ExportNamedDeclaration(node) { - this.visitExportDeclaration(node); - } - - ExportSpecifier(node) { - const local = (node.id || node.local); - - this.visit(local); - } - - MetaProperty() { // eslint-disable-line class-methods-use-this - - // do nothing. - } -} - -module.exports = Referencer; - -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/eslint-scope/lib/scope-manager.js b/node_modules/eslint-scope/lib/scope-manager.js deleted file mode 100644 index 0cc75a0..0000000 --- a/node_modules/eslint-scope/lib/scope-manager.js +++ /dev/null @@ -1,255 +0,0 @@ -/* - Copyright (C) 2015 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -"use strict"; - -/* eslint-disable no-underscore-dangle */ - -const Scope = require("./scope"); -const assert = require("assert"); - -const GlobalScope = Scope.GlobalScope; -const CatchScope = Scope.CatchScope; -const WithScope = Scope.WithScope; -const ModuleScope = Scope.ModuleScope; -const ClassScope = Scope.ClassScope; -const SwitchScope = Scope.SwitchScope; -const FunctionScope = Scope.FunctionScope; -const ForScope = Scope.ForScope; -const TDZScope = Scope.TDZScope; -const FunctionExpressionNameScope = Scope.FunctionExpressionNameScope; -const BlockScope = Scope.BlockScope; - -/** - * @class ScopeManager - */ -class ScopeManager { - constructor(options) { - this.scopes = []; - this.globalScope = null; - this.__nodeToScope = new WeakMap(); - this.__currentScope = null; - this.__options = options; - this.__declaredVariables = new WeakMap(); - } - - __useDirective() { - return this.__options.directive; - } - - __isOptimistic() { - return this.__options.optimistic; - } - - __ignoreEval() { - return this.__options.ignoreEval; - } - - __isNodejsScope() { - return this.__options.nodejsScope; - } - - isModule() { - return this.__options.sourceType === "module"; - } - - isImpliedStrict() { - return this.__options.impliedStrict; - } - - isStrictModeSupported() { - return this.__options.ecmaVersion >= 5; - } - - // Returns appropriate scope for this node. - __get(node) { - return this.__nodeToScope.get(node); - } - - /** - * Get variables that are declared by the node. - * - * "are declared by the node" means the node is same as `Variable.defs[].node` or `Variable.defs[].parent`. - * If the node declares nothing, this method returns an empty array. - * CAUTION: This API is experimental. See https://github.com/estools/escope/pull/69 for more details. - * - * @param {Espree.Node} node - a node to get. - * @returns {Variable[]} variables that declared by the node. - */ - getDeclaredVariables(node) { - return this.__declaredVariables.get(node) || []; - } - - /** - * acquire scope from node. - * @method ScopeManager#acquire - * @param {Espree.Node} node - node for the acquired scope. - * @param {boolean=} inner - look up the most inner scope, default value is false. - * @returns {Scope?} Scope from node - */ - acquire(node, inner) { - - /** - * predicate - * @param {Scope} testScope - scope to test - * @returns {boolean} predicate - */ - function predicate(testScope) { - if (testScope.type === "function" && testScope.functionExpressionScope) { - return false; - } - if (testScope.type === "TDZ") { - return false; - } - return true; - } - - const scopes = this.__get(node); - - if (!scopes || scopes.length === 0) { - return null; - } - - // Heuristic selection from all scopes. - // If you would like to get all scopes, please use ScopeManager#acquireAll. - if (scopes.length === 1) { - return scopes[0]; - } - - if (inner) { - for (let i = scopes.length - 1; i >= 0; --i) { - const scope = scopes[i]; - - if (predicate(scope)) { - return scope; - } - } - } else { - for (let i = 0, iz = scopes.length; i < iz; ++i) { - const scope = scopes[i]; - - if (predicate(scope)) { - return scope; - } - } - } - - return null; - } - - /** - * acquire all scopes from node. - * @method ScopeManager#acquireAll - * @param {Espree.Node} node - node for the acquired scope. - * @returns {Scopes?} Scope array - */ - acquireAll(node) { - return this.__get(node); - } - - /** - * release the node. - * @method ScopeManager#release - * @param {Espree.Node} node - releasing node. - * @param {boolean=} inner - look up the most inner scope, default value is false. - * @returns {Scope?} upper scope for the node. - */ - release(node, inner) { - const scopes = this.__get(node); - - if (scopes && scopes.length) { - const scope = scopes[0].upper; - - if (!scope) { - return null; - } - return this.acquire(scope.block, inner); - } - return null; - } - - attach() { } // eslint-disable-line class-methods-use-this - - detach() { } // eslint-disable-line class-methods-use-this - - __nestScope(scope) { - if (scope instanceof GlobalScope) { - assert(this.__currentScope === null); - this.globalScope = scope; - } - this.__currentScope = scope; - return scope; - } - - __nestGlobalScope(node) { - return this.__nestScope(new GlobalScope(this, node)); - } - - __nestBlockScope(node) { - return this.__nestScope(new BlockScope(this, this.__currentScope, node)); - } - - __nestFunctionScope(node, isMethodDefinition) { - return this.__nestScope(new FunctionScope(this, this.__currentScope, node, isMethodDefinition)); - } - - __nestForScope(node) { - return this.__nestScope(new ForScope(this, this.__currentScope, node)); - } - - __nestCatchScope(node) { - return this.__nestScope(new CatchScope(this, this.__currentScope, node)); - } - - __nestWithScope(node) { - return this.__nestScope(new WithScope(this, this.__currentScope, node)); - } - - __nestClassScope(node) { - return this.__nestScope(new ClassScope(this, this.__currentScope, node)); - } - - __nestSwitchScope(node) { - return this.__nestScope(new SwitchScope(this, this.__currentScope, node)); - } - - __nestModuleScope(node) { - return this.__nestScope(new ModuleScope(this, this.__currentScope, node)); - } - - __nestTDZScope(node) { - return this.__nestScope(new TDZScope(this, this.__currentScope, node)); - } - - __nestFunctionExpressionNameScope(node) { - return this.__nestScope(new FunctionExpressionNameScope(this, this.__currentScope, node)); - } - - __isES6() { - return this.__options.ecmaVersion >= 6; - } -} - -module.exports = ScopeManager; - -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/eslint-scope/lib/scope.js b/node_modules/eslint-scope/lib/scope.js deleted file mode 100644 index 3307a36..0000000 --- a/node_modules/eslint-scope/lib/scope.js +++ /dev/null @@ -1,722 +0,0 @@ -/* - Copyright (C) 2015 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -"use strict"; - -/* eslint-disable no-underscore-dangle */ -/* eslint-disable no-undefined */ - -const Syntax = require("estraverse").Syntax; - -const Reference = require("./reference"); -const Variable = require("./variable"); -const Definition = require("./definition").Definition; -const assert = require("assert"); - -/** - * Test if scope is struct - * @param {Scope} scope - scope - * @param {Block} block - block - * @param {boolean} isMethodDefinition - is method definiton - * @param {boolean} useDirective - use directive - * @returns {boolean} is strict scope - */ -function isStrictScope(scope, block, isMethodDefinition, useDirective) { - let body; - - // When upper scope is exists and strict, inner scope is also strict. - if (scope.upper && scope.upper.isStrict) { - return true; - } - - // ArrowFunctionExpression's scope is always strict scope. - if (block.type === Syntax.ArrowFunctionExpression) { - return true; - } - - if (isMethodDefinition) { - return true; - } - - if (scope.type === "class" || scope.type === "module") { - return true; - } - - if (scope.type === "block" || scope.type === "switch") { - return false; - } - - if (scope.type === "function") { - if (block.type === Syntax.Program) { - body = block; - } else { - body = block.body; - } - - if (!body) { - return false; - } - } else if (scope.type === "global") { - body = block; - } else { - return false; - } - - // Search 'use strict' directive. - if (useDirective) { - for (let i = 0, iz = body.body.length; i < iz; ++i) { - const stmt = body.body[i]; - - if (stmt.type !== Syntax.DirectiveStatement) { - break; - } - if (stmt.raw === "\"use strict\"" || stmt.raw === "'use strict'") { - return true; - } - } - } else { - for (let i = 0, iz = body.body.length; i < iz; ++i) { - const stmt = body.body[i]; - - if (stmt.type !== Syntax.ExpressionStatement) { - break; - } - const expr = stmt.expression; - - if (expr.type !== Syntax.Literal || typeof expr.value !== "string") { - break; - } - if (expr.raw !== null && expr.raw !== undefined) { - if (expr.raw === "\"use strict\"" || expr.raw === "'use strict'") { - return true; - } - } else { - if (expr.value === "use strict") { - return true; - } - } - } - } - return false; -} - -/** - * Register scope - * @param {ScopeManager} scopeManager - scope manager - * @param {Scope} scope - scope - * @returns {void} - */ -function registerScope(scopeManager, scope) { - scopeManager.scopes.push(scope); - - const scopes = scopeManager.__nodeToScope.get(scope.block); - - if (scopes) { - scopes.push(scope); - } else { - scopeManager.__nodeToScope.set(scope.block, [scope]); - } -} - -/** - * Should be statically - * @param {Object} def - def - * @returns {boolean} should be statically - */ -function shouldBeStatically(def) { - return ( - (def.type === Variable.ClassName) || - (def.type === Variable.Variable && def.parent.kind !== "var") - ); -} - -/** - * @class Scope - */ -class Scope { - constructor(scopeManager, type, upperScope, block, isMethodDefinition) { - - /** - * One of 'TDZ', 'module', 'block', 'switch', 'function', 'catch', 'with', 'function', 'class', 'global'. - * @member {String} Scope#type - */ - this.type = type; - - /** - * The scoped {@link Variable}s of this scope, as { Variable.name - * : Variable }. - * @member {Map} Scope#set - */ - this.set = new Map(); - - /** - * The tainted variables of this scope, as { Variable.name : - * boolean }. - * @member {Map} Scope#taints */ - this.taints = new Map(); - - /** - * Generally, through the lexical scoping of JS you can always know - * which variable an identifier in the source code refers to. There are - * a few exceptions to this rule. With 'global' and 'with' scopes you - * can only decide at runtime which variable a reference refers to. - * Moreover, if 'eval()' is used in a scope, it might introduce new - * bindings in this or its parent scopes. - * All those scopes are considered 'dynamic'. - * @member {boolean} Scope#dynamic - */ - this.dynamic = this.type === "global" || this.type === "with"; - - /** - * A reference to the scope-defining syntax node. - * @member {espree.Node} Scope#block - */ - this.block = block; - - /** - * The {@link Reference|references} that are not resolved with this scope. - * @member {Reference[]} Scope#through - */ - this.through = []; - - /** - * The scoped {@link Variable}s of this scope. In the case of a - * 'function' scope this includes the automatic argument arguments as - * its first element, as well as all further formal arguments. - * @member {Variable[]} Scope#variables - */ - this.variables = []; - - /** - * Any variable {@link Reference|reference} found in this scope. This - * includes occurrences of local variables as well as variables from - * parent scopes (including the global scope). For local variables - * this also includes defining occurrences (like in a 'var' statement). - * In a 'function' scope this does not include the occurrences of the - * formal parameter in the parameter list. - * @member {Reference[]} Scope#references - */ - this.references = []; - - /** - * For 'global' and 'function' scopes, this is a self-reference. For - * other scope types this is the variableScope value of the - * parent scope. - * @member {Scope} Scope#variableScope - */ - this.variableScope = - (this.type === "global" || this.type === "function" || this.type === "module") ? this : upperScope.variableScope; - - /** - * Whether this scope is created by a FunctionExpression. - * @member {boolean} Scope#functionExpressionScope - */ - this.functionExpressionScope = false; - - /** - * Whether this is a scope that contains an 'eval()' invocation. - * @member {boolean} Scope#directCallToEvalScope - */ - this.directCallToEvalScope = false; - - /** - * @member {boolean} Scope#thisFound - */ - this.thisFound = false; - - this.__left = []; - - /** - * Reference to the parent {@link Scope|scope}. - * @member {Scope} Scope#upper - */ - this.upper = upperScope; - - /** - * Whether 'use strict' is in effect in this scope. - * @member {boolean} Scope#isStrict - */ - this.isStrict = isStrictScope(this, block, isMethodDefinition, scopeManager.__useDirective()); - - /** - * List of nested {@link Scope}s. - * @member {Scope[]} Scope#childScopes - */ - this.childScopes = []; - if (this.upper) { - this.upper.childScopes.push(this); - } - - this.__declaredVariables = scopeManager.__declaredVariables; - - registerScope(scopeManager, this); - } - - __shouldStaticallyClose(scopeManager) { - return (!this.dynamic || scopeManager.__isOptimistic()); - } - - __shouldStaticallyCloseForGlobal(ref) { - - // On global scope, let/const/class declarations should be resolved statically. - const name = ref.identifier.name; - - if (!this.set.has(name)) { - return false; - } - - const variable = this.set.get(name); - const defs = variable.defs; - - return defs.length > 0 && defs.every(shouldBeStatically); - } - - __staticCloseRef(ref) { - if (!this.__resolve(ref)) { - this.__delegateToUpperScope(ref); - } - } - - __dynamicCloseRef(ref) { - - // notify all names are through to global - let current = this; - - do { - current.through.push(ref); - current = current.upper; - } while (current); - } - - __globalCloseRef(ref) { - - // let/const/class declarations should be resolved statically. - // others should be resolved dynamically. - if (this.__shouldStaticallyCloseForGlobal(ref)) { - this.__staticCloseRef(ref); - } else { - this.__dynamicCloseRef(ref); - } - } - - __close(scopeManager) { - let closeRef; - - if (this.__shouldStaticallyClose(scopeManager)) { - closeRef = this.__staticCloseRef; - } else if (this.type !== "global") { - closeRef = this.__dynamicCloseRef; - } else { - closeRef = this.__globalCloseRef; - } - - // Try Resolving all references in this scope. - for (let i = 0, iz = this.__left.length; i < iz; ++i) { - const ref = this.__left[i]; - - closeRef.call(this, ref); - } - this.__left = null; - - return this.upper; - } - - __resolve(ref) { - const name = ref.identifier.name; - - if (this.set.has(name)) { - const variable = this.set.get(name); - - variable.references.push(ref); - variable.stack = variable.stack && ref.from.variableScope === this.variableScope; - if (ref.tainted) { - variable.tainted = true; - this.taints.set(variable.name, true); - } - ref.resolved = variable; - return true; - } - return false; - } - - __delegateToUpperScope(ref) { - if (this.upper) { - this.upper.__left.push(ref); - } - this.through.push(ref); - } - - __addDeclaredVariablesOfNode(variable, node) { - if (node === null || node === undefined) { - return; - } - - let variables = this.__declaredVariables.get(node); - - if (variables === null || variables === undefined) { - variables = []; - this.__declaredVariables.set(node, variables); - } - if (variables.indexOf(variable) === -1) { - variables.push(variable); - } - } - - __defineGeneric(name, set, variables, node, def) { - let variable; - - variable = set.get(name); - if (!variable) { - variable = new Variable(name, this); - set.set(name, variable); - variables.push(variable); - } - - if (def) { - variable.defs.push(def); - if (def.type !== Variable.TDZ) { - this.__addDeclaredVariablesOfNode(variable, def.node); - this.__addDeclaredVariablesOfNode(variable, def.parent); - } - } - if (node) { - variable.identifiers.push(node); - } - } - - __define(node, def) { - if (node && node.type === Syntax.Identifier) { - this.__defineGeneric( - node.name, - this.set, - this.variables, - node, - def); - } - } - - __referencing(node, assign, writeExpr, maybeImplicitGlobal, partial, init) { - - // because Array element may be null - if (!node || node.type !== Syntax.Identifier) { - return; - } - - // Specially handle like `this`. - if (node.name === "super") { - return; - } - - const ref = new Reference(node, this, assign || Reference.READ, writeExpr, maybeImplicitGlobal, !!partial, !!init); - - this.references.push(ref); - this.__left.push(ref); - } - - __detectEval() { - let current = this; - - this.directCallToEvalScope = true; - do { - current.dynamic = true; - current = current.upper; - } while (current); - } - - __detectThis() { - this.thisFound = true; - } - - __isClosed() { - return this.__left === null; - } - - /** - * returns resolved {Reference} - * @method Scope#resolve - * @param {Espree.Identifier} ident - identifier to be resolved. - * @returns {Reference} reference - */ - resolve(ident) { - let ref, i, iz; - - assert(this.__isClosed(), "Scope should be closed."); - assert(ident.type === Syntax.Identifier, "Target should be identifier."); - for (i = 0, iz = this.references.length; i < iz; ++i) { - ref = this.references[i]; - if (ref.identifier === ident) { - return ref; - } - } - return null; - } - - /** - * returns this scope is static - * @method Scope#isStatic - * @returns {boolean} static - */ - isStatic() { - return !this.dynamic; - } - - /** - * returns this scope has materialized arguments - * @method Scope#isArgumentsMaterialized - * @returns {boolean} arguemnts materialized - */ - isArgumentsMaterialized() { // eslint-disable-line class-methods-use-this - return true; - } - - /** - * returns this scope has materialized `this` reference - * @method Scope#isThisMaterialized - * @returns {boolean} this materialized - */ - isThisMaterialized() { // eslint-disable-line class-methods-use-this - return true; - } - - isUsedName(name) { - if (this.set.has(name)) { - return true; - } - for (let i = 0, iz = this.through.length; i < iz; ++i) { - if (this.through[i].identifier.name === name) { - return true; - } - } - return false; - } -} - -class GlobalScope extends Scope { - constructor(scopeManager, block) { - super(scopeManager, "global", null, block, false); - this.implicit = { - set: new Map(), - variables: [], - - /** - * List of {@link Reference}s that are left to be resolved (i.e. which - * need to be linked to the variable they refer to). - * @member {Reference[]} Scope#implicit#left - */ - left: [] - }; - } - - __close(scopeManager) { - const implicit = []; - - for (let i = 0, iz = this.__left.length; i < iz; ++i) { - const ref = this.__left[i]; - - if (ref.__maybeImplicitGlobal && !this.set.has(ref.identifier.name)) { - implicit.push(ref.__maybeImplicitGlobal); - } - } - - // create an implicit global variable from assignment expression - for (let i = 0, iz = implicit.length; i < iz; ++i) { - const info = implicit[i]; - - this.__defineImplicit(info.pattern, - new Definition( - Variable.ImplicitGlobalVariable, - info.pattern, - info.node, - null, - null, - null - )); - - } - - this.implicit.left = this.__left; - - return super.__close(scopeManager); - } - - __defineImplicit(node, def) { - if (node && node.type === Syntax.Identifier) { - this.__defineGeneric( - node.name, - this.implicit.set, - this.implicit.variables, - node, - def); - } - } -} - -class ModuleScope extends Scope { - constructor(scopeManager, upperScope, block) { - super(scopeManager, "module", upperScope, block, false); - } -} - -class FunctionExpressionNameScope extends Scope { - constructor(scopeManager, upperScope, block) { - super(scopeManager, "function-expression-name", upperScope, block, false); - this.__define(block.id, - new Definition( - Variable.FunctionName, - block.id, - block, - null, - null, - null - )); - this.functionExpressionScope = true; - } -} - -class CatchScope extends Scope { - constructor(scopeManager, upperScope, block) { - super(scopeManager, "catch", upperScope, block, false); - } -} - -class WithScope extends Scope { - constructor(scopeManager, upperScope, block) { - super(scopeManager, "with", upperScope, block, false); - } - - __close(scopeManager) { - if (this.__shouldStaticallyClose(scopeManager)) { - return super.__close(scopeManager); - } - - for (let i = 0, iz = this.__left.length; i < iz; ++i) { - const ref = this.__left[i]; - - ref.tainted = true; - this.__delegateToUpperScope(ref); - } - this.__left = null; - - return this.upper; - } -} - -class TDZScope extends Scope { - constructor(scopeManager, upperScope, block) { - super(scopeManager, "TDZ", upperScope, block, false); - } -} - -class BlockScope extends Scope { - constructor(scopeManager, upperScope, block) { - super(scopeManager, "block", upperScope, block, false); - } -} - -class SwitchScope extends Scope { - constructor(scopeManager, upperScope, block) { - super(scopeManager, "switch", upperScope, block, false); - } -} - -class FunctionScope extends Scope { - constructor(scopeManager, upperScope, block, isMethodDefinition) { - super(scopeManager, "function", upperScope, block, isMethodDefinition); - - // section 9.2.13, FunctionDeclarationInstantiation. - // NOTE Arrow functions never have an arguments objects. - if (this.block.type !== Syntax.ArrowFunctionExpression) { - this.__defineArguments(); - } - } - - isArgumentsMaterialized() { - - // TODO(Constellation) - // We can more aggressive on this condition like this. - // - // function t() { - // // arguments of t is always hidden. - // function arguments() { - // } - // } - if (this.block.type === Syntax.ArrowFunctionExpression) { - return false; - } - - if (!this.isStatic()) { - return true; - } - - const variable = this.set.get("arguments"); - - assert(variable, "Always have arguments variable."); - return variable.tainted || variable.references.length !== 0; - } - - isThisMaterialized() { - if (!this.isStatic()) { - return true; - } - return this.thisFound; - } - - __defineArguments() { - this.__defineGeneric( - "arguments", - this.set, - this.variables, - null, - null); - this.taints.set("arguments", true); - } -} - -class ForScope extends Scope { - constructor(scopeManager, upperScope, block) { - super(scopeManager, "for", upperScope, block, false); - } -} - -class ClassScope extends Scope { - constructor(scopeManager, upperScope, block) { - super(scopeManager, "class", upperScope, block, false); - } -} - -module.exports = { - Scope, - GlobalScope, - ModuleScope, - FunctionExpressionNameScope, - CatchScope, - WithScope, - TDZScope, - BlockScope, - SwitchScope, - FunctionScope, - ForScope, - ClassScope -}; - -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/eslint-scope/lib/variable.js b/node_modules/eslint-scope/lib/variable.js deleted file mode 100644 index 6373209..0000000 --- a/node_modules/eslint-scope/lib/variable.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright (C) 2015 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -"use strict"; - -/** - * A Variable represents a locally scoped identifier. These include arguments to - * functions. - * @class Variable - */ -class Variable { - constructor(name, scope) { - - /** - * The variable name, as given in the source code. - * @member {String} Variable#name - */ - this.name = name; - - /** - * List of defining occurrences of this variable (like in 'var ...' - * statements or as parameter), as AST nodes. - * @member {espree.Identifier[]} Variable#identifiers - */ - this.identifiers = []; - - /** - * List of {@link Reference|references} of this variable (excluding parameter entries) - * in its defining scope and all nested scopes. For defining - * occurrences only see {@link Variable#defs}. - * @member {Reference[]} Variable#references - */ - this.references = []; - - /** - * List of defining occurrences of this variable (like in 'var ...' - * statements or as parameter), as custom objects. - * @member {Definition[]} Variable#defs - */ - this.defs = []; - - this.tainted = false; - - /** - * Whether this is a stack variable. - * @member {boolean} Variable#stack - */ - this.stack = true; - - /** - * Reference to the enclosing Scope. - * @member {Scope} Variable#scope - */ - this.scope = scope; - } -} - -Variable.CatchClause = "CatchClause"; -Variable.Parameter = "Parameter"; -Variable.FunctionName = "FunctionName"; -Variable.ClassName = "ClassName"; -Variable.Variable = "Variable"; -Variable.ImportBinding = "ImportBinding"; -Variable.TDZ = "TDZ"; -Variable.ImplicitGlobalVariable = "ImplicitGlobalVariable"; - -module.exports = Variable; - -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/eslint-scope/node_modules/estraverse/.jshintrc b/node_modules/eslint-scope/node_modules/estraverse/.jshintrc deleted file mode 100644 index f642dae..0000000 --- a/node_modules/eslint-scope/node_modules/estraverse/.jshintrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "curly": true, - "eqeqeq": true, - "immed": true, - "eqnull": true, - "latedef": true, - "noarg": true, - "noempty": true, - "quotmark": "single", - "undef": true, - "unused": true, - "strict": true, - "trailing": true, - - "node": true -} diff --git a/node_modules/eslint-scope/node_modules/estraverse/LICENSE.BSD b/node_modules/eslint-scope/node_modules/estraverse/LICENSE.BSD deleted file mode 100644 index 3e580c3..0000000 --- a/node_modules/eslint-scope/node_modules/estraverse/LICENSE.BSD +++ /dev/null @@ -1,19 +0,0 @@ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/eslint-scope/node_modules/estraverse/README.md b/node_modules/eslint-scope/node_modules/estraverse/README.md deleted file mode 100644 index ccd3377..0000000 --- a/node_modules/eslint-scope/node_modules/estraverse/README.md +++ /dev/null @@ -1,153 +0,0 @@ -### Estraverse [![Build Status](https://secure.travis-ci.org/estools/estraverse.svg)](http://travis-ci.org/estools/estraverse) - -Estraverse ([estraverse](http://github.com/estools/estraverse)) is -[ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm) -traversal functions from [esmangle project](http://github.com/estools/esmangle). - -### Documentation - -You can find usage docs at [wiki page](https://github.com/estools/estraverse/wiki/Usage). - -### Example Usage - -The following code will output all variables declared at the root of a file. - -```javascript -estraverse.traverse(ast, { - enter: function (node, parent) { - if (node.type == 'FunctionExpression' || node.type == 'FunctionDeclaration') - return estraverse.VisitorOption.Skip; - }, - leave: function (node, parent) { - if (node.type == 'VariableDeclarator') - console.log(node.id.name); - } -}); -``` - -We can use `this.skip`, `this.remove` and `this.break` functions instead of using Skip, Remove and Break. - -```javascript -estraverse.traverse(ast, { - enter: function (node) { - this.break(); - } -}); -``` - -And estraverse provides `estraverse.replace` function. When returning node from `enter`/`leave`, current node is replaced with it. - -```javascript -result = estraverse.replace(tree, { - enter: function (node) { - // Replace it with replaced. - if (node.type === 'Literal') - return replaced; - } -}); -``` - -By passing `visitor.keys` mapping, we can extend estraverse traversing functionality. - -```javascript -// This tree contains a user-defined `TestExpression` node. -var tree = { - type: 'TestExpression', - - // This 'argument' is the property containing the other **node**. - argument: { - type: 'Literal', - value: 20 - }, - - // This 'extended' is the property not containing the other **node**. - extended: true -}; -estraverse.traverse(tree, { - enter: function (node) { }, - - // Extending the existing traversing rules. - keys: { - // TargetNodeName: [ 'keys', 'containing', 'the', 'other', '**node**' ] - TestExpression: ['argument'] - } -}); -``` - -By passing `visitor.fallback` option, we can control the behavior when encountering unknown nodes. - -```javascript -// This tree contains a user-defined `TestExpression` node. -var tree = { - type: 'TestExpression', - - // This 'argument' is the property containing the other **node**. - argument: { - type: 'Literal', - value: 20 - }, - - // This 'extended' is the property not containing the other **node**. - extended: true -}; -estraverse.traverse(tree, { - enter: function (node) { }, - - // Iterating the child **nodes** of unknown nodes. - fallback: 'iteration' -}); -``` - -When `visitor.fallback` is a function, we can determine which keys to visit on each node. - -```javascript -// This tree contains a user-defined `TestExpression` node. -var tree = { - type: 'TestExpression', - - // This 'argument' is the property containing the other **node**. - argument: { - type: 'Literal', - value: 20 - }, - - // This 'extended' is the property not containing the other **node**. - extended: true -}; -estraverse.traverse(tree, { - enter: function (node) { }, - - // Skip the `argument` property of each node - fallback: function(node) { - return Object.keys(node).filter(function(key) { - return key !== 'argument'; - }); - } -}); -``` - -### License - -Copyright (C) 2012-2016 [Yusuke Suzuki](http://github.com/Constellation) - (twitter: [@Constellation](http://twitter.com/Constellation)) and other contributors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/eslint-scope/node_modules/estraverse/estraverse.js b/node_modules/eslint-scope/node_modules/estraverse/estraverse.js deleted file mode 100644 index b106d38..0000000 --- a/node_modules/eslint-scope/node_modules/estraverse/estraverse.js +++ /dev/null @@ -1,782 +0,0 @@ -/* - Copyright (C) 2012-2013 Yusuke Suzuki - Copyright (C) 2012 Ariya Hidayat - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -/*jslint vars:false, bitwise:true*/ -/*jshint indent:4*/ -/*global exports:true*/ -(function clone(exports) { - 'use strict'; - - var Syntax, - VisitorOption, - VisitorKeys, - BREAK, - SKIP, - REMOVE; - - function deepCopy(obj) { - var ret = {}, key, val; - for (key in obj) { - if (obj.hasOwnProperty(key)) { - val = obj[key]; - if (typeof val === 'object' && val !== null) { - ret[key] = deepCopy(val); - } else { - ret[key] = val; - } - } - } - return ret; - } - - // based on LLVM libc++ upper_bound / lower_bound - // MIT License - - function upperBound(array, func) { - var diff, len, i, current; - - len = array.length; - i = 0; - - while (len) { - diff = len >>> 1; - current = i + diff; - if (func(array[current])) { - len = diff; - } else { - i = current + 1; - len -= diff + 1; - } - } - return i; - } - - Syntax = { - AssignmentExpression: 'AssignmentExpression', - AssignmentPattern: 'AssignmentPattern', - ArrayExpression: 'ArrayExpression', - ArrayPattern: 'ArrayPattern', - ArrowFunctionExpression: 'ArrowFunctionExpression', - AwaitExpression: 'AwaitExpression', // CAUTION: It's deferred to ES7. - BlockStatement: 'BlockStatement', - BinaryExpression: 'BinaryExpression', - BreakStatement: 'BreakStatement', - CallExpression: 'CallExpression', - CatchClause: 'CatchClause', - ClassBody: 'ClassBody', - ClassDeclaration: 'ClassDeclaration', - ClassExpression: 'ClassExpression', - ComprehensionBlock: 'ComprehensionBlock', // CAUTION: It's deferred to ES7. - ComprehensionExpression: 'ComprehensionExpression', // CAUTION: It's deferred to ES7. - ConditionalExpression: 'ConditionalExpression', - ContinueStatement: 'ContinueStatement', - DebuggerStatement: 'DebuggerStatement', - DirectiveStatement: 'DirectiveStatement', - DoWhileStatement: 'DoWhileStatement', - EmptyStatement: 'EmptyStatement', - ExportAllDeclaration: 'ExportAllDeclaration', - ExportDefaultDeclaration: 'ExportDefaultDeclaration', - ExportNamedDeclaration: 'ExportNamedDeclaration', - ExportSpecifier: 'ExportSpecifier', - ExpressionStatement: 'ExpressionStatement', - ForStatement: 'ForStatement', - ForInStatement: 'ForInStatement', - ForOfStatement: 'ForOfStatement', - FunctionDeclaration: 'FunctionDeclaration', - FunctionExpression: 'FunctionExpression', - GeneratorExpression: 'GeneratorExpression', // CAUTION: It's deferred to ES7. - Identifier: 'Identifier', - IfStatement: 'IfStatement', - ImportExpression: 'ImportExpression', - ImportDeclaration: 'ImportDeclaration', - ImportDefaultSpecifier: 'ImportDefaultSpecifier', - ImportNamespaceSpecifier: 'ImportNamespaceSpecifier', - ImportSpecifier: 'ImportSpecifier', - Literal: 'Literal', - LabeledStatement: 'LabeledStatement', - LogicalExpression: 'LogicalExpression', - MemberExpression: 'MemberExpression', - MetaProperty: 'MetaProperty', - MethodDefinition: 'MethodDefinition', - ModuleSpecifier: 'ModuleSpecifier', - NewExpression: 'NewExpression', - ObjectExpression: 'ObjectExpression', - ObjectPattern: 'ObjectPattern', - Program: 'Program', - Property: 'Property', - RestElement: 'RestElement', - ReturnStatement: 'ReturnStatement', - SequenceExpression: 'SequenceExpression', - SpreadElement: 'SpreadElement', - Super: 'Super', - SwitchStatement: 'SwitchStatement', - SwitchCase: 'SwitchCase', - TaggedTemplateExpression: 'TaggedTemplateExpression', - TemplateElement: 'TemplateElement', - TemplateLiteral: 'TemplateLiteral', - ThisExpression: 'ThisExpression', - ThrowStatement: 'ThrowStatement', - TryStatement: 'TryStatement', - UnaryExpression: 'UnaryExpression', - UpdateExpression: 'UpdateExpression', - VariableDeclaration: 'VariableDeclaration', - VariableDeclarator: 'VariableDeclarator', - WhileStatement: 'WhileStatement', - WithStatement: 'WithStatement', - YieldExpression: 'YieldExpression' - }; - - VisitorKeys = { - AssignmentExpression: ['left', 'right'], - AssignmentPattern: ['left', 'right'], - ArrayExpression: ['elements'], - ArrayPattern: ['elements'], - ArrowFunctionExpression: ['params', 'body'], - AwaitExpression: ['argument'], // CAUTION: It's deferred to ES7. - BlockStatement: ['body'], - BinaryExpression: ['left', 'right'], - BreakStatement: ['label'], - CallExpression: ['callee', 'arguments'], - CatchClause: ['param', 'body'], - ClassBody: ['body'], - ClassDeclaration: ['id', 'superClass', 'body'], - ClassExpression: ['id', 'superClass', 'body'], - ComprehensionBlock: ['left', 'right'], // CAUTION: It's deferred to ES7. - ComprehensionExpression: ['blocks', 'filter', 'body'], // CAUTION: It's deferred to ES7. - ConditionalExpression: ['test', 'consequent', 'alternate'], - ContinueStatement: ['label'], - DebuggerStatement: [], - DirectiveStatement: [], - DoWhileStatement: ['body', 'test'], - EmptyStatement: [], - ExportAllDeclaration: ['source'], - ExportDefaultDeclaration: ['declaration'], - ExportNamedDeclaration: ['declaration', 'specifiers', 'source'], - ExportSpecifier: ['exported', 'local'], - ExpressionStatement: ['expression'], - ForStatement: ['init', 'test', 'update', 'body'], - ForInStatement: ['left', 'right', 'body'], - ForOfStatement: ['left', 'right', 'body'], - FunctionDeclaration: ['id', 'params', 'body'], - FunctionExpression: ['id', 'params', 'body'], - GeneratorExpression: ['blocks', 'filter', 'body'], // CAUTION: It's deferred to ES7. - Identifier: [], - IfStatement: ['test', 'consequent', 'alternate'], - ImportExpression: ['source'], - ImportDeclaration: ['specifiers', 'source'], - ImportDefaultSpecifier: ['local'], - ImportNamespaceSpecifier: ['local'], - ImportSpecifier: ['imported', 'local'], - Literal: [], - LabeledStatement: ['label', 'body'], - LogicalExpression: ['left', 'right'], - MemberExpression: ['object', 'property'], - MetaProperty: ['meta', 'property'], - MethodDefinition: ['key', 'value'], - ModuleSpecifier: [], - NewExpression: ['callee', 'arguments'], - ObjectExpression: ['properties'], - ObjectPattern: ['properties'], - Program: ['body'], - Property: ['key', 'value'], - RestElement: [ 'argument' ], - ReturnStatement: ['argument'], - SequenceExpression: ['expressions'], - SpreadElement: ['argument'], - Super: [], - SwitchStatement: ['discriminant', 'cases'], - SwitchCase: ['test', 'consequent'], - TaggedTemplateExpression: ['tag', 'quasi'], - TemplateElement: [], - TemplateLiteral: ['quasis', 'expressions'], - ThisExpression: [], - ThrowStatement: ['argument'], - TryStatement: ['block', 'handler', 'finalizer'], - UnaryExpression: ['argument'], - UpdateExpression: ['argument'], - VariableDeclaration: ['declarations'], - VariableDeclarator: ['id', 'init'], - WhileStatement: ['test', 'body'], - WithStatement: ['object', 'body'], - YieldExpression: ['argument'] - }; - - // unique id - BREAK = {}; - SKIP = {}; - REMOVE = {}; - - VisitorOption = { - Break: BREAK, - Skip: SKIP, - Remove: REMOVE - }; - - function Reference(parent, key) { - this.parent = parent; - this.key = key; - } - - Reference.prototype.replace = function replace(node) { - this.parent[this.key] = node; - }; - - Reference.prototype.remove = function remove() { - if (Array.isArray(this.parent)) { - this.parent.splice(this.key, 1); - return true; - } else { - this.replace(null); - return false; - } - }; - - function Element(node, path, wrap, ref) { - this.node = node; - this.path = path; - this.wrap = wrap; - this.ref = ref; - } - - function Controller() { } - - // API: - // return property path array from root to current node - Controller.prototype.path = function path() { - var i, iz, j, jz, result, element; - - function addToPath(result, path) { - if (Array.isArray(path)) { - for (j = 0, jz = path.length; j < jz; ++j) { - result.push(path[j]); - } - } else { - result.push(path); - } - } - - // root node - if (!this.__current.path) { - return null; - } - - // first node is sentinel, second node is root element - result = []; - for (i = 2, iz = this.__leavelist.length; i < iz; ++i) { - element = this.__leavelist[i]; - addToPath(result, element.path); - } - addToPath(result, this.__current.path); - return result; - }; - - // API: - // return type of current node - Controller.prototype.type = function () { - var node = this.current(); - return node.type || this.__current.wrap; - }; - - // API: - // return array of parent elements - Controller.prototype.parents = function parents() { - var i, iz, result; - - // first node is sentinel - result = []; - for (i = 1, iz = this.__leavelist.length; i < iz; ++i) { - result.push(this.__leavelist[i].node); - } - - return result; - }; - - // API: - // return current node - Controller.prototype.current = function current() { - return this.__current.node; - }; - - Controller.prototype.__execute = function __execute(callback, element) { - var previous, result; - - result = undefined; - - previous = this.__current; - this.__current = element; - this.__state = null; - if (callback) { - result = callback.call(this, element.node, this.__leavelist[this.__leavelist.length - 1].node); - } - this.__current = previous; - - return result; - }; - - // API: - // notify control skip / break - Controller.prototype.notify = function notify(flag) { - this.__state = flag; - }; - - // API: - // skip child nodes of current node - Controller.prototype.skip = function () { - this.notify(SKIP); - }; - - // API: - // break traversals - Controller.prototype['break'] = function () { - this.notify(BREAK); - }; - - // API: - // remove node - Controller.prototype.remove = function () { - this.notify(REMOVE); - }; - - Controller.prototype.__initialize = function(root, visitor) { - this.visitor = visitor; - this.root = root; - this.__worklist = []; - this.__leavelist = []; - this.__current = null; - this.__state = null; - this.__fallback = null; - if (visitor.fallback === 'iteration') { - this.__fallback = Object.keys; - } else if (typeof visitor.fallback === 'function') { - this.__fallback = visitor.fallback; - } - - this.__keys = VisitorKeys; - if (visitor.keys) { - this.__keys = Object.assign(Object.create(this.__keys), visitor.keys); - } - }; - - function isNode(node) { - if (node == null) { - return false; - } - return typeof node === 'object' && typeof node.type === 'string'; - } - - function isProperty(nodeType, key) { - return (nodeType === Syntax.ObjectExpression || nodeType === Syntax.ObjectPattern) && 'properties' === key; - } - - Controller.prototype.traverse = function traverse(root, visitor) { - var worklist, - leavelist, - element, - node, - nodeType, - ret, - key, - current, - current2, - candidates, - candidate, - sentinel; - - this.__initialize(root, visitor); - - sentinel = {}; - - // reference - worklist = this.__worklist; - leavelist = this.__leavelist; - - // initialize - worklist.push(new Element(root, null, null, null)); - leavelist.push(new Element(null, null, null, null)); - - while (worklist.length) { - element = worklist.pop(); - - if (element === sentinel) { - element = leavelist.pop(); - - ret = this.__execute(visitor.leave, element); - - if (this.__state === BREAK || ret === BREAK) { - return; - } - continue; - } - - if (element.node) { - - ret = this.__execute(visitor.enter, element); - - if (this.__state === BREAK || ret === BREAK) { - return; - } - - worklist.push(sentinel); - leavelist.push(element); - - if (this.__state === SKIP || ret === SKIP) { - continue; - } - - node = element.node; - nodeType = node.type || element.wrap; - candidates = this.__keys[nodeType]; - if (!candidates) { - if (this.__fallback) { - candidates = this.__fallback(node); - } else { - throw new Error('Unknown node type ' + nodeType + '.'); - } - } - - current = candidates.length; - while ((current -= 1) >= 0) { - key = candidates[current]; - candidate = node[key]; - if (!candidate) { - continue; - } - - if (Array.isArray(candidate)) { - current2 = candidate.length; - while ((current2 -= 1) >= 0) { - if (!candidate[current2]) { - continue; - } - if (isProperty(nodeType, candidates[current])) { - element = new Element(candidate[current2], [key, current2], 'Property', null); - } else if (isNode(candidate[current2])) { - element = new Element(candidate[current2], [key, current2], null, null); - } else { - continue; - } - worklist.push(element); - } - } else if (isNode(candidate)) { - worklist.push(new Element(candidate, key, null, null)); - } - } - } - } - }; - - Controller.prototype.replace = function replace(root, visitor) { - var worklist, - leavelist, - node, - nodeType, - target, - element, - current, - current2, - candidates, - candidate, - sentinel, - outer, - key; - - function removeElem(element) { - var i, - key, - nextElem, - parent; - - if (element.ref.remove()) { - // When the reference is an element of an array. - key = element.ref.key; - parent = element.ref.parent; - - // If removed from array, then decrease following items' keys. - i = worklist.length; - while (i--) { - nextElem = worklist[i]; - if (nextElem.ref && nextElem.ref.parent === parent) { - if (nextElem.ref.key < key) { - break; - } - --nextElem.ref.key; - } - } - } - } - - this.__initialize(root, visitor); - - sentinel = {}; - - // reference - worklist = this.__worklist; - leavelist = this.__leavelist; - - // initialize - outer = { - root: root - }; - element = new Element(root, null, null, new Reference(outer, 'root')); - worklist.push(element); - leavelist.push(element); - - while (worklist.length) { - element = worklist.pop(); - - if (element === sentinel) { - element = leavelist.pop(); - - target = this.__execute(visitor.leave, element); - - // node may be replaced with null, - // so distinguish between undefined and null in this place - if (target !== undefined && target !== BREAK && target !== SKIP && target !== REMOVE) { - // replace - element.ref.replace(target); - } - - if (this.__state === REMOVE || target === REMOVE) { - removeElem(element); - } - - if (this.__state === BREAK || target === BREAK) { - return outer.root; - } - continue; - } - - target = this.__execute(visitor.enter, element); - - // node may be replaced with null, - // so distinguish between undefined and null in this place - if (target !== undefined && target !== BREAK && target !== SKIP && target !== REMOVE) { - // replace - element.ref.replace(target); - element.node = target; - } - - if (this.__state === REMOVE || target === REMOVE) { - removeElem(element); - element.node = null; - } - - if (this.__state === BREAK || target === BREAK) { - return outer.root; - } - - // node may be null - node = element.node; - if (!node) { - continue; - } - - worklist.push(sentinel); - leavelist.push(element); - - if (this.__state === SKIP || target === SKIP) { - continue; - } - - nodeType = node.type || element.wrap; - candidates = this.__keys[nodeType]; - if (!candidates) { - if (this.__fallback) { - candidates = this.__fallback(node); - } else { - throw new Error('Unknown node type ' + nodeType + '.'); - } - } - - current = candidates.length; - while ((current -= 1) >= 0) { - key = candidates[current]; - candidate = node[key]; - if (!candidate) { - continue; - } - - if (Array.isArray(candidate)) { - current2 = candidate.length; - while ((current2 -= 1) >= 0) { - if (!candidate[current2]) { - continue; - } - if (isProperty(nodeType, candidates[current])) { - element = new Element(candidate[current2], [key, current2], 'Property', new Reference(candidate, current2)); - } else if (isNode(candidate[current2])) { - element = new Element(candidate[current2], [key, current2], null, new Reference(candidate, current2)); - } else { - continue; - } - worklist.push(element); - } - } else if (isNode(candidate)) { - worklist.push(new Element(candidate, key, null, new Reference(node, key))); - } - } - } - - return outer.root; - }; - - function traverse(root, visitor) { - var controller = new Controller(); - return controller.traverse(root, visitor); - } - - function replace(root, visitor) { - var controller = new Controller(); - return controller.replace(root, visitor); - } - - function extendCommentRange(comment, tokens) { - var target; - - target = upperBound(tokens, function search(token) { - return token.range[0] > comment.range[0]; - }); - - comment.extendedRange = [comment.range[0], comment.range[1]]; - - if (target !== tokens.length) { - comment.extendedRange[1] = tokens[target].range[0]; - } - - target -= 1; - if (target >= 0) { - comment.extendedRange[0] = tokens[target].range[1]; - } - - return comment; - } - - function attachComments(tree, providedComments, tokens) { - // At first, we should calculate extended comment ranges. - var comments = [], comment, len, i, cursor; - - if (!tree.range) { - throw new Error('attachComments needs range information'); - } - - // tokens array is empty, we attach comments to tree as 'leadingComments' - if (!tokens.length) { - if (providedComments.length) { - for (i = 0, len = providedComments.length; i < len; i += 1) { - comment = deepCopy(providedComments[i]); - comment.extendedRange = [0, tree.range[0]]; - comments.push(comment); - } - tree.leadingComments = comments; - } - return tree; - } - - for (i = 0, len = providedComments.length; i < len; i += 1) { - comments.push(extendCommentRange(deepCopy(providedComments[i]), tokens)); - } - - // This is based on John Freeman's implementation. - cursor = 0; - traverse(tree, { - enter: function (node) { - var comment; - - while (cursor < comments.length) { - comment = comments[cursor]; - if (comment.extendedRange[1] > node.range[0]) { - break; - } - - if (comment.extendedRange[1] === node.range[0]) { - if (!node.leadingComments) { - node.leadingComments = []; - } - node.leadingComments.push(comment); - comments.splice(cursor, 1); - } else { - cursor += 1; - } - } - - // already out of owned node - if (cursor === comments.length) { - return VisitorOption.Break; - } - - if (comments[cursor].extendedRange[0] > node.range[1]) { - return VisitorOption.Skip; - } - } - }); - - cursor = 0; - traverse(tree, { - leave: function (node) { - var comment; - - while (cursor < comments.length) { - comment = comments[cursor]; - if (node.range[1] < comment.extendedRange[0]) { - break; - } - - if (node.range[1] === comment.extendedRange[0]) { - if (!node.trailingComments) { - node.trailingComments = []; - } - node.trailingComments.push(comment); - comments.splice(cursor, 1); - } else { - cursor += 1; - } - } - - // already out of owned node - if (cursor === comments.length) { - return VisitorOption.Break; - } - - if (comments[cursor].extendedRange[0] > node.range[1]) { - return VisitorOption.Skip; - } - } - }); - - return tree; - } - - exports.version = require('./package.json').version; - exports.Syntax = Syntax; - exports.traverse = traverse; - exports.replace = replace; - exports.attachComments = attachComments; - exports.VisitorKeys = VisitorKeys; - exports.VisitorOption = VisitorOption; - exports.Controller = Controller; - exports.cloneEnvironment = function () { return clone({}); }; - - return exports; -}(exports)); -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/eslint-scope/node_modules/estraverse/gulpfile.js b/node_modules/eslint-scope/node_modules/estraverse/gulpfile.js deleted file mode 100644 index 8772bbc..0000000 --- a/node_modules/eslint-scope/node_modules/estraverse/gulpfile.js +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright (C) 2014 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -'use strict'; - -var gulp = require('gulp'), - git = require('gulp-git'), - bump = require('gulp-bump'), - filter = require('gulp-filter'), - tagVersion = require('gulp-tag-version'); - -var TEST = [ 'test/*.js' ]; -var POWERED = [ 'powered-test/*.js' ]; -var SOURCE = [ 'src/**/*.js' ]; - -/** - * Bumping version number and tagging the repository with it. - * Please read http://semver.org/ - * - * You can use the commands - * - * gulp patch # makes v0.1.0 -> v0.1.1 - * gulp feature # makes v0.1.1 -> v0.2.0 - * gulp release # makes v0.2.1 -> v1.0.0 - * - * To bump the version numbers accordingly after you did a patch, - * introduced a feature or made a backwards-incompatible release. - */ - -function inc(importance) { - // get all the files to bump version in - return gulp.src(['./package.json']) - // bump the version number in those files - .pipe(bump({type: importance})) - // save it back to filesystem - .pipe(gulp.dest('./')) - // commit the changed version number - .pipe(git.commit('Bumps package version')) - // read only one file to get the version number - .pipe(filter('package.json')) - // **tag it in the repository** - .pipe(tagVersion({ - prefix: '' - })); -} - -gulp.task('patch', [ ], function () { return inc('patch'); }) -gulp.task('minor', [ ], function () { return inc('minor'); }) -gulp.task('major', [ ], function () { return inc('major'); }) diff --git a/node_modules/eslint-scope/node_modules/estraverse/package.json b/node_modules/eslint-scope/node_modules/estraverse/package.json deleted file mode 100644 index 1138238..0000000 --- a/node_modules/eslint-scope/node_modules/estraverse/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "estraverse", - "description": "ECMAScript JS AST traversal functions", - "homepage": "https://github.com/estools/estraverse", - "main": "estraverse.js", - "version": "4.3.0", - "engines": { - "node": ">=4.0" - }, - "maintainers": [ - { - "name": "Yusuke Suzuki", - "email": "utatane.tea@gmail.com", - "web": "http://github.com/Constellation" - } - ], - "repository": { - "type": "git", - "url": "http://github.com/estools/estraverse.git" - }, - "devDependencies": { - "babel-preset-env": "^1.6.1", - "babel-register": "^6.3.13", - "chai": "^2.1.1", - "espree": "^1.11.0", - "gulp": "^3.8.10", - "gulp-bump": "^0.2.2", - "gulp-filter": "^2.0.0", - "gulp-git": "^1.0.1", - "gulp-tag-version": "^1.3.0", - "jshint": "^2.5.6", - "mocha": "^2.1.0" - }, - "license": "BSD-2-Clause", - "scripts": { - "test": "npm run-script lint && npm run-script unit-test", - "lint": "jshint estraverse.js", - "unit-test": "mocha --compilers js:babel-register" - } -} diff --git a/node_modules/eslint-scope/package.json b/node_modules/eslint-scope/package.json deleted file mode 100644 index 162dbc0..0000000 --- a/node_modules/eslint-scope/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "eslint-scope", - "description": "ECMAScript scope analyzer for ESLint", - "homepage": "http://github.com/eslint/eslint-scope", - "main": "lib/index.js", - "version": "3.7.3", - "engines": { - "node": ">=4.0.0" - }, - "repository": "eslint/eslint-scope", - "bugs": { - "url": "https://github.com/eslint/eslint-scope/issues" - }, - "license": "BSD-2-Clause", - "scripts": { - "test": "node Makefile.js test", - "lint": "node Makefile.js lint", - "release": "eslint-release", - "ci-release": "eslint-ci-release", - "gh-release": "eslint-gh-release", - "alpharelease": "eslint-prerelease alpha", - "betarelease": "eslint-prerelease beta" - }, - "files": [ - "LICENSE", - "README.md", - "lib" - ], - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "devDependencies": { - "chai": "^3.4.1", - "eslint": "^3.15.0", - "eslint-config-eslint": "^4.0.0", - "eslint-release": "^0.10.1", - "espree": "^3.1.1", - "istanbul": "^0.4.5", - "mocha": "^3.2.0", - "npm-license": "^0.3.3", - "shelljs": "^0.7.6", - "typescript": "~2.0.10", - "typescript-eslint-parser": "^1.0.0" - } -} diff --git a/node_modules/eslint-visitor-keys/CHANGELOG.md b/node_modules/eslint-visitor-keys/CHANGELOG.md deleted file mode 100644 index dc1d4b5..0000000 --- a/node_modules/eslint-visitor-keys/CHANGELOG.md +++ /dev/null @@ -1,25 +0,0 @@ -v1.3.0 - June 19, 2020 - -* [`c92dd7f`](https://github.com/eslint/eslint-visitor-keys/commit/c92dd7ff96f0044dba12d681406a025b92b4c437) Update: add `ChainExpression` node (#12) (Toru Nagashima) - -v1.2.0 - June 4, 2020 - -* [`21f28bf`](https://github.com/eslint/eslint-visitor-keys/commit/21f28bf11be5329d740a8bf6bdbcd0ef13bbf1a2) Update: added exported in exportAllDeclaration key (#10) (Anix) - -v1.1.0 - August 13, 2019 - -* [`9331cc0`](https://github.com/eslint/eslint-visitor-keys/commit/9331cc09e756e65b9044c9186445a474b037fac6) Update: add ImportExpression (#8) (Toru Nagashima) -* [`5967f58`](https://github.com/eslint/eslint-visitor-keys/commit/5967f583b04f17fba9226aaa394e45d476d2b8af) Chore: add supported Node.js versions to CI (#7) (Kai Cataldo) -* [`6f7c60f`](https://github.com/eslint/eslint-visitor-keys/commit/6f7c60fef2ceec9f6323202df718321cec45cab0) Upgrade: eslint-release@1.0.0 (#5) (Teddy Katz) - -v1.0.0 - December 18, 2017 - -* 1f6bd38 Breaking: update keys (#4) (Toru Nagashima) - -v0.1.0 - November 17, 2017 - -* 17b4a88 Chore: update `repository` field in package.json (#3) (Toru Nagashima) -* a5a026b New: eslint-visitor-keys (#1) (Toru Nagashima) -* a1a48b8 Update: Change license to Apache 2 (#2) (Ilya Volodin) -* 2204715 Initial commit (Toru Nagashima) - diff --git a/node_modules/eslint-visitor-keys/README.md b/node_modules/eslint-visitor-keys/README.md deleted file mode 100644 index 250f5fa..0000000 --- a/node_modules/eslint-visitor-keys/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# eslint-visitor-keys - -[![npm version](https://img.shields.io/npm/v/eslint-visitor-keys.svg)](https://www.npmjs.com/package/eslint-visitor-keys) -[![Downloads/month](https://img.shields.io/npm/dm/eslint-visitor-keys.svg)](http://www.npmtrends.com/eslint-visitor-keys) -[![Build Status](https://travis-ci.org/eslint/eslint-visitor-keys.svg?branch=master)](https://travis-ci.org/eslint/eslint-visitor-keys) -[![Dependency Status](https://david-dm.org/eslint/eslint-visitor-keys.svg)](https://david-dm.org/eslint/eslint-visitor-keys) - -Constants and utilities about visitor keys to traverse AST. - -## 💿 Installation - -Use [npm] to install. - -```bash -$ npm install eslint-visitor-keys -``` - -### Requirements - -- [Node.js] 4.0.0 or later. - -## 📖 Usage - -```js -const evk = require("eslint-visitor-keys") -``` - -### evk.KEYS - -> type: `{ [type: string]: string[] | undefined }` - -Visitor keys. This keys are frozen. - -This is an object. Keys are the type of [ESTree] nodes. Their values are an array of property names which have child nodes. - -For example: - -``` -console.log(evk.KEYS.AssignmentExpression) // → ["left", "right"] -``` - -### evk.getKeys(node) - -> type: `(node: object) => string[]` - -Get the visitor keys of a given AST node. - -This is similar to `Object.keys(node)` of ES Standard, but some keys are excluded: `parent`, `leadingComments`, `trailingComments`, and names which start with `_`. - -This will be used to traverse unknown nodes. - -For example: - -``` -const node = { - type: "AssignmentExpression", - left: { type: "Identifier", name: "foo" }, - right: { type: "Literal", value: 0 } -} -console.log(evk.getKeys(node)) // → ["type", "left", "right"] -``` - -### evk.unionWith(additionalKeys) - -> type: `(additionalKeys: object) => { [type: string]: string[] | undefined }` - -Make the union set with `evk.KEYS` and the given keys. - -- The order of keys is, `additionalKeys` is at first, then `evk.KEYS` is concatenated after that. -- It removes duplicated keys as keeping the first one. - -For example: - -``` -console.log(evk.unionWith({ - MethodDefinition: ["decorators"] -})) // → { ..., MethodDefinition: ["decorators", "key", "value"], ... } -``` - -## 📰 Change log - -See [GitHub releases](https://github.com/eslint/eslint-visitor-keys/releases). - -## 🍻 Contributing - -Welcome. See [ESLint contribution guidelines](https://eslint.org/docs/developer-guide/contributing/). - -### Development commands - -- `npm test` runs tests and measures code coverage. -- `npm run lint` checks source codes with ESLint. -- `npm run coverage` opens the code coverage report of the previous test with your default browser. -- `npm run release` publishes this package to [npm] registory. - - -[npm]: https://www.npmjs.com/ -[Node.js]: https://nodejs.org/en/ -[ESTree]: https://github.com/estree/estree diff --git a/node_modules/eslint-visitor-keys/lib/index.js b/node_modules/eslint-visitor-keys/lib/index.js deleted file mode 100644 index cd8a326..0000000 --- a/node_modules/eslint-visitor-keys/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @author Toru Nagashima - * See LICENSE file in root directory for full license. - */ -"use strict"; - -const KEYS = require("./visitor-keys.json"); - -// Types. -const NODE_TYPES = Object.freeze(Object.keys(KEYS)); - -// Freeze the keys. -for (const type of NODE_TYPES) { - Object.freeze(KEYS[type]); -} -Object.freeze(KEYS); - -// List to ignore keys. -const KEY_BLACKLIST = new Set([ - "parent", - "leadingComments", - "trailingComments" -]); - -/** - * Check whether a given key should be used or not. - * @param {string} key The key to check. - * @returns {boolean} `true` if the key should be used. - */ -function filterKey(key) { - return !KEY_BLACKLIST.has(key) && key[0] !== "_"; -} - -//------------------------------------------------------------------------------ -// Public interfaces -//------------------------------------------------------------------------------ - -module.exports = Object.freeze({ - - /** - * Visitor keys. - * @type {{ [type: string]: string[] | undefined }} - */ - KEYS, - - /** - * Get visitor keys of a given node. - * @param {Object} node The AST node to get keys. - * @returns {string[]} Visitor keys of the node. - */ - getKeys(node) { - return Object.keys(node).filter(filterKey); - }, - - // Disable valid-jsdoc rule because it reports syntax error on the type of @returns. - // eslint-disable-next-line valid-jsdoc - /** - * Make the union set with `KEYS` and given keys. - * @param {Object} additionalKeys The additional keys. - * @returns {{ [type: string]: string[] | undefined }} The union set. - */ - unionWith(additionalKeys) { - const retv = Object.assign({}, KEYS); - - for (const type of Object.keys(additionalKeys)) { - if (retv.hasOwnProperty(type)) { - const keys = new Set(additionalKeys[type]); - - for (const key of retv[type]) { - keys.add(key); - } - - retv[type] = Object.freeze(Array.from(keys)); - } else { - retv[type] = Object.freeze(Array.from(additionalKeys[type])); - } - } - - return Object.freeze(retv); - } -}); diff --git a/node_modules/eslint-visitor-keys/lib/visitor-keys.json b/node_modules/eslint-visitor-keys/lib/visitor-keys.json deleted file mode 100644 index a33bbc6..0000000 --- a/node_modules/eslint-visitor-keys/lib/visitor-keys.json +++ /dev/null @@ -1,284 +0,0 @@ -{ - "AssignmentExpression": [ - "left", - "right" - ], - "AssignmentPattern": [ - "left", - "right" - ], - "ArrayExpression": [ - "elements" - ], - "ArrayPattern": [ - "elements" - ], - "ArrowFunctionExpression": [ - "params", - "body" - ], - "AwaitExpression": [ - "argument" - ], - "BlockStatement": [ - "body" - ], - "BinaryExpression": [ - "left", - "right" - ], - "BreakStatement": [ - "label" - ], - "CallExpression": [ - "callee", - "arguments" - ], - "CatchClause": [ - "param", - "body" - ], - "ChainExpression": [ - "expression" - ], - "ClassBody": [ - "body" - ], - "ClassDeclaration": [ - "id", - "superClass", - "body" - ], - "ClassExpression": [ - "id", - "superClass", - "body" - ], - "ConditionalExpression": [ - "test", - "consequent", - "alternate" - ], - "ContinueStatement": [ - "label" - ], - "DebuggerStatement": [], - "DoWhileStatement": [ - "body", - "test" - ], - "EmptyStatement": [], - "ExportAllDeclaration": [ - "exported", - "source" - ], - "ExportDefaultDeclaration": [ - "declaration" - ], - "ExportNamedDeclaration": [ - "declaration", - "specifiers", - "source" - ], - "ExportSpecifier": [ - "exported", - "local" - ], - "ExpressionStatement": [ - "expression" - ], - "ExperimentalRestProperty": [ - "argument" - ], - "ExperimentalSpreadProperty": [ - "argument" - ], - "ForStatement": [ - "init", - "test", - "update", - "body" - ], - "ForInStatement": [ - "left", - "right", - "body" - ], - "ForOfStatement": [ - "left", - "right", - "body" - ], - "FunctionDeclaration": [ - "id", - "params", - "body" - ], - "FunctionExpression": [ - "id", - "params", - "body" - ], - "Identifier": [], - "IfStatement": [ - "test", - "consequent", - "alternate" - ], - "ImportDeclaration": [ - "specifiers", - "source" - ], - "ImportDefaultSpecifier": [ - "local" - ], - "ImportExpression": [ - "source" - ], - "ImportNamespaceSpecifier": [ - "local" - ], - "ImportSpecifier": [ - "imported", - "local" - ], - "JSXAttribute": [ - "name", - "value" - ], - "JSXClosingElement": [ - "name" - ], - "JSXElement": [ - "openingElement", - "children", - "closingElement" - ], - "JSXEmptyExpression": [], - "JSXExpressionContainer": [ - "expression" - ], - "JSXIdentifier": [], - "JSXMemberExpression": [ - "object", - "property" - ], - "JSXNamespacedName": [ - "namespace", - "name" - ], - "JSXOpeningElement": [ - "name", - "attributes" - ], - "JSXSpreadAttribute": [ - "argument" - ], - "JSXText": [], - "JSXFragment": [ - "openingFragment", - "children", - "closingFragment" - ], - "Literal": [], - "LabeledStatement": [ - "label", - "body" - ], - "LogicalExpression": [ - "left", - "right" - ], - "MemberExpression": [ - "object", - "property" - ], - "MetaProperty": [ - "meta", - "property" - ], - "MethodDefinition": [ - "key", - "value" - ], - "NewExpression": [ - "callee", - "arguments" - ], - "ObjectExpression": [ - "properties" - ], - "ObjectPattern": [ - "properties" - ], - "Program": [ - "body" - ], - "Property": [ - "key", - "value" - ], - "RestElement": [ - "argument" - ], - "ReturnStatement": [ - "argument" - ], - "SequenceExpression": [ - "expressions" - ], - "SpreadElement": [ - "argument" - ], - "Super": [], - "SwitchStatement": [ - "discriminant", - "cases" - ], - "SwitchCase": [ - "test", - "consequent" - ], - "TaggedTemplateExpression": [ - "tag", - "quasi" - ], - "TemplateElement": [], - "TemplateLiteral": [ - "quasis", - "expressions" - ], - "ThisExpression": [], - "ThrowStatement": [ - "argument" - ], - "TryStatement": [ - "block", - "handler", - "finalizer" - ], - "UnaryExpression": [ - "argument" - ], - "UpdateExpression": [ - "argument" - ], - "VariableDeclaration": [ - "declarations" - ], - "VariableDeclarator": [ - "id", - "init" - ], - "WhileStatement": [ - "test", - "body" - ], - "WithStatement": [ - "object", - "body" - ], - "YieldExpression": [ - "argument" - ] -} diff --git a/node_modules/eslint-visitor-keys/package.json b/node_modules/eslint-visitor-keys/package.json deleted file mode 100644 index 63267be..0000000 --- a/node_modules/eslint-visitor-keys/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "eslint-visitor-keys", - "version": "1.3.0", - "description": "Constants and utilities about visitor keys to traverse AST.", - "main": "lib/index.js", - "files": [ - "lib" - ], - "engines": { - "node": ">=4" - }, - "dependencies": {}, - "devDependencies": { - "eslint": "^4.7.2", - "eslint-config-eslint": "^4.0.0", - "eslint-release": "^1.0.0", - "mocha": "^3.5.3", - "nyc": "^11.2.1", - "opener": "^1.4.3" - }, - "scripts": { - "lint": "eslint lib tests/lib", - "pretest": "npm run -s lint", - "test": "nyc mocha tests/lib", - "coverage": "nyc report --reporter lcov && opener coverage/lcov-report/index.html", - "generate-release": "eslint-generate-release", - "generate-alpharelease": "eslint-generate-prerelease alpha", - "generate-betarelease": "eslint-generate-prerelease beta", - "generate-rcrelease": "eslint-generate-prerelease rc", - "publish-release": "eslint-publish-release" - }, - "repository": "eslint/eslint-visitor-keys", - "keywords": [], - "author": "Toru Nagashima (https://github.com/mysticatea)", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/eslint/eslint-visitor-keys/issues" - }, - "homepage": "https://github.com/eslint/eslint-visitor-keys#readme" -} diff --git a/node_modules/eslint/CHANGELOG.md b/node_modules/eslint/CHANGELOG.md deleted file mode 100644 index 00194b0..0000000 --- a/node_modules/eslint/CHANGELOG.md +++ /dev/null @@ -1,4598 +0,0 @@ -v4.19.1 - March 21, 2018 - -* 3ff5d11 Fix: no-invalid-regexp not understand variable for flags (fixes #10112) (#10113) (薛定谔的猫) -* abc765c Fix: object-curly-newline minProperties w/default export (fixes #10101) (#10103) (Kevin Partington) -* 6f9e155 Docs: Update ambiguous for...in example for guard-for-in (#10114) (CJ R) -* 0360cc2 Chore: Adding debug logs on successful plugin loads (#10100) (Kevin Partington) -* a717c5d Chore: Adding log at beginning of unit tests in Makefile.js (#10102) (Kevin Partington) - -v4.19.0 - March 16, 2018 - -* 55a1593 Update: consecutive option for one-var (fixes #4680) (#9994) (薛定谔的猫) -* 8d3814e Fix: false positive about ES2018 RegExp enhancements (fixes #9893) (#10062) (Toru Nagashima) -* 935f4e4 Docs: Clarify default ignoring of node_modules (#10092) (Matijs Brinkhuis) -* 72ed3db Docs: Wrap `Buffer()` in backticks in `no-buffer-constructor` rule description (#10084) (Stephen Edgar) -* 3aded2f Docs: Fix lodash typos, make spacing consistent (#10073) (Josh Smith) -* e33bb64 Chore: enable no-param-reassign on ESLint codebase (#10065) (Teddy Katz) -* 66a1e9a Docs: fix possible typo (#10060) (Vse Mozhet Byt) -* 2e68be6 Update: give a node at least the indentation of its parent (fixes #9995) (#10054) (Teddy Katz) -* 72ca5b3 Update: Correctly indent JSXText with trailing linebreaks (fixes #9878) (#10055) (Teddy Katz) -* 2a4c838 Docs: Update ECMAScript versions in FAQ (#10047) (alberto) - -v4.18.2 - March 2, 2018 - -* 6b71fd0 Fix: table@4.0.2, because 4.0.3 needs "ajv": "^6.0.1" (#10022) (Mathieu Seiler) -* 3c697de Chore: fix incorrect comment about linter.verify return value (#10030) (Teddy Katz) -* 9df8653 Chore: refactor parser-loading out of linter.verify (#10028) (Teddy Katz) -* f6901d0 Fix: remove catastrophic backtracking vulnerability (fixes #10002) (#10019) (Jamie Davis) -* e4f52ce Chore: Simplify dataflow in linter.verify (#10020) (Teddy Katz) -* 33177cd Chore: make library files non-executable (#10021) (Teddy Katz) -* 558ccba Chore: refactor directive comment processing (#10007) (Teddy Katz) -* 18e15d9 Chore: avoid useless catch clauses that just rethrow errors (#10010) (Teddy Katz) -* a1c3759 Chore: refactor populating configs with defaults in linter (#10006) (Teddy Katz) -* aea07dc Fix: Make max-len ignoreStrings ignore JSXText (fixes #9954) (#9985) (Rachael Sim) - -v4.18.1 - February 20, 2018 - -* f417506 Fix: ensure no-await-in-loop reports the correct node (fixes #9992) (#9993) (Teddy Katz) -* 3e99363 Docs: Fixed typo in key-spacing rule doc (#9987) (Jaid) -* 7c2cd70 Docs: deprecate experimentalObjectRestSpread (#9986) (Toru Nagashima) - -v4.18.0 - February 16, 2018 - -* 70f22f3 Chore: Apply memoization to config creation within glob utils (#9944) (Kenton Jacobsen) -* 0e4ae22 Update: fix indent bug with binary operators/ignoredNodes (fixes #9882) (#9951) (Teddy Katz) -* 47ac478 Update: add named imports and exports for object-curly-newline (#9876) (Nicholas Chua) -* e8efdd0 Fix: support Rest/Spread Properties (fixes #9885) (#9943) (Toru Nagashima) -* f012b8c Fix: support Async iteration (fixes #9891) (#9957) (Toru Nagashima) -* 74fa253 Docs: Clarify no-mixed-operators options (fixes #9962) (#9964) (Ivan Hayes) -* 426868f Docs: clean up key-spacing docs (fixes #9900) (#9963) (Abid Uzair) -* 4a6f22e Update: support eslint-disable-* block comments (fixes #8781) (#9745) (Erin) -* 777283b Docs: Propose fix typo for function (#9965) (John Eismeier) -* bf3d494 Docs: Fix typo in max-len ignorePattern example. (#9956) (Tim Martin) -* d64fbb4 Docs: fix typo in prefer-destructuring.md example (#9930) (Vse Mozhet Byt) -* f8d343f Chore: Fix default issue template (#9946) (Kai Cataldo) - -v4.17.0 - February 2, 2018 - -* 1da1ada Update: Add "multiline" type to padding-line-between-statements (#8668) (Matthew Bennett) -* bb213dc Chore: Use messageIds in some of the core rules (#9648) (Jed Fox) -* 1aa1970 Docs: remove outdated rule naming convention (#9925) (Teddy Katz) -* 3afaff6 Docs: Add prefer-destructuring variable reassignment example (#9873) (LePirlouit) -* d20f6b4 Fix: Typo in error message when running npm (#9866) (Maciej Kasprzyk) -* 51ec6a7 Docs: Use GitHub Multiple PR/Issue templates (#9911) (Kai Cataldo) -* dc80487 Update: space-unary-ops uses astUtils.canTokensBeAdjacent (fixes #9907) (#9906) (Kevin Partington) -* 084351b Docs: Fix the messageId example (fixes #9889) (#9892) (Jed Fox) -* 9cbb487 Docs: Mention the `globals` key in the no-undef docs (#9867) (Dan Dascalescu) - -v4.16.0 - January 19, 2018 - -* e26a25f Update: allow continue instead of if wrap in guard-for-in (fixes #7567) (#9796) (Michael Ficarra) -* af043eb Update: Add NewExpression support to comma-style (#9591) (Frazer McLean) -* 4f898c7 Build: Fix JSDoc syntax errors (#9813) (Matija Marohnić) -* 13bcf3c Fix: Removing curly quotes in no-eq-null report message (#9852) (Kevin Partington) -* b96fb31 Docs: configuration hierarchy for CLIEngine options (fixes #9526) (#9855) (PiIsFour) -* 8ccbdda Docs: Clarify that -c configs merge with `.eslintrc.*` (fixes #9535) (#9847) (Kevin Partington) -* 978574f Docs: Fix examples for no-useless-escape (#9853) (Toru Kobayashi) -* cd5681d Chore: Deactivate consistent-docs-url in internal rules folder (#9815) (Kevin Partington) -* 2e87ddd Docs: Sync messageId examples' style with other examples (#9816) (Kevin Partington) -* 1d61930 Update: use doctrine range information in valid-jsdoc (#9831) (Teddy Katz) -* 133336e Update: fix indent behavior on template literal arguments (fixes #9061) (#9820) (Teddy Katz) -* ea1b15d Fix: avoid crashing on malformed configuration comments (fixes #9373) (#9819) (Teddy Katz) -* add1e70 Update: fix indent bug on comments in ternary expressions (fixes #9729) (#9818) (Teddy Katz) -* 6a5cd32 Fix: prefer-destructuring error with computed properties (fixes #9784) (#9817) (Teddy Katz) -* 601f851 Docs: Minor modification to code comments for clarity (#9821) (rgovind92) -* b9da067 Docs: fix misleading info about RuleTester column numbers (#9830) (Teddy Katz) -* 2cf4522 Update: Rename and deprecate object-property-newline option (#9570) (Jonathan Pool) -* acde640 Docs: Add ES 2018 to Configuring ESLint (#9829) (Kai Cataldo) -* ccfce15 Docs: Minor tweaks to working with rules page (#9824) (Kevin Partington) -* 54b329a Docs: fix substitution of {{ name }} (#9822) (Andres Kalle) - -v4.15.0 - January 6, 2018 - -* 6ab04b5 New: Add context.report({ messageId }) (fixes #6740) (#9165) (Jed Fox) -* fc7f404 Docs: add url to each of the rules (refs #6582) (#9788) (Patrick McElhaney) -* fc44da9 Docs: fix sort-imports rule block language (#9805) (ferhat elmas) -* 65f0176 New: CLIEngine#getRules() (refs #6582) (#9782) (Patrick McElhaney) -* c64195f Update: More detailed assert message for rule-tester (#9769) (Weijia Wang) -* 9fcfabf Fix: no-extra-parens false positive (fixes: #9755) (#9795) (Erin) -* 61e5fa0 Docs: Add table of contents to Node.js API docs (#9785) (Patrick McElhaney) -* 4c87f42 Fix: incorrect error messages of no-unused-vars (fixes #9774) (#9791) (akouryy) -* bbabf34 Update: add `ignoreComments` option to `indent` rule (fixes #9018) (#9752) (Kevin Partington) -* db431cb Docs: HTTP -> HTTPS (fixes #9768) (#9768) (Ronald Eddy Jr) -* cbf0fb9 Docs: describe how to feature-detect scopeManager/visitorKeys support (#9764) (Teddy Katz) -* f7dcb70 Docs: Add note about "patch release pending" label to maintainer guide (#9763) (Teddy Katz) - -v4.14.0 - December 23, 2017 - -* be2f57e Update: support separate requires in one-var. (fixes #6175) (#9441) (薛定谔的猫) -* 370d614 Docs: Fix typos (#9751) (Jed Fox) -* 8196c45 Chore: Reorganize CLI options and associated docs (#9758) (Kevin Partington) -* 75c7419 Update: Logical-and is counted in `complexity` rule (fixes #8535) (#9754) (Kevin Partington) -* eb4b1e0 Docs: reintroduce misspelling in `valid-typeof` example (#9753) (Teddy Katz) -* ae51eb2 New: Add allowImplicit option to array-callback-return (fixes #8539) (#9344) (James C. Davis) -* e9d5dfd Docs: improve no-extra-parens formatting (#9747) (Rich Trott) -* 37d066c Chore: Add unit tests for overrides glob matching. (#9744) (Robert Jackson) -* 805a94e Chore: Fix typo in CLIEngine test name (#9741) (@scriptdaemon) -* 1c2aafd Update: Improve parser integrations (fixes #8392) (#8755) (Toru Nagashima) -* 4ddc131 Upgrade: debug@^3.1.0 (#9731) (Kevin Partington) -* f252c19 Docs: Make the lint message `source` property a little more subtle (#9735) (Jed Fox) -* 5a5c23c Docs: fix the link to contributing page (#9727) (Victor Hom) -* f44ce11 Docs: change beginner to good first issue label text (#9726) (Victor Hom) -* 14baa2e Chore: improve arrow-body-style error message (refs #5498) (#9718) (Teddy Katz) -* f819920 Docs: fix typos (#9723) (Thomas Broadley) -* 43d4ba8 Fix: false positive on rule`lines-between-class-members` (fixes #9665) (#9680) (sakabar) - -v4.13.1 - December 11, 2017 - -* b72dc83 Fix: eol-last allow empty-string to always pass (refs #9534) (#9696) (Kevin Partington) -* d80aa7c Fix: camelcase destructure leading/trailing underscore (fixes #9700) (#9701) (Kevin Partington) -* d49d9d0 Docs: Add missing period to the README (#9702) (Kevin Partington) -* 4564fe0 Chore: no-invalid-meta crash if no export assignment (refs #9534) (#9698) (Kevin Partington) - -v4.13.0 - December 8, 2017 - -* 256481b Update: update handling of destructuring in camelcase (fixes #8511) (#9468) (Erin) -* d067ae1 Docs: Don’t use undocumented array-style configuration for max-len (#9690) (Jed Fox) -* 1ad3091 Chore: fix test-suite to work with node master (#9688) (Myles Borins) -* cdb1488 Docs: Adds an example with try/catch. (#9672) (Jaap Taal) - -v4.12.1 - November 30, 2017 - -* 1e362a0 Revert "Fix: Use XML 1.1 on XML formatters (fixes #9607) (#9608)" (#9667) (Kevin Partington) - -v4.12.0 - November 25, 2017 - -* 76dab18 Upgrade: doctrine@^2.0.2 (#9656) (Kevin Partington) -* 28c9c8e New: add a Linter#defineParser function (#9321) (Ives van Hoorne) -* 5619910 Update: Add autofix for `sort-vars` (#9496) (Trevin Hofmann) -* 71eedbf Update: add `beforeStatementContinuationChars` to semi (fixes #9521) (#9594) (Toru Nagashima) -* 4118f14 New: Adds implicit-arrow-linebreak rule (refs #9510) (#9629) (Sharmila Jesupaul) -* 208fb0f Fix: Use XML 1.1 on XML formatters (fixes #9607) (#9608) (Daniel Reigada) -* 6e04f14 Upgrade: `globals` to 11.0.1 (fixes #9614) (#9632) (Toru Nagashima) -* e13d439 Fix: space-in-parens crash (#9655) (Toru Nagashima) -* 92171cc Docs: Updating migration guide for single-line disable (#9385) (Justin Helmer) -* f39ffe7 Docs: remove extra punctuation from readme (#9640) (Teddy Katz) -* a015234 Fix: prefer-destructuring false positive on "super" (fixes #9625) (#9626) (Kei Ito) -* 0cf081e Update: add importNames option to no-restricted-imports (#9506) (Benjamin R Gibson) -* 332c214 Docs: Add @platinumazure to TSC (#9618) (Ilya Volodin) - -v4.11.0 - November 10, 2017 - -* d4557a6 Docs: disallow use of the comma operator using no-restricted-syntax (#9585) (薛定谔的猫) -* d602f9e Upgrade: espree v3.5.2 (#9611) (Kai Cataldo) -* 4def876 Chore: avoid handling rules instances in config-validator (#9364) (Teddy Katz) -* fe5ac7e Chore: fix incorrect comment in safe-emitter.js (#9605) (Teddy Katz) -* 6672fae Docs: Fixed a typo on lines-between-class-members doc (#9603) (Moinul Hossain) -* 980ecd3 Chore: Update copyright and license info (#9599) (薛定谔的猫) -* cc2c7c9 Build: use Node 8 in appveyor (#9595) (薛定谔的猫) -* 2542f04 Docs: Add missing options for `lines-around-comment` (#9589) (Clément Fiorio) -* b6a7490 Build: ensure fuzzer tests get run with `npm test` (#9590) (Teddy Katz) -* 1073bc5 Build: remove shelljs-nodecli (refs #9533) (#9588) (Teddy Katz) -* 7e3bf6a Fix: edge-cases of semi-style (#9560) (Toru Nagashima) -* e5a37ce Fix: object-curly-newline for flow code (#9458) (Tiddo Langerak) -* 9064b9c Chore: add equalTokens in ast-utils. (#9500) (薛定谔的猫) -* b7c5b19 Fix: Correct [object Object] output of error.data. (#9561) (Jonathan Pool) -* 51c8cf0 Docs: Disambiguate definition of Update tag (#9584) (Jonathan Pool) -* afc3c75 Docs: clarify what eslint-config-eslint is (#9582) (Teddy Katz) -* aedae9d Docs: fix spelling in valid-typeof example (#9574) (Maksim Degtyarev) -* 4c5aaf3 Docs: Fix typo in no-underscore-dangle rule (#9567) (Fabien Lucas) -* 3623600 Chore: upgrade ajv@5.3.0 (#9557) (薛定谔的猫) -* 1b606cd Chore: Remove an indirect dependency on jsonify (#9444) (Rouven Weßling) -* 4d7d7ab Update: Resolve npm installed formatters (#5900) (#9464) (Tom Erik Støwer) -* accc490 Fix: Files with no failures get "passing" testcase (#9547) (Samuel Levy) -* ab0f66d Docs: Add examples to better show rule coverage. (#9548) (Jonathan Pool) -* 88d2303 Chore: Add object-property-newline tests to increase coverage. (#9553) (Jonathan Pool) -* 7f37b1c Build: test Node 9 on Travis (#9556) (Teddy Katz) -* acccfbd Docs: Minor rephrase in `no-invalid-this`. (#9542) (Francisc) -* 8f9c0fe Docs: improve id-match usage advice (#9544) (Teddy Katz) -* a9606a3 Fix: invalid tests with super (fixes #9539) (#9545) (Teddy Katz) -* 8e1a095 Chore: enable a modified version of multiline-comment-style on codebase (#9452) (Teddy Katz) -* cb60285 Chore: remove commented test for HTML formatter (#9532) (Teddy Katz) -* 06b491e Docs: fix duplicate entries in changelog (#9530) (Teddy Katz) -* 2224733 Chore: use eslint-plugin-rulesdir instead of --rulesdir for self-linting (#9164) (Teddy Katz) -* 9cf4ebe Docs: add .md to link(for github users) (#9529) (薛定谔的猫) - -v4.10.0 - October 27, 2017 - -* bb6e60a Fix: Improve the doc for no-restricted-modules rule (fixes #9437) (#9495) (vibss2397) -* c529de9 Docs: Amend rule document to correct and complete it (refs #6251). (#9498) (Jonathan Pool) -* f9c6673 Chore: Add tests to cover array and object values and leading commas. (#9502) (Jonathan Pool) -* 9169258 Chore: remove `npm run check-commit` script (#9513) (Teddy Katz) -* 7d390b2 Docs: Revise contributor documentation on issue labels. (#9469) (Jonathan Pool) -* d80b9d0 Fix: no-var don't fix globals (fixes #9520) (#9525) (Toru Nagashima) -* b8aa071 Fix: allow linting the empty string from stdin (fixes #9515) (#9517) (Teddy Katz) -* 350a72c Chore: regex.test => string.startsWith (#9518) (薛定谔的猫) -* de0bef4 Chore: remove obsolete eslintbot templates (#9512) (Teddy Katz) -* 720b6d5 Docs: Update ISSUE_TEMPLATE.md (#9504) (薛定谔的猫) -* 2fa64b7 Fix: should not convert non-consecutive line comments to a single blo… (#9475) (薛定谔的猫) -* 9725146 Fix: multiline-comment-style fix produces invalid code (fixes #9461). (#9463) (薛定谔的猫) -* b12cff8 Fix: Expected order of jsdoc tags (fixes #9412) (#9451) (Orlando Wenzinger) -* f054ab5 Docs: add `.md` to link (for github users) (#9501) (薛定谔的猫) -* 5ed9cfc Docs: Correct violations of “Variable Declarations” in Code Conventions (#9447) (Jonathan Pool) -* 3171097 Docs: Clears confusion on usage of global and local plugins.(#9492) (Vasili Sviridov) -* 3204773 Chore: enable max-len. (#9414) (薛定谔的猫) -* 0f71fef Docs: Unquote booleans in lines-between-class-members docs (#9497) (Brandon Mills) -* b3d7532 Docs: use consistent terminology & fix link etc. (#9490) (薛定谔的猫) -* 87db8ae Docs: Fix broken links (#9488) (gpiress) -* 51bdb2f Docs: Incorrect link to related rule (#9477) (Gavin King) -* 1a962e8 Docs: Add FAQ for when ESLint cannot find plugin (#9467) (Kevin Partington) -* 8768b2d Fix: multiline-comment-style autofixer added trailing space (#9454) (Teddy Katz) -* e830aa1 Fix: multiline-comment-style reports block comments followed by code (#9450) (Teddy Katz) -* b12e5fe Docs: Repair broken links and add migration links. (#9473) (Jonathan Pool) -* eca01ed Docs: Add missing info about special status of home-dir config files. (#9472) (Jonathan Pool) -* eb8cfb1 Fix: change err report in constant condition (fixes #9398) (#9436) (Victor Hom) -* da77eb4 Chore: Revise no-config-file test to prevent false failure. (#9443) (Jonathan Pool) -* 47e5f6f Docs: ensure "good commit message" examples actually follow guidelines (#9466) (Teddy Katz) -* ebb530d Update: Don't ignore comments (no-trailing-spaces) (#9416) (Chris van Marle) -* 5012661 Build: fix `npm run profile` script (fixes #9397) (#9455) (Teddy Katz) -* ecac0fd Docs: Remove blockBindings references (#9446) (Jan Pilzer) -* 0b89865 Chore: ensure tests for internal rules get run (#9453) (Teddy Katz) -* 052c504 Docs: suggest deleting branches after merging PRs (#9449) (Teddy Katz) -* b31e55a Chore: move internal rules out of lib/ (#9448) (Teddy Katz) -* a7521e3 Docs: improve examples for multiline-comment-style (#9440) (Teddy Katz) - -v4.9.0 - October 14, 2017 - -* 85388fb Fix: Correct error and test messages to fit config search path (#9428) (Jonathan Pool) -* 62a323c Fix: Add class options for `lines-around-comment` (fixes #8564) (#8565) (Ed Lee) -* 8eb4aae New: multiline-comment-style rule (fixes #8320) (#9389) (薛定谔的猫) -* db41408 Chore: avoid applying eslint-env comments twice (#9278) (Teddy Katz) -* febb897 Chore: avoid loose equality assertions (#9415) (Teddy Katz) -* 2247efa Update: Add FunctionExpression to require-jsdoc (fixes #5867) (#9395) (Kai Cataldo) -* 6791d18 Docs: Corrected noun to verb. (#9438) (Jonathan Pool) -* b02fbb6 Update: custom messages for no-restricted-* (refs #8400) (Maja Wichrowska) -* 02732bd Docs: Reorganized to avoid misunderstandings. (#9434) (Jonathan Pool) -* d9466b8 Docs: Correct time forecast for tests. (#9432) (Jonathan Pool) -* f7ed84f Docs: Add instruction re home-directory config files (refs #7729) (#9426) (Jonathan Pool) -* 30d018b Chore: Add Aladdin-ADD & VictorHom to README (#9424) (Kai Cataldo) -* 2d8a303 Docs: fix examples for prefer-numeric-literals (#9155) (Lutz Lengemann) -* d7610f5 Docs: Add jquery warning to prefer-destructuring (#9409) (Thomas Grainger) -* e835dd1 Docs: clarify no-mixed-operators (fixes #8051) (Ruxandra Fediuc) -* 51360c8 Docs: update block-spacing details (fixes #8743) (#9375) (Victor Hom) -* 6767857 Update: fix ignored nodes in indent rule when using tabs (fixes #9392) (#9393) (Robin Houston) -* 37dde77 Chore: Refactor SourceCode#getJSDocComment (#9403) (Kai Cataldo) -* 9fedd51 Chore: Add missing space in blog post template (#9407) (Kevin Partington) -* 7654c99 Docs: add installing prerequisites in readme. (#9401) (薛定谔的猫) -* 786cc73 Update: Add "consistent" option to array-bracket-newline (fixes #9136) (#9206) (Ethan Rutherford) -* e171f6b Docs: add installing prerequisites. (#9394) (薛定谔的猫) -* 74dfc87 Docs: update doc for class-methods-use-this (fixes #8910) (#9374) (Victor Hom) -* b4a9dbf Docs: show console call with no-restricted-syntax (fixes #7806) (#9376) (Victor Hom) -* 8da525f Fix: recognise multiline comments as multiline arrays (fixes #9211) (#9369) (Phil Quinn) -* c581b77 Chore: Error => TypeError (#9390) (薛定谔的猫) -* ee99876 New: lines-between-class-members rule (fixes #5949) (#9141) (薛定谔的猫) -* 9d3f5ad Chore: report unused eslint-disable directives in ESLint codebase (#9371) (Teddy Katz) -* 1167638 Update: add allowElseIf option to no-else-return (fixes #9228) (#9229) (Thomas Grainger) -* 4567ab1 New: Add the fix-dry-run flag (fixes #9076) (#9073) (Rafał Ruciński) - -v4.8.0 - September 29, 2017 - -* 3f2b908 New: add option to report unused eslint-disable directives (fixes #9249) (#9250) (Teddy Katz) -* ff2be59 Fix: dot notation rule failing to catch string template (fixes #9350) (#9357) (Phil Quinn) -* b1372da Chore: remove sourceCode property from Linter (refs #9161) (#9363) (Teddy Katz) -* cef6f8c Docs: remove line about removing rules from semver policy (#9367) (Teddy Katz) -* 06efe87 Fix: Add meta element with charset attribute. (#9365) (H1Gdev) -* 458ca67 Docs: update architecture page (fixes #9337) (#9345) (Victor Hom) -* 1c6bc67 Fix: special EventEmitter keys leak information about other rules (#9328) (Teddy Katz) -* d593e61 Docs: update eslint.org links to use https (#9358) (Teddy Katz) -* 38d0cb2 Fix: fix wrong code-path about try-for-in (fixes #8848) (#9348) (Toru Nagashima) -* 434d9e2 Fix: Invalid font-size property value issue. (#9341) (H1Gdev) -* a7668c2 Chore: Remove unnecessary slice from logging utility (#9343) (Gyandeep Singh) -* 2ff6fb6 Chore: remove unused arguments in codebase (#9340) (Teddy Katz) - -v4.7.2 - September 21, 2017 - -* 4f87732 Fix: Revert setting node.parent early (fixes #9331) (#9336) (Teddy Katz) - -v4.7.1 - September 18, 2017 - -* 08656db Fix: Handle nested disable directive correctly (fixes #9318) (#9322) (Gyandeep Singh) -* 9226495 Revert "Chore: rewrite parseListConfig for a small perf gain." (#9325) (薛定谔的猫) - -v4.7.0 - September 15, 2017 - -* 787b78b Upgrade: Espree v3.5.1 (fixes #9153) (#9314) (Brandon Mills) -* 1488b51 Update: run rules after `node.parent` is already set (fixes #9122) (#9283) (Teddy Katz) -* 4431d68 Docs: fix wrong config in max-len example. (#9309) (薛定谔的猫) -* 7d24dde Docs: Fix code snippet to refer to the correct option (#9313) (Ruben Tytgat) -* 12388d4 Chore: rewrite parseListConfig for a small perf gain. (#9300) (薛定谔的猫) -* ce1f084 Update: fix MemberExpression handling in no-extra-parens (fixes #9156) (jackyho112) -* 0c720a3 Update: allow autofixing when using processors (fixes #7510) (#9090) (Teddy Katz) -* 838df76 Chore: upgrade deps. (#9289) (薛定谔的猫) -* f12def6 Update: indent flatTernary option to handle `return` (fixes #9285) (#9296) (Teddy Katz) -* e220687 Fix: remove autofix for var undef inits (fixes #9231) (#9288) (Victor Hom) -* 002e199 Docs: fix no-restricted-globals wrong config. (#9305) (薛定谔的猫) -* fcfe91a Docs: fix wrong config in id-length example. (#9303) (薛定谔的猫) -* 2731f94 Update: make newline-per-chained-call fixable (#9149) (João Granado) -* 61f1093 Chore: avoid monkeypatching Linter instances in RuleTester (#9276) (Teddy Katz) -* 28929cb Chore: remove Linter#reset (refs #9161) (#9268) (Teddy Katz) -* abc8634 Build: re-run browserify when generating site (#9275) (Teddy Katz) -* 7685fed Fix: IIFE and arrow functions in no-invalid-this (fixes #9126) (#9258) (Toru Nagashima) -* 2b1eba2 Chore: enable eslint-plugin/no-deprecated-context-methods (#9279) (Teddy Katz) -* 981f933 Fix: reuse the AST of source code object in verify (#9256) (Toru Nagashima) -* cd698ba Docs: move RuleTester documentation to Node.js API page (#9273) (Teddy Katz) -* 4ae7ad3 Docs: fix inaccuracy in `npm run perf` description (#9274) (Teddy Katz) -* cad45bd Docs: improve documentation for rule contexts (#9272) (Teddy Katz) -* 3b0c6fd Chore: remove extraneous linter properties (refs #9161) (#9267) (Teddy Katz) -* c3231b3 Docs: Fix typo in array-bracket-newline.md (#9269) (宋文强) -* 51132d6 Fix: Formatters keep trailing '.' if preceded by a space (fixes #9154) (#9247) (i-ron-y) -* 88d5d4d Chore: remove undocumented Linter#markVariableAsUsed method (refs #9161) (#9266) (Teddy Katz) -* 09414cf Chore: remove internal Linter#getDeclaredVariables method (refs #9161) (#9264) (Teddy Katz) -* f31f59d Chore: prefer smaller scope for variables in codebase (#9265) (Teddy Katz) -* 3693e4e Chore: remove undocumented Linter#getScope method (#9253) (Teddy Katz) -* 5d7eb81 Chore: refactor config hash caching in CLIEngine (#9260) (Teddy Katz) -* 1a76c4d Chore: remove SourceCode passthroughs from Linter.prototype (refs #9161) (#9263) (Teddy Katz) -* 40ae27b Chore: avoid relying on Linter#getScope/markVariableAsUsed in tests (#9252) (Teddy Katz) -* b383d81 Chore: make executeOnFile a pure function in CLIEngine (#9262) (Teddy Katz) -* 5e0e579 Chore: avoid internal SourceCode methods in Linter tests (refs #9161) (#9223) (Teddy Katz) -* adab827 Chore: remove unused eslint-disable comment (#9251) (Teddy Katz) -* 31e4ec8 Chore: use consistent names for apply-disable-directives in tests (#9246) (Teddy Katz) -* 7ba46e6 Fix: shebang error in eslint-disable-new-line; add tests (fixes #9238) (#9240) (i-ron-y) -* 8f6546c Chore: remove undocumented defaults() method (refs #9161) (#9237) (Teddy Katz) -* 82d8b73 Docs: Fix error in example code for sort-imports (fixes #8734) (#9245) (i-ron-y) -* a32ec36 Update: refactor eslint-disable comment processing (#9216) (Teddy Katz) -* 583f0b8 Chore: avoid using globals in CLIEngine tests (#9242) (Teddy Katz) -* c8bf687 Chore: upgrade eslint-plugin-eslint-plugin@1.0.0 (#9234) (薛定谔的猫) -* 3c41a05 Chore: always normalize rules to new API in rules.js (#9236) (Teddy Katz) -* c5f4227 Chore: move logic for handling missing rules to rules.js (#9235) (Teddy Katz) -* bf1e344 Chore: create report translators lazily (#9221) (Teddy Katz) -* 2eedc1f Chore: remove currentFilename prop from Linter instances (refs #9161) (#9219) (Teddy Katz) -* 5566e94 Docs: Replace misleading CLA links (#9133) (#9232) (i-ron-y) -* c991630 Chore: remove ConfigOps.normalize in favor of ConfigOps.getRuleSeverity (#9224) (Teddy Katz) -* 171962a Chore: remove internal Linter#getAncestors helper (refs #9161) (#9222) (Teddy Katz) -* a567499 Chore: avoid storing list of problems on Linter instance (refs #9161) (#9214) (Teddy Katz) -* ed6d088 Chore: avoid relying on undocumented Linter#getFilename API in tests (#9218) (Teddy Katz) - -v4.6.1 - September 3, 2017 - -* bdec46d Build: avoid process leak when generating website (#9217) (Teddy Katz) -* cb74b87 Fix: avoid adding globals when an env is used with `false` (fixes #9202) (#9203) (Teddy Katz) -* f9b7544 Docs: Correct a typo in generator-star-spacing documentation (#9205) (Ethan Rutherford) -* e5c5e83 Build: Fixing issue with docs generation (Fixes #9199) (#9200) (Ilya Volodin) - -v4.6.0 - September 1, 2017 - -* 56dd769 Docs: fix link format in prefer-arrow-callback.md (#9198) (Vse Mozhet Byt) -* 6becf91 Update: add eslint version to error output. (fixes #9037) (#9071) (薛定谔的猫) -* 0e09973 New: function-paren-newline rule (fixes #6074) (#8102) (Teddy Katz) -* 88a64cc Chore: Make parseJsonConfig() a pure function in Linter (#9186) (Teddy Katz) -* 1bbac51 Fix: avoid breaking eslint-plugin-eslint-comments (fixes #9193) (#9196) (Teddy Katz) -* 3e8b70a Fix: off-by-one error in eslint-disable comment checking (#9195) (Teddy Katz) -* 73815f6 Docs: rewrite prefer-arrow-callback documentation (fixes #8950) (#9077) (Charles E. Morgan) -* 0d3a854 Chore: avoid mutating report descriptors in report-translator (#9189) (Teddy Katz) -* 2db356b Update: no-unused-vars Improve message to include the allowed patterns (#9176) (Eli White) -* 8fbaf0a Update: Add configurability to generator-star-spacing (#8985) (Ethan Rutherford) -* 8ed779c Chore: remove currentScopes property from Linter instances (refs #9161) (#9187) (Teddy Katz) -* af4ad60 Fix: Handle error when running init without npm (#9169) (Gabriel Aumala) -* 4b94c6c Chore: make parse() a pure function in Linter (refs #9161) (#9183) (Teddy Katz) -* 1be5634 Chore: don't make Linter a subclass of EventEmitter (refs #9161) (#9177) (Teddy Katz) -* e95af9b Chore: don't include internal test helpers in npm package (#9160) (Teddy Katz) -* 6fb32e1 Chore: avoid using private Linter APIs in astUtils tests (refs #9161) (#9173) (Teddy Katz) -* de6dccd Docs: add documentation for Linter methods (refs #6525) (#9151) (Teddy Katz) -* 2d90030 Chore: remove unused assignment. (#9182) (薛定谔的猫) -* d672aef Chore: refactor reporting logic (refs #9161) (#9168) (Teddy Katz) -* 5ab0434 Fix: indent crash on sparse arrays with "off" option (fixes #9157) (#9166) (Teddy Katz) -* c147b97 Chore: Make SourceCodeFixer accept text instead of a SourceCode instance (#9178) (Teddy Katz) -* f127423 Chore: avoid using private Linter APIs in Linter tests (refs #9161) (#9175) (Teddy Katz) -* 2334335 Chore: avoid using private Linter APIs in SourceCode tests (refs #9161) (#9174) (Teddy Katz) -* 2dc243a Chore: avoid using internal Linter APIs in RuleTester (refs #9161) (#9172) (Teddy Katz) -* d6e436f Fix: no-extra-parens reported some parenthesized IIFEs (fixes #9140) (#9158) (Teddy Katz) -* e6b115c Build: Add an edit link to the rule docs’ metadata (#9049) (Jed Fox) -* fcb7bb4 Chore: avoid unnecessarily complex forEach calls in no-extra-parens (#9159) (Teddy Katz) -* ffa021e Docs: quotes rule - when does \n require backticks (#9135) (avimar) -* 60c5148 Chore: improve coverage in lib/*.js (#9130) (Teddy Katz) - -v4.5.0 - August 18, 2017 - -* decdd2c Update: allow arbitrary nodes to be ignored in `indent` (fixes #8594) (#9105) (Teddy Katz) -* 79062f3 Update: fix indentation of multiline `new.target` expressions (#9116) (Teddy Katz) -* d00e24f Upgrade: `chalk` to 2.x release (#9115) (Stephen Edgar) -* 6ef734a Docs: add missing word in processor documentation (#9106) (Teddy Katz) -* a4f53ba Fix: Include files with no messages in junit results (#9093) (#9094) (Sean DuBois) -* 1d6a9c0 Chore: enable eslint-plugin/test-case-shorthand-strings (#9067) (薛定谔的猫) -* f8add8f Fix: don't autofix with linter.verifyAndFix when `fix: false` is used (#9098) (Teddy Katz) -* 77bcee4 Docs: update instructions for adding TSC members (#9086) (Teddy Katz) -* bd09cd5 Update: avoid requiring NaN spaces of indentation (fixes #9083) (#9085) (Teddy Katz) -* c93a853 Chore: Remove extra space in blogpost template (#9088) (Kai Cataldo) - -v4.4.1 - August 7, 2017 - -* ec93614 Fix: no-multi-spaces to avoid reporting consecutive tabs (fixes #9079) (#9087) (Teddy Katz) - -v4.4.0 - August 5, 2017 - -* 89196fd Upgrade: Espree to 3.5.0 (#9074) (Gyandeep Singh) -* b3e4598 Fix: clarify AST and don't use `node.start`/`node.end` (fixes #8956) (#8984) (Toru Nagashima) -* 62911e4 Update: Add ImportDeclaration option to indent rule (#8955) (David Irvine) -* de75f9b Chore: enable object-curly-newline & object-property-newline.(fixes #9042) (#9068) (薛定谔的猫) -* 5ae8458 Docs: fix typo in object-shorthand.md (#9066) (Jon Berry) -* c3d5b39 Docs: clarify options descriptions (fixes #8875) (#9060) (Brandon Mailhiot) -* 37158c5 Docs: clarified behavior of globalReturn option (fixes #8953) (#9058) (Brandon Mailhiot) -* c2f3553 Docs: Update example for MemberExpression option of indent (fixes #9056) (#9057) (Jeff) -* 78a85e0 Fix: no-extra-parens incorrectly reports async function expressions (#9035) (薛定谔的猫) -* c794f86 Fix: getter-return reporting method named 'get' (fixes #8919) (#9004) (薛定谔的猫) -* d0f78ec Docs: update rule deprecation policy (fixes #8635) (#9033) (Teddy Katz) -* 5ab282f Fix: Print error message in bin/eslint.js (fixes #9011) (#9041) (Victor Hom) -* 50e3cf3 Docs: Update sort-keys doc to define natural ordering (fixes #9043) (#9045) (Karan Sharma) -* 7ecfe6a Chore: enable eslint-plugin/test-case-property-ordering (#9040) (薛定谔的猫) -* ad32697 Upgrade: js-yaml to 3.9.1 (refs #9011) (#9044) (Teddy Katz) -* 66c1d43 Docs: Create SUPPORT.md (#9031) (Teddy Katz) -* 7247b6c Update: handle indentation of custom destructuring syntax (fixes #8990) (#9027) (Teddy Katz) -* cdb82f2 Fix: padding-line-between-statements crash on semicolons after blocks (#8748) (Alexander Madyankin) -* 3141872 Chore: remove unnecessary eslint-disable comments in codebase (#9032) (Teddy Katz) -* 0f97279 Fix: refactor no-multi-spaces to avoid regex backtracking (fixes #9001) (#9008) (Teddy Katz) -* b74514d Fix: refactor RuleContext to not modify report locations (fixes #8980) (#8997) (Teddy Katz) -* 31d7fd2 Fix: inconsistent `indent` behavior on computed properties (fixes #8989) (#8999) (Teddy Katz) -* 3393894 Fix: avoid reporting the entire AST for missing rules (#8998) (Teddy Katz) -* b3b95b8 Chore: enable additional rules on ESLint codebase (#9013) (Teddy Katz) -* 9b6c552 Upgrade: eslint-plugin-eslint-plugin@0.8.0 (#9012) (薛定谔的猫) -* acbe86a Chore: disallow .substr and .substring in favor of .slice (#9010) (Teddy Katz) -* d0536d6 Chore: Optimizes adding Linter methods (fixes #9000) (#9007) (Sean C Denison) -* 0a0401f Chore: fix spelling error. (#9003) (薛定谔的猫) -* 3d020b9 Update: emit a warning for ecmaFeatures rather than throwing an error (#8974) (Teddy Katz) -* d2f8f9f Fix: include name of invalid config in validation messages (fixes #8963) (#8973) (Teddy Katz) -* c3ee46b Chore: fix misleading comment in RuleTester (#8995) (Teddy Katz) - -v4.3.0 - July 21, 2017 - -* 91dccdf Update: support more options in prefer-destructuring (#8796) (Victor Hom) -* 3bebcfd Update: Support generator yields in no constant condition (#8762) (Victor Hom) -* 96df8c9 Fix: Handle fixing objects containing comments (fixes #8484) (#8944) (Brian Schemp) -* e39d41d Docs: Make `peerDependencies` package.json snippet valid JSON (#8971) (Sam Adams) -* a5fd101 Fix: duplicated error message if a crash occurs (fixes #8964) (#8965) (Teddy Katz) -* f8d122c Docs: trailing commas not allowed in json (#8969) (Scott Fletcher) -* d09288a Chore: Use `output: null` to assert that a test case is not autofixed. (#8960) (薛定谔的猫) -* e639358 Update: add question to confirm downgrade (fixes #8870) (#8911) (Toru Nagashima) -* 601039d Docs: fix badge in eslint-config-eslint readme (#8954) (Teddy Katz) -* 3c231fa Update: add enforceInMethodNames to no-underscore-dangle (fixes #7065) (#7234) (Gabriele Petronella) -* 128591f Update: prefer-numeric-literals warns Number.parseInt (fixes #8913) (#8929) (Kevin Partington) -* 846f8b1 Docs: Clarified that core PRs require issue in maintainer guide (#8927) (Kevin Partington) -* 55bc35d Fix: Avoid shell mangling during eslint --init (#8936) (Anders Kaseorg) -* 10c3d78 Chore: fix misleading `indent` test (#8925) (Teddy Katz) -* fb8005d Update: no-restricted-globals custom error messages (fixes #8315) (#8932) (Kevin Partington) -* a747b6f Chore: make minor improvements to `indent` internals (#8947) (Teddy Katz) -* 1ea3723 Update: fix indentation of parenthesized MemberExpressions (fixes #8924) (#8928) (Teddy Katz) -* 9abc6f7 Update: fix BinaryExpression indentation edge case (fixes #8914) (#8930) (Teddy Katz) -* 0e90453 Docs: Fixing broken cyclomatic complexity link (fixes #8396) (#8937) (Chris Bargren) -* a8a8350 Chore: improve performance of `indent` rule (#8905) (Teddy Katz) -* 764b2a9 Chore: update header info in `indent` (#8926) (Teddy Katz) -* 597c217 Fix: confusing error if plugins from config is not an array (#8888) (Calvin Freitas) -* 3c1dd6d Docs: add description of no-sync `allowAtRootLevel` option (fixes #8902) (#8906) (Teddy Katz) -* 933a9cf Chore: add a fuzzer to detect bugs in core rules (#8422) (Teddy Katz) -* 45f8cd9 Docs: fix verifyAndFix result property name (#8903) (Tino Vyatkin) -* 1a89e1c Docs: Fix always-multiline example in multiline-ternary docs (#8904) (Nathan Woltman) - -v4.2.0 - July 8, 2017 - -* e0f0101 Update: fix indentation of nested function parameters (fixes #8892) (#8900) (Teddy Katz) -* 9f95a3e Chore: remove unused helper method from `indent` (#8901) (Teddy Katz) -* 11ffe6b Fix: no-regex-spaces rule incorrectly fixes quantified spaces (#8773) (Keri Warr) -* 975dacf Update: fix indentation of EmptyStatements (fixes #8882) (#8885) (Teddy Katz) -* 88ed041 Build: Turnoff CI branch build (fixes #8804) (#8873) (Gyandeep Singh) -* 72f22eb Chore: replace is-my-json-valid with Ajv (#8852) (Gajus Kuizinas) -* 7c8de92 Docs: Clarified PR guidelines in maintainer guide (#8876) (Kevin Partington) -* d1fc408 Docs: Update CLA link in Contributing docs (#8883) (Calvin Freitas) -* 931a9f1 Fix: indent false positive with multi-line await expression (#8837) (薛定谔的猫) -* 3767cda Update: add no-sync option to allow at root level (fixes #7985) (#8859) (Victor Hom) -* 1ce553d Docs: Fix wording of minProperties in object-curly-newline (fixes #8874) (#8878) (solmsted) -* f00854e Fix: --quiet no longer fixes warnings (fixes #8675) (#8858) (Kevin Partington) -* b678535 Chore: Add collapsible block for config in ISSUE_TEMPLATE (#8872) (Gyandeep Singh) -* 1f5bfc2 Update: Add always-multiline option to multiline-ternary (fixes #8770) (#8841) (Nathan Woltman) -* 22116f2 Fix: correct comma-dangle JSON schema (#8864) (Evgeny Poberezkin) -* 676af9e Update: fix indentation of JSXExpressionContainer contents (fixes #8832) (#8850) (Teddy Katz) -* 330dd58 Chore: fix title of linter test suite (#8861) (Teddy Katz) -* 60099ed Chore: enable for-direction rule on ESLint codebase (#8853) (薛定谔的猫) -* e0d1a84 Chore: upgrade eslint-plugin-eslint-plugin & eslint-plugin-node (#8856) (薛定谔的猫) -* 0780d86 Chore: remove identical tests (#8851) (Teddy Katz) -* 5c3ac8e Fix: arrow-parens fixer gets tripped up with trailing comma in args (#8838) (薛定谔的猫) -* c4f2e29 Build: fix race condition in demo (#8827) (Teddy Katz) -* c693be5 New: Allow passing a function as `fix` option (fixes #8039) (#8730) (Ian VanSchooten) -* 8796d55 Docs: add missing item to 4.0 migration guide table of contents (#8835) (薛定谔的猫) -* 742998c doc md update: false -> `false` (#8825) (Erik Vold) -* ce969f9 Docs: add guidelines for patch release communication (fixes #7277) (#8823) (Teddy Katz) -* 5c83c99 Docs: Clarify arrow function parens in no-extra-parens (fixes #8741) (#8822) (Kevin Partington) -* 84d921d Docs: Added note about Node/CJS scoping to no-redeclare (fixes #8814) (#8820) (Kevin Partington) -* 85c9327 Update: fix parenthesized CallExpression indentation (fixes #8790) (#8802) (Teddy Katz) -* be8d354 Update: simplify variable declarator indent handling (fixes #8785) (#8801) (Teddy Katz) -* 9417818 Fix: no-debugger autofixer produced invalid syntax (#8806) (Teddy Katz) -* 8698a92 New: getter-return rule (fixes #8449) (#8460) (薛定谔的猫) -* eac06f2 Fix: no-extra-parens false positives for variables called "let" (#8808) (Teddy Katz) -* 616587f Fix: dot-notation autofix produces syntax errors for object called "let" (#8807) (Teddy Katz) -* a53ef7e Fix: don't require a third argument in linter.verifyAndFix (fixes #8805) (#8809) (Teddy Katz) -* 5ad8b70 Docs: add minor formatting improvement to paragraph about parsers (#8816) (Teddy Katz) - -v4.1.1 - June 25, 2017 - -* f307aa0 Fix: ensure configs from a plugin are cached separately (fixes #8792) (#8798) (Teddy Katz) -* 8b48ae8 Docs: Add doc on parser services (fixes #8390) (#8795) (Victor Hom) -* 0d041e7 Fix: avoid crashing when using baseConfig with extends (fixes #8791) (#8797) (Teddy Katz) -* 03213bb Chore: improve comment explanation of `indent` internal functions (#8800) (Teddy Katz) -* d2e88ed Chore: Fix misleading comment in ConfigCache.js (#8799) (Teddy Katz) - -v4.1.0 - June 23, 2017 - -* e8f1362 Docs: Remove wrong descriptions in `padded-block` rule (#8783) (Plusb Preco) -* 291a783 Update: `enforceForArrowConditionals` to `no-extra-parens` (fixes #6196) (#8439) (Evilebot Tnawi) -* a21dd32 New: Add `overrides`/`files` options for glob-based config (fixes #3611) (#8081) (Sylvan Mably) -* 879688c Update: Add ignoreComments option to no-trailing-spaces (#8061) (Jake Roussel) -* b58ae2e Chore: Only instantiate fileEntryCache when cache flage set (perf) (#8763) (Gyandeep Singh) -* 9851288 Update: fix indent errors on multiline destructure (fixes #8729) (#8756) (Victor Hom) -* 3608f06 Docs: Increase visibility of code of conduct (fixes #8758) (#8764) (Kai Cataldo) -* 673a58b Update: support multiple fixes in a report (fixes #7348) (#8101) (Toru Nagashima) -* 7a1bc38 Fix: don't pass default parserOptions to custom parsers (fixes #8744) (#8745) (Teddy Katz) -* c5b4052 Chore: enable computed-property-spacing on ESLint codebase (#8760) (Teddy Katz) -* 3419f64 Docs: describe how to use formatters on the formatter demo page (#8754) (Teddy Katz) -* a3ff8f2 Chore: combine tests in tests/lib/eslint.js and tests/lib/linter.js (#8746) (Teddy Katz) -* b7cc1e6 Fix: Space-infix-ops should ignore type annotations in TypeScript (#8341) (Reyad Attiyat) -* 46e73ee Fix: eslint --init installs wrong dependencies of popular styles (fixes #7338) (#8713) (Toru Nagashima) -* a82361b Chore: Prevent package-lock.json files from being created (fixes #8742) (#8747) (Teddy Katz) -* 5f81a68 New: Add eslintIgnore support to package.json (fixes #8458) (#8690) (Victor Hom) -* b5a70b4 Update: fix multiline binary operator/parentheses indentation (#8719) (Teddy Katz) -* ab8b016 Update: fix MemberExpression indentation with "off" option (fixes #8721) (#8724) (Teddy Katz) -* eb5d12c Update: Add Fixer method to Linter API (#8631) (Gyandeep Singh) -* 26a2daa Chore: Cache fs reads in ignored-paths (fixes #8363) (#8706) (Victor Hom) - -v4.0.0 - June 11, 2017 - -* 4aefb49 Chore: avoid using deprecated rules on ESLint codebase (#8708) (Teddy Katz) -* 389feba Chore: upgrade deps. (#8684) (薛定谔的猫) -* 3da7b5e Fix: Semi-Style only check for comments when tokens exist (fixes #8696) (#8697) (Reyad Attiyat) -* 3cfe9ee Fix: Add space between async and param on fix (fixes #8682) (#8693) (Reyad Attiyat) -* c702858 Chore: enable no-multiple-empty-lines on ESLint codebase (#8694) (Teddy Katz) -* 34c4020 Update: Add support for parens on left side for-loops (fixes: #8393) (#8679) (Victor Hom) -* 735cd09 Docs: Correct the comment in an example for `no-mixed-requires` (#8686) (Fangzhou Li) -* 026f048 Chore: remove dead code from prefer-const (#8683) (Teddy Katz) - -v4.0.0-rc.0 - June 2, 2017 - -* 0058b0f8 Update: add --fix to no-debugger (#8660) (薛定谔的猫) -* b4daa225 Docs: Note to --fix option for strict rule (#8680) (Vitaliy Potapov) -* 4df33e7c Chore: check for root:true in project sooner (fixes #8561) (#8638) (Victor Hom) -* c9b980ce Build: Add Node 8 on travis (#8669) (Gyandeep Singh) -* 95248336 Fix: Don't check object destructing in integer property (fixes #8654) (#8657) (flowmemo) -* c4ac969c Update: fix parenthesized ternary expression indentation (fixes #8637) (#8649) (Teddy Katz) -* 4f2f9fcb Build: update license checker to allow LGPL (fixes #8647) (#8652) (Teddy Katz) -* b0c83bd1 Docs: suggest pushing new commits to a PR instead of amending (#8632) (Teddy Katz) -* d0e9fd2d Fix: Config merge to correctly account for extends (fixes #8193) (#8636) (Gyandeep Singh) -* 705d88f7 Docs: Update CLA link on Pull Requests page (#8642) (Teddy Katz) -* 794d4d6c Docs: missing paren on readme (#8640) (Dan Beam) -* 7ebd9d6f New: array-element-newline rule (fixes #6075) (#8375) (Jan Peer Stöcklmair) -* f62cff66 Chore: Remove dependency to user-home (fixes #8604) (#8629) (Pavol Madar) -* 936bc174 Docs: Add missing documentation for scoped modules in sharable config developer-guide (#8610) (Jonathan Samines) - -v4.0.0-beta.0 - May 19, 2017 - -* 2f7015b6 New: semi-style rule (fixes #8169) (#8542) (Toru Nagashima) -* 1eaef580 Revert "Breaking: Traverse into type annotations (fixes #7129) (#8365)" (#8584) (Kai Cataldo) -* eb14584a Fix: no-unneeded-ternary change code behavior after fix (fixes #8507) (#8624) (Jan Peer Stöcklmair) -* 3ec436ee Breaking: New Linter API (fixes #8454) (#8465) (Gyandeep Singh) -* 3fc9653a Fix: Call expression consistency in variable declaration (fixes #8607) (#8619) (Reyad Attiyat) -* 5b6093ef Docs: Remove .eslintignore reference to transpiled file filtering (#8622) (Alex Summer) -* 729bbcdb Chore: Fix lgtm alerts. (#8611) (Max Schaefer) -* 3418479a Update: improve indent of `flatTernaryExpressions` (fixes #8481) (#8587) (Toru Nagashima) -* 268d52ef Update: Use sane defaults for JSX indentation (fixes #8425) (#8593) (Teddy Katz) -* d21f5283 Chore: make shelljs a devDependency instead of a dependency (#8608) (Teddy Katz) -* 11493781 Docs: Rephrase in about section (#8609) (Sudarsan G P) -* 23401626 Chore: remove strip-bom dependency (refs #8603) (#8606) (Teddy Katz) -* a93a2f95 New: padding-line-between-statements rule (fixes #7356) (#8099) (Toru Nagashima) -* 0ef09ea0 New: for-direction rule (fixes #8387) (#8519) (薛定谔的猫) -* a73e6c09 Fix: Fix failing uknown node test since #8569 indents class bodies (#8588) (Reyad Attiyat) -* c6c639d6 Fix: Ignore unknown nodes for Indent rule (fixes #8440) (#8504) (Reyad Attiyat) -* df17bc87 Fix: object-shorthand crash on some computed keys (fixes #8576) (#8577) (Teddy Katz) -* 482d5720 New: switch-colon-spacing rule (fixes #7981) (#8540) (Toru Nagashima) -* afa35c68 Update: check allman-style classes correctly in indent (fixes #8493) (#8569) (Teddy Katz) -* de0b4ad7 Fix: Indent Ignore Variable Declaration init operator (fixes #8546) (#8563) (Reyad Attiyat) -* 927ca0dc Fix: invalid syntax from prefer-arrow-callback autofixer (fixes #8541) (#8555) (Teddy Katz) -* 25db3d22 Chore: avoid skipping test for env overrides (refs #8291) (#8556) (Teddy Katz) -* 456f519b Update: make indent MemberExpression handling more robust (fixes #8552) (#8554) (Teddy Katz) -* 873310e5 Fix: run no-unexpected-multiline only if needed (fixes #8550) (#8551) (Ruben Bridgewater) -* 833a0cad Fix: confusing RuleTester error message when options is not an array (#8557) (Teddy Katz) - -v4.0.0-alpha.2 - May 5, 2017 - -* 74ab344 Update: check allman-style blocks correctly in indent rule (fixes #8493) (#8499) (Teddy Katz) -* f6256d4 Update: no-extend-native checks global scope refs only (fixes #8461) (#8528) (Kevin Partington) -* b463045 Docs: add typescript-eslint-parser (#8388) (#8534) (薛定谔的猫) -* 99c56d5 Update: handle multiline parents consistently in indent (fixes #8455) (#8498) (Teddy Katz) -* cf940c6 Update: indent `from` tokens in import statements (fixes #8438) (#8466) (Teddy Katz) -* 0a9a90f Fix: max-len doesn't allow comments longer than code (#8532) (Ken Gregory) -* 734846b Breaking: validate eslintrc properties (fixes #8213) (#8295) (alberto) -* 025e97a Chore: delete duplicated test. (#8527) (薛定谔的猫) -* 6a333ff Upgrade: espree@^3.4.2 (#8526) (Kevin Partington) -* e52d998 Docs: Configuring Cascading and Hierarchy example correction (#8512) (Cheong Yip) -* e135aa5 Docs: Correct code of conduct link on Readme.md (#8517) (Zander Mackie) -* 37e3ba1 Chore: Add license report and scan status (#8503) (Kevin Wang) -* afbea78 Chore: don't pull default options from eslint:recommended (fixes #8374) (#8381) (Teddy Katz) -* d49acc3 Update: fix no-self-compare false negative on non-literals (fixes #7677) (#8492) (Teddy Katz) -* aaa1a81 Fix: avoid creating extra whitespace in brace-style fixer (fixes #7621) (#8491) (Teddy Katz) -* 9c3da77 Docs: list another related rule in no-undefined (#8467) (Ethan) -* f987814 Docs: Update CHANGELOG.md for v4.0.0-alpha.1 release (#8488) (Kai Cataldo) - -v4.0.0-alpha.1 - April 21, 2017 - -* b0dadfe3 Docs: Update comments section of Migrating to v4.0.0 (#8486) (Kai Cataldo) -* b337738f Update: Add `consistent` option to `object-curly-newline` (fixes #6488) (#7720) (Evilebot Tnawi) -* 53fefb3b Update: add fix for no-confusing-arrow (#8347) (Mordy Tikotzky) -* 735d02d5 Update: Deprecate sourceCode.getComments() (fixes #8408) (#8434) (Kai Cataldo) -* ac39e3b0 Update: no-unexpected-multiline to flag confusing division (fixes #8469) (#8475) (Teddy Katz) -* e35107f0 Fix: indent crash on arrow functions without parens at start of line (#8477) (Teddy Katz) -* 973adeb6 Docs: State that functions option only applies in ES2017 (fixes #7809) (#8468) (Thenaesh Elango) -* 7bc6fe0a New: array-bracket-newline rule (#8314) (Jan Peer Stöcklmair) -* 10a1a2d7 Chore: Do not use cache when testing (#8464) (Kai Cataldo) -* 9f540fd2 Update: no-unused-vars false negative about destructuring (fixes #8442) (#8459) (Toru Nagashima) -* 741ed393 Docs: Clarify how to run local ESLint installation (#8463) (Kai Cataldo) -* fac53890 Breaking: Remove array-callback-return from recommended (fixes #8428) (#8433) (Kai Cataldo) -* 288c96c1 Upgrade: dependencies (#8304) (alberto) -* 48700fc8 Docs: Remove extra header line from LICENSE (#8448) (Teddy Katz) -* 161ee4ea Chore: avoid cloning comments array in TokenStore (#8436) (Teddy Katz) -* 0c2a386e Docs: clarify new indent behavior with MemberExpressions (#8432) (Teddy Katz) -* 446b8876 Docs: update space-before-function-paren docs for 4.0 (fixes #8430) (#8431) (Teddy Katz) - -v4.0.0-alpha.0 - April 7, 2017 - -* 950874f Docs: add 4.0.0 migration guide (fixes #8306) (#8313) (Teddy Katz) -* 2754141 Fix: more autofix token-combining bugs (#8394) (Teddy Katz) -* f5a7e42 Breaking: log number of fixable problems (fixes #7364) (#8324) (alberto) -* 769b121 Chore: Fix indentation errors in indent-legacy (#8424) (Kai Cataldo) -* 8394e48 Update: add deprecated indent-legacy rule as v3.x indent rule snapshot (#8286) (Teddy Katz) -* 3c87e85 Fix: no-multi-spaces false positive with irregular indent whitespace (#8412) (Teddy Katz) -* cc53481 Breaking: rewrite indent (fixes #1801, #3737, #3845, #6007, ...16 more) (#7618) (Teddy Katz) -* 867dd2e Breaking: Calculate leading/trailing comments in core (#7516) (Kai Cataldo) -* de9f1a0 Docs: ES6 syntax vs globals configuration (fixes #7984) (#8350) (Zander Mackie) -* 66af53e Breaking: Traverse into type annotations (fixes #7129) (#8365) (Kai Cataldo) -* 86cf3e4 New: no-buffer-constructor rule (fixes #5614) (#8413) (Teddy Katz) -* f560c06 Update: fix space-unary-ops behavior with postfix UpdateExpressions (#8391) (Teddy Katz) -* 936af66 Fix: no-multiple-empty-lines crash on space after last \n (fixes #8401) (#8402) (Teddy Katz) -* e395919 Breaking: Resolve patterns from .eslintignore directory (fixes #6759) (#7678) (Ian VanSchooten) -* c778676 Breaking: convert RuleTester to ES6 class (refs #8231) (#8263) (Teddy Katz) -* 6f7757e Breaking: convert SourceCode to ES6 class (refs #8231) (#8264) (Teddy Katz) -* 8842d7e Chore: fix comment spacing in tests (#8405) (Teddy Katz) -* 9a9d916 Breaking: update eslint:recommended for 4.0.0 (fixes #8236) (#8372) (Teddy Katz) -* b0c63f0 Breaking: infer endLine and endColumn from a reported node (fixes #8004) (#8234) (Teddy Katz) -* 40b8c69 Breaking: no-multi-spaces check around inline comments (fixes #7693) (#7696) (Kai Cataldo) -* 034a575 Breaking: convert CLIEngine to ES6 class (refs #8231) (#8262) (Teddy Katz) -* 7dd890d Breaking: tweak space-before-function-paren default option (fixes #8267) (#8285) (Teddy Katz) -* 0e0dd27 Breaking: Remove `ecmaFeatures` from `eslint:recommended` (#8239) (alberto) -* 2fa7502 Breaking: disallow scoped plugin references without scope (fixes #6362) (#8233) (Teddy Katz) -* 4673f6e Chore: Switch to eslint-scope from escope (#8280) (Corbin Uselton) -* e232464 Breaking: change defaults for padded-blocks (fixes #7879) (#8134) (alberto) - -v3.19.0 - March 31, 2017 - -* e09132f Fix: no-extra-parens false positive with exports and object literals (#8359) (Teddy Katz) -* 91baed4 Update: allow custom messages in no-restricted-syntax (fixes #8298) (#8357) (Vitor Balocco) -* 35c93e6 Fix: prevent space-before-function-paren from checking type annotations (#8349) (Teddy Katz) -* 3342e9f Fix: don't modify operator precedence in operator-assignment autofixer (#8358) (Teddy Katz) -* f88375f Docs: clarify that no-unsafe-negation is in eslint:recommended (#8371) (Teddy Katz) -* 02f0d27 Docs: Add soda0289 to Development Team (#8367) (Kai Cataldo) -* 155424c Fix: ignore empty path in patterns (fixes #8362) (#8364) (alberto) -* 27616a8 Fix: prefer-const false positive with object spread (fixes #8187) (#8297) (Vitor Balocco) -* 8569a90 Docs: add note about git's linebreak handling to linebreak-style docs (#8361) (Teddy Katz) -* 5878593 Chore: fix invalid syntax in no-param-reassign test (#8360) (Teddy Katz) -* 1b1046b Fix: don't classify plugins that throw errors as "missing" (fixes #6874) (#8323) (Teddy Katz) -* 29f4ba5 Fix: no-useless-computed-key invalid autofix for getters and setters (#8335) (Teddy Katz) -* 0541eaf Fix: no-implicit-coercion invalid autofix with consecutive identifiers (#8340) (Teddy Katz) -* 41b9786 Fix: no-extra-parens false positive with objects following arrows (#8339) (Teddy Katz) -* 3146167 Fix: `eslint.verify` should not mutate config argument (fixes #8329) (#8334) (alberto) -* 927de90 Fix: dot-notation autofix produces invalid syntax for integer properties (#8332) (Teddy Katz) -* a9d1bea Fix: comma-style autofix produces errors on parenthesized elements (#8331) (Teddy Katz) -* d52173f Fix: don't generate invalid options in config-rule (#8326) (Teddy Katz) -* 6eda3b5 Fix: no-extra-parens invalid autofix in for-of statements (#8337) (Teddy Katz) -* 6c819d8 Fix: dot-notation autofix produces errors on parenthesized computed keys (#8330) (Teddy Katz) -* 2d883d7 Fix: object-shorthand autofix produces errors on parenthesized functions (#8328) (Teddy Katz) -* cd9b774 Fix: quotes false positive with backtick option in method names (#8327) (Teddy Katz) -* d064ba2 Fix: no-else-return false positive for ifs in single-statement position (#8338) (Teddy Katz) -* 6a718ba Chore: enable max-statements-per-line on ESLint codebase (#8321) (Teddy Katz) -* 614b62e Chore: update sinon calls to deprecated API. (#8310) (alberto) -* 0491572 Chore: use precalculated counts in codeframe formatter (#8296) (Vitor Balocco) -* 8733e6a Chore: Fix incorrect error location properties in tests (#8307) (alberto) -* c4ffb49 Chore: Fix typos in test option assertions (#8305) (Teddy Katz) -* 79a97cb Upgrade: devDependencies (#8303) (alberto) -* e4da200 Upgrade: Mocha to 3.2.0 (#8299) (Ilya Volodin) -* 2f144ca Fix: operator-assignment autofix errors with parentheses (fixes #8293) (#8294) (Teddy Katz) -* 7521cd5 Chore: update token logic in rules to use ast-utils (#8288) (Teddy Katz) -* 9b509ce Chore: refactor space-before-function-paren rule (#8284) (Teddy Katz) -* ddc6350 Fix: no-param-reassign false positive on destructuring (fixes #8279) (#8281) (Teddy Katz) -* f8176b3 Chore: improve test coverage for node-event-generator (#8287) (Teddy Katz) -* 602e9c2 Docs: fix incorrect selector examples (#8278) (Teddy Katz) - -v3.18.0 - March 17, 2017 - -* 85f74ca Fix: broken code path of direct nested loops (fixes #8248) (#8274) (Toru Nagashima) -* a61c359 Fix: Ignore hidden folders when resolving globs (fixes #8259) (#8270) (Ian VanSchooten) -* 6f05546 Chore: convert StubModuleResolver in config tests to ES6 class (#8265) (Teddy Katz) -* 0c0fc31 Fix: false positive of no-extra-parens about spread and sequense (#8275) (Toru Nagashima) -* e104973 Docs: remove self-reference in no-restricted-syntax docs (#8277) (Vitor Balocco) -* 23eca51 Update: Add allowTaggedTemplates to no-unused-expressions (fixes #7632) (#8253) (Kevin Partington) -* f9ede3f Upgrade: doctrine to 2.0.0 (#8269) (alberto) -* 1b678a6 New: allow rules to listen for AST selectors (fixes #5407) (#7833) (Teddy Katz) -* 63ca0c5 Chore: use precalculated counts in stylish formatter (#8251) (alberto) -* 47c3171 Fix: typo in console.error (#8258) (Jan Peer Stöcklmair) -* e74ed6d Chore: convert Traverser to ES6 class (refs #7849) (#8232) (Teddy Katz) -* 13eead9 Fix: sort-vars crash on mixed destructuring declarations (#8245) (Teddy Katz) -* 133f489 Fix: func-name-matching crash on destructuring assignment to functions (#8247) (Teddy Katz) -* a34b9c4 Fix: func-name-matching crash on non-string literal computed keys (#8246) (Teddy Katz) -* 7276e6d Docs: remove unneeded semicolons in arrow-parens.md (#8249) (Dmitry Gershun) -* 8c40a25 concat-stream known to be vulnerable prior 1.5.2 (#8228) (Samuel) -* 149c055 Upgrade: mock-fs to v4.2.0 (fixes #8194) (#8243) (Teddy Katz) -* a83bff9 Build: remove unneeded json config in demo (fixes #8237) (#8242) (alberto) -* df12137 Docs: fix typos (#8235) (Gyandeep Singh) -* b5e9788 Chore: rename no-extra-parens methods (#8225) (Vitor Balocco) -* 7f8afe6 Update: no-extra-parens overlooked spread and superClass (fixes #8175) (#8209) (Toru Nagashima) -* ce6ff56 Docs: set recommended true for no-global-assign (fixes #8215) (#8218) (BinYi LIU) -* 5b5c236 Fix: wrong comment when module not found in config (fixes #8192) (#8196) (alberto) - -v3.17.1 - March 6, 2017 - -* f8c8e6e Build: change mock-fs path without SSH (fixes #8207) (#8208) (Toru Nagashima) -* f713f11 Fix: nonblock-statement-body-position multiline error (fixes #8202) (#8203) (Teddy Katz) -* 41e3d9c Fix: `operator-assignment` with parenthesized expression (fixes #8190) (#8197) (alberto) -* 5e3bca7 Chore: add eslint-plugin-eslint-plugin (#8198) (Teddy Katz) -* 580da36 Chore: add missing `output` property to tests (#8195) (alberto) - -v3.17.0 - March 3, 2017 - -* 4fdf6d7 Update: deprecate `applyDefaultPatterns` in `line-comment-position` (#8183) (alberto) -* 25e5817 Fix: Don't autofix `+ +a` to `++a` in space-unary-ops (#8176) (Alan Pierce) -* a6ce8f9 Build: Sort rules before dumping them to doc files (#8154) (Danny Andrews) -* 0af9057 Chore: Upgrade to a patched version of mock-fs (fixes #8177) (#8188) (Teddy Katz) -* bf4d8cf Update: ignore eslint comments in lines-arount-comment (fixes #4345) (#8155) (alberto) -* dad20ad New: add SourceCode#getLocFromIndex and #getIndexFromLoc (fixes #8073) (#8158) (Teddy Katz) -* 18a519f Update: let RuleTester cases assert that no autofix occurs (fixes #8157) (#8163) (Teddy Katz) -* a30eb8d Docs: improve documentation for RuleTester cases (#8162) (Teddy Katz) -* a78ec9f Chore: upgrade `coveralls` to ^2.11.16 (#8161) (alberto) -* d02bd11 Fix: padded-blocks autofix problems with comments (#8149) (alberto) -* 9994889 Docs: Add missing space to `create` in `no-use-before-define` (#8166) (Justin Anastos) -* 4d542ba Docs: Remove unneeded statement about autofix (#8164) (alberto) -* 20daea5 New: no-compare-neg-zero rule (#8091) (薛定谔的猫) -* 4d35a81 Fix: Add a utility to avoid autofix conflicts (fixes #7928, fixes #8026) (#8067) (Alan Pierce) -* 287e882 New: nonblock-statement-body-position rule (fixes #6067) (#8108) (Teddy Katz) -* 7f1f4e5 Chore: remove unneeded devDeps `linefix` and `gh-got` (#8160) (alberto) -* ca1694b Update: ignore negative ranges in fixes (#8133) (alberto) -* 163d751 Docs: `lines-around-comment` doesn't disallow empty lines (#8151) (alberto) -* 1c84922 Chore: upgrade eslint-plugin-node (#8156) (alberto) -* 1ee5c27 Fix: Make RuleTester handle empty-string cases gracefully (fixes #8142) (#8143) (Teddy Katz) -* 044bc10 Docs: Add details about "--fix" option for "sort-imports" rule (#8077) (Olivier Audard) -* 3fec54a Add option to ignore property in no-param-reassign (#8087) (Christian Bundy) -* 4e52cfc Fix: Improve keyword-spacing typescript support (fixes #8110) (#8111) (Reyad Attiyat) -* 7ff42e8 New: Allow regexes in RuleTester (fixes #7837) (#8115) (Daniel Lo Nigro) -* cbd7ded Build: display rules’ meta data in their docs (fixes #5774) (#8127) (Wilson Kurniawan) -* da8e8af Update: include function name in report message if possible (fixes #7260) (#8058) (Dieter Luypaert) -* 8f91e32 Fix: `ignoreRestSiblings` option didn't cover arguments (fixes #8119) (#8120) (Toru Nagashima) - -v3.16.1 - February 22, 2017 - -* ff8a80c Fix: duplicated autofix output for inverted fix ranges (fixes #8116) (#8117) (Teddy Katz) -* a421897 Docs: fix typo in arrow-parens.md (#8132) (Will Chen) -* 22d7fbf Chore: fix invalid redeclared variables in tests (#8130) (Teddy Katz) -* 8d95598 Chore: fix output assertion typos in rule tests (#8129) (Teddy Katz) -* 9fa2559 Docs: Add missing quotes in key-spacing rule (#8121) (Glenn Reyes) -* f3a6ced Build: package.json update for eslint-config-eslint release (ESLint Jenkins) - -v3.16.0 - February 20, 2017 - -* d89d0b4 Update: fix quotes false negative for string literals as template tags (#8107) (Teddy Katz) -* 21be366 Chore: Ensuring eslint:recommended rules are sorted. (#8106) (Kevin Partington) -* 360dbe4 Update: Improve error message when extend config missing (fixes #6115) (#8100) (alberto) -* f62a724 Chore: use updated token iterator methods (#8103) (Kai Cataldo) -* daf6f26 Fix: check output in RuleTester when errors is a number (fixes #7640) (#8097) (alberto) -* cfb65c5 Update: make no-lone-blocks report blocks in switch cases (fixes #8047) (#8062) (Teddy Katz) -* 290fb1f Update: Add includeComments to getTokenByRangeStart (fixes #8068) (#8069) (Kai Cataldo) -* ff066dc Chore: Incorrect source code test text (#8096) (Jack Ford) -* 14d146d Docs: Clarify --ext only works with directories (fixes #7939) (#8095) (alberto) -* 013a454 Docs: Add TSC meeting quorum requirement (#8086) (Kevin Partington) -* 7516303 Fix: `sourceCode.getTokenAfter` shouldn't skip tokens after comments (#8055) (Toru Nagashima) -* c53e034 Fix: unicode-bom fixer insert BOM in appropriate location (fixes #8083) (#8084) (pantosha) -* 55ac302 Chore: fix the timing to define rules for tests (#8082) (Toru Nagashima) -* c7e64f3 Upgrade: mock-fs (#8070) (Toru Nagashima) -* acc3301 Update: handle uncommon linebreaks consistently in rules (fixes #7949) (#8049) (Teddy Katz) -* 591b74a Chore: enable operator-linebreak on ESLint codebase (#8064) (Teddy Katz) -* 6445d2a Docs: Add documentation for /* exported */ (fixes #7998) (#8065) (Lee Yi Min) -* fcc38db Chore: simplify and improve performance for autofix (#8035) (Toru Nagashima) -* b04fde7 Chore: improve performance of SourceCode constructor (#8054) (Teddy Katz) -* 90fd555 Update: improve null detection in eqeqeq for ES6 regexes (fixes #8020) (#8042) (Teddy Katz) -* 16248e2 Fix: no-extra-boolean-cast incorrect Boolean() autofixing (fixes #7977) (#8037) (Jonathan Wilsson) -* 834f45d Update: rewrite TokenStore (fixes #7810) (#7936) (Toru Nagashima) -* 329dcdc Chore: unify checks for statement list parents (#8048) (Teddy Katz) -* c596690 Docs: Clarify generator-star-spacing config example (fixes #8027) (#8034) (Hòa Trần) -* a11d4a6 Docs: fix a typo in shareable configs documentation (#8036) (Dan Homola) -* 1e3d4c6 Update: add fixer for no-unused-labels (#7841) (Teddy Katz) -* f47fb98 Update: ensure semi-spacing checks import/export declarations (#8033) (Teddy Katz) -* e228d56 Update: no-undefined handles properties/classes/modules (fixes #7964) (#7966) (Kevin Partington) -* 7bc92d9 Chore: fix invalid test cases (#8030) (Toru Nagashima) - -v3.15.0 - February 3, 2017 - -* f2a3580 Fix: `no-extra-parens` incorrect precedence (fixes #7978) (#7999) (alberto) -* d6b6ba1 Fix: no-var should fix ForStatement.init (#7993) (Toru Nagashima) -* 99d386d Upgrade: Espree v3.4.0 (#8019) (Kai Cataldo) -* 42390fd Docs: update README.md for team (#8016) (Toru Nagashima) -* d7ffd88 Chore: enable template-tag-spacing on ESLint codebase (#8005) (Teddy Katz) -* f2be7e3 Docs: Fix typo in object-curly-newline.md (#8002) (Danny Andrews) -* df2351a Docs: Fix misleading section in brace-style documentation (#7996) (Teddy Katz) -* 5ae6e00 Chore: avoid unnecessary feature detection for Symbol (#7992) (Teddy Katz) -* 5d57c57 Chore: fix no-else-return lint error (refs #7986) (#7994) (Vitor Balocco) -* 62fb054 Chore: enable no-else-return on ESLint codebase (#7986) (Teddy Katz) -* c59a0ba Update: add ignoreRestSiblings option to no-unused-vars (#7968) (Zack Argyle) -* 5cdfa99 Chore: enable no-unneeded-ternary on ESLint codebase (#7987) (Teddy Katz) -* fbd7c13 Update: ensure operator-assignment handles exponentiation operators (#7970) (Teddy Katz) -* c5066ce Update: add "variables" option to no-use-before-define (fixes #7111) (#7948) (Teddy Katz) -* 09546a4 New: `template-tag-spacing` rule (fixes #7631) (#7913) (Jonathan Wilsson) - -v3.14.1 - January 25, 2017 - -* 791f32b Fix: brace-style false positive for keyword method names (fixes #7974) (#7980) (Teddy Katz) -* d7a0add Docs: Add ESLint tutorial embed to getting started (#7971) (Jamis Charles) -* 72d41f0 Fix: no-var autofix syntax error in single-line statements (fixes #7961) (#7962) (Teddy Katz) -* b9e5b68 Fix: indent rule crash on sparse array with object (fixes #7959) (#7960) (Gyandeep Singh) -* a7bd66a Chore: Adding assign/redeclare tests to no-undefined (refs #7964) (#7965) (Kevin Partington) -* 8bcbf5d Docs: typo in prefer-promise-reject-errors (#7958) (Patrick McElhaney) - -v3.14.0 - January 20, 2017 - -* 506324a Fix: `no-var` does not fix if causes ReferenceError (fixes #7950) (#7953) (Toru Nagashima) -* 05e7432 New: no-chained-assignments rule (fixes #6424) (#7904) (Stewart Rand) -* 243e47d Update: Add fixer for no-else-return (fixes #7863) (#7864) (Xander Dumaine) -* f091d95 New: `prefer-promise-reject-errors` rule (fixes #7685) (#7689) (Teddy Katz) -* ca01e00 Fix: recognize all line terminators in func-call-spacing (fixes #7923) (#7924) (Francesco Trotta) -* a664e8a Update: add ignoreJSX option to no-extra-parens (Fixes #7444) (#7926) (Robert Rossmann) -* 8ac3518 Fix: no-useless-computed-key false positive with `__proto__` (#7934) (Teddy Katz) -* c835e19 Docs: remove reference to deleted rule (#7942) (Alejandro Oviedo) -* 3c1e63b Docs: Improve examples for no-case-declarations (fixes #6716) (#7920) (Kevin Rangel) -* 7e04b33 Fix: Ignore inline plugin rule config in autoconfig (fixes #7860) (#7919) (Ian VanSchooten) -* 6448ba0 Fix: add parentheses in no-extra-boolean-cast autofixer (fixes #7912) (#7914) (Szymon Przybylski) -* b3f2094 Fix: brace-style crash with lone block statements (fixes #7908) (#7909) (Teddy Katz) -* 5eb2e88 Docs: Correct typos in configuring.md (#7916) (Gabriel Delépine) -* bd5e219 Update: ensure brace-style validates class bodies (fixes #7608) (#7871) (Teddy Katz) -* 427543a Fix: catastrophic backtracking in astUtils linebreak regex (fixes #7893) (#7898) (Teddy Katz) -* 995554c Fix: Correct typos in no-alert.md and lib/ast-utils.js (#7905) (Stewart Rand) -* d6150e3 Chore: Enable comma-dangle on ESLint codebase (fixes #7725) (#7906) (Teddy Katz) -* 075ec25 Chore: update to use ES6 classes (refs #7849) (#7891) (Claire Dranginis) -* 55f0cb6 Update: refactor brace-style and fix inconsistencies (fixes #7869) (#7870) (Teddy Katz) - -v3.13.1 - January 9, 2017 - -* 3fc4e3f Fix: prefer-destructuring reporting compound assignments (fixes #7881) (#7882) (Teddy Katz) -* f90462e Fix: no-extra-label autofix should not remove labels used elsewhere (#7885) (Teddy Katz) - -v3.13.0 - January 6, 2017 - -* cd4c025 Update: add fixer for no-extra-label (#7840) (Teddy Katz) -* aa75c92 Fix: Ensure prefer-const fixes destructuring assignments (fixes #7852) (#7859) (Teddy Katz) -* 4008022 Chore: Refactor to use ES6 Classes (Part 3)(refs #7849) (#7865) (Gyandeep Singh) -* c9ba40a Update: add fixer for `no-unneeded-ternary` (#7540) (Teddy Katz) -* dd56d87 Update: add object-shorthand option for arrow functions (fixes #7564) (#7746) (Teddy Katz) -* fbafdc0 Docs: `padded-blocks` `never` case (fixes #7868) (#7878) (alberto) -* ca1f841 Fix: no-useless-return stack overflow on loops after throw (fixes #7855) (#7856) (Teddy Katz) -* d80d994 Update: add fixer for object-property-newline (fixes #7740) (#7808) (Teddy Katz) -* bf3ea3a Fix: capitalized-comments: Ignore consec. comments if first is invalid (#7835) (Kevin Partington) -* 616611a Chore: Refactor to use ES6 Classes (Part 2)(refs #7849) (#7847) (Gyandeep Singh) -* 856084b Chore: Refactor to use ES6 Classes (Part 1)(refs #7849) (#7846) (Gyandeep Singh) -* bf45893 Docs: Clarify that we only support Stage 4 proposals (#7845) (Kevin Partington) -* 0fc24f7 Fix: adapt new-paren rule so it handles TypeScript (fixes #7817) (#7820) (Philipp A) -* df0b06b Fix: no-multiple-empty-lines perf issue on large files (fixes #7803) (#7843) (Teddy Katz) -* 18fa521 Chore: use ast-utils helper functions in no-multiple-empty-lines (#7842) (Teddy Katz) -* 7122205 Docs: Array destructuring example for no-unused-vars (fixes #7838) (#7839) (Remco Haszing) -* e21b36b Chore: add integration tests for cache files (refs #7748) (#7794) (Teddy Katz) -* 2322733 Fix: Throw error if ruletester is missing required test scenarios (#7388) (Teddy Katz) -* 1beecec Update: add fixer for `operator-linebreak` (#7702) (Teddy Katz) -* c5c3b21 Fix: no-implied-eval false positive on 'setTimeoutFoo' (fixes #7821) (#7836) (Teddy Katz) -* 00dd96c Chore: enable array-bracket-spacing on ESLint codebase (#7830) (Teddy Katz) -* ebcae1f Update: no-return-await with with complex `return` argument (fixes #7594) (#7595) (Dalton Santos) -* fd4cd3b Fix: Disable no-var autofixer in some incorrect cases in loops (#7811) (Alan Pierce) -* 1f25834 Docs: update outdated info in Architecture page (#7816) (Teddy Katz) -* f20b9e9 Fix: Relax no-useless-escape's handling of ']' in regexes (fixes #7789) (#7793) (Teddy Katz) -* 3004c1e Fix: consistent-return shouldn't report class constructors (fixes #7790) (#7797) (Teddy Katz) -* b938f1f Docs: Add an example for the spread operator to prefer-spread.md (#7802) (#7804) (butlermd) -* b8ce2dc Docs: Remove .html extensions from links in developer-guide (#7805) (Kevin Partington) -* aafebb2 Docs: Wrap placeholder sample in {% raw %} (#7798) (Daniel Lo Nigro) -* bb6b73b Chore: replace unnecessary function callbacks with arrow functions (#7795) (Teddy Katz) -* 428fbdf Fix: func-call-spacing "never" doesn't fix w/ line breaks (fixes #7787) (#7788) (Kevin Partington) -* 6e61070 Fix: `semi` false positive before regex/template literals (fixes #7782) (#7783) (Teddy Katz) -* ff0c050 Fix: remove internal property from config generation (fixes #7758) (#7761) (alberto) -* 27424cb New: `prefer-destructuring` rule (fixes #6053) (#7741) (Alex LaFroscia) -* bb648ce Docs: fix unclear example for no-useless-escape (#7781) (Teddy Katz) -* 8c3a962 Fix: syntax errors from object-shorthand autofix (fixes #7744) (#7745) (Teddy Katz) -* 8b296a2 Docs: fix in semi.md: correct instead of incorrect (#7779) (German Prostakov) -* 3493241 Upgrade: strip-json-comments ~v2.0.1 (Janus Troelsen) -* 75b7ba4 Chore: enable object-curly-spacing on ESLint codebase (refs #7725) (#7770) (Teddy Katz) -* 7d1dc7e Update: Make default-case comment case-insensitive (fixes #7673) (#7742) (Robert Rossmann) -* f1bf5ec Chore: convert remaining old-style context.report() calls to the new API (#7763) (Teddy Katz) - -v3.12.2 - December 14, 2016 - -* dec3ec6 Fix: indent bug with AssignmentExpressions (fixes #7747) (#7750) (Teddy Katz) -* 5344751 Build: Don't create blogpost links from rule names within other words (#7754) (Teddy Katz) -* 639b798 Docs: Use `Object.prototype` in examples (#7755) (Alex Reardon) - -v3.12.1 - December 12, 2016 - -* 0ad4d33 Fix: `indent` regression with function calls (fixes #7732, fixes #7733) (#7734) (Teddy Katz) -* ab246dd Docs: Rules restricting globals/properties/syntax are linked together (#7743) (Kevin Partington) -* df2f115 Docs: Add eslint-config-mdcs to JSCS Migration Guide (#7737) (Joshua Koo) -* 4b77333 Build: avoid creating broken rule links in the changelog (#7731) (Teddy Katz) - -v3.12.0 - December 9, 2016 - -* e569225 Update: fix false positive/negative of yoda rule (fixes #7676) (#7695) (Toru Nagashima) -* e95a230 Fix: indent "first" option false positive on nested arrays (fixes #7727) (#7728) (Teddy Katz) -* 81f9e7d Fix: Allow duplicated let declarations in `prefer-const` (fixes #7712) (#7717) (Teddy Katz) -* 1d0d61d New: Add no-await-in-loop rule (#7563) (Nat Mote) -* 2cdfb4e New: Additional APIs (fixes #6256) (#7669) (Ilya Volodin) -* 4278c42 Update: make no-obj-calls report errors for Reflect (fixes #7700) (#7710) (Tomas Echeverri Valencia) -* 4742d82 Docs: clarify the default behavior of `operator-linebreak` (fixes #7459) (#7726) (Teddy Katz) -* a8489e2 Chore: Avoid parserOptions boilerplate in tests for ES6 rules (#7724) (Teddy Katz) -* b921d1f Update: add `indent` options for array and object literals (fixes #7473) (#7681) (Teddy Katz) -* 7079c89 Update: Add airbnb-base to init styleguides (fixes #6986) (#7699) (alberto) -* 63bb3f8 Docs: improve the documentation for the autofix API (#7716) (Teddy Katz) -* f8786fb Update: add fixer for `capitalized-comments` (#7701) (Teddy Katz) -* abfd24f Fix: don't validate schemas for disabled rules (fixes #7690) (#7692) (Teddy Katz) -* 2ac07d8 Upgrade: Update globals dependency to 9.14.0 (#7683) (Aleksandr Oleynikov) -* 90a5d29 Docs: Remove incorrect info about issue requirements from PR guide (#7691) (Teddy Katz) -* f80c278 Docs: Add sails-hook-lint to integrations list (#7679) (Anthony M) -* e96da3f Docs: link first instance of `package.json` (#7684) (Kent C. Dodds) -* bf20e20 Build: include links to rule pages in release blogpost (#7671) (Teddy Katz) -* b30116c Docs: Fix code-blocks in spaced-comment docs (#7524) (Michał Gołębiowski) -* 0a2a7fd Fix: Allow \u2028 and \u2029 as string escapes in no-useless-escape (#7672) (Teddy Katz) -* 76c33a9 Docs: Change Sails.js integration to active npm package (#7675) (Anthony M) - -v3.11.1 - November 28, 2016 - -* be739d0 Fix: capitalized-comments fatal error fixed (fixes #7663) (#7664) (Rich Trott) -* cc4cedc Docs: Fix a typo in array-bracket-spacing documentation (#7667) (Alex Guerrero) -* f8adadc Docs: fix a typo in capitalized-comments documentation (#7666) (Teddy Katz) - -v3.11.0 - November 25, 2016 - -* ad56694 New: capitalized-comments rule (fixes #6055) (#7415) (Kevin Partington) -* 7185567 Update: add fixer for `operator-assignment` (#7517) (Teddy Katz) -* faf5f56 Update: fix false negative of `quotes` with \n in template (fixes #7646) (#7647) (Teddy Katz) -* 474e444 Update: add fixer for `sort-imports` (#7535) (Teddy Katz) -* f9b70b3 Docs: Enable example highlighting in rules examples (ref #6444) (#7644) (Alex Guerrero) -* d50f6c1 Fix: incorrect location for `no-useless-escape` errors (fixes #7643) (#7645) (Teddy Katz) -* 54a993c Docs: Fix a typo in the require-yield.md (#7652) (Vse Mozhet Byt) -* eadd808 Chore: Fix prefer-arrow-callback lint errors (#7651) (Kevin Partington) -* 89bd8de New: `require-await` rule (fixes #6820) (#7435) (Toru Nagashima) -* b7432bd Chore: Ensure JS files are checked out with LF (#7624) (Kevin Partington) -* 32a3547 Docs: Add absent quotes in rules documentation (#7625) (Denis Sikuler) -* 5c9a4ad Fix: Prevent `quotes` from fixing templates to directives (fixes #7610) (#7617) (Teddy Katz) -* d90ca46 Upgrade: Update markdownlint dependency to 0.3.1 (fixes #7589) (#7592) (David Anson) -* 07124d1 Docs: add missing quote mark (+=" → "+=") (#7613) (Sean Juarez) -* 8998043 Docs: fix wording in docs for no-extra-parens config (Michael Ficarra) - -v3.10.2 - November 15, 2016 - -* 0643bfe Fix: correctly handle commented code in `indent` autofixer (fixes #7604) (#7606) (Teddy Katz) -* bd0514c Fix: syntax error after `key-spacing` autofix with comment (fixes #7603) (#7607) (Teddy Katz) -* f56c1ef Fix: `indent` crash on parenthesized global return values (fixes #7573) (#7596) (Teddy Katz) -* 100c6e1 Docs: Fix example for curly "multi-or-nest" option (#7597) (Will Chen) -* 6abb534 Docs: Update code of conduct link (#7599) (Nicholas C. Zakas) -* 8302cdb Docs: Update no-tabs to match existing standards & improve readbility (#7590) (Matt Stow) - -v3.10.1 - November 14, 2016 - -* 8a0e92a Fix: handle try/catch correctly in `no-return-await` (fixes #7581) (#7582) (Teddy Katz) -* c4dd015 Fix: no-useless-return stack overflow on unreachable loops (fixes #7583) (#7584) (Teddy Katz) - -v3.10.0 - November 11, 2016 - -* 7ee039b Update: Add comma-style options for calls, fns, imports (fixes #7470) (Max Englander) -* 670e060 Chore: make the `object-shorthand` tests more readable (#7580) (Teddy Katz) -* c3f4809 Update: Allow `func-names` to recognize inferred ES6 names (fixes #7235) (#7244) (Logan Smyth) -* b8d6e48 Fix: syntax errors created by `object-shorthand` autofix (fixes #7574) (#7575) (Teddy Katz) -* 1b3b65c Chore: ensure that files in tests/conf are linted (#7579) (Teddy Katz) -* 2bd1dd7 Update: avoid creating extra whitespace in `arrow-body-style` fixer (#7504) (Teddy Katz) -* 66fe9ff New: `no-return-await` rule. (fixes #7537) (#7547) (Jordan Harband) -* 759525e Chore: Use process.exitCode instead of process.exit() in bin/eslint.js (#7569) (Teddy Katz) -* 0d60db7 Fix: Curly rule doesn't account for leading comment (fixes #7538) (#7539) (Will Chen) -* 5003b1c Update: fix in/instanceof handling with `space-infix-ops` (fixes #7525) (#7552) (Teddy Katz) -* 3e6131e Docs: explain config option merging (#7499) (Danny Andrews) -* 1766524 Update: "Error type should be" assertion in rule-tester (fixes 6106) (#7550) (Frans Jaspers) -* 44eb274 Docs: Missing semicolon report was missing a comma (#7553) (James) -* 6dbda15 Docs: Document the optional defaults argument for RuleTester (#7548) (Teddy Katz) -* e117b80 Docs: typo fix (#7546) (oprogramador) -* 25e5613 Chore: Remove incorrect test from indent.js. (#7531) (Scott Stern) -* c0f4937 Fix: `arrow-parens` supports type annotations (fixes #7406) (#7436) (Toru Nagashima) -* a838b8e Docs: `func-name-matching`: update with “always”/“never” option (#7536) (Jordan Harband) -* 3c379ff Update: `no-restricted-{imports,modules}`: add “patterns” (fixes #6963) (#7433) (Jordan Harband) -* f5764ee Docs: Update example of results returned from `executeOnFiles` (#7362) (Simen Bekkhus) -* 4613ba0 Fix: Add support for escape char in JSX. (#7461) (Scott Stern) -* ea0970d Fix: `curly` false positive with no-semicolon style (#7509) (Teddy Katz) -* af1fde1 Update: fix `brace-style` false negative on multiline node (fixes #7493) (#7496) (Teddy Katz) -* 3798aea Update: max-statements to report function name (refs #7260) (#7399) (Nicholas C. Zakas) -* 0c215fa Update: Add `ArrowFunctionExpression` support to `require-jsdoc` rule (#7518) (Gyandeep Singh) -* 578c373 Build: handle deprecated rules with no 'replacedBy' (refs #7471) (#7494) (Vitor Balocco) -* a7f3976 Docs: Specify min ESLint version for new rule format (#7501) (cowchimp) -* 8a3e717 Update: Fix `lines-around-directive` semicolon handling (fixes #7450) (#7483) (Teddy Katz) -* e58cead Update: add a fixer for certain statically-verifiable `eqeqeq` cases (#7389) (Teddy Katz) -* 0dea0ac Chore: Add Node 7 to travis ci build (#7506) (Gyandeep Singh) -* 36338f0 Update: add fixer for `no-extra-boolean-cast` (#7387) (Teddy Katz) -* 183def6 Chore: enable `prefer-arrow-callback` on ESLint codebase (fixes #6407) (#7503) (Teddy Katz) -* 4f1fa67 Docs: Update copyright (#7497) (Nicholas C. Zakas) - -v3.9.1 - October 31, 2016 - -* 2012258 Fix: incorrect `indent` check for array property access (fixes #7484) (#7485) (Teddy Katz) -* 8a71d4a Fix: `no-useless-return` false positive on conditionals (fixes #7477) (#7482) (Teddy Katz) -* 56a662b Fix: allow escaped backreferences in `no-useless-escape` (fixes #7472) (#7474) (Teddy Katz) -* fffdf13 Build: Fix prefer-reflect rule to not crash site gen build (#7471) (Ilya Volodin) -* 8ba68a3 Docs: Update broken link (#7490) (Devinsuit) -* 65231d8 Docs: add the "fixable" icon for `no-useless-return` (#7480) (Teddy Katz) - -v3.9.0 - October 28, 2016 - -* d933516 New: `no-useless-return` rule (fixes #7309) (#7441) (Toru Nagashima) -* 5e7af30 Update: Add `CallExpression` option for `indent` (fixes #5946) (#7189) (Teddy Katz) -* b200086 Fix: Support type annotations in array-bracket-spacing (#7445) (Jimmy Jia) -* 5ed8b9b Update: Deprecate prefer-reflect (fixes #7226) (#7464) (Kai Cataldo) -* 92ad43b Chore: Update deprecated rules in conf/eslint.json (#7467) (Kai Cataldo) -* e46666b New: Codeframe formatter (fixes #5860) (#7437) (Vitor Balocco) -* fe0d903 Upgrade: Shelljs to ^0.7.5 (fixes #7316) (#7465) (Gyandeep Singh) -* 1d5146f Update: fix wrong indentation about `catch`,`finally` (#7371) (Toru Nagashima) -* 77e3a34 Chore: Pin mock-fs dev dependency (#7466) (Gyandeep Singh) -* c675d7d Update: Fix `no-useless-escape` false negative in regexes (fixes #7424) (#7425) (Teddy Katz) -* ee3bcea Update: add fixer for `newline-after-var` (fixes #5959) (#7375) (Teddy Katz) -* 6e9ff08 Fix: indent.js to support multiline array statements. (#7237) (Scott Stern) -* f8153ad Build: Ensure absolute links in docs retain .md extensions (fixes #7419) (#7438) (Teddy Katz) -* 16367a8 Fix: Return statement spacing. Fix for indent rule. (fixes #7164) (#7197) (Imad Elyafi) -* 3813988 Update: fix false negative of `no-extra-parens` (fixes #7122) (#7432) (Toru Nagashima) -* 23062e2 Docs: Fix typo in no-unexpected-multiline (fixes #7442) (#7447) (Denis Sikuler) -* d257428 Update: `func-name-matching`: add “always”/“never” option (fixes #7391) (#7428) (Jordan Harband) -* c710584 Fix: support for MemberExpression with function body. (#7400) (Scott Stern) -* 2c8ed2d Build: ensure that all files are linted on bash (fixes #7426) (#7427) (Teddy Katz) -* 18ff70f Chore: Enable `no-useless-escape` (#7403) (Vitor Balocco) -* 8dfd802 Fix: avoid `camelcase` false positive with NewExpressions (fixes #7363) (#7409) (Teddy Katz) -* e8159b4 Docs: Fix typo and explain static func calls for class-methods-use-this (#7421) (Scott O'Hara) -* 85d7e24 Docs: add additional examples for MemberExpressions in Indent rule. (#7408) (Scott Stern) -* 2aa1107 Docs: Include note on fatal: true in the node.js api section (#7376) (Simen Bekkhus) -* e064a25 Update: add fixer for `arrow-body-style` (#7240) (Teddy Katz) -* e0fe727 Update: add fixer for `brace-style` (fixes #7074) (#7347) (Teddy Katz) -* cbbe420 New: Support enhanced parsers (fixes #6974) (#6975) (Nicholas C. Zakas) -* 644d25b Update: Add an ignoreRegExpLiterals option to max-len (fixes #3229) (#7346) (Wilfred Hughes) -* 6875576 Docs: Remove broken links to jslinterrors.com (fixes #7368) (#7369) (Dannii Willis) - -v3.8.1 - October 17, 2016 - -* 681c78a Fix: `comma-dangle` was confused by type annotations (fixes #7370) (#7372) (Toru Nagashima) -* 7525042 Fix: Allow useless escapes in tagged template literals (fixes #7383) (#7384) (Teddy Katz) -* 9106964 Docs: Fix broken link for stylish formatter (#7386) (Vitor Balocco) -* 49d3c1b Docs: Document the deprecated meta property (#7367) (Randy Coulman) -* 19d2996 Docs: Relax permission for merging PRs (refs eslint/tsc-meetings#20) (#7360) (Brandon Mills) - -v3.8.0 - October 14, 2016 - -* ee60acf Chore: add integration tests for autofixing (fixes #5909) (#7349) (Teddy Katz) -* c8796e9 Update: `comma-dangle` supports trailing function commas (refs #7101) (#7181) (Toru Nagashima) -* c4abaf0 Update: `space-before-function-paren` supports async/await (refs #7101) (#7180) (Toru Nagashima) -* d0d3b28 Fix: id-length rule incorrectly firing on member access (fixes #6475) (#7365) (Burak Yiğit Kaya) -* 2729d94 Fix: Don't report setter params in class bodies as unused (fixes #7351) (#7352) (Teddy Katz) -* 0b85004 Chore: Enable prefer-template (fixes #6407) (#7357) (Kai Cataldo) -* ca1947b Chore: Update pull request template (refs eslint/tsc-meetings#20) (#7359) (Brandon Mills) -* d840afe Docs: remove broken link from no-loop-func doc (#7342) (Michael McDermott) -* 5266793 Update: no-useless-escape checks template literals (fixes #7331) (#7332) (Kai Cataldo) -* b08fb91 Update: add source property to LintResult object (fixes #7098) (#7304) (Vitor Balocco) -* 0db4164 Chore: run prefer-template autofixer on test files (refs #6407) (#7354) (Kai Cataldo) -* c1470b5 Update: Make the `prefer-template` fixer unescape quotes (fixes #7330) (#7334) (Teddy Katz) -* 5d08c33 Fix: Handle parentheses correctly in `yoda` fixer (fixes #7326) (#7327) (Teddy Katz) -* cd72bba New: `func-name-matching` rule (fixes #6065) (#7063) (Annie Zhang) -* 55b5146 Fix: `RuleTester` didn't support `mocha --watch` (#7287) (Toru Nagashima) -* f8387c1 Update: add fixer for `prefer-spread` (#7283) (Teddy Katz) -* 52da71e Fix: Don't require commas after rest properties (fixes #7297) (#7298) (Teddy Katz) -* 3b11d3f Chore: refactor `no-multiple-empty-lines` (#7314) (Teddy Katz) -* 16d495d Docs: Updating CLI overview with latest changes (#7335) (Kevin Partington) -* 52dfce5 Update: add fixer for `one-var-declaration-per-line` (#7295) (Teddy Katz) -* 0e994ae Update: Improve the error messages for `no-unused-vars` (fixes #7282) (#7315) (Teddy Katz) -* 93214aa Chore: Convert non-lib/test files to template literals (refs #6407) (#7329) (Kai Cataldo) -* 72f394d Update: Fix false negative of `no-multiple-empty-lines` (fixes #7312) (#7313) (Teddy Katz) -* 756bc5a Update: Use characters instead of code units for `max-len` (#7299) (Teddy Katz) -* c9a7ec5 Fix: Improving optionator configuration for --print-config (#7206) (Kevin Partington) -* 51bfade Fix: avoid `object-shorthand` crash with spread properties (fixes #7305) (#7306) (Teddy Katz) -* a12d1a9 Update: add fixer for `no-lonely-if` (#7202) (Teddy Katz) -* 1418384 Fix: Don't require semicolons before `++`/`--` (#7252) (Adrian Heine né Lang) -* 2ffe516 Update: add fixer for `curly` (#7105) (Teddy Katz) -* ac3504d Update: add functionPrototypeMethods to wrap-iife (fixes #7212) (#7284) (Eli White) -* 5e16fb4 Update: add fixer for `no-extra-bind` (#7236) (Teddy Katz) - -v3.7.1 - October 3, 2016 - -* 3dcae13 Fix: Use the correct location for `comma-dangle` errors (fixes #7291) (#7292) (Teddy Katz) -* cb7ba6d Fix: no-implicit-coercion should not fix ~. (fixes #7272) (#7289) (Eli White) -* ce590e2 Chore: Add additional tests for bin/eslint.js (#7290) (Teddy Katz) -* 8ec82ee Docs: change links of templates to raw data (#7288) (Toru Nagashima) - -v3.7.0 - September 30, 2016 - -* 2fee8ad Fix: object-shorthand's consistent-as-needed option (issue #7214) (#7215) (Naomi Jacobs) -* c05a19c Update: add fixer for `prefer-numeric-literals` (#7205) (Teddy Katz) -* 2f171f3 Update: add fixer for `no-undef-init` (#7210) (Teddy Katz) -* 876d747 Docs: Steps for adding new committers/TSCers (#7221) (Nicholas C. Zakas) -* dffb4fa Fix: `no-unused-vars` false positive (fixes #7250) (#7258) (Toru Nagashima) -* 4448cec Docs: Adding missing ES8 reference to configuring (#7271) (Kevin Partington) -* 332d213 Update: Ensure `indent` handles nested functions correctly (fixes #7249) (#7265) (Teddy Katz) -* c36d842 Update: add fixer for `no-useless-computed-key` (#7207) (Teddy Katz) -* 18376cf Update: add fixer for `lines-around-directive` (#7217) (Teddy Katz) -* f8e8fab Update: add fixer for `wrap-iife` (#7196) (Teddy Katz) -* 558b444 Docs: Add @not-an-aardvark to development team (#7279) (Ilya Volodin) -* cd1dc57 Update: Add a fixer for `dot-location` (#7186) (Teddy Katz) -* 89787b2 Update: for `yoda`, add a fixer (#7199) (Teddy Katz) -* 742ae67 Fix: avoid indent and no-mixed-spaces-and-tabs conflicts (fixes #7248) (#7266) (Teddy Katz) -* 85b8714 Fix: Use error templates even when reading from stdin (fixes #7213) (#7223) (Teddy Katz) -* 66adac1 Docs: correction in prefer-reflect docs (fixes #7069) (#7150) (Scott Stern) -* e3f95de Update: Fix `no-extra-parens` false negative (fixes #7229) (#7231) (Teddy Katz) -* 2909c19 Docs: Fix typo in object-shorthand docs (#7267) (Brian Donovan) -* 7bb800d Chore: add internal rule to enforce meta.docs conventions (fixes #6954) (#7155) (Vitor Balocco) -* 722c68c Docs: add code fences to the issue template (#7254) (Teddy Katz) - -v3.6.1 - September 26, 2016 - -* b467436 Upgrade: Upgrade Espree to 3.3.1 (#7253) (Ilya Volodin) -* 299a563 Build: Do not strip .md extension from absolute URLs (#7222) (Kai Cataldo) -* 27042d2 Chore: removed unused code related to scopeMap (#7218) (Yang Su) -* d154204 Chore: Lint bin/eslint.js (#7243) (Kevin Partington) -* 87625fa Docs: Improve eol-last examples in docs (#7227) (Chainarong Tangsurakit) -* de8eaa4 Docs: `class-methods-use-this`: fix option name (#7224) (Jordan Harband) -* 2355f8d Docs: Add Brunch plugin to integrations (#7225) (Aleksey Shvayka) -* a5817ae Docs: Default option from `operator-linebreak` is `after`and not always (#7228) (Konstantin Pschera) - -v3.6.0 - September 23, 2016 - -* 1b05d9c Update: add fixer for `strict` (fixes #6668) (#7198) (Teddy Katz) -* 0a36138 Docs: Update ecmaVersion instructions (#7195) (Nicholas C. Zakas) -* aaa3779 Update: Allow `space-unary-ops` to handle await expressions (#7174) (Teddy Katz) -* 91bf477 Update: add fixer for `prefer-template` (fixes #6978) (#7165) (Teddy Katz) -* 745343f Update: `no-extra-parens` supports async/await (refs #7101) (#7178) (Toru Nagashima) -* 8e1fee1 Fix: Handle number literals correctly in `no-whitespace-before-property` (#7185) (Teddy Katz) -* 462a3f7 Update: `keyword-spacing` supports async/await (refs #7101) (#7179) (Toru Nagashima) -* 709a734 Update: Allow template string in `valid-typeof` comparison (fixes #7166) (#7168) (Teddy Katz) -* f71937a Fix: Don't report async/generator callbacks in `array-callback-return` (#7172) (Teddy Katz) -* 461b015 Fix: Handle async functions correctly in `prefer-arrow-callback` fixer (#7173) (Teddy Katz) -* 7ea3e4b Fix: Handle await expressions correctly in `no-unused-expressions` (#7175) (Teddy Katz) -* 16bb802 Update: Ensure `arrow-parens` handles async arrow functions correctly (#7176) (Teddy Katz) -* 2d10657 Chore: add tests for `generator-star-spacing` and async (refs #7101) (#7182) (Toru Nagashima) -* c118d21 Update: Let `no-restricted-properties` check destructuring (fixes #7147) (#7151) (Teddy Katz) -* 9e0b068 Fix: valid-jsdoc does not throw on FieldType without value (fixes #7184) (#7187) (Kai Cataldo) -* 4b5d9b7 Docs: Update process for evaluating proposals (fixes #7156) (#7183) (Kai Cataldo) -* 95c777a Update: Make `no-restricted-properties` more flexible (fixes #7137) (#7139) (Teddy Katz) -* 0fdf23c Update: fix `quotes` rule's false negative (fixes #7084) (#7141) (Toru Nagashima) -* f2a789d Update: fix `no-unused-vars` false negative (fixes #7124) (#7143) (Toru Nagashima) -* 6148d85 Fix: Report columns for `eol-last` correctly (fixes #7136) (#7149) (kdex) -* e016384 Update: add fixer for quote-props (fixes #6996) (#7095) (Teddy Katz) -* 35f7be9 Upgrade: espree to 3.2.0, remove tests with SyntaxErrors (fixes #7169) (#7170) (Teddy Katz) -* 28ddcf8 Fix: `max-len`: `ignoreTemplateLiterals`: handle 3+ lines (fixes #7125) (#7138) (Jordan Harband) -* 660e091 Docs: Update rule descriptions (fixes #5912) (#7152) (Kenneth Williams) -* 8b3fc32 Update: Make `indent` report lines with mixed spaces/tabs (fixes #4274) (#7076) (Teddy Katz) -* b39ac2c Update: add fixer for `no-regex-spaces` (#7113) (Teddy Katz) -* cc80467 Docs: Update PR templates for formatting (#7128) (Nicholas C. Zakas) -* 76acbb5 Fix: include LogicalExpression in indent length calc (fixes #6731) (#7087) (Alec) -* a876673 Update: no-implicit-coercion checks TemplateLiterals (fixes #7062) (#7121) (Kai Cataldo) -* 8db4f0c Chore: Enable `typeof` check for `no-undef` rule in eslint-config-eslint (#7103) (Teddy Katz) -* 7e8316f Docs: Update release process (#7127) (Nicholas C. Zakas) -* 22edd8a Update: `class-methods-use-this`: `exceptMethods` option (fixes #7085) (#7120) (Jordan Harband) -* afd132a Fix: line-comment-position "above" string option now works (fixes #7100) (#7102) (Kevin Partington) -* 1738b2e Chore: fix name of internal-no-invalid-meta test file (#7142) (Vitor Balocco) -* ac0bb62 Docs: Fixes examples for allowTemplateLiterals (fixes #7115) (#7135) (Zoe Ingram) -* bcfa3e5 Update: Add `always`/`never` option to `eol-last` (fixes #6938) (#6952) (kdex) -* 0ca26d9 Docs: Distinguish examples for space-before-blocks (#7132) (Timo Tijhof) -* 9a2aefb Chore: Don't require an issue reference in check-commit npm script (#7104) (Teddy Katz) -* c85fd84 Fix: max-statements-per-line rule to force minimum to be 1 (fixes #7051) (#7092) (Scott Stern) -* e462e47 Docs: updates category of no-restricted-properties (fixes #7112) (#7118) (Alec) -* 6ae660b Fix: Don't report comparisons of two typeof expressions (fixes #7078) (#7082) (Teddy Katz) -* 710f205 Docs: Fix typos in Issues section of Maintainer's Guide (#7114) (Kai Cataldo) -* 546a3ca Docs: Clarify that linter does not process configuration (fixes #7108) (#7110) (Kevin Partington) -* 0d50943 Docs: Elaborate on `guard-for-in` best practice (fixes #7071) (#7094) (Dallon Feldner) -* 58e6d76 Docs: Fix examples for no-restricted-properties (#7099) (not-an-aardvark) -* 6cfe519 Docs: Corrected typo in line-comment-position rule doc (#7097) (Alex Mercier) -* f02e52a Docs: Add fixable note to no-implicit-coercion docs (#7096) (Brandon Mills) - -v3.5.0 - September 9, 2016 - -* 08fa538 Update: fix false negative of `arrow-spacing` (fixes #7079) (#7080) (Toru Nagashima) -* cec65e3 Update: add fixer for no-floating-decimal (fixes #7070) (#7081) (not-an-aardvark) -* 2a3f699 Fix: Column number for no-multiple-empty-lines (fixes #7086) (#7088) (Ian VanSchooten) -* 6947299 Docs: Add info about closing accepted issues to docs (fixes #6979) (#7089) (Kai Cataldo) -* d30157a Docs: Add link to awesome-eslint in integrations page (#7090) (Vitor Balocco) -* 457be1b Docs: Update so issues are not required (fixes #7015) (#7072) (Nicholas C. Zakas) -* d9513b7 Fix: Allow linting of .hidden files/folders (fixes #4828) (#6844) (Ian VanSchooten) -* 6d97c18 New: `max-len`: `ignoreStrings`+`ignoreTemplateLiterals` (fixes #5805) (#7049) (Jordan Harband) -* 538d258 Update: make no-implicit-coercion support autofixing. (fixes #7056) (#7061) (Eli White) -* 883316d Update: add fixer for prefer-arrow-callback (fixes #7002) (#7004) (not-an-aardvark) -* 7502eed Update: auto-fix for `comma-style` (fixes #6941) (#6957) (Gyandeep Singh) -* 645dda5 Update: add fixer for dot-notation (fixes #7014) (#7054) (not-an-aardvark) -* 2657846 Fix: `no-console` ignores user-defined console (fixes #7010) (#7058) (Toru Nagashima) -* 656bb6e Update: add fixer for newline-before-return (fixes #5958) (#7050) (Vitor Balocco) -* 1f995c3 Fix: no-implicit-coercion string concat false positive (fixes #7057) (#7060) (Kai Cataldo) -* 6718749 Docs: Clarify that `es6` env also sets `ecmaVersion` to 6 (#7067) (Jérémie Astori) -* e118728 Update: add fixer for wrap-regex (fixes #7013) (#7048) (not-an-aardvark) -* f4fcd1e Update: add more `indent` options for functions (fixes #6052) (#7043) (not-an-aardvark) -* 657eee5 Update: add fixer for new-parens (fixes #6994) (#7047) (not-an-aardvark) -* ff19aa9 Update: improve `max-statements-per-line` message (fixes #6287) (#7044) (Jordan Harband) -* 3960617 New: `prefer-numeric-literals` rule (fixes #6068) (#7029) (Annie Zhang) -* fa760f9 Chore: no-regex-spaces uses internal rule message format (fixes #7052) (#7053) (Kevin Partington) -* 22c7e09 Update: no-magic-numbers false negative on reassigned vars (fixes #4616) (#7028) (not-an-aardvark) -* be29599 Update: Throw error if whitespace found in plugin name (fixes #6854) (#6960) (Jesse Ostrander) -* 4063a79 Fix: Rule message placeholders can be inside braces (fixes #6988) (#7041) (Kevin Partington) -* 52e8d9c Docs: Clean up sort-vars (#7045) (Matthew Dunsdon) -* 4126f12 Chore: Rule messages use internal rule message format (fixes #6977) (#6989) (Kevin Partington) -* 46cb690 New: `no-restricted-properties` rule (fixes #3218) (#7017) (Eli White) -* 00b3042 Update: Pass file path to parse function (fixes #5344) (#7024) (Annie Zhang) -* 3f13325 Docs: Add kaicataldo and JamesHenry to our teams (#7039) (alberto) -* 8e77f16 Update: `new-parens` false negative (fixes #6997) (#6999) (Toru Nagashima) -* 326f457 Docs: Add missing 'to' in no-restricted-modules (#7022) (Oskar Risberg) -* 8277357 New: `line-comment-position` rule (fixes #6077) (#6953) (alberto) -* c1f0d76 New: `lines-around-directive` rule (fixes #6069) (#6998) (Kai Cataldo) -* 61f1de0 Docs: Fix typo in no-debugger (#7019) (Denis Ciccale) -* 256c4a2 Fix: Allow separate mode option for multiline and align (fixes #6691) (#6991) (Annie Zhang) -* a989a7c Docs: Declaring dependency on eslint in shared config (fixes #6617) (#6985) (alberto) -* 6869c60 Docs: Fix minor typo in no-extra-parens doc (#6992) (Jérémie Astori) -* 28f1619 Docs: Update the example of SwitchCase (#6981) (fish) - -v3.4.0 - August 26, 2016 - -* c210510 Update: add fixer for no-extra-parens (fixes #6944) (#6950) (not-an-aardvark) -* ca3d448 Fix: `prefer-const` false negative about `eslintUsed` (fixes #5837) (#6971) (Toru Nagashima) -* 1153955 Docs: Draft of JSCS migration guide (refs #5859) (#6942) (Nicholas C. Zakas) -* 3e522be Fix: false negative of `indent` with `else if` statements (fixes #6956) (#6965) (not-an-aardvark) -* 2dfb290 Docs: Distinguish examples in rules under Stylistic Issues part 7 (#6760) (Kenneth Williams) -* 3c710c9 Fix: rename "AirBnB" => "Airbnb" init choice (fixes #6969) (Harrison Shoff) -* 7660b39 Fix: `object-curly-spacing` for type annotations (fixes #6940) (#6945) (Toru Nagashima) -* 21ab784 New: do not remove non visited files from cache. (fixes #6780) (#6921) (Roy Riojas) -* 3a1763c Fix: enable `@scope/plugin/ruleId`-style specifier (refs #6362) (#6939) (Toru Nagashima) -* d6fd064 Update: Add never option to multiline-ternary (fixes #6751) (#6905) (Kai Cataldo) -* 0d268f1 New: `symbol-description` rule (fixes #6778) (#6825) (Jarek Rencz) -* a063d4e Fix: no-cond-assign within a function expression (fixes #6908) (#6909) (Patrick McElhaney) -* 16db93a Build: Tag docs, publish release notes (fixes #6892) (#6934) (Nicholas C. Zakas) -* 0cf1d55 Chore: Fix object-shorthand errors (fixes #6958) (#6959) (Kai Cataldo) -* 8851ddd Fix: Improve pref of globbing by inheriting glob.GlobSync (fixes #6710) (#6783) (Kael Zhang) -* cf2242c Update: `requireStringLiterals` option for `valid-typeof` (fixes #6698) (#6923) (not-an-aardvark) -* 8561389 Fix: `no-trailing-spaces` wrong fixing (fixes #6933) (#6937) (Toru Nagashima) -* 6a92be5 Docs: Update semantic versioning policy (#6935) (alberto) -* a5189a6 New: `class-methods-use-this` rule (fixes #5139) (#6881) (Gyandeep Singh) -* 1563808 Update: add support for ecmaVersion 20xx (fixes #6750) (#6907) (Kai Cataldo) -* d8b770c Docs: Change rule descriptions for consistent casing (#6915) (Brandon Mills) -* c676322 Chore: Use object-shorthand batch 3 (refs #6407) (#6914) (Kai Cataldo) - -v3.3.1 - August 15, 2016 - -* a2f06be Build: optimize rule page title for small browser tabs (fixes #6888) (#6904) (Vitor Balocco) -* 02a00d6 Docs: clarify rule details for no-template-curly-in-string (#6900) (not-an-aardvark) -* b9b3446 Fix: sort-keys ignores destructuring patterns (fixes #6896) (#6899) (Kai Cataldo) -* 3fe3a4f Docs: Update options in `object-shorthand` (#6898) (Grant Snodgrass) -* cd09c96 Chore: Use object-shorthand batch 2 (refs #6407) (#6897) (Kai Cataldo) -* 2841008 Chore: Use object-shorthand batch 1 (refs #6407) (#6893) (Kai Cataldo) - -v3.3.0 - August 12, 2016 - -* 683ac56 Build: Add CI release scripts (fixes #6884) (#6885) (Nicholas C. Zakas) -* ebf8441 Update: `prefer-rest-params` relax for member accesses (fixes #5990) (#6871) (Toru Nagashima) -* df01c4f Update: Add regex support for exceptions (fixes #5187) (#6883) (Annie Zhang) -* 055742c Fix: `no-dupe-keys` type errors (fixes #6886) (#6889) (Toru Nagashima) -* e456fd3 New: `sort-keys` rule (fixes #6076) (#6800) (Toru Nagashima) -* 3e879fc Update: Rule "eqeqeq" to have more specific null handling (fixes #6543) (#6849) (Simon Sturmer) -* e8cb7f9 Chore: use eslint-plugin-node (refs #6407) (#6862) (Toru Nagashima) -* e37bbd8 Docs: Remove duplicate statement (#6878) (Richard Käll) -* 11395ca Fix: `no-dupe-keys` false negative (fixes #6801) (#6863) (Toru Nagashima) -* 1ecd2a3 Update: improve error message in `no-control-regex` (#6839) (Jordan Harband) -* d610d6c Update: make `max-lines` report the actual number of lines (fixes #6766) (#6764) (Jarek Rencz) -* b256c50 Chore: Fix glob for core js files for lint (fixes #6870) (#6872) (Gyandeep Singh) -* f8ab8f1 New: func-call-spacing rule (fixes #6080) (#6749) (Brandon Mills) -* be68f0b New: no-template-curly-in-string rule (fixes #6186) (#6767) (Jeroen Engels) -* 80789ab Chore: don't throw if rule is in old format (fixes #6848) (#6850) (Vitor Balocco) -* d47c505 Fix: `newline-after-var` false positive (fixes #6834) (#6847) (Toru Nagashima) -* bf0afcb Update: validate void operator in no-constant-condition (fixes #5726) (#6837) (Vitor Balocco) -* 5ef839e New: Add consistent and ..-as-needed to object-shorthand (fixes #5438) (#5439) (Martijn de Haan) -* 7e1bf01 Fix: update peerDependencies of airbnb option for `--init` (fixes #6843) (#6846) (Vitor Balocco) -* 8581f4f Fix: `no-invalid-this` false positive (fixes #6824) (#6827) (Toru Nagashima) -* 90f78f4 Update: add `props` option to `no-self-assign` rule (fixes #6718) (#6721) (Toru Nagashima) -* 30d71d6 Update: 'requireForBlockBody' modifier for 'arrow-parens' (fixes #6557) (#6558) (Nicolas Froidure) -* cdded07 Chore: use native `Object.assign` (refs #6407) (#6832) (Gyandeep Singh) -* 579ec49 Chore: Add link to rule change guidelines in "needs info" template (fixes #6829) (#6831) (Kevin Partington) -* 117e7aa Docs: Remove incorrect "constructor" statement from `no-new-symbol` docs (#6830) (Jarek Rencz) -* aef18b4 New: `no-unsafe-negation` rule (fixes #2716) (#6789) (Toru Nagashima) -* d94e945 Docs: Update Getting Started w/ Readme installation instructions (#6823) (Kai Cataldo) -* dfbc112 Upgrade: proxyquire to 1.7.10 (fixes #6821) (#6822) (alberto) -* 4c5e911 Chore: enable `prefer-const` and apply it to our codebase (refs #6407) (#6805) (Toru Nagashima) -* e524d16 Update: camelcase rule fix for import declarations (fixes #6755) (#6784) (Lorenzo Zottar) -* 8f3509d Update: make `eslint:all` excluding deprecated rules (fixes #6734) (#6756) (Toru Nagashima) -* 2b17459 New: `no-global-assign` rule (fixes #6586) (#6746) (alberto) - -v3.2.2 - August 1, 2016 - -* 510ce4b Upgrade: file-entry-cache@^1.3.1 (fixes #6816, refs #6780) (#6819) (alberto) -* 46b14cd Fix: ignore MemberExpression in VariableDeclarators (fixes #6795) (#6815) (Nicholas C. Zakas) - -v3.2.1 - August 1, 2016 - -* 584577a Build: Pin file-entry-cache to avoid licence issue (refs #6816) (#6818) (alberto) -* 38d0d23 Docs: clarify minor releases and suggest using `~ to version (#6804) (Henry Zhu) -* 4ca809e Fix: Normalizes messages so all end with a period (fixes #6762) (#6807) (Patrick McElhaney) -* c7488ac Fix: Make MemberExpression option opt-in (fixes #6797) (#6798) (Rich Trott) -* 715e8fa Docs: Update issue closing policy (fixes #6765) (#6808) (Nicholas C. Zakas) -* 288f7bf Build: Fix site generation (fixes #6791) (#6793) (Nicholas C. Zakas) -* 261a9f3 Docs: Update JSCS status in README (#6802) (alberto) -* 5ae0887 Docs: Update no-void.md (#6799) (Daniel Hritzkiv) - -v3.2.0 - July 29, 2016 - -* 2438ee2 Upgrade: Update markdownlint dependency to 0.2.0 (fixes #6781) (#6782) (David Anson) -* 4fc0018 Chore: dogfooding `no-var` rule and remove `var`s (refs #6407) (#6757) (Toru Nagashima) -* b22eb5c New: `no-tabs` rule (fixes #6079) (#6772) (Gyandeep Singh) -* ddea63a Chore: Updated no-control-regex tests to cover all cases (fixes #6438) (#6752) (Efe Gürkan YALAMAN) -* 1025772 Docs: Add plugin example to disabling with comments guide (fixes #6742) (#6747) (Brandon Mills) -* 628aae4 Docs: fix inconsistent spacing inside block comment (#6768) (Brian Jacobel) -* 2983c32 Docs: Add options to func-names config comments (#6748) (Brandon Mills) -* 2f94443 Docs: fix wrong path (#6763) (molee1905) -* 6f3faa4 Revert "Build: Remove support for Node v5 (fixes #6743)" (#6758) (Nicholas C. Zakas) -* 99dfd1c Docs: fix grammar issue in rule-changes page (#6761) (Vitor Balocco) -* e825458 Fix: Rule no-unused-vars had missing period (fixes #6738) (#6739) (Brian Mock) -* 71ae64c Docs: Clarify cache file deletion (fixes #4943) (#6712) (Nicholas C. Zakas) -* 26c85dd Update: merge warnings of consecutive unreachable nodes (fixes #6583) (#6729) (Toru Nagashima) -* 106e40b Fix: Correct grammar in object-curly-newline reports (fixes #6725) (#6728) (Vitor Balocco) -* e00754c Chore: Dogfooding ES6 rules (refs #6407) (#6735) (alberto) -* 181b26a Build: Remove support for Node v5 (fixes #6743) (#6744) (alberto) -* 5320a6c Update: `no-use-before-define` false negative on for-in/of (fixes #6699) (#6719) (Toru Nagashima) -* a2090cb Fix: space-infix-ops doesn't fail for type annotations(fixes #5211) (#6723) (Nicholas C. Zakas) -* 9c36ecf Docs: Add @vitorbal and @platinumazure to development team (Ilya Volodin) -* e09d1b8 Docs: describe all RuleTester options (fixes #4810, fixes #6709) (#6711) (Nicholas C. Zakas) -* a157f47 Chore: Update CLIEngine option desc (fixes #5179) (#6713) (Nicholas C. Zakas) -* a0727f9 Chore: fix `.gitignore` for vscode (refs #6383) (#6720) (Toru Nagashima) -* 75d2d43 Docs: Clarify Closure type hint expectation (fixes #5231) (#6714) (Nicholas C. Zakas) -* 95ea25a Update: Check indentation of multi-line chained properties (refs #1801) (#5940) (Rich Trott) -* e7b1e1c Docs: Edit issue/PR waiting period docs (fixes #6009) (#6715) (Nicholas C. Zakas) -* 053aa0c Update: Added 'allowSuper' option to `no-underscore-dangle` (fixes #6355) (#6662) (peteward44) -* 8929045 Build: Automatically generate rule index (refs #2860) (#6658) (Ilya Volodin) -* f916ae5 Docs: Fix multiline-ternary typos (#6704) (Cédric Malard) -* c64b0c2 Chore: First ES6 refactoring (refs #6407) (#6570) (Nicholas C. Zakas) - -v3.1.1 - July 18, 2016 - -* 565e584 Fix: `eslint:all` causes regression in 3.1.0 (fixes #6687) (#6696) (alberto) -* cb90359 Fix: Allow named recursive functions (fixes #6616) (#6667) (alberto) -* 3f206dd Fix: `balanced` false positive in `spaced-comment` (fixes #6689) (#6692) (Grant Snodgrass) -* 57f1676 Docs: Add missing brackets from code examples (#6700) (Plusb Preco) -* 124f066 Chore: Remove fixable key from multiline-ternary metadata (fixes #6683) (#6688) (Kai Cataldo) -* 9f96086 Fix: Escape control characters in XML. (fixes #6673) (#6672) (George Chung) - -v3.1.0 - July 15, 2016 - -* e8f8c6c Fix: incorrect exitCode when eslint is called with --stdin (fixes #6677) (#6682) (Steven Humphrey) -* 38639bf Update: make `no-var` fixable (fixes #6639) (#6644) (Toru Nagashima) -* dfc20e9 Fix: `no-unused-vars` false positive in loop (fixes #6646) (#6649) (Toru Nagashima) -* 2ba75d5 Update: relax outerIIFEBody definition (fixes #6613) (#6653) (Stephen E. Baker) -* 421e4bf Chore: combine multiple RegEx replaces with one (fixes #6669) (#6661) (Sakthipriyan Vairamani) -* 089ee2c Docs: fix typos,wrong path,backticks (#6663) (molee1905) -* ef827d2 Docs: Add another pre-commit hook to integrations (#6666) (David Alan Hjelle) -* a343b3c Docs: Fix option typo in no-underscore-dangle (Fixes #6674) (#6675) (Luke Page) -* 5985eb2 Chore: add internal rule that validates meta property (fixes #6383) (#6608) (Vitor Balocco) -* 4adb15f Update: Add `balanced` option to `spaced-comment` (fixes #4133) (#6575) (Annie Zhang) -* 1b13c25 Docs: fix incorrect example being mark as correct (#6660) (David Björklund) -* a8b4e40 Fix: Install required eslint plugin for "standard" guide (fixes #6656) (#6657) (Feross Aboukhadijeh) -* 720686b New: `endLine` and `endColumn` of the lint result. (refs #3307) (#6640) (Toru Nagashima) -* 54faa46 Docs: Small tweaks to CLI documentation (fixes #6627) (#6642) (Kevin Partington) -* e108850 Docs: Added examples and structure to `padded-blocks` (fixes #6628) (#6643) (alberto) -* 350e1c0 Docs: Typo (#6650) (Peter Rood) -* b837c92 Docs: Correct a term in max-len.md (fixes #6637) (#6641) (Vse Mozhet Byt) -* baeb313 Fix: Warning behavior for executeOnText (fixes #6611) (#6632) (Nicholas C. Zakas) -* e6004be Chore: Enable preferType in valid-jsdoc (refs #5188) (#6634) (Nicholas C. Zakas) -* ca323cf Fix: Use default assertion messages (fixes #6532) (#6615) (Dmitrii Abramov) -* 2bdf22c Fix: Do not throw exception if baseConfig is provided (fixes #6605) (#6625) (Kevin Partington) -* e42cacb Upgrade: mock-fs to 3.10, fixes for Node 6.3 (fixes #6621) (#6624) (Tim Schaub) -* 8a263ae New: multiline-ternary rule (fixes #6066) (#6590) (Kai Cataldo) -* e951303 Update: Adding new `key-spacing` option (fixes #5613) (#5907) (Kyle Mendes) -* 10c3e91 Docs: Remove reference from 3.0.0 migration guide (refs #6605) (#6618) (Kevin Partington) -* 5010694 Docs: Removed non-existing resource (#6609) (Moritz Kröger) -* 6d40d85 Docs: Note that PR requires ACCEPTED issue (refs #6568) (#6604) (Patrick McElhaney) - -v3.0.1 - July 5, 2016 - -* 27700cf Fix: `no-unused-vars` false positive around callback (fixes #6576) (#6579) (Toru Nagashima) -* 124d8a3 Docs: Pull request template (#6568) (Nicholas C. Zakas) -* e9a2ed9 Docs: Fix rules\id-length exceptions typos (fixes #6397) (#6593) (GramParallelo) -* a2cfa1b Fix: Make outerIIFEBody work correctly (fixes #6585) (#6596) (Nicholas C. Zakas) -* 9c451a2 Docs: Use string severity in example (#6601) (Kenneth Williams) -* 8308c0b Chore: remove path-is-absolute in favor of the built-in (fixes #6598) (#6600) (shinnn) -* 7a63717 Docs: Add missing pull request step (fixes #6595) (#6597) (Nicholas C. Zakas) -* de3ed84 Fix: make `no-unused-vars` ignore for-in (fixes #2342) (#6126) (Oleg Gaidarenko) -* 6ef2cbe Fix: strip Unicode BOM of config files (fixes #6556) (#6580) (Toru Nagashima) -* ee7fcfa Docs: Correct type of `outerIIFEBody` in `indent` (fixes #6581) (#6584) (alberto) -* 25fc7b7 Fix: false negative of `max-len` (fixes #6564) (#6565) (not-an-aardvark) -* f6b8452 Docs: Distinguish examples in rules under Stylistic Issues part 6 (#6567) (Kenneth Williams) - -v3.0.0 - July 1, 2016 - -* 66de9d8 Docs: Update installation instructions on README (#6569) (Nicholas C. Zakas) -* dc5b78b Breaking: Add `require-yield` rule to `eslint:recommended` (fixes #6550) (#6554) (Gyandeep Singh) -* 7988427 Fix: lib/config.js tests pass if personal config exists (fixes #6559) (#6566) (Kevin Partington) -* 4c05967 Docs: Update rule docs for new format (fixes #5417) (#6551) (Nicholas C. Zakas) -* 70da5a8 Docs: Correct link to rules page (#fixes 6553) (#6561) (alberto) -* e2b2030 Update: Check RegExp strings for `no-regex-spaces` (fixes #3586) (#6379) (Jackson Ray Hamilton) -* 397e51b Update: Implement outerIIFEBody for indent rule (fixes #6259) (#6382) (David Shepherd) -* 666da7c Docs: 3.0.0 migration guide (#6521) (Nicholas C. Zakas) -* b9bf8fb Docs: Update Governance Policy (fixes #6452) (#6522) (Nicholas C. Zakas) -* 1290657 Update: `no-unused-vars` ignores read it modifies itself (fixes #6348) (#6535) (Toru Nagashima) -* d601f6b Fix: Delete cache only when executing on files (fixes #6459) (#6540) (Kai Cataldo) -* e0d4b19 Breaking: Error thrown/printed if no config found (fixes #5987) (#6538) (Kevin Partington) -* 18663d4 Fix: false negative of `no-useless-rename` (fixes #6502) (#6506) (Toru Nagashima) -* 0a7936d Update: Add fixer for prefer-const (fixes #6448) (#6486) (Nick Heiner) -* c60341f Chore: Update index and `meta` for `"eslint:recommended"` (refs #6403) (#6539) (Mark Pedrotti) -* 73da28d Better wording for the error reported by the rule "no-else-return" #6411 (#6413) (Olivier Thomann) -* e06a5b5 Update: Add fixer for arrow-parens (fixes #4766) (#6501) (madmed88) -* 5f8f3e8 Docs: Remove Box as a sponsor (#6529) (Nicholas C. Zakas) -* 7dfe0ad Docs: fix max-lines samples (fixes #6516) (#6515) (Dmitriy Shekhovtsov) -* fa05119 Breaking: Update eslint:recommended (fixes #6403) (#6509) (Nicholas C. Zakas) -* e96177b Docs: Add "Proposing a Rule Change" link to CONTRIBUTING.md (#6511) (Kevin Partington) -* bea9096 Docs: Update pull request steps (fixes #6474) (#6510) (Nicholas C. Zakas) -* 7bcf6e0 Docs: Consistent example headings & text pt3 (refs #5446) (#6492) (Guy Fraser) -* 1a328d9 Docs: Consistent example headings & text pt4 (refs #5446) (#6493) (Guy Fraser) -* ff5765e Docs: Consistent example headings & text pt2 (refs #5446)(#6491) (Guy Fraser) -* 01384fa Docs: Fixing typos (refs #5446)(#6494) (Guy Fraser) -* 4343ae8 Fix: false negative of `object-shorthand` (fixes #6429) (#6434) (Toru Nagashima) -* b7d8c7d Docs: more accurate yoda-speak (#6497) (Tony Lukasavage) -* 3b0ab0d Fix: add warnIgnored flag to CLIEngine.executeOnText (fixes #6302) (#6305) (Robert Levy) -* c2c6cec Docs: Mark object-shorthand as fixable. (#6485) (Nick Heiner) -* 5668236 Fix: Allow objectsInObjects exception when destructuring (fixes #6469) (#6470) (Adam Renklint) -* 17ac0ae Fix: `strict` rule reports a syntax error for ES2016 (fixes #6405) (#6464) (Toru Nagashima) -* 4545123 Docs: Rephrase documentation for `no-duplicate-imports` (#6463) (Simen Bekkhus) -* 1b133e3 Docs: improve `no-native-reassign` and specifying globals (fixes #5358) (#6462) (Toru Nagashima) -* b179373 Chore: Remove dead code in excuteOnFiles (fixes #6467) (#6466) (Andrew Hutchings) -* 18fbc4b Chore: Simplify eslint process exit code (fixes #6368) (#6371) (alberto) -* 58542e4 Breaking: Drop support for node < 4 (fixes #4483) (#6401) (alberto) -* f50657e Breaking: use default for complexity in eslint:recommended (fixes #6021) (#6410) (alberto) -* 3e690fb Fix: Exit init early if guide is chosen w/ no package.json (fixes #6476) (#6478) (Kai Cataldo) - -v2.13.1 - June 20, 2016 - -* 434de7f Fix: wrong baseDir (fixes #6450) (#6457) (Toru Nagashima) -* 3c9ce09 Fix: Keep indentation when fixing `padded-blocks` "never" (fixes #6454) (#6456) (Ed Lee) -* a9d4cb2 Docs: Fix typo in max-params examples (#6471) (J. William Ashton) -* 1e185b9 Fix: no-multiple-empty-lines errors when no line breaks (fixes #6449) (#6451) (strawbrary) - -v2.13.0 - June 17, 2016 - -* cf223dd Fix: add test for a syntax error (fixes #6013) (#6378) (Toru Nagashima) -* da30cf9 Update: Add fixer for object-shorthand (fixes #6412) (#6418) (Nick Heiner) -* 2cd90eb Chore: Fix rule meta description inconsistencies (refs #5417) (#6422) (Mark Pedrotti) -* d798b2c Added quotes around "classes" option key (#6441) (Guy Fraser) -* 852b6df Docs: Delete empty table of links from Code Path Analysis (#6423) (Mark Pedrotti) -* 5e9117e Chore: sort rules in eslint.json (fixes #6425) (#6426) (alberto) -* c2b5277 Docs: Add gitter chat link to Reporting Bugs (#6430) (Mark Pedrotti) -* 1316db0 Update: Add `never` option for `func-names` (fixes #6059) (#6392) (alberto) -* 1c123e2 Update: Add autofix for `padded-blocks` (fixes #6320) (#6393) (alberto) -* 8ec89c8 Fix: `--print-config` return config inside subdir (fixes #6329) (#6385) (alberto) -* 4f73240 Fix: `object-curly-newline` multiline with comments (fixes #6381) (#6396) (Toru Nagashima) -* 77697a7 Chore: Fake config hierarchy fixtures (fixes #6206) (#6402) (Gyandeep Singh) -* 73a9a6d Docs: Fix links in Configuring ESLint (#6421) (Mark Pedrotti) -* ed84c4c Fix: improve `newline-per-chained-call` message (fixes #6340) (#6360) (Toru Nagashima) -* 9ea4e44 Docs: Update parser reference to `espree` instead of `esprima` (#6404) (alberto) -* 7f57467 Docs: Make `fix` param clearer (fixes #6366) (#6367) (Nick Heiner) -* fb49c7f Fix: nested `extends` with relative path (fixes #6358) (#6359) (Toru Nagashima) -* 5122f73 Update: no-multiple-empty-lines fixer (fixes #6225) (#6226) (Ruurd Moelker) -* 0e7ce72 Docs: Fix rest-spread-spacing's name (#6365) (cody) -* cfdd524 Fix: allow semi as braceless body of statements (fixes #6386) (#6391) (alberto) -* 6b08cfc Docs: key-spacing fixable documenation notes (fixes #6375) (#6376) (Ruurd Moelker) -* 4b4be3b Docs: `max-lines` option: fix `skipComments` typo (#6374) (Jordan Harband) -* 20ab4f6 Docs: Fix wrong link in object-curly-newline (#6373) (Grant Snodgrass) -* 412ce8d Docs: Fix broken links in no-mixed-operators (#6372) (Grant Snodgrass) - -v2.12.0 - June 10, 2016 - -* 54c30fb Update: Add explicit default option `always` for `eqeqeq` (refs #6144) (#6342) (alberto) -* 2d63370 Update: max-len will warn indented comment lines (fixes #6322) (#6324) (Kai Cataldo) -* dcd4ad7 Docs: clarify usage of inline disable comments (fixes #6335) (#6347) (Kai Cataldo) -* c03300b Docs: Clarified how plugin rules look in plugin configs (fixes #6346) (#6351) (Kevin Partington) -* 9c87709 Docs: Add semantic versioning policy (fixes #6244) (#6343) (Nicholas C. Zakas) -* 5affab1 Docs: Describe values under Extending Configuration Files (refs #6240) (#6336) (Mark Pedrotti) -* 2520f5a New: `max-lines` rule (fixes #6078) (#6321) (alberto) -* 9bfbc64 Update: Option for object literals in `arrow-body-style` (fixes #5936) (#6216) (alberto) -* 977cdd5 Chore: remove unused method from FileFinder (fixes #6344) (#6345) (alberto) -* 477fbc1 Docs: Add section about customizing RuleTester (fixes #6227) (#6331) (Jeroen Engels) -* 0e14016 New: `no-mixed-operators` rule (fixes #6023) (#6241) (Toru Nagashima) -* 6e03c4b Update: Add never option to arrow-body-style (fixes #6317) (#6318) (Andrew Hyndman) -* f804397 New: Add `eslint:all` option (fixes #6240) (#6248) (Robert Fletcher) -* dfe05bf Docs: Link JSCS rules to their corresponding page. (#6334) (alberto) -* 1cc4356 Docs: Remove reference to numeric config (fixes #6309) (#6327) (Kevin Partington) -* 2d4efbe Docs: Describe options in rule under Strict Mode (#6312) (Mark Pedrotti) -* c1953fa Docs: Typo fix 'and' -> 'any' (#6326) (Stephen Edgar) -* d49ab4b Docs: Code conventions improvements (#6313) (Kevin Partington) -* 316a507 Fix: one-var allows uninitialized vars in ForIn/ForOf (fixes #5744) (#6272) (Kai Cataldo) -* 6cbee31 Docs: Typo fix 'colum' -> 'column' (#6306) (Andrew Cobby) -* 2663569 New: `object-curly-newline` (fixes #6072) (#6223) (Toru Nagashima) -* 72c2ea5 Update: callback-return allows for object methods (fixes #4711) (#6277) (Kai Cataldo) -* 89580a4 Docs: Distinguish examples in rules under Stylistic Issues part 5 (#6291) (Kenneth Williams) -* 1313804 New: rest-spread-spacing rule (fixes #5391) (#6278) (Kai Cataldo) -* 61dfe68 Fix: `no-useless-rename` false positive in babel-eslint (fixes #6266) (#6290) (alberto) -* c78c8cb Build: Remove commit check from appveyor (fixes #6292) (#6294) (alberto) -* 3e38fc1 Chore: more tests for comments at the end of blocks (refs #6090) (#6273) (Kai Cataldo) -* 38dccdd Docs: `--no-ignore` disables all forms of ignore (fixes #6260) (#6304) (alberto) -* bb69380 Fix: no-useless-rename handles ExperimentalRestProperty (fixes #6284) (#6288) (Kevin Partington) -* fca0679 Update: Improve perf not traversing default ignored dirs (fixes #5679) (#6276) (alberto) -* 320e8b0 Docs: Describe options in rules under Possible Errors part 4 (#6270) (Mark Pedrotti) -* 3e052c1 Docs: Mark no-useless-rename as fixable in rules index (#6297) (Dalton Santos) - -v2.11.1 - May 30, 2016 - -* 64b0d0c Fix: failed to parse `/*eslint` comments by colon (fixes #6224) (#6258) (Toru Nagashima) -* c8936eb Build: Don't check commit count (fixes #5935) (#6263) (Nicholas C. Zakas) -* 113c1a8 Fix: `max-statements-per-line` false positive at exports (fixes #6264) (#6268) (Toru Nagashima) -* 03beb27 Fix: `no-useless-rename` false positives (fixes #6266) (#6267) (alberto) -* fe89037 Docs: Fix rule name in example (#6279) (Kenneth Williams) - -v2.11.0 - May 27, 2016 - -* 77dd2b4 Fix: On --init, print message when package.json is invalid (fixes #6257) (#6261) (Kai Cataldo) -* 7f60186 Fix: `--ignore-pattern` can't uningnore files (fixes #6127) (#6253) (alberto) -* fea8fe6 New: no-useless-rename (fixes #6058) (#6249) (Kai Cataldo) -* b4cff9d Fix: Incorrect object-property-newline behavior (fixes #6207) (#6213) (Rafał Ruciński) -* 35b4656 Docs: Edit arrow-parens.md to show correct output value (#6245) (Adam Terlson) -* ee0cd58 Fix: `newline-before-return` shouldn't disallow newlines (fixes #6176) (#6217) (alberto) -* d4f5526 Fix: `vars-on-top` crashs at export declarations (fixes #6210) (#6220) (Toru Nagashima) -* 088bda9 New: `unicode-bom` rule to allow or disallow BOM (fixes #5502) (#6230) (Andrew Johnston) -* 14bfc03 Fix: `comma-dangle` wrong autofix (fixes #6233) (#6235) (Toru Nagashima) -* cdd65d7 Docs: added examples for arrow-body-style (refs #5498) (#6242) (Tieme van Veen) -* c10c07f Fix: lost code in autofixing (refs #6233) (#6234) (Toru Nagashima) -* e6d5b1f Docs: Add rule deprecation section to user guide (fixes #5845) (#6201) (Kai Cataldo) -* 777941e Upgrade: doctrine to 1.2.2 (fixes #6121) (#6231) (alberto) -* 74c458d Update: key-spacing rule whitespace fixer (fixes #6167) (#6169) (Ruurd Moelker) -* 04bd586 New: Disallow use of Object.prototype methods on objects (fixes #2693) (#6107) (Andrew Levine) -* 53754ec Update: max in `max-statements-per-line` should be >=0 (fixes #6171) (#6172) (alberto) -* 54d1201 Update: Add treatUndefinedAsUnspecified option (fixes #6026) (#6194) (Kenneth Williams) -* 18152dd Update: Add checkLoops option to no-constant-condition (fixes #5477) (#6202) (Kai Cataldo) -* 7644908 Fix: no-multiple-empty-lines BOF and EOF defaults (fixes #6179) (#6180) (Ruurd Moelker) -* 72335eb Fix: `max-statements-per-line` false positive (fixes #6173, fixes #6153) (#6192) (Toru Nagashima) -* 9fce04e Fix: `generator-star-spacing` false positive (fixes #6135) (#6168) (Toru Nagashima) - -v2.10.2 - May 16, 2016 - -* bda5de5 Fix: Remove default parser from CLIEngine options (fixes #6182) (#6183) (alberto) -* e59e5a0 Docs: Describe options in rules under Possible Errors part 3 (#6105) (Mark Pedrotti) -* 842ab2e Build: Run phantomjs tests using karma (fixes #6128) (#6178) (alberto) - -v2.10.1 - May 14, 2016 - -* 9397135 Fix: `valid-jsdoc` false positive at default parameters (fixes #6097) (#6170) (Toru Nagashima) -* 2166ad4 Fix: warning & error count in `CLIEngine.getErrorResults` (fixes #6155) (#6157) (alberto) -* 1e0a652 Fix: ignore empty statements in max-statements-per-line (fixes #6153) (#6156) (alberto) -* f9ca0d6 Fix: `no-extra-parens` to check for nulls (fixes #6161) (#6164) (Gyandeep Singh) -* d095ee3 Fix: Parser merge sequence in config (fixes #6158) (#6160) (Gyandeep Singh) -* f33e49f Fix: `no-return-assign` to check for null tokens (fixes #6159) (#6162) (Gyandeep Singh) - -v2.10.0 - May 13, 2016 - -* 098cd9c Docs: Distinguish examples in rules under Stylistic Issues part 4 (#6136) (Kenneth Williams) -* 805742c Docs: Clarify JSX option usage (#6132) (Richard Collins) -* 10b0933 Fix: Optimize no-irregular-whitespace for the common case (fixes #6116) (#6117) (Andres Suarez) -* 36bec90 Docs: linkify URLs in development-environment.md (#6150) (chrisjshull) -* 29c401a Docs: Convert rules in index under Removed from list to table (#6091) (Mark Pedrotti) -* e13e696 Fix: `_` and `$` in isES5Constructor (fixes #6085) (#6094) (Kevin Locke) -* 67916b9 Fix: `no-loop-func` crashed (fixes #6130) (#6138) (Toru Nagashima) -* d311a62 Fix: Sort fixes consistently even if they overlap (fixes #6124) (#6133) (alberto) -* 6294459 Docs: Correct syntax for default ignores and `.eslintignore` example (#6118) (alberto) -* 067db14 Fix: Replace `assert.deepEqual` by `lodash.isEqual` (fixes #6111) (#6112) (alberto) -* 52fdf04 Fix: `no-multiple-empty-lines` duplicate errors at BOF (fixes #6113) (#6114) (alberto) -* e6f56da Docs: Document `--ignore-pattern` (#6120) (alberto) -* ef739cd Fix: Merge various command line configs at the same time (fixes #6104) (#6108) (Ed Lee) -* 767da6f Update: add returnAssign option to no-extra-parens (fixes #6036) (#6095) (Kai Cataldo) -* 06f6252 Build: Use split instead of slice/indexOf for commit check (fixes #6109) (#6110) (Ed Lee) -* c4fc39b Docs: Update headings of rules under Removed (refs #5774) (#6102) (Mark Pedrotti) -* 716345f Build: Match rule id at beginning of heading (refs #5774) (#6089) (Mark Pedrotti) -* 0734967 Update: Add an option to `prefer-const` (fixes #5692) (#6040) (Toru Nagashima) -* 7941d5e Update: Add autofix for `lines-around-comment` (fixes #5956) (#6062) (alberto) -* dc538aa Build: Pin proxyquire to ">=1.0.0 <1.7.5" (fixes #6096) (#6100) (alberto) -* 04563ca Docs: Describe options in rules under Possible Errors part 2 (#6063) (Mark Pedrotti) -* 5d390b2 Chore: Replace deprecated calls to context - batch 4 (fixes #6029) (#6087) (alberto) -* 6df4b23 Fix: `no-return-assign` warning nested expressions (fixes #5913) (#6041) (Toru Nagashima) -* 16fad58 Merge pull request #6088 from eslint/docs-one-var-per-line (alberto) -* 0b67170 Docs: Correct default for `one-var-declaration-per-line` (fixes #6017) (#6022) (Ed Lee) -* d40017f Fix: comma-style accounts for parens in array (fixes #6006) (#6038) (Kai Cataldo) -* 992d9cf Docs: Fix typography/teriminology in indent doc (fixes #6045) (#6044) (Rich Trott) -* 4ae39d2 Chore: Replace deprecated calls to context - batch 3 (refs #6029) (#6056) (alberto) -* 8633e4d Update: multipass should not exit prematurely (fixes #5995) (#6048) (alberto) -* 3c44c2c Update: Adds an avoidQuotes option for object-shorthand (fixes #3366) (#5870) (Chris Sauvé) -* a9a4652 Fix: throw when rule uses `fix` but `meta.fixable` not set (fixes #5970) (#6043) (Vitor Balocco) -* ad10106 Docs: Update comma-style docs (#6039) (Kai Cataldo) -* 388d6f8 Fix: `no-sequences` false negative at arrow expressions (fixes #6082) (#6083) (Toru Nagashima) -* 8e96064 Docs: Clarify rule example in README since we allow string error levels (#6061) (Kevin Partington) -* a66bf19 Fix: `lines-around-comment` multiple errors on same line (fixes #5965) (#5994) (alberto) -* a2cc54e Docs: Organize meta and describe visitor in Working with Rules (#5967) (Mark Pedrotti) -* ef8cbff Fix: object-shorthand should only lint computed methods (fixes #6015) (#6024) (Kai Cataldo) -* cd1b057 Chore: Replace deprecated calls to context - batch 2 (refs #6029) (#6049) (alberto) -* a3a6e06 Update: no-irregal-whitespace in a regular expression (fixes #5840) (#6018) (Linda_pp) -* 9b9d76c Chore: Replace deprecated calls to context - batch 1 (refs #6029) (#6034) (alberto) -* dd8bf93 Fix: blockless else in max-statements-per-line (fixes #5926) (#5993) (Glen Mailer) -* f84eb80 New: Add new rule `object-property-newline` (fixes #5667) (#5933) (Vitor Balocco) -* d5f4104 Docs: mention parsing errors in strict mode (fixes #5485) (#5991) (Mark Pedrotti) -* 249732e Docs: Move docs from eslint.github.io (fixes #5964) (#6012) (Nicholas C. Zakas) -* 4c2de6c Docs: Add example of diff clarity to comma-dangle rule docs (#6035) (Vitor Balocco) -* 3db2e89 Fix: Do not swallow exceptions in CLIEngine.getFormatter (fixes #5977) (#5978) (Gustav Nikolaj) -* eb2fb44 Fix: Always ignore defaults unless explicitly passed (fixes #5547) (#5820) (Ian VanSchooten) -* ab57e94 Docs: Add example of diff clarity to newline-per-chained-call (#5986) (Vitor Balocco) -* 88bc014 Docs: Update readme info about jshint (#6027) (alberto) -* a2c15cc Docs: put config example in code block (#6005) (Amos Wenger) -* a5011cb Docs: Fix a wrong examples' header of `prefer-arrow-callback`. (#6020) (Toru Nagashima) -* 1484ede Docs: Typo in nodejs-api (#6025) (alberto) -* ade6a9b Docs: typo: "eslint-disable-line" not "eslint disable-line" (#6019) (Will Day) -* 2f15354 Fix: Removed false positives of break and continue (fixes #5972) (#6000) (Onur Temizkan) - -v2.9.0 - April 29, 2016 - -* a8a2cd8 Fix: Avoid autoconfig crashes from inline comments (fixes #5992) (#5999) (Ian VanSchooten) -* 23b00e0 Upgrade: npm-license to 0.3.2 (fixes #5996) (#5998) (alberto) -* 377167d Upgrade: ignore to 3.1.2 (fixes #5979) (#5988) (alberto) -* 141b778 Fix: no-control-regex literal handling fixed. (fixes #5737) (#5943) (Efe Gürkan YALAMAN) -* 577757d Fix: Clarify color option (fixes #5928) (#5974) (Grant Snodgrass) -* e7e6581 Docs: Update CLA link (#5980) (Gustav Nikolaj) -* 0be26bc Build: Add nodejs 6 to travis (fixes #5971) (#5973) (Gyandeep Singh) -* e606523 New: Rule `no-unsafe-finally` (fixes #5808) (#5932) (Onur Temizkan) -* 42d1ecc Chore: Add metadata to existing rules - Batch 7 (refs #5417) (#5969) (Vitor Balocco) -* e2ad1ec Update: object-shorthand lints computed methods (fixes #5871) (#5963) (Chris Sauvé) -* d24516a Chore: Add metadata to existing rules - Batch 6 (refs #5417) (#5966) (Vitor Balocco) -* 1e7a3ef Fix: `id-match` false positive in property values (fixes #5885) (#5960) (Mike Sherov) -* 51ddd4b Update: Use process @abstract when processing @return (fixes #5941) (#5945) (Simon Schick) -* 52a4bea Update: Add autofix for `no-whitespace-before-property` (fixes #5927) (#5951) (alberto) -* 46e058d Docs: Correct typo in configuring.md (#5957) (Nick S. Plekhanov) -* 5f8abab Chore: Add metadata to existing rules - Batch 5 (refs #5417) (#5944) (Vitor Balocco) -* 0562f77 Chore: Add missing newlines to test cases (fixes #5947) (Rich Trott) -* fc78e78 Chore: Enable quote-props rule in eslint-config-eslint (refs #5188) (#5938) (Gyandeep Singh) -* 43f6d05 Docs: Update docs to refer to column (#5937) (Sashko Stubailo) -* 586478e Update: Add autofix for `comma-dangle` (fixes #3805) (#5925) (alberto) -* a4f9c5a Docs: Distinguish examples in rules under Stylistic Issues part 3 (Kenneth Williams) -* e7c0737 Chore: Enable no-console rule in eslint-config-eslint (refs #5188) (Kevin Partington) -* 0023fe6 Build: Add “chore” to commit tags (fixes #5880) (#5929) (Mike Sherov) -* 25d626a Upgrade: espree 3.1.4 (fixes #5923, fixes #5756) (Kai Cataldo) -* a01b412 New: Add `no-useless-computed-key` rule (fixes #5402) (Burak Yigit Kaya) -* 9afb9cb Chore: Remove workaround for espree and escope bugs (fixes #5852) (alberto) -* 3ffc582 Chore: Update copyright and license info (alberto) -* 249eb40 Docs: Clarify init sets up local installation (fixes #5874) (Kai Cataldo) -* 6cd8c86 Docs: Describe options in rules under Possible Errors part 1 (Mark Pedrotti) -* f842d18 Fix: `no-this-before-super` crash on unreachable paths (fixes #5894) (Toru Nagashima) -* a02960b Docs: Fix missing delimiter in README links (Kevin Partington) -* 3a9e72c Docs: Update developer guide with new standards (Nicholas C. Zakas) -* cb78585 Update: Add `allowUnboundThis` to `prefer-arrow-callback` (fixes #4668) (Burak Yigit Kaya) -* 02be29f Chore: Remove CLA check from bot (Nicholas C. Zakas) -* 220713e Chore: Add metadata to existing rules - Batch 4 (refs #5417) (Vitor Balocco) -* df53414 Chore: Include jQuery Foundation info (Nicholas C. Zakas) -* f1b2992 Fix: `no-useless-escape` false positive in JSXAttribute (fixes #5882) (Toru Nagashima) -* 74674ad Docs: Move `sort-imports` to 'ECMAScript 6' (Kenneth Williams) -* ae69ddb Docs: Fix severity type in example (Kenneth Williams) -* 19f6fff Update: Autofixing does multiple passes (refs #5329) (Nicholas C. Zakas) -* 1e4b0ca Docs: Reduce length of paragraphs in rules index (Mark Pedrotti) -* 8cfe1eb Docs: Fix a wrong option (Zach Orlovsky) -* 8f6739f Docs: Add alberto as reviewer (alberto) -* 2ae4938 Docs: Fix message for `inline-config` option (alberto) -* 089900b Docs: Fix a wrong rule name in an example (Toru Nagashima) -* c032b41 Docs: Fix emphasis (Toru Nagashima) -* ae606f0 Docs: Update JSCS info in README (alberto) -* a9c5323 Fix: Install ESLint on init if not installed (fixes #5833) (Kai Cataldo) -* ed38358 Docs: Removed incorrect example (James M. Greene) -* af3113c Docs: Fix config comments in indent docs (Brandon Mills) -* 2b39461 Update: `commentPattern` option for `default-case` rule (fixes #5803) (Artyom Lvov) - -v2.8.0 - April 15, 2016 - -* a8821a5 Docs: Distinguish examples in rules under Stylistic Issues part 2 (Kenneth Williams) -* 76913b6 Update: Add metadata to existing rules - Batch 3 (refs #5417) (Vitor Balocco) -* 34ad8d2 Fix: Check that module.paths exists (fixes #5791) (Nicholas C. Zakas) -* 37239b1 Docs: Add new members of the team (Ilya Volodin) -* fb3c2eb Update: allow template literals (fixes #5234) (Jonathan Haines) -* 5a4a935 Update: Add metadata to existing rules - Batch 2 (refs #5417) (Vitor Balocco) -* ea2e625 Fix: newline-before-return handles return as first token (fixes #5816) (Kevin Partington) -* f8db9c9 Update: add nestedBinaryExpressions to no-extra-parens (fixes #3065) (Ilya Volodin) -* 0045d57 Update: `allowNamedFunctions` in `prefer-arrow-callback` (fixes #5675) (alberto) -* 19da72a Update: Add metadata to existing rules - Batch 1 (refs #5417) (Vitor Balocco) -* cc14e43 Fix: `no-fallthrough` empty case with comment (fixes #5799) (alberto) -* 13c8b14 Fix: LogicalExpression checks for short circuit (fixes #5693) (Vamshi krishna) -* 73b225e Fix: Document and fix metadata (refs #5417) (Ilya Volodin) -* 882d199 Docs: Improve options description in `no-redeclare` (alberto) -* 6a71ceb Docs: Improve options description in `no-params-reassign` (alberto) -* 24b6215 Update: Include 'typeof' in rule 'no-constant-condition' (fixes #5228) (Vamshi krishna) -* a959063 Docs: Remove link to deprecated ESLintTester project (refs #3110) (Trey Thomas) -* 6fd7d82 Update: Change order in `eslint --init` env options (fixes #5742) (alberto) -* c59d909 Fix: Extra paren check around object arrow bodies (fixes #5789) (Brandon Mills) -* 6f88546 Docs: Use double quotes for better Win compatibility (fixes #5796) (alberto) -* 02743d5 Fix: catch self-assignment operators in `no-magic-number` (fixes #4400) (alberto) -* c94e74e Docs: Make rule descriptions more consistent (Kenneth Williams) -* 6028252 Docs: Distinguish examples in rules under Stylistic Issues part 1 (Mark Pedrotti) -* ccd8ca9 Fix: Added property onlyDeclaration to id-match rule (fixes #3488) (Gajus Kuizinas) -* 6703c02 Update: no-useless-escape / exact locations of errors (fixes #5751) (Onur Temizkan) -* 3d84b91 Fix: ignore trailing whitespace in template literal (fixes #5786) (Kai Cataldo) -* b0e6bc4 Update: add allowEmptyCatch option to no-empty (fixes #5800) (Kai Cataldo) -* f1f1dd7 Docs: Add @pedrottimark as a committer (Brandon Mills) -* 228f201 Update: `commentPattern` option for `no-fallthrough` rule (fixes #5757) (Artyom Lvov) -* 41db670 Docs: Clarify disable inline comments (Kai Cataldo) -* 9c9a295 Docs: Add note about shell vs node glob parameters in cli (alberto) -* 5308ff9 Docs: Add code backticks to sentence in fixable rules (Mark Pedrotti) -* 965ec06 Docs: fix the examples for space-before-function-paren. (Craig Silverstein) -* 2b202fc Update: Add ignore option to space-before-function-parens (fixes #4127) (Craig Silverstein) -* 24c12ba Fix: improve `constructor-super` errors for literals (fixes #5449) (Toru Nagashima) - -v2.7.0 - April 4, 2016 - -* 134cb1f Revert "Update: adds nestedBinaryExpressions for no-extra-parens rule (fixes #3065)" (Ilya Volodin) -* 7e80867 Docs: Update sentence in fixable rules (Mark Pedrotti) -* 1b6d5a3 Update: adds nestedBinaryExpressions for no-extra-parens (fixes #3065) (Nick Fisher) -* 4f93c32 Docs: Clarify `array-bracket-spacing` with newlines (fixes #5768) (alberto) -* 161ddac Fix: remove `console.dir` (fixes #5770) (Toru Nagashima) -* 0c33f6a Fix: indent rule uses wrong node for class indent level (fixes #5764) (Paul O’Shannessy) - -v2.6.0 - April 1, 2016 - -* ce2accd Fix: vars-on-top now accepts exported variables (fixes #5711) (Olmo Kramer) -* 7aacba7 Update: Deprecate option `maximum` in favor of `max` (fixes #5685) (Vitor Balocco) -* 5fe6fca Fix: no-useless-escape \B regex escape (fixes #5750) (Onur Temizkan) -* 9b73ffd Update: `destructuring` option of `prefer-const` rule (fixes #5594) (Toru Nagashima) -* 8ac9206 Docs: Typo in `sort-imports` (alberto) -* 12902c5 Fix: valid-jsdoc crash w/ Field & Array Type (fixes #5745) (fixes #5746) (Burak Yigit Kaya) -* 2c8b65a Docs: Edit examples for a few rules (Mark Pedrotti) -* d736bc2 Fix: Treat SwitchCase like a block in lines-around-comment (fixes #5718) (Scott O'Hara) -* 24a61a4 Update: make `no-useless-escape` allowing line breaks (fixes #5689) (Toru Nagashima) -* 4ecd45e Fix: Ensure proper lookup of config files (fixes #5175, fixes #5468) (Nicholas C. Zakas) -* 088e26b Fix: Update doctrine to allow hyphens in JSDoc names (fixes #5612) (Kai Cataldo) -* 692fd5d Upgrade: Old Chalk.JS deprecated method (fixes #5716) (Morris Singer) -* f59d91d Update: no-param-reassign error msgs (fixes #5705) (Isaac Levy) -* c1b16cd Fix: Object spread throws error in key-spacing rule. (fixes #5724) (Ziad El Khoury Hanna) -* 3091613 Docs: Correct explanation about properties (James Monger) -* cb0f0be Fix: Lint issue with `valid-jsdoc` rule (refs #5188) (Gyandeep Singh) -* aba1954 Build: Ignore jsdoc folder internally (fixes #5714) (alberto) -* a35f127 Fix: Lint for eslint project in regards to vars (refs #5188) (Gyandeep Singh) -* d9ab4f0 Fix: Windows scoped package configs (fixes #5644) (Nicholas C. Zakas) -* 8d0cd0d Update: Basic valid-jsdoc default parameter support (fixes #5658) (Tom Andrews) - -v2.5.3 - March 28, 2016 - -* 8749ac5 Build: Disable bundling dependencies (fixes #5687) (Nicholas C. Zakas) - -v2.5.2 - March 28, 2016 - -* 1cc7f8e Docs: Remove mention of minimatch for .eslintignore (Ian VanSchooten) -* 5bd69a9 Docs: Reorder FAQ in README (alberto) -* 98e6bd9 Fix: Correct default for indentation in `eslint --init` (fixes #5698) (alberto) -* 679095e Fix: make the default of `options.cwd` in runtime (fixes #5694) (Toru Nagashima) -* 4f06f2f Docs: Distinguish examples in rules under Best Practices part 2 (Mark Pedrotti) -* 013a18e Build: Fix bundling script (fixes #5680) (Nicholas C. Zakas) -* 8c5d954 Docs: Typo fix (István Donkó) -* 09659d6 Docs: Use string severity (Kenneth Williams) -* a4ae769 Docs: Manual changelog update for v2.5.1 (Nicholas C. Zakas) -* c41fab9 Fix: don't use path.extname with undefined value (fixes #5678) (Myles Borins) - -v2.5.1 - March 25, 2016 - -* Build: No functional changes, just republished with a working package. - -v2.5.0 - March 25, 2016 - -* 7021aa9 Fix: lines-around-comment in ESLint repo, part 2 (refs #5188) (Kevin Partington) -* 095c435 Docs: Remove ES2016 from experimental section of README (Kevin Partington) -* 646f863 Build: Bundle dependencies in package.json (fixes #5013) (Nicholas C. Zakas) -* ea06868 Docs: Clarify --ext does not apply to globs (fixes #5452) (Ian VanSchooten) -* 569c478 Build: Fix phantomjs CI problems (fixes #5666) (alberto) -* 6022426 Docs: Add link to chat room in README primary links (alberto) -* 2fbb530 Docs: Add link to "Proposing a Rule Change" in README (alberto) -* 25bf491 Upgrade: globals 9.x (fixes #5668) (Toru Nagashima) -* d6f8409 New: Rule - No useless escape (fixes #5460) (Onur Temizkan) -* 12a43f1 Docs: remove brace expansion from configuring.md (refs #5314) (Jonathan Haines) -* 92d1749 New: max-statements-per-line (fixes #5424) (Kenneth Williams) -* aaf324a Fix: missing support for json sub configs (fixes #5413) (Noam Okman) -* 48ad5fe Update: Add 'caughtErrors' to rule no-unused-vars (fixes #3837) (vamshi) -* ad90c2b Fix: incorrect config message (fixes #5653) (s0ph1e) -* a551831 Docs: Distinguish examples in rules under Node.js and CommonJS (Mark Pedrotti) -* 83cd651 Upgrade: chai to 3.5.0 (fixes #5647) (alberto) -* 32748dc Fix: `radix` rule false positive at shadowed variables (fixes #5639) (Toru Nagashima) -* 66db38d Fix: `--no-ignore` should not un-ignore default ignores (fixes #5547) (alberto) -* e3e06f3 Docs: Distinguish examples in rules under Best Practices part 4 (Mark Pedrotti) -* a9f0865 Docs: Update no-sequences rule docs for clarity (fixes #5536) (Kai Cataldo) -* bae7b30 Docs: Add michaelficarra as committer (alberto) -* e2990e7 Docs: Consistent wording in rules README (alberto) -* 49b4d2a Docs: Update team list with new members (Ilya Volodin) -* d0ae66c Update: Allow autoconfiguration for JSX code (fixes #5511) (Ian VanSchooten) -* 38a0a64 Docs: Clarify `linebreak-style` docs (fixes #5628) (alberto) -* 4b7305e Fix: Allow default ignored files to be unignored (fixes #5410) (Ian VanSchooten) -* 4b05ce6 Update: Enforce repo coding conventions via ESLint (refs #5188) (Kevin Partington) -* 051b255 Docs: Remove or rewrite references to former ecmaFeatures (Mark Pedrotti) -* 9a22625 Fix: `prefer-const` false positive at non-blocked if (fixes #5610) (Toru Nagashima) -* b1fd482 Fix: leading comments added from previous node (fixes #5531) (Kai Cataldo) -* c335650 Docs: correct the no-confusing-arrow docs (Daniel Norman) -* e94b77d Fix: Respect 'ignoreTrailingComments' in max-len rule (fixes #5563) (Vamshi Krishna) -* 9289ef8 Fix: handle personal package.json without config (fixes #5496) (Denny Christochowitz) -* 87d74b2 Fix: `prefer-const` got to not change scopes (refs #5284) (Toru Nagashima) -* 5a881e7 Docs: Fix typo in code snippet for no-unmodified-loop-condition rule (Chris Rebert) -* 03037c2 Update: Overrides for space-unary-ops (fixes #5060) (Afnan Fahim) -* 24d986a Update: replace MD5 hashing of cache files with MurmurHash (fixes #5522) (Michael Ficarra) -* f405030 Fix: Ensure allowing `await` as a property name (fixes #5564) (Toru Nagashima) -* aefc90c Fix: `no-useless-constructor` clash (fixes #5573) (Toru Nagashima) -* 9eaa20d Docs: Fix typo in CLI help message (ryym) -* a7c3e67 Docs: Invalid json in `configuring.md` (alberto) -* 4e50332 Docs: Make `prefer-template` examples consistent. (alberto) -* cfc14a9 Fix: valid-jsdoc correctly checks type union (fixes #5260) (Kai Cataldo) -* 689cb7d Fix: `quote-props` false positive on certain keys (fixes #5532) (Burak Yigit Kaya) -* 167a03a Fix: `brace-style` erroneously ignoring certain errors (fixes #5197) (Burak Yigit Kaya) -* 3133f28 Fix: object-curly-spacing doesn't know types (fixes #5537) (fixes #5538) (Burak Yigit Kaya) -* d0ca171 Docs: Separate parser and config questions in issue template (Kevin Partington) -* bc769ca Fix: Improve file path resolution (fixes #5314) (Ian VanSchooten) -* 9ca8567 Docs: Distinguish examples in rules under Best Practices part 3 (Mark Pedrotti) -* b9c69f1 Docs: Distinguish examples in rules under Variables part 2 (Mark Pedrotti) -* c289414 New: `no-duplicate-imports` rule (fixes #3478) (Simen Bekkhus) - -v2.4.0 - March 11, 2016 - -* 97b2466 Fix: estraverse/escope to work with unknowns (fixes #5476) (Nicholas C. Zakas) -* 641b3f7 Fix: validate the type of severity level (fixes #5499) (Shinnosuke Watanabe) -* 9ee8869 Docs: no-unused-expressions - add more edge unusable and usable examples (Brett Zamir) -* 56bf864 Docs: Create parity between no-sequences examples (Brett Zamir) -* 13ef1c7 New: add `--parser-options` to CLI (fixes #5495) (Jordan Harband) -* ae1ee54 Docs: fix func-style arrow exception option (Craig Martin) -* 91852fd Docs: no-lone-blocks - show non-problematic (and problematic) label (Brett Zamir) -* b34458f Docs: Rearrange rules for better categories (and improve rule summaries) (Brett Zamir) -* 1198b26 Docs: Minor README clarifications (Brett Zamir) -* 03e6869 Fix: newline-before-return: bug with comment (fixes #5480) (mustafa) -* ad100fd Fix: overindent in VariableDeclarator parens or brackets (fixes #5492) (David Greenspan) -* 9b8e04b Docs: Replace all node references to Node.js which is the official name (Brett Zamir) -* cc1f2f0 Docs: Minor fixes in no-new-func (Brett Zamir) -* 6ab81d4 Docs: Distinguish examples in rules under Best Practices part 1 (Mark Pedrotti) -* 9c6c70c Update: add `allowParens` option to `no-confusing-arrow` (fixes #5332) (Burak Yigit Kaya) -* 979c096 Docs: Document linebreak-style as fixable. (Afnan Fahim) -* 9f18a81 Fix: Ignore destructuring assignment in `object-shorthand` (fixes #5488) (alberto) -* 5d9a798 Docs: README.md, prefer-const; change modified to reassigned (Michiel de Bruijne) -* 38eb7f1 Fix: key-spacing checks ObjectExpression is multiline (fixes #5479) (Kevin Partington) -* 9592c45 Fix: `no-unmodified-loop-condition` false positive (fixes #5445) (Toru Nagashima) - -v2.3.0 - March 4, 2016 - -* 1b2c6e0 Update: Proposed no-magic-numbers option: ignoreJSXNumbers (fixes #5348) (Brandon Beeks) -* 63c0b7d Docs: Fix incorrect environment ref. in Rules in Plugins. (fixes #5421) (Jesse McCarthy) -* 124c447 Build: Add additional linebreak to docs (fixes #5464) (Ilya Volodin) -* 0d3831b Docs: Add RuleTester parserOptions migration steps (Kevin Partington) -* 50f4d5a Fix: extends chain (fixes #5411) (Toru Nagashima) -* 0547072 Update: Replace getLast() with lodash.last() (fixes #5456) (Jordan Eldredge) -* 8c29946 Docs: Distinguish examples in rules under Possible Errors part 1 (Mark Pedrotti) -* 5319b4a Docs: Distinguish examples in rules under Possible Errors part 2 (Mark Pedrotti) -* 1da2420 Fix: crash when SourceCode object was reused (fixes #5007) (Toru Nagashima) -* 9e9daab New: newline-before-return rule (fixes #5009) (Kai Cataldo) -* e1bbe45 Fix: Check space after anonymous generator star (fixes #5435) (alberto) -* 119e0ed Docs: Distinguish examples in rules under Variables (Mark Pedrotti) -* 905c049 Fix: `no-undef` false positive at new.target (fixes #5420) (Toru Nagashima) -* 4a67b9a Update: Add ES7 support (fixes #5401) (Brandon Mills) -* 89c757d Docs: Replace ecmaFeatures with parserOptions in working-with-rules (Kevin Partington) -* 804c08e Docs: Add parserOptions to RuleTester section of working-with-rules (Kevin Partington) -* 1982c50 Docs: Document string option for `no-unused-vars`. (alberto) -* 4f82b2b Update: Support classes in `padded-blocks` (fixes #5092) (alberto) -* ed5564f Docs: Specify results of `no-unused-var` with `args` (fixes #5334) (chinesedfan) -* de0a4ef Fix: `getFormatter` throws an error when called as static (fixes #5378) (cowchimp) -* 78f7ca9 Fix: Prevent crash from swallowing console.log (fixes #5381) (Ian VanSchooten) -* 34b648d Fix: remove tests which have invalid syntax (fixes #5405) (Toru Nagashima) -* 7de5ae4 Docs: Missing allow option in docs (Scott O'Hara) -* cf14c71 Fix: `no-useless-constructor` rule crashes sometimes (fixes #5290) (Burak Yigit Kaya) -* 70e3a02 Update: Allow string severity in config (fixes #3626) (Nicholas C. Zakas) -* 13c7c19 Update: Exclude ES5 constructors from consistent-return (fixes #5379) (Kevin Locke) -* 784d3bf Fix: Location info in `dot-notation` rule (fixes #5397) (Gyandeep Singh) -* 6280b2d Update: Support switch statements in padded-blocks (fixes #5056) (alberto) -* 25a5b2c Fix: Allow irregular whitespace in comments (fixes #5368) (Christophe Porteneuve) -* 560c0d9 New: no-restricted-globals rule implementation (fixes #3966) (Benoît Zugmeyer) -* c5bb478 Fix: `constructor-super` false positive after a loop (fixes #5394) (Toru Nagashima) -* 6c0c4aa Docs: Add Issue template (fixes #5313) (Kai Cataldo) -* 1170e67 Fix: indent rule doesn't handle constructor instantiation (fixes #5384) (Nate Cavanaugh) -* 6bc9932 Fix: Avoid magic numbers in rule options (fixes #4182) (Brandon Beeks) -* 694e1c1 Fix: Add tests to cover default magic number tests (fixes #5385) (Brandon Beeks) -* 0b5349d Fix: .eslintignore paths should be absolute (fixes #5362) (alberto) -* 8f6c2e7 Update: Better error message for plugins (refs #5221) (Nicholas C. Zakas) -* 972d41b Update: Improve error message for rule-tester (fixes #5369) (Jeroen Engels) -* fe3f6bd Fix: `no-self-assign` false positive at shorthand (fixes #5371) (Toru Nagashima) -* 2376291 Docs: Missing space in `no-fallthrough` doc. (alberto) -* 5aedb87 Docs: Add mysticatea as reviewer (Nicholas C. Zakas) -* 1f9fd10 Update: no-invalid-regexp allows custom flags (fixes #5249) (Afnan Fahim) -* f1eab9b Fix: Support for dash and slash in `valid-jsdoc` (fixes #1598) (Gyandeep Singh) -* cd12a4b Fix:`newline-per-chained-call` should only warn on methods (fixes #5289) (Burak Yigit Kaya) -* 0d1377d Docs: Add missing `symbol` type into valid list (Plusb Preco) -* 6aa2380 Update: prefer-const; change modified to reassigned (fixes #5350) (Michiel de Bruijne) -* d1d62c6 Fix: indent check for else keyword with Stroustrup style (fixes #5218) (Gyandeep Singh) -* 7932f78 Build: Fix commit message validation (fixes #5340) (Nicholas C. Zakas) -* 1c347f5 Fix: Cleanup temp files from tests (fixes #5338) (Nick) -* 2f3e1ae Build: Change rules to warnings in perf test (fixes #5330) (Brandon Mills) -* 36f40c2 Docs: Achieve consistent order of h2 in rule pages (Mark Pedrotti) - -v2.2.0 - February 19, 2016 - -* 45a22b5 Docs: remove esprima-fb from suggested parsers (Henry Zhu) -* a4d9cd3 Docs: Fix semi rule typo (Brandon Mills) -* 9d005c0 Docs: Correct option name in `no-implicit-coercion` rule (Neil Kistner) -* 2977248 Fix: Do not cache `.eslintrc.js` (fixes #5067) (Nick) -* 211eb8f Fix: no-multi-spaces conflicts with smart tabs (fixes #2077) (Afnan Fahim) -* 6dc9483 Fix: Crash in `constructor-super` (fixes #5319) (Burak Yigit Kaya) -* 3f48875 Docs: Fix yield star spacing examples (Dmitriy Lazarev) -* 4dab76e Docs: Update `preferType` heading to keep code format (fixes #5307) (chinesedfan) -* 7020b82 Fix: `sort-imports` warned between default and members (fixes #5305) (Toru Nagashima) -* 2f4cd1c Fix: `constructor-super` and `no-this-before-super` false (fixes #5261) (Toru Nagashima) -* 59e9c5b New: eslint-disable-next-line (fixes #5206) (Kai Cataldo) -* afb6708 Fix: `indent` rule forgot about some CallExpressions (fixes #5295) (Burak Yigit Kaya) -* d18d406 Docs: Update PR creation bot message (fixes #5268) (Nicholas C. Zakas) -* 0b1cd19 Fix: Ignore parser option if set to default parser (fixes #5241) (Kai Cataldo) - -v2.1.0 - February 15, 2016 - -* 7981ef5 Build: Fix release script (Nicholas C. Zakas) -* c9c34ea Fix: Skip computed members in `newline-per-chained-call` (fixes #5245) (Burak Yigit Kaya) -* b32ddad Build: `npm run perf` command should check the exit code (fixes #5279) (Burak Yigit Kaya) -* 6580d1c Docs: Fix incorrect `api.verify` JSDoc for `config` param (refs #5104) (Burak Yigit Kaya) -* 1f47868 Docs: Update yield-star-spacing documentation for 2.0.0 (fixes #5272) (Burak Yigit Kaya) -* 29da8aa Fix: `newline-after-var` crash on a switch statement (fixes #5277) (Toru Nagashima) -* 86c5a20 Fix: `func-style` should ignore ExportDefaultDeclarations (fixes #5183) (Burak Yigit Kaya) -* ba287aa Fix: Consolidate try/catches to top levels (fixes #5243) (Ian VanSchooten) -* 3ef5da1 Docs: Update no-magic-numbers#ignorearrayindexes. (KazuakiM) -* 0d6850e Update: Allow var declaration at end of block (fixes #5246) (alberto) -* c1e3a73 Fix: Popular style init handles missing package.json keys (refs #5243) (Brandon Mills) -* 68c6e22 Docs: fix default value of `keyword-spacing`'s overrides option. (Toru Nagashima) -* 00fe46f Upgrade: inquirer (fixes #5265) (Bogdan Chadkin) -* ef729d7 Docs: Remove option that is not being used in max-len rule (Thanos Lefteris) -* 4a5ddd5 Docs: Fix rule config above examples for require-jsdoc (Thanos Lefteris) -* c5cbc1b Docs: Add rule config above each example in jsx-quotes (Thanos Lefteris) -* f0aceba Docs: Correct alphabetical ordering in rule list (Randy Coulman) -* 1651ffa Docs: update migrating to 2.0.0 (fixes #5232) (Toru Nagashima) -* 9078537 Fix: `indent` on variable declaration with separate array (fixes #5237) (Burak Yigit Kaya) -* f8868b2 Docs: Typo fix in consistent-this rule doc fixes #5240 (Nicolas Froidure) -* 44f6915 Fix: ESLint Bot mentions the wrong person for extra info (fixes #5229) (Burak Yigit Kaya) -* c612a8e Fix: `no-empty-function` crash (fixes #5227) (Toru Nagashima) -* ae663b6 Docs: Add links for issue documentation (Nicholas C. Zakas) -* 717bede Build: Switch to using eslint-release (fixes #5223) (Nicholas C. Zakas) -* 980e139 Fix: Combine all answers for processAnswers (fixes #5220) (Ian VanSchooten) -* 1f2a1d5 Docs: Remove inline errors from doc examples (fixes #4104) (Burak Yigit Kaya) - -v2.0.0 - February 12, 2016 - -* cc3a66b Docs: Issue message when more info is needed (Nicholas C. Zakas) -* 2bc40fa Docs: Simplify hierarchy of headings in rule pages (Mark Pedrotti) -* 1666254 Docs: Add note about only-whitespace rule for `--fix` (fixes #4774) (Burak Yigit Kaya) -* 2fa09d2 Docs: Add `quotes` to related section of `prefer-template` (fixes #5192) (Burak Yigit Kaya) -* 7b12995 Fix: `key-spacing` not enforcing no-space in minimum mode (fixes #5008) (Burak Yigit Kaya) -* c1c4f4d Breaking: new `no-empty-function` rule (fixes #5161) (Toru Nagashima) - -v2.0.0-rc.1 - February 9, 2016 - -* 4dad82a Update: Adding shared environment for node and browser (refs #5196) (Eli White) -* b46c893 Fix: Config file relative paths (fixes #5164, fixes #5160) (Nicholas C. Zakas) -* aa5b2ac Fix: no-whitespace-before-property fixes (fixes #5167) (Kai Cataldo) -* 4e99924 Update: Replace several dependencies with lodash (fixes #5012) (Gajus Kuizinas) -* 718dc68 Docs: Remove periods in rules' README for consistency. (alberto) -* 7a47085 Docs: Correct `arrow-spacing` overview. (alberto) -* a4cde1b Docs: Clarify global-require inside try/catch (fixes #3834) (Brandon Mills) -* fd07925 Docs: Clarify docs for api.verify (fixes #5101, fixes #5104) (Burak Yigit Kaya) -* 413247f New: Add a --print-config flag (fixes #5099) (Christopher Crouzet) -* efeef42 Update: Implement auto fix for space-in-parens (fixes #5050) (alberto) -* e07fdd4 Fix: code path analysis and labels (fixes #5171) (Toru Nagashima) -* 2417bb2 Fix: `no-unmodified-loop-condition` false positive (fixes #5166) (Toru Nagashima) -* fae1884 Fix: Allow same-line comments in padded-blocks (fixes #5055) (Brandon Mills) -* a24d8ad Fix: Improve autoconfig logging (fixes #5119) (Ian VanSchooten) -* e525923 Docs: Correct obvious inconsistencies in rules h2 elements (Mark Pedrotti) -* 9675b5e Docs: `avoid-escape` does not allow backticks (fixes #5147) (alberto) -* a03919a Fix: `no-unexpected-multiline` false positive (fixes #5148) (Feross Aboukhadijeh) -* 74360d6 Docs: Note no-empty applies to empty block statements (fixes #5105) (alberto) -* 6eeaa3f Build: Remove pending tests (fixes #5126) (Ian VanSchooten) -* 02c83df Docs: Update docs/rules/no-plusplus.md (Sheldon Griffin) -* 0c4de5c New: Added "table" formatter (fixes #4037) (Gajus Kuizinas) -* 0a59926 Update: 'implied strict mode' ecmaFeature (fixes #4832) (Nick Evans) -* 53a6eb3 Fix: Handle singular case in rule-tester error message (fixes #5141) (Bryan Smith) -* 97ac91c Build: Increment eslint-config-eslint (Nicholas C. Zakas) - -v2.0.0-rc.0 - February 2, 2016 - -* 973c499 Fix: `sort-imports` crash (fixes #5130) (Toru Nagashima) -* e64b2c2 Breaking: remove `no-empty-label` (fixes #5042) (Toru Nagashima) -* 79ebbc9 Breaking: update `eslint:recommended` (fixes #5103) (Toru Nagashima) -* e1d7368 New: `no-extra-label` rule (fixes #5059) (Toru Nagashima) -* c83b48c Fix: find ignore file only in cwd (fixes #5087) (Nicholas C. Zakas) -* 3a24240 Docs: Fix jsdoc param names to match function param names (Thanos Lefteris) -* 1d79746 Docs: Replace ecmaFeatures setting with link to config page (Thanos Lefteris) -* e96ffd2 New: `template-curly-spacing` rule (fixes #5049) (Toru Nagashima) -* 4b02902 Update: Extended no-console rule (fixes #5095) (EricHenry) -* 757651e Docs: Remove reference to rules enabled by default (fixes #5100) (Brandon Mills) -* 0d87f5d Docs: Clarify eslint-disable comments only affect rules (fixes #5005) (Brandon Mills) -* 1e791a2 New: `no-self-assign` rule (fixes #4729) (Toru Nagashima) -* c706eb9 Fix: reduced `no-loop-func` false positive (fixes #5044) (Toru Nagashima) -* 3275e86 Update: Add extra aliases to consistent-this rule (fixes #4492) (Zachary Alexander Belford) -* a227360 Docs: Replace joyent org with nodejs (Thanos Lefteris) -* b2aedfe New: Rule to enforce newline after each call in the chain (fixes #4538) (Rajendra Patil) -* d67bfdd New: `no-unused-labels` rule (fixes #5052) (Toru Nagashima) - -v2.0.0-beta.3 - January 29, 2016 - -* 86a3e3d Update: Remove blank lines at beginning of files (fixes #5045) (Jared Sohn) -* 4fea752 New: Autoconfiguration from source inspection (fixes #3567) (Ian VanSchooten) -* 519f39f Breaking: Remove deprecated rules (fixes #5032) (Gyandeep Singh) -* c75ee4a New: Add support for configs in plugins (fixes #3659) (Ilya Volodin) -* 361377f Fix: `prefer-const` false positive reading before writing (fixes #5074) (Toru Nagashima) -* ff2551d Build: Improve `npm run perf` command (fixes #5028) (Toru Nagashima) -* bcca69b Update: add int32Hint option to `no-bitwise` rule (fixes #4873) (Maga D. Zandaqo) -* e3f2683 Update: config extends dependency lookup (fixes #5023) (Nicholas C. Zakas) -* a327a06 Fix: Indent rule for allman brace style scenario (fixes #5064) (Gyandeep Singh) -* afdff6d Fix: `no-extra-bind` false positive (fixes #5058) (Toru Nagashima) -* c1fad4f Update: add autofix support for spaced-comment (fixes #4969, fixes #5030) (Maga D. Zandaqo) -* 889b942 Revert "Docs: Update readme for legend describing rules icons (refs #4355)" (Nicholas C. Zakas) -* b0f21a0 Fix: `keyword-spacing` false positive in template strings (fixes #5043) (Toru Nagashima) -* 53fa5d1 Fix: `prefer-const` false positive in a loop condition (fixes #5024) (Toru Nagashima) -* 385d399 Docs: Update readme for legend describing rules icons (Kai Cataldo) -* 505f1a6 Update: Allow parser to be relative to config (fixes #4985) (Nicholas C. Zakas) -* 79e8a0b New: `one-var-declaration-per-line` rule (fixes #1622) (alberto) -* 654e6e1 Update: Check extra Boolean calls in no-extra-boolean-cast (fixes #3650) (Andrew Sutton) - -v2.0.0-beta.2 - January 22, 2016 - -* 3fa834f Docs: Fix formatter links (fixes #5006) (Gyandeep Singh) -* 54b1bc8 Docs: Fix link in strict.md (fixes #5026) (Nick Evans) -* e0c5cf7 Upgrade: Espree to 3.0.0 (fixes #5018) (Ilya Volodin) -* 69f149d Docs: language tweaks (Andres Kalle) -* 2b33c74 Update: valid-jsdoc to not require @return in constructors (fixes #4976) (Maga D. Zandaqo) -* 6ac2e01 Docs: Fix description of exported comment (Mickael Jeanroy) -* 29392f8 New: allow-multiline option on comma-dangle (fixes #4967) (Alberto Gimeno) -* 05b8cb3 Update: Module overrides all 'strict' rule options (fixes #4936) (Nick Evans) -* 8470474 New: Add metadata to few test rules (fixes #4494) (Ilya Volodin) -* ba11c1b Docs: Add Algolia as sponsor to README (Nicholas C. Zakas) -* b28a19d Breaking: Plugins envs and config removal (fixes #4782, fixes #4952) (Nicholas C. Zakas) -* a456077 Docs: newline-after-var doesn't allow invalid options. (alberto) -* 3e6a24e Breaking: Change `strict` default mode to "safe" (fixes #4961) (alberto) -* 5b96265 Breaking: Update eslint:recommended (fixes #4953) (alberto) -* 7457a4e Upgrade: glob to 6.x (fixes #4991) (Gyandeep Singh) -* d3f4bdd Build: Cleanup for code coverage (fixes #4983) (Gyandeep Singh) -* b8fbaa0 Fix: multiple message in TAP formatter (fixes #4975) (Simon Degraeve) -* 990f8da Fix: `getNodeByRangeIndex` performance issue (fixes #4989) (Toru Nagashima) -* 8ac1dac Build: Update markdownlint dependency to 0.1.0 (fixes #4988) (David Anson) -* 5cd5429 Fix: function expression doc in call expression (fixes #4964) (Tim Schaub) -* 4173baa Fix: `no-dupe-class-members` false positive (fixes #4981) (Toru Nagashima) -* 12fe803 Breaking: Supports Unicode BOM (fixes #4878) (Toru Nagashima) -* 1fc80e9 Build: Increment eslint-config-eslint (Nicholas C. Zakas) -* e0a9024 Update: Report newline between template tag and literal (fixes #4210) (Rajendra Patil) -* da3336c Update: Rules should get `sourceType` from Program node (fixes #4960) (Nick Evans) -* a2ac359 Update: Make jsx-quotes fixable (refs #4377) (Gabriele Petronella) -* ee1014d Fix: Incorrect error location for object-curly-spacing (fixes #4957) (alberto) -* b52ed17 Fix: Incorrect error location for space-in-parens (fixes #4956) (alberto) -* 9c1bafb Fix: Columns of parse errors are off by 1 (fixes #4896) (alberto) -* 5e4841e New: 'id-blacklist' rule (fixes #3358) (Keith Cirkel) -* 700b8bc Update: Add "allow" option to allow specific operators (fixes #3308) (Rajendra Patil) -* d82eeb1 Update: Add describe around rule tester blocks (fixes #4907) (Ilya Volodin) -* 2967402 Update: Add minimum value to integer values in schema (fixes #4941) (Ilya Volodin) -* 7b632f8 Upgrade: Globals to ^8.18.0 (fixes #4728) (Gyandeep Singh) -* 86e6e57 Fix: Incorrect error at EOF for no-multiple-empty-lines (fixes #4917) (alberto) -* 7f058f3 Fix: Incorrect location for padded-blocks (fixes #4913) (alberto) -* b3de8f7 Fix: Do not show ignore messages for default ignored files (fixes #4931) (Gyandeep Singh) -* b1360da Update: Support multiLine and singleLine options (fixes #4697) (Rajendra Patil) -* 82fbe09 Docs: Small semantic issue in documentation example (fixes #4937) (Marcelo Zarate) -* 13a4e30 Docs: Formatting inconsistencies (fixes #4912) (alberto) -* d487013 Update: Option to allow extra parens for cond assign (fixes #3317) (alberto) -* 0f469b4 Fix: JSDoc for function expression on object property (fixes #4900) (Tim Schaub) -* c2dee27 Update: Add module tests to no-extra-semi (fixes #4915) (Nicholas C. Zakas) -* 5a633bf Update: Add `preferType` option to `valid-jsdoc` rule (fixes #3056) (Gyandeep Singh) -* ebd01b7 Build: Fix version number on release (fixes #4921) (Nicholas C. Zakas) -* 2d626a3 Docs: Fix typo in changelog (Nicholas C. Zakas) -* c4c4139 Fix: global-require no longer warns if require is shadowed (fixes #4812) (Kevin Partington) -* bbf7f27 New: provide config.parser via `parserName` on RuleContext (fixes #3670) (Ben Mosher) - -v2.0.0-beta.1 - January 11, 2016 - -* 6c70d84 Build: Fix prerelease script (fixes #4919) (Nicholas C. Zakas) -* d5c9435 New: 'sort-imports' rule (refs #3143) (Christian Schuller) -* a8cfd56 Fix: remove duplicate of eslint-config-eslint (fixes #4909) (Toru Nagashima) -* 19a9fbb Breaking: `space-before-blocks` ignores after keywords (fixes #1338) (Toru Nagashima) -* c275b41 Fix: no-extra-parens ExpressionStatement restricted prods (fixes #4902) (Michael Ficarra) -* b795850 Breaking: don't load ~/.eslintrc when using --config flag (fixes #4881) (alberto) -* 3906481 Build: Add AppVeyor CI (fixes #4894) (Gyandeep Singh) -* 6390862 Docs: Fix missing footnote (Yoshiya Hinosawa) -* e5e06f8 Fix: Jsdoc comment for multi-line function expressions (fixes #4889) (Gyandeep Singh) -* 7c9be60 Fix: Fix path errors in windows (fixes #4888) (Gyandeep Singh) -* a1840e7 Fix: gray text was invisible on Solarized Dark theme (fixes #4886) (Jack Leigh) -* fc9f528 Docs: Modify unnecessary flag docs in quote-props (Matija Marohnić) -* 186e8f0 Update: Ignore camelcase in object destructuring (fixes #3185) (alberto) -* 7c97201 Upgrade: doctrine version to 1.1.0 (fixes #4854) (Tim Schaub) -* ceaf324 New: Add no-new-symbol rule (fixes #4862) (alberto) -* e2f2b66 Breaking: Remove defaults from `eslint:recommended` (fixes #4809) (Ian VanSchooten) -* 0b3c01e Docs: Specify default for func-style (fixes #4834) (Ian VanSchooten) -* 008ea39 Docs: Document default for operator assignment (fixes #4835) (alberto) -* b566f56 Docs: no-new-func typo (alberto) -* 1569695 Update: Adds default 'that' for consistent-this (fixes #4833) (alberto) -* f7b28b7 Docs: clarify `requireReturn` option for valid-jsdoc rule (fixes #4859) (Tim Schaub) -* 407f329 Build: Fix prerelease script (Nicholas C. Zakas) -* 688f277 Fix: Set proper exit code for Node > 0.10 (fixes #4691) (Nicholas C. Zakas) -* 58715e9 Fix: Use single quotes in context.report messages (fixes #4845) (Joe Lencioni) -* 5b7586b Fix: do not require a @return tag for @interface (fixes #4860) (Tim Schaub) -* d43f26c Breaking: migrate from minimatch to node-ignore (fixes #2365) (Stefan Grönke) -* c07ca39 Breaking: merges keyword spacing rules (fixes #3869) (Toru Nagashima) -* 871f534 Upgrade: Optionator version to 0.8.1 (fixes #4851) (Eric Johnson) -* 82d4cd9 Update: Add atomtest env (fixes #4848) (Andres Suarez) -* 9c9beb5 Update: Add "ignore" override for operator-linebreak (fixes #4294) (Rajendra Patil) -* 9c03abc Update: Add "allowCall" option (fixes #4011) (Rajendra Patil) -* 29516f1 Docs: fix migration guide for no-arrow-condition rule (Peter Newnham) -* 2ef7549 Docs: clarify remedy to some prefer-const errors (Turadg Aleahmad) -* 1288ba4 Update: Add default limit to `complexity` (fixes #4808) (Ian VanSchooten) -* d3e8179 Fix: env is rewritten by modules (fixes #4814) (Toru Nagashima) -* fd72aba Docs: Example fix for `no-extra-parens` rule (fixes #3527) (Gyandeep Singh) -* 315f272 Fix: Change max-warnings type to Int (fixes #4660) (George Zahariev) -* 5050768 Update: Ask for `commonjs` under config init (fixes #3553) (Gyandeep Singh) -* 4665256 New: Add no-whitespace-before-property rule (fixes #1086) (Kai Cataldo) -* f500d7d Fix: allow extending @scope/eslint/file (fixes #4800) (André Cruz) -* 5ab564e New: 'ignoreArrayIndexes' option for 'no-magic-numbers' (fixes #4370) (Christian Schuller) -* 97cdb95 New: Add no-useless-constructor rule (fixes #4785) (alberto) -* b9bcbaf Fix: Bug in no-extra-bind (fixes #4806) (Andres Kalle) -* 246a6d2 Docs: Documentation fix (Andres Kalle) -* 9ea6b36 Update: Ignore case in jsdoc tags (fixes #4576) (alberto) -* acdda24 Fix: ignore argument parens in no-unexpected-multiline (fixes #4658) (alberto) -* 4931f56 Update: optionally allow bitwise operators (fixes #4742) (Swaagie) - -v2.0.0-alpha-2 - December 23, 2015 - -* Build: Add prerelease script (Nicholas C. Zakas) -* Update: Allow to omit semi for one-line blocks (fixes #4385) (alberto) -* Fix: Handle getters and setters in key-spacing (fixes #4792) (Brandon Mills) -* Fix: ObjectRestSpread throws error in key-spacing rule (fixes #4763) (Ziad El Khoury Hanna) -* Docs: Typo in generator-star (alberto) -* Fix: Backtick behavior in quotes rule (fixes #3090) (Nicholas C. Zakas) -* Fix: Empty schemas forbid any options (fixes #4789) (Brandon Mills) -* Fix: Remove `isMarkedAsUsed` function name (fixes #4783) (Gyandeep Singh) -* Fix: support arrow functions in no-return-assign (fixes #4743) (alberto) -* Docs: Add license header to Working with Rules guide (Brandon Mills) -* Fix: RuleTester to show parsing errors (fixes #4779) (Nicholas C. Zakas) -* Docs: Escape underscores in no-path-concat (alberto) -* Update: configuration for classes in space-before-blocks (fixes #4089) (alberto) -* Docs: Typo in no-useless-concat (alberto) -* Docs: fix typos, suggests (molee1905) -* Docs: Typos in space-before-keywords and space-unary-ops (fixes #4771) (alberto) -* Upgrade: beefy to ^2.0.0, fixes installation errors (fixes #4760) (Kai Cataldo) -* Docs: Typo in no-unexpected-multiline (fixes #4756) (alberto) -* Update: option to ignore top-level max statements (fixes #4309) (alberto) -* Update: Implement auto fix for semi-spacing rule (fixes #3829) (alberto) -* Fix: small typos in code examples (Plusb Preco) -* Docs: Add section on file extensions to user-guide/configuring (adam) -* Fix: Comma first issue in `indent` (fixes #4739, fixes #3456) (Gyandeep Singh) -* Fix: no-constant-condition false positive (fixes #4737) (alberto) -* Fix: Add source property for fatal errors (fixes #3325) (Gyandeep Singh) -* New: Add a comment length option to the max-len rule (fixes #4665) (Ian) -* Docs: RuleTester doesn't require any tests (fixes #4681) (alberto) -* Fix: Remove path analysis from debug log (fixes #4631) (Ilya Volodin) -* Fix: Set null to property ruleId when fatal is true (fixes #4722) (Sébastien Règne) -* New: Visual Studio compatible formatter (fixes #4708) (rhpijnacker) -* New: Add greasemonkey environment (fixes #4715) (silverwind) -* Fix: always-multiline for comma-dangle import (fixes #4704) (Nicholas C. Zakas) -* Fix: Check 1tbs non-block else (fixes #4692) (Nicholas C. Zakas) -* Fix: Apply environment configs last (fixes #3915) (Nicholas C. Zakas) -* New: `no-unmodified-loop-condition` rule (fixes #4523) (Toru Nagashima) -* Breaking: deprecate `no-arrow-condition` rule (fixes #4417) (Luke Karrys) -* Update: Add cwd option for cli-engine (fixes #4472) (Ilya Volodin) -* New: Add no-confusing-arrow rule (refs #4417) (Luke Karrys) -* Fix: ensure `ConfigOps.merge` do a deep copy (fixes #4682) (Toru Nagashima) -* Fix: `no-invalid-this` allows this in static method (fixes #4669) (Toru Nagashima) -* Fix: Export class syntax for `require-jsdoc` rule (fixes #4667) (Gyandeep Singh) -* Update: Add "safe" mode to strict (fixes #3306) (Brandon Mills) - -v2.0.0-alpha-1 - December 11, 2015 - -* Breaking: Correct links between variables and references (fixes #4615) (Toru Nagashima) -* Fix: Update rule tests for parser options (fixes #4673) (Nicholas C. Zakas) -* Breaking: Implement parserOptions (fixes #4641) (Nicholas C. Zakas) -* Fix: max-len rule overestimates the width of some tabs (fixes #4661) (Nick Evans) -* New: Add no-implicit-globals rule (fixes #4542) (Joshua Peek) -* Update: `no-use-before-define` checks invalid initializer (fixes #4280) (Toru Nagashima) -* Fix: Use oneValuePerFlag for --ignore-pattern option (fixes #4507) (George Zahariev) -* New: `array-callback-return` rule (fixes #1128) (Toru Nagashima) -* Upgrade: Handlebars to >= 4.0.5 for security reasons (fixes #4642) (Jacques Favreau) -* Update: Add class body support to `indent` rule (fixes #4372) (Gyandeep Singh) -* Breaking: Remove space-after-keyword newline check (fixes #4149) (Nicholas C. Zakas) -* Breaking: Treat package.json like the rest of configs (fixes #4451) (Ilya Volodin) -* Docs: writing mistake (molee1905) -* Update: Add 'method' option to no-empty (fixes #4605) (Kai Cataldo) -* Breaking: Remove autofix from eqeqeq (fixes #4578) (Ilya Volodin) -* Breaking: Remove ES6 global variables from builtins (fixes #4085) (Brandon Mills) -* Fix: Handle forbidden LineTerminators in no-extra-parens (fixes #4229) (Brandon Mills) -* Update: Option to ignore constructor Fns object-shorthand (fixes #4487) (Kai Cataldo) -* Fix: Check YieldExpression argument in no-extra-parens (fixes #4608) (Brandon Mills) -* Fix: Do not cache `package.json` (fixes #4611) (Spain) -* Build: Consume no-underscore-dangle allowAfterThis option (fixes #4599) (Kevin Partington) -* New: Add no-restricted-imports rule (fixes #3196) (Guy Ellis) -* Docs: no-extra-semi no longer refers to deprecated rule (fixes #4598) (Kevin Partington) -* Fix: `consistent-return` checks the last (refs #3530, fixes #3373) (Toru Nagashima) -* Update: add class option to `no-use-before-define` (fixes #3944) (Toru Nagashima) -* Breaking: Simplify rule schemas (fixes #3625) (Nicholas C. Zakas) -* Docs: Update docs/rules/no-plusplus.md (Xiangyun Chi) -* Breaking: added bower_components to default ignore (fixes #3550) (Julian Laval) -* Fix: `no-unreachable` with the code path (refs #3530, fixes #3939) (Toru Nagashima) -* Fix: `no-this-before-super` with the code path analysis (refs #3530) (Toru Nagashima) -* Fix: `no-fallthrough` with the code path analysis (refs #3530) (Toru Nagashima) -* Fix: `constructor-super` with the code path analysis (refs #3530) (Toru Nagashima) -* Breaking: Switch to Espree 3.0.0 (fixes #4334) (Nicholas C. Zakas) -* Breaking: Freeze context object (fixes #4495) (Nicholas C. Zakas) -* Docs: Add Code of Conduct (fixes #3095) (Nicholas C. Zakas) -* Breaking: Remove warnings of readonly from `no-undef` (fixes #4504) (Toru Nagashima) -* Update: allowAfterThis option in no-underscore-dangle (fixes #3435) (just-boris) -* Fix: Adding options unit tests for --ignore-pattern (refs #4507) (Kevin Partington) -* Breaking: Implement yield-star-spacing rule (fixes #4115) (Bryan Smith) -* New: `prefer-rest-params` rule (fixes #4108) (Toru Nagashima) -* Update: `prefer-const` begins to cover separating init (fixes #4474) (Toru Nagashima) -* Fix: `no-eval` come to catch indirect eval (fixes #4399, fixes #4441) (Toru Nagashima) -* Breaking: Default no-magic-numbers to none. (fixes #4193) (alberto) -* Breaking: Allow empty arrow body (fixes #4411) (alberto) -* New: Code Path Analysis (fixes #3530) (Toru Nagashima) - -v1.10.3 - December 1, 2015 - -* Docs: Update strict rule docs (fixes #4583) (Nicholas C. Zakas) -* Docs: Reference .eslintrc.* in contributing docs (fixes #4532) (Kai Cataldo) -* Fix: Add for-of to `curly` rule (fixes #4571) (Kai Cataldo) -* Fix: Ignore space before function in array start (fixes #4569) (alberto) - -v1.10.2 - November 27, 2015 - -* Upgrade: escope@3.3.0 (refs #4485) (Nicholas C. Zakas) -* Upgrade: Pinned down js-yaml to avoid breaking dep (fixes #4553) (alberto) -* Fix: lines-around-comment with multiple comments (fixes #3509) (alberto) -* Upgrade: doctrine@0.7.1 (fixes #4545) (Kevin Partington) -* Fix: Bugfix for eqeqeq autofix (fixes #4540) (Kevin Partington) -* Fix: Add for-in to `curly` rule (fixes #4436) (Kai Cataldo) -* Fix: `valid-jsdoc` unneeded require check fix (fixes #4527) (Gyandeep Singh) -* Fix: `brace-style` ASI fix for if-else condition (fixes #4520) (Gyandeep Singh) -* Build: Add branch update during release process (fixes #4491) (Gyandeep Singh) -* Build: Allow revert commits in commit messages (fixes #4452) (alberto) -* Fix: Incorrect location in no-fallthrough (fixes #4516) (alberto) -* Fix: `no-spaced-func` had been crashed (fixes #4508) (Toru Nagashima) -* Fix: Add a RestProperty test of `no-undef` (fixes #3271) (Toru Nagashima) -* Docs: Load badge from HTTPS (Brian J Brennan) -* Build: Update eslint bot messages (fixes #4497) (Nicholas C. Zakas) - -v1.10.1 - November 20, 2015 - -* Fix: Revert freezing context object (refs #4495) (Nicholas C. Zakas) -* 1.10.0 (Nicholas C. Zakas) - -v1.10.0 - November 20, 2015 - -* Docs: Remove dupes from changelog (Nicholas C. Zakas) -* Update: --init to create extensioned files (fixes #4476) (Nicholas C. Zakas) -* Docs: Update description of exported comment (fixes #3916) (Nicholas C. Zakas) -* Docs: Move legacy rules to stylistic (files #4111) (Nicholas C. Zakas) -* Docs: Clean up description of recommended rules (fixes #4365) (Nicholas C. Zakas) -* Docs: Fix home directory config description (fixes #4398) (Nicholas C. Zakas) -* Update: Add class support to `require-jsdoc` rule (fixes #4268) (Gyandeep Singh) -* Update: return type error in `valid-jsdoc` rule (fixes #4443) (Gyandeep Singh) -* Update: Display errors at the place where fix should go (fixes #4470) (nightwing) -* Docs: Fix typo in default `cacheLocation` value (Andrew Hutchings) -* Fix: Handle comments in block-spacing (fixes #4387) (alberto) -* Update: Accept array for `ignorePattern` (fixes #3982) (Jesse McCarthy) -* Update: replace label and break with IIFE and return (fixes #4459) (Ilya Panasenko) -* Fix: space-before-keywords false positive (fixes #4449) (alberto) -* Fix: Improves performance (refs #3530) (Toru Nagashima) -* Fix: Autofix quotes produces invalid javascript (fixes #4380) (nightwing) -* Docs: Update indent.md (Nathan Brown) -* New: Disable comment config option (fixes #3901) (Matthew Riley MacPherson) -* New: Config files with extensions (fixes #4045, fixes #4263) (Nicholas C. Zakas) -* Revert "Update: Add JSX exceptions to no-extra-parens (fixes #4229)" (Brandon Mills) -* Update: Add JSX exceptions to no-extra-parens (fixes #4229) (Brandon Mills) -* Docs: Replace link to deprecated rule with newer rule (Andrew Marshall) -* Fix: `no-extend-native` crashed at empty defineProperty (fixes #4438) (Toru Nagashima) -* Fix: Support empty if blocks in lines-around-comment (fixes #4339) (alberto) -* Fix: `curly` warns wrong location for `else` (fixes #4362) (Toru Nagashima) -* Fix: `id-length` properties never option (fixes #4347) (Toru Nagashima) -* Docs: missing close rbracket in example (@storkme) -* Revert "Update: Allow empty arrow body (fixes #4411)" (Nicholas C. Zakas) -* Fix: eqeqeq autofix avoids clashes with space-infix-ops (fixes #4423) (Kevin Partington) -* Docs: Document semi-spacing behaviour (fixes #4404) (alberto) -* Update: Allow empty arrow body (fixes #4411) (alberto) -* Fix: Handle comments in comma-spacing (fixes #4389) (alberto) -* Update: Refactor eslint.verify args (fixes #4395) (Nicholas C. Zakas) -* Fix: no-undef-init should ignore const (fixes #4284) (Nicholas C. Zakas) -* Fix: Add the missing "as-needed" docs to the radix rule (fixes #4364) (Michał Gołębiowski) -* Fix: Display singular/plural version of "line" in message (fixes #4359) (Marius Schulz) -* Update: Add Popular Style Guides (fixes #4320) (Jamund Ferguson) -* Fix: eslint.report can be called w/o node if loc provided (fixes #4220) (Kevin Partington) -* Update: no-implicit-coercion validate AssignmentExpression (fixes #4348) (Ilya Panasenko) - -v1.9.0 - November 6, 2015 - -* Update: Make radix accept a "as-needed" option (fixes #4048) (Michał Gołębiowski) -* Fix: Update the message to include number of lines (fixes #4342) (Brian Delahunty) -* Docs: ASI causes problem whether semicolons are used or not (Thai Pangsakulyanont) -* Fix: Fixer to not overlap ranges among fix objects (fixes #4321) (Gyandeep Singh) -* Update: Add default to `max-nested-callbacks` (fixes #4297) (alberto) -* Fix: Check comments in space-in-parens (fixes #4302) (alberto) -* Update: Add quotes to error messages to improve clarity (fixes #4313) (alberto) -* Fix: tests failing due to differences in temporary paths (fixes #4324) (alberto) -* Fix: Make tests compatible with Windows (fixes #4315) (Ian VanSchooten) -* Update: Extract glob and filesystem logic from cli-engine (fixes #4305) (Ian VanSchooten) -* Build: Clarify commit-check messages (fixes #4256) (Ian VanSchooten) -* Upgrade: Upgrade various dependencies (fixes #4303) (Gyandeep Singh) -* Build: Add node 5 to travis build (fixes #4310) (Gyandeep Singh) -* Fix: ensure using correct estraverse (fixes #3951) (Toru Nagashima) -* Docs: update docs about using gitignore (Mateusz Derks) -* Update: Detect and fix wrong linebreaks (fixes #3981) (alberto) -* New: Add no-case-declarations rule (fixes #4278) (Erik Arvidsson) - -v1.8.0 - October 30, 2015 - -* Fix: Check for node property before testing type (fixes #4298) (Ian VanSchooten) -* Docs: Specify 'double' as default for quotes (fixes #4270) (Ian VanSchooten) -* Fix: Missing errors in space-in-parens (fixes #4257, fixes #3996) (alberto) -* Docs: fixed typo (Mathieu M-Gosselin) -* Fix: `cacheLocation` handles paths in windows style. (fixes #4285) (royriojas) -* Docs: fixed typo (mpal9000) -* Update: Add support for class in `valid-jsdoc` rule (fixes #4279) (Gyandeep Singh) -* Update: cache-file accepts a directory. (fixes #4241) (royriojas) -* Update: Add `maxEOF` to no-multiple-empty-lines (fixes #4235) (Adrien Vergé) -* Update: fix option for comma-spacing (fixes #4232) (HIPP Edgar (PRESTA EXT)) -* Docs: Fix use of wrong word in configuration doc (Jérémie Astori) -* Fix: Prepare config before verifying SourceCode (fixes #4230) (Ian VanSchooten) -* Update: RuleTester come to check AST was not modified (fixes #4156) (Toru Nagashima) -* Fix: wrong count for 'no-multiple-empty-lines' on last line (fixes #4228) (alberto) -* Update: Add `allow` option to `no-shadow` rule (fixes #3035) (Gyandeep Singh) -* Doc: Correct the spelling of Alberto's surname (alberto) -* Docs: Add alberto as a committer (Gyandeep Singh) -* Build: Do not stub console in testing (fixes #1328) (Gyandeep Singh) -* Fix: Check node exists before checking type (fixes #4231) (Ian VanSchooten) -* Update: Option to exclude afterthoughts from no-plusplus (fixes #4093) (Brody McKee) -* New: Add rule no-arrow-condition (fixes #3280) (Luke Karrys) -* Update: Add linebreak style option to eol-last (fixes #4148) (alberto) -* New: arrow-body-style rule (fixes #4109) (alberto) - -v1.7.3 - October 21, 2015 - -* Fix: Support comma-first style in key-spacing (fixes #3877) (Brandon Mills) -* Fix: no-magic-numbers: variable declarations (fixes #4192) (Ilya Panasenko) -* Fix: Support ES6 shorthand in key-spacing (fixes #3678) (Brandon Mills) -* Fix: `indent` array with memberExpression (fixes #4203) (Gyandeep Singh) -* Fix: `indent` param function on sameline (fixes #4174) (Gyandeep Singh) -* Fix: no-multiple-empty-lines fails when empty line at EOF (fixes #4214) (alberto) -* Fix: `comma-dangle` false positive (fixes #4200) (Nicholas C. Zakas) -* Fix: `valid-jsdoc` prefer problem (fixes #4205) (Nicholas C. Zakas) -* Docs: Add missing single-quote (Kevin Lamping) -* Fix: correct no-multiple-empty-lines at EOF (fixes #4140) (alberto) - -v1.7.2 - October 19, 2015 - -* Fix: comma-dangle confused by parens (fixes #4195) (Nicholas C. Zakas) -* Fix: no-mixed-spaces-and-tabs (fixes #4189, fixes #4190) (alberto) -* Fix: no-extend-native disallow using Object.properties (fixes #4180) (Nathan Woltman) -* Fix: no-magic-numbers should ignore Number.parseInt (fixes #4167) (Henry Zhu) - -v1.7.1 - October 16, 2015 - -* Fix: id-match schema (fixes #4155) (Nicholas C. Zakas) -* Fix: no-magic-numbers should ignore parseInt (fixes #4167) (Nicholas C. Zakas) -* Fix: `indent` param function fix (fixes #4165, fixes #4164) (Gyandeep Singh) - -v1.7.0 - October 16, 2015 - -* Fix: array-bracket-spacing for empty array (fixes #4141) (alberto) -* Fix: `indent` arrow function check fix (fixes #4142) (Gyandeep Singh) -* Update: Support .js files for config (fixes #3102) (Gyandeep Singh) -* Fix: Make eslint-config-eslint work (fixes #4145) (Nicholas C. Zakas) -* Fix: `prefer-arrow-callback` had been wrong at arguments (fixes #4095) (Toru Nagashima) -* Docs: Update various rules docs (Nicholas C. Zakas) -* New: Create eslint-config-eslint (fixes #3525) (Nicholas C. Zakas) -* Update: RuleTester allows string errors in invalid cases (fixes #4117) (Kevin Partington) -* Docs: Reference no-unexpected-multiline in semi (fixes #4114) (alberto) -* Update: added exceptions to `lines-around-comment` rule. (fixes #2965) (Mathieu M-Gosselin) -* Update: Add `matchDescription` option to `valid-jsdoc` (fixes #2449) (Gyandeep Singh) -* Fix: check for objects or arrays in array-bracket-spacing (fixes #4083) (alberto) -* Docs: Alphabetize Rules lists (Kenneth Chung) -* Fix: message templates fail when no parameters are passed (fixes #4080) (Ilya Volodin) -* Fix: `indent` multi-line function call (fixes #4073, fixes #4075) (Gyandeep Singh) -* Docs: Improve comma-dangle documentation (Gilad Peleg) -* Fix: no-mixed-tabs-and-spaces fails with some comments (fixes #4086) (alberto) -* Fix: `semi` to check for do-while loops (fixes #4090) (Gyandeep Singh) -* Build: Fix path related failures on Windows in tests (fixes #4061) (Burak Yigit Kaya) -* Fix: `no-unused-vars` had been missing some parameters (fixes #4047) (Toru Nagashima) -* Fix: no-mixed-spaces-and-tabs with comments and templates (fixes #4077) (alberto) -* Update: Add `allow` option for `no-underscore-dangle` rule (fixes #2135) (Gyandeep Singh) -* Update: `allowArrowFunctions` option for `func-style` rule (fixes #1897) (Gyandeep Singh) -* Fix: Ignore template literals in no-mixed-tabs-and-spaces (fixes #4054) (Nicholas C. Zakas) -* Build: Enable CodeClimate (fixes #4068) (Nicholas C. Zakas) -* Fix: `no-cond-assign` had needed double parens in `for` (fixes #4023) (Toru Nagashima) -* Update: Ignore end of function in newline-after-var (fixes #3682) (alberto) -* Build: Performance perf to not ignore jshint file (refs #3765) (Gyandeep Singh) -* Fix: id-match bug incorrectly errors on `NewExpression` (fixes #4042) (Burak Yigit Kaya) -* Fix: `no-trailing-spaces` autofix to handle linebreaks (fixes #4050) (Gyandeep Singh) -* Fix: renamed no-magic-number to no-magic-numbers (fixes #4053) (Vincent Lemeunier) -* New: add "consistent" option to the "curly" rule (fixes #2390) (Benoît Zugmeyer) -* Update: Option to ignore for loops in init-declarations (fixes #3641) (alberto) -* Update: Add webextensions environment (fixes #4051) (Blake Winton) -* Fix: no-cond-assign should report assignment location (fixes #4040) (alberto) -* New: no-empty-pattern rule (fixes #3668) (alberto) -* Upgrade: Upgrade globals to 8.11.0 (fixes #3599) (Burak Yigit Kaya) -* Docs: Re-tag JSX code fences (fixes #4020) (Brandon Mills) -* New: no-magic-number rule (fixes #4027) (Vincent Lemeunier) -* Docs: Remove list of users from README (fixes #3881) (Brandon Mills) -* Fix: `no-redeclare` and `no-sahadow` for builtin globals (fixes #3971) (Toru Nagashima) -* Build: Add `.eslintignore` file for the project (fixes #3765) (Gyandeep Singh) - -v1.6.0 - October 2, 2015 - -* Fix: cache is basically not working (fixes #4008) (Richard Hansen) -* Fix: a test failure on Windows (fixes #3968) (Toru Nagashima) -* Fix: `no-invalid-this` had been missing globals in node (fixes #3961) (Toru Nagashima) -* Fix: `curly` with `multi` had false positive (fixes #3856) (Toru Nagashima) -* Build: Add load performance check inside perf function (fixes #3994) (Gyandeep Singh) -* Fix: space-before-keywords fails with super keyword (fixes #3946) (alberto) -* Fix: CLI should not fail on account of ignored files (fixes #3978) (Dominic Barnes) -* Fix: brace-style rule incorrectly flagging switch (fixes #4002) (Aparajita Fishman) -* Update: Implement auto fix for space-unary-ops rule (fixes #3976) (alberto) -* Update: Implement auto fix for computed-property-spacing (fixes #3975) (alberto) -* Update: Implement auto fix for no-multi-spaces rule (fixes #3979) (alberto) -* Fix: Report shorthand method names in complexity rule (fixes #3955) (Tijn Kersjes) -* Docs: Add note about typeof check for isNaN (fixes #3985) (Daniel Lo Nigro) -* Update: ESLint reports parsing errors with clear prefix. (fixes #3555) (Kevin Partington) -* Build: Update markdownlint dependency (fixes #3954) (David Anson) -* Update: `no-mixed-require` to have non boolean option (fixes #3922) (Gyandeep Singh) -* Fix: trailing spaces auto fix to check for line breaks (fixes #3940) (Gyandeep Singh) -* Update: Add `typeof` option to `no-undef` rule (fixes #3684) (Gyandeep Singh) -* Docs: Fix explanation and typos for accessor-pairs (alberto) -* Docs: Fix typos for camelcase (alberto) -* Docs: Fix typos for max-statements (Danny Guo) -* Update: Implement auto fix for object-curly-spacing (fixes #3857) (alberto) -* Update: Implement auto fix for array-bracket-spacing rule (fixes #3858) (alberto) -* Fix: Add schema to `global-require` rule (fixes #3923) (Gyandeep Singh) -* Update: Apply lazy loading for rules (fixes #3930) (Gyandeep Singh) -* Docs: Fix typo for arrow-spacing (Danny Guo) -* Docs: Fix typos for wrap-regex (Danny Guo) -* Docs: Fix explanation for space-before-keywords (Danny Guo) -* Docs: Fix typos for operator-linebreak (Danny Guo) -* Docs: Fix typos for callback-return (Danny Guo) -* Fix: no-trailing-spaces autofix to account for blank lines (fixes #3912) (Gyandeep Singh) -* Docs: Fix example in no-negated-condition.md (fixes #3908) (alberto) -* Update:warn message use @return when prefer.returns=return (fixes #3889) (闲耘™) -* Update: Implement auto fix for generator-star-spacing rule (fixes #3873) (alberto) -* Update: Implement auto fix for arrow-spacing rule (fixes #3860) (alberto) -* Update: Implement auto fix for block-spacing rule (fixes #3859) (alberto) -* Fix: Support allman style for switch statement (fixes #3903) (Gyandeep Singh) -* New: no-negated-condition rule (fixes #3740) (alberto) -* Docs: Fix typo in blog post template (Nicholas C. Zakas) -* Update: Add env 'nashorn' to support Java 8 Nashorn Engine (fixes #3874) (Benjamin Winterberg) -* Docs: Prepare for rule doc linting (refs #2271) (Ian VanSchooten) - -v1.5.1 - September 22, 2015 - -* Fix: valid-jsdoc fix for param with properties (fixes #3476) (Gyandeep Singh) -* Fix: valid-jsdoc error with square braces (fixes #2270) (Gyandeep Singh) -* Upgrade: `doctrine` to 0.7.0 (fixes #3891) (Gyandeep Singh) -* Fix: `space-before-keywords` had been wrong on getters (fixes #3854) (Toru Nagashima) -* Fix: `no-dupe-args` had been wrong for nested destructure (fixes #3867) (Toru Nagashima) -* Docs: io.js is the new Node.js (thefourtheye) -* Docs: Fix method signature on working-with-rules docs (fixes #3862) (alberto) -* Docs: Add related ternary links (refs #3835) (Ian VanSchooten) -* Fix: don’t ignore config if cwd is the home dir (fixes #3846) (Mathias Schreck) -* Fix: `func-style` had been warning arrows with `this` (fixes #3819) (Toru Nagashima) -* Fix: `space-before-keywords`; allow opening curly braces (fixes #3789) (Marko Raatikka) -* Build: Fix broken .gitattributes generation (fixes #3566) (Nicholas C. Zakas) -* Build: Fix formatter docs generation (fixes #3847) (Nicholas C. Zakas) - -v1.5.0 - September 18, 2015 - -* Fix: invalidate cache when config changes. (fixes #3770) (royriojas) -* Fix: function body indent issues (fixes #3614, fixes #3799) (Gyandeep Singh) -* Update: Add configuration option to `space-before-blocks` (fixes #3758) (Phil Vargas) -* Fix: space checking between tokens (fixes #2211) (Nicholas C. Zakas) -* Fix: env-specified ecmaFeatures had been wrong (fixes #3735) (Toru Nagashima) -* Docs: Change example wording from warnings to problems (fixes #3676) (Ian VanSchooten) -* Build: Generate formatter example docs (fixes #3560) (Ian VanSchooten) -* New: Add --debug flag to CLI (fixes #2692) (Nicholas C. Zakas) -* Docs: Update no-undef-init docs (fixes #3170) (Nicholas C. Zakas) -* Docs: Update no-unused-expressions docs (fixes #3685) (Nicholas C. Zakas) -* Docs: Clarify node types in no-multi-spaces (fixes #3781) (Nicholas C. Zakas) -* Docs: Update new-cap docs (fixes #3798) (Nicholas C. Zakas) -* Fix: `space-before-blocks` had conflicted `arrow-spacing` (fixes #3769) (Toru Nagashima) -* Fix: `comma-dangle` had not been checking imports/exports (fixes #3794) (Toru Nagashima) -* Fix: tests fail due to differences in temporary paths. (fixes #3778) (royriojas) -* Fix: Directory ignoring should work (fixes #3812) (Nicholas C. Zakas) -* Fix: Ensure **/node_modules works in ignore files (fixes #3788) (Nicholas C. Zakas) -* Update: Implement auto fix for `space-infix-ops` rule (fixes #3801) (Gyandeep Singh) -* Fix: `no-warning-comments` can't be set via config comment (fixes #3619) (Burak Yigit Kaya) -* Update: `key-spacing` should allow 1+ around colon (fixes #3363) (Burak Yigit Kaya) -* Fix: false alarm of semi-spacing with semi set to never (fixes #1983) (Chen Yicai) -* Fix: Ensure ./ works correctly with CLI (fixes #3792) (Nicholas C. Zakas) -* Docs: add more examples + tests for block-scoped-var (fixes #3791) (JT) -* Update: Implement auto fix for `indent` rule (fixes #3734) (Gyandeep Singh) -* Fix: `space-before-keywords` fails to handle some cases (fixes #3756) (Marko Raatikka) -* Docs: Add if-else example (fixes #3722) (Ian VanSchooten) -* Fix: jsx-quotes exception for attributes without value (fixes #3793) (Mathias Schreck) -* Docs: Fix closing code fence on cli docs (Ian VanSchooten) -* Update: Implement auto fix for `space-before-blocks` rule (fixes #3776) (Gyandeep Singh) -* Update: Implement auto fix for `space-after-keywords` rule (fixes #3773) (Gyandeep Singh) -* Fix: `semi-spacing` had conflicted with `block-spacing` (fixes #3721) (Toru Nagashima) -* Update: Implement auto fix for `space-before-keywords` rule (fixes #3771) (Gyandeep Singh) -* Update: auto fix for space-before-function-paren rule (fixes #3766) (alberto) -* Update: Implement auto fix for `no-extra-semi` rule (fixes #3745) (Gyandeep Singh) -* Update: Refactors the traversing logic (refs #3530) (Toru Nagashima) -* Update: Implement auto fix for `space-return-throw-case` (fixes #3732) (Gyandeep Singh) -* Update: Implement auto fix for `no-spaced-func` rule (fixes #3728) (Gyandeep Singh) -* Update: Implement auto fix for `eol-last` rule (fixes #3725) (Gyandeep Singh) -* Update: Implement auto fix for `no-trailing-spaces` rule (fixes #3723) (Gyandeep Singh) - -v1.4.3 - September 15, 2015 - -* Fix: Directory ignoring should work (fixes #3812) (Nicholas C. Zakas) -* Fix: jsx-quotes exception for attributes without value (fixes #3793) (Mathias Schreck) - -v1.4.2 - September 15, 2015 - -* Fix: Ensure **/node_modules works in ignore files (fixes #3788) (Nicholas C. Zakas) -* Fix: Ensure ./ works correctly with CLI (fixes #3792) (Nicholas C. Zakas) - -v1.4.1 - September 11, 2015 - -* Fix: CLIEngine default cache parameter name (fixes #3755) (Daniel G. Taylor) -* Fix: Glob pattern from .eslintignore not applied (fixes #3750) (Burak Yigit Kaya) -* Fix: Skip JSDoc from NewExpression (fixes #3744) (Nicholas C. Zakas) -* Docs: Shorten and simplify autocomment for new issues (Nicholas C. Zakas) - -v1.4.0 - September 11, 2015 - -* Docs: Add new formatters to API docs (Ian VanSchooten) -* New: Implement autofixing (fixes #3134) (Nicholas C. Zakas) -* Fix: Remove temporary `"allow-null"` (fixes #3705) (Toru Nagashima) -* Fix: `no-unused-vars` had been crashed at `/*global $foo*/` (fixes #3714) (Toru Nagashima) -* Build: check-commit now checks commit message length. (fixes #3706) (Kevin Partington) -* Fix: make getScope acquire innermost scope (fixes #3700) (voideanvalue) -* Docs: Fix spelling mistake (domharrington) -* Fix: Allow whitespace in rule message parameters. (fixes #3690) (Kevin Partington) -* Fix: Eqeqeq rule with no option does not warn on 'a == null' (fixes #3699) (fediev) -* Fix: `no-unused-expressions` with `allowShortCircuit` false positive if left has no effect (fixes #3675) (Toru Nagashima) -* Update: Add Node 4 to travis builds (fixes #3697) (Ian VanSchooten) -* Fix: Not check for punctuator if on same line as last var (fixes #3694) (Gyandeep Singh) -* Docs: Make `quotes` docs clearer (fixes #3646) (Nicholas C. Zakas) -* Build: Increase mocha timeout (fixes #3692) (Nicholas C. Zakas) -* Fix: `no-extra-bind` to flag all arrow funcs (fixes #3672) (Nicholas C. Zakas) -* Docs: Update README with release and sponsor info (Nicholas C. Zakas) -* Fix: `object-curly-spacing` had been crashing on an empty object pattern (fixes #3658) (Toru Nagashima) -* Fix: `no-extra-parens` false positive at IIFE with member accessing (fixes #3653) (Toru Nagashima) -* Fix: `comma-dangle` with `"always"`/`"always-multiline"` false positive after a rest element (fixes #3627) (Toru Nagashima) -* New: `jsx-quotes` rule (fixes #2011) (Mathias Schreck) -* Docs: Add linting for second half of rule docs (refs #2271) (Ian VanSchooten) -* Fix: `no-unused-vars` had not shown correct locations for `/*global` (fixes #3617) (Toru Nagashima) -* Fix: `space-after-keywords` not working for `catch` (fixes #3654) (Burak Yigit Kaya) -* Fix: Incorrectly warning about ignored files (fixes #3649) (Burak Yigit Kaya) -* Fix: Indent rule VariableDeclarator doesn't apply to arrow functions (fixes #3661) (Burak Yigit Kaya) -* Upgrade: Consuming handlebars@^4.0.0 (fixes #3632) (Kevin Partington) -* Docs: Fixing typos in plugin processor section. (fixes #3648) (Kevin Partington) -* Fix: Invalid env keys would cause an unhandled exception.(fixes #3265) (Ray Booysen) -* Docs: Fixing broken link in documentation (Ilya Volodin) -* Update: Check for default assignment in no-unneeded-ternary (fixes #3232) (cjihrig) -* Fix: `consistent-as-needed` mode with `keyword: true` (fixes #3636) (Alex Guerrero) -* New: Implement cache in order to only operate on changed files since previous run. (fixes #2998) (Roy Riojas) -* Update: Grouping related CLI options. (fixes #3612) (Kevin Partington) -* Update: Using @override does not require @param or @returns (fixes #3629) (Whitney Young) -* Docs: Use eslint-env in no-undef (fixes #3616) (Ian VanSchooten) -* New: `require-jsdoc` rule (fixes #1842) (Gyandeep Singh) -* New: Support glob path on command line (fixes #3402) (Burak Yigit Kaya) -* Update: Short circuit and ternary support in no-unused-expressions (fixes #2733) (David Warkentin) -* Docs: Replace to npmjs.com (Ryuichi Okumura) -* Fix: `indent` should only indent chain calls if the first call is single line (fixes #3591) (Burak Yigit Kaya) -* Fix: `quote-props` should not crash for object rest spread syntax (fixes #3595) (Joakim Carlstein) -* Update: Use `globals` module for the `commonjs` globals (fixes #3606) (Sindre Sorhus) -* New: `no-restricted-syntax` rule to forbid certain syntax (fixes #2422) (Burak Yigit Kaya) -* Fix: `no-useless-concat` false positive at numbers (fixes #3575, fixes #3589) (Toru Nagashima) -* New: Add --max-warnings flag to CLI (fixes #2769) (Kevin Partington) -* New: Add `parser` as an option (fixes #3127) (Gyandeep Singh) -* New: `space-before-keywords` rule (fixes #1631) (Marko Raatikka) -* Update: Allowing inline comments to disable eslint rules (fixes #3472) (Whitney Young) -* Docs: Including for(;;) as valid case in no-constant-condition (Kevin Partington) -* Update: Add quotes around the label in `no-redeclare` error messages (fixes #3583) (Ian VanSchooten) -* Docs: correct contributing URL (Dieter Luypaert) -* Fix: line number for duplicate object keys error (fixes #3573) (Elliot Lynde) -* New: global-require rule (fixes #2318) (Jamund Ferguson) - -v1.3.1 - August 29, 2015 - -* Fix: `indent` to not crash on empty files (fixes #3570) (Gyandeep Singh) -* Fix: Remove unused config file (fixes #2227) (Gyandeep Singh) - -v1.3.0 - August 28, 2015 - -* Build: Autogenerate release blog post (fixes #3562) (Nicholas C. Zakas) -* New: `no-useless-concat` rule (fixes #3506) (Henry Zhu) -* Update: Add `keywords` flag to `consistent-as-needed` mode in `quote-props` (fixes #3532) (Burak Yigit Kaya) -* Update: adds `numbers` option to quote-props (fixes #2914) (Jose Roberto Vidal) -* Fix: `quote-props` rule should ignore computed and shorthand properties (fixes #3557) (fixes #3544) (Burak Yigit Kaya) -* Docs: Add config comments for rule examples 'accessor-pairs' to 'no-extra-semi' (refs #2271) (Ian VanSchooten) -* Update: Return to accept `undefined` type (fixes #3382) (Gyandeep Singh) -* New: Added HTML formatter (fixes #3505) (Julian Laval) -* Fix: check space after yield keyword in space-unary-ops (fixes #2707) (Mathias Schreck) -* Docs: (curly) Fix broken code in example (Kent C. Dodds) -* Update: Quote var name in `no-unused-vars` error messages (refs #3526) (Burak Yigit Kaya) -* Update: Move methods to SourceCode (fixes #3516) (Nicholas C. Zakas) -* Fix: Don't try too hard to find fault in `no-implicit-coercion` (refs #3402) (Burak Yigit Kaya) -* Fix: Detect ternary operator in operator-linebreak rule (fixes #3274) (Burak Yigit Kaya) -* Docs: Clearer plugin rule configuration (fixes #2022) (Nicholas C. Zakas) -* Update: Add quotes around the label in `no-empty-label` error reports (fixes #3526) (Burak Yigit Kaya) -* Docs: Turn off Liquid in example (Nicholas C. Zakas) -* Docs: Mention CommonJS along with Node.js (fixes #3388) (Nicholas C. Zakas) -* Docs: Make it clear which rules are recommended (fixes #3398) (Nicholas C. Zakas) -* Docs: Add links to JSON Schema resources (fixes #3411) (Nicholas C. Zakas) -* Docs: Add more info to migration guide (fixes #3439) (Nicholas C. Zakas) -* Fix: ASI indentation issue (fixes #3514) (Burak Yigit Kaya) -* Fix: Make `no-implicit-coercion` smarter about numerical expressions (fixes #3510) (Burak Yigit Kaya) -* Fix: `prefer-template` had not been handling TemplateLiteral as literal node (fixes #3507) (Toru Nagashima) -* Update: `newline-after-var` Allow comment + blank after var (fixes #2852) (Ian VanSchooten) -* Update: Add `unnecessary` option to `quote-props` (fixes #3381) (Burak Yigit Kaya) -* Fix: `indent` shouldn't check the last line unless it is a punctuator (fixes #3498) (Burak Yigit Kaya) -* Fix: `indent` rule does not indent when doing multi-line chain calls (fixes #3279) (Burak Yigit Kaya) -* Fix: sort-vars rule fails when memo is undefined (fixes #3474) (Burak Yigit Kaya) -* Fix: `brace-style` doesn't report some closing brace errors (fixes #3486) (Burak Yigit Kaya) -* Update: separate options for block and line comments in `spaced-comment` rule (fixes #2897) (Burak Yigit Kaya) -* Fix: `indent` does not check FunctionDeclaration nodes properly (fixes #3173) (Burak Yigit Kaya) -* Update: Added "properties" option to `id-length` rule to ignore property names. (fixes #3450) (Mathieu M-Gosselin) -* Update: add new ignore pattern options to no-unused-vars (fixes #2321) (Mathias Schreck) -* New: Protractor environment (fixes #3457) (James Whitney) -* Docs: Added section to shareable config (Gregory Waxman) -* Update: Allow pre-parsed code (fixes #1025, fixes #948) (Nicholas C. Zakas) - -v1.2.1 - August 20, 2015 - -* Fix: "key-spacing" crashes eslint on object literal shorthand properties (fixes #3463) (Burak Yigit Kaya) -* Fix: ignore leading space check for `null` elements in comma-spacing (fixes #3392) (Mathias Schreck) -* Fix: `prefer-arrow-callback` false positive at recursive functions (fixes #3454) (Toru Nagashima) -* Fix: one-var rule doesn’t have default options (fixes #3449) (Burak Yigit Kaya) -* Fix: Refactor `no-duplicate-case` to be simpler and more efficient (fixes #3440) (Burak Yigit Kaya) -* Docs: Fix trailing spaces in README (Nicholas C. Zakas) -* Docs: Update gyandeeps and add byk (Nicholas C. Zakas) -* Docs: Update plugins documentation for 1.0.0 (Nicholas C. Zakas) -* Docs: `object-curly-spacing` doc is inaccurate about exceptions (Burak Yigit Kaya) -* Fix: `object-curly-spacing` shows the incorrect column for opening brace (fixes #3438) (Burak Yigit Kaya) - -v1.2.0 - August 18, 2015 - -* Update: add support for semicolon in comma-first setup in indent rule (fixes #3423) (Burak Yigit Kaya) -* Docs: better JSDoc for indent rule (Burak Yigit Kaya) -* Docs: Document the second argument of `CLIEngine.executeOnText()` (Sindre Sorhus) -* New: `no-dupe-class-members` rule (fixes #3294) (Toru Nagashima) -* Fix: exclude `AssignmentExpression` and `Property` nodes from extra indentation on first line (fixes #3391) (Burak Yigit Kaya) -* Update: Separate indent options for var, let and const (fixes #3339) (Burak Yigit Kaya) -* Fix: Add AssignmentPattern to space-infix-ops (fixes #3380) (Burak Yigit Kaya) -* Docs: Fix typo: exception label (tienslebien) -* Update: Clean up tests for CLI config support (refs #2543) (Gyandeep Singh) -* New: `block-spacing` rule (fixes #3303) (Toru Nagashima) -* Docs: Update docs for no-iterator (fixes #3405) (Nicholas C. Zakas) -* Upgrade: bump `espree` dependency to `2.2.4` (fixes #3403) (Burak Yigit Kaya) -* Fix: false positive on switch 'no duplicate case', (fixes #3408) (Cristian Carlesso) -* Fix: `valid-jsdoc` test does not recognize aliases for `@param` (fixes #3399) (Burak Yigit Kaya) -* New: enable `-c` flag to accept a shareable config (fixes #2543) (Shinnosuke Watanabe) -* Fix: Apply plugin given in CLI (fixes #3383) (Ian VanSchooten) -* New: Add commonjs environment (fixes #3377) (Nicholas C. Zakas) -* Docs: Update no-unused-var docs (Nicholas C. Zakas) -* Fix: trailing commas in object-curly-spacing for import/export (fixes #3324) (Henry Zhu) -* Update: Make `baseConfig` to behave as other config options (fixes #3371) (Gyandeep Singh) -* Docs: Add "Compatibility" section to linebreak-style (Vitor Balocco) -* New: `prefer-arrow-callback` rule (fixes #3140) (Toru Nagashima) -* Docs: Clarify what an unused var is (fixes #2342) (Nicholas C. Zakas) -* Docs: Mention double-byte character limitation in max-len (fixes #2370) (Nicholas C. Zakas) -* Fix: object curly spacing incorrectly warning for import with default and multiple named specifiers (fixes #3370) (Luke Karrys) -* Fix: Indent rule errors with array of objects (fixes #3329) (Burak Yigit Kaya) -* Update: Make it clear that `space-infix-ops` support `const` (fixes #3299) (Burak Yigit Kaya) -* New: `prefer-template` rule (fixes #3014) (Toru Nagashima) -* Docs: Clarify `no-process-env` docs (fixes #3318) (Nicholas C. Zakas) -* Docs: Fix arrow name typo (fixes #3309) (Nicholas C. Zakas) -* Update: Improve error message for `indent` rule violation (fixes #3340) (Burak Yigit Kaya) -* Fix: radix rule does not apply for Number.parseInt (ES6) (fixes #3364) (Burak Yigit Kaya) -* Fix: `key-spacing.align` doesn't pay attention to non-whitespace before key (fixes #3267) (Burak Yigit Kaya) -* Fix: arrow-parens & destructuring/default params (fixes #3353) (Jamund Ferguson) -* Update: Add support for Allman to brace-style rule, brackets on newline (fixes #3347) (Burak Yigit Kaya) -* Fix: Regression no-catch-shadow (1.1.0) (fixes #3322) (Burak Yigit Kaya) -* Docs: remove note outdated in 1.0.0 (Denis Sokolov) -* Build: automatically convert line endings in release script (fixes #2642) (Burak Yigit Kaya) -* Update: allow disabling new-cap on object methods (fixes #3172) (Burak Yigit Kaya) -* Update: Improve checkstyle format (fixes #3183) (Burak Yigit Kaya) -* Fix: Indent rule errors if an array literal starts a new statement (fixes #3328) (Burak Yigit Kaya) -* Update: Improve validation error messages (fixes #3193) (Burak Yigit Kaya) -* Docs: fix syntax error in space-before-function-paren (Fabrício Matté) -* Fix: `indent` rule to check for last line correctly (fixes #3327) (Gyandeep Singh) -* Fix: Inconsistent off-by-one errors with column numbers (fixes #3231) (Burak Yigit Kaya) -* Fix: Keyword "else" must not be followed by a newline (fixes #3226) (Burak Yigit Kaya) -* Fix: `id-length` does not work for most of the new ES6 patterns (fixes #3286) (Burak Yigit Kaya) -* Fix: Spaced Comment Exceptions Not Working (fixes #3276) (Jamund Ferguson) - -v1.1.0 - August 7, 2015 - -* Update: Added as-needed option to arrow-parens (fixes #3277) (Jamund Ferguson) -* Fix: curly-spacing missing import case (fixes #3302) (Jamund Ferguson) -* Fix: `eslint-env` in comments had not been setting `ecmaFeatures` (fixes #2134) (Toru Nagashima) -* Fix: `es6` env had been missing `spread` and `newTarget` (fixes #3281) (Toru Nagashima) -* Fix: Report no-spaced-func on last token before paren (fixes #3289) (Benjamin Woodruff) -* Fix: Check for null elements in indent rule (fixes #3272) (Gyandeep Singh) -* Docs: Use backticks for option heading (Gyandeep Singh) -* Fix: `no-invalid-this` had been missing jsdoc comment (fixes #3287) (Toru Nagashima) -* Fix: `indent` rule for multi-line objects and arrays (fixes #3236) (Gyandeep Singh) -* Update: add new `multi-or-nest` option for the `curly` rule (fixes #1806) (Ivan Nikulin) -* Fix: `no-cond-assign` had been missing simplest pattern (fixes #3249) (Toru Nagashima) -* Fix: id-length rule doesn't catch violations in arrow function parameters (fixes #3275) (Burak Yigit Kaya) -* New: Added grep-style formatter (fixes #2991) (Nobody Really) -* Update: Split out generic AST methods into utility (fixes #962) (Gyandeep Singh) -* Fix: `accessor-pairs` false positive (fixes #3262) (Toru Nagashima) -* Fix: `context.getScope()` returns correct scope in blockBindings (fixes #3254) (Toru Nagashima) -* Update: Expose `getErrorResults` as a static method on `CLIEngine` (fixes #3242) (Gyandeep Singh) -* Update: Expose `getFormatter` as a static method on `CLIEngine` (fixes #3239) (Gyandeep Singh) -* Docs: use correct encoding for id-match.md (fixes #3246) (Matthieu Larcher) -* Docs: place id-match rule at correct place in README.md (fixes #3245) (Matthieu Larcher) -* Docs: Update no-proto.md (Joe Zimmerman) -* Docs: Fix typo in object-shorthand docs (Gunnar Lium) -* Upgrade: inquirer dependency (fixes #3241) (Gyandeep Singh) -* Fix: `indent` rule for objects and nested one line blocks (fixes #3238, fixes #3237) (Gyandeep Singh) -* Docs: Fix wrong options in examples of key-spacing (keik) -* Docs: Adds missing "not" to semi.md (Marius Schulz) -* Docs: Update no-multi-spaces.md (Kenneth Powers) -* Fix: `indent` to not error on same line nodes (fixes #3228) (Gyandeep Singh) -* New: Jest environment (fixes #3212) (Darshak Parikh) - -v1.0.0 - July 31, 2015 - -* Update: merge `no-reserved-keys` into `quote-props` (fixes #1539) (Jose Roberto Vidal) -* Fix: `indent` error message (fixes #3220) (Gyandeep Singh) -* Update: Add embertest env (fixes #3205) (ismay) -* Docs: Correct documentation errors for `id-length` rule. (Jess Telford) -* Breaking: `indent` rule to have node specific options (fixes #3210) (Gyandeep Singh) -* Fix: space-after-keyword shouldn't allow newlines (fixes #3198) (Brandon Mills) -* New: Add JSON formatter (fixes #3036) (Burak Yigit Kaya) -* Breaking: Switch to RuleTester (fixes #3186) (Nicholas C. Zakas) -* Breaking: remove duplicate warnings of `no-undef` from `block-scoped-var` (fixes #3201) (Toru Nagashima) -* Fix: `init-declarations` ignores in for-in/of (fixes #3202) (Toru Nagashima) -* Fix: `quotes` with `"backtick"` ignores ModuleSpecifier and LiteralPropertyName (fixes #3181) (Toru Nagashima) -* Fix: space-in-parens in Template Strings (fixes #3182) (Ian VanSchooten) -* Fix: Check for concatenation in no-throw-literal (fixes #3099, fixes #3101) (Ian VanSchooten) -* Build: Remove `eslint-tester` from devDependencies (fixes #3189) (Gyandeep Singh) -* Fix: Use new ESLintTester (fixes #3187) (Nicholas C. Zakas) -* Update: `new-cap` supports fullnames (fixes #2584) (Toru Nagashima) -* Fix: Non object rule options merge (fixes #3179) (Gyandeep Singh) -* New: add id-match rule (fixes #2829) (Matthieu Larcher) -* Fix: Rule options merge (fixes #3175) (Gyandeep Singh) -* Fix: `spaced-comment` allows a mix of markers and exceptions (fixes #2895) (Toru Nagashima) -* Fix: `block-scoped-var` issues (fixes #2253, fixes #2747, fixes #2967) (Toru Nagashima) -* New: Add id-length rule (fixes #2784) (Burak Yigit Kaya) -* Update: New parameters for quote-props rule (fixes #1283, fixes #1658) (Tomasz Olędzki) - -v1.0.0-rc-3 - July 24, 2015 - -* Fix: Make Chai and Mocha as a dependency (fixes #3156) (Gyandeep Singh) -* Fix: traverse `ExperimentalSpread/RestProperty.argument` (fixes #3157) (Toru Nagashima) -* Fix: Check shareable config package prefix correctly (fixes #3146) (Gyandeep Singh) -* Update: move redeclaration checking for builtins (fixes #3070) (Toru Nagashima) -* Fix: `quotes` with `"backtick"` allows directive prologues (fixes #3132) (Toru Nagashima) -* Fix: `ESLintTester` path in exposed API (fixes #3149) (Gyandeep Singh) -* Docs: Remove AppVeyor badge (Gyandeep Singh) -* Fix: Check no-new-func on CallExpressions (fixes #3145) (Benjamin Woodruff) - -v1.0.0-rc-2 - July 23, 2015 - -* Docs: Mention eslint-tester in migration guide (Nicholas C. Zakas) -* Docs: Mention variables defined in a global comment (fixes #3137) (William Becker) -* Docs: add documentation about custom-formatters. (fixes #1260) (royriojas) -* Fix: Multi-line variable declarations indent (fixes #3139) (Gyandeep Singh) -* Fix: handles blocks in no-use-before-define (fixes #2960) (Jose Roberto Vidal) -* Update: `props` option of `no-param-reassign` (fixes #1600) (Toru Nagashima) -* New: Support shared configs named `@scope/eslint-config`, with shortcuts of `@scope` and `@scope/` (fixes #3123) (Jordan Harband) -* New: Add ignorePattern, ignoreComments, and ignoreUrls options to max-len (fixes #2934, fixes #2221, fixes #1661) (Benjamin Woodruff) -* Build: Increase Windows Mocha timeout (fixes #3133) (Ian VanSchooten) -* Docs: incorrect syntax in the example for rule «one-var» (Alexander Burtsev) -* Build: Check commit message format at end of tests (fixes #3058) (Ian VanSchooten) -* Update: Move eslint-tester into repo (fixes #3110) (Nicholas C. Zakas) -* Fix: Not load configs outside config with `root: true` (fixes #3109) (Gyandeep Singh) -* Docs: Add config information to README (fixes #3074) (Nicholas C. Zakas) -* Docs: Add mysticatea as committer (Nicholas C. Zakas) -* Docs: Grammar fixes in rule descriptions (refs #3038) (Greg Cochard) -* Fix: Update sort-vars to ignore Array and ObjectPattern (fixes #2954) (Harry Ho) -* Fix: block-scoped-var rule incorrectly flagging break/continue with label (fixes #3082) (Aparajita Fishman) -* Fix: spaces trigger wrong in `no-useless-call` and `prefer-spread` (fixes #3054) (Toru Nagashima) -* Fix: `arrow-spacing` allow multi-spaces and line-endings (fixes #3079) (Toru Nagashima) -* Fix: add missing loop scopes to one-var (fixes #3073) (Jose Roberto Vidal) -* New: the `no-invalid-this` rule (fixes #2815) (Toru Nagashima) -* Fix: allow empty loop body in no-extra-semi (fixes #3075) (Mathias Schreck) -* Update: Add qunit to environments (fixes #2870) (Nicholas C. Zakas) -* Fix: `space-before-blocks` to consider classes (fixes #3062) (Gyandeep Singh) -* Fix: Include phantomjs globals (fixes #3064) (Linus Unnebäck) -* Fix: no-else-return handles multiple else-if blocks (fixes #3015) (Jose Roberto Vidal) -* Fix: `no-*-assgin` rules support destructuring (fixes #3029) (Toru Nagashima) -* New: the `no-implicit-coercion` rule (fixes #1621) (Toru Nagashima) -* Fix: Make no-implied-eval match more types of strings (fixes #2898) (Benjamin Woodruff) -* Docs: Clarify that bot message is automatic (Ian VanSchooten) -* Fix: Skip rest properties in no-dupe-keys (fixes 3042) (Nicholas C. Zakas) -* Docs: New issue template (fixes #3048) (Nicholas C. Zakas) -* Fix: strict rule supports classes (fixes #2977) (Toru Nagashima) -* New: the `prefer-reflect` rule (fixes #2939) (Keith Cirkel) -* Docs: make grammar consistent in rules index (Greg Cochard) -* Docs: Fix unmatched paren in rule description (Greg Cochard) -* Docs: Small typo fix in no-useless-call documentation (Paul O’Shannessy) -* Build: readd phantomjs dependency with locked down version (fixes #3026) (Mathias Schreck) -* Docs: Add IanVS as committer (Nicholas C. Zakas) -* docs: additional computed-property-spacing documentation (fixes #2941) (Jamund Ferguson) -* Docs: Add let and const examples for newline-after-var (fixes #3020) (James Whitney) -* Build: Remove unnecessary phantomjs devDependency (fixes #3021) (Gyandeep Singh) -* Update: added shared builtins list (fixes #2972) (Jose Roberto Vidal) - -v1.0.0-rc-1 - July 15, 2015 - -* Upgrade: Espree to 2.2.0 (fixes #3011) (Nicholas C. Zakas) -* Docs: fix a typo (bartmichu) -* Fix: indent rule should recognize single line statements with ASI (fixes #3001, fixes #3000) (Mathias Schreck) -* Update: Handle CRLF line endings in spaced-comment rule - 2 (fixes #3005) (Burak Yigit Kaya) -* Fix: Indent rule error on empty block body (fixes #2999) (Gyandeep Singh) -* New: the `no-class-assign` rule (fixes #2718) (Toru Nagashima) -* New: the `no-const-assign` rule (fixes #2719) (Toru Nagashima) -* Docs: Add 1.0.0 migration guide (fixes #2994) (Nicholas C. Zakas) -* Docs: Update changelog for 0.24.1 (fixes #2976) (Nicholas C. Zakas) -* Breaking: Remove deprecated rules (fixes #1898) (Ian VanSchooten) -* Fix: multi-line + fat arrow indent (fixes #2239) (Gyandeep Singh) -* Breaking: Create eslint:recommended and add to --init (fixes #2713) (Greg Cochard) -* Fix: Indent rule (fixes #1797, fixes #1799, fixes #2248, fixes #2343, fixes #2278, fixes #1800) (Gyandeep Singh) -* New: `context.getDeclaredVariables(node)` (fixes #2801) (Toru Nagashima) -* New: the `no-useless-call` rule (fixes #1925) (Toru Nagashima) -* New: the `prefer-spread` rule (fixes #2946) (Toru Nagashima) -* Fix: `valid-jsdoc` counts `return` for arrow expressions (fixes #2952) (Toru Nagashima) -* New: Add exported comment option (fixes #1200) (Jamund Ferguson) -* Breaking: Default to --reset behavior (fixes #2100) (Brandon Mills) -* New: Add arrow-parens and arrow-spacing rule (fixes #2628) (Jxck) -* Fix: Shallow cloning issues in eslint config (fixes #2961) (Gyandeep Singh) -* Add: Warn on missing rule definition or deprecation (fixes #1549) (Ian VanSchooten) -* Update: adding some tests for no-redeclare to test named functions (fixes #2953) (Dominic Barnes) -* New: Add support for root: true in config files (fixes #2736) (Ian VanSchooten) -* Fix: workaround for leading and trailing comments in padded-block (fixes #2336 and fixes #2788) (Mathias Schreck) -* Fix: object-shorthand computed props (fixes #2937) (Jamund Ferguson) -* Fix: Remove invalid check inside `getJSDocComment` function (fixes #2938) (Gyandeep Singh) -* Docs: Clarify when not to use space-before-blocks (Ian VanSchooten) -* Update: `no-loop-func` allows block-scoped variables (fixes #2517) (Toru Nagashima) -* Docs: remove mistaken "off by default" (Jan Schär) -* Build: Add appveyor CI system (fixes #2923) (Gyandeep Singh) -* Docs: Fix typo in the shareable configs doc (Siddharth Kannan) -* Fix: max-len to report correct column number (fixes #2926) (Mathias Schreck) -* Fix: add destructuring support to comma-dangle rule (fixes #2911) (Mathias Schreck) -* Docs: clarification in no-unused-vars (Jan Schär) -* Fix: `no-redeclare` checks module scopes (fixes #2903) (Toru Nagashima) -* Docs: missing quotes in JSON (Jan Schär) -* Breaking: Switch to 1-based columns (fixes #2284) (Nicholas C. Zakas) -* Docs: array-bracket-spacing examples used space-in-brackets (Brandon Mills) -* Docs: Add spaced-line-comment deprecation notice (Brandon Mills) -* Docs: Add space-in-brackets deprecation notice (Brandon Mills) -* Fix: Include execScript in no-implied-eval rule (fixes #2873) (Frederik Braun) -* Fix: Support class syntax for line-around-comment rule (fixes #2894) (Gyandeep Singh) -* Fix: lines-around-comment was crashing in some cases due to a missing check (fixes #2892) (Mathieu M-Gosselin) -* New: Add init-declarations rule (fixes #2606) (cjihrig) -* Docs: Fix typo in array-bracket-spacing rule (zallek) -* Fix: Added missing export syntax support to the block-scoped-var rule. (fixes #2887) (Mathieu M-Gosselin) -* Build: gensite target supports rule removal (refs #1898) (Brandon Mills) -* Update: Handle CRLF line endings in spaced-comment rule (fixes #2884) (David Anson) -* Update: Attach parent in getNodeByRangeIndex (fixes #2863) (Brandon Mills) -* Docs: Fix typo (Bryan Smith) -* New: Add serviceworker environment (fixes #2557) (Gyandeep Singh) -* Fix: Yoda should ignore comparisons where both sides are constants (fixes #2867) (cjihrig) -* Update: Loosens regex rules around intentional fall through comments (Fixes #2811) (greg5green) -* Update: Add missing schema to rules (fixes #2858) (Ilya Volodin) -* New: `require-yield` rule (fixes #2822) (Toru Nagashima) -* New: add callback-return rule (fixes #994) (Jamund Ferguson) - -v0.24.1 - July 10, 2015 - -* Docs: Clarify when not to use space-before-blocks (Ian VanSchooten) -* Docs: remove mistaken "off by default" (Jan Schär) -* Docs: remove mistaken "off by default" (Jan Schär) -* Docs: Fix typo in the shareable configs doc (Siddharth Kannan) -* Docs: clarification in no-unused-vars (Jan Schär) -* Docs: missing quotes in JSON (Jan Schär) -* Fix: Revert 1-based column changes in tests for patch (refs #2284) (Nicholas C. Zakas) -* Fix: Shallow cloning issues in eslint config (fixes #2961) (Gyandeep Singh) -* Fix: object-shorthand computed props (fixes #2937) (Jamund Ferguson) -* Fix: Remove invalid check inside `getJSDocComment` function (fixes #2938) (Gyandeep Singh) -* Fix: max-len to report correct column number (fixes #2926) (Mathias Schreck) -* Fix: add destructuring support to comma-dangle rule (fixes #2911) (Mathias Schreck) -* Fix: `no-redeclare` checks module scopes (fixes #2903) (Toru Nagashima) -* Fix: Include execScript in no-implied-eval rule (fixes #2873) (Frederik Braun) -* Fix: Support class syntax for line-around-comment rule (fixes #2894) (Gyandeep Singh) -* Fix: lines-around-comment was crashing in some cases due to a missing check (fixes #2892) (Mathieu M-Gosselin) -* Fix: Added missing export syntax support to the block-scoped-var rule. (fixes #2887) (Mathieu M-Gosselin) -* Fix: Yoda should ignore comparisons where both sides are constants (fixes #2867) (cjihrig) -* Docs: array-bracket-spacing examples used space-in-brackets (Brandon Mills) -* Docs: Add spaced-line-comment deprecation notice (Brandon Mills) -* Docs: Add space-in-brackets deprecation notice (Brandon Mills) - -v0.24.0 - June 26, 2015 - -* Upgrade: eslint-tester to 0.8.1 (Nicholas C. Zakas) -* Fix: no-dupe-args sparse array crash (fixes #2848) (Chris Walker) -* Fix: space-after-keywords should ignore extra parens (fixes #2847) (Mathias Schreck) -* New: add no-unexpected-multiline rule (fixes #746) (Glen Mailer) -* Update: refactor handle-callback-err to improve performance (fixes #2841) (Mathias Schreck) -* Fix: Add --init to the CLI options (fixes #2817) (Gyandeep Singh) -* Update: Add `except-parens` option to `no-return-assign` rule (fixes #2809) (Toru Nagashima) -* Fix: handle-callback-err missing arrow functions (fixes #2823) (Jamund Ferguson) -* Fix: `no-extra-semi` in class bodies (fixes #2794) (Toru Nagashima) -* Fix: Check type to be file when looking for config files (fixes #2790) (Gyandeep Singh) -* Fix: valid-jsdoc to work for object getters (fixes #2407) (Gyandeep Singh) -* Update: Add an option as an object to `generator-star-spacing` rule (fixes #2787) (Toru Nagashima) -* Build: Update markdownlint dependency (David Anson) -* Fix: context report message to handle more scenarios (fixes #2746) (Gyandeep Singh) -* Update: Ignore JsDoc comments by default for `spaced-comment` (fixes #2766) (Gyandeep Singh) -* Fix: one-var 'never' option for mixed initialization (Fixes #2786) (Ian VanSchooten) -* Docs: Fix a minor typo in a prefer-const example (jviide) -* Fix: comma-dangle always-multiline: no comma right before the last brace (fixes #2091) (Benoît Zugmeyer) -* Fix: Allow blocked comments with markers and new-line (fixes #2777) (Gyandeep Singh) -* Docs: small fix in quote-props examples (Jose Roberto Vidal) -* Fix: object-shorthand rule should not warn for NFEs (fixes #2748) (Michael Ficarra) -* Fix: arraysInObjects for object-curly-spacing (fixes #2752) (Jamund Ferguson) -* Docs: Clarify --rule description (fixes #2773) (Nicholas C. Zakas) -* Fix: object literals in arrow function bodies (fixes #2702) (Jose Roberto Vidal) -* New: `constructor-super` rule (fixes #2720) (Toru Nagashima) -* New: `no-this-before-super` rule (fixes #2721) (Toru Nagashima) -* Fix: space-unary-ops flags expressions starting w/ keyword (fixes #2764) (Michael Ficarra) -* Update: Add block options to `lines-around-comment` rule (fixes #2667) (Gyandeep Singh) -* New: array-bracket-spacing (fixes #2226) (Jamund Ferguson) -* Fix: No-shadow rule duplicating error messages (fixes #2706) (Aliaksei Shytkin) - -v0.23.0 - June 14, 2015 - -* Build: Comment out auto publishing of release notes (refs #2640) (Ilya Volodin) -* Fix: "extends" within package.json (fixes #2754) (Gyandeep Singh) -* Upgrade: globals@8.0.0 (fixes #2759) (silverwind) -* Docs: eol-last docs fix (fixes #2755) (Gyandeep Singh) -* Docs: btmills is a reviewer (Nicholas C. Zakas) -* Build: Revert lock io.js to v2.1.0 (refs #2745) (Brandon Mills) -* New: computed-property-spacing (refs #2226) (Jamund Ferguson) -* Build: Pin Sinon version (fixes #2742) (Ilya Volodin) -* Fix: `prefer-const` treats `for-in`/`for-of` with the same way (Fixes #2739) (Toru Nagashima) -* Docs: Add links to team members profile (Gyandeep Singh) -* Docs: add team and ES7 info to readme (Nicholas C. Zakas) -* Fix: don't try to strip "line:" prefix from parser errors with no such prefix (fixes #2698) (Tim Cuthbertson) -* Fix: never ignore config comment options (fixes #2725) (Brandon Mills) -* Update: Add clarification to spaced-comment (refs #2588) (Greg Cochard) -* Update: Add markers to spaced-comment (fixes #2588) (Greg Cochard) -* Fix: no-trailing-spaces now handles skipBlankLines (fixes #2575) (Greg Cochard) -* Docs: Mark global-strict on by default (fixes #2629) (Ilya Volodin) -* New: Allow extends to be an array (fixes #2699) (Justin Morris) -* New: globals@7.1.0 (fixes #2682) (silverwind) -* New: `prefer-const` rule (fixes #2333) (Toru Nagashima) -* Fix: remove hard-coded list of unary keywords in space-unary-ops rule (fixes #2696) (Tim Cuthbertson) -* Breaking: Automatically validate rule options (fixes #2595) (Brandon Mills) -* Update: no-lone-blocks does not report block-level scopes (fixes #2119) (Jose Roberto Vidal) -* Update: yoda onlyEquality option (fixes #2638) (Denis Sokolov) -* Docs: update comment to align with source code it's referencing (Michael Ficarra) -* Fix: Misconfigured default option for lines-around-comment rule (fixes #2677) (Gyandeep Singh) -* Fix: `no-shadow` allows shadowing in the TDZ (fixes #2568) (Toru Nagashima) -* New: spaced-comment rule (fixes #1088) (Gyandeep Singh) -* Fix: Check unused vars in exported functions (fixes #2678) (Gyandeep Singh) -* Build: Stringify payload of release notes (fixes #2640) (Greg Cochard) -* Fix: Allowing u flag in regex to properly lint no-empty-character-class (fixes #2679) (Dominic Barnes) -* Docs: deprecate no-wrap-func (fixes #2644) (Jose Roberto Vidal) -* Docs: Fixing grammar: then -> than (E) -* Fix: trailing commas in object-curly-spacing (fixes #2647) (Jamund Ferguson) -* Docs: be consistent about deprecation status (Matthew Dapena-Tretter) -* Docs: Fix mistakes in object-curly-spacing docs (Matthew Dapena-Tretter) -* New: run processors when calling executeOnText (fixes #2331) (Mordy Tikotzky) -* Update: move executeOnText() tests to the correct describe block (fixes #2648) (Mordy Tikotzky) -* Update: add tests to assert that the preprocessor is running (fixes #2651) (Mordy Tikotzky) -* Build: Lock io.js to v2.1.0 (fixes #2653) (Ilya Volodin) - -v0.22.1 - May 30, 2015 - -* Build: Remove release notes auto-publish (refs #2640) (Ilya Volodin) - -v0.22.0 - May 30, 2015 - -* Upgrade: escope 3.1.0 (fixes #2310, #2405) (Toru Nagashima) -* Fix: “consistent-this” incorrectly flagging destructuring of `this` (fixes #2633) (David Aurelio) -* Upgrade: eslint-tester to 0.7.0 (Ilya Volodin) -* Update: allow shadowed references in no-alert (fixes #1105) (Mathias Schreck) -* Fix: no-multiple-empty-lines and template strings (fixes #2605) (Jamund Ferguson) -* New: object-curly-spacing (fixes #2225) (Jamund Ferguson) -* Docs: minor fix for one-var rule (Jamund Ferguson) -* Fix: Shared config being clobbered by other config (fixes #2592) (Dominic Barnes) -* Update: adds "functions" option to no-extra-parens (fixes #2477) (Jose Roberto Vidal) -* Docs: Fix json formatting for lines-around-comments rule (Gyandeep Singh) -* Fix: Improve around function/class names of `no-shadow` (fixes #2556, #2552) (Toru Nagashima) -* Fix: Improve code coverage (fixes #2590) (Ilya Volodin) -* Fix: Allow scoped configs to have sub-configs (fixes #2594) (Greg Cochard) -* Build: Add auto-update of release tag on github (fixes #2566) (Greg Cochard) -* New: lines-around-comment (fixes #1344) (Jamund Ferguson) -* Build: Unblock build by increasing code coverage (Ilya Volodin) -* New: accessor-pairs rule to object initializations (fixes #1638) (Gyandeep Singh) -* Fix: counting of variables statements in one-var (fixes #2570) (Mathias Schreck) -* Build: Add sudo:false for Travis (fixes #2582) (Ilya Volodin) -* New: Add rule schemas (refs #2179) (Brandon Mills) -* Docs: Fix typo in shareable-configs example (fixes #2571) (Ted Piotrowski) -* Build: Relax markdownlint rules by disabling style-only items (David Anson) -* Fix: Object shorthand rule incorrectly flagging getters/setters (fixes #2563) (Brad Dougherty) -* New: Add config validator (refs #2179) (Brandon Mills) -* New: Add worker environment (fixes #2442) (Ilya Volodin) -* New no-empty-character class (fixes #2508) (Jamund Ferguson) -* New: Adds --ignore-pattern option. (fixes #1742) (Patrick McElhaney) - -v0.21.2 - May 18, 2015 - -* 0.21.2 (Nicholas C. Zakas) -* Fix: one-var exception for ForStatement.init (fixes #2505) (Brandon Mills) -* Fix: Don't throw spurious shadow errors for classes (fixes #2545) (Jimmy Jia) -* Fix: valid-jsdoc rule to support exported functions (fixes #2522) (Gyandeep Singh) -* Fix: Allow scoped packages in configuration extends (fixes #2544) (Eric Isakson) -* Docs: Add chatroom to FAQ (Nicholas C. Zakas) -* Docs: Move Gitter badge (Nicholas C. Zakas) - -v0.21.1 - May 15, 2015 - -* 0.21.1 (Nicholas C. Zakas) -* Fix: loc obj in report fn expects column (fixes #2481) (Varun Verma) -* Build: Make sure that all md files end with empty line (fixes #2520) (Ilya Volodin) -* Added Gitter badge (The Gitter Badger) -* Fix: forced no-shadow to check all scopes (fixes #2294) (Jose Roberto Vidal) -* Fix: --init indent setting (fixes #2493) (Nicholas C. Zakas) -* Docs: Mention bundling multiple shareable configs (Nicholas C. Zakas) -* Fix: Not to override the required extended config object directly (fixes #2487) (Gyandeep Singh) -* Build: Update markdownlint dependency (David Anson) -* Docs: added recursive function example to no-unused-vars (Jose Roberto Vidal) -* Docs: Fix typo (then -> than) (Vladimir Agafonkin) -* Revert "Fix: sanitise Jekyll interpolation during site generation (fixes #2297)" (Nicholas C. Zakas) -* Fix: dot-location should use correct dot token (fixes #2504) (Mathias Schreck) -* Fix: Stop linebreak-style from crashing (fixes #2490) (James Whitney) -* Fix: rule no-duplicate-case problem with CallExpressions. (fixes #2499) (Matthias Osswald) -* Fix: Enable full support for eslint-env comments (refs #2134) (Ilya Volodin) -* Build: Speed up site generation (fixes #2475) (Ilya Volodin) -* Docs: Fixing trailing spaces (Fixes #2478) (Ilya Volodin) -* Docs: Update README FAQs (Nicholas C. Zakas) -* Fix: Allow comment before comma for comma-spacing rule (fixes #2408) (Gyandeep Singh) - -v0.21.0 - May 9, 2015 - -* 0.21.0 (Nicholas C. Zakas) -* New: Shareable configs (fixes #2415) (Nicholas C. Zakas) -* Fix: Edge cases for no-wrap-func (fixes #2466) (Nicholas C. Zakas) -* Docs: Update ecmaFeatures description (Nicholas C. Zakas) -* New: Add dot-location rule. (fixes #1884) (Greg Cochard) -* New: Add addPlugin method to CLI-engine (Fixes #1971) (Ilya Volodin) -* Breaking: Do not check unset declaration types (Fixes #2448) (Ilya Volodin) -* Fix: no-redeclare switch scoping (fixes #2337) (Nicholas C. Zakas) -* Fix: Check extra scope in no-use-before-define (fixes #2372) (Nicholas C. Zakas) -* Fix: Ensure baseConfig isn't changed (fixes #2380) (Nicholas C. Zakas) -* Fix: Don't warn for member expression functions (fixes #2402) (Nicholas C. Zakas) -* New: Adds skipBlankLines option to the no-trailing-spaces rule (fixes #2303) (Andrew Vaughan) -* Fix: Adding exception for last line (Refs #2423) (Greg Cochard) -* Fix: crash on 0 max (fixes #2423) (gcochard) -* Fix object-shorthand arrow functions (fixes #2414) (Jamund Ferguson) -* Fix: Improves detection of self-referential functions (fixes #2363) (Jose Roberto Vidal) -* Update: key-spacing groups must be consecutive lines (fixes #1728) (Brandon Mills) -* Docs: grammar fix in no-sync (Tony Lukasavage) -* Docs: Update configuring.md to fix incorrect link. (Ans) -* New: Check --stdin-filename by ignore settings (fixes #2432) (Aliaksei Shytkin) -* Fix: `no-loop-func` rule allows functions at init part (fixes #2427) (Toru Nagashima) -* New: Add init command (fixes #2302) (Ilya Volodin) -* Fix: no-irregular-whitespace should work with irregular line breaks (fixes #2316) (Mathias Schreck) -* Fix: generator-star-spacing with class methods (fixes #2351) (Brandon Mills) -* New: no-unneeded-ternary rule to disallow boolean literals in conditional expressions (fixes #2391) (Gyandeep Singh) -* Docs: Add `restParams` to `ecmaFeatures` options list (refs: #2346) (Bogdan Savluk) -* Fix: space-in-brackets Cannot read property 'range' (fixes #2392) (Gyandeep Singh) -* Docs: Sort the rules (Lukas Böcker) -* Add: Exception option for `no-extend-native` and `no-native-reassign` (fixes #2355) (Gyandeep Singh) -* Fix: space-in-brackets import declaration (fixes #2378) (Gyandeep Singh) -* Update: Add uninitialized and initialized options (fixes #2206) (Ian VanSchooten) -* Fix: brace-style to not warn about curly mix ifStatements (fixes #1739) (Gyandeep Singh) -* Fix: npm run profile script should use espree (fixes #2150) (Mathias Schreck) -* New: Add support for extending configurations (fixes #1637) (Espen Hovlandsdal) -* Fix: Include string literal keys in object-shorthand (Fixes #2374) (Jamund Ferguson) -* Docs: Specify language for all code fences, enable corresponding markdownlint rule. (David Anson) -* New: linebreak-style rule (fixes #1255) (Erik Müller) -* Update: Add "none" option to operator-linebreak rule (fixes #2295) (Casey Visco) -* Fix: sanitise Jekyll interpolation during site generation (fixes #2297) (Michael Ficarra) - -v0.20.0 - April 24, 2015 - -* 0.20.0 (Nicholas C. Zakas) -* Fix: support arrow functions in no-extra-parens (fixes #2367) (Michael Ficarra) -* Fix: Column position in space-infix-ops rule (fixes #2354) (Gyandeep Singh) -* Fix: allow plugins to be namespaced (fixes #2360) (Seth Pollack) -* Update: one-var: enable let & const (fixes #2301) (Joey Baker) -* Docs: Add meteor to avaiable environments list (bartmichu) -* Update: Use `Object.assign()` polyfill for all object merging (fixes #2348) (Sindre Sorhus) -* Docs: Update markdownlint dependency, resolve/suppress new issues. (David Anson) -* Fix: newline-after-var declare and export (fixes #2325) (Gyandeep Singh) -* Docs: Some typos and grammar. (AlexKVal) -* Fix: newline-after-var to ignore declare in for specifiers (fixes #2317) (Gyandeep Singh) -* New: add --stdin-filename option (fixes #1950) (Mordy Tikotzky) -* Fix: Load .eslintrc in $HOME only if no other .eslintrc is found (fixes #2279) (Jasper Woudenberg) -* Fix: Add `v8` module to no-mixed-requires rule (fixes #2320) (Gyandeep Singh) -* Fix: key-spacing with single properties (fixes #2311) (Brandon Mills) -* Docs: `no-invalid-regexp`: add `ecmaFeatures` flags for `u`/`y` (Jordan Harband) -* New: object-shorthand rule (refs: #1617) (Jamund Ferguson) -* Update: backticks support for quotes rule (fixes #2153) (borislavjivkov) -* Fix: space-in-brackets to work with modules (fixes #2216) (Nicholas C. Zakas) - -v0.19.0 - April 11, 2015 - -* 0.19.0 (Nicholas C. Zakas) -* Upgrade: Espree to 2.0.1 (Nicholas C. Zakas) -* Docs: Update one-var documentation (fixes #2210) (Nicholas C. Zakas) -* Update: Add test for no-undef (fixes #2214) (Nicholas C. Zakas) -* Fix: Report better location for padded-blocks error (fixes #2224) (Nicholas C. Zakas) -* Fix: Don't check concise methods in quote-props (fixes #2251) (Nicholas C. Zakas) -* Fix: Consider tabs for space-in-parens rule (fixes #2191) (Josh Quintana) -* Fix: block-scoped-var to work with classes (fixes #2280) (Nicholas C. Zakas) -* Docs: Remove trailing spaces, enable corresponding markdownlint rule. (David Anson) -* Fix: padded-blocks with ASI (fixes #2273) (Brandon Mills) -* Fix: Handle comment lines in newline-after-var (fixed #2237) (Casey Visco) -* Docs: Standardize on '*' for unordered lists, enable corresponding markdownlint rule. (David Anson) -* Fix: no-undef and no-underscore-dangle to use double quotes (fixes #2258) (Gyandeep Singh) -* Docs: Improve grammar and style in comma-dangle.md (Nate Eagleson) -* Docs: Improve grammar and style in padded-blocks.md (Nate Eagleson) -* Docs: Update URL in no-wrap-func.md to resolve 404 (Nate Eagleson) -* Docs: Fix typo in command-line-interface.md (Nate Eagleson) -* Docs: Fix typo in working-with-rules.md (Nate Eagleson) -* Docs: Remove hard tabs from *.md, enable corresponding markdownlint rule. (David Anson) -* Fix: Function id missing in parent scope when using ecmaFeature `modules` for rule block-scoped-var (fixes #2242) (Michael Ferris) -* Fix: Ignore single lines for vertical alignment (fixes #2018) (Ian VanSchooten) -* Fix: Allow inline comments in newline-after-var rule (fixes #2229) (Casey Visco) -* Upgrade: Espree 2.0.0 and escope 3.0.0 (fixes #2234, fixes #2201, fixes (Nicholas C. Zakas) -* Docs: Update --no-ignore warning (Brandon Mills) -* Build: Remove jshint files (fixes #2222) (Jeff Tan) -* Docs: no-empty fix comment change (refs #2188) (Gyandeep Singh) -* Fix: duplicate semi and no-extra-semi errors (fixes #2207) (Brandon Mills) -* Docs: Update processors description (Nicholas C. Zakas) -* Fix: semi error on export declaration (fixes #2194) (Brandon Mills) -* New: operator-linebreak rule (fixes #1405) (Benoît Zugmeyer) -* Docs: Fixing broken links in documentation (Ilya Volodin) -* Upgrade: Espree to 0.12.3 (fixes #2195) (Gyandeep Singh) -* Fix: camelcase rule with {properties: never} shouldn't check assignment (fixes #2189) (Gyandeep Singh) -* New: Allow modifying base config (fixes #2143) (Meo) -* New: no-continue rule (fixes #1945) (borislavjivkov) -* Fix: `no-empty` rule should allow any comments (fixes #2188) (Gyandeep Singh) -* Docs: Fix spell in camelcase doc (fixes #2190) (Gyandeep Singh) -* Fix: Require semicolon after import/export statements (fixes #2174) (Gyandeep Singh) -* Build: Add linting of Markdown files to "npm test" script (fixes #2182) (David Anson) -* Build: Fixing site generation (Ilya Volodin) -* Build: Fix gensite task to work even if files are missing (Nicholas C. Zakas) - -v0.18.0 - March 28, 2015 - -* 0.18.0 (Nicholas C. Zakas) -* Fix: Mark variables as used in module scope (fixes #2137) (Nicholas C. Zakas) -* Fix: arrow functions need wrapping (fixes #2113) (Nicholas C. Zakas) -* Fix: Don't crash on empty array pattern item (fixes #2111) (Nicholas C. Zakas) -* Fix: Don't error on destructured params (fixes #2051) (Nicholas C. Zakas) -* Docs: Fixing broken links (Ilya Volodin) -* Fix: no-constant-condition should not flag += (fixes #2155) (Nicholas C. Zakas) -* Fix: Ensure piped in code will trigger correct errors (fixes #2154) (Nicholas C. Zakas) -* Fix: block-scoped-var to handle imports (fixes #2087) (Nicholas C. Zakas) -* Fix: no-dupe-args to work with destructuring (fixes #2148) (Nicholas C. Zakas) -* Fix: key-spacing crash on computed properties (fixes #2120) (Brandon Mills) -* Fix: indent crash on caseless switch (fixes #2144) (Brandon Mills) -* Fix: Don't warn about destructured catch params (fixes #2125) (Nicholas C. Zakas) -* Update: Omit setter param from no-unused-vars (fixes #2133) (Nicholas C. Zakas) -* Docs: Cleaning dead links (Ilya Volodin) -* Docs: Moving documentation out of the repository and modifying build scripts (Ilya Volodin) -* Docs: Update link to Documentation (Kate Lizogubova) -* Docs: Adding back deprecated space-unary-word-ops documentation (Ilya Volodin) -* Fix: Unused recursive functions should be flagged (issue2095) (Nicholas C. Zakas) -* Breaking: Remove JSX support from no-undef (fixes #2093) (Nicholas C. Zakas) -* Fix: markVariableAsUsed() should work in Node.js env (fixes #2089) (Nicholas C. Zakas) -* New: Add "always" and "never" options to "one-var" rule. (fixes #1619) (Danny Fritz) -* New: newline-after-var rule (fixes #2057) (Gopal Venkatesan) -* Fix: func-names with ES6 classes (fixes #2103) (Marsup) -* Fix: Add "Error" to the "new-cap" rule exceptions (fixes #2098) (Mickaël Tricot) -* Fix: vars-on-top conflict with ES6 import (fixes #2099) (Gyandeep Singh) -* Docs: Fixed JSON syntax (Sajin) -* New: space-before-function-paren rule (fixes #2028) (Brandon Mills) -* Breaking: rule no-empty also checking for empty catch blocks. (fixes #1841) (Dieter Oberkofler) -* Update: rule camelcase to allow snake_case in object literals. (fixes #1919) (Dieter Oberkofler) -* New: Added option int32Hint for space-infix-ops (fixes #1295) (Kirill Efimov) -* New: no-param-reassign rule (fixes #1599) (Nat Burns) - -v0.17.1 - March 17, 2015 - -* 0.17.1 (Nicholas C. Zakas) -* Fix: no-func-assign should not fail on import declarations (fixes #2060) (Igor Zalutsky) -* Fix: block-scoped-var to work with destructuring (fixes #2059) (Nicholas C. Zakas) -* Fix: no-redeclare should check Node.js scope (fixes #2064) (Nicholas C. Zakas) -* Fix: space-before-function-parentheses generator methods (fixes #2082) (Brandon Mills) -* Fix: Method name resolution in complexity rule (fixes #2049) (Nicholas C. Zakas) -* Fix: no-unused-vars crash from escope workaround (fixes #2042) (Brandon Mills) -* Fix: restrict dot-notation keywords to actual ES3 keywords (fixes #2075) (Michael Ficarra) -* Fix: block-scoped-var to work with classes (fixes #2048) (Nicholas C. Zakas) -* Docs: Update no-new documentation (fixes #2044) (Nicholas C. Zakas) -* Fix: yoda range exceptions with this (fixes #2063) (Brandon Mills) -* Docs: Fix documentation on configuring eslint with comments (Miguel Ping) -* Fix: rule no-duplicate-case problem with MemberExpressions. (fixes #2038) (Dieter Oberkofler) -* Fix: Exempt \0 from no-octal-escape (fixes #1923) (Michael Ficarra) - -v0.17.0 - March 14, 2015 - -* 0.17.0 (Nicholas C. Zakas) -* Fix: module import specifiers should be defined (refs #1978) (Nicholas C. Zakas) -* Fix: Ignore super in no-undef (refs #1968) (Nicholas C. Zakas) -* Upgrade: Espree to v0.12.0 (refs #1968) (Nicholas C. Zakas) -* Fix: destructured arguments should work in block-scoped-var (fixes #1996) (Nicholas C. Zakas) -* Fix: Line breaking with just carriage return (fixes #2005) (Nicholas C. Zakas) -* Fix: location of new-cap error messages (fixes #2025) (Mathias Schreck) -* Breaking: Stop checking JSX variable use, expose API instead (fixes #1911) (Glen Mailer) -* Fix: Check spacing of class methods (fixes #1989) (Nicholas C. Zakas) -* New: no-duplicate-case rule to disallow a duplicate case label (fixes #2015) (Dieter Oberkofler) -* Clarify issue requirement for doc pull requests (Ian) -* Add quotes around object key (Ian) -* Fix: Add comma-dangle allow-multiline (fixes #1984) (Keith Cirkel) -* Fix: Don't explode on default export function (fixes #1985) (Nicholas C. Zakas) -* Update: Add AST node exceptions to comma-style. (fixes #1932) (Evan Simmons) -* Docs: Add spread operator to available language options (Nicholas C. Zakas) -* New: generator-star-spacing rule (fixes #1680, fixes #1949) (Brandon Mills) - -v0.16.2 - March 10, 2015 - -* 0.16.2 (Nicholas C. Zakas) -* Fix: Ensure globalReturn isn't on when node:false (fixes #1995) (Nicholas C. Zakas) -* Downgrade: escope pegged to 2.0.6 (refs #2001) (Nicholas C. Zakas) -* Upgrade: escope to 2.0.7 (fixes #1978) (Nicholas C. Zakas) -* Docs: Update descriptive text for --no-ignore option. (David Anson) -* Upgrade: estraverse to latest for ESTree support (fixes #1986) (Nicholas C. Zakas) -* Fix: Global block-scope-var check should work (fixes #1980) (Nicholas C. Zakas) -* Fix: Don't warn about parens around yield (fixes #1981) (Nicholas C. Zakas) - -v0.16.1 - March 8, 2015 - -* 0.16.1 (Nicholas C. Zakas) -* Fix: Node.js scoping in block-scoped-var (fixes #1969) (Nicholas C. Zakas) -* Update: Enable ES6 scoping for more options (Nicholas C. Zakas) -* Fix: Ensure all export nodes are traversable (fixes #1965) (Nicholas C. Zakas) -* Fix: Ensure class names are marked as used (fixes #1967) (Nicholas C. Zakas) -* Fix: remove typo that caused a crash (fixes #1963) (Fabricio C Zuardi) -* Docs: Added missing "are" (Sean Wilkinson) - -v0.16.0 - March 7, 2015 - -* 0.16.0 (Nicholas C. Zakas) -* Fix: Pass correct sourceType to escope (fixes #1959) (Nicholas C. Zakas) -* Fix: Scoping for Node.js (fixes #892) (Nicholas C. Zakas) -* Fix: strict rule should honor module code (fixes #1956) (Nicholas C. Zakas) -* New: Add es6 environment (fixes #1864, fixes #1944) (Nicholas C. Zakas) -* Docs: Update ecmaFeatures list (fixes #1942) (Nicholas C. Zakas) -* Fix: Make no-unused-vars ignore exports (fixes #1903) (Nicholas C. Zakas) -* Upgrade: Espree to v1.11.0 (Nicholas C. Zakas) -* Fix: Comment configuration of rule doesn't work (fixes #1792) (Jary) -* Fix: Rest args should work in no-undef and block-scoped-var (fixes #1543) (Nicholas C. Zakas) -* Breaking: change no-comma-dangle to comma-dangle (fixes #1350) (Mathias Schreck) -* Update: space-before-function-parentheses to support generators (fixes #1929) (Brandon Mills) -* New: Adding support for "// eslint-disable-line rule" style comments (Billy Matthews) -* Fix: Use unversioned sinon file in browser test (fixes #1947) (Nicholas C. Zakas) -* Docs: Add mention of compatible parsers (Nicholas C. Zakas) -* Fix: Better error when given null as rule config (fixes #1760) (Glen Mailer) -* Update: no-empty to check TryStatement.handler (fixes #1930) (Brandon Mills) -* Fix: space-before-function-parentheses and object methods (fixes #1920) (Brandon Mills) -* New: no-dupe-args rule (fixes #1880) (Jamund Ferguson) -* Fix: comma-spacing should ignore JSX text (fixes #1916) (Brandon Mills) -* Breaking: made eol-last less strict (fixes #1460) (Glen Mailer) -* New: generator-star middle option (fixes #1808) (Jamund Ferguson) -* Upgrade: Espree to 1.10.0 for classes support (Nicholas C. Zakas) -* Docs: no-plusplus.md - auto semicolon insertion (Miroslav Obradović) -* Docs: Use union types in TokenStore JSDoc (refs #1878) (Brandon Mills) -* Fix: block-scoped-var to work with destructuring (fixes #1863) (Nicholas C. Zakas) -* Docs: Update docs for token-related methods (fixes #1878) (Nicholas C. Zakas) -* Update: Remove preferGlobal from package.json (fixes #1877) (Nicholas C. Zakas) -* Fix: allow block bindings in no-inner-declarations (fixes #1893) (Roberto Vidal) -* Fix: getScope and no-use-before-define for arrow functions (fixes #1895) (Brandon Mills) -* Fix: Make no-inner-declarations look for arrow functions (fixes #1892) (Brandon Mills) -* Breaking: Change no-space-before-semi to semi-spacing and add "after" option (fixes #1671) (Mathias Schreck) -* Update: Add support for custom preprocessors (fixes #1817) (Ilya Volodin) - -v0.15.1 - February 26, 2015 - -* 0.15.1 (Nicholas C. Zakas) -* Build: Fix release task (Nicholas C. Zakas) -* Fix: check all semicolons in no-space-before-semi (fixes #1885) (Mathias Schreck) -* Fix: Refactor comma-spacing (fixes #1587, fixes #1845) (Roberto Vidal) -* Fix: Allow globalReturn in consistent-return (fixes #1868) (Brandon Mills) -* Fix: semi rule should check throw statements (fixes #1873) (Mathias Schreck) -* Docs: Added HolidayCheck AG as user (0xPIT) -* Upgrade: `chalk` to 1.0.0 (Sindre Sorhus) -* Docs: Add CustomInk to the list of companies (Derek Lindahl) -* Docs: Alphabetize project & company usage list (Derek Lindahl) -* Docs: fix typo (Henry Zhu) -* Docs: Fix typo (Brenard Cubacub) - -v0.15.0 - February 21, 2015 - -* 0.15.0 (Nicholas C. Zakas) -* Upgrade: Espree to 1.9.1 (fixes #1816, fixes #1805) (Nicholas C. Zakas) -* Fix: make rules work with for-of statements (fixes #1859) (Mathias Schreck) -* Fix: Enable globalReturn for Node.js environment (fixes #1158) (Nicholas C. Zakas) -* Fix: Location of extra paren message (fixes #1814) (Nicholas C. Zakas) -* Fix: Remove unnecessary file exists check (fixes #1831) (Nicholas C. Zakas) -* Fix: Don't count else-if in max-depth (fixes #1835) (Nicholas C. Zakas) -* Fix: Don't flag for-of statement (fixes #1852) (Nicholas C. Zakas) -* Build: Test using io.js as well (Nicholas C. Zakas) -* Change customformat value to path (suisho) -* Docs: Add a missing word in the Contributing doc (Ben Linskey) -* Docs: Fix typo in wrap-iife rule doc title (Ben Linskey) -* Docs: Update pages to fix rendering of lists (David Anson) -* Fix: new-cap should allow defining exceptions (fixes #1424) (Brian Di Palma) -* Update: Add requireReturnDescription for valid-jsdoc (fixes #1833) (Brian Di Palma) -* New: rule no-throw-literal added (fixes #1791) (Dieter Oberkofler) -* New: multi-line option for the curly rule (fixes #1812) (Hugo Wood) -* Docs: fix typo in configuring docs (mendenhallmagic) -* Update: Backslashes in path (fixes #1818) (Jan Schär) -* Docs: Update pages to fix rendering of lists and fenced code blocks (David Anson) -* Docs: add webpack loader to the docs/integrations page (Maxime Thirouin) -* Breaking: space-before-function-parentheses replaces space-after-function-name and checkFunctionKeyword (fixes #1618) (Mathias Schreck) - -v0.14.1 - February 8, 2015 - -* 0.14.1 (Nicholas C. Zakas) -* Fix: Exit code should be 1 for any number of errors (fixes #1795) (Nicholas C. Zakas) -* Fix: Check indentation of first line (fixes #1796) (Nicholas C. Zakas) -* Fix: strict rules shouldn't throw on arrow functions (fixes #1789) (Nicholas C. Zakas) - -v0.14.0 - February 7, 2015 - -* 0.14.0 (Nicholas C. Zakas) -* Update: Fix indentation of comment (Nicholas C. Zakas) -* Fix: comma-spacing for template literals (fixes #1736) (Nicholas C. Zakas) -* Build: Add Node.js 0.12 testing (Nicholas C. Zakas) -* Breaking: Remove node from results (fixes #957) (Nicholas C. Zakas) -* Breaking: Exit code is now error count (Nicholas C. Zakas) -* Docs: Correct getFormatter() documentation (refs #1723) (Nicholas C. Zakas) -* Update: Make rules work with arrow functions (fixes #1508, fixes #1509, fixes #1493) (Nicholas C. Zakas) -* Fix: Ensure template string references count (fixes #1542) (Nicholas C. Zakas) -* Fix: no-undef to work with arrow functions (fixes #1604) (Nicholas C. Zakas) -* Upgrade: Espree to version 1.8.0 (Nicholas C. Zakas) -* Fix: Don't throw error for arguments (fixes #1759) (Nicholas C. Zakas) -* Fix: Don't warn on computed nonliteral properties (fixes #1762) (Nicholas C. Zakas) -* New: Allow parser to be configured (fixes #1624) (Nicholas C. Zakas) -* Docs: Added double quotes for JSON keys for comma-spacing and key-spacing rule (Dmitry Polovka) -* New: Rule indent (fixes #1022) (Dmitriy Shekhovtsov) -* Revert "New: Rule indent (fixes #1022)" (Nicholas C. Zakas) -* Update: fix eslint indentations (fixes #1770) (Dmitriy Shekhovtsov) -* Fix: Scoping issues for no-unused-vars (fixes #1741) (Nicholas C. Zakas) -* Docs: Added `eslint-enable` inline (Ivan Fraixedes) -* New: Add predefined Meteor globals (fixes #1763) (Johan Brook) -* New: Rule indent (fixes #1022) (Dmitriy Shekhovtsov) -* Update: Check all assignments for consistent-this (fixes #1513) (Timothy Jones) -* Fix: Support exceptions in no-multi-spaces (fixes #1755) (Brandon Mills) -* Docs: Forgotten parentheses in code snippet (Ivan Fraixedes) -* Update: CLIEngine results include warning and error count (fixes #1732) (gyandeeps) -* Fix: Scoping issues for no-unused-vars (fixes #1733) (Nicholas C. Zakas) -* Update: Add getNodeByRangeIndex method (refs #1755) (Brandon Mills) -* Update: Replace getTokenByRange(Index->Start) (refs #1721) (Brandon Mills) -* Update: Fast-path for empty input (fixes #546) (Nicholas C. Zakas) -* Fix: Allow single line else-if (fixes #1739) (Nicholas C. Zakas) -* Fix: Don't crash when $HOME isn't set (fixes #1465) (Nicholas C. Zakas) -* Fix: Make no-multi-spaces work for every case (fixes #1603, fixes #1659) (Nicholas C. Zakas) -* Breaking: Show error and warning counts in stylish summary (fixes #1746) (Brandon Mills) -* Docs: fixed typo in no-lone-blocks docs (Vitor Balocco) -* Docs: fixed typo in consistent-return docs (Vitor Balocco) -* Breaking: remove implied eval check from no-eval (fixes #1202) (Mathias Schreck) -* Update: Improve CLIEngine.getFormatter() (refs #1723) (Nicholas C. Zakas) -* Docs: Add Backbone plugin link (Ilya Volodin) -* Docs: use npm's keyword route (Tom Vincent) -* Build: Update sitegen script (Closes #1725) (Ilya Volodin) - -v0.13.0 - January 24, 2015 - -* 0.13.0 (Nicholas C. Zakas) -* Update: The rule spaced-line-comment now also allows tabs and not only spaces as whitespace. (fixes #1713) (Dieter Oberkofler) -* Docs: add Jasmine rules and eslintplugin npm links (Tom Vincent) -* Fix: Make no-redeclare work with let (fixes #917) (Nicholas C. Zakas) -* Update: Add CLIEngine.getFormatter() (fixes #1653) (Nicholas C. Zakas) -* Breaking: Update escope (fixes #1642) (Nicholas C. Zakas) -* Update: Switch to using estraverse-fb (fixes #1712) (Nicholas C. Zakas) -* Docs: Update README FAQ (Nicholas C. Zakas) -* Update: no-warning-comments matches on whole word only (fixes #1709) (Nick Fisher) -* Build: Add JSDoc generation (fixes #1363) (Nicholas C. Zakas) -* Docs: Add more info about context (fixes #1330) (Nicholas C. Zakas) -* Upgrade: Espree to 1.7.1 (fixes #1706) (Nicholas C. Zakas) -* Docs: Make CLA notice more prominent (Nicholas C. Zakas) -* Update: Added globals for: phantom,jquery, prototypejs, shelljs (fixes #1704) (Dmitriy Shekhovtsov) -* Docs: Fixed example for the space-return-throw-case rule (mpal9000) -* Fix: Except object literal methods from func-names (fixes #1699) (Brandon Mills) -* Update: use global strict mode everywhere (fixes #1691) (Brandon Mills) -* Update: Add allowPattern option for dot-notation rule (fixes #1679) (Tim Schaub) -* Fix: Missing undeclared variables in JSX (fixes #1676) (Yannick Croissant) -* Fix: no-unused-expressions rule incorrectly flagging yield (fixes #1672) (Rémi Gérard-Marchant) -* Update: Combine strict mode rules (fixes #1246) (Brandon Mills) -* Fix: disregards leading './' in ignore pattern or file name (fixes #1685) (Chris Montrois) -* Upgrade: globals module to latest (fixes #1670) (Nicholas C. Zakas) -* Fix: generator-star should allow params (fixes #1677) (Brandon Mills) -* Fix: no-unused-vars for JSX (fixes #1673 and fixes #1534) (Yannick Croissant) -* Docs: Add angularjs-eslint link into the integration doc (Emmanuel DEMEY) - -v0.12.0 - January 17, 2015 - -* 0.12.0 (Nicholas C. Zakas) -* Fix: Track JSX global variable correctly (fixes #1534) (Nicholas C. Zakas) -* Fix: Property regex flag checking (fixes #1537) (Nicholas C. Zakas) -* Docs: Add angularjs-eslint link into the integration doc (Emmanuel DEMEY) -* Update: Expose ecmaFeatures on context (fixes #1648) (Nicholas C. Zakas) -* Docs: Added Fitbit to the list of companies (Igor Zalutsky) -* New: gen-star rule (refs #1617) (Jamund Ferguson) -* New: no-var rule (refs #1617) (Jamund Ferguson) -* Fix: Support JSX spread operator (fixes #1634) (Nicholas C. Zakas) -* Docs: Document ecmaFeatures (Nicholas C. Zakas) -* Upgrade: several dependencies (fixes #1377) (Nicholas C. Zakas) -* Fix: Broken JSX test (Nicholas C. Zakas) -* Fix: no-bitwise reports on bitwise assignment expressions (fixes #1643) (Mathias Schreck) -* Fix: Find JSXIdentifier refs in no-unused-vars (fixes #1534) (Nicholas C. Zakas) -* Update: Add a couple JSX tests (Nicholas C. Zakas) -* Fix: quotes rule ignores JSX literals (fixes #1477) (Nicholas C. Zakas) -* Fix: Don't warn on JSX literals with newlines (fixes #1533) (Nicholas C. Zakas) -* Update: Fully enable JSX support (fixes #1640) (Nicholas C. Zakas) -* Breaking: Allow parser feature flips (fixes #1602) (Nicholas C. Zakas) -* Fix: Allow comments in key-spacing groups (fixes #1632) (Brandon Mills) -* Fix: block-scoped-var reports labels (fixes #1630) (Michael Ficarra) -* Docs: add newline to no-process-env (fixes #1627) (Tom Vincent) -* Fix: Update optionator, --no in help (fixes #1134) (George Zahariev) -* Fix: Allow individual newlines in space-in-brackets (fixes #1614) (Brandon Mills) -* Docs: Correct alignment in example project tree (Tim Schaub) -* Docs: Remove references to Esprima (Nicholas C. Zakas) -* Docs: Remove illegal code fence (Nicholas C. Zakas) - -v0.11.0 - December 30, 2014 - -* 0.11.0 (Nicholas C. Zakas) -* Fix: Adding regexp literal exception (fixes #1589) (Greg Cochard) -* Fix: padded-blocks incorrectly complained on comments (fixes #1416) (Mathias Schreck) -* Fix: column location of key-spacing with additional tokens (fixes #1458) (Mathias Schreck) -* Build: tag correct commit (refs #1606) (Mathias Schreck) -* Upgrade: Updat Espree to 1.3.1 (Nicholas C. Zakas) -* Fix: add es3 config option to dot-notation rule (fixes #1484) (Michael Ficarra) -* Fix: valid-jsdoc should recognize @class (fixes #1585) (Nicholas C. Zakas) -* Update: Switch to use Espree (fixes #1595) (Nicholas C. Zakas) -* Fix: brace-style stroustrup should report on cuddled elseif (fixes #1583) (Ian Christian Myers) -* New: Configuration via package.json (fixes #698) (Michael Mclaughlin) -* Update: Set environments w/ globals (fixes #1577) (Elan Shanker) -* Fix: yoda treats negative numbers as literals (fixes #1571) (Brandon Mills) -* Fix: function arguments now count towards no-shadow check (fixes #1584) (Glen Mailer) -* Fix: check if next statement is on newline when warning against extra semicolons. (fixes #1580) (Evan You) -* Update: add yoda exception for range tests (fixes #1561) (Brandon Mills) -* New: space-after-function-name (fixes #1340) (Roberto Vidal) - -v0.10.2 - December 12, 2014 - -* 0.10.2 (Nicholas C. Zakas) -* Fix: detect for...in in no-loop-func (fixes #1573) (Greg Cochard) -* Update: simplify comma-spacing logic (fixes #1562) (Brandon Mills) -* Fix: operator-assignment addition is non-commutative (fixes#1556) (Brandon Mills) -* 0.10.1 (Nicholas C. Zakas) -* Update: Add new-cap exception configurations. (Fixes #1487) - `newCapsAllowed` - `nonNewCapsAllowed` (Jordan Harband) - -v0.10.1 - December 6, 2014 - -* 0.10.1 (Nicholas C. Zakas) -* Docs: Fix v0.10.0 changelog (Nicholas C. Zakas) -* Build: Ensure changelog works with large semver versions (Nicholas C. Zakas) -* Fix: comma-spacing and comma-style to work with array literals (fixes #1492) (Nicholas C. Zakas) -* Update: better operator regex in use-isnan rule (fixes #1551) (Michael Ficarra) -* Fix: wrong op index in no-multi-spaces (fixes #1547) (Brandon Mills) -* Fix: Restrict use-isnan violations to comparison operators. (Fixes #1535) (Jordan Harband) -* Fix: comma-spacing has false positives when parenthesis are used (fixes #1457) (Jamund Ferguson) -* Docs: alphabetize the "Stylistic Issues" section (Jeff Williams) -* Build: make the "gensite" target work when DOCS_DIR does not exist (fixes #1530) (Jeff Williams) -* Docs: badges should only refer to master branch (Mathias Schreck) -* Fix: prevent crash on empty blocks in no-else-return (fixes #1527) (Mathias Schreck) -* Build: Fix md to html conversion regex (fixes #1525) (Brandon Mills) -* 0.10.0 (Nicholas C. Zakas) - -v0.10.0 - November 27, 2014 - -* 0.10.0 (Nicholas C. Zakas) -* Fix: Add Object and Function as exceptions in new-cap (refs #1487) (Nicholas C. Zakas) -* Breaking: Allow extensionless files to be passed on CLI (fixes #1131) (Nicholas C. Zakas) -* Fix: typo: iffe to iife, none to non (Michael Ficarra) -* Update: refactor tokens API (refs #1212) (Brandon Mills) -* New: Allow other file extensions (fixes #801) (Nicholas C. Zakas) -* Update: Add Event to browser globals (fixes #1474) (Nicholas C. Zakas) -* Fix: check function call arguments in comma-spacing (fixes #1515) (Mathias Schreck) -* Update: Add no-cond-assign option to disallow nested assignments in conditionals (fixes #1444) (Jeff Williams) -* Fix: crash in no-multi-spaces on empty array elements (fixes #1418) (Brandon Mills) -* Fix: Don't explode on directory traversal (fixes #1452) (Nicholas C. Zakas) -* Fix: no-fallthrough should work when semis are missing (fixes #1447) (Nicholas C. Zakas) -* Fix: JSDoc parsing by updating doctrine (fixes #1442) (Nicholas C. Zakas) -* Update: restore the "runs" global present in Jasmine 1.3 (fixes #1498) (Michał Gołębiowski) -* Fix: ignore undefined identifiers in typeof (fixes #1482) (Mathias Schreck) -* Fix: Ignoring empty comments. (fixes #1488) (Greg Cochard) -* New: Add space-unary-ops rules (#1346) (Marcin Kumorek) -* Update: Remove shebang workaround in spaced-line-comment (fixes #1433) (Michael Ficarra) -* Docs: change 'and' to 'an' in docs/rules/valid-jsdoc.md (fixes #1441) (Michael Ficarra) -* Update: Add `beforeAll` and `afterAll` to the Jasmine globals (fixes #1478) (Gyandeep Singh) -* Update: Add exception options to space-in-parens (fixes #1368) (David Clark) -* Build: Add check for license issues (fixes #782) (Brandon Mills) -* Docs: update badges (Yoshua Wuyts) -* Docs: Update pages to fix rendering of lists and fenced code blocks (David Anson) -* Fix: env rules merging for command line config (fixes #1271) (Roberto Vidal) -* Fix: Collect variables declare in switch-case.(fixes #1453) (chris) -* Fix: remove extra capture group (Nate-Wilkins) -* Update: allow distinct alignment groups in key-spacing (fixes #1439) (Brandon Mills) -* Fix: message for numeric property names in quote-props (fixes #1459) (Brandon Mills) -* Docs: Remove assumption about the rule config (Alexander Schmidt) -* New: Add ability to time individual rules (fixes #1437) (Brandon Mills) -* Fix: single quotes (Nate-Wilkins) -* Docs: Fix broken code fences in key-spacing docs (Brandon Mills) -* Docs: Explain .eslintignore features (fixes #1094) (Brandon Mills) -* Breaking: ignore node_modules by default (fixes #1163) (Brandon Mills) -* Fix: Adds clamping to getSource beforeCount (fixes #1427) (Greg Gianforcaro) -* New: add no-inline-comment rule (fixes #1366) (Greg Cochard) -* Fix: '.md' to '.html' with anchors (fixes #1415) (Nate-Wilkins) -* Build: Filter and sort versions in gensite (fixes #1430) (Brandon Mills) -* Build: Escape period in regex (fixes #1428) (Brandon Mills) -* Revert "Fix: '.md' to '.html' with anchors (fixes #1415)" (Nicholas C. Zakas) -* 0.9.2 (Nicholas C. Zakas) -* New: Add operator-assignment rule (fixes #1420) (Brandon Mills) - -v0.9.2 - November 1, 2014 - -* 0.9.2 (Nicholas C. Zakas) -* Fix: '.md' to '.html' with anchors (fixes #1415) (Nate-Wilkins) -* Fix: Allow line breaks in key-spacing rule (fixes #1407) (Brandon Mills) -* Build: add coveralls integration (fixes #1411) (Mathias Schreck) -* Fix: add severity flag for ignored file warning (fixes #1401) (Mathias Schreck) -* Fix: Keep sinon at ~1.10.3 (fixes #1406) (Brandon Mills) -* Fix: ! negates .eslintignore patterns (fixes #1093) (Brandon Mills) -* Fix: let fs.stat throw if a file does not exist (fixes #1296) (Mathias Schreck) -* Fix: check switch statements in space-before-blocks (fixes #1397) (Mathias Schreck) -* Docs: fix rule name in example configuration (Mathias Schreck) -* Fix: disable colors during test run (fixes #1395) (Mathias Schreck) -* New: add isPathIgnored method to CLIEngine (fixes #1392) (Mathias Schreck) -* Docs: changing eslint to ESLint and add missing backtick (Mathias Schreck) -* Docs: Documents the functionality to load a custom formatter from a file (Adam Baldwin) -* 0.9.1 (Nicholas C. Zakas) -* Update: Option type for mixed tabs and spaces (fixes #1374) (Max Nordlund) -* Fix: Nested occurrences of no-else-return now show multiple reports (fixes #1369) (Jordan Hawker) - -v0.9.1 - October 25, 2014 - -* 0.9.1 (Nicholas C. Zakas) -* Docs: fix link on governance model (azu) -* Fix: plugins without rulesConfig causes crash (fixes #1388) (Mathias Schreck) -* 0.9.0 (Nicholas C. Zakas) - -v0.9.0 - October 24, 2014 - -* 0.9.0 (Nicholas C. Zakas) -* New: Allow reading from STDIN (fixes #368) (Nicholas C. Zakas) -* New: add --quiet option (fixes #905) (Mathias Schreck) -* Update: Add support for plugin default configuration (fixes #1358) (Ilya Volodin) -* Fix: Make sure shebang comment node is removed (fixes #1352) (Nicholas C. Zakas) -* New: Adding in rule for irregular whitespace checking. (fixes #1024) (Jonathan Kingston) -* Fix: space-in-parens should not throw for multiline statements (fixes #1351) (Jary) -* Docs: Explain global vs. local plugins (fixes #1238) (Nicholas C. Zakas) -* Docs: Add docs on Node.js API (fixes #1247) (Nicholas C. Zakas) -* Docs: Add recommended keywords for plugins (fixes #1248) (Nicholas C. Zakas) -* Update: Add CLIEngine#getConfigForFile (fixes #1309) (Nicholas C. Zakas) -* Update: turn on comma-style for project (fixes #1316) (Nicholas C. Zakas) -* Fix: Ensure messages are sorted by line (fixes #1343) (Nicholas C. Zakas) -* Update: Added arraysInObjects and objectsInObjects options to space-in-brackets rule (fixes #1265, fixes #1302) (vegetableman) -* Breaking: Removed comma spacing check from space-infix-ops (fixes #1361) (vegetableman) -* Fix: addressed linting errors (Nicholas C. Zakas) -* Docs: Add Contributor Model (fixes #1341) (Nicholas C. Zakas) -* Docs: Add reference to CLA (Nicholas C. Zakas) -* Build: add version numbers to docs (fixes #1170) (Mathias Schreck) -* Fix: no-fallthrough incorrectly flagged falls through annotations (fixes #1353) (Mathias Schreck) -* Build: separate site publishing form generation (fixes #1356) (Mathias Schreck) -* New: Add key-spacing rule (fixes #1280) (Brandon Mills) -* New: add spaced-line-comment rule (fixes #1345) (Greg Cochard) -* Docs: added more Related Rules sections (fixes #1347) (Delapouite) -* Fix: resolve linting issue in (fixes #1339) (Nicholas C. Zakas) -* New: add space-before-blocks rule (fixes #1277) (Mathias Schreck) -* Docs: Remove moot integration plugins (Sindre Sorhus) -* New: add rule for multiple empty lines (fixes #1254) (Greg Cochard) -* Fix: no-shadow rule should consider function expressions (fixes #1322) (Mathias Schreck) -* Update: remove globals present only in Jasmine plugins (fixes #1326) (Michał Gołębiowski) -* New: added no-multi-spaces rule (fixes #630) (vegetableman) -* New: Added comma-spacing rule (Fixes #628, Fixes #1319) (vegetableman) -* New: add rule for padded blocks (fixes #1278) (Mathias Schreck) -* Docs: fix eqeqeq isNullCheck comment (Denis Sokolov) -* Fix: no-comma-dangle violation in unit test and Makefile.js/lint not checking return codes (fixes #1306) (David Anson) -* Fix: allow comma-last with object properties having line breaks (fixes #1314) (vegetableman) -* New: Added comma-style rule (fixes #1282) (vegetableman) -* Update: add space after function keyword check (fixes #1276) (Mathias Schreck) -* Update: Add missing environments and fix sorting/grouping of rules (fixes #1307, fixes #1308) (David Anson) -* Docs: Fix sorting of rules within each section (David Anson) -* Docs: Correct a few misspelled words (David Anson) -* Docs: Update multiple pages to fix rendering of fenced code blocks (David Anson) -* New: Added no-process-env rule (fixes #657) (vegetableman) -* Fix: add rule ensuring #1258 is fixed by recent rewrite (fixes #1258) (Michael Ficarra) -* Update: split propertyName from singleValue in space-in-brackets (fixes #1253) (Michael Ficarra) -* Update: add "as-needed" option to quote-props rule (fixes #1279) (Michael Ficarra) -* Docs: fixed broken link and changed warning level to error level (vegetableman) -* Docs: Added "the native web" to the list of companies that use ESLint. (Golo Roden) -* Docs: Add BountySource badge to README (Nicholas C. Zakas) -* 0.8.2 (Nicholas C. Zakas) - -v0.8.2 - September 20, 2014 - -* 0.8.2 (Nicholas C. Zakas) -* Docs: Updated contribution guidelines to add accepted/bounty issues descriptions (Nicholas C. Zakas) -* Docs: Update README with links and FAQs (Nicholas C. Zakas) -* Docs: add finally to space-after-keywords documentation (Mathias Schreck) -* New: add ignoreCase option to sort-vars (fixes #1272) (Mathias Schreck) -* Docs: fix typo (Barry Handelman) -* Docs: Fix broken Markdown on configuration page (Nicholas C. Zakas) -* Docs: Fix reference to wrong rule name (Harry Wolff) -* Upgrade: Most dev dependencies (Nicholas C. Zakas) -* Upgrade: shelljs to 0.3.0 (Nicholas C. Zakas) -* Upgrade: doctrine to 0.5.2 (Nicholas C. Zakas) -* Upgrade: esprima to 1.2.2 (Nicholas C. Zakas) -* Upgrade: eslint-tester to latest (Nicholas C. Zakas) -* Fix: Load .eslintrc in directory with $HOME as an ancestor (fixes #1266) (Beau Gunderson) -* Fix: load .eslintrc from HOME (fixes #1262) (Beau Gunderson) -* New: Add sharable rule settings (fixes #1233) (Ilya Volodin) -* Upgrade: upgrade outdated dependencies (fixes #1251) (Mathias Schreck) -* Docs: fix typo in no-ex-assign documentation (Michael Ficarra) -* Docs: add intellij plugin to integrations (ido) -* Docs: Changing NPM to npm (Peter deHaan) -* Fix: strict should check function expressions (fixes #1244) (Brandon Mills) -* Docs: fix vars-on-top documentation (fixes #1234) (Mathias Schreck) -* 0.8.1 (Nicholas C. Zakas) -* Docs: Fixed a typo in brace-style.md (Anton Antonov) - -v0.8.1 - September 9, 2014 - -* 0.8.1 (Nicholas C. Zakas) -* Fix: Ensure exit code is 1 when there's a syntax error (fixes #1239) (Nicholas C. Zakas) -* Docs: fix up vars-on-top documentation (fixes #1234) (Michael Ficarra) -* Fix: vars-on-top directive support (fixes #1235) (Michael Ficarra) -* Fix: Avoid mutating node.range in max-len (fixes #1224) (Brandon Mills) -* Docs: Typo, add missing quotation mark (Ádám Lippai) -* Update: space-in-brackets to allow exceptions (fixes #1142) (Brandyn Bennett) -* 0.8.0 (Nicholas C. Zakas) - -v0.8.0 - September 5, 2014 - -* 0.8.0 (Nicholas C. Zakas) -* Perf-related revert "Fix: Speed up tokens API (refs #1212)" (Nicholas C. Zakas) -* Fix: no-fallthrough: continue affects control flow, too (fixes #1220) (Michael Ficarra) -* Fix: rewrite no-unused-vars rule (refs #1212) (Michael Ficarra) -* Fix: Error when there's a \r in .eslintrc (#1172) (Gyandeep Singh) -* Added rule disallowing reserved words being used as keys (fixes #1144) (Emil Bay) -* Fix: rewrite no-spaced-func rule (refs #1212) (Michael Ficarra) -* Fix: Speed up getScope() (refs #1212) (Brandon Mills) -* Fix: no-extra-strict behavior for named function expressions (fixes #1209) (Mathias Schreck) -* Add Date.UTC to allowed capitalized functions (David Brockman Smoliansky) -* New: Adding 'vars-on-top' rule (fixes #1148) (Gyandeep Singh) -* Fix: Speed up tokens API (refs #1212) (Brandon Mills) -* Docs: document plugin usage (fixes #1117) (Mathias Schreck) -* New: accept plugins from cli (fixes #1113) (Mathias Schreck) -* Docs: fix some typos. (Mathias Schreck) -* New: Load plugins from configs (fixes #1115). (Mathias Schreck) -* Fix: no-unused-expressions better directive detection (fixes #1195) (Michael Ficarra) -* Fix: no-unused-expressions directive support (fixes #1185) (Michael Ficarra) -* Update: Add 'allowSingleLine' option to brace-style (fixes #1089) (John Gozde) -* Docs: Spell checking and one extra closing curly in code example (Juga Paazmaya) -* Fix: mergeConfigs ensures the plugins property exists (fixes #1191). (Mathias Schreck) -* Update: Declare ES6 collections (Map, Set, WeakMap, WeakSet) as built-in globals (fixes #1189) (Michał Gołębiowski) -* New: Adding 'plugin' CLI option (fixes #1112) (Greg) -* Fix: Correct a typo in the error message in tests (Michał Gołębiowski) -* New: Add no-extra-bind rule to flag unnecessary bind calls (fixes #982) (Bence Dányi) -* Fix: Useless bind call in cli-engine (fixes #1181) (Bence Dányi) -* Docs: Updates `amd` description (fixes #1175) (James Whitney) -* New: Adds support for the `jasmine` env (fixes #1176) (James Whitney) -* Fix: for-in support to no-empty-label rule (fixes #1161) (Marc Harter) -* docs: Update link (Mathias Bynens) -* Fix: crash when loading empty eslintrc file (fixes #1164) (Michael Ficarra) -* Fix: no-unused-var should respect compound assignments (fixes #1166) (Michael Ficarra) -* Update: ES3 `ReservedWord`s (fixes #1151) Adds ES3 `ReservedWord`s to the list of keywords in the `dot-notation` rule (fixes #1151) (Emil Bay) -* Update: Update comment parser to read rule slashes (fixes #1116) (Jary) -* New: add no-void rule (fixes #1017). (Mike Sidorov) -* New: Add rules.import() (fixes #1114) (Mathias Schreck) -* New: Make mergeConfigs() merge plugin entries (fixes #1111) (Mathias Schreck) -* Breaking: Change no-global-strict to global-strict and add "always" option (fixes #989) (Brandon Mills) -* Fix: no-unreachable should check top-level statements (fixes #1138) (Brandon Mills) -* Fix: Speed up no-unreachable (fixes #1135) (Brandon Mills) -* New: advanced handle-callback-err configuration (fixes #1124) (Mathias Schreck) -* New: Expose CLIEngine (fixes #1083) (Gyandeep Singh) -* Docs: Add link to new Atom linter (fixes #1125) (Gil Pedersen) -* Fix: space-after-keywords checks finally of TryStatement (fixes #1122) (Michael Ficarra) -* Fix: space-after-keywords checks while of DoWhileStatement (fixes #1120) (Michael Ficarra) -* Fix: space-after-keywords w/ "never" should allow else-if (fixes #1118) (Michael Ficarra) -* Fix: dot-notation rule flags non-keyword reserved words (fixes #1102) (Michael Ficarra) -* Update: Use xml-escape instead of inline helper (Ref #848) (jrajav) -* Update: Added comments support to .eslintignore (fixes #1084) (Vitaly Puzrin) -* Update: enabled 'no-trailing-spaces' rule by default (fixes #1051) (Vitaly Puzrin) -* Breaking: Ignore children of all patterns by adding "/**" (Fixes #1069) (jrajav) -* Fix: skip dot files and ignored dirs on traverse (fixes #1077, related to #814) (Vitaly Puzrin) -* Docs: Added Gruntjs plugin on integrations page (Gyandeep Singh) -* Fix: don't break node offsets if hasbang present (fixes #1078) (Vitaly Puzrin) -* Build: Exclude readme/index from rules Resources generation (Fixes #1072) (jrajav) -* Docs: Change eol-last examples to `

` (Fixes #1068) (jrajav)
-* 0.7.4 (Nicholas C. Zakas)
-* New: space-in-parens rule (Closes #627) (jrajav)
-
-v0.7.4 - July 10, 2014
-
-* 0.7.4 (Nicholas C. Zakas)
-* Docs: Fix 'lintinging' typo and ref links (Tom Vincent)
-* Fix: Transform envs option to object in Config (Fixes #1064) (jrajav)
-* 0.7.3 (Nicholas C. Zakas)
-
-v0.7.3 - July 9, 2014
-
-* 0.7.3 (Nicholas C. Zakas)
-* Update: Address code review comment for strict rule (refs #1011) (Nicholas C. Zakas)
-* Docs: Update copyright policy (Nicholas C. Zakas)
-* Docs: Update documentation for max-len to include description of second option (fixes #1006) (Nicholas C. Zakas)
-* Fix: Avoid double warnings for strict rule (fixes #1011) (Nicholas C. Zakas)
-* Fix: Check envs for true/false (Fixes #1059) (jrajav)
-* 0.7.2 (Nicholas C. Zakas)
-
-v0.7.2 - July 8, 2014
-
-* 0.7.2 (Nicholas C. Zakas)
-* Fix: no-mixed-spaces-and-tabs incorrectly flagging multiline comments (fixes #1055) (Nicholas C. Zakas)
-* Fix: new-cap error that throws on non-string member (fixes #1056) (Nicholas C. Zakas)
-* Fix: Always make globals an object (Fixes #1049) (jrajav)
-* 0.7.1 (Nicholas C. Zakas)
-
-v0.7.1 - July 7, 2014
-
-* 0.7.1 (Nicholas C. Zakas)
-* Docs: Add Related Rules sections (Fixes #990) (jrajav)
-* Fix: Check output file isn't dir, fix tests (Fixes #1034) (jrajav)
-* Docs: Updated documentation for several rules (Nicholas C. Zakas)
-* Docs: Updated contributor guide and dev env setup guide (Nicholas C. Zakas)
-* Breaking: Implement configuration hierarchy (fixes #963) (Nicholas C. Zakas)
-* Update: greatly simplify eqeqeq's operator finding logic (fixes #1037) (Michael Ficarra)
-* New: Add getSourceLines() to core and rule context (fixed #1005) (Jary)
-* Build + Docs: Adding generated resource links to rule docs (Fixes #1021) (jrajav)
-* Fix: Ignore unused params for args: 'none' (Fixes #1026) (jrajav)
-* Fix: Point eqeqeq error at operator (Fixes #1029) (jrajav)
-* New: report output to a file (fixes #1027) (Gyandeep Singh)
-* Breaking: CLIEngine abstraction for CLI operations; formatters no longer are passed configs (fixes #935) (Nicholas C. Zakas)
-* Fix: Allow stdout to drain before exiting (fixes #317) (Nicholas C. Zakas)
-* New: add no-undefined rule (fixes #1020) (Michael Ficarra)
-* New: Added no-mixed-spaces-and-tabs rule (fixes #1003) (Jary)
-* New: Added no-trailing-spaces rule (fixes #995) (Vitaly Puzrin)
-* Update: Factor ignores out of Config (fixes #958) (jrajav)
-* Fix: rewrite eol-last rule (fixes #1007) (fixes #1008) (Michael Ficarra)
-* Fix: add additional IIFE exception in no-extra-parens (fixes #1004) (Michael Ficarra)
-* Docs: Removed reference to brace-style Stroustrup default (fixes #1000) (Caleb Troughton)
-* New: Added eol-last rule (Fixes #996) (Vitaly Puzrin)
-* Fix: Put rule severity in messages (Fixes #984); deprecates passing full config to Formatters (jrajav)
-* Fix: no-unused-vars to check only file globals (fixes #975) (Aliaksei Shytkin)
-* Build: Makefile - Check for rule ids in docs titles (Fixes #969) (Delapouite)
-* Docs: guard-for-in - added missing id in title (Fixes #969) (Delapouite)
-* Breaking: Change 'no-yoda' rule to 'yoda' and add "always" option (Fixes #959) (jrajav)
-* Fix: Fixes no-unused-vars to check /*globals*/ (Fixes #955) (jrajav)
-* Update: no-eval to also warn on setTimeout and setInterval (fixes #721) (Nicholas C. Zakas)
-* Remove: experimental match() method (Nicholas C. Zakas)
-* Update: space-in-brackets now always allows empty object and array literals to have no spaces (fixes #797) (Nicholas C. Zakas)
-* New: Allow the cli parameter "color" and "no-color" (fixes #954) (Tom Gallacher)
-* Fix: valid-jsdoc no more warning for multi-level params (Fixes #925) (Delapouite)
-* Update: Search parent directories for .eslintignore (Fixes #933) (jrajav)
-* Fix: Correct order of arguments passed to assert.equal (fixes #945) (Michał Gołębiowski)
-* Update: Write the summary in stylish formatter in yellow if no errors (fixes #906); test coloring of messages (Michał Gołębiowski)
-* Fix: Corrects configs merging into base config (Fixes #838) (jrajav)
-* Fix: Adding check if char is non-alphabetic to new-cap (Fixes #940) (jrajav)
-* Docs: Update about page description (fixes #936) (Nicholas C. Zakas)
-* Docs: Add '/', forgotten in first commit (Fixes #931) (jrajav)
-* Update: Rule `new-cap` checks capitalized functions (fixes #904) (Aliaksei Shytkin)
-* Docs: Mention allowed semicolons in "never" mode for 'semi' rule (fixes #931) (jrajav)
-* Docs: Mention Yeoman generator in dev setup (fixes #914) (Nicholas C. Zakas)
-* Build: Remove flaky perf test from Travis (Nicholas C. Zakas)
-* Breaking: Refactor .eslintignore functionality (refs #928, fixes #901, fixes #837, fixes #853) (Nicholas C. Zakas)
-* 0.6.2 (Nicholas C. Zakas)
-* Breaking: Remove JSON support for .eslintignore (fixes #883) (icebox)
-
-v0.6.2 - May 23, 2014
-
-* 0.6.2 (Nicholas C. Zakas)
-* Fix: Adding per-environment rule configs to docs and doc validation (Fixes #918) (jrajav)
-* Docs: Updated contribution guidelines (Nicholas C. Zakas)
-* Docs: Update description of eqeqeq to mention special cases (fixes #924) (Nicholas C. Zakas)
-* Fix: block-scoped-var CatchClause handling (fixes #922) (Michael Ficarra)
-* Fix: block-scoped-var respects decls in for and for-in (fixes #919) (Michael Ficarra)
-* Update: Implement eqeqeq option "allow-null" (fixes #910) (Michał Gołębiowski)
-* Fix: new-cap should allow non-alpha characters (fixes #897) (Michael Ficarra)
-* Update: Refactor ESLintTester to fix dependency hell (fixes #602) (Nicholas C. Zakas)
-* Fix: Merge configs with ancestors (Fixes #820) (jrajav)
-* Fix: no-fallthrough should respect block statements in case statements (fixes #893) (Nicholas C. Zakas)
-* Docs: Fix layout issue in configuration docs (fixes #889) (Nicholas C. Zakas)
-* Build: Enable default-case rule (fixes #881) (icebox)
-* Build: Enable space-after-keywords (fixes #884) (icebox)
-* Fix api double emit on comment nodes (fixes #876) (Aliaksei Shytkin)
-* 0.6.1 (Nicholas C. Zakas)
-
-v0.6.1 - May 17, 2014
-
-* 0.6.1 (Nicholas C. Zakas)
-* Upgrade: Optionator to 0.4.0 (fixes #885) (Nicholas C. Zakas)
-* 0.6.0 (Nicholas C. Zakas)
-
-v0.6.0 - May 17, 2014
-
-* 0.6.0 (Nicholas C. Zakas)
-* Fix: Remove -r alias for --rule (fixes #882) (Nicholas C. Zakas)
-* Docs: Update dev setup, contributing, default-case descriptions (Nicholas C. Zakas)
-* Update: valid-jsdoc now allows you to optionally turn off parameter description checks (fixes #822) (Nicholas C. Zakas)
-* Breaking: brace-style now disallows block statements where curlies are on the same line (fixes #758) (Nicholas C. Zakas)
-* Add linting Makefile.js (fixes #870) (icebox)
-* add rule flag, closes #692 (George Zahariev)
-* Add check between rules doc and index (fixes #865) (icebox)
-* Add Build Next mention in integrations README. (icebox)
-* document new IIFE exception for no-extra parens added as part of #655 (Michael Ficarra)
-* (fixes #622) Add rule ID on documentation pages (Delapouite)
-* fixes #655: add IIFE exception to no-extra-parens (Michael Ficarra)
-* add new rule "no-new-require" (Wil Moore III)
-* exit with non-zero status when tests fail (fixes #858) (Márton Salomváry)
-* removed unicode zero width space character from messages (fixes #857) (Márton Salomváry)
-* Change: --rulesdir now can be specified multiple times (fixes #830) (Nicholas C. Zakas)
-* Update: Node 0.8 no longer supported (fixes #734) (Nicholas C. Zakas)
-* Update: Add typed arrays into builtin environment globals (fixes #846) (Nicholas C. Zakas)
-* Fix: Add prototype methods to global scope (fixes #700) (Nicholas C. Zakas)
-* Rule: no-restricted-modules (fixes #791) (Christian)
-* Upgrade: Esprima to 1.2 (fixes #842) (Nicholas C. Zakas)
-* Docs: reporting level 2 is an error (fixes #843) (Brandon Mills)
-* Upgrade: Esprima to 1.2, switch to using Esprima comment attachment (fixes #730) (Nicholas C. Zakas)
-* Fix: Semi rule incorrectly flagging extra semicolon (fixes #840) (Nicholas C. Zakas)
-* Build: Update Travis to only test Node 0.10 (refs #734) (Nicholas C. Zakas)
-* Add "nofunc" option (fixes #829) (Conrad Zimmerman)
-* Rule: no-inner-declarations (fixes #587) (Brandon Mills)
-* Rule 'block-scoped-var': correct scope for functions, arguments (fixes #832) (Aliaksei Shytkin)
-* Rule: default-case (fixes #787) (Aliaksei Shytkin)
-* Ignored files are excluded unless --force is passed on the CLI (Nick Fisher)
-* Fixes a typo and a broken link in the documentation (Nick Fisher)
-* Replaces .some() with .indexOf() where appropriate (Nick Fisher)
-* Fix correct config merge for array values (fixes #819) (Aliaksei Shytkin)
-* Remove warning about ESLint being in Alpha (Nick Fisher)
-* Adds `space-after-keywords` rule (fixes #807) (Nick Fisher)
-* Rule: no-lonely-if (fixes #790) (Brandon Mills)
-* Add ignore comments in file (fixes #305) (Aliaksei Shytkin)
-* 0.5.1 (Nicholas C. Zakas)
-* Change: no-unused-vars default to 'all' (fixes #760) (Nicholas C. Zakas)
-
-v0.5.1 - April 17, 2014
-
-* 0.5.1 (Nicholas C. Zakas)
-* Fix general config not to be modified by comment config in files (fixes #806) (Aliaksei Shytkin)
-* SVG badges (Ryuichi Okumura)
-* fixes #804: clean up implementation of #803 (which fixed #781) (Michael Ficarra)
-* Build: Fix perf test to take median of three runs (fixes #781) (Nicholas C. Zakas)
-* Fix: --reset will now properly ignore default rules in environments.json (fixes #800) (Nicholas C. Zakas)
-* Docs: Updated contributor guidelines (Nicholas C. Zakas)
-* Added Mocha global variables for TDD style. Fixes #793. (Golo Roden)
-* Rule: no-sequences (fixes #561) (Brandon Mills)
-* Change .eslintingore to plain text (fixes #761) (Brandon Mills)
-* Change 'no-spaced-func' message (fixes #762) (Aliaksei Shytkin)
-* Rule 'block-scoped-var' works correct when object inits (fixes #783) (Aliaksei Shytkin)
-* Build: Always build docs site on top of origin/master (Nicholas C. Zakas)
-* 0.5.0 (Nicholas C. Zakas)
-
-v0.5.0 - April 10, 2014
-
-* 0.5.0 (Nicholas C. Zakas)
-* Build: Bump perf limit so Travis won't fail every time (fixes #780) (Nicholas C. Zakas)
-* Add tests to cover 100% of eslint.js (Aliaksei Shytkin)
-* Fix: Make sure no-path-concat doesn't flag non-concat operations (fixes #776) (Nicholas C. Zakas)
-* Rule 'no-unused-var' in functional expression with identifier (fixes #775) (Aliaksei Shytkin)
-* Rule: valid-typeof (Ian Christian Myers)
-* Add global cli flag (ref #692) (Brandon Mills)
-* update to latest Optionator (George Zahariev)
-* Add options for rule 'no-unused-vars' to check all arguments in functions (fixes #728) (Aliaksei Shytkin)
-* Fix: Cleanup package.json (Nicholas C. Zakas)
-* New: Experimental support for CSS Auron (fixes #765) (Nicholas C. Zakas)
-* Lint tests on build (fixes #764) (Aliaksei Shytkin)
-* Rule block-scoped-var works correct with object properties (fixes #755) (Aliaksei Shytkin)
-* Breaking: implement eslint-env and remove jshint/jslint environment comment support (fixes #759) (Aliaksei Shytkin)
-* readme: npm i -> npm install (Linus Unnebäck)
-* Add env flag to cli options summary (fixes #752) (Brandon Mills)
-* Fix: Give the perf test a better calculated budget (fixes #749) (Nicholas C. Zakas)
-* give the `env` flag type `[String]`, improve code (fixes #748) (George Zahariev)
-* fixes #735: add new, more efficient getTokens interfaces (Michael Ficarra)
-* Add --env cli flag (ref #692) (Brandon Mills)
-* Fixes #740 - Make sure callbacks exist before marking them as 'handled'. (mstuart)
-* fixes #743: wrap-regex rule warns on regex used in dynamic member access (Michael Ficarra)
-* replace tab indents with 4 spaces in lib/rules/handle-callback-err.js (Michael Ficarra)
-* Adding homepage and bugs links to package.json (Peter deHaan)
-* JSDoc for rules (Anton Rudeshko)
-* 0.4.5 (Nicholas C. Zakas)
-
-v0.4.5 - March 29, 2014
-
-* 0.4.5 (Nicholas C. Zakas)
-* Build: Add perf check into Travis build to better monitor performance regressions (fixes #732) (Nicholas C. Zakas)
-* Fix: Make sure semi reports correct location of missing semicolon (fixes #726) (Nicholas C. Zakas)
-* Add --no-eslintrc cli flag (ref #717) (Brandon Mills)
-* Fix #716 crash with reset flag (Brandon Mills)
-* Fixed JSON formatting and highlighting (Anton Rudeshko (Tesla))
-* fixes #723: block-scoped-var throws on unnamed function expression (Michael Ficarra)
-* Fix: Make stroustrup brace-style closing message make sense (fixes #719) (Nicholas C. Zakas)
-* no-comma-dangle reports correct line number (Andrey Popp)
-* Upgrade: Esprima to 1.1.1 and EScope to 1.0.1 (fixes #718) (Nicholas C. Zakas)
-* Add reset cli flag (refs #692) (Brandon Mills)
-* Relax eqeqeq null check (fixes #669) (Brandon Mills)
-* 0.4.4 (Nicholas C. Zakas)
-* New Rule: handle-callback-err (fixes #567) (Jamund Ferguson)
-
-v0.4.4 - March 25, 2014
-
-* 0.4.4 (Nicholas C. Zakas)
-* Fix no-used-vars to report FunctionExpression params (fixes #697). (Andrey Popp)
-* fixes #711: eslint reports wrong line number for files with shebang (Michael Ficarra)
-* Fix for no-unused-vars and MemberExpression (Andrey Popp)
-* added no-warning-comments rule (Alexander Schmidt)
-* fixes #699: brace-style does not check function expressions (Michael Ficarra)
-* rewrite block-scoped-var (Michael Ficarra)
-* recommend using hasOwnProperty from Object.prototype in guard-for-in docs (Michael Ficarra)
-* change conf/environments.json spacing to be simpler and more consistent (Michael Ficarra)
-* Update API to use context.getFilename() instead of .filename. (Loren Segal)
-* Small changes, JSDoc is clarified (Aliaksei Shytkin)
-* Move FileFinder to separate file (Aliaksei Shytkin)
-* Cache if file is not found (Aliaksei Shytkin)
-* Use cache on config files seach (Aliaksei Shytkin)
-* Added .eslintignore to load from parents folders (fixes #681) (Aliaksei Shytkin)
-* fix 'node-modules' typo in docs (Fred K. Schott)
-* Upgrade to the latest version of doctrine. (Brian Di Palma)
-* Document optional filename and default it to `input`. (Loren Segal)
-* Fix: Compatibility for Node 0.8 (Nicholas C. Zakas)
-* Update: Makefile.js now uses shelljs-nodecli (Nicholas C. Zakas)
-* #681 apply all .eslintignore exclusions (Aliaksei Shytkin)
-* Add RuleContext.filename property (for eslint/eslint#468). (Loren Segal)
-* 0.4.3 (Nicholas C. Zakas)
-
-v0.4.3 - March 18, 2014
-
-* 0.4.3 (Nicholas C. Zakas)
-* fixes #682: rewrite no-constant-condition rule (Michael Ficarra)
-* Fixes #673 allow configuration of @return errors via requireReturn - (fixes #673) (Brian Di Palma)
-* Tweaking inline code formatting for "if, while, dowhile" (Peter deHaan)
-* Fixes #677 getJSDocComment() should not search beyond FunctionExpression or FunctionDeclaration parent nodes. (Brian Di Palma)
-* Relaxed enforcement of camelcase rule (Ian Christian Myers)
-* Fixing issue #675. Incorrect triggering of no-else-return rule. (Brian Di Palma)
-* Added style option for wrap-iife (Mathias Schreck)
-* Fix: Issues with named function expressions in no-unused-vars and no-shadow (fixes #662) (Nicholas C. Zakas)
-* Update: camelcase rule now doesn't flag function calls (fixes #656) (Nicholas C. Zakas)
-* Updating documentation description for: no-space-before-semi rule, changing rules to exempt strings with semicolons and test for that condition. Fixes #629. (Jonathan Kingston)
-* Adding in rule no-space-before-semi to prevent spaces before semicolons. fixes #629 (Jonathan Kingston)
-* show NPM version (Paul Verest)
-* adapt code formatting (Mathias Schreck)
-* Added a TextMate 2 integration to the docs (Nate Silva)
-* 0.4.2 (Nicholas C. Zakas)
-
-v0.4.2 - March 3, 2014
-
-* 0.4.2 (Nicholas C. Zakas)
-* fixes #651: disable no-catch-shadow rule in node environment (Michael Ficarra)
-* Fixed context.report message parsing (Ian Christian Myers)
-* fixe #648: wrap-iife rule should actually check that IIFEs are wrapped (Michael Ficarra)
-* Added "stroustrup" option for brace-style (Ian Christian Myers)
-* 0.4.1 (Nicholas C. Zakas)
-
-v0.4.1 - February 27, 2014
-
-* 0.4.1 (Nicholas C. Zakas)
-* Created space-in-brackets rule (Ian Christian Myers)
-* Update: Allow valid-jsdoc to specify replacement tags (fixes #637) (Nicholas C. Zakas)
-* Fix: Ensure getJSDocComment() works for all function declarations (fixes #638) (Nicholas C. Zakas)
-* Added broccoli-eslint to integration docs (Christian)
-* fixes #634: getters/setters shouldn't trigger no-dupe-keys (Michael Ficarra)
-* Update: semi to also enforce not using semicolons (fixes #618) (Nicholas C. Zakas)
-* New Rule: no-constant-condition  - removed SwitchStatement discriminant check  - removed AssignmentExpression with right Identifier  - fixed copy paste error  - added DoWhileStatement, ForStatement based on discussion: https://github.com/eslint/eslint/pull/624 (fixes #621) (Christian)
-* New Rule: no-constant-condition (fixes #621) (Christian)
-* Adding mimosa-eslint to Build System list (dbashford)
-* Fix: Make sure semi flags return statements without a semicolon (fixes #616) (Nicholas C. Zakas)
-* Fix: stylish formatter blue text -> white text (fixes #607) (Nicholas C. Zakas)
-* Fix: radix rule should warn (not throw error) when parseInt() is called without arguments (fixes #611) (Nicholas C. Zakas)
-* Update README.md (Dmitry)
-* Adding JSDoc comments for TAP format helper functions (Jonathan Kingston)
-* Updating documentation to include TAP format option (Jonathan Kingston)
-* Fixing validation issues to TAP formatter (Jonathan Kingston)
-* Adding TAP formatter and basic tests (Jonathan Kingston)
-* Docs: Updated integrations page (Nicholas C. Zakas)
-* 0.4.0 (Nicholas C. Zakas)
-
-v0.4.0 - February 12, 2014
-
-* 0.4.0 (Nicholas C. Zakas)
-* Change: Switch :after to :exit (fixes #605) (Nicholas C. Zakas)
-* Fix: Make sure no-unused-vars doesn't get confused by nested functions (fixes #584) (Nicholas C. Zakas)
-* Update: .eslintrc to check more things (Nicholas C. Zakas)
-* Fix: Make sure JSDoc parser accepts JSDoc3-style optional parameters (Nicholas C. Zakas)
-* Docs: Update documentation with linking instructions for ESLintTester (Nicholas C. Zakas)
-* New Rule: valid-jsdoc (fixes #536) (Nicholas C. Zakas)
-* #595 improved func-names documentation (Kyle Nunery)
-* #595 added more func-names tests (Kyle Nunery)
-* #595 fix rule message and add more tests (Kyle Nunery)
-* use optionator for option parsing, not optimist (George Zahariev)
-* Include instructions for working with ESLintTester (Nicholas C. Zakas)
-* #595 remove needless 'function Foo() {}' in tests (Kyle Nunery)
-* #595 fix whitespace (Kyle Nunery)
-* #595 fix markdown for js code blocks (Kyle Nunery)
-* Adding information about Yeomen generator (Ilya Volodin)
-* #595 add docs for rule func-names (Kyle Nunery)
-* #595 add func-names rule (Kyle Nunery)
-* migrate variables array to map (Brandon Mills)
-* Perf: Move try-catch out of verify() function to allow V8 optimization (refs #574) (Nicholas C. Zakas)
-* Docs: Added instructions for running npm run profile (Nicholas C. Zakas)
-* refactor variable name lookup into a separate function (Brandon Mills)
-* optimize findVariable() in no-unused-vars (Brandon Mills)
-* move to tests/bench (Chris Dickinson)
-* add `npm run profile`. (Chris Dickinson)
-* #586 refactor based on https://github.com/eslint/eslint/pull/590#discussion_r9476367 (Christian)
-* #586 added no-unreachable jsdoc, documentation note on hoisting case (Christian)
-* #586 add hoisting check to no-unreachable (Christian)
-* readme: Remove stray asterisk (Timo Tijhof)
-* #580 Remove eslint.getAllComments(), related docs, related tests (Christian)
-* Added test for bug fix #582. Test Passes (Shmueli Englard)
-* Added curly braces to if statment (Shmueli Englard)
-* Added new test for fix to #582 (fixes 582) (Shmueli Englard)
-* Bug #582: Added check if node.value isn't a string just exit (Shmueli Englard)
-* Update Rule: implement curly options for single-statement bodies (fixes #511) (Nicholas C. Zakas)
-* New Rule: no-extra-boolean-cast (fixes #557) (Brandon Mills)
-* New Rule: no-sparse-arrays (fixes #499) (Nicholas C. Zakas)
-* Fix: no-spaced-func is now an error (Nicholas C. Zakas)
-* New Rule: no-process-exit (fixes #568) (Nicholas C. Zakas)
-* New Rule: no-labels (fixes #550) (Nicholas C. Zakas)
-* New Rule: no-lone-blocks (fixes #512) (Brandon Mills)
-* Added Emacs/Flycheck integration (Nikolai Prokoschenko)
-* Build: Add perf test (Nicholas C. Zakas)
-* Fix: no-cond-assign shouldn't throw error when there's a for loop with an empty conditional (fixes #53) (Nicholas C. Zakas)
-* Docs: Add docs for no-regex-spaces and all doc errors now break build (closes #562) (Nicholas C. Zakas)
-* Rename: regex-spaces to no-regex-spaces (Nicholas C. Zakas)
-* Docs: Add docs for no-underscore-dangle (refs #562) (Nicholas C. Zakas)
-* Docs: Add docs for no-undef-init (refs #562) (Nicholas C. Zakas)
-* Docs: Add docs for no-return-assign (refs #562) (Nicholas C. Zakas)
-* Fix: Misspelling in no-return-assign message (Nicholas C. Zakas)
-* Docs: Add docs for no-new-wrappers (refs #562) (Nicholas C. Zakas)
-* Docs: Add docs for no-new-object (refs #562) (Nicholas C. Zakas)
-* Docs: Add docs for no-implied-eval (refs #562) (Nicholas C. Zakas)
-* Docs: Updated documentation for developing rules (Nicholas C. Zakas)
-* Testing: Move ESLintTester to be external dependency (fixes #480) (Nicholas C. Zakas)
-* Docs: Add list of known integrations (Nicholas C. Zakas)
-* Fix #570 (dmp42)
-* document no-array-constructor rule (Michael Ficarra)
-* fixes #500: no-array-constructor should not flag 1-argument construction (Michael Ficarra)
-* fixes #501: no-array-constructor recognises CallExpression form (Michael Ficarra)
-* rename no-new-array rule to no-array-constructor; ref #501 (Michael Ficarra)
-* Fix: Make radix rule warn on invalid second parameter (fixes #563) (Nicholas C. Zakas)
-* Docs: Added no-floating-decimal docs (refs #562) (Nicholas C. Zakas)
-* New Rule: no-path-concat (fixes #540) (Nicholas C. Zakas)
-* Docs: Add some missing rule docs (refs #562) (Nicholas C. Zakas)
-* Fix: CLI should not output anything when there are no warnings (fixes #558) (Nicholas C. Zakas)
-* New Rule: no-yoda (fixes #504) (Nicholas C. Zakas)
-* New Rule: consistent-return (fixes #481) (Nicholas C. Zakas)
-* Rewrite configuration documentation to include information about globals (fixes #555) (Nicholas C. Zakas)
-* Allow YAML configuration files (fixes #491) (Nicholas C. Zakas)
-* 0.3.0 (Nicholas C. Zakas)
-
-v0.3.0 - January 20, 2014
-
-* 0.3.0 (Nicholas C. Zakas)
-* Config: Allow comments in JSON configuration files (fixes #492) (Nicholas C. Zakas)
-* Bug: max-len fix to report correct line number (fixes #552) (Nicholas C. Zakas)
-* Build: Use browserify to create browser-ready ESLint (fixes #119) (Nicholas C. Zakas)
-* Docs: Ensure all rules have entry on top-level rules index page (Nicholas C. Zakas)
-* Docs: Add docs for no-fallthrough rule (Nicholas C. Zakas)
-* Update README.md (Peter deHaan)
-* Update README.md (Peter deHaan)
-* Update package.json (Peter deHaan)
-* Docs: Added documentation for semi rule (Nicholas C. Zakas)
-* Build: Reset branch coverage target (Nicholas C. Zakas)
-* Update build system to generate eslint.org during release (Nicholas C. Zakas)
-* Updated setup doc (Nicholas C. Zakas)
-* Fix #525 & #528 (Mangled Deutz)
-* Improve no-negated-in-lhs description (David Bruant)
-* Fixing typo (David Bruant)
-* Update no-new.md (Tamas Fodor)
-* Update no-extra-semi.md (Tamas Fodor)
-* Fixing broken links in documentation (Ilya Volodin)
-* Update about page (Nicholas C. Zakas)
-* Site generation build step and documentation updates to support it (fixes #478) (Nicholas C. Zakas)
-* Change message for brace-style rule (fixes #490) (Nicholas C. Zakas)
-* Add question about ES6 support to FAQ (fixes #530) (Nicholas C. Zakas)
-* Set unlimited number of listeners for event emitter (fixes #524) (Nicholas C. Zakas)
-* Add support for comment events (fixes #531) Add :after events for comments (Nicholas C. Zakas)
-* Add :after events for comments (Nicholas C. Zakas)
-* Allow config files to have any name (fixes #486). (Aparajita Fishman)
-* List available formatters (fixes #533). (Aparajita Fishman)
-* Add support for comment events (fixes #531) (Nicholas C. Zakas)
-* Add Stylish formatter and make it default. Fixes #517 (Sindre Sorhus)
-* Fix missing code exit (Mangled Deutz)
-* Added unit test for calling Config.getConfig with no arguments. (Aparajita Fishman)
-* Typo (Mangled Deutz)
-* Fixed docs typo (Nicholas C. Zakas)
-* Mark functions as used when any method is called on them (Nicholas C. Zakas)
-* Fixed: Config.getConfig is called either with a file path or with no args (fixes #520) (Aparajita Fishman)
-* Fix minor bug in no-empty rule (Nicholas C. Zakas)
-* add more info for failure messages (Nicholas C. Zakas)
-* Add ruleId to all formatters output (fixes #472) (Nicholas C. Zakas)
-* Remove unused code (Nicholas C. Zakas)
-* Correctly handle case with both finally and catch in no-empty (Nicholas C. Zakas)
-* Update documentation for no-unused-vars (Nicholas C. Zakas)
-* Ensure that bound function expressions are reported as being used (fixes #510) (Nicholas C. Zakas)
-* Allow empty catch/finally blocks (fixes #514) and update documentation (fixes #513) (Nicholas C. Zakas)
-* Updated contribution guidelines (Nicholas C. Zakas)
-* Add default setting for no-cond-assign (Nicholas C. Zakas)
-* Add build step to check rule consistency (Nicholas C. Zakas)
-* update docs: explicit cli args are exempt from eslintignore exclusions (Michael Ficarra)
-* fixes #505: no-cond-assign should ignore doubly parenthesised tests (Michael Ficarra)
-* Renamed unnecessary-strict to no-extra-strict (Nicholas C. Zakas)
-* Fixed missing documentation links (Nicholas C. Zakas)
-* Add build task to check for missing docs and tests for rules (Nicholas C. Zakas)
-* Slight reorganization of rule groups (Nicholas C. Zakas)
-* Added one-var and sorted some rules (Nicholas C. Zakas)
-* Updated Travis badge for new location (Nicholas C. Zakas)
-* fixes #494: allow shebangs in processed JS files (Michael Ficarra)
-* fixes #496: lint ignored files when explicitly specified via the CLI (Michael Ficarra)
-* More tests (Ilya Volodin)
-* Upgrade Istanbul (Ilya Volodin)
-* fixes #495: holey arrays cause no-comma-dangle rule to throw (Michael Ficarra)
-* Documentation and minor changes (Ilya Volodin)
-* Adding missing package registration (Ilya Volodin)
-* Adding support for .eslintignore and .jshintignore (Closes #484) (Ilya Volodin)
-* fixes #482: brace-style bug with multiline conditions (Michael Ficarra)
-* Switching Travis to use ESLint (Closes #462) (Ilya Volodin)
-* 0.2.0 (Nicholas C. Zakas)
-
-v0.2.0 - January 1, 2014
-
-* 0.2.0 (Nicholas C. Zakas)
-* Bump code coverage checks (Nicholas C. Zakas)
-* Take care of unreachable code in case statement (Nicholas C. Zakas)
-* Updated rule messaging and added extra tests (Nicholas C. Zakas)
-* Fixing eslint errors and unittests (Ilya Volodin)
-* Rule: max-nested-callbacks (Ian Christian Myers)
-* Fix fall-through rule with nested switch statements (fixes #430) (Nicholas C. Zakas)
-* Fixed trailing comma (Nicholas C. Zakas)
-* Added more tests for func-style (Nicholas C. Zakas)
-* Fixed documentation for func-style (Nicholas C. Zakas)
-* Fixed linting error (Nicholas C. Zakas)
-* Rule to enforce function style (fixes #460) (Nicholas C. Zakas)
-* Rule is off by default. Updated documentation (Ilya Volodin)
-* Rule: sort variables. Closes #457 (Ilya Volodin)
-* Update architecture.md (Nicholas C. Zakas)
-* Change quotes option to avoid-escapes and update docs (fixes #199) (Brandon Payton)
-* Add allow-avoiding-escaped-quotes option to quotes rule (fixes #199) (Brandon Payton)
-* Update no-empty-class.md (Nicholas C. Zakas)
-* Updated titles on all rule documentation (fixes #348) (Nicholas C. Zakas)
-* Fixing eslint errors in codebase (Ilya Volodin)
-* fixes #464: space-infix-ops checks for VariableDeclarator init spacing (Michael Ficarra)
-* Add options to no-unused-vars. Fixes #367 (Ilya Volodin)
-* rename escape function to xmlEscape in checkstyle formatter (Michael Ficarra)
-* The semi rule now reports correct line number (Ian Christian Myers)
-* context.report now takes optional location (Ian Christian Myers)
-* fixes #454: escape values for XML in checkstyle formatter (Michael Ficarra)
-* Add color to Mocha test reporting (Ian Christian Myers)
-* Rule no-nested-ternary (Ian Christian Myers)
-* Fixing no-unused-var and no-redeclare (Ilya Volodin)
-* fixes #449: no-mixed-requires throws TypeError when grouping is enabled (Michael Ficarra)
-* Fixed reported line number for trailing comma error (Ian Christian Myers)
-* Update doc title for quote (Matthew DuVall)
-* fixes #446: join paths without additional delimiters (Michael Ficarra)
-* docs: add documentation for quotes rule (Matthew DuVall)
-* minor style changes to lib/rules/space-infix-ops.js as requested in #444 (Michael Ficarra)
-* remove "function invalid(){ return D }" from some tests (Michael Ficarra)
-* fixes #429: require spaces around infix operators; enabled by default (Michael Ficarra)
-* simplify fix for #442 (Michael Ficarra)
-* Fix broken test, ensure tests get run before a release is pushed (Nicholas C. Zakas)
-* 0.1.4 (Nicholas C. Zakas)
-
-v0.1.4 - December 5, 2013
-
-* 0.1.4 (Nicholas C. Zakas)
-* Add release scripts to package.json (Nicholas C. Zakas)
-* Fixed release error in Makefile (Nicholas C. Zakas)
-* Fix JSHint warnings (Nicholas C. Zakas)
-* Make sure 'default' isn't flagged by no-space-returns-throw rule (fixes #442) (Nicholas C. Zakas)
-* Fixing documentation (Ilya Volodin)
-* Fixing disabling rules with invalid comments Closes #435 (Ilya Volodin)
-* improve assertion on wrong number of errors (Christoph Neuroth)
-* fixes #431: no-unused-expressions should not flag statement level void (Michael Ficarra)
-* fixes #437: fragile no-extend-native rule (Michael Ficarra)
-* change space-* rule documentation headers to be more descriptive (Michael Ficarra)
-* Moved to tabs, added comments, a few more tests (Jamund Ferguson)
-* split GH-332 rule into space-unary-word-ops and space-return-throw-case (Michael Ficarra)
-* fixes #346: validate strings passed to the RegExp constructor (Michael Ficarra)
-* change some documentation extensions from js to md (Michael Ficarra)
-* fixes #332: unary word operators must be followed by whitespace (Michael Ficarra)
-* Add some docs (Jamund Ferguson)
-* DRYing cli tests and improving code coverage (Ilya Volodin)
-* fixes #371: add no-shadow-restricted-names rule (Michael Ficarra)
-* Added Support for Object.defineProperty() checking (Jamund Ferguson)
-* fixes #333: add rule to disallow gratuitously parenthesised expressions (Michael Ficarra)
-* improve rule test coverage (Michael Ficarra)
-* No Extend Native (Jamund Ferguson)
-* change getTokens 2nd/3rd arguments to count tokens, not characters (Michael Ficarra)
-* fixes #416: no-fallthrough flagging last case + reporting wrong line num (Michael Ficarra)
-* fixes #415: fix unnecessary-strict rule false positives (Michael Ficarra)
-* Add missing dependency (Nicholas C. Zakas)
-* Update docs related to running unit tests (Nicholas C. Zakas)
-* Add JSHint as missing dependency (Nicholas C. Zakas)
-* Switch to using ShellJS makefile (fixes #418) (Nicholas C. Zakas)
-* Updated documentation to reflect test changes (refs #417) (Nicholas C. Zakas)
-* Change to eslintTester.addRuleTest (fixes #417) (Nicholas C. Zakas)
-* Fix false positives for no-script-url (fixes #400) (Nicholas C. Zakas)
-* Fix lint warning (Nicholas C. Zakas)
-* Fixing ESLint warnings, introducing Makefile.js (not yet wired in) (Nicholas C. Zakas)
-* fixes #384: include builtin module list to avoid repl dependency (Michael Ficarra)
-* 0.1.3 (Nicholas C. Zakas)
-
-v0.1.3 - November 25, 2013
-
-* 0.1.3 (Nicholas C. Zakas)
-* Updated changelog (Nicholas C. Zakas)
-* Vows is gone. Mocha is now default (Ilya Volodin)
-* fixes #412: remove last remaining false positives in no-spaced-func (Michael Ficarra)
-* fixes #407: no-spaced-func rule flagging non-argument-list spaced parens (Michael Ficarra)
-* Add no-extra-semi to configuration (fixes #386) (Nicholas C. Zakas)
-* Converting formatter tests and core (Ilya Volodin)
-* Don't output anything when there are no errors in compact formatter (fixes #408) (Nicholas C. Zakas)
-* Removing Node 0.11 test - it fails all the time (Nicholas C. Zakas)
-* Completing conversion of rule's tests to mocha (Ilya Volodin)
-* added mocha conversion tests for strict, quote-props and one-var; enhanced one of the invalid one-var tests that was expecting two messages (Michael Paulukonis)
-
-
-v0.1.2 - November 23, 2013
-
-* 0.1.2 (Nicholas C. Zakas)
-* added mocha tests for radix and quotes; fixed some of the internals on quotes from vows annotations (Michael Paulukonis)
-* added tests for regex-spaces, strict, unnecessary-strict; fixed some types in overview/author notes in other tests. (Michael Paulukonis)
-* Converting unittests to mocha (Ilya Volodin)
-* mocha conversions of tests for 'use-isnan' and 'wrap-iife' (Michael Paulukonis)
-* added mocha tests semi.js and wrap-regex.js (Michael Paulukonis)
-* Converting more tests to mocha (Ilya Volodin)
-* Update CONTRIBUTING.md (Nicholas C. Zakas)
-* Cleaning up eslintTester (Ilya Volodin)
-* DRYing unittests and converting them to mocha (Ilya Volodin)
-* Reformatted Gruntfile (Nicholas C. Zakas)
-* Add tests to config load order: base, env, user. (icebox)
-* Fixing indent in gruntfile (Ilya Volodin)
-* Removing jake, adding Grunt, Travis now runs grunt (Ilya Volodin)
-* Add rules per environments to config. (icebox)
-* Add globals property to the environments. (icebox)
-* Fix error about IIFE if the function is in a new (Marsup)
-* Fix a broken link in the docs (Brian J Brennan)
-* Add test coverage for additional cases, fix open paren at beginning of expr (Matthew DuVall)
-* Fixing no-undef for eval use case (Ilya Volodin)
-* fixes #372: disallow negated left operand in `in` operator (Michael Ficarra)
-* Fixing no-self-compare rule to check for operator (Ilya Volodin)
-* bug: open parens in args causes no-spaced-func to trigger (Matthew DuVall)
-* fixes #369: restrict UnaryExpressions to delete in no-unused-expressions (Michael Ficarra)
-* Make sure delete operator isn't flagged as unused expression (fixes #364) (Nicholas C. Zakas)
-* Don't flag ++ or -- as unused expressions (fixes #366) (Nicholas C. Zakas)
-* Ensure that 'use strict' isn't flagged as an unused expression (fixes #361) (Nicholas C. Zakas)
-* Increase test coverage for strict-related rules (refs #361) (Nicholas C. Zakas)
-* Up code coverage numbers (Nicholas C. Zakas)
-* Fixes error in new-cap rule when 'new' is used without a constructor (fixes #360) (Nicholas C. Zakas)
-* added files array in package json (Christian)
-* removed unused jshint dependency (Christian)
-* Add test coverage for new Foo constructor usage (Matt DuVall)
-* Pull code coverage up by removing unused method (Matt DuVall)
-* recognise CallExpression variant of RegExp ctor in no-control-regex rule (Michael Ficarra)
-* Merge smart-eqeqeq into eqeqeq (Matt DuVall)
-* Catch additional cases for a.b, new F, iife (Matt DuVall)
-* 0.2.0-dev (Nicholas C. Zakas)
-* Version 0.1.0 (Nicholas C. Zakas)
-* rule: no-spaced-func disallow spaces between function identifier and application (Matt DuVall)
-
-v0.1.1 - November 09, 2013
-
-* Ensure mergeConfigs() doesn't thrown an error when keys are missing in base config (fixes #358) (Nicholas C. Zakas)
-
-v0.1.0 - November 03, 2013
-
-* Version 0.1.0 (Nicholas C. Zakas)
-* Updated Readme for v0.1.0 (Nicholas C. Zakas)
-* Bump code coverage verification to 95% across the board (Nicholas C. Zakas)
-* Fixed broken links (Nicholas C. Zakas)
-* Added information about runtime rules (Nicholas C. Zakas)
-* Added documentation about configuration files (Nicholas C. Zakas)
-* Added description of -v option (Nicholas C. Zakas)
-* Updated architecture documentation (Nicholas C. Zakas)
-* Fix bug in no-control-regex (fixes #347) (Nicholas C. Zakas)
-* Fix link to architecture doc in readme (azu)
-* Rule: No control characters in regular expressions (fixes #338) (Nicholas C. Zakas)
-* Add escaping \= test (Matt DuVall)
-* Add docs for rule (Matt DuVall)
-* rule: no-div-regex for catching ambiguous division operators in regexes (Matt DuVall)
-* Change context-var to block-scoped-var (Matt DuVall)
-* Implement config.globals (Oleg Grenrus)
-* Add 'config-declared global' test (Oleg Grenrus)
-* Adding ability to separate rules with comma (Ilya Volodin)
-* Added rule for missing 'use strict' (fixes #321) (Nicholas C. Zakas)
-* Fixing unittests and finishing code (Ilya Volodin)
-* Disabling/enabling rules through comments (Ilya Volodin)
-* Rename rule to context-var and add documentation (Matt DuVall)
-* Added link to no-global-strict doc in readme (Nicholas C. Zakas)
-* Add try-catch scoping with tests (Matt DuVall)
-* Fix linting error (Matt DuVall)
-* Store FunctionDeclarations in scope as they can be used as literals (Matt DuVall)
-* Fix to use getTokens and add test for MemberExpression usage (Matt DuVall)
-* rule: block-scope-var to check for variables declared in block-scope (Matt DuVall)
-* no-unused-expressions rule: add test and doc mention for `a && b()` (Michael Ficarra)
-* rule: wrap-regex for parens around regular expression literals (Matt DuVall)
-* fixes #308: implement no-unused-expressions rule; ref. jshint rule W030 (Michael Ficarra)
-* Updated change log script to filter out merge messages (Nicholas C. Zakas)
-* Updated changelog (Nicholas C. Zakas)
-* 0.1.0-dev (Nicholas C. Zakas)
-
-v0.0.9 - October 5, 2013
-
-* Version 0.0.9 release (Nicholas C. Zakas)
-* Added rule for no global strict mode (fixes #322) (Nicholas C. Zakas)
-* Change default on to be errors instead of warnings (fixes #326) (Nicholas C. Zakas)
-* Fixed bug where JSHint was using the wrong file in lint task (Nicholas C. Zakas)
-* Updated docs for no-unused vars rule. (Andrew de Andrade)
-* Removed console.log in tests. (Andrew de Andrade)
-* Added link to roadmap and JSHint feature parity list. (Andrew de Andrade)
-* Fixed warning when unused var declared as param in FunctionExpression/Declaration can be ignored because later param is used (Andrew de Andrade)
-* Rename test for smartereqeqeq.js to smarter-eqeqeq.js (Andrew de Andrade)
-* Keep test filename inline with rule name (Andrew de Andrade)
-* Added further instructions for multiline test cases. (Andrew de Andrade)
-* Protecting private method (Seth McLaughlin)
-* Updating look up algorithm for local config files (Seth McLaughlin)
-* Fixing ESLint errors (Ilya Volodin)
-* Implemented local default config file (Seth McLaughlin)
-* Upgrading escope version and fixing related bugs (Ilya Volodin)
-* Fixing assignment during initialization issue (Ilya Volodin)
-* add plain-English regexp description to no-empty-class rule (Michael Ficarra)
-* fixes #289: no-empty-class flags regexps with... flags (Michael Ficarra)
-* Rule: no-catch-shadow (Ian Christian Myers)
-* Update no-empty for compatibility with esprima@1.0.4 (fixes #290) (Mark Macdonald)
-* Fixing bug with _ in MemberExpression (Ilya Volodin)
-* Rule: no-func-assign (Ian Christian Myers)
-* Fix false warning from no-undef rule (fixes #283) (Mark Macdonald)
-* Adding eslint to jake (Ilya Volodin)
-* Rule no redeclare (Ilya Volodin)
-* Fixing no use before define issues (Ilya Volodin)
-* Rule: no-octal-escape (Ian Christian Myers)
-* Fix for `no-proto` and `no-iterator` false positive (Ian Christian Myers)
-* Rule: no-iterator (Ian Christian Myers)
-* Fixing type in guard-for-in documentation (Ilya Volodin)
-* Rule No use before define (Ilya Volodin)
-* Added documentation for the `no-new` rule (Ian Christian Myers)
-* Added documentation for the `no-eval` rule (Ian Christian Myers)
-* Added documentation for the `no-caller` rule (Ian Christian Myers)
-* Added documentation for the `no-bitwise` rule (Ian Christian Myers)
-* simplify no-empty-class rule (Michael Ficarra)
-* Fix `no-empty-class` false negatives (Ian Christian Myers)
-* Added documentation for the `no-alert` rule (Ian Christian Myers)
-* Added documentation for the `new-parens` rule (Ian Christian Myers)
-* Added documentation for the `max-params` rule (Ian Christian Myers)
-* Added documentation for `max-len` rule (Ian Christian Myers)
-* Created link from rules README.md to no-plusplus.md documentation (Ian Christian Myers)
-* Added documentation for `guard-for-in` rule (Ian Christian Myers)
-* Added documentation for `dot-notation` rule (Ian Christian Myers)
-* Added documentation for `curly` rule (Ian Christian Myers)
-* Updated `camelcase` rule documentation (Ian Christian Myers)
-* Added documentation for `complexity` rule (Ian Christian Myers)
-* Changed `no-dangle` documentation to `no-comma-dangle` (Ian Christian Myers)
-* Rule: no-empty-class (Ian Christian Myers)
-* Increased test coverage for max-depth (Ian Christian Myers)
-* Increased test coverage for no-shadow (Ian Christian Myers)
-* Increased test coverage on no-mixed-requires (Ian Christian Myers)
-* Added docs for eqeqeq and no-with (fixes #262) (Raphael Pigulla)
-* Create camelcase.md (Micah Eschbacher)
-* Fix issues with function in no-unused-vars (Ilya Volodin)
-* Rule: No shadow (Ilya Volodin)
-* fixes #252: semi rule errors on VariableDeclarations in ForInStatements (Michael Ficarra)
-* rule: max-len to lint maximum length of a line (Matt DuVall)
-* Fixes #249 (Raphael Pigulla)
-* Merge branch 'master' of https://github.com/beardtwizzle/eslint (Jonathan Mahoney)
-* Re-add lines that were accidentally deleted from config (Jonathan Mahoney)
-* Add support for pre-defined environment globals (re: #228) (Jonathan Mahoney)
-* Rule: no-else-return (Ian Christian Myers)
-* Re-add lines that were accidentally deleted from config (Jonathan Mahoney)
-* Add support for pre-defined environment globals (re: #228) (Jonathan Mahoney)
-* Fix no-unused-vars to report correct line numbers (Ilya Volodin)
-* Rule: no proto (Ilya Volodin)
-* Rule: No Script URL (Ilya Volodin)
-* Rule: max-depth (Ian Christian Myers)
-* Fix: Error severity for rules with options. (Ian Christian Myers)
-* Rule: No wrap func (Ilya Volodin)
-* bug: Fixes semi rule for VariableDeclaration in ForStatement (Matt DuVall)
-* Individual perf tests for rules (Ilya Volodin)
-* Fix loading rules from a rules directory (Ian Christian Myers)
-* Rule no-mixed-requires (fixes #221) (Raphael Pigulla)
-* bug: Add ForStatement for no-cond-assign check (Matthew DuVall)
-* JSLint XML formatter now escapes special characters in the evidence and reason attributes. (Ian Christian Myers)
-* Formatter: JSLint XML (Ian Christian Myers)
-* Refactored `max-statements` rule. (Ian Christian Myers)
-* Fix tests broken due to new rule message text (James Allardice)
-* Merge branch 'master' into match-jshint-messages (James Allardice)
-* Refactored `one-var` rule. (Ian Christian Myers)
-* split eslint.define into eslint.defineRule and eslint.defineRules (Michael Ficarra)
-* Removed unnecessary rules.js test. (Ian Christian Myers)
-* Rule: one-var (Ian Christian Myers)
-* Rule: No unused variables (Ilya Volodin)
-* expose interface for defining new rules at runtime without fs access (Michael Ficarra)
-* disallow 00 in no-octal rule (Michael Ficarra)
-* Increased test coverage for `lib/cli.js`. (Ian Christian Myers)
-* Increased test coverage for `lib/rules.js` (Ian Christian Myers)
-* Increased test coverage for jUnit formatter. (Ian Christian Myers)
-* scripts/bundle: output bundle+map to /build directory (Michael Ficarra)
-* add test for 0X... hex literals in no-octal tests (Michael Ficarra)
-* fixes #200: no-octals should not see leading-0 floats as violations (Michael Ficarra)
-* add back tests for loading rules from a directory (Michael Ficarra)
-* add back in ability to load rules from a directory (Michael Ficarra)
-* Increased test coverage for `complexity` rule. (Ian Christian Myers)
-* Increased test coverage for `max-params` rule. (Ian Christian Myers)
-* also output source map when generating bundle (Michael Ficarra)
-* Rule: unnecessary-strict (Ian Christian Myers)
-* Improve performance of getTokens (Ilya Volodin)
-* Performance jake task (Ilya Volodin)
-* don't force explicit listing of rules; generate listing for bundle (Michael Ficarra)
-* Rule: no-dupe-keys (Ian Christian Myers)
-* fixes #145: create a browser bundle (Michael Ficarra)
-* Fixing no-caller bug (Ilya Volodin)
-* Check for use of underscore library as an exception for var declarations (Matthew DuVall)
-* Merge branch 'master' of https://github.com/nzakas/eslint into no-underscore-dangle (Matthew DuVall)
-* Fixing spelling (Ilya Volodin)
-* Rule: no-empty-label (Ilya Volodin)
-* Add builtin globals to the global scope (fixes #185) (Mark Macdonald)
-* Rule: no-loop-func (Ilya Volodin)
-* Merge branch 'master' of https://github.com/nzakas/eslint into no-underscore-dangle (Matt DuVall)
-* Use proper node declarations and __proto__ exception (Matt DuVall)
-* Updating no-undef patch (see pull request #164) - Simplify parseBoolean() - Make knowledge of```/*jshint*/``` and ```/*global */``` internal to eslint object - Put user-declared globals in Program scope (Mark Macdonald)
-* Rule: no-eq-null (Ian Christian Myers)
-* fixed broken merge (Raphael Pigulla)
-* fixes #143 (Raphael Pigulla)
-* added consistent-this rule (Raphael Pigulla)
-* Rule: no-sync to encourage async usage (Matt DuVall)
-* Update eslint.json with no-underscore-dangle rule (Matt DuVall)
-* Rule: no-underscore-dangle for func/var declarations (Matt DuVall)
-* Warn on finding the bitwise NOT operator (James Allardice)
-* Updating no-undef patch (see pull request #164) 3. Move parsing of ```/*global */``` and ```/*jshint */``` to eslint.js (Mark Macdonald)
-* Warn on finding a bitwise shift operator (fixes #170) (James Allardice)
-* Fix broken test (James Allardice)
-* Add support for the do-while statement to the curly rule (closes #167) (James Allardice)
-* Removing nasty leading underscores (Patrick Brosset)
-* Added tests and test cases for a few files (Patrick Brosset)
-* CLI: -f now accepts a file path (Ian Christian Myers)
-* Updating no-undef patch (see pull request #164) 1. Move predefined globals to ```conf/environments.json``` 2. Move mixin() to ```lib/util.js``` (Mark Macdonald)
-* Match messages to JS[LH]int where appropriate, and ensure consistent message formatting (closes #163) (James Allardice)
-* Add support for the do-while statement to the curly rule (closes #167) (James Allardice)
-* Removing nasty leading underscores (Patrick Brosset)
-* Added tests and test cases for a few files (Patrick Brosset)
-* Merge branch 'master' of github.com:nzakas/jscheck (Nicholas C. Zakas)
-* Added acceptance criteria for rules to docs (Nicholas C. Zakas)
-* Add no-undef (fixes #6) (Mark Macdonald)
-* Fixing no-self-compare (Ilya Volodin)
-* Rule: No multiline strings (Ilya Volodin)
-* CLI refactor to remove process.exit(), file not found now a regular error message, updated formatters to handle this case (Nicholas C. Zakas)
-* Rule: no-self-compare (Ilya Volodin)
-* Rule: No unnecessary semicolons (fixes #158) (Nicholas C. Zakas)
-* Fixed error in no-ex-assign when return statement as found in catch clause (Nicholas C. Zakas)
-* Rename no-exc-assign to no-ex-assign and add to config (Nicholas C. Zakas)
-* Renamed count-spaces to regex-spaces (Nicholas C. Zakas)
-* Documentation updates (Nicholas C. Zakas)
-* Put all rules into strict mode and update docs accordingly (Nicholas C. Zakas)
-* Merge branch 'master' of github.com:nzakas/jscheck (Nicholas C. Zakas)
-* Ensure getScope() works properly when called from Program node (fixes #148) (Nicholas C. Zakas)
-* Rule: wrap-iife (Ilya Volodin)
-* add additional test for no-cond-assign rule (Stephen Murray)
-* Merge branch 'master' of github.com:nzakas/jscheck (Nicholas C. Zakas)
-* Experimental support for Jake as a build system (fixes #151) (Nicholas C. Zakas)
-* fixes #152 (Stephen Murray)
-* add docs for no-exc-assign (Stephen Murray)
-* Merge branch 'master' of https://github.com/nzakas/eslint into no-new-object-array-literals (Matt DuVall)
-* Merge branch 'master' of https://github.com/nzakas/eslint into count-spaces (Matt DuVall)
-* Added a test for getting global scope from Program node (refs #148) (Nicholas C. Zakas)
-* Add positive test case for `object.Array` (Matthew DuVall)
-* Only support space characters for repetitions (Matthew DuVall)
-* fix line length per code conventions (Stephen Murray)
-* fix indentation per code conventions (Stephen Murray)
-* fixes #149 (Stephen Murray)
-* Rule: no-ternary (Ian Christian Myers)
-* Check that the return statement has an argument before checking its type (James Allardice)
-* Rule: count-spaces for multiple spaces in regular expressions (Matt DuVall)
-* Update eslint.json configuration file for literal rules (Matt DuVall)
-* Created no-label-var rule. (Ian Christian Myers)
-* Rule: no-new-array and no-new-object (Matt DuVall)
-* Added ability to retrieve scope using escope. (Ian Christian Myers)
-* Corrected unused arguments (Patrick Brosset)
-* Reporting function complexity on function:after and using array push/pop to handle nesting (Patrick Brosset)
-* Fixing style issues discovered while npm testing (Patrick Brosset)
-* First draft proposal for a cyclomatic complexity ESLint rule (Patrick Brosset)
-* Corrected file extension on no-plusplus rule documentation. (Ian Christian Myers)
-* Documentation for no-delete-var rule. Closes #129 (Ilya Volodin)
-* Rule: max-statements (Ian Christian Myers)
-* Better documentation for the `no-plusplus` rule. (Ian Christian Myers)
-* Rule: no-plusplus (Ian Christian Myers)
-* Rule: no assignment in return statement (Ilya Volodin)
-* Updating max-params rule name (Ilya Volodin)
-* Rule: Function has too many parameters (Ilya Volodin)
-* Removing merge originals (Ilya Volodin)
-* Rebasing on master (Ilya Volodin)
-* Rule: Variables should not be deleted (Ilya Volodin)
-* Fixes incorrect reporting of missing semicolon (Ian Christian Myers)
-* Rebase against master branch (Mathias Bynens)
-* Rule to warn on use of Math and JSON as functions (James Allardice)
-* Formatter: Checkstyle (Ian Christian Myers)
-* docs: Clean up structure (Mathias Bynens)
-* Merging no-native-reassign and no-redefine (Ilya Volodin)
-* Rule: no native reassignment (Ilya Volodin)
-* 0.0.8-dev (Nicholas C. Zakas)
-* v0.0.7 released (Nicholas C. Zakas)
-* Updated Tests, etc. (Jamund Ferguson)
-* Added jUnit Support (Fixes #16) (Jamund Ferguson)
-
-v0.0.7 - July 22, 2013
-
-* 0.0.7 (Nicholas C. Zakas)
-* Add code coverage checks to npm test and update rule tests to have better coverage (Nicholas C. Zakas)
-* Fixed CLI output on serial programatic executions (Ian Christian Myers)
-* Removes line length from code style convention docs (Josh Perez)
-* Adds escapeRegExp and fixes documentation (Josh Perez)
-* Add quotes rule and test coverage for configuration options (Matt DuVall)
-* Adds templating for lint messages and refactors rules to use it (Josh Perez)
-* Fixes lint rules for unchecked test file (Josh Perez)
-* Changes dotnotation rule to match JSHint style (Josh Perez)
-* Change configInfo to options and add test coverage (Matt DuVall)
-* Merge branch 'master' of https://github.com/nzakas/eslint into optional-args-for-rule (Matt DuVall)
-* Adds dot notation lint rule (Josh Perez)
-* Strip trailing underscores in camelcase rule - Fixes #94 (Patrick Brosset)
-* add mailing list link (Douglas Campos)
-* Strip leading underscores in camelcase rule - Fixes #94 (Patrick Brosset)
-* Created no-dangle rule. (Ian Christian Myers)
-* Fixed rule name (James Allardice)
-* Make sure the callee type is Identifier (James Allardice)
-* Add rule for implied eval via setTimeout/Interval (James Allardice)
-* Fix rule name in config (James Allardice)
-* Fixes #90 -- updates docstrings (Stephen Murray)
-* Fixes issue with fs.existsSync on NodeJS 0.6 (Ian Christian Myers)
-* Fixing -c config option. (Ian Christian Myers)
-* Allow arrays to be passed as multiple args to rule (Matt DuVall)
-* Test to make sure empty case with one line break is safe (Matt DuVall)
-* Rule: The Function constructor is eval (Ilya Volodin)
-* Enabled require("eslint") and exposed out CLI. (Ian Christian Myers)
-* Adds test and fix for issue #82 (Mark Macdonald)
-* Merge branch 'master' of https://github.com/nzakas/eslint into ok (Yusuke Suzuki)
-* Created brace-style rule. (Ian Christian Myers)
-* Formatters can now process multiple files at once (Jamund Ferguson)
-* Rule: Do not use 'new' for side effects (Ilya Volodin)
-* Adds smarter-eqeqeq rule (Josh Perez)
-* Add EditorConfig file for consistent editor/IDE behavior (Jed Hunsaker)
-* Fix the positive case for no-unreachable where there is no return statement at all, or if the return is at the end. Those cases should not return any errors. The error condition was not be checked before throwing the rule error. (Joel Feenstra)
-* Adds test and fix for no-octal on 0 literal (Mark Macdonald)
-* Don't report no-empty warnings when a parent is FunctionExpression / FunctionDeclaration (Yusuke Suzuki)
-* Add api.getAncestors (Yusuke Suzuki)
-* Ensure estraverse version 1.2.0 or later (Yusuke Suzuki)
-* Fixes no-alert lint rule for non identifier calls (Josh Perez)
-* Fixes exception when init is null (Josh Perez)
-* Fixes no-octal check to only check for numbers (Josh Perez)
-* 0.0.7-dev (Nicholas C. Zakas)
-* 0.0.6 (Nicholas C. Zakas)
-* Follow the rule naming conventions (James Allardice)
-* Add rule for missing radix argument to parseInt (James Allardice)
-* Allow return, falls-through comment, and throw for falls-through (Matt DuVall)
-* Merge branch 'master' of https://github.com/nzakas/eslint into rule-fall-through (Matt DuVall)
-* Globals are not good, declare len (Matt DuVall)
-* Rule to add no-fall-through (Matt DuVall)
-
-v0.0.6 - July 16, 2013
-
-* 0.0.6 (Nicholas C. Zakas)
-* Changed semi rule to use tokens instead of source (Nicholas C. Zakas)
-* Renaming new-parens rule (Ilya Volodin)
-* Renaming no-new-wrappers rule and adding tests (Ilya Volodin)
-* Add license URL (Nick Schonning)
-* Remove unused sinon requires (Nick Schonning)
-* Remove redundant JSHint directives (Nick Schonning)
-* Rule: Do not use constructor for wrapper objects (Ilya Volodin)
-* Test node 0.11 unstable but allow it to fail (Nick Schonning)
-* Rule: Constructor should use parentheses (Ilya Volodin)
-* Fix reference to "CSS Lint" in Contributing documentation (Brian McKenna)
-* Add git attributes file for line endings (Andy Hu)
-* Rename to create an 'index' file in GH web view (Evan Goer)
-* Avoid accidentally creating a markdown link (Evan Goer)
-* Add headings and correct internal links (Evan Goer)
-* Add wiki files to docs directory (Evan Goer)
-* Add rules for leading/trailing decimal points (James Allardice)
-* Add rule to prevent comparisons with value NaN (James Allardice)
-* Fixing jshint error (Ilya Volodin)
-* Rule: no octal literals (Ilya Volodin)
-* Rule: no undefined when initializing variables (Ilya Volodin)
-* Updated CONTRIBUTING.md (Nicholas C. Zakas)
-* Make sure namespaces are honored in new-cap (Nicholas C. Zakas)
-* Make sure no-empty also checks for ';;' (Nicholas C. Zakas)
-* Add CLI option to output version (Nicholas C. Zakas)
-* Updated contribution guidelines (Nicholas C. Zakas)
-* Fixing jshint complaints. (Joel Feenstra)
-* Converting to a switch statement and declaring variables. (Joel Feenstra)
-* Added .jshintrc file (until ESLint can lint itself) and cleaned up JSHint warnings (Nicholas C. Zakas)
-* Merge branch 'master' of github.com:nzakas/jscheck (Nicholas C. Zakas)
-* A bit of cleanup (Nicholas C. Zakas)
-* Add unreachable code detection for switch cases and after continue/break. (Joel Feenstra)
-* Add support for detecting unreachable code after a throw or return statement. (Joel Feenstra)
-* Fix curly brace check when an if statement is the alternate. (Joel Feenstra)
-* Check for empty switch statements with no cases. (Matt DuVall)
-* Added CONTRIBUTING.md (Nicholas C. Zakas)
-* Added rule to check for missing semicolons (fixes #9) (Nicholas C. Zakas)
-* Verify that file paths exist before reading the file (Matt DuVall)
-* Added guard-for-in rule (fixes #1) (Nicholas C. Zakas)
-* Run linting with npm test as well (Nicholas C. Zakas)
-* Removed foo.txt (Nicholas C. Zakas)
-* Updated config file with new no-caller ID (Nicholas C. Zakas)
-* Changed name of no-arg to no-caller (Nicholas C. Zakas)
-* Increased test coverage (Nicholas C. Zakas)
-* Got npm test to work with istanbul, huzzah\! (Nicholas C. Zakas)
-* Moved /config to /conf (Nicholas C. Zakas)
-* Added script to auto-generate changelog (Nicholas C. Zakas)
-* Add `quote-props` rule (Mathias Bynens)
-* Cleaned up relationship between bin/eslint, lib/cli.js, and lib/eslint.js (Nicholas C. Zakas)
-* Add problem count to compact formatter (Nicholas C. Zakas)
-* Fix merge conflict (Nicholas C. Zakas)
-* Change reporters to formatters, add format command line option. Also added tests for compact format. (Nicholas C. Zakas)
-* Change reporters to formatters, add format command line option (Nicholas C. Zakas)
-* Start development of 0.0.6-dev (Nicholas C. Zakas)
diff --git a/node_modules/eslint/LICENSE b/node_modules/eslint/LICENSE
deleted file mode 100644
index 7fe552a..0000000
--- a/node_modules/eslint/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright JS Foundation and other contributors, https://js.foundation
-
-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.
diff --git a/node_modules/eslint/README.md b/node_modules/eslint/README.md
deleted file mode 100644
index 1f42b79..0000000
--- a/node_modules/eslint/README.md
+++ /dev/null
@@ -1,254 +0,0 @@
-[![NPM version][npm-image]][npm-url]
-[![build status][travis-image]][travis-url]
-[![Build status][appveyor-image]][appveyor-url]
-[![Test coverage][coveralls-image]][coveralls-url]
-[![Downloads][downloads-image]][downloads-url]
-[![Bountysource](https://www.bountysource.com/badge/tracker?tracker_id=282608)](https://www.bountysource.com/trackers/282608-eslint?utm_source=282608&utm_medium=shield&utm_campaign=TRACKER_BADGE)
-[![Join the chat at https://gitter.im/eslint/eslint](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/eslint/eslint?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Feslint%2Feslint.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Feslint%2Feslint?ref=badge_shield)
-
-# ESLint
-
-[Website](https://eslint.org) |
-[Configuring](https://eslint.org/docs/user-guide/configuring) |
-[Rules](https://eslint.org/docs/rules/) |
-[Contributing](https://eslint.org/docs/developer-guide/contributing) |
-[Reporting Bugs](https://eslint.org/docs/developer-guide/contributing/reporting-bugs) |
-[Code of Conduct](https://js.foundation/community/code-of-conduct) |
-[Twitter](https://twitter.com/geteslint) |
-[Mailing List](https://groups.google.com/group/eslint) |
-[Chat Room](https://gitter.im/eslint/eslint)
-
-ESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code. In many ways, it is similar to JSLint and JSHint with a few exceptions:
-
-* ESLint uses [Espree](https://github.com/eslint/espree) for JavaScript parsing.
-* ESLint uses an AST to evaluate patterns in code.
-* ESLint is completely pluggable, every single rule is a plugin and you can add more at runtime.
-
-## Installation and Usage
-
-Prerequisites: [Node.js](https://nodejs.org/en/) (>=4.x), npm version 2+.
-
-There are two ways to install ESLint: globally and locally.
-
-### Local Installation and Usage
-
-If you want to include ESLint as part of your project's build system, we recommend installing it locally. You can do so using npm:
-
-```
-$ npm install eslint --save-dev
-```
-
-You should then setup a configuration file:
-
-```
-$ ./node_modules/.bin/eslint --init
-```
-
-After that, you can run ESLint on any file or directory like this:
-
-```
-$ ./node_modules/.bin/eslint yourfile.js
-```
-
-Any plugins or shareable configs that you use must also be installed locally to work with a locally-installed ESLint.
-
-### Global Installation and Usage
-
-If you want to make ESLint available to tools that run across all of your projects, we recommend installing ESLint globally. You can do so using npm:
-
-```
-$ npm install -g eslint
-```
-
-You should then setup a configuration file:
-
-```
-$ eslint --init
-```
-
-After that, you can run ESLint on any file or directory like this:
-
-```
-$ eslint yourfile.js
-```
-
-Any plugins or shareable configs that you use must also be installed globally to work with a globally-installed ESLint.
-
-**Note:** `eslint --init` is intended for setting up and configuring ESLint on a per-project basis and will perform a local installation of ESLint and its plugins in the directory in which it is run. If you prefer using a global installation of ESLint, any plugins used in your configuration must also be installed globally.
-
-## Configuration
-
-After running `eslint --init`, you'll have a `.eslintrc` file in your directory. In it, you'll see some rules configured like this:
-
-```json
-{
-    "rules": {
-        "semi": ["error", "always"],
-        "quotes": ["error", "double"]
-    }
-}
-```
-
-The names `"semi"` and `"quotes"` are the names of [rules](https://eslint.org/docs/rules) in ESLint. The first value is the error level of the rule and can be one of these values:
-
-* `"off"` or `0` - turn the rule off
-* `"warn"` or `1` - turn the rule on as a warning (doesn't affect exit code)
-* `"error"` or `2` - turn the rule on as an error (exit code will be 1)
-
-The three error levels allow you fine-grained control over how ESLint applies rules (for more configuration options and details, see the [configuration docs](https://eslint.org/docs/user-guide/configuring)).
-
-## Sponsors
-
-* Site search ([eslint.org](https://eslint.org)) is sponsored by [Algolia](https://www.algolia.com)
-
-## Team
-
-These folks keep the project moving and are resources for help.
-
-### Technical Steering Committee (TSC)
-
-* Nicholas C. Zakas ([@nzakas](https://github.com/nzakas))
-* Ilya Volodin ([@ilyavolodin](https://github.com/ilyavolodin))
-* Brandon Mills ([@btmills](https://github.com/btmills))
-* Gyandeep Singh ([@gyandeeps](https://github.com/gyandeeps))
-* Toru Nagashima ([@mysticatea](https://github.com/mysticatea))
-* Alberto Rodríguez ([@alberto](https://github.com/alberto))
-* Kai Cataldo ([@kaicataldo](https://github.com/kaicataldo))
-* Teddy Katz ([@not-an-aardvark](https://github.com/not-an-aardvark))
-* Kevin Partington ([@platinumazure](https://github.com/platinumazure))
-
-### Development Team
-
-* Mathias Schreck ([@lo1tuma](https://github.com/lo1tuma))
-* Jamund Ferguson ([@xjamundx](https://github.com/xjamundx))
-* Ian VanSchooten ([@ianvs](https://github.com/ianvs))
-* Burak Yiğit Kaya ([@byk](https://github.com/byk))
-* Michael Ficarra ([@michaelficarra](https://github.com/michaelficarra))
-* Mark Pedrotti ([@pedrottimark](https://github.com/pedrottimark))
-* Oleg Gaidarenko ([@markelog](https://github.com/markelog))
-* Mike Sherov ([@mikesherov](https://github.com/mikesherov))
-* Henry Zhu ([@hzoo](https://github.com/hzoo))
-* Marat Dulin ([@mdevils](https://github.com/mdevils))
-* Alexej Yaroshevich ([@zxqfox](https://github.com/zxqfox))
-* Vitor Balocco ([@vitorbal](https://github.com/vitorbal))
-* James Henry ([@JamesHenry](https://github.com/JamesHenry))
-* Reyad Attiyat ([@soda0289](https://github.com/soda0289))
-* 薛定谔的猫 ([@Aladdin-ADD](https://github.com/Aladdin-ADD))
-* Victor Hom ([@VictorHom](https://github.com/VictorHom))
-
-## Releases
-
-We have scheduled releases every two weeks on Friday or Saturday.
-
-## Code of Conduct
-
-ESLint adheres to the [JS Foundation Code of Conduct](https://js.foundation/community/code-of-conduct).
-
-## Filing Issues
-
-Before filing an issue, please be sure to read the guidelines for what you're reporting:
-
-* [Bug Report](https://eslint.org/docs/developer-guide/contributing/reporting-bugs)
-* [Propose a New Rule](https://eslint.org/docs/developer-guide/contributing/new-rules)
-* [Proposing a Rule Change](https://eslint.org/docs/developer-guide/contributing/rule-changes)
-* [Request a Change](https://eslint.org/docs/developer-guide/contributing/changes)
-
-## Semantic Versioning Policy
-
-ESLint follows [semantic versioning](https://semver.org). However, due to the nature of ESLint as a code quality tool, it's not always clear when a minor or major version bump occurs. To help clarify this for everyone, we've defined the following semantic versioning policy for ESLint:
-
-* Patch release (intended to not break your lint build)
-    * A bug fix in a rule that results in ESLint reporting fewer errors.
-    * A bug fix to the CLI or core (including formatters).
-    * Improvements to documentation.
-    * Non-user-facing changes such as refactoring code, adding, deleting, or modifying tests, and increasing test coverage.
-    * Re-releasing after a failed release (i.e., publishing a release that doesn't work for anyone).
-* Minor release (might break your lint build)
-    * A bug fix in a rule that results in ESLint reporting more errors.
-    * A new rule is created.
-    * A new option to an existing rule that does not result in ESLint reporting more errors by default.
-    * An existing rule is deprecated.
-    * A new CLI capability is created.
-    * New capabilities to the public API are added (new classes, new methods, new arguments to existing methods, etc.).
-    * A new formatter is created.
-* Major release (likely to break your lint build)
-    * `eslint:recommended` is updated.
-    * A new option to an existing rule that results in ESLint reporting more errors by default.
-    * An existing formatter is removed.
-    * Part of the public API is removed or changed in an incompatible way.
-
-According to our policy, any minor update may report more errors than the previous release (ex: from a bug fix). As such, we recommend using the tilde (`~`) in `package.json` e.g. `"eslint": "~3.1.0"` to guarantee the results of your builds.
-
-## License
-
-[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Feslint%2Feslint.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Feslint%2Feslint?ref=badge_large)
-
-## Frequently Asked Questions
-
-### How is ESLint different from JSHint?
-
-The most significant difference is that ESLint has pluggable linting rules. That means you can use the rules it comes with, or you can extend it with rules created by others or by yourself!
-
-### How does ESLint performance compare to JSHint?
-
-ESLint is slower than JSHint, usually 2-3x slower on a single file. This is because ESLint uses Espree to construct an AST before it can evaluate your code whereas JSHint evaluates your code as it's being parsed. The speed is also based on the number of rules you enable; the more rules you enable, the slower the process.
-
-Despite being slower, we believe that ESLint is fast enough to replace JSHint without causing significant pain.
-
-### I heard ESLint is going to replace JSCS?
-
-Yes. Since we are solving the same problems, ESLint and JSCS teams have decided to join forces and work together in the development of ESLint instead of competing with each other. You can read more about this in both [ESLint](https://eslint.org/blog/2016/04/welcoming-jscs-to-eslint) and [JSCS](https://medium.com/@markelog/jscs-end-of-the-line-bc9bf0b3fdb2#.u76sx334n) announcements.
-
-### So, should I stop using JSCS and start using ESLint?
-
-Maybe, depending on how much you need it. [JSCS has reached end of life](https://eslint.org/blog/2016/07/jscs-end-of-life), but if it is working for you then there is no reason to move yet. We are still working to smooth the transition. You can see our progress [here](https://github.com/eslint/eslint/milestones/JSCS%20Compatibility). We’ll announce when all of the changes necessary to support JSCS users in ESLint are complete and will start encouraging JSCS users to switch to ESLint at that time.
-
-If you are having issues with JSCS, you can try to move to ESLint. We are focusing our time and energy on JSCS compatibility issues.
-
-### Is ESLint just linting or does it also check style?
-
-ESLint does both traditional linting (looking for problematic patterns) and style checking (enforcement of conventions). You can use it for both.
-
-### Why can't ESLint find my plugins?
-
-ESLint can be [globally or locally installed](#installation-and-usage). If you install ESLint globally, your plugins must also be installed globally; if you install ESLint locally, your plugins must also be installed locally.
-
-If you are trying to run globally, make sure your plugins are installed globally (use `npm ls -g`).
-
-If you are trying to run locally:
-
-* Make sure your plugins (and ESLint) are both in your project's `package.json` as devDependencies (or dependencies, if your project uses ESLint at runtime).
-* Make sure you have run `npm install` and all your dependencies are installed.
-
-In all cases, make sure your plugins' peerDependencies have been installed as well. You can use `npm view eslint-plugin-myplugin peerDepencies` to see what peer dependencies `eslint-plugin-myplugin` has.
-
-### Does ESLint support JSX?
-
-Yes, ESLint natively supports parsing JSX syntax (this must be enabled in [configuration](https://eslint.org/docs/user-guide/configuring)). Please note that supporting JSX syntax *is not* the same as supporting React. React applies specific semantics to JSX syntax that ESLint doesn't recognize. We recommend using [eslint-plugin-react](https://www.npmjs.com/package/eslint-plugin-react) if you are using React and want React semantics.
-
-### What ECMAScript versions does ESLint support?
-
-ESLint has full support for ECMAScript 3, 5 (default), 2015, 2016, 2017, and 2018. You can set your desired ECMAScript syntax (and other settings, like global variables or your target environments) through [configuration](https://eslint.org/docs/user-guide/configuring).
-
-### What about experimental features?
-
-ESLint doesn't natively support experimental ECMAScript language features. You can use [babel-eslint](https://github.com/babel/babel-eslint) to use any option available in Babel.
-
-Once a language feature has been adopted into the ECMAScript standard (stage 4 according to the [TC39 process](https://tc39.github.io/process-document/)), we will accept issues and pull requests related to the new feature, subject to our [contributing guidelines](https://eslint.org/docs/developer-guide/contributing). Until then, please use the appropriate parser and plugin(s) for your experimental feature.
-
-### Where to ask for help?
-
-Join our [Mailing List](https://groups.google.com/group/eslint) or [Chatroom](https://gitter.im/eslint/eslint).
-
-
-[npm-image]: https://img.shields.io/npm/v/eslint.svg?style=flat-square
-[npm-url]: https://www.npmjs.com/package/eslint
-[travis-image]: https://img.shields.io/travis/eslint/eslint/master.svg?style=flat-square
-[travis-url]: https://travis-ci.org/eslint/eslint
-[appveyor-image]: https://ci.appveyor.com/api/projects/status/iwxmiobcvbw3b0av/branch/master?svg=true
-[appveyor-url]: https://ci.appveyor.com/project/nzakas/eslint/branch/master
-[coveralls-image]: https://img.shields.io/coveralls/eslint/eslint/master.svg?style=flat-square
-[coveralls-url]: https://coveralls.io/r/eslint/eslint?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/eslint.svg?style=flat-square
-[downloads-url]: https://www.npmjs.com/package/eslint
diff --git a/node_modules/eslint/bin/eslint.js b/node_modules/eslint/bin/eslint.js
deleted file mode 100755
index 1a29804..0000000
--- a/node_modules/eslint/bin/eslint.js
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/env node
-
-/**
- * @fileoverview Main CLI that is run via the eslint command.
- * @author Nicholas C. Zakas
- */
-
-/* eslint no-console:off */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-const useStdIn = (process.argv.indexOf("--stdin") > -1),
-    init = (process.argv.indexOf("--init") > -1),
-    debug = (process.argv.indexOf("--debug") > -1);
-
-// must do this initialization *before* other requires in order to work
-if (debug) {
-    require("debug").enable("eslint:*,-eslint:code-path");
-}
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-// now we can safely include the other modules that use debug
-const concat = require("concat-stream"),
-    cli = require("../lib/cli"),
-    path = require("path"),
-    fs = require("fs");
-
-//------------------------------------------------------------------------------
-// Execution
-//------------------------------------------------------------------------------
-
-process.once("uncaughtException", err => {
-
-    // lazy load
-    const lodash = require("lodash");
-
-    if (typeof err.messageTemplate === "string" && err.messageTemplate.length > 0) {
-        const template = lodash.template(fs.readFileSync(path.resolve(__dirname, `../messages/${err.messageTemplate}.txt`), "utf-8"));
-        const pkg = require("../package.json");
-
-        console.error("\nOops! Something went wrong! :(");
-        console.error(`\nESLint: ${pkg.version}.\n${template(err.messageData || {})}`);
-    } else {
-
-        console.error(err.message);
-        console.error(err.stack);
-    }
-
-    process.exitCode = 1;
-});
-
-if (useStdIn) {
-    process.stdin.pipe(concat({ encoding: "string" }, text => {
-        process.exitCode = cli.execute(process.argv, text);
-    }));
-} else if (init) {
-    const configInit = require("../lib/config/config-initializer");
-
-    configInit.initializeConfig().then(() => {
-        process.exitCode = 0;
-    }).catch(err => {
-        process.exitCode = 1;
-        console.error(err.message);
-        console.error(err.stack);
-    });
-} else {
-    process.exitCode = cli.execute(process.argv);
-}
diff --git a/node_modules/eslint/conf/blank-script.json b/node_modules/eslint/conf/blank-script.json
deleted file mode 100644
index d7d7d37..0000000
--- a/node_modules/eslint/conf/blank-script.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "type": "Program",
-  "body": [],
-  "sourceType": "script",
-  "range": [
-    0,
-    0
-  ],
-  "loc": {
-    "start": {
-      "line": 0,
-      "column": 0
-    },
-    "end": {
-      "line": 0,
-      "column": 0
-    }
-  },
-  "comments": [],
-  "tokens": []
-}
diff --git a/node_modules/eslint/conf/category-list.json b/node_modules/eslint/conf/category-list.json
deleted file mode 100644
index 5427667..0000000
--- a/node_modules/eslint/conf/category-list.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-    "categories": [
-        { "name": "Possible Errors", "description": "These rules relate to possible syntax or logic errors in JavaScript code:" },
-        { "name": "Best Practices", "description": "These rules relate to better ways of doing things to help you avoid problems:" },
-        { "name": "Strict Mode", "description": "These rules relate to strict mode directives:" },
-        { "name": "Variables", "description": "These rules relate to variable declarations:" },
-        { "name": "Node.js and CommonJS", "description": "These rules relate to code running in Node.js, or in browsers with CommonJS:" },
-        { "name": "Stylistic Issues", "description": "These rules relate to style guidelines, and are therefore quite subjective:" },
-        { "name": "ECMAScript 6", "description": "These rules relate to ES6, also known as ES2015:" }
-    ],
-    "deprecated": {
-        "name": "Deprecated",
-        "description": "These rules have been deprecated in accordance with the [deprecation policy](/docs/user-guide/rule-deprecation), and replaced by newer rules:",
-        "rules": []
-    },
-    "removed": {
-        "name": "Removed",
-        "description": "These rules from older versions of ESLint (before the [deprecation policy](/docs/user-guide/rule-deprecation) existed) have been replaced by newer rules:",
-        "rules": [
-            { "removed": "generator-star", "replacedBy": ["generator-star-spacing"] },
-            { "removed": "global-strict", "replacedBy": ["strict"] },
-            { "removed": "no-arrow-condition", "replacedBy": ["no-confusing-arrow", "no-constant-condition"] },
-            { "removed": "no-comma-dangle", "replacedBy": ["comma-dangle"] },
-            { "removed": "no-empty-class", "replacedBy": ["no-empty-character-class"] },
-            { "removed": "no-empty-label", "replacedBy": ["no-labels"] },
-            { "removed": "no-extra-strict", "replacedBy": ["strict"] },
-            { "removed": "no-reserved-keys", "replacedBy": ["quote-props"] },
-            { "removed": "no-space-before-semi", "replacedBy": ["semi-spacing"] },
-            { "removed": "no-wrap-func", "replacedBy": ["no-extra-parens"] },
-            { "removed": "space-after-function-name", "replacedBy": ["space-before-function-paren"] },
-            { "removed": "space-after-keywords", "replacedBy": ["keyword-spacing"] },
-            { "removed": "space-before-function-parentheses", "replacedBy": ["space-before-function-paren"] },
-            { "removed": "space-before-keywords", "replacedBy": ["keyword-spacing"] },
-            { "removed": "space-in-brackets", "replacedBy": ["object-curly-spacing", "array-bracket-spacing"] },
-            { "removed": "space-return-throw-case", "replacedBy": ["keyword-spacing"] },
-            { "removed": "space-unary-word-ops", "replacedBy": ["space-unary-ops"] },
-            { "removed": "spaced-line-comment", "replacedBy": ["spaced-comment"] }
-        ]
-    }
-}
diff --git a/node_modules/eslint/conf/config-schema.js b/node_modules/eslint/conf/config-schema.js
deleted file mode 100644
index 626e1d5..0000000
--- a/node_modules/eslint/conf/config-schema.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * @fileoverview Defines a schema for configs.
- * @author Sylvan Mably
- */
-
-"use strict";
-
-const baseConfigProperties = {
-    env: { type: "object" },
-    globals: { type: "object" },
-    parser: { type: ["string", "null"] },
-    parserOptions: { type: "object" },
-    plugins: { type: "array" },
-    rules: { type: "object" },
-    settings: { type: "object" },
-
-    ecmaFeatures: { type: "object" } // deprecated; logs a warning when used
-};
-
-const overrideProperties = Object.assign(
-    {},
-    baseConfigProperties,
-    {
-        files: {
-            oneOf: [
-                { type: "string" },
-                {
-                    type: "array",
-                    items: { type: "string" },
-                    minItems: 1
-                }
-            ]
-        },
-        excludedFiles: {
-            oneOf: [
-                { type: "string" },
-                {
-                    type: "array",
-                    items: { type: "string" }
-                }
-            ]
-        }
-    }
-);
-
-const topLevelConfigProperties = Object.assign(
-    {},
-    baseConfigProperties,
-    {
-        extends: { type: ["string", "array"] },
-        root: { type: "boolean" },
-        overrides: {
-            type: "array",
-            items: {
-                type: "object",
-                properties: overrideProperties,
-                required: ["files"],
-                additionalProperties: false
-            }
-        }
-    }
-);
-
-const configSchema = {
-    type: "object",
-    properties: topLevelConfigProperties,
-    additionalProperties: false
-};
-
-module.exports = configSchema;
diff --git a/node_modules/eslint/conf/default-cli-options.js b/node_modules/eslint/conf/default-cli-options.js
deleted file mode 100644
index 7d46d46..0000000
--- a/node_modules/eslint/conf/default-cli-options.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * @fileoverview Default CLIEngineOptions.
- * @author Ian VanSchooten
- */
-
-"use strict";
-
-module.exports = {
-    configFile: null,
-    baseConfig: false,
-    rulePaths: [],
-    useEslintrc: true,
-    envs: [],
-    globals: [],
-    extensions: [".js"],
-    ignore: true,
-    ignorePath: null,
-    cache: false,
-
-    /*
-     * in order to honor the cacheFile option if specified
-     * this option should not have a default value otherwise
-     * it will always be used
-     */
-    cacheLocation: "",
-    cacheFile: ".eslintcache",
-    fix: false,
-    allowInlineConfig: true,
-    reportUnusedDisableDirectives: false
-};
diff --git a/node_modules/eslint/conf/environments.js b/node_modules/eslint/conf/environments.js
deleted file mode 100644
index 13020eb..0000000
--- a/node_modules/eslint/conf/environments.js
+++ /dev/null
@@ -1,233 +0,0 @@
-/**
- * @fileoverview Defines environment settings and globals.
- * @author Elan Shanker
- */
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const globals = require("globals");
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = {
-    builtin: {
-        globals: globals.es5
-    },
-    browser: {
-
-        /*
-         * For backward compatibility.
-         * Remove those on the next major release.
-         */
-        globals: Object.assign(
-            {
-                AutocompleteErrorEvent: false,
-                CDATASection: false,
-                ClientRect: false,
-                ClientRectList: false,
-                CSSAnimation: false,
-                CSSTransition: false,
-                CSSUnknownRule: false,
-                CSSViewportRule: false,
-                Debug: false,
-                DocumentTimeline: false,
-                DOMSettableTokenList: false,
-                ElementTimeControl: false,
-                FederatedCredential: false,
-                FileError: false,
-                HTMLAppletElement: false,
-                HTMLBlockquoteElement: false,
-                HTMLIsIndexElement: false,
-                HTMLKeygenElement: false,
-                HTMLLayerElement: false,
-                IDBEnvironment: false,
-                InputMethodContext: false,
-                MediaKeyError: false,
-                MediaKeyEvent: false,
-                MediaKeys: false,
-                opera: false,
-                PasswordCredential: false,
-                ReadableByteStream: false,
-                SharedKeyframeList: false,
-                showModalDialog: false,
-                SiteBoundCredential: false,
-                SVGAltGlyphDefElement: false,
-                SVGAltGlyphElement: false,
-                SVGAltGlyphItemElement: false,
-                SVGAnimateColorElement: false,
-                SVGAnimatedPathData: false,
-                SVGAnimatedPoints: false,
-                SVGColor: false,
-                SVGColorProfileElement: false,
-                SVGColorProfileRule: false,
-                SVGCSSRule: false,
-                SVGCursorElement: false,
-                SVGDocument: false,
-                SVGElementInstance: false,
-                SVGElementInstanceList: false,
-                SVGEvent: false,
-                SVGExternalResourcesRequired: false,
-                SVGFilterPrimitiveStandardAttributes: false,
-                SVGFitToViewBox: false,
-                SVGFontElement: false,
-                SVGFontFaceElement: false,
-                SVGFontFaceFormatElement: false,
-                SVGFontFaceNameElement: false,
-                SVGFontFaceSrcElement: false,
-                SVGFontFaceUriElement: false,
-                SVGGlyphElement: false,
-                SVGGlyphRefElement: false,
-                SVGHKernElement: false,
-                SVGICCColor: false,
-                SVGLangSpace: false,
-                SVGLocatable: false,
-                SVGMissingGlyphElement: false,
-                SVGPaint: false,
-                SVGPathSeg: false,
-                SVGPathSegArcAbs: false,
-                SVGPathSegArcRel: false,
-                SVGPathSegClosePath: false,
-                SVGPathSegCurvetoCubicAbs: false,
-                SVGPathSegCurvetoCubicRel: false,
-                SVGPathSegCurvetoCubicSmoothAbs: false,
-                SVGPathSegCurvetoCubicSmoothRel: false,
-                SVGPathSegCurvetoQuadraticAbs: false,
-                SVGPathSegCurvetoQuadraticRel: false,
-                SVGPathSegCurvetoQuadraticSmoothAbs: false,
-                SVGPathSegCurvetoQuadraticSmoothRel: false,
-                SVGPathSegLinetoAbs: false,
-                SVGPathSegLinetoHorizontalAbs: false,
-                SVGPathSegLinetoHorizontalRel: false,
-                SVGPathSegLinetoRel: false,
-                SVGPathSegLinetoVerticalAbs: false,
-                SVGPathSegLinetoVerticalRel: false,
-                SVGPathSegList: false,
-                SVGPathSegMovetoAbs: false,
-                SVGPathSegMovetoRel: false,
-                SVGRenderingIntent: false,
-                SVGStylable: false,
-                SVGTests: false,
-                SVGTransformable: false,
-                SVGTRefElement: false,
-                SVGURIReference: false,
-                SVGViewSpec: false,
-                SVGVKernElement: false,
-                SVGZoomAndPan: false,
-                SVGZoomEvent: false,
-                TimeEvent: false,
-                XDomainRequest: false,
-                XMLHttpRequestProgressEvent: false,
-                XPathException: false,
-                XPathNamespace: false,
-                XPathNSResolver: false
-            },
-            globals.browser
-        )
-    },
-    node: {
-
-        /*
-         * For backward compatibility.
-         * Remove those on the next major release.
-         */
-        globals: Object.assign(
-            { arguments: false, GLOBAL: false, root: false },
-            globals.node
-        ),
-        parserOptions: {
-            ecmaFeatures: {
-                globalReturn: true
-            }
-        }
-    },
-    commonjs: {
-        globals: globals.commonjs,
-        parserOptions: {
-            ecmaFeatures: {
-                globalReturn: true
-            }
-        }
-    },
-    "shared-node-browser": {
-        globals: globals["shared-node-browser"]
-    },
-    worker: {
-        globals: globals.worker
-    },
-    amd: {
-        globals: globals.amd
-    },
-    mocha: {
-        globals: globals.mocha
-    },
-    jasmine: {
-        globals: globals.jasmine
-    },
-    jest: {
-
-        /*
-         * For backward compatibility.
-         * Remove those on the next major release.
-         */
-        globals: Object.assign(
-            { check: false, gen: false },
-            globals.jest
-        )
-    },
-    phantomjs: {
-        globals: globals.phantomjs
-    },
-    jquery: {
-        globals: globals.jquery
-    },
-    qunit: {
-        globals: globals.qunit
-    },
-    prototypejs: {
-        globals: globals.prototypejs
-    },
-    shelljs: {
-        globals: globals.shelljs
-    },
-    meteor: {
-        globals: globals.meteor
-    },
-    mongo: {
-        globals: globals.mongo
-    },
-    protractor: {
-        globals: globals.protractor
-    },
-    applescript: {
-        globals: globals.applescript
-    },
-    nashorn: {
-        globals: globals.nashorn
-    },
-    serviceworker: {
-        globals: globals.serviceworker
-    },
-    atomtest: {
-        globals: globals.atomtest
-    },
-    embertest: {
-        globals: globals.embertest
-    },
-    webextensions: {
-        globals: globals.webextensions
-    },
-    es6: {
-        globals: globals.es2015,
-        parserOptions: {
-            ecmaVersion: 6
-        }
-    },
-    greasemonkey: {
-        globals: globals.greasemonkey
-    }
-};
diff --git a/node_modules/eslint/conf/eslint-all.js b/node_modules/eslint/conf/eslint-all.js
deleted file mode 100644
index 43db54f..0000000
--- a/node_modules/eslint/conf/eslint-all.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * @fileoverview Config to enable all rules.
- * @author Robert Fletcher
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const load = require("../lib/load-rules"),
-    Rules = require("../lib/rules");
-const rules = new Rules();
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-const enabledRules = Object.keys(load()).reduce((result, ruleId) => {
-    if (!rules.get(ruleId).meta.deprecated) {
-        result[ruleId] = "error";
-    }
-    return result;
-}, {});
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = { rules: enabledRules };
diff --git a/node_modules/eslint/conf/eslint-recommended.js b/node_modules/eslint/conf/eslint-recommended.js
deleted file mode 100644
index 0acee23..0000000
--- a/node_modules/eslint/conf/eslint-recommended.js
+++ /dev/null
@@ -1,271 +0,0 @@
-/**
- * @fileoverview Configuration applied when a user configuration extends from
- * eslint:recommended.
- * @author Nicholas C. Zakas
- */
-
-"use strict";
-
-/* eslint sort-keys: ["error", "asc"] */
-
-module.exports = {
-    rules: {
-        "accessor-pairs": "off",
-        "array-bracket-newline": "off",
-        "array-bracket-spacing": "off",
-        "array-callback-return": "off",
-        "array-element-newline": "off",
-        "arrow-body-style": "off",
-        "arrow-parens": "off",
-        "arrow-spacing": "off",
-        "block-scoped-var": "off",
-        "block-spacing": "off",
-        "brace-style": "off",
-        "callback-return": "off",
-        camelcase: "off",
-        "capitalized-comments": "off",
-        "class-methods-use-this": "off",
-        "comma-dangle": "off",
-        "comma-spacing": "off",
-        "comma-style": "off",
-        complexity: "off",
-        "computed-property-spacing": "off",
-        "consistent-return": "off",
-        "consistent-this": "off",
-        "constructor-super": "error",
-        curly: "off",
-        "default-case": "off",
-        "dot-location": "off",
-        "dot-notation": "off",
-        "eol-last": "off",
-        eqeqeq: "off",
-        "for-direction": "off",
-        "func-call-spacing": "off",
-        "func-name-matching": "off",
-        "func-names": "off",
-        "func-style": "off",
-        "function-paren-newline": "off",
-        "generator-star-spacing": "off",
-        "getter-return": "off",
-        "global-require": "off",
-        "guard-for-in": "off",
-        "handle-callback-err": "off",
-        "id-blacklist": "off",
-        "id-length": "off",
-        "id-match": "off",
-        "implicit-arrow-linebreak": "off",
-        indent: "off",
-        "indent-legacy": "off",
-        "init-declarations": "off",
-        "jsx-quotes": "off",
-        "key-spacing": "off",
-        "keyword-spacing": "off",
-        "line-comment-position": "off",
-        "linebreak-style": "off",
-        "lines-around-comment": "off",
-        "lines-around-directive": "off",
-        "lines-between-class-members": "off",
-        "max-depth": "off",
-        "max-len": "off",
-        "max-lines": "off",
-        "max-nested-callbacks": "off",
-        "max-params": "off",
-        "max-statements": "off",
-        "max-statements-per-line": "off",
-        "multiline-comment-style": "off",
-        "multiline-ternary": "off",
-        "new-cap": "off",
-        "new-parens": "off",
-        "newline-after-var": "off",
-        "newline-before-return": "off",
-        "newline-per-chained-call": "off",
-        "no-alert": "off",
-        "no-array-constructor": "off",
-        "no-await-in-loop": "off",
-        "no-bitwise": "off",
-        "no-buffer-constructor": "off",
-        "no-caller": "off",
-        "no-case-declarations": "error",
-        "no-catch-shadow": "off",
-        "no-class-assign": "error",
-        "no-compare-neg-zero": "error",
-        "no-cond-assign": "error",
-        "no-confusing-arrow": "off",
-        "no-console": "error",
-        "no-const-assign": "error",
-        "no-constant-condition": "error",
-        "no-continue": "off",
-        "no-control-regex": "error",
-        "no-debugger": "error",
-        "no-delete-var": "error",
-        "no-div-regex": "off",
-        "no-dupe-args": "error",
-        "no-dupe-class-members": "error",
-        "no-dupe-keys": "error",
-        "no-duplicate-case": "error",
-        "no-duplicate-imports": "off",
-        "no-else-return": "off",
-        "no-empty": "error",
-        "no-empty-character-class": "error",
-        "no-empty-function": "off",
-        "no-empty-pattern": "error",
-        "no-eq-null": "off",
-        "no-eval": "off",
-        "no-ex-assign": "error",
-        "no-extend-native": "off",
-        "no-extra-bind": "off",
-        "no-extra-boolean-cast": "error",
-        "no-extra-label": "off",
-        "no-extra-parens": "off",
-        "no-extra-semi": "error",
-        "no-fallthrough": "error",
-        "no-floating-decimal": "off",
-        "no-func-assign": "error",
-        "no-global-assign": "error",
-        "no-implicit-coercion": "off",
-        "no-implicit-globals": "off",
-        "no-implied-eval": "off",
-        "no-inline-comments": "off",
-        "no-inner-declarations": "error",
-        "no-invalid-regexp": "error",
-        "no-invalid-this": "off",
-        "no-irregular-whitespace": "error",
-        "no-iterator": "off",
-        "no-label-var": "off",
-        "no-labels": "off",
-        "no-lone-blocks": "off",
-        "no-lonely-if": "off",
-        "no-loop-func": "off",
-        "no-magic-numbers": "off",
-        "no-mixed-operators": "off",
-        "no-mixed-requires": "off",
-        "no-mixed-spaces-and-tabs": "error",
-        "no-multi-assign": "off",
-        "no-multi-spaces": "off",
-        "no-multi-str": "off",
-        "no-multiple-empty-lines": "off",
-        "no-native-reassign": "off",
-        "no-negated-condition": "off",
-        "no-negated-in-lhs": "off",
-        "no-nested-ternary": "off",
-        "no-new": "off",
-        "no-new-func": "off",
-        "no-new-object": "off",
-        "no-new-require": "off",
-        "no-new-symbol": "error",
-        "no-new-wrappers": "off",
-        "no-obj-calls": "error",
-        "no-octal": "error",
-        "no-octal-escape": "off",
-        "no-param-reassign": "off",
-        "no-path-concat": "off",
-        "no-plusplus": "off",
-        "no-process-env": "off",
-        "no-process-exit": "off",
-        "no-proto": "off",
-        "no-prototype-builtins": "off",
-        "no-redeclare": "error",
-        "no-regex-spaces": "error",
-        "no-restricted-globals": "off",
-        "no-restricted-imports": "off",
-        "no-restricted-modules": "off",
-        "no-restricted-properties": "off",
-        "no-restricted-syntax": "off",
-        "no-return-assign": "off",
-        "no-return-await": "off",
-        "no-script-url": "off",
-        "no-self-assign": "error",
-        "no-self-compare": "off",
-        "no-sequences": "off",
-        "no-shadow": "off",
-        "no-shadow-restricted-names": "off",
-        "no-spaced-func": "off",
-        "no-sparse-arrays": "error",
-        "no-sync": "off",
-        "no-tabs": "off",
-        "no-template-curly-in-string": "off",
-        "no-ternary": "off",
-        "no-this-before-super": "error",
-        "no-throw-literal": "off",
-        "no-trailing-spaces": "off",
-        "no-undef": "error",
-        "no-undef-init": "off",
-        "no-undefined": "off",
-        "no-underscore-dangle": "off",
-        "no-unexpected-multiline": "error",
-        "no-unmodified-loop-condition": "off",
-        "no-unneeded-ternary": "off",
-        "no-unreachable": "error",
-        "no-unsafe-finally": "error",
-        "no-unsafe-negation": "error",
-        "no-unused-expressions": "off",
-        "no-unused-labels": "error",
-        "no-unused-vars": "error",
-        "no-use-before-define": "off",
-        "no-useless-call": "off",
-        "no-useless-computed-key": "off",
-        "no-useless-concat": "off",
-        "no-useless-constructor": "off",
-        "no-useless-escape": "error",
-        "no-useless-rename": "off",
-        "no-useless-return": "off",
-        "no-var": "off",
-        "no-void": "off",
-        "no-warning-comments": "off",
-        "no-whitespace-before-property": "off",
-        "no-with": "off",
-        "nonblock-statement-body-position": "off",
-        "object-curly-newline": "off",
-        "object-curly-spacing": "off",
-        "object-property-newline": "off",
-        "object-shorthand": "off",
-        "one-var": "off",
-        "one-var-declaration-per-line": "off",
-        "operator-assignment": "off",
-        "operator-linebreak": "off",
-        "padded-blocks": "off",
-        "padding-line-between-statements": "off",
-        "prefer-arrow-callback": "off",
-        "prefer-const": "off",
-        "prefer-destructuring": "off",
-        "prefer-numeric-literals": "off",
-        "prefer-promise-reject-errors": "off",
-        "prefer-reflect": "off",
-        "prefer-rest-params": "off",
-        "prefer-spread": "off",
-        "prefer-template": "off",
-        "quote-props": "off",
-        quotes: "off",
-        radix: "off",
-        "require-await": "off",
-        "require-jsdoc": "off",
-        "require-yield": "error",
-        "rest-spread-spacing": "off",
-        semi: "off",
-        "semi-spacing": "off",
-        "semi-style": "off",
-        "sort-imports": "off",
-        "sort-keys": "off",
-        "sort-vars": "off",
-        "space-before-blocks": "off",
-        "space-before-function-paren": "off",
-        "space-in-parens": "off",
-        "space-infix-ops": "off",
-        "space-unary-ops": "off",
-        "spaced-comment": "off",
-        strict: "off",
-        "switch-colon-spacing": "off",
-        "symbol-description": "off",
-        "template-curly-spacing": "off",
-        "template-tag-spacing": "off",
-        "unicode-bom": "off",
-        "use-isnan": "error",
-        "valid-jsdoc": "off",
-        "valid-typeof": "error",
-        "vars-on-top": "off",
-        "wrap-iife": "off",
-        "wrap-regex": "off",
-        "yield-star-spacing": "off",
-        yoda: "off"
-    }
-};
diff --git a/node_modules/eslint/conf/replacements.json b/node_modules/eslint/conf/replacements.json
deleted file mode 100644
index c047811..0000000
--- a/node_modules/eslint/conf/replacements.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-    "rules": {
-        "generator-star": ["generator-star-spacing"],
-        "global-strict": ["strict"],
-        "no-arrow-condition": ["no-confusing-arrow", "no-constant-condition"],
-        "no-comma-dangle": ["comma-dangle"],
-        "no-empty-class": ["no-empty-character-class"],
-        "no-empty-label": ["no-labels"],
-        "no-extra-strict": ["strict"],
-        "no-reserved-keys": ["quote-props"],
-        "no-space-before-semi": ["semi-spacing"],
-        "no-wrap-func": ["no-extra-parens"],
-        "space-after-function-name": ["space-before-function-paren"],
-        "space-after-keywords": ["keyword-spacing"],
-        "space-before-function-parentheses": ["space-before-function-paren"],
-        "space-before-keywords": ["keyword-spacing"],
-        "space-in-brackets": ["object-curly-spacing", "array-bracket-spacing", "computed-property-spacing"],
-        "space-return-throw-case": ["keyword-spacing"],
-        "space-unary-word-ops": ["space-unary-ops"],
-        "spaced-line-comment": ["spaced-comment"]
-    }
-}
diff --git a/node_modules/eslint/lib/api.js b/node_modules/eslint/lib/api.js
deleted file mode 100644
index 0a0832a..0000000
--- a/node_modules/eslint/lib/api.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * @fileoverview Expose out ESLint and CLI to require.
- * @author Ian Christian Myers
- */
-
-"use strict";
-
-const Linter = require("./linter");
-
-module.exports = {
-    linter: new Linter(),
-    Linter,
-    CLIEngine: require("./cli-engine"),
-    RuleTester: require("./testers/rule-tester"),
-    SourceCode: require("./util/source-code")
-};
diff --git a/node_modules/eslint/lib/ast-utils.js b/node_modules/eslint/lib/ast-utils.js
deleted file mode 100644
index a188c7f..0000000
--- a/node_modules/eslint/lib/ast-utils.js
+++ /dev/null
@@ -1,1346 +0,0 @@
-/**
- * @fileoverview Common utils for AST.
- * @author Gyandeep Singh
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const esutils = require("esutils");
-const espree = require("espree");
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-const anyFunctionPattern = /^(?:Function(?:Declaration|Expression)|ArrowFunctionExpression)$/;
-const anyLoopPattern = /^(?:DoWhile|For|ForIn|ForOf|While)Statement$/;
-const arrayOrTypedArrayPattern = /Array$/;
-const arrayMethodPattern = /^(?:every|filter|find|findIndex|forEach|map|some)$/;
-const bindOrCallOrApplyPattern = /^(?:bind|call|apply)$/;
-const breakableTypePattern = /^(?:(?:Do)?While|For(?:In|Of)?|Switch)Statement$/;
-const thisTagPattern = /^[\s*]*@this/m;
-
-
-const COMMENTS_IGNORE_PATTERN = /^\s*(?:eslint|jshint\s+|jslint\s+|istanbul\s+|globals?\s+|exported\s+|jscs)/;
-const LINEBREAKS = new Set(["\r\n", "\r", "\n", "\u2028", "\u2029"]);
-const LINEBREAK_MATCHER = /\r\n|[\r\n\u2028\u2029]/;
-const SHEBANG_MATCHER = /^#!([^\r\n]+)/;
-
-// A set of node types that can contain a list of statements
-const STATEMENT_LIST_PARENTS = new Set(["Program", "BlockStatement", "SwitchCase"]);
-
-/**
- * Checks reference if is non initializer and writable.
- * @param {Reference} reference - A reference to check.
- * @param {int} index - The index of the reference in the references.
- * @param {Reference[]} references - The array that the reference belongs to.
- * @returns {boolean} Success/Failure
- * @private
- */
-function isModifyingReference(reference, index, references) {
-    const identifier = reference.identifier;
-
-    /*
-     * Destructuring assignments can have multiple default value, so
-     * possibly there are multiple writeable references for the same
-     * identifier.
-     */
-    const modifyingDifferentIdentifier = index === 0 ||
-        references[index - 1].identifier !== identifier;
-
-    return (identifier &&
-        reference.init === false &&
-        reference.isWrite() &&
-        modifyingDifferentIdentifier
-    );
-}
-
-/**
- * Checks whether the given string starts with uppercase or not.
- *
- * @param {string} s - The string to check.
- * @returns {boolean} `true` if the string starts with uppercase.
- */
-function startsWithUpperCase(s) {
-    return s[0] !== s[0].toLocaleLowerCase();
-}
-
-/**
- * Checks whether or not a node is a constructor.
- * @param {ASTNode} node - A function node to check.
- * @returns {boolean} Wehether or not a node is a constructor.
- */
-function isES5Constructor(node) {
-    return (node.id && startsWithUpperCase(node.id.name));
-}
-
-/**
- * Finds a function node from ancestors of a node.
- * @param {ASTNode} node - A start node to find.
- * @returns {Node|null} A found function node.
- */
-function getUpperFunction(node) {
-    for (let currentNode = node; currentNode; currentNode = currentNode.parent) {
-        if (anyFunctionPattern.test(currentNode.type)) {
-            return currentNode;
-        }
-    }
-    return null;
-}
-
-/**
- * Checks whether a given node is a function node or not.
- * The following types are function nodes:
- *
- * - ArrowFunctionExpression
- * - FunctionDeclaration
- * - FunctionExpression
- *
- * @param {ASTNode|null} node - A node to check.
- * @returns {boolean} `true` if the node is a function node.
- */
-function isFunction(node) {
-    return Boolean(node && anyFunctionPattern.test(node.type));
-}
-
-/**
- * Checks whether a given node is a loop node or not.
- * The following types are loop nodes:
- *
- * - DoWhileStatement
- * - ForInStatement
- * - ForOfStatement
- * - ForStatement
- * - WhileStatement
- *
- * @param {ASTNode|null} node - A node to check.
- * @returns {boolean} `true` if the node is a loop node.
- */
-function isLoop(node) {
-    return Boolean(node && anyLoopPattern.test(node.type));
-}
-
-/**
- * Checks whether the given node is in a loop or not.
- *
- * @param {ASTNode} node - The node to check.
- * @returns {boolean} `true` if the node is in a loop.
- */
-function isInLoop(node) {
-    for (let currentNode = node; currentNode && !isFunction(currentNode); currentNode = currentNode.parent) {
-        if (isLoop(currentNode)) {
-            return true;
-        }
-    }
-
-    return false;
-}
-
-/**
- * Checks whether or not a node is `null` or `undefined`.
- * @param {ASTNode} node - A node to check.
- * @returns {boolean} Whether or not the node is a `null` or `undefined`.
- * @public
- */
-function isNullOrUndefined(node) {
-    return (
-        module.exports.isNullLiteral(node) ||
-        (node.type === "Identifier" && node.name === "undefined") ||
-        (node.type === "UnaryExpression" && node.operator === "void")
-    );
-}
-
-/**
- * Checks whether or not a node is callee.
- * @param {ASTNode} node - A node to check.
- * @returns {boolean} Whether or not the node is callee.
- */
-function isCallee(node) {
-    return node.parent.type === "CallExpression" && node.parent.callee === node;
-}
-
-/**
- * Checks whether or not a node is `Reflect.apply`.
- * @param {ASTNode} node - A node to check.
- * @returns {boolean} Whether or not the node is a `Reflect.apply`.
- */
-function isReflectApply(node) {
-    return (
-        node.type === "MemberExpression" &&
-        node.object.type === "Identifier" &&
-        node.object.name === "Reflect" &&
-        node.property.type === "Identifier" &&
-        node.property.name === "apply" &&
-        node.computed === false
-    );
-}
-
-/**
- * Checks whether or not a node is `Array.from`.
- * @param {ASTNode} node - A node to check.
- * @returns {boolean} Whether or not the node is a `Array.from`.
- */
-function isArrayFromMethod(node) {
-    return (
-        node.type === "MemberExpression" &&
-        node.object.type === "Identifier" &&
-        arrayOrTypedArrayPattern.test(node.object.name) &&
-        node.property.type === "Identifier" &&
-        node.property.name === "from" &&
-        node.computed === false
-    );
-}
-
-/**
- * Checks whether or not a node is a method which has `thisArg`.
- * @param {ASTNode} node - A node to check.
- * @returns {boolean} Whether or not the node is a method which has `thisArg`.
- */
-function isMethodWhichHasThisArg(node) {
-    for (
-        let currentNode = node;
-        currentNode.type === "MemberExpression" && !currentNode.computed;
-        currentNode = currentNode.property
-    ) {
-        if (currentNode.property.type === "Identifier") {
-            return arrayMethodPattern.test(currentNode.property.name);
-        }
-    }
-
-    return false;
-}
-
-/**
- * Creates the negate function of the given function.
- * @param {Function} f - The function to negate.
- * @returns {Function} Negated function.
- */
-function negate(f) {
-    return token => !f(token);
-}
-
-/**
- * Checks whether or not a node has a `@this` tag in its comments.
- * @param {ASTNode} node - A node to check.
- * @param {SourceCode} sourceCode - A SourceCode instance to get comments.
- * @returns {boolean} Whether or not the node has a `@this` tag in its comments.
- */
-function hasJSDocThisTag(node, sourceCode) {
-    const jsdocComment = sourceCode.getJSDocComment(node);
-
-    if (jsdocComment && thisTagPattern.test(jsdocComment.value)) {
-        return true;
-    }
-
-    // Checks `@this` in its leading comments for callbacks,
-    // because callbacks don't have its JSDoc comment.
-    // e.g.
-    //     sinon.test(/* @this sinon.Sandbox */function() { this.spy(); });
-    return sourceCode.getCommentsBefore(node).some(comment => thisTagPattern.test(comment.value));
-}
-
-/**
- * Determines if a node is surrounded by parentheses.
- * @param {SourceCode} sourceCode The ESLint source code object
- * @param {ASTNode} node The node to be checked.
- * @returns {boolean} True if the node is parenthesised.
- * @private
- */
-function isParenthesised(sourceCode, node) {
-    const previousToken = sourceCode.getTokenBefore(node),
-        nextToken = sourceCode.getTokenAfter(node);
-
-    return Boolean(previousToken && nextToken) &&
-        previousToken.value === "(" && previousToken.range[1] <= node.range[0] &&
-        nextToken.value === ")" && nextToken.range[0] >= node.range[1];
-}
-
-/**
- * Checks if the given token is an arrow token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is an arrow token.
- */
-function isArrowToken(token) {
-    return token.value === "=>" && token.type === "Punctuator";
-}
-
-/**
- * Checks if the given token is a comma token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is a comma token.
- */
-function isCommaToken(token) {
-    return token.value === "," && token.type === "Punctuator";
-}
-
-/**
- * Checks if the given token is a semicolon token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is a semicolon token.
- */
-function isSemicolonToken(token) {
-    return token.value === ";" && token.type === "Punctuator";
-}
-
-/**
- * Checks if the given token is a colon token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is a colon token.
- */
-function isColonToken(token) {
-    return token.value === ":" && token.type === "Punctuator";
-}
-
-/**
- * Checks if the given token is an opening parenthesis token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is an opening parenthesis token.
- */
-function isOpeningParenToken(token) {
-    return token.value === "(" && token.type === "Punctuator";
-}
-
-/**
- * Checks if the given token is a closing parenthesis token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is a closing parenthesis token.
- */
-function isClosingParenToken(token) {
-    return token.value === ")" && token.type === "Punctuator";
-}
-
-/**
- * Checks if the given token is an opening square bracket token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is an opening square bracket token.
- */
-function isOpeningBracketToken(token) {
-    return token.value === "[" && token.type === "Punctuator";
-}
-
-/**
- * Checks if the given token is a closing square bracket token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is a closing square bracket token.
- */
-function isClosingBracketToken(token) {
-    return token.value === "]" && token.type === "Punctuator";
-}
-
-/**
- * Checks if the given token is an opening brace token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is an opening brace token.
- */
-function isOpeningBraceToken(token) {
-    return token.value === "{" && token.type === "Punctuator";
-}
-
-/**
- * Checks if the given token is a closing brace token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is a closing brace token.
- */
-function isClosingBraceToken(token) {
-    return token.value === "}" && token.type === "Punctuator";
-}
-
-/**
- * Checks if the given token is a comment token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is a comment token.
- */
-function isCommentToken(token) {
-    return token.type === "Line" || token.type === "Block" || token.type === "Shebang";
-}
-
-/**
- * Checks if the given token is a keyword token or not.
- *
- * @param {Token} token - The token to check.
- * @returns {boolean} `true` if the token is a keyword token.
- */
-function isKeywordToken(token) {
-    return token.type === "Keyword";
-}
-
-/**
- * Gets the `(` token of the given function node.
- *
- * @param {ASTNode} node - The function node to get.
- * @param {SourceCode} sourceCode - The source code object to get tokens.
- * @returns {Token} `(` token.
- */
-function getOpeningParenOfParams(node, sourceCode) {
-    return node.id
-        ? sourceCode.getTokenAfter(node.id, isOpeningParenToken)
-        : sourceCode.getFirstToken(node, isOpeningParenToken);
-}
-
-/**
- * Creates a version of the LINEBREAK_MATCHER regex with the global flag.
- * Global regexes are mutable, so this needs to be a function instead of a constant.
- * @returns {RegExp} A global regular expression that matches line terminators
- */
-function createGlobalLinebreakMatcher() {
-    return new RegExp(LINEBREAK_MATCHER.source, "g");
-}
-
-/**
- * Checks whether or not the tokens of two given nodes are same.
- * @param {ASTNode} left - A node 1 to compare.
- * @param {ASTNode} right - A node 2 to compare.
- * @param {SourceCode} sourceCode - The ESLint source code object.
- * @returns {boolean} the source code for the given node.
- */
-function equalTokens(left, right, sourceCode) {
-    const tokensL = sourceCode.getTokens(left);
-    const tokensR = sourceCode.getTokens(right);
-
-    if (tokensL.length !== tokensR.length) {
-        return false;
-    }
-    for (let i = 0; i < tokensL.length; ++i) {
-        if (tokensL[i].type !== tokensR[i].type ||
-            tokensL[i].value !== tokensR[i].value
-        ) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = {
-    COMMENTS_IGNORE_PATTERN,
-    LINEBREAKS,
-    LINEBREAK_MATCHER,
-    SHEBANG_MATCHER,
-    STATEMENT_LIST_PARENTS,
-
-    /**
-     * Determines whether two adjacent tokens are on the same line.
-     * @param {Object} left - The left token object.
-     * @param {Object} right - The right token object.
-     * @returns {boolean} Whether or not the tokens are on the same line.
-     * @public
-     */
-    isTokenOnSameLine(left, right) {
-        return left.loc.end.line === right.loc.start.line;
-    },
-
-    isNullOrUndefined,
-    isCallee,
-    isES5Constructor,
-    getUpperFunction,
-    isFunction,
-    isLoop,
-    isInLoop,
-    isArrayFromMethod,
-    isParenthesised,
-    createGlobalLinebreakMatcher,
-    equalTokens,
-
-    isArrowToken,
-    isClosingBraceToken,
-    isClosingBracketToken,
-    isClosingParenToken,
-    isColonToken,
-    isCommaToken,
-    isCommentToken,
-    isKeywordToken,
-    isNotClosingBraceToken: negate(isClosingBraceToken),
-    isNotClosingBracketToken: negate(isClosingBracketToken),
-    isNotClosingParenToken: negate(isClosingParenToken),
-    isNotColonToken: negate(isColonToken),
-    isNotCommaToken: negate(isCommaToken),
-    isNotOpeningBraceToken: negate(isOpeningBraceToken),
-    isNotOpeningBracketToken: negate(isOpeningBracketToken),
-    isNotOpeningParenToken: negate(isOpeningParenToken),
-    isNotSemicolonToken: negate(isSemicolonToken),
-    isOpeningBraceToken,
-    isOpeningBracketToken,
-    isOpeningParenToken,
-    isSemicolonToken,
-
-    /**
-     * Checks whether or not a given node is a string literal.
-     * @param {ASTNode} node - A node to check.
-     * @returns {boolean} `true` if the node is a string literal.
-     */
-    isStringLiteral(node) {
-        return (
-            (node.type === "Literal" && typeof node.value === "string") ||
-            node.type === "TemplateLiteral"
-        );
-    },
-
-    /**
-     * Checks whether a given node is a breakable statement or not.
-     * The node is breakable if the node is one of the following type:
-     *
-     * - DoWhileStatement
-     * - ForInStatement
-     * - ForOfStatement
-     * - ForStatement
-     * - SwitchStatement
-     * - WhileStatement
-     *
-     * @param {ASTNode} node - A node to check.
-     * @returns {boolean} `true` if the node is breakable.
-     */
-    isBreakableStatement(node) {
-        return breakableTypePattern.test(node.type);
-    },
-
-    /**
-     * Gets the label if the parent node of a given node is a LabeledStatement.
-     *
-     * @param {ASTNode} node - A node to get.
-     * @returns {string|null} The label or `null`.
-     */
-    getLabel(node) {
-        if (node.parent.type === "LabeledStatement") {
-            return node.parent.label.name;
-        }
-        return null;
-    },
-
-    /**
-     * Gets references which are non initializer and writable.
-     * @param {Reference[]} references - An array of references.
-     * @returns {Reference[]} An array of only references which are non initializer and writable.
-     * @public
-     */
-    getModifyingReferences(references) {
-        return references.filter(isModifyingReference);
-    },
-
-    /**
-     * Validate that a string passed in is surrounded by the specified character
-     * @param  {string} val The text to check.
-     * @param  {string} character The character to see if it's surrounded by.
-     * @returns {boolean} True if the text is surrounded by the character, false if not.
-     * @private
-     */
-    isSurroundedBy(val, character) {
-        return val[0] === character && val[val.length - 1] === character;
-    },
-
-    /**
-     * Returns whether the provided node is an ESLint directive comment or not
-     * @param {Line|Block} node The comment token to be checked
-     * @returns {boolean} `true` if the node is an ESLint directive comment
-     */
-    isDirectiveComment(node) {
-        const comment = node.value.trim();
-
-        return (
-            node.type === "Line" && comment.indexOf("eslint-") === 0 ||
-            node.type === "Block" && (
-                comment.indexOf("global ") === 0 ||
-                comment.indexOf("eslint ") === 0 ||
-                comment.indexOf("eslint-") === 0
-            )
-        );
-    },
-
-    /**
-     * Gets the trailing statement of a given node.
-     *
-     *     if (code)
-     *         consequent;
-     *
-     * When taking this `IfStatement`, returns `consequent;` statement.
-     *
-     * @param {ASTNode} A node to get.
-     * @returns {ASTNode|null} The trailing statement's node.
-     */
-    getTrailingStatement: esutils.ast.trailingStatement,
-
-    /**
-     * Finds the variable by a given name in a given scope and its upper scopes.
-     *
-     * @param {eslint-scope.Scope} initScope - A scope to start find.
-     * @param {string} name - A variable name to find.
-     * @returns {eslint-scope.Variable|null} A found variable or `null`.
-     */
-    getVariableByName(initScope, name) {
-        let scope = initScope;
-
-        while (scope) {
-            const variable = scope.set.get(name);
-
-            if (variable) {
-                return variable;
-            }
-
-            scope = scope.upper;
-        }
-
-        return null;
-    },
-
-    /**
-     * Checks whether or not a given function node is the default `this` binding.
-     *
-     * First, this checks the node:
-     *
-     * - The function name does not start with uppercase (it's a constructor).
-     * - The function does not have a JSDoc comment that has a @this tag.
-     *
-     * Next, this checks the location of the node.
-     * If the location is below, this judges `this` is valid.
-     *
-     * - The location is not on an object literal.
-     * - The location is not assigned to a variable which starts with an uppercase letter.
-     * - The location is not on an ES2015 class.
-     * - Its `bind`/`call`/`apply` method is not called directly.
-     * - The function is not a callback of array methods (such as `.forEach()`) if `thisArg` is given.
-     *
-     * @param {ASTNode} node - A function node to check.
-     * @param {SourceCode} sourceCode - A SourceCode instance to get comments.
-     * @returns {boolean} The function node is the default `this` binding.
-     */
-    isDefaultThisBinding(node, sourceCode) {
-        if (isES5Constructor(node) || hasJSDocThisTag(node, sourceCode)) {
-            return false;
-        }
-        const isAnonymous = node.id === null;
-        let currentNode = node;
-
-        while (currentNode) {
-            const parent = currentNode.parent;
-
-            switch (parent.type) {
-
-                /*
-                 * Looks up the destination.
-                 * e.g., obj.foo = nativeFoo || function foo() { ... };
-                 */
-                case "LogicalExpression":
-                case "ConditionalExpression":
-                    currentNode = parent;
-                    break;
-
-                /*
-                 * If the upper function is IIFE, checks the destination of the return value.
-                 * e.g.
-                 *   obj.foo = (function() {
-                 *     // setup...
-                 *     return function foo() { ... };
-                 *   })();
-                 *   obj.foo = (() =>
-                 *     function foo() { ... }
-                 *   )();
-                 */
-                case "ReturnStatement": {
-                    const func = getUpperFunction(parent);
-
-                    if (func === null || !isCallee(func)) {
-                        return true;
-                    }
-                    currentNode = func.parent;
-                    break;
-                }
-                case "ArrowFunctionExpression":
-                    if (currentNode !== parent.body || !isCallee(parent)) {
-                        return true;
-                    }
-                    currentNode = parent.parent;
-                    break;
-
-                /*
-                 * e.g.
-                 *   var obj = { foo() { ... } };
-                 *   var obj = { foo: function() { ... } };
-                 *   class A { constructor() { ... } }
-                 *   class A { foo() { ... } }
-                 *   class A { get foo() { ... } }
-                 *   class A { set foo() { ... } }
-                 *   class A { static foo() { ... } }
-                 */
-                case "Property":
-                case "MethodDefinition":
-                    return parent.value !== currentNode;
-
-                /*
-                 * e.g.
-                 *   obj.foo = function foo() { ... };
-                 *   Foo = function() { ... };
-                 *   [obj.foo = function foo() { ... }] = a;
-                 *   [Foo = function() { ... }] = a;
-                 */
-                case "AssignmentExpression":
-                case "AssignmentPattern":
-                    if (parent.left.type === "MemberExpression") {
-                        return false;
-                    }
-                    if (
-                        isAnonymous &&
-                        parent.left.type === "Identifier" &&
-                        startsWithUpperCase(parent.left.name)
-                    ) {
-                        return false;
-                    }
-                    return true;
-
-                /*
-                 * e.g.
-                 *   var Foo = function() { ... };
-                 */
-                case "VariableDeclarator":
-                    return !(
-                        isAnonymous &&
-                        parent.init === currentNode &&
-                        parent.id.type === "Identifier" &&
-                        startsWithUpperCase(parent.id.name)
-                    );
-
-                /*
-                 * e.g.
-                 *   var foo = function foo() { ... }.bind(obj);
-                 *   (function foo() { ... }).call(obj);
-                 *   (function foo() { ... }).apply(obj, []);
-                 */
-                case "MemberExpression":
-                    return (
-                        parent.object !== currentNode ||
-                        parent.property.type !== "Identifier" ||
-                        !bindOrCallOrApplyPattern.test(parent.property.name) ||
-                        !isCallee(parent) ||
-                        parent.parent.arguments.length === 0 ||
-                        isNullOrUndefined(parent.parent.arguments[0])
-                    );
-
-                /*
-                 * e.g.
-                 *   Reflect.apply(function() {}, obj, []);
-                 *   Array.from([], function() {}, obj);
-                 *   list.forEach(function() {}, obj);
-                 */
-                case "CallExpression":
-                    if (isReflectApply(parent.callee)) {
-                        return (
-                            parent.arguments.length !== 3 ||
-                            parent.arguments[0] !== currentNode ||
-                            isNullOrUndefined(parent.arguments[1])
-                        );
-                    }
-                    if (isArrayFromMethod(parent.callee)) {
-                        return (
-                            parent.arguments.length !== 3 ||
-                            parent.arguments[1] !== currentNode ||
-                            isNullOrUndefined(parent.arguments[2])
-                        );
-                    }
-                    if (isMethodWhichHasThisArg(parent.callee)) {
-                        return (
-                            parent.arguments.length !== 2 ||
-                            parent.arguments[0] !== currentNode ||
-                            isNullOrUndefined(parent.arguments[1])
-                        );
-                    }
-                    return true;
-
-                // Otherwise `this` is default.
-                default:
-                    return true;
-            }
-        }
-
-        /* istanbul ignore next */
-        return true;
-    },
-
-    /**
-     * Get the precedence level based on the node type
-     * @param {ASTNode} node node to evaluate
-     * @returns {int} precedence level
-     * @private
-     */
-    getPrecedence(node) {
-        switch (node.type) {
-            case "SequenceExpression":
-                return 0;
-
-            case "AssignmentExpression":
-            case "ArrowFunctionExpression":
-            case "YieldExpression":
-                return 1;
-
-            case "ConditionalExpression":
-                return 3;
-
-            case "LogicalExpression":
-                switch (node.operator) {
-                    case "||":
-                        return 4;
-                    case "&&":
-                        return 5;
-
-                    // no default
-                }
-
-                /* falls through */
-
-            case "BinaryExpression":
-
-                switch (node.operator) {
-                    case "|":
-                        return 6;
-                    case "^":
-                        return 7;
-                    case "&":
-                        return 8;
-                    case "==":
-                    case "!=":
-                    case "===":
-                    case "!==":
-                        return 9;
-                    case "<":
-                    case "<=":
-                    case ">":
-                    case ">=":
-                    case "in":
-                    case "instanceof":
-                        return 10;
-                    case "<<":
-                    case ">>":
-                    case ">>>":
-                        return 11;
-                    case "+":
-                    case "-":
-                        return 12;
-                    case "*":
-                    case "/":
-                    case "%":
-                        return 13;
-                    case "**":
-                        return 15;
-
-                    // no default
-                }
-
-                /* falls through */
-
-            case "UnaryExpression":
-            case "AwaitExpression":
-                return 16;
-
-            case "UpdateExpression":
-                return 17;
-
-            case "CallExpression":
-                return 18;
-
-            case "NewExpression":
-                return 19;
-
-            default:
-                return 20;
-        }
-    },
-
-    /**
-     * Checks whether the given node is an empty block node or not.
-     *
-     * @param {ASTNode|null} node - The node to check.
-     * @returns {boolean} `true` if the node is an empty block.
-     */
-    isEmptyBlock(node) {
-        return Boolean(node && node.type === "BlockStatement" && node.body.length === 0);
-    },
-
-    /**
-     * Checks whether the given node is an empty function node or not.
-     *
-     * @param {ASTNode|null} node - The node to check.
-     * @returns {boolean} `true` if the node is an empty function.
-     */
-    isEmptyFunction(node) {
-        return isFunction(node) && module.exports.isEmptyBlock(node.body);
-    },
-
-    /**
-     * Gets the property name of a given node.
-     * The node can be a MemberExpression, a Property, or a MethodDefinition.
-     *
-     * If the name is dynamic, this returns `null`.
-     *
-     * For examples:
-     *
-     *     a.b           // => "b"
-     *     a["b"]        // => "b"
-     *     a['b']        // => "b"
-     *     a[`b`]        // => "b"
-     *     a[100]        // => "100"
-     *     a[b]          // => null
-     *     a["a" + "b"]  // => null
-     *     a[tag`b`]     // => null
-     *     a[`${b}`]     // => null
-     *
-     *     let a = {b: 1}            // => "b"
-     *     let a = {["b"]: 1}        // => "b"
-     *     let a = {['b']: 1}        // => "b"
-     *     let a = {[`b`]: 1}        // => "b"
-     *     let a = {[100]: 1}        // => "100"
-     *     let a = {[b]: 1}          // => null
-     *     let a = {["a" + "b"]: 1}  // => null
-     *     let a = {[tag`b`]: 1}     // => null
-     *     let a = {[`${b}`]: 1}     // => null
-     *
-     * @param {ASTNode} node - The node to get.
-     * @returns {string|null} The property name if static. Otherwise, null.
-     */
-    getStaticPropertyName(node) {
-        let prop;
-
-        switch (node && node.type) {
-            case "Property":
-            case "MethodDefinition":
-                prop = node.key;
-                break;
-
-            case "MemberExpression":
-                prop = node.property;
-                break;
-
-            // no default
-        }
-
-        switch (prop && prop.type) {
-            case "Literal":
-                return String(prop.value);
-
-            case "TemplateLiteral":
-                if (prop.expressions.length === 0 && prop.quasis.length === 1) {
-                    return prop.quasis[0].value.cooked;
-                }
-                break;
-
-            case "Identifier":
-                if (!node.computed) {
-                    return prop.name;
-                }
-                break;
-
-            // no default
-        }
-
-        return null;
-    },
-
-    /**
-     * Get directives from directive prologue of a Program or Function node.
-     * @param {ASTNode} node - The node to check.
-     * @returns {ASTNode[]} The directives found in the directive prologue.
-     */
-    getDirectivePrologue(node) {
-        const directives = [];
-
-        // Directive prologues only occur at the top of files or functions.
-        if (
-            node.type === "Program" ||
-            node.type === "FunctionDeclaration" ||
-            node.type === "FunctionExpression" ||
-
-            /*
-             * Do not check arrow functions with implicit return.
-             * `() => "use strict";` returns the string `"use strict"`.
-             */
-            (node.type === "ArrowFunctionExpression" && node.body.type === "BlockStatement")
-        ) {
-            const statements = node.type === "Program" ? node.body : node.body.body;
-
-            for (const statement of statements) {
-                if (
-                    statement.type === "ExpressionStatement" &&
-                    statement.expression.type === "Literal"
-                ) {
-                    directives.push(statement);
-                } else {
-                    break;
-                }
-            }
-        }
-
-        return directives;
-    },
-
-
-    /**
-     * Determines whether this node is a decimal integer literal. If a node is a decimal integer literal, a dot added
-     * after the node will be parsed as a decimal point, rather than a property-access dot.
-     * @param {ASTNode} node - The node to check.
-     * @returns {boolean} `true` if this node is a decimal integer.
-     * @example
-     *
-     * 5       // true
-     * 5.      // false
-     * 5.0     // false
-     * 05      // false
-     * 0x5     // false
-     * 0b101   // false
-     * 0o5     // false
-     * 5e0     // false
-     * '5'     // false
-     */
-    isDecimalInteger(node) {
-        return node.type === "Literal" && typeof node.value === "number" && /^(0|[1-9]\d*)$/.test(node.raw);
-    },
-
-    /**
-     * Gets the name and kind of the given function node.
-     *
-     * - `function foo() {}`  .................... `function 'foo'`
-     * - `(function foo() {})`  .................. `function 'foo'`
-     * - `(function() {})`  ...................... `function`
-     * - `function* foo() {}`  ................... `generator function 'foo'`
-     * - `(function* foo() {})`  ................. `generator function 'foo'`
-     * - `(function*() {})`  ..................... `generator function`
-     * - `() => {}`  ............................. `arrow function`
-     * - `async () => {}`  ....................... `async arrow function`
-     * - `({ foo: function foo() {} })`  ......... `method 'foo'`
-     * - `({ foo: function() {} })`  ............. `method 'foo'`
-     * - `({ ['foo']: function() {} })`  ......... `method 'foo'`
-     * - `({ [foo]: function() {} })`  ........... `method`
-     * - `({ foo() {} })`  ....................... `method 'foo'`
-     * - `({ foo: function* foo() {} })`  ........ `generator method 'foo'`
-     * - `({ foo: function*() {} })`  ............ `generator method 'foo'`
-     * - `({ ['foo']: function*() {} })`  ........ `generator method 'foo'`
-     * - `({ [foo]: function*() {} })`  .......... `generator method`
-     * - `({ *foo() {} })`  ...................... `generator method 'foo'`
-     * - `({ foo: async function foo() {} })`  ... `async method 'foo'`
-     * - `({ foo: async function() {} })`  ....... `async method 'foo'`
-     * - `({ ['foo']: async function() {} })`  ... `async method 'foo'`
-     * - `({ [foo]: async function() {} })`  ..... `async method`
-     * - `({ async foo() {} })`  ................. `async method 'foo'`
-     * - `({ get foo() {} })`  ................... `getter 'foo'`
-     * - `({ set foo(a) {} })`  .................. `setter 'foo'`
-     * - `class A { constructor() {} }`  ......... `constructor`
-     * - `class A { foo() {} }`  ................. `method 'foo'`
-     * - `class A { *foo() {} }`  ................ `generator method 'foo'`
-     * - `class A { async foo() {} }`  ........... `async method 'foo'`
-     * - `class A { ['foo']() {} }`  ............. `method 'foo'`
-     * - `class A { *['foo']() {} }`  ............ `generator method 'foo'`
-     * - `class A { async ['foo']() {} }`  ....... `async method 'foo'`
-     * - `class A { [foo]() {} }`  ............... `method`
-     * - `class A { *[foo]() {} }`  .............. `generator method`
-     * - `class A { async [foo]() {} }`  ......... `async method`
-     * - `class A { get foo() {} }`  ............. `getter 'foo'`
-     * - `class A { set foo(a) {} }`  ............ `setter 'foo'`
-     * - `class A { static foo() {} }`  .......... `static method 'foo'`
-     * - `class A { static *foo() {} }`  ......... `static generator method 'foo'`
-     * - `class A { static async foo() {} }`  .... `static async method 'foo'`
-     * - `class A { static get foo() {} }`  ...... `static getter 'foo'`
-     * - `class A { static set foo(a) {} }`  ..... `static setter 'foo'`
-     *
-     * @param {ASTNode} node - The function node to get.
-     * @returns {string} The name and kind of the function node.
-     */
-    getFunctionNameWithKind(node) {
-        const parent = node.parent;
-        const tokens = [];
-
-        if (parent.type === "MethodDefinition" && parent.static) {
-            tokens.push("static");
-        }
-        if (node.async) {
-            tokens.push("async");
-        }
-        if (node.generator) {
-            tokens.push("generator");
-        }
-
-        if (node.type === "ArrowFunctionExpression") {
-            tokens.push("arrow", "function");
-        } else if (parent.type === "Property" || parent.type === "MethodDefinition") {
-            if (parent.kind === "constructor") {
-                return "constructor";
-            }
-            if (parent.kind === "get") {
-                tokens.push("getter");
-            } else if (parent.kind === "set") {
-                tokens.push("setter");
-            } else {
-                tokens.push("method");
-            }
-        } else {
-            tokens.push("function");
-        }
-
-        if (node.id) {
-            tokens.push(`'${node.id.name}'`);
-        } else {
-            const name = module.exports.getStaticPropertyName(parent);
-
-            if (name) {
-                tokens.push(`'${name}'`);
-            }
-        }
-
-        return tokens.join(" ");
-    },
-
-    /**
-     * Gets the location of the given function node for reporting.
-     *
-     * - `function foo() {}`
-     *    ^^^^^^^^^^^^
-     * - `(function foo() {})`
-     *     ^^^^^^^^^^^^
-     * - `(function() {})`
-     *     ^^^^^^^^
-     * - `function* foo() {}`
-     *    ^^^^^^^^^^^^^
-     * - `(function* foo() {})`
-     *     ^^^^^^^^^^^^^
-     * - `(function*() {})`
-     *     ^^^^^^^^^
-     * - `() => {}`
-     *       ^^
-     * - `async () => {}`
-     *             ^^
-     * - `({ foo: function foo() {} })`
-     *       ^^^^^^^^^^^^^^^^^
-     * - `({ foo: function() {} })`
-     *       ^^^^^^^^^^^^^
-     * - `({ ['foo']: function() {} })`
-     *       ^^^^^^^^^^^^^^^^^
-     * - `({ [foo]: function() {} })`
-     *       ^^^^^^^^^^^^^^^
-     * - `({ foo() {} })`
-     *       ^^^
-     * - `({ foo: function* foo() {} })`
-     *       ^^^^^^^^^^^^^^^^^^
-     * - `({ foo: function*() {} })`
-     *       ^^^^^^^^^^^^^^
-     * - `({ ['foo']: function*() {} })`
-     *       ^^^^^^^^^^^^^^^^^^
-     * - `({ [foo]: function*() {} })`
-     *       ^^^^^^^^^^^^^^^^
-     * - `({ *foo() {} })`
-     *       ^^^^
-     * - `({ foo: async function foo() {} })`
-     *       ^^^^^^^^^^^^^^^^^^^^^^^
-     * - `({ foo: async function() {} })`
-     *       ^^^^^^^^^^^^^^^^^^^
-     * - `({ ['foo']: async function() {} })`
-     *       ^^^^^^^^^^^^^^^^^^^^^^^
-     * - `({ [foo]: async function() {} })`
-     *       ^^^^^^^^^^^^^^^^^^^^^
-     * - `({ async foo() {} })`
-     *       ^^^^^^^^^
-     * - `({ get foo() {} })`
-     *       ^^^^^^^
-     * - `({ set foo(a) {} })`
-     *       ^^^^^^^
-     * - `class A { constructor() {} }`
-     *              ^^^^^^^^^^^
-     * - `class A { foo() {} }`
-     *              ^^^
-     * - `class A { *foo() {} }`
-     *              ^^^^
-     * - `class A { async foo() {} }`
-     *              ^^^^^^^^^
-     * - `class A { ['foo']() {} }`
-     *              ^^^^^^^
-     * - `class A { *['foo']() {} }`
-     *              ^^^^^^^^
-     * - `class A { async ['foo']() {} }`
-     *              ^^^^^^^^^^^^^
-     * - `class A { [foo]() {} }`
-     *              ^^^^^
-     * - `class A { *[foo]() {} }`
-     *              ^^^^^^
-     * - `class A { async [foo]() {} }`
-     *              ^^^^^^^^^^^
-     * - `class A { get foo() {} }`
-     *              ^^^^^^^
-     * - `class A { set foo(a) {} }`
-     *              ^^^^^^^
-     * - `class A { static foo() {} }`
-     *              ^^^^^^^^^^
-     * - `class A { static *foo() {} }`
-     *              ^^^^^^^^^^^
-     * - `class A { static async foo() {} }`
-     *              ^^^^^^^^^^^^^^^^
-     * - `class A { static get foo() {} }`
-     *              ^^^^^^^^^^^^^^
-     * - `class A { static set foo(a) {} }`
-     *              ^^^^^^^^^^^^^^
-     *
-     * @param {ASTNode} node - The function node to get.
-     * @param {SourceCode} sourceCode - The source code object to get tokens.
-     * @returns {string} The location of the function node for reporting.
-     */
-    getFunctionHeadLoc(node, sourceCode) {
-        const parent = node.parent;
-        let start = null;
-        let end = null;
-
-        if (node.type === "ArrowFunctionExpression") {
-            const arrowToken = sourceCode.getTokenBefore(node.body, isArrowToken);
-
-            start = arrowToken.loc.start;
-            end = arrowToken.loc.end;
-        } else if (parent.type === "Property" || parent.type === "MethodDefinition") {
-            start = parent.loc.start;
-            end = getOpeningParenOfParams(node, sourceCode).loc.start;
-        } else {
-            start = node.loc.start;
-            end = getOpeningParenOfParams(node, sourceCode).loc.start;
-        }
-
-        return {
-            start: Object.assign({}, start),
-            end: Object.assign({}, end)
-        };
-    },
-
-    /**
-     * Gets the parenthesized text of a node. This is similar to sourceCode.getText(node), but it also includes any parentheses
-     * surrounding the node.
-     * @param {SourceCode} sourceCode The source code object
-     * @param {ASTNode} node An expression node
-     * @returns {string} The text representing the node, with all surrounding parentheses included
-     */
-    getParenthesisedText(sourceCode, node) {
-        let leftToken = sourceCode.getFirstToken(node);
-        let rightToken = sourceCode.getLastToken(node);
-
-        while (
-            sourceCode.getTokenBefore(leftToken) &&
-            sourceCode.getTokenBefore(leftToken).type === "Punctuator" &&
-            sourceCode.getTokenBefore(leftToken).value === "(" &&
-            sourceCode.getTokenAfter(rightToken) &&
-            sourceCode.getTokenAfter(rightToken).type === "Punctuator" &&
-            sourceCode.getTokenAfter(rightToken).value === ")"
-        ) {
-            leftToken = sourceCode.getTokenBefore(leftToken);
-            rightToken = sourceCode.getTokenAfter(rightToken);
-        }
-
-        return sourceCode.getText().slice(leftToken.range[0], rightToken.range[1]);
-    },
-
-    /*
-     * Determine if a node has a possiblity to be an Error object
-     * @param  {ASTNode} node  ASTNode to check
-     * @returns {boolean} True if there is a chance it contains an Error obj
-     */
-    couldBeError(node) {
-        switch (node.type) {
-            case "Identifier":
-            case "CallExpression":
-            case "NewExpression":
-            case "MemberExpression":
-            case "TaggedTemplateExpression":
-            case "YieldExpression":
-            case "AwaitExpression":
-                return true; // possibly an error object.
-
-            case "AssignmentExpression":
-                return module.exports.couldBeError(node.right);
-
-            case "SequenceExpression": {
-                const exprs = node.expressions;
-
-                return exprs.length !== 0 && module.exports.couldBeError(exprs[exprs.length - 1]);
-            }
-
-            case "LogicalExpression":
-                return module.exports.couldBeError(node.left) || module.exports.couldBeError(node.right);
-
-            case "ConditionalExpression":
-                return module.exports.couldBeError(node.consequent) || module.exports.couldBeError(node.alternate);
-
-            default:
-                return false;
-        }
-    },
-
-    /**
-     * Determines whether the given node is a `null` literal.
-     * @param {ASTNode} node The node to check
-     * @returns {boolean} `true` if the node is a `null` literal
-     */
-    isNullLiteral(node) {
-
-        /*
-         * Checking `node.value === null` does not guarantee that a literal is a null literal.
-         * When parsing values that cannot be represented in the current environment (e.g. unicode
-         * regexes in Node 4), `node.value` is set to `null` because it wouldn't be possible to
-         * set `node.value` to a unicode regex. To make sure a literal is actually `null`, check
-         * `node.regex` instead. Also see: https://github.com/eslint/eslint/issues/8020
-         */
-        return node.type === "Literal" && node.value === null && !node.regex;
-    },
-
-    /**
-     * Determines whether two tokens can safely be placed next to each other without merging into a single token
-     * @param {Token|string} leftValue The left token. If this is a string, it will be tokenized and the last token will be used.
-     * @param {Token|string} rightValue The right token. If this is a string, it will be tokenized and the first token will be used.
-     * @returns {boolean} If the tokens cannot be safely placed next to each other, returns `false`. If the tokens can be placed
-     * next to each other, behavior is undefined (although it should return `true` in most cases).
-     */
-    canTokensBeAdjacent(leftValue, rightValue) {
-        let leftToken;
-
-        if (typeof leftValue === "string") {
-            const leftTokens = espree.tokenize(leftValue, { ecmaVersion: 2015 });
-
-            leftToken = leftTokens[leftTokens.length - 1];
-        } else {
-            leftToken = leftValue;
-        }
-
-        const rightToken = typeof rightValue === "string" ? espree.tokenize(rightValue, { ecmaVersion: 2015 })[0] : rightValue;
-
-        if (leftToken.type === "Punctuator" || rightToken.type === "Punctuator") {
-            if (leftToken.type === "Punctuator" && rightToken.type === "Punctuator") {
-                const PLUS_TOKENS = new Set(["+", "++"]);
-                const MINUS_TOKENS = new Set(["-", "--"]);
-
-                return !(
-                    PLUS_TOKENS.has(leftToken.value) && PLUS_TOKENS.has(rightToken.value) ||
-                    MINUS_TOKENS.has(leftToken.value) && MINUS_TOKENS.has(rightToken.value)
-                );
-            }
-            return true;
-        }
-
-        if (
-            leftToken.type === "String" || rightToken.type === "String" ||
-            leftToken.type === "Template" || rightToken.type === "Template"
-        ) {
-            return true;
-        }
-
-        if (leftToken.type !== "Numeric" && rightToken.type === "Numeric" && rightToken.value.startsWith(".")) {
-            return true;
-        }
-
-        return false;
-    }
-};
diff --git a/node_modules/eslint/lib/cli-engine.js b/node_modules/eslint/lib/cli-engine.js
deleted file mode 100644
index 8531d1c..0000000
--- a/node_modules/eslint/lib/cli-engine.js
+++ /dev/null
@@ -1,720 +0,0 @@
-/**
- * @fileoverview Main CLI object.
- * @author Nicholas C. Zakas
- */
-
-"use strict";
-
-/*
- * The CLI object should *not* call process.exit() directly. It should only return
- * exit codes. This allows other programs to use the CLI object and still control
- * when the program exits.
- */
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const fs = require("fs"),
-    path = require("path"),
-    defaultOptions = require("../conf/default-cli-options"),
-    Linter = require("./linter"),
-    IgnoredPaths = require("./ignored-paths"),
-    Config = require("./config"),
-    fileEntryCache = require("file-entry-cache"),
-    globUtil = require("./util/glob-util"),
-    validator = require("./config/config-validator"),
-    stringify = require("json-stable-stringify-without-jsonify"),
-    hash = require("./util/hash"),
-    ModuleResolver = require("./util/module-resolver"),
-    naming = require("./util/naming"),
-    pkg = require("../package.json");
-
-const debug = require("debug")("eslint:cli-engine");
-
-const resolver = new ModuleResolver();
-
-//------------------------------------------------------------------------------
-// Typedefs
-//------------------------------------------------------------------------------
-
-/**
- * The options to configure a CLI engine with.
- * @typedef {Object} CLIEngineOptions
- * @property {boolean} allowInlineConfig Enable or disable inline configuration comments.
- * @property {boolean|Object} baseConfig Base config object. True enables recommend rules and environments.
- * @property {boolean} cache Enable result caching.
- * @property {string} cacheLocation The cache file to use instead of .eslintcache.
- * @property {string} configFile The configuration file to use.
- * @property {string} cwd The value to use for the current working directory.
- * @property {string[]} envs An array of environments to load.
- * @property {string[]} extensions An array of file extensions to check.
- * @property {boolean|Function} fix Execute in autofix mode. If a function, should return a boolean.
- * @property {string[]} globals An array of global variables to declare.
- * @property {boolean} ignore False disables use of .eslintignore.
- * @property {string} ignorePath The ignore file to use instead of .eslintignore.
- * @property {string} ignorePattern A glob pattern of files to ignore.
- * @property {boolean} useEslintrc False disables looking for .eslintrc
- * @property {string} parser The name of the parser to use.
- * @property {Object} parserOptions An object of parserOption settings to use.
- * @property {string[]} plugins An array of plugins to load.
- * @property {Object} rules An object of rules to use.
- * @property {string[]} rulePaths An array of directories to load custom rules from.
- * @property {boolean} reportUnusedDisableDirectives `true` adds reports for unused eslint-disable directives
- */
-
-/**
- * A linting warning or error.
- * @typedef {Object} LintMessage
- * @property {string} message The message to display to the user.
- */
-
-/**
- * A linting result.
- * @typedef {Object} LintResult
- * @property {string} filePath The path to the file that was linted.
- * @property {LintMessage[]} messages All of the messages for the result.
- * @property {number} errorCount Number of errors for the result.
- * @property {number} warningCount Number of warnings for the result.
- * @property {number} fixableErrorCount Number of fixable errors for the result.
- * @property {number} fixableWarningCount Number of fixable warnings for the result.
- * @property {string=} [source] The source code of the file that was linted.
- * @property {string=} [output] The source code of the file that was linted, with as many fixes applied as possible.
- */
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * It will calculate the error and warning count for collection of messages per file
- * @param {Object[]} messages - Collection of messages
- * @returns {Object} Contains the stats
- * @private
- */
-function calculateStatsPerFile(messages) {
-    return messages.reduce((stat, message) => {
-        if (message.fatal || message.severity === 2) {
-            stat.errorCount++;
-            if (message.fix) {
-                stat.fixableErrorCount++;
-            }
-        } else {
-            stat.warningCount++;
-            if (message.fix) {
-                stat.fixableWarningCount++;
-            }
-        }
-        return stat;
-    }, {
-        errorCount: 0,
-        warningCount: 0,
-        fixableErrorCount: 0,
-        fixableWarningCount: 0
-    });
-}
-
-/**
- * It will calculate the error and warning count for collection of results from all files
- * @param {Object[]} results - Collection of messages from all the files
- * @returns {Object} Contains the stats
- * @private
- */
-function calculateStatsPerRun(results) {
-    return results.reduce((stat, result) => {
-        stat.errorCount += result.errorCount;
-        stat.warningCount += result.warningCount;
-        stat.fixableErrorCount += result.fixableErrorCount;
-        stat.fixableWarningCount += result.fixableWarningCount;
-        return stat;
-    }, {
-        errorCount: 0,
-        warningCount: 0,
-        fixableErrorCount: 0,
-        fixableWarningCount: 0
-    });
-}
-
-/**
- * Processes an source code using ESLint.
- * @param {string} text The source code to check.
- * @param {Object} configHelper The configuration options for ESLint.
- * @param {string} filename An optional string representing the texts filename.
- * @param {boolean|Function} fix Indicates if fixes should be processed.
- * @param {boolean} allowInlineConfig Allow/ignore comments that change config.
- * @param {boolean} reportUnusedDisableDirectives Allow/ignore comments that change config.
- * @param {Linter} linter Linter context
- * @returns {LintResult} The results for linting on this text.
- * @private
- */
-function processText(text, configHelper, filename, fix, allowInlineConfig, reportUnusedDisableDirectives, linter) {
-    let filePath,
-        fileExtension,
-        processor;
-
-    if (filename) {
-        filePath = path.resolve(filename);
-        fileExtension = path.extname(filename);
-    }
-
-    const effectiveFilename = filename || "";
-
-    debug(`Linting ${effectiveFilename}`);
-    const config = configHelper.getConfig(filePath);
-
-    if (config.plugins) {
-        configHelper.plugins.loadAll(config.plugins);
-    }
-
-    const loadedPlugins = configHelper.plugins.getAll();
-
-    for (const plugin in loadedPlugins) {
-        if (loadedPlugins[plugin].processors && Object.keys(loadedPlugins[plugin].processors).indexOf(fileExtension) >= 0) {
-            processor = loadedPlugins[plugin].processors[fileExtension];
-            break;
-        }
-    }
-
-    const autofixingEnabled = typeof fix !== "undefined" && (!processor || processor.supportsAutofix);
-
-    const fixedResult = linter.verifyAndFix(text, config, {
-        filename: effectiveFilename,
-        allowInlineConfig,
-        reportUnusedDisableDirectives,
-        fix: !!autofixingEnabled && fix,
-        preprocess: processor && (rawText => processor.preprocess(rawText, effectiveFilename)),
-        postprocess: processor && (problemLists => processor.postprocess(problemLists, effectiveFilename))
-    });
-
-    const stats = calculateStatsPerFile(fixedResult.messages);
-
-    const result = {
-        filePath: effectiveFilename,
-        messages: fixedResult.messages,
-        errorCount: stats.errorCount,
-        warningCount: stats.warningCount,
-        fixableErrorCount: stats.fixableErrorCount,
-        fixableWarningCount: stats.fixableWarningCount
-    };
-
-    if (fixedResult.fixed) {
-        result.output = fixedResult.output;
-    }
-
-    if (result.errorCount + result.warningCount > 0 && typeof result.output === "undefined") {
-        result.source = text;
-    }
-
-    return result;
-}
-
-/**
- * Processes an individual file using ESLint. Files used here are known to
- * exist, so no need to check that here.
- * @param {string} filename The filename of the file being checked.
- * @param {Object} configHelper The configuration options for ESLint.
- * @param {Object} options The CLIEngine options object.
- * @param {Linter} linter Linter context
- * @returns {LintResult} The results for linting on this file.
- * @private
- */
-function processFile(filename, configHelper, options, linter) {
-
-    const text = fs.readFileSync(path.resolve(filename), "utf8"),
-        result = processText(
-            text,
-            configHelper,
-            filename,
-            options.fix,
-            options.allowInlineConfig,
-            options.reportUnusedDisableDirectives,
-            linter
-        );
-
-    return result;
-
-}
-
-/**
- * Returns result with warning by ignore settings
- * @param {string} filePath - File path of checked code
- * @param {string} baseDir  - Absolute path of base directory
- * @returns {LintResult} Result with single warning
- * @private
- */
-function createIgnoreResult(filePath, baseDir) {
-    let message;
-    const isHidden = /^\./.test(path.basename(filePath));
-    const isInNodeModules = baseDir && path.relative(baseDir, filePath).startsWith("node_modules");
-    const isInBowerComponents = baseDir && path.relative(baseDir, filePath).startsWith("bower_components");
-
-    if (isHidden) {
-        message = "File ignored by default.  Use a negated ignore pattern (like \"--ignore-pattern '!'\") to override.";
-    } else if (isInNodeModules) {
-        message = "File ignored by default. Use \"--ignore-pattern '!node_modules/*'\" to override.";
-    } else if (isInBowerComponents) {
-        message = "File ignored by default. Use \"--ignore-pattern '!bower_components/*'\" to override.";
-    } else {
-        message = "File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override.";
-    }
-
-    return {
-        filePath: path.resolve(filePath),
-        messages: [
-            {
-                fatal: false,
-                severity: 1,
-                message
-            }
-        ],
-        errorCount: 0,
-        warningCount: 1,
-        fixableErrorCount: 0,
-        fixableWarningCount: 0
-    };
-}
-
-
-/**
- * Checks if the given message is an error message.
- * @param {Object} message The message to check.
- * @returns {boolean} Whether or not the message is an error message.
- * @private
- */
-function isErrorMessage(message) {
-    return message.severity === 2;
-}
-
-
-/**
- * return the cacheFile to be used by eslint, based on whether the provided parameter is
- * a directory or looks like a directory (ends in `path.sep`), in which case the file
- * name will be the `cacheFile/.cache_hashOfCWD`
- *
- * if cacheFile points to a file or looks like a file then in will just use that file
- *
- * @param {string} cacheFile The name of file to be used to store the cache
- * @param {string} cwd Current working directory
- * @returns {string} the resolved path to the cache file
- */
-function getCacheFile(cacheFile, cwd) {
-
-    /*
-     * make sure the path separators are normalized for the environment/os
-     * keeping the trailing path separator if present
-     */
-    const normalizedCacheFile = path.normalize(cacheFile);
-
-    const resolvedCacheFile = path.resolve(cwd, normalizedCacheFile);
-    const looksLikeADirectory = normalizedCacheFile.slice(-1) === path.sep;
-
-    /**
-     * return the name for the cache file in case the provided parameter is a directory
-     * @returns {string} the resolved path to the cacheFile
-     */
-    function getCacheFileForDirectory() {
-        return path.join(resolvedCacheFile, `.cache_${hash(cwd)}`);
-    }
-
-    let fileStats;
-
-    try {
-        fileStats = fs.lstatSync(resolvedCacheFile);
-    } catch (ex) {
-        fileStats = null;
-    }
-
-
-    /*
-     * in case the file exists we need to verify if the provided path
-     * is a directory or a file. If it is a directory we want to create a file
-     * inside that directory
-     */
-    if (fileStats) {
-
-        /*
-         * is a directory or is a file, but the original file the user provided
-         * looks like a directory but `path.resolve` removed the `last path.sep`
-         * so we need to still treat this like a directory
-         */
-        if (fileStats.isDirectory() || looksLikeADirectory) {
-            return getCacheFileForDirectory();
-        }
-
-        // is file so just use that file
-        return resolvedCacheFile;
-    }
-
-    /*
-     * here we known the file or directory doesn't exist,
-     * so we will try to infer if its a directory if it looks like a directory
-     * for the current operating system.
-     */
-
-    // if the last character passed is a path separator we assume is a directory
-    if (looksLikeADirectory) {
-        return getCacheFileForDirectory();
-    }
-
-    return resolvedCacheFile;
-}
-
-const configHashCache = new WeakMap();
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-class CLIEngine {
-
-    /**
-     * Creates a new instance of the core CLI engine.
-     * @param {CLIEngineOptions} providedOptions The options for this instance.
-     * @constructor
-     */
-    constructor(providedOptions) {
-
-        const options = Object.assign(
-            Object.create(null),
-            defaultOptions,
-            { cwd: process.cwd() },
-            providedOptions
-        );
-
-        /**
-         * Stored options for this instance
-         * @type {Object}
-         */
-        this.options = options;
-        this.linter = new Linter();
-
-        if (options.cache) {
-            const cacheFile = getCacheFile(this.options.cacheLocation || this.options.cacheFile, this.options.cwd);
-
-            /**
-             * Cache used to avoid operating on files that haven't changed since the
-             * last successful execution (e.g., file passed linting with no errors and
-             * no warnings).
-             * @type {Object}
-             */
-            this._fileCache = fileEntryCache.create(cacheFile);
-        }
-
-        // load in additional rules
-        if (this.options.rulePaths) {
-            const cwd = this.options.cwd;
-
-            this.options.rulePaths.forEach(rulesdir => {
-                debug(`Loading rules from ${rulesdir}`);
-                this.linter.rules.load(rulesdir, cwd);
-            });
-        }
-
-        if (this.options.rules && Object.keys(this.options.rules).length) {
-            const loadedRules = this.linter.getRules();
-
-            Object.keys(this.options.rules).forEach(name => {
-                validator.validateRuleOptions(loadedRules.get(name), name, this.options.rules[name], "CLI");
-            });
-        }
-
-        this.config = new Config(this.options, this.linter);
-    }
-
-    getRules() {
-        return this.linter.getRules();
-    }
-
-    /**
-     * Returns results that only contains errors.
-     * @param {LintResult[]} results The results to filter.
-     * @returns {LintResult[]} The filtered results.
-     */
-    static getErrorResults(results) {
-        const filtered = [];
-
-        results.forEach(result => {
-            const filteredMessages = result.messages.filter(isErrorMessage);
-
-            if (filteredMessages.length > 0) {
-                filtered.push(
-                    Object.assign(result, {
-                        messages: filteredMessages,
-                        errorCount: filteredMessages.length,
-                        warningCount: 0,
-                        fixableErrorCount: result.fixableErrorCount,
-                        fixableWarningCount: 0
-                    })
-                );
-            }
-        });
-
-        return filtered;
-    }
-
-    /**
-     * Outputs fixes from the given results to files.
-     * @param {Object} report The report object created by CLIEngine.
-     * @returns {void}
-     */
-    static outputFixes(report) {
-        report.results.filter(result => result.hasOwnProperty("output")).forEach(result => {
-            fs.writeFileSync(result.filePath, result.output);
-        });
-    }
-
-
-    /**
-     * Add a plugin by passing its configuration
-     * @param {string} name Name of the plugin.
-     * @param {Object} pluginobject Plugin configuration object.
-     * @returns {void}
-     */
-    addPlugin(name, pluginobject) {
-        this.config.plugins.define(name, pluginobject);
-    }
-
-    /**
-     * Resolves the patterns passed into executeOnFiles() into glob-based patterns
-     * for easier handling.
-     * @param {string[]} patterns The file patterns passed on the command line.
-     * @returns {string[]} The equivalent glob patterns.
-     */
-    resolveFileGlobPatterns(patterns) {
-        return globUtil.resolveFileGlobPatterns(patterns, this.options);
-    }
-
-    /**
-     * Executes the current configuration on an array of file and directory names.
-     * @param {string[]} patterns An array of file and directory names.
-     * @returns {Object} The results for all files that were linted.
-     */
-    executeOnFiles(patterns) {
-        const options = this.options,
-            fileCache = this._fileCache,
-            configHelper = this.config;
-        const cacheFile = getCacheFile(this.options.cacheLocation || this.options.cacheFile, this.options.cwd);
-
-        if (!options.cache && fs.existsSync(cacheFile)) {
-            fs.unlinkSync(cacheFile);
-        }
-
-        /**
-         * Calculates the hash of the config file used to validate a given file
-         * @param  {string} filename The path of the file to retrieve a config object for to calculate the hash
-         * @returns {string}         the hash of the config
-         */
-        function hashOfConfigFor(filename) {
-            const config = configHelper.getConfig(filename);
-
-            if (!configHashCache.has(config)) {
-                configHashCache.set(config, hash(`${pkg.version}_${stringify(config)}`));
-            }
-
-            return configHashCache.get(config);
-        }
-
-        const startTime = Date.now();
-        const fileList = globUtil.listFilesToProcess(this.resolveFileGlobPatterns(patterns), options);
-        const results = fileList.map(fileInfo => {
-            if (fileInfo.ignored) {
-                return createIgnoreResult(fileInfo.filename, options.cwd);
-            }
-
-            if (options.cache) {
-
-                /*
-                 * get the descriptor for this file
-                 * with the metadata and the flag that determines if
-                 * the file has changed
-                 */
-                const descriptor = fileCache.getFileDescriptor(fileInfo.filename);
-                const hashOfConfig = hashOfConfigFor(fileInfo.filename);
-                const changed = descriptor.changed || descriptor.meta.hashOfConfig !== hashOfConfig;
-
-                if (!changed) {
-                    debug(`Skipping file since hasn't changed: ${fileInfo.filename}`);
-
-                    /*
-                     * Add the the cached results (always will be 0 error and
-                     * 0 warnings). We should not cache results for files that
-                     * failed, in order to guarantee that next execution will
-                     * process those files as well.
-                     */
-                    return descriptor.meta.results;
-                }
-            }
-
-            debug(`Processing ${fileInfo.filename}`);
-
-            return processFile(fileInfo.filename, configHelper, options, this.linter);
-        });
-
-        if (options.cache) {
-            results.forEach(result => {
-                if (result.messages.length) {
-
-                    /*
-                     * if a file contains errors or warnings we don't want to
-                     * store the file in the cache so we can guarantee that
-                     * next execution will also operate on this file
-                     */
-                    fileCache.removeEntry(result.filePath);
-                } else {
-
-                    /*
-                     * since the file passed we store the result here
-                     * TODO: it might not be necessary to store the results list in the cache,
-                     * since it should always be 0 errors/warnings
-                     */
-                    const descriptor = fileCache.getFileDescriptor(result.filePath);
-
-                    descriptor.meta.hashOfConfig = hashOfConfigFor(result.filePath);
-                    descriptor.meta.results = result;
-                }
-            });
-
-            // persist the cache to disk
-            fileCache.reconcile();
-        }
-
-        const stats = calculateStatsPerRun(results);
-
-        debug(`Linting complete in: ${Date.now() - startTime}ms`);
-
-        return {
-            results,
-            errorCount: stats.errorCount,
-            warningCount: stats.warningCount,
-            fixableErrorCount: stats.fixableErrorCount,
-            fixableWarningCount: stats.fixableWarningCount
-        };
-    }
-
-    /**
-     * Executes the current configuration on text.
-     * @param {string} text A string of JavaScript code to lint.
-     * @param {string} filename An optional string representing the texts filename.
-     * @param {boolean} warnIgnored Always warn when a file is ignored
-     * @returns {Object} The results for the linting.
-     */
-    executeOnText(text, filename, warnIgnored) {
-
-        const results = [],
-            options = this.options,
-            configHelper = this.config,
-            ignoredPaths = new IgnoredPaths(options);
-
-        // resolve filename based on options.cwd (for reporting, ignoredPaths also resolves)
-
-        const resolvedFilename = filename && !path.isAbsolute(filename)
-            ? path.resolve(options.cwd, filename)
-            : filename;
-
-        if (resolvedFilename && ignoredPaths.contains(resolvedFilename)) {
-            if (warnIgnored) {
-                results.push(createIgnoreResult(resolvedFilename, options.cwd));
-            }
-        } else {
-            results.push(
-                processText(
-                    text,
-                    configHelper,
-                    resolvedFilename,
-                    options.fix,
-                    options.allowInlineConfig,
-                    options.reportUnusedDisableDirectives,
-                    this.linter
-                )
-            );
-        }
-
-        const stats = calculateStatsPerRun(results);
-
-        return {
-            results,
-            errorCount: stats.errorCount,
-            warningCount: stats.warningCount,
-            fixableErrorCount: stats.fixableErrorCount,
-            fixableWarningCount: stats.fixableWarningCount
-        };
-    }
-
-    /**
-     * Returns a configuration object for the given file based on the CLI options.
-     * This is the same logic used by the ESLint CLI executable to determine
-     * configuration for each file it processes.
-     * @param {string} filePath The path of the file to retrieve a config object for.
-     * @returns {Object} A configuration object for the file.
-     */
-    getConfigForFile(filePath) {
-        const configHelper = this.config;
-
-        return configHelper.getConfig(filePath);
-    }
-
-    /**
-     * Checks if a given path is ignored by ESLint.
-     * @param {string} filePath The path of the file to check.
-     * @returns {boolean} Whether or not the given path is ignored.
-     */
-    isPathIgnored(filePath) {
-        const resolvedPath = path.resolve(this.options.cwd, filePath);
-        const ignoredPaths = new IgnoredPaths(this.options);
-
-        return ignoredPaths.contains(resolvedPath);
-    }
-
-    /**
-     * Returns the formatter representing the given format or null if no formatter
-     * with the given name can be found.
-     * @param {string} [format] The name of the format to load or the path to a
-     *      custom formatter.
-     * @returns {Function} The formatter function or null if not found.
-     */
-    getFormatter(format) {
-
-        // default is stylish
-        const resolvedFormatName = format || "stylish";
-
-        // only strings are valid formatters
-        if (typeof resolvedFormatName === "string") {
-
-            // replace \ with / for Windows compatibility
-            const normalizedFormatName = resolvedFormatName.replace(/\\/g, "/");
-
-            const cwd = this.options ? this.options.cwd : process.cwd();
-            const namespace = naming.getNamespaceFromTerm(normalizedFormatName);
-
-            let formatterPath;
-
-            // if there's a slash, then it's a file
-            if (!namespace && normalizedFormatName.indexOf("/") > -1) {
-                formatterPath = path.resolve(cwd, normalizedFormatName);
-            } else {
-                try {
-                    const npmFormat = naming.normalizePackageName(normalizedFormatName, "eslint-formatter");
-
-                    formatterPath = resolver.resolve(npmFormat, `${cwd}/node_modules`);
-                } catch (e) {
-                    formatterPath = `./formatters/${normalizedFormatName}`;
-                }
-            }
-
-            try {
-                return require(formatterPath);
-            } catch (ex) {
-                ex.message = `There was a problem loading formatter: ${formatterPath}\nError: ${ex.message}`;
-                throw ex;
-            }
-
-        } else {
-            return null;
-        }
-    }
-}
-
-CLIEngine.version = pkg.version;
-CLIEngine.getFormatter = CLIEngine.prototype.getFormatter;
-
-module.exports = CLIEngine;
diff --git a/node_modules/eslint/lib/cli.js b/node_modules/eslint/lib/cli.js
deleted file mode 100644
index 6a5482b..0000000
--- a/node_modules/eslint/lib/cli.js
+++ /dev/null
@@ -1,219 +0,0 @@
-/**
- * @fileoverview Main CLI object.
- * @author Nicholas C. Zakas
- */
-
-"use strict";
-
-/*
- * The CLI object should *not* call process.exit() directly. It should only return
- * exit codes. This allows other programs to use the CLI object and still control
- * when the program exits.
- */
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const fs = require("fs"),
-    path = require("path"),
-    options = require("./options"),
-    CLIEngine = require("./cli-engine"),
-    mkdirp = require("mkdirp"),
-    log = require("./logging");
-
-const debug = require("debug")("eslint:cli");
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Predicate function for whether or not to apply fixes in quiet mode.
- * If a message is a warning, do not apply a fix.
- * @param {LintResult} lintResult The lint result.
- * @returns {boolean} True if the lint message is an error (and thus should be
- * autofixed), false otherwise.
- */
-function quietFixPredicate(lintResult) {
-    return lintResult.severity === 2;
-}
-
-/**
- * Translates the CLI options into the options expected by the CLIEngine.
- * @param {Object} cliOptions The CLI options to translate.
- * @returns {CLIEngineOptions} The options object for the CLIEngine.
- * @private
- */
-function translateOptions(cliOptions) {
-    return {
-        envs: cliOptions.env,
-        extensions: cliOptions.ext,
-        rules: cliOptions.rule,
-        plugins: cliOptions.plugin,
-        globals: cliOptions.global,
-        ignore: cliOptions.ignore,
-        ignorePath: cliOptions.ignorePath,
-        ignorePattern: cliOptions.ignorePattern,
-        configFile: cliOptions.config,
-        rulePaths: cliOptions.rulesdir,
-        useEslintrc: cliOptions.eslintrc,
-        parser: cliOptions.parser,
-        parserOptions: cliOptions.parserOptions,
-        cache: cliOptions.cache,
-        cacheFile: cliOptions.cacheFile,
-        cacheLocation: cliOptions.cacheLocation,
-        fix: (cliOptions.fix || cliOptions.fixDryRun) && (cliOptions.quiet ? quietFixPredicate : true),
-        allowInlineConfig: cliOptions.inlineConfig,
-        reportUnusedDisableDirectives: cliOptions.reportUnusedDisableDirectives
-    };
-}
-
-/**
- * Outputs the results of the linting.
- * @param {CLIEngine} engine The CLIEngine to use.
- * @param {LintResult[]} results The results to print.
- * @param {string} format The name of the formatter to use or the path to the formatter.
- * @param {string} outputFile The path for the output file.
- * @returns {boolean} True if the printing succeeds, false if not.
- * @private
- */
-function printResults(engine, results, format, outputFile) {
-    let formatter;
-
-    try {
-        formatter = engine.getFormatter(format);
-    } catch (e) {
-        log.error(e.message);
-        return false;
-    }
-
-    const output = formatter(results);
-
-    if (output) {
-        if (outputFile) {
-            const filePath = path.resolve(process.cwd(), outputFile);
-
-            if (fs.existsSync(filePath) && fs.statSync(filePath).isDirectory()) {
-                log.error("Cannot write to output file path, it is a directory: %s", outputFile);
-                return false;
-            }
-
-            try {
-                mkdirp.sync(path.dirname(filePath));
-                fs.writeFileSync(filePath, output);
-            } catch (ex) {
-                log.error("There was a problem writing the output file:\n%s", ex);
-                return false;
-            }
-        } else {
-            log.info(output);
-        }
-    }
-
-    return true;
-
-}
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-/**
- * Encapsulates all CLI behavior for eslint. Makes it easier to test as well as
- * for other Node.js programs to effectively run the CLI.
- */
-const cli = {
-
-    /**
-     * Executes the CLI based on an array of arguments that is passed in.
-     * @param {string|Array|Object} args The arguments to process.
-     * @param {string} [text] The text to lint (used for TTY).
-     * @returns {int} The exit code for the operation.
-     */
-    execute(args, text) {
-
-        let currentOptions;
-
-        try {
-            currentOptions = options.parse(args);
-        } catch (error) {
-            log.error(error.message);
-            return 1;
-        }
-
-        const files = currentOptions._;
-
-        const useStdin = typeof text === "string";
-
-        if (currentOptions.version) { // version from package.json
-
-            log.info(`v${require("../package.json").version}`);
-
-        } else if (currentOptions.printConfig) {
-            if (files.length) {
-                log.error("The --print-config option must be used with exactly one file name.");
-                return 1;
-            }
-            if (useStdin) {
-                log.error("The --print-config option is not available for piped-in code.");
-                return 1;
-            }
-
-            const engine = new CLIEngine(translateOptions(currentOptions));
-
-            const fileConfig = engine.getConfigForFile(currentOptions.printConfig);
-
-            log.info(JSON.stringify(fileConfig, null, "  "));
-            return 0;
-        } else if (currentOptions.help || (!files.length && !useStdin)) {
-
-            log.info(options.generateHelp());
-
-        } else {
-
-            debug(`Running on ${useStdin ? "text" : "files"}`);
-
-            if (currentOptions.fix && currentOptions.fixDryRun) {
-                log.error("The --fix option and the --fix-dry-run option cannot be used together.");
-                return 1;
-            }
-
-            if (useStdin && currentOptions.fix) {
-                log.error("The --fix option is not available for piped-in code; use --fix-dry-run instead.");
-                return 1;
-            }
-
-            const engine = new CLIEngine(translateOptions(currentOptions));
-
-            const report = useStdin ? engine.executeOnText(text, currentOptions.stdinFilename, true) : engine.executeOnFiles(files);
-
-            if (currentOptions.fix) {
-                debug("Fix mode enabled - applying fixes");
-                CLIEngine.outputFixes(report);
-            }
-
-            if (currentOptions.quiet) {
-                debug("Quiet mode enabled - filtering out warnings");
-                report.results = CLIEngine.getErrorResults(report.results);
-            }
-
-            if (printResults(engine, report.results, currentOptions.format, currentOptions.outputFile)) {
-                const tooManyWarnings = currentOptions.maxWarnings >= 0 && report.warningCount > currentOptions.maxWarnings;
-
-                if (!report.errorCount && tooManyWarnings) {
-                    log.error("ESLint found too many warnings (maximum: %s).", currentOptions.maxWarnings);
-                }
-
-                return (report.errorCount || tooManyWarnings) ? 1 : 0;
-            }
-            return 1;
-
-
-        }
-
-        return 0;
-    }
-};
-
-module.exports = cli;
diff --git a/node_modules/eslint/lib/code-path-analysis/code-path-analyzer.js b/node_modules/eslint/lib/code-path-analysis/code-path-analyzer.js
deleted file mode 100644
index 1a4f787..0000000
--- a/node_modules/eslint/lib/code-path-analysis/code-path-analyzer.js
+++ /dev/null
@@ -1,659 +0,0 @@
-/**
- * @fileoverview A class of the code path analyzer.
- * @author Toru Nagashima
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const assert = require("assert"),
-    CodePath = require("./code-path"),
-    CodePathSegment = require("./code-path-segment"),
-    IdGenerator = require("./id-generator"),
-    debug = require("./debug-helpers"),
-    astUtils = require("../ast-utils");
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Checks whether or not a given node is a `case` node (not `default` node).
- *
- * @param {ASTNode} node - A `SwitchCase` node to check.
- * @returns {boolean} `true` if the node is a `case` node (not `default` node).
- */
-function isCaseNode(node) {
-    return Boolean(node.test);
-}
-
-/**
- * Checks whether or not a given logical expression node goes different path
- * between the `true` case and the `false` case.
- *
- * @param {ASTNode} node - A node to check.
- * @returns {boolean} `true` if the node is a test of a choice statement.
- */
-function isForkingByTrueOrFalse(node) {
-    const parent = node.parent;
-
-    switch (parent.type) {
-        case "ConditionalExpression":
-        case "IfStatement":
-        case "WhileStatement":
-        case "DoWhileStatement":
-        case "ForStatement":
-            return parent.test === node;
-
-        case "LogicalExpression":
-            return true;
-
-        default:
-            return false;
-    }
-}
-
-/**
- * Gets the boolean value of a given literal node.
- *
- * This is used to detect infinity loops (e.g. `while (true) {}`).
- * Statements preceded by an infinity loop are unreachable if the loop didn't
- * have any `break` statement.
- *
- * @param {ASTNode} node - A node to get.
- * @returns {boolean|undefined} a boolean value if the node is a Literal node,
- *   otherwise `undefined`.
- */
-function getBooleanValueIfSimpleConstant(node) {
-    if (node.type === "Literal") {
-        return Boolean(node.value);
-    }
-    return void 0;
-}
-
-/**
- * Checks that a given identifier node is a reference or not.
- *
- * This is used to detect the first throwable node in a `try` block.
- *
- * @param {ASTNode} node - An Identifier node to check.
- * @returns {boolean} `true` if the node is a reference.
- */
-function isIdentifierReference(node) {
-    const parent = node.parent;
-
-    switch (parent.type) {
-        case "LabeledStatement":
-        case "BreakStatement":
-        case "ContinueStatement":
-        case "ArrayPattern":
-        case "RestElement":
-        case "ImportSpecifier":
-        case "ImportDefaultSpecifier":
-        case "ImportNamespaceSpecifier":
-        case "CatchClause":
-            return false;
-
-        case "FunctionDeclaration":
-        case "FunctionExpression":
-        case "ArrowFunctionExpression":
-        case "ClassDeclaration":
-        case "ClassExpression":
-        case "VariableDeclarator":
-            return parent.id !== node;
-
-        case "Property":
-        case "MethodDefinition":
-            return (
-                parent.key !== node ||
-                parent.computed ||
-                parent.shorthand
-            );
-
-        case "AssignmentPattern":
-            return parent.key !== node;
-
-        default:
-            return true;
-    }
-}
-
-/**
- * Updates the current segment with the head segment.
- * This is similar to local branches and tracking branches of git.
- *
- * To separate the current and the head is in order to not make useless segments.
- *
- * In this process, both "onCodePathSegmentStart" and "onCodePathSegmentEnd"
- * events are fired.
- *
- * @param {CodePathAnalyzer} analyzer - The instance.
- * @param {ASTNode} node - The current AST node.
- * @returns {void}
- */
-function forwardCurrentToHead(analyzer, node) {
-    const codePath = analyzer.codePath;
-    const state = CodePath.getState(codePath);
-    const currentSegments = state.currentSegments;
-    const headSegments = state.headSegments;
-    const end = Math.max(currentSegments.length, headSegments.length);
-    let i, currentSegment, headSegment;
-
-    // Fires leaving events.
-    for (i = 0; i < end; ++i) {
-        currentSegment = currentSegments[i];
-        headSegment = headSegments[i];
-
-        if (currentSegment !== headSegment && currentSegment) {
-            debug.dump(`onCodePathSegmentEnd ${currentSegment.id}`);
-
-            if (currentSegment.reachable) {
-                analyzer.emitter.emit(
-                    "onCodePathSegmentEnd",
-                    currentSegment,
-                    node
-                );
-            }
-        }
-    }
-
-    // Update state.
-    state.currentSegments = headSegments;
-
-    // Fires entering events.
-    for (i = 0; i < end; ++i) {
-        currentSegment = currentSegments[i];
-        headSegment = headSegments[i];
-
-        if (currentSegment !== headSegment && headSegment) {
-            debug.dump(`onCodePathSegmentStart ${headSegment.id}`);
-
-            CodePathSegment.markUsed(headSegment);
-            if (headSegment.reachable) {
-                analyzer.emitter.emit(
-                    "onCodePathSegmentStart",
-                    headSegment,
-                    node
-                );
-            }
-        }
-    }
-
-}
-
-/**
- * Updates the current segment with empty.
- * This is called at the last of functions or the program.
- *
- * @param {CodePathAnalyzer} analyzer - The instance.
- * @param {ASTNode} node - The current AST node.
- * @returns {void}
- */
-function leaveFromCurrentSegment(analyzer, node) {
-    const state = CodePath.getState(analyzer.codePath);
-    const currentSegments = state.currentSegments;
-
-    for (let i = 0; i < currentSegments.length; ++i) {
-        const currentSegment = currentSegments[i];
-
-        debug.dump(`onCodePathSegmentEnd ${currentSegment.id}`);
-        if (currentSegment.reachable) {
-            analyzer.emitter.emit(
-                "onCodePathSegmentEnd",
-                currentSegment,
-                node
-            );
-        }
-    }
-
-    state.currentSegments = [];
-}
-
-/**
- * Updates the code path due to the position of a given node in the parent node
- * thereof.
- *
- * For example, if the node is `parent.consequent`, this creates a fork from the
- * current path.
- *
- * @param {CodePathAnalyzer} analyzer - The instance.
- * @param {ASTNode} node - The current AST node.
- * @returns {void}
- */
-function preprocess(analyzer, node) {
-    const codePath = analyzer.codePath;
-    const state = CodePath.getState(codePath);
-    const parent = node.parent;
-
-    switch (parent.type) {
-        case "LogicalExpression":
-            if (parent.right === node) {
-                state.makeLogicalRight();
-            }
-            break;
-
-        case "ConditionalExpression":
-        case "IfStatement":
-
-            /*
-             * Fork if this node is at `consequent`/`alternate`.
-             * `popForkContext()` exists at `IfStatement:exit` and
-             * `ConditionalExpression:exit`.
-             */
-            if (parent.consequent === node) {
-                state.makeIfConsequent();
-            } else if (parent.alternate === node) {
-                state.makeIfAlternate();
-            }
-            break;
-
-        case "SwitchCase":
-            if (parent.consequent[0] === node) {
-                state.makeSwitchCaseBody(false, !parent.test);
-            }
-            break;
-
-        case "TryStatement":
-            if (parent.handler === node) {
-                state.makeCatchBlock();
-            } else if (parent.finalizer === node) {
-                state.makeFinallyBlock();
-            }
-            break;
-
-        case "WhileStatement":
-            if (parent.test === node) {
-                state.makeWhileTest(getBooleanValueIfSimpleConstant(node));
-            } else {
-                assert(parent.body === node);
-                state.makeWhileBody();
-            }
-            break;
-
-        case "DoWhileStatement":
-            if (parent.body === node) {
-                state.makeDoWhileBody();
-            } else {
-                assert(parent.test === node);
-                state.makeDoWhileTest(getBooleanValueIfSimpleConstant(node));
-            }
-            break;
-
-        case "ForStatement":
-            if (parent.test === node) {
-                state.makeForTest(getBooleanValueIfSimpleConstant(node));
-            } else if (parent.update === node) {
-                state.makeForUpdate();
-            } else if (parent.body === node) {
-                state.makeForBody();
-            }
-            break;
-
-        case "ForInStatement":
-        case "ForOfStatement":
-            if (parent.left === node) {
-                state.makeForInOfLeft();
-            } else if (parent.right === node) {
-                state.makeForInOfRight();
-            } else {
-                assert(parent.body === node);
-                state.makeForInOfBody();
-            }
-            break;
-
-        case "AssignmentPattern":
-
-            /*
-             * Fork if this node is at `right`.
-             * `left` is executed always, so it uses the current path.
-             * `popForkContext()` exists at `AssignmentPattern:exit`.
-             */
-            if (parent.right === node) {
-                state.pushForkContext();
-                state.forkBypassPath();
-                state.forkPath();
-            }
-            break;
-
-        default:
-            break;
-    }
-}
-
-/**
- * Updates the code path due to the type of a given node in entering.
- *
- * @param {CodePathAnalyzer} analyzer - The instance.
- * @param {ASTNode} node - The current AST node.
- * @returns {void}
- */
-function processCodePathToEnter(analyzer, node) {
-    let codePath = analyzer.codePath;
-    let state = codePath && CodePath.getState(codePath);
-    const parent = node.parent;
-
-    switch (node.type) {
-        case "Program":
-        case "FunctionDeclaration":
-        case "FunctionExpression":
-        case "ArrowFunctionExpression":
-            if (codePath) {
-
-                // Emits onCodePathSegmentStart events if updated.
-                forwardCurrentToHead(analyzer, node);
-                debug.dumpState(node, state, false);
-            }
-
-            // Create the code path of this scope.
-            codePath = analyzer.codePath = new CodePath(
-                analyzer.idGenerator.next(),
-                codePath,
-                analyzer.onLooped
-            );
-            state = CodePath.getState(codePath);
-
-            // Emits onCodePathStart events.
-            debug.dump(`onCodePathStart ${codePath.id}`);
-            analyzer.emitter.emit("onCodePathStart", codePath, node);
-            break;
-
-        case "LogicalExpression":
-            state.pushChoiceContext(node.operator, isForkingByTrueOrFalse(node));
-            break;
-
-        case "ConditionalExpression":
-        case "IfStatement":
-            state.pushChoiceContext("test", false);
-            break;
-
-        case "SwitchStatement":
-            state.pushSwitchContext(
-                node.cases.some(isCaseNode),
-                astUtils.getLabel(node)
-            );
-            break;
-
-        case "TryStatement":
-            state.pushTryContext(Boolean(node.finalizer));
-            break;
-
-        case "SwitchCase":
-
-            /*
-             * Fork if this node is after the 2st node in `cases`.
-             * It's similar to `else` blocks.
-             * The next `test` node is processed in this path.
-             */
-            if (parent.discriminant !== node && parent.cases[0] !== node) {
-                state.forkPath();
-            }
-            break;
-
-        case "WhileStatement":
-        case "DoWhileStatement":
-        case "ForStatement":
-        case "ForInStatement":
-        case "ForOfStatement":
-            state.pushLoopContext(node.type, astUtils.getLabel(node));
-            break;
-
-        case "LabeledStatement":
-            if (!astUtils.isBreakableStatement(node.body)) {
-                state.pushBreakContext(false, node.label.name);
-            }
-            break;
-
-        default:
-            break;
-    }
-
-    // Emits onCodePathSegmentStart events if updated.
-    forwardCurrentToHead(analyzer, node);
-    debug.dumpState(node, state, false);
-}
-
-/**
- * Updates the code path due to the type of a given node in leaving.
- *
- * @param {CodePathAnalyzer} analyzer - The instance.
- * @param {ASTNode} node - The current AST node.
- * @returns {void}
- */
-function processCodePathToExit(analyzer, node) {
-    const codePath = analyzer.codePath;
-    const state = CodePath.getState(codePath);
-    let dontForward = false;
-
-    switch (node.type) {
-        case "IfStatement":
-        case "ConditionalExpression":
-        case "LogicalExpression":
-            state.popChoiceContext();
-            break;
-
-        case "SwitchStatement":
-            state.popSwitchContext();
-            break;
-
-        case "SwitchCase":
-
-            /*
-             * This is the same as the process at the 1st `consequent` node in
-             * `preprocess` function.
-             * Must do if this `consequent` is empty.
-             */
-            if (node.consequent.length === 0) {
-                state.makeSwitchCaseBody(true, !node.test);
-            }
-            if (state.forkContext.reachable) {
-                dontForward = true;
-            }
-            break;
-
-        case "TryStatement":
-            state.popTryContext();
-            break;
-
-        case "BreakStatement":
-            forwardCurrentToHead(analyzer, node);
-            state.makeBreak(node.label && node.label.name);
-            dontForward = true;
-            break;
-
-        case "ContinueStatement":
-            forwardCurrentToHead(analyzer, node);
-            state.makeContinue(node.label && node.label.name);
-            dontForward = true;
-            break;
-
-        case "ReturnStatement":
-            forwardCurrentToHead(analyzer, node);
-            state.makeReturn();
-            dontForward = true;
-            break;
-
-        case "ThrowStatement":
-            forwardCurrentToHead(analyzer, node);
-            state.makeThrow();
-            dontForward = true;
-            break;
-
-        case "Identifier":
-            if (isIdentifierReference(node)) {
-                state.makeFirstThrowablePathInTryBlock();
-                dontForward = true;
-            }
-            break;
-
-        case "CallExpression":
-        case "MemberExpression":
-        case "NewExpression":
-            state.makeFirstThrowablePathInTryBlock();
-            break;
-
-        case "WhileStatement":
-        case "DoWhileStatement":
-        case "ForStatement":
-        case "ForInStatement":
-        case "ForOfStatement":
-            state.popLoopContext();
-            break;
-
-        case "AssignmentPattern":
-            state.popForkContext();
-            break;
-
-        case "LabeledStatement":
-            if (!astUtils.isBreakableStatement(node.body)) {
-                state.popBreakContext();
-            }
-            break;
-
-        default:
-            break;
-    }
-
-    // Emits onCodePathSegmentStart events if updated.
-    if (!dontForward) {
-        forwardCurrentToHead(analyzer, node);
-    }
-    debug.dumpState(node, state, true);
-}
-
-/**
- * Updates the code path to finalize the current code path.
- *
- * @param {CodePathAnalyzer} analyzer - The instance.
- * @param {ASTNode} node - The current AST node.
- * @returns {void}
- */
-function postprocess(analyzer, node) {
-    switch (node.type) {
-        case "Program":
-        case "FunctionDeclaration":
-        case "FunctionExpression":
-        case "ArrowFunctionExpression": {
-            let codePath = analyzer.codePath;
-
-            // Mark the current path as the final node.
-            CodePath.getState(codePath).makeFinal();
-
-            // Emits onCodePathSegmentEnd event of the current segments.
-            leaveFromCurrentSegment(analyzer, node);
-
-            // Emits onCodePathEnd event of this code path.
-            debug.dump(`onCodePathEnd ${codePath.id}`);
-            analyzer.emitter.emit("onCodePathEnd", codePath, node);
-            debug.dumpDot(codePath);
-
-            codePath = analyzer.codePath = analyzer.codePath.upper;
-            if (codePath) {
-                debug.dumpState(node, CodePath.getState(codePath), true);
-            }
-            break;
-        }
-
-        default:
-            break;
-    }
-}
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-/**
- * The class to analyze code paths.
- * This class implements the EventGenerator interface.
- */
-class CodePathAnalyzer {
-
-    /**
-     * @param {EventGenerator} eventGenerator - An event generator to wrap.
-     */
-    constructor(eventGenerator) {
-        this.original = eventGenerator;
-        this.emitter = eventGenerator.emitter;
-        this.codePath = null;
-        this.idGenerator = new IdGenerator("s");
-        this.currentNode = null;
-        this.onLooped = this.onLooped.bind(this);
-    }
-
-    /**
-     * Does the process to enter a given AST node.
-     * This updates state of analysis and calls `enterNode` of the wrapped.
-     *
-     * @param {ASTNode} node - A node which is entering.
-     * @returns {void}
-     */
-    enterNode(node) {
-        this.currentNode = node;
-
-        // Updates the code path due to node's position in its parent node.
-        if (node.parent) {
-            preprocess(this, node);
-        }
-
-        /*
-         * Updates the code path.
-         * And emits onCodePathStart/onCodePathSegmentStart events.
-         */
-        processCodePathToEnter(this, node);
-
-        // Emits node events.
-        this.original.enterNode(node);
-
-        this.currentNode = null;
-    }
-
-    /**
-     * Does the process to leave a given AST node.
-     * This updates state of analysis and calls `leaveNode` of the wrapped.
-     *
-     * @param {ASTNode} node - A node which is leaving.
-     * @returns {void}
-     */
-    leaveNode(node) {
-        this.currentNode = node;
-
-        /*
-         * Updates the code path.
-         * And emits onCodePathStart/onCodePathSegmentStart events.
-         */
-        processCodePathToExit(this, node);
-
-        // Emits node events.
-        this.original.leaveNode(node);
-
-        // Emits the last onCodePathStart/onCodePathSegmentStart events.
-        postprocess(this, node);
-
-        this.currentNode = null;
-    }
-
-    /**
-     * This is called on a code path looped.
-     * Then this raises a looped event.
-     *
-     * @param {CodePathSegment} fromSegment - A segment of prev.
-     * @param {CodePathSegment} toSegment - A segment of next.
-     * @returns {void}
-     */
-    onLooped(fromSegment, toSegment) {
-        if (fromSegment.reachable && toSegment.reachable) {
-            debug.dump(`onCodePathSegmentLoop ${fromSegment.id} -> ${toSegment.id}`);
-            this.emitter.emit(
-                "onCodePathSegmentLoop",
-                fromSegment,
-                toSegment,
-                this.currentNode
-            );
-        }
-    }
-}
-
-module.exports = CodePathAnalyzer;
diff --git a/node_modules/eslint/lib/code-path-analysis/code-path-segment.js b/node_modules/eslint/lib/code-path-analysis/code-path-segment.js
deleted file mode 100644
index 8145f92..0000000
--- a/node_modules/eslint/lib/code-path-analysis/code-path-segment.js
+++ /dev/null
@@ -1,245 +0,0 @@
-/**
- * @fileoverview A class of the code path segment.
- * @author Toru Nagashima
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const debug = require("./debug-helpers");
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Checks whether or not a given segment is reachable.
- *
- * @param {CodePathSegment} segment - A segment to check.
- * @returns {boolean} `true` if the segment is reachable.
- */
-function isReachable(segment) {
-    return segment.reachable;
-}
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-/**
- * A code path segment.
- */
-class CodePathSegment {
-
-    /**
-     * @param {string} id - An identifier.
-     * @param {CodePathSegment[]} allPrevSegments - An array of the previous segments.
-     *   This array includes unreachable segments.
-     * @param {boolean} reachable - A flag which shows this is reachable.
-     */
-    constructor(id, allPrevSegments, reachable) {
-
-        /**
-         * The identifier of this code path.
-         * Rules use it to store additional information of each rule.
-         * @type {string}
-         */
-        this.id = id;
-
-        /**
-         * An array of the next segments.
-         * @type {CodePathSegment[]}
-         */
-        this.nextSegments = [];
-
-        /**
-         * An array of the previous segments.
-         * @type {CodePathSegment[]}
-         */
-        this.prevSegments = allPrevSegments.filter(isReachable);
-
-        /**
-         * An array of the next segments.
-         * This array includes unreachable segments.
-         * @type {CodePathSegment[]}
-         */
-        this.allNextSegments = [];
-
-        /**
-         * An array of the previous segments.
-         * This array includes unreachable segments.
-         * @type {CodePathSegment[]}
-         */
-        this.allPrevSegments = allPrevSegments;
-
-        /**
-         * A flag which shows this is reachable.
-         * @type {boolean}
-         */
-        this.reachable = reachable;
-
-        // Internal data.
-        Object.defineProperty(this, "internal", {
-            value: {
-                used: false,
-                loopedPrevSegments: []
-            }
-        });
-
-        /* istanbul ignore if */
-        if (debug.enabled) {
-            this.internal.nodes = [];
-            this.internal.exitNodes = [];
-        }
-    }
-
-    /**
-     * Checks a given previous segment is coming from the end of a loop.
-     *
-     * @param {CodePathSegment} segment - A previous segment to check.
-     * @returns {boolean} `true` if the segment is coming from the end of a loop.
-     */
-    isLoopedPrevSegment(segment) {
-        return this.internal.loopedPrevSegments.indexOf(segment) !== -1;
-    }
-
-    /**
-     * Creates the root segment.
-     *
-     * @param {string} id - An identifier.
-     * @returns {CodePathSegment} The created segment.
-     */
-    static newRoot(id) {
-        return new CodePathSegment(id, [], true);
-    }
-
-    /**
-     * Creates a segment that follows given segments.
-     *
-     * @param {string} id - An identifier.
-     * @param {CodePathSegment[]} allPrevSegments - An array of the previous segments.
-     * @returns {CodePathSegment} The created segment.
-     */
-    static newNext(id, allPrevSegments) {
-        return new CodePathSegment(
-            id,
-            CodePathSegment.flattenUnusedSegments(allPrevSegments),
-            allPrevSegments.some(isReachable)
-        );
-    }
-
-    /**
-     * Creates an unreachable segment that follows given segments.
-     *
-     * @param {string} id - An identifier.
-     * @param {CodePathSegment[]} allPrevSegments - An array of the previous segments.
-     * @returns {CodePathSegment} The created segment.
-     */
-    static newUnreachable(id, allPrevSegments) {
-        const segment = new CodePathSegment(id, CodePathSegment.flattenUnusedSegments(allPrevSegments), false);
-
-        /*
-         * In `if (a) return a; foo();` case, the unreachable segment preceded by
-         * the return statement is not used but must not be remove.
-         */
-        CodePathSegment.markUsed(segment);
-
-        return segment;
-    }
-
-    /**
-     * Creates a segment that follows given segments.
-     * This factory method does not connect with `allPrevSegments`.
-     * But this inherits `reachable` flag.
-     *
-     * @param {string} id - An identifier.
-     * @param {CodePathSegment[]} allPrevSegments - An array of the previous segments.
-     * @returns {CodePathSegment} The created segment.
-     */
-    static newDisconnected(id, allPrevSegments) {
-        return new CodePathSegment(id, [], allPrevSegments.some(isReachable));
-    }
-
-    /**
-     * Makes a given segment being used.
-     *
-     * And this function registers the segment into the previous segments as a next.
-     *
-     * @param {CodePathSegment} segment - A segment to mark.
-     * @returns {void}
-     */
-    static markUsed(segment) {
-        if (segment.internal.used) {
-            return;
-        }
-        segment.internal.used = true;
-
-        let i;
-
-        if (segment.reachable) {
-            for (i = 0; i < segment.allPrevSegments.length; ++i) {
-                const prevSegment = segment.allPrevSegments[i];
-
-                prevSegment.allNextSegments.push(segment);
-                prevSegment.nextSegments.push(segment);
-            }
-        } else {
-            for (i = 0; i < segment.allPrevSegments.length; ++i) {
-                segment.allPrevSegments[i].allNextSegments.push(segment);
-            }
-        }
-    }
-
-    /**
-     * Marks a previous segment as looped.
-     *
-     * @param {CodePathSegment} segment - A segment.
-     * @param {CodePathSegment} prevSegment - A previous segment to mark.
-     * @returns {void}
-     */
-    static markPrevSegmentAsLooped(segment, prevSegment) {
-        segment.internal.loopedPrevSegments.push(prevSegment);
-    }
-
-    /**
-     * Replaces unused segments with the previous segments of each unused segment.
-     *
-     * @param {CodePathSegment[]} segments - An array of segments to replace.
-     * @returns {CodePathSegment[]} The replaced array.
-     */
-    static flattenUnusedSegments(segments) {
-        const done = Object.create(null);
-        const retv = [];
-
-        for (let i = 0; i < segments.length; ++i) {
-            const segment = segments[i];
-
-            // Ignores duplicated.
-            if (done[segment.id]) {
-                continue;
-            }
-
-            // Use previous segments if unused.
-            if (!segment.internal.used) {
-                for (let j = 0; j < segment.allPrevSegments.length; ++j) {
-                    const prevSegment = segment.allPrevSegments[j];
-
-                    if (!done[prevSegment.id]) {
-                        done[prevSegment.id] = true;
-                        retv.push(prevSegment);
-                    }
-                }
-            } else {
-                done[segment.id] = true;
-                retv.push(segment);
-            }
-        }
-
-        return retv;
-    }
-}
-
-module.exports = CodePathSegment;
diff --git a/node_modules/eslint/lib/code-path-analysis/code-path-state.js b/node_modules/eslint/lib/code-path-analysis/code-path-state.js
deleted file mode 100644
index 57da10f..0000000
--- a/node_modules/eslint/lib/code-path-analysis/code-path-state.js
+++ /dev/null
@@ -1,1440 +0,0 @@
-/**
- * @fileoverview A class to manage state of generating a code path.
- * @author Toru Nagashima
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const CodePathSegment = require("./code-path-segment"),
-    ForkContext = require("./fork-context");
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Adds given segments into the `dest` array.
- * If the `others` array does not includes the given segments, adds to the `all`
- * array as well.
- *
- * This adds only reachable and used segments.
- *
- * @param {CodePathSegment[]} dest - A destination array (`returnedSegments` or `thrownSegments`).
- * @param {CodePathSegment[]} others - Another destination array (`returnedSegments` or `thrownSegments`).
- * @param {CodePathSegment[]} all - The unified destination array (`finalSegments`).
- * @param {CodePathSegment[]} segments - Segments to add.
- * @returns {void}
- */
-function addToReturnedOrThrown(dest, others, all, segments) {
-    for (let i = 0; i < segments.length; ++i) {
-        const segment = segments[i];
-
-        dest.push(segment);
-        if (others.indexOf(segment) === -1) {
-            all.push(segment);
-        }
-    }
-}
-
-/**
- * Gets a loop-context for a `continue` statement.
- *
- * @param {CodePathState} state - A state to get.
- * @param {string} label - The label of a `continue` statement.
- * @returns {LoopContext} A loop-context for a `continue` statement.
- */
-function getContinueContext(state, label) {
-    if (!label) {
-        return state.loopContext;
-    }
-
-    let context = state.loopContext;
-
-    while (context) {
-        if (context.label === label) {
-            return context;
-        }
-        context = context.upper;
-    }
-
-    /* istanbul ignore next: foolproof (syntax error) */
-    return null;
-}
-
-/**
- * Gets a context for a `break` statement.
- *
- * @param {CodePathState} state - A state to get.
- * @param {string} label - The label of a `break` statement.
- * @returns {LoopContext|SwitchContext} A context for a `break` statement.
- */
-function getBreakContext(state, label) {
-    let context = state.breakContext;
-
-    while (context) {
-        if (label ? context.label === label : context.breakable) {
-            return context;
-        }
-        context = context.upper;
-    }
-
-    /* istanbul ignore next: foolproof (syntax error) */
-    return null;
-}
-
-/**
- * Gets a context for a `return` statement.
- *
- * @param {CodePathState} state - A state to get.
- * @returns {TryContext|CodePathState} A context for a `return` statement.
- */
-function getReturnContext(state) {
-    let context = state.tryContext;
-
-    while (context) {
-        if (context.hasFinalizer && context.position !== "finally") {
-            return context;
-        }
-        context = context.upper;
-    }
-
-    return state;
-}
-
-/**
- * Gets a context for a `throw` statement.
- *
- * @param {CodePathState} state - A state to get.
- * @returns {TryContext|CodePathState} A context for a `throw` statement.
- */
-function getThrowContext(state) {
-    let context = state.tryContext;
-
-    while (context) {
-        if (context.position === "try" ||
-            (context.hasFinalizer && context.position === "catch")
-        ) {
-            return context;
-        }
-        context = context.upper;
-    }
-
-    return state;
-}
-
-/**
- * Removes a given element from a given array.
- *
- * @param {any[]} xs - An array to remove the specific element.
- * @param {any} x - An element to be removed.
- * @returns {void}
- */
-function remove(xs, x) {
-    xs.splice(xs.indexOf(x), 1);
-}
-
-/**
- * Disconnect given segments.
- *
- * This is used in a process for switch statements.
- * If there is the "default" chunk before other cases, the order is different
- * between node's and running's.
- *
- * @param {CodePathSegment[]} prevSegments - Forward segments to disconnect.
- * @param {CodePathSegment[]} nextSegments - Backward segments to disconnect.
- * @returns {void}
- */
-function removeConnection(prevSegments, nextSegments) {
-    for (let i = 0; i < prevSegments.length; ++i) {
-        const prevSegment = prevSegments[i];
-        const nextSegment = nextSegments[i];
-
-        remove(prevSegment.nextSegments, nextSegment);
-        remove(prevSegment.allNextSegments, nextSegment);
-        remove(nextSegment.prevSegments, prevSegment);
-        remove(nextSegment.allPrevSegments, prevSegment);
-    }
-}
-
-/**
- * Creates looping path.
- *
- * @param {CodePathState} state - The instance.
- * @param {CodePathSegment[]} unflattenedFromSegments - Segments which are source.
- * @param {CodePathSegment[]} unflattenedToSegments - Segments which are destination.
- * @returns {void}
- */
-function makeLooped(state, unflattenedFromSegments, unflattenedToSegments) {
-    const fromSegments = CodePathSegment.flattenUnusedSegments(unflattenedFromSegments);
-    const toSegments = CodePathSegment.flattenUnusedSegments(unflattenedToSegments);
-
-    const end = Math.min(fromSegments.length, toSegments.length);
-
-    for (let i = 0; i < end; ++i) {
-        const fromSegment = fromSegments[i];
-        const toSegment = toSegments[i];
-
-        if (toSegment.reachable) {
-            fromSegment.nextSegments.push(toSegment);
-        }
-        if (fromSegment.reachable) {
-            toSegment.prevSegments.push(fromSegment);
-        }
-        fromSegment.allNextSegments.push(toSegment);
-        toSegment.allPrevSegments.push(fromSegment);
-
-        if (toSegment.allPrevSegments.length >= 2) {
-            CodePathSegment.markPrevSegmentAsLooped(toSegment, fromSegment);
-        }
-
-        state.notifyLooped(fromSegment, toSegment);
-    }
-}
-
-/**
- * Finalizes segments of `test` chunk of a ForStatement.
- *
- * - Adds `false` paths to paths which are leaving from the loop.
- * - Sets `true` paths to paths which go to the body.
- *
- * @param {LoopContext} context - A loop context to modify.
- * @param {ChoiceContext} choiceContext - A choice context of this loop.
- * @param {CodePathSegment[]} head - The current head paths.
- * @returns {void}
- */
-function finalizeTestSegmentsOfFor(context, choiceContext, head) {
-    if (!choiceContext.processed) {
-        choiceContext.trueForkContext.add(head);
-        choiceContext.falseForkContext.add(head);
-    }
-
-    if (context.test !== true) {
-        context.brokenForkContext.addAll(choiceContext.falseForkContext);
-    }
-    context.endOfTestSegments = choiceContext.trueForkContext.makeNext(0, -1);
-}
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-/**
- * A class which manages state to analyze code paths.
- */
-class CodePathState {
-
-    /**
-     * @param {IdGenerator} idGenerator - An id generator to generate id for code
-     *   path segments.
-     * @param {Function} onLooped - A callback function to notify looping.
-     */
-    constructor(idGenerator, onLooped) {
-        this.idGenerator = idGenerator;
-        this.notifyLooped = onLooped;
-        this.forkContext = ForkContext.newRoot(idGenerator);
-        this.choiceContext = null;
-        this.switchContext = null;
-        this.tryContext = null;
-        this.loopContext = null;
-        this.breakContext = null;
-
-        this.currentSegments = [];
-        this.initialSegment = this.forkContext.head[0];
-
-        // returnedSegments and thrownSegments push elements into finalSegments also.
-        const final = this.finalSegments = [];
-        const returned = this.returnedForkContext = [];
-        const thrown = this.thrownForkContext = [];
-
-        returned.add = addToReturnedOrThrown.bind(null, returned, thrown, final);
-        thrown.add = addToReturnedOrThrown.bind(null, thrown, returned, final);
-    }
-
-    /**
-     * The head segments.
-     * @type {CodePathSegment[]}
-     */
-    get headSegments() {
-        return this.forkContext.head;
-    }
-
-    /**
-     * The parent forking context.
-     * This is used for the root of new forks.
-     * @type {ForkContext}
-     */
-    get parentForkContext() {
-        const current = this.forkContext;
-
-        return current && current.upper;
-    }
-
-    /**
-     * Creates and stacks new forking context.
-     *
-     * @param {boolean} forkLeavingPath - A flag which shows being in a
-     *   "finally" block.
-     * @returns {ForkContext} The created context.
-     */
-    pushForkContext(forkLeavingPath) {
-        this.forkContext = ForkContext.newEmpty(
-            this.forkContext,
-            forkLeavingPath
-        );
-
-        return this.forkContext;
-    }
-
-    /**
-     * Pops and merges the last forking context.
-     * @returns {ForkContext} The last context.
-     */
-    popForkContext() {
-        const lastContext = this.forkContext;
-
-        this.forkContext = lastContext.upper;
-        this.forkContext.replaceHead(lastContext.makeNext(0, -1));
-
-        return lastContext;
-    }
-
-    /**
-     * Creates a new path.
-     * @returns {void}
-     */
-    forkPath() {
-        this.forkContext.add(this.parentForkContext.makeNext(-1, -1));
-    }
-
-    /**
-     * Creates a bypass path.
-     * This is used for such as IfStatement which does not have "else" chunk.
-     *
-     * @returns {void}
-     */
-    forkBypassPath() {
-        this.forkContext.add(this.parentForkContext.head);
-    }
-
-    //--------------------------------------------------------------------------
-    // ConditionalExpression, LogicalExpression, IfStatement
-    //--------------------------------------------------------------------------
-
-    /**
-     * Creates a context for ConditionalExpression, LogicalExpression,
-     * IfStatement, WhileStatement, DoWhileStatement, or ForStatement.
-     *
-     * LogicalExpressions have cases that it goes different paths between the
-     * `true` case and the `false` case.
-     *
-     * For Example:
-     *
-     *     if (a || b) {
-     *         foo();
-     *     } else {
-     *         bar();
-     *     }
-     *
-     * In this case, `b` is evaluated always in the code path of the `else`
-     * block, but it's not so in the code path of the `if` block.
-     * So there are 3 paths.
-     *
-     *     a -> foo();
-     *     a -> b -> foo();
-     *     a -> b -> bar();
-     *
-     * @param {string} kind - A kind string.
-     *   If the new context is LogicalExpression's, this is `"&&"` or `"||"`.
-     *   If it's IfStatement's or ConditionalExpression's, this is `"test"`.
-     *   Otherwise, this is `"loop"`.
-     * @param {boolean} isForkingAsResult - A flag that shows that goes different
-     *   paths between `true` and `false`.
-     * @returns {void}
-     */
-    pushChoiceContext(kind, isForkingAsResult) {
-        this.choiceContext = {
-            upper: this.choiceContext,
-            kind,
-            isForkingAsResult,
-            trueForkContext: ForkContext.newEmpty(this.forkContext),
-            falseForkContext: ForkContext.newEmpty(this.forkContext),
-            processed: false
-        };
-    }
-
-    /**
-     * Pops the last choice context and finalizes it.
-     *
-     * @returns {ChoiceContext} The popped context.
-     */
-    popChoiceContext() {
-        const context = this.choiceContext;
-
-        this.choiceContext = context.upper;
-
-        const forkContext = this.forkContext;
-        const headSegments = forkContext.head;
-
-        switch (context.kind) {
-            case "&&":
-            case "||":
-
-                /*
-                 * If any result were not transferred from child contexts,
-                 * this sets the head segments to both cases.
-                 * The head segments are the path of the right-hand operand.
-                 */
-                if (!context.processed) {
-                    context.trueForkContext.add(headSegments);
-                    context.falseForkContext.add(headSegments);
-                }
-
-                /*
-                 * Transfers results to upper context if this context is in
-                 * test chunk.
-                 */
-                if (context.isForkingAsResult) {
-                    const parentContext = this.choiceContext;
-
-                    parentContext.trueForkContext.addAll(context.trueForkContext);
-                    parentContext.falseForkContext.addAll(context.falseForkContext);
-                    parentContext.processed = true;
-
-                    return context;
-                }
-
-                break;
-
-            case "test":
-                if (!context.processed) {
-
-                    /*
-                     * The head segments are the path of the `if` block here.
-                     * Updates the `true` path with the end of the `if` block.
-                     */
-                    context.trueForkContext.clear();
-                    context.trueForkContext.add(headSegments);
-                } else {
-
-                    /*
-                     * The head segments are the path of the `else` block here.
-                     * Updates the `false` path with the end of the `else`
-                     * block.
-                     */
-                    context.falseForkContext.clear();
-                    context.falseForkContext.add(headSegments);
-                }
-
-                break;
-
-            case "loop":
-
-                /*
-                 * Loops are addressed in popLoopContext().
-                 * This is called from popLoopContext().
-                 */
-                return context;
-
-            /* istanbul ignore next */
-            default:
-                throw new Error("unreachable");
-        }
-
-        // Merges all paths.
-        const prevForkContext = context.trueForkContext;
-
-        prevForkContext.addAll(context.falseForkContext);
-        forkContext.replaceHead(prevForkContext.makeNext(0, -1));
-
-        return context;
-    }
-
-    /**
-     * Makes a code path segment of the right-hand operand of a logical
-     * expression.
-     *
-     * @returns {void}
-     */
-    makeLogicalRight() {
-        const context = this.choiceContext;
-        const forkContext = this.forkContext;
-
-        if (context.processed) {
-
-            /*
-             * This got segments already from the child choice context.
-             * Creates the next path from own true/false fork context.
-             */
-            const prevForkContext =
-                context.kind === "&&" ? context.trueForkContext
-                /* kind === "||" */ : context.falseForkContext;
-
-            forkContext.replaceHead(prevForkContext.makeNext(0, -1));
-            prevForkContext.clear();
-
-            context.processed = false;
-        } else {
-
-            /*
-             * This did not get segments from the child choice context.
-             * So addresses the head segments.
-             * The head segments are the path of the left-hand operand.
-             */
-            if (context.kind === "&&") {
-
-                // The path does short-circuit if false.
-                context.falseForkContext.add(forkContext.head);
-            } else {
-
-                // The path does short-circuit if true.
-                context.trueForkContext.add(forkContext.head);
-            }
-
-            forkContext.replaceHead(forkContext.makeNext(-1, -1));
-        }
-    }
-
-    /**
-     * Makes a code path segment of the `if` block.
-     *
-     * @returns {void}
-     */
-    makeIfConsequent() {
-        const context = this.choiceContext;
-        const forkContext = this.forkContext;
-
-        /*
-         * If any result were not transferred from child contexts,
-         * this sets the head segments to both cases.
-         * The head segments are the path of the test expression.
-         */
-        if (!context.processed) {
-            context.trueForkContext.add(forkContext.head);
-            context.falseForkContext.add(forkContext.head);
-        }
-
-        context.processed = false;
-
-        // Creates new path from the `true` case.
-        forkContext.replaceHead(
-            context.trueForkContext.makeNext(0, -1)
-        );
-    }
-
-    /**
-     * Makes a code path segment of the `else` block.
-     *
-     * @returns {void}
-     */
-    makeIfAlternate() {
-        const context = this.choiceContext;
-        const forkContext = this.forkContext;
-
-        /*
-         * The head segments are the path of the `if` block.
-         * Updates the `true` path with the end of the `if` block.
-         */
-        context.trueForkContext.clear();
-        context.trueForkContext.add(forkContext.head);
-        context.processed = true;
-
-        // Creates new path from the `false` case.
-        forkContext.replaceHead(
-            context.falseForkContext.makeNext(0, -1)
-        );
-    }
-
-    //--------------------------------------------------------------------------
-    // SwitchStatement
-    //--------------------------------------------------------------------------
-
-    /**
-     * Creates a context object of SwitchStatement and stacks it.
-     *
-     * @param {boolean} hasCase - `true` if the switch statement has one or more
-     *   case parts.
-     * @param {string|null} label - The label text.
-     * @returns {void}
-     */
-    pushSwitchContext(hasCase, label) {
-        this.switchContext = {
-            upper: this.switchContext,
-            hasCase,
-            defaultSegments: null,
-            defaultBodySegments: null,
-            foundDefault: false,
-            lastIsDefault: false,
-            countForks: 0
-        };
-
-        this.pushBreakContext(true, label);
-    }
-
-    /**
-     * Pops the last context of SwitchStatement and finalizes it.
-     *
-     * - Disposes all forking stack for `case` and `default`.
-     * - Creates the next code path segment from `context.brokenForkContext`.
-     * - If the last `SwitchCase` node is not a `default` part, creates a path
-     *   to the `default` body.
-     *
-     * @returns {void}
-     */
-    popSwitchContext() {
-        const context = this.switchContext;
-
-        this.switchContext = context.upper;
-
-        const forkContext = this.forkContext;
-        const brokenForkContext = this.popBreakContext().brokenForkContext;
-
-        if (context.countForks === 0) {
-
-            /*
-             * When there is only one `default` chunk and there is one or more
-             * `break` statements, even if forks are nothing, it needs to merge
-             * those.
-             */
-            if (!brokenForkContext.empty) {
-                brokenForkContext.add(forkContext.makeNext(-1, -1));
-                forkContext.replaceHead(brokenForkContext.makeNext(0, -1));
-            }
-
-            return;
-        }
-
-        const lastSegments = forkContext.head;
-
-        this.forkBypassPath();
-        const lastCaseSegments = forkContext.head;
-
-        /*
-         * `brokenForkContext` is used to make the next segment.
-         * It must add the last segment into `brokenForkContext`.
-         */
-        brokenForkContext.add(lastSegments);
-
-        /*
-         * A path which is failed in all case test should be connected to path
-         * of `default` chunk.
-         */
-        if (!context.lastIsDefault) {
-            if (context.defaultBodySegments) {
-
-                /*
-                 * Remove a link from `default` label to its chunk.
-                 * It's false route.
-                 */
-                removeConnection(context.defaultSegments, context.defaultBodySegments);
-                makeLooped(this, lastCaseSegments, context.defaultBodySegments);
-            } else {
-
-                /*
-                 * It handles the last case body as broken if `default` chunk
-                 * does not exist.
-                 */
-                brokenForkContext.add(lastCaseSegments);
-            }
-        }
-
-        // Pops the segment context stack until the entry segment.
-        for (let i = 0; i < context.countForks; ++i) {
-            this.forkContext = this.forkContext.upper;
-        }
-
-        /*
-         * Creates a path from all brokenForkContext paths.
-         * This is a path after switch statement.
-         */
-        this.forkContext.replaceHead(brokenForkContext.makeNext(0, -1));
-    }
-
-    /**
-     * Makes a code path segment for a `SwitchCase` node.
-     *
-     * @param {boolean} isEmpty - `true` if the body is empty.
-     * @param {boolean} isDefault - `true` if the body is the default case.
-     * @returns {void}
-     */
-    makeSwitchCaseBody(isEmpty, isDefault) {
-        const context = this.switchContext;
-
-        if (!context.hasCase) {
-            return;
-        }
-
-        /*
-         * Merge forks.
-         * The parent fork context has two segments.
-         * Those are from the current case and the body of the previous case.
-         */
-        const parentForkContext = this.forkContext;
-        const forkContext = this.pushForkContext();
-
-        forkContext.add(parentForkContext.makeNext(0, -1));
-
-        /*
-         * Save `default` chunk info.
-         * If the `default` label is not at the last, we must make a path from
-         * the last `case` to the `default` chunk.
-         */
-        if (isDefault) {
-            context.defaultSegments = parentForkContext.head;
-            if (isEmpty) {
-                context.foundDefault = true;
-            } else {
-                context.defaultBodySegments = forkContext.head;
-            }
-        } else {
-            if (!isEmpty && context.foundDefault) {
-                context.foundDefault = false;
-                context.defaultBodySegments = forkContext.head;
-            }
-        }
-
-        context.lastIsDefault = isDefault;
-        context.countForks += 1;
-    }
-
-    //--------------------------------------------------------------------------
-    // TryStatement
-    //--------------------------------------------------------------------------
-
-    /**
-     * Creates a context object of TryStatement and stacks it.
-     *
-     * @param {boolean} hasFinalizer - `true` if the try statement has a
-     *   `finally` block.
-     * @returns {void}
-     */
-    pushTryContext(hasFinalizer) {
-        this.tryContext = {
-            upper: this.tryContext,
-            position: "try",
-            hasFinalizer,
-
-            returnedForkContext: hasFinalizer
-                ? ForkContext.newEmpty(this.forkContext)
-                : null,
-
-            thrownForkContext: ForkContext.newEmpty(this.forkContext),
-            lastOfTryIsReachable: false,
-            lastOfCatchIsReachable: false
-        };
-    }
-
-    /**
-     * Pops the last context of TryStatement and finalizes it.
-     *
-     * @returns {void}
-     */
-    popTryContext() {
-        const context = this.tryContext;
-
-        this.tryContext = context.upper;
-
-        if (context.position === "catch") {
-
-            // Merges two paths from the `try` block and `catch` block merely.
-            this.popForkContext();
-            return;
-        }
-
-        /*
-         * The following process is executed only when there is the `finally`
-         * block.
-         */
-
-        const returned = context.returnedForkContext;
-        const thrown = context.thrownForkContext;
-
-        if (returned.empty && thrown.empty) {
-            return;
-        }
-
-        // Separate head to normal paths and leaving paths.
-        const headSegments = this.forkContext.head;
-
-        this.forkContext = this.forkContext.upper;
-        const normalSegments = headSegments.slice(0, headSegments.length / 2 | 0);
-        const leavingSegments = headSegments.slice(headSegments.length / 2 | 0);
-
-        // Forwards the leaving path to upper contexts.
-        if (!returned.empty) {
-            getReturnContext(this).returnedForkContext.add(leavingSegments);
-        }
-        if (!thrown.empty) {
-            getThrowContext(this).thrownForkContext.add(leavingSegments);
-        }
-
-        // Sets the normal path as the next.
-        this.forkContext.replaceHead(normalSegments);
-
-        /*
-         * If both paths of the `try` block and the `catch` block are
-         * unreachable, the next path becomes unreachable as well.
-         */
-        if (!context.lastOfTryIsReachable && !context.lastOfCatchIsReachable) {
-            this.forkContext.makeUnreachable();
-        }
-    }
-
-    /**
-     * Makes a code path segment for a `catch` block.
-     *
-     * @returns {void}
-     */
-    makeCatchBlock() {
-        const context = this.tryContext;
-        const forkContext = this.forkContext;
-        const thrown = context.thrownForkContext;
-
-        // Update state.
-        context.position = "catch";
-        context.thrownForkContext = ForkContext.newEmpty(forkContext);
-        context.lastOfTryIsReachable = forkContext.reachable;
-
-        // Merge thrown paths.
-        thrown.add(forkContext.head);
-        const thrownSegments = thrown.makeNext(0, -1);
-
-        // Fork to a bypass and the merged thrown path.
-        this.pushForkContext();
-        this.forkBypassPath();
-        this.forkContext.add(thrownSegments);
-    }
-
-    /**
-     * Makes a code path segment for a `finally` block.
-     *
-     * In the `finally` block, parallel paths are created. The parallel paths
-     * are used as leaving-paths. The leaving-paths are paths from `return`
-     * statements and `throw` statements in a `try` block or a `catch` block.
-     *
-     * @returns {void}
-     */
-    makeFinallyBlock() {
-        const context = this.tryContext;
-        let forkContext = this.forkContext;
-        const returned = context.returnedForkContext;
-        const thrown = context.thrownForkContext;
-        const headOfLeavingSegments = forkContext.head;
-
-        // Update state.
-        if (context.position === "catch") {
-
-            // Merges two paths from the `try` block and `catch` block.
-            this.popForkContext();
-            forkContext = this.forkContext;
-
-            context.lastOfCatchIsReachable = forkContext.reachable;
-        } else {
-            context.lastOfTryIsReachable = forkContext.reachable;
-        }
-        context.position = "finally";
-
-        if (returned.empty && thrown.empty) {
-
-            // This path does not leave.
-            return;
-        }
-
-        /*
-         * Create a parallel segment from merging returned and thrown.
-         * This segment will leave at the end of this finally block.
-         */
-        const segments = forkContext.makeNext(-1, -1);
-
-        for (let i = 0; i < forkContext.count; ++i) {
-            const prevSegsOfLeavingSegment = [headOfLeavingSegments[i]];
-
-            for (let j = 0; j < returned.segmentsList.length; ++j) {
-                prevSegsOfLeavingSegment.push(returned.segmentsList[j][i]);
-            }
-            for (let j = 0; j < thrown.segmentsList.length; ++j) {
-                prevSegsOfLeavingSegment.push(thrown.segmentsList[j][i]);
-            }
-
-            segments.push(
-                CodePathSegment.newNext(
-                    this.idGenerator.next(),
-                    prevSegsOfLeavingSegment
-                )
-            );
-        }
-
-        this.pushForkContext(true);
-        this.forkContext.add(segments);
-    }
-
-    /**
-     * Makes a code path segment from the first throwable node to the `catch`
-     * block or the `finally` block.
-     *
-     * @returns {void}
-     */
-    makeFirstThrowablePathInTryBlock() {
-        const forkContext = this.forkContext;
-
-        if (!forkContext.reachable) {
-            return;
-        }
-
-        const context = getThrowContext(this);
-
-        if (context === this ||
-            context.position !== "try" ||
-            !context.thrownForkContext.empty
-        ) {
-            return;
-        }
-
-        context.thrownForkContext.add(forkContext.head);
-        forkContext.replaceHead(forkContext.makeNext(-1, -1));
-    }
-
-    //--------------------------------------------------------------------------
-    // Loop Statements
-    //--------------------------------------------------------------------------
-
-    /**
-     * Creates a context object of a loop statement and stacks it.
-     *
-     * @param {string} type - The type of the node which was triggered. One of
-     *   `WhileStatement`, `DoWhileStatement`, `ForStatement`, `ForInStatement`,
-     *   and `ForStatement`.
-     * @param {string|null} label - A label of the node which was triggered.
-     * @returns {void}
-     */
-    pushLoopContext(type, label) {
-        const forkContext = this.forkContext;
-        const breakContext = this.pushBreakContext(true, label);
-
-        switch (type) {
-            case "WhileStatement":
-                this.pushChoiceContext("loop", false);
-                this.loopContext = {
-                    upper: this.loopContext,
-                    type,
-                    label,
-                    test: void 0,
-                    continueDestSegments: null,
-                    brokenForkContext: breakContext.brokenForkContext
-                };
-                break;
-
-            case "DoWhileStatement":
-                this.pushChoiceContext("loop", false);
-                this.loopContext = {
-                    upper: this.loopContext,
-                    type,
-                    label,
-                    test: void 0,
-                    entrySegments: null,
-                    continueForkContext: ForkContext.newEmpty(forkContext),
-                    brokenForkContext: breakContext.brokenForkContext
-                };
-                break;
-
-            case "ForStatement":
-                this.pushChoiceContext("loop", false);
-                this.loopContext = {
-                    upper: this.loopContext,
-                    type,
-                    label,
-                    test: void 0,
-                    endOfInitSegments: null,
-                    testSegments: null,
-                    endOfTestSegments: null,
-                    updateSegments: null,
-                    endOfUpdateSegments: null,
-                    continueDestSegments: null,
-                    brokenForkContext: breakContext.brokenForkContext
-                };
-                break;
-
-            case "ForInStatement":
-            case "ForOfStatement":
-                this.loopContext = {
-                    upper: this.loopContext,
-                    type,
-                    label,
-                    prevSegments: null,
-                    leftSegments: null,
-                    endOfLeftSegments: null,
-                    continueDestSegments: null,
-                    brokenForkContext: breakContext.brokenForkContext
-                };
-                break;
-
-            /* istanbul ignore next */
-            default:
-                throw new Error(`unknown type: "${type}"`);
-        }
-    }
-
-    /**
-     * Pops the last context of a loop statement and finalizes it.
-     *
-     * @returns {void}
-     */
-    popLoopContext() {
-        const context = this.loopContext;
-
-        this.loopContext = context.upper;
-
-        const forkContext = this.forkContext;
-        const brokenForkContext = this.popBreakContext().brokenForkContext;
-
-        // Creates a looped path.
-        switch (context.type) {
-            case "WhileStatement":
-            case "ForStatement":
-                this.popChoiceContext();
-                makeLooped(
-                    this,
-                    forkContext.head,
-                    context.continueDestSegments
-                );
-                break;
-
-            case "DoWhileStatement": {
-                const choiceContext = this.popChoiceContext();
-
-                if (!choiceContext.processed) {
-                    choiceContext.trueForkContext.add(forkContext.head);
-                    choiceContext.falseForkContext.add(forkContext.head);
-                }
-                if (context.test !== true) {
-                    brokenForkContext.addAll(choiceContext.falseForkContext);
-                }
-
-                // `true` paths go to looping.
-                const segmentsList = choiceContext.trueForkContext.segmentsList;
-
-                for (let i = 0; i < segmentsList.length; ++i) {
-                    makeLooped(
-                        this,
-                        segmentsList[i],
-                        context.entrySegments
-                    );
-                }
-                break;
-            }
-
-            case "ForInStatement":
-            case "ForOfStatement":
-                brokenForkContext.add(forkContext.head);
-                makeLooped(
-                    this,
-                    forkContext.head,
-                    context.leftSegments
-                );
-                break;
-
-            /* istanbul ignore next */
-            default:
-                throw new Error("unreachable");
-        }
-
-        // Go next.
-        if (brokenForkContext.empty) {
-            forkContext.replaceHead(forkContext.makeUnreachable(-1, -1));
-        } else {
-            forkContext.replaceHead(brokenForkContext.makeNext(0, -1));
-        }
-    }
-
-    /**
-     * Makes a code path segment for the test part of a WhileStatement.
-     *
-     * @param {boolean|undefined} test - The test value (only when constant).
-     * @returns {void}
-     */
-    makeWhileTest(test) {
-        const context = this.loopContext;
-        const forkContext = this.forkContext;
-        const testSegments = forkContext.makeNext(0, -1);
-
-        // Update state.
-        context.test = test;
-        context.continueDestSegments = testSegments;
-        forkContext.replaceHead(testSegments);
-    }
-
-    /**
-     * Makes a code path segment for the body part of a WhileStatement.
-     *
-     * @returns {void}
-     */
-    makeWhileBody() {
-        const context = this.loopContext;
-        const choiceContext = this.choiceContext;
-        const forkContext = this.forkContext;
-
-        if (!choiceContext.processed) {
-            choiceContext.trueForkContext.add(forkContext.head);
-            choiceContext.falseForkContext.add(forkContext.head);
-        }
-
-        // Update state.
-        if (context.test !== true) {
-            context.brokenForkContext.addAll(choiceContext.falseForkContext);
-        }
-        forkContext.replaceHead(choiceContext.trueForkContext.makeNext(0, -1));
-    }
-
-    /**
-     * Makes a code path segment for the body part of a DoWhileStatement.
-     *
-     * @returns {void}
-     */
-    makeDoWhileBody() {
-        const context = this.loopContext;
-        const forkContext = this.forkContext;
-        const bodySegments = forkContext.makeNext(-1, -1);
-
-        // Update state.
-        context.entrySegments = bodySegments;
-        forkContext.replaceHead(bodySegments);
-    }
-
-    /**
-     * Makes a code path segment for the test part of a DoWhileStatement.
-     *
-     * @param {boolean|undefined} test - The test value (only when constant).
-     * @returns {void}
-     */
-    makeDoWhileTest(test) {
-        const context = this.loopContext;
-        const forkContext = this.forkContext;
-
-        context.test = test;
-
-        // Creates paths of `continue` statements.
-        if (!context.continueForkContext.empty) {
-            context.continueForkContext.add(forkContext.head);
-            const testSegments = context.continueForkContext.makeNext(0, -1);
-
-            forkContext.replaceHead(testSegments);
-        }
-    }
-
-    /**
-     * Makes a code path segment for the test part of a ForStatement.
-     *
-     * @param {boolean|undefined} test - The test value (only when constant).
-     * @returns {void}
-     */
-    makeForTest(test) {
-        const context = this.loopContext;
-        const forkContext = this.forkContext;
-        const endOfInitSegments = forkContext.head;
-        const testSegments = forkContext.makeNext(-1, -1);
-
-        // Update state.
-        context.test = test;
-        context.endOfInitSegments = endOfInitSegments;
-        context.continueDestSegments = context.testSegments = testSegments;
-        forkContext.replaceHead(testSegments);
-    }
-
-    /**
-     * Makes a code path segment for the update part of a ForStatement.
-     *
-     * @returns {void}
-     */
-    makeForUpdate() {
-        const context = this.loopContext;
-        const choiceContext = this.choiceContext;
-        const forkContext = this.forkContext;
-
-        // Make the next paths of the test.
-        if (context.testSegments) {
-            finalizeTestSegmentsOfFor(
-                context,
-                choiceContext,
-                forkContext.head
-            );
-        } else {
-            context.endOfInitSegments = forkContext.head;
-        }
-
-        // Update state.
-        const updateSegments = forkContext.makeDisconnected(-1, -1);
-
-        context.continueDestSegments = context.updateSegments = updateSegments;
-        forkContext.replaceHead(updateSegments);
-    }
-
-    /**
-     * Makes a code path segment for the body part of a ForStatement.
-     *
-     * @returns {void}
-     */
-    makeForBody() {
-        const context = this.loopContext;
-        const choiceContext = this.choiceContext;
-        const forkContext = this.forkContext;
-
-        // Update state.
-        if (context.updateSegments) {
-            context.endOfUpdateSegments = forkContext.head;
-
-            // `update` -> `test`
-            if (context.testSegments) {
-                makeLooped(
-                    this,
-                    context.endOfUpdateSegments,
-                    context.testSegments
-                );
-            }
-        } else if (context.testSegments) {
-            finalizeTestSegmentsOfFor(
-                context,
-                choiceContext,
-                forkContext.head
-            );
-        } else {
-            context.endOfInitSegments = forkContext.head;
-        }
-
-        let bodySegments = context.endOfTestSegments;
-
-        if (!bodySegments) {
-
-            /*
-             * If there is not the `test` part, the `body` path comes from the
-             * `init` part and the `update` part.
-             */
-            const prevForkContext = ForkContext.newEmpty(forkContext);
-
-            prevForkContext.add(context.endOfInitSegments);
-            if (context.endOfUpdateSegments) {
-                prevForkContext.add(context.endOfUpdateSegments);
-            }
-
-            bodySegments = prevForkContext.makeNext(0, -1);
-        }
-        context.continueDestSegments = context.continueDestSegments || bodySegments;
-        forkContext.replaceHead(bodySegments);
-    }
-
-    /**
-     * Makes a code path segment for the left part of a ForInStatement and a
-     * ForOfStatement.
-     *
-     * @returns {void}
-     */
-    makeForInOfLeft() {
-        const context = this.loopContext;
-        const forkContext = this.forkContext;
-        const leftSegments = forkContext.makeDisconnected(-1, -1);
-
-        // Update state.
-        context.prevSegments = forkContext.head;
-        context.leftSegments = context.continueDestSegments = leftSegments;
-        forkContext.replaceHead(leftSegments);
-    }
-
-    /**
-     * Makes a code path segment for the right part of a ForInStatement and a
-     * ForOfStatement.
-     *
-     * @returns {void}
-     */
-    makeForInOfRight() {
-        const context = this.loopContext;
-        const forkContext = this.forkContext;
-        const temp = ForkContext.newEmpty(forkContext);
-
-        temp.add(context.prevSegments);
-        const rightSegments = temp.makeNext(-1, -1);
-
-        // Update state.
-        context.endOfLeftSegments = forkContext.head;
-        forkContext.replaceHead(rightSegments);
-    }
-
-    /**
-     * Makes a code path segment for the body part of a ForInStatement and a
-     * ForOfStatement.
-     *
-     * @returns {void}
-     */
-    makeForInOfBody() {
-        const context = this.loopContext;
-        const forkContext = this.forkContext;
-        const temp = ForkContext.newEmpty(forkContext);
-
-        temp.add(context.endOfLeftSegments);
-        const bodySegments = temp.makeNext(-1, -1);
-
-        // Make a path: `right` -> `left`.
-        makeLooped(this, forkContext.head, context.leftSegments);
-
-        // Update state.
-        context.brokenForkContext.add(forkContext.head);
-        forkContext.replaceHead(bodySegments);
-    }
-
-    //--------------------------------------------------------------------------
-    // Control Statements
-    //--------------------------------------------------------------------------
-
-    /**
-     * Creates new context for BreakStatement.
-     *
-     * @param {boolean} breakable - The flag to indicate it can break by
-     *      an unlabeled BreakStatement.
-     * @param {string|null} label - The label of this context.
-     * @returns {Object} The new context.
-     */
-    pushBreakContext(breakable, label) {
-        this.breakContext = {
-            upper: this.breakContext,
-            breakable,
-            label,
-            brokenForkContext: ForkContext.newEmpty(this.forkContext)
-        };
-        return this.breakContext;
-    }
-
-    /**
-     * Removes the top item of the break context stack.
-     *
-     * @returns {Object} The removed context.
-     */
-    popBreakContext() {
-        const context = this.breakContext;
-        const forkContext = this.forkContext;
-
-        this.breakContext = context.upper;
-
-        // Process this context here for other than switches and loops.
-        if (!context.breakable) {
-            const brokenForkContext = context.brokenForkContext;
-
-            if (!brokenForkContext.empty) {
-                brokenForkContext.add(forkContext.head);
-                forkContext.replaceHead(brokenForkContext.makeNext(0, -1));
-            }
-        }
-
-        return context;
-    }
-
-    /**
-     * Makes a path for a `break` statement.
-     *
-     * It registers the head segment to a context of `break`.
-     * It makes new unreachable segment, then it set the head with the segment.
-     *
-     * @param {string} label - A label of the break statement.
-     * @returns {void}
-     */
-    makeBreak(label) {
-        const forkContext = this.forkContext;
-
-        if (!forkContext.reachable) {
-            return;
-        }
-
-        const context = getBreakContext(this, label);
-
-        /* istanbul ignore else: foolproof (syntax error) */
-        if (context) {
-            context.brokenForkContext.add(forkContext.head);
-        }
-
-        forkContext.replaceHead(forkContext.makeUnreachable(-1, -1));
-    }
-
-    /**
-     * Makes a path for a `continue` statement.
-     *
-     * It makes a looping path.
-     * It makes new unreachable segment, then it set the head with the segment.
-     *
-     * @param {string} label - A label of the continue statement.
-     * @returns {void}
-     */
-    makeContinue(label) {
-        const forkContext = this.forkContext;
-
-        if (!forkContext.reachable) {
-            return;
-        }
-
-        const context = getContinueContext(this, label);
-
-        /* istanbul ignore else: foolproof (syntax error) */
-        if (context) {
-            if (context.continueDestSegments) {
-                makeLooped(this, forkContext.head, context.continueDestSegments);
-
-                // If the context is a for-in/of loop, this effects a break also.
-                if (context.type === "ForInStatement" ||
-                    context.type === "ForOfStatement"
-                ) {
-                    context.brokenForkContext.add(forkContext.head);
-                }
-            } else {
-                context.continueForkContext.add(forkContext.head);
-            }
-        }
-        forkContext.replaceHead(forkContext.makeUnreachable(-1, -1));
-    }
-
-    /**
-     * Makes a path for a `return` statement.
-     *
-     * It registers the head segment to a context of `return`.
-     * It makes new unreachable segment, then it set the head with the segment.
-     *
-     * @returns {void}
-     */
-    makeReturn() {
-        const forkContext = this.forkContext;
-
-        if (forkContext.reachable) {
-            getReturnContext(this).returnedForkContext.add(forkContext.head);
-            forkContext.replaceHead(forkContext.makeUnreachable(-1, -1));
-        }
-    }
-
-    /**
-     * Makes a path for a `throw` statement.
-     *
-     * It registers the head segment to a context of `throw`.
-     * It makes new unreachable segment, then it set the head with the segment.
-     *
-     * @returns {void}
-     */
-    makeThrow() {
-        const forkContext = this.forkContext;
-
-        if (forkContext.reachable) {
-            getThrowContext(this).thrownForkContext.add(forkContext.head);
-            forkContext.replaceHead(forkContext.makeUnreachable(-1, -1));
-        }
-    }
-
-    /**
-     * Makes the final path.
-     * @returns {void}
-     */
-    makeFinal() {
-        const segments = this.currentSegments;
-
-        if (segments.length > 0 && segments[0].reachable) {
-            this.returnedForkContext.add(segments);
-        }
-    }
-}
-
-module.exports = CodePathState;
diff --git a/node_modules/eslint/lib/code-path-analysis/code-path.js b/node_modules/eslint/lib/code-path-analysis/code-path.js
deleted file mode 100644
index cb26ea1..0000000
--- a/node_modules/eslint/lib/code-path-analysis/code-path.js
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * @fileoverview A class of the code path.
- * @author Toru Nagashima
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const CodePathState = require("./code-path-state");
-const IdGenerator = require("./id-generator");
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-/**
- * A code path.
- */
-class CodePath {
-
-    /**
-     * @param {string} id - An identifier.
-     * @param {CodePath|null} upper - The code path of the upper function scope.
-     * @param {Function} onLooped - A callback function to notify looping.
-     */
-    constructor(id, upper, onLooped) {
-
-        /**
-         * The identifier of this code path.
-         * Rules use it to store additional information of each rule.
-         * @type {string}
-         */
-        this.id = id;
-
-        /**
-         * The code path of the upper function scope.
-         * @type {CodePath|null}
-         */
-        this.upper = upper;
-
-        /**
-         * The code paths of nested function scopes.
-         * @type {CodePath[]}
-         */
-        this.childCodePaths = [];
-
-        // Initializes internal state.
-        Object.defineProperty(
-            this,
-            "internal",
-            { value: new CodePathState(new IdGenerator(`${id}_`), onLooped) }
-        );
-
-        // Adds this into `childCodePaths` of `upper`.
-        if (upper) {
-            upper.childCodePaths.push(this);
-        }
-    }
-
-    /**
-     * Gets the state of a given code path.
-     *
-     * @param {CodePath} codePath - A code path to get.
-     * @returns {CodePathState} The state of the code path.
-     */
-    static getState(codePath) {
-        return codePath.internal;
-    }
-
-    /**
-     * The initial code path segment.
-     * @type {CodePathSegment}
-     */
-    get initialSegment() {
-        return this.internal.initialSegment;
-    }
-
-    /**
-     * Final code path segments.
-     * This array is a mix of `returnedSegments` and `thrownSegments`.
-     * @type {CodePathSegment[]}
-     */
-    get finalSegments() {
-        return this.internal.finalSegments;
-    }
-
-    /**
-     * Final code path segments which is with `return` statements.
-     * This array contains the last path segment if it's reachable.
-     * Since the reachable last path returns `undefined`.
-     * @type {CodePathSegment[]}
-     */
-    get returnedSegments() {
-        return this.internal.returnedForkContext;
-    }
-
-    /**
-     * Final code path segments which is with `throw` statements.
-     * @type {CodePathSegment[]}
-     */
-    get thrownSegments() {
-        return this.internal.thrownForkContext;
-    }
-
-    /**
-     * Current code path segments.
-     * @type {CodePathSegment[]}
-     */
-    get currentSegments() {
-        return this.internal.currentSegments;
-    }
-
-    /**
-     * Traverses all segments in this code path.
-     *
-     *     codePath.traverseSegments(function(segment, controller) {
-     *         // do something.
-     *     });
-     *
-     * This method enumerates segments in order from the head.
-     *
-     * The `controller` object has two methods.
-     *
-     * - `controller.skip()` - Skip the following segments in this branch.
-     * - `controller.break()` - Skip all following segments.
-     *
-     * @param {Object} [options] - Omittable.
-     * @param {CodePathSegment} [options.first] - The first segment to traverse.
-     * @param {CodePathSegment} [options.last] - The last segment to traverse.
-     * @param {Function} callback - A callback function.
-     * @returns {void}
-     */
-    traverseSegments(options, callback) {
-        let resolvedOptions;
-        let resolvedCallback;
-
-        if (typeof options === "function") {
-            resolvedCallback = options;
-            resolvedOptions = {};
-        } else {
-            resolvedOptions = options || {};
-            resolvedCallback = callback;
-        }
-
-        const startSegment = resolvedOptions.first || this.internal.initialSegment;
-        const lastSegment = resolvedOptions.last;
-
-        let item = null;
-        let index = 0;
-        let end = 0;
-        let segment = null;
-        const visited = Object.create(null);
-        const stack = [[startSegment, 0]];
-        let skippedSegment = null;
-        let broken = false;
-        const controller = {
-            skip() {
-                if (stack.length <= 1) {
-                    broken = true;
-                } else {
-                    skippedSegment = stack[stack.length - 2][0];
-                }
-            },
-            break() {
-                broken = true;
-            }
-        };
-
-        /**
-         * Checks a given previous segment has been visited.
-         * @param {CodePathSegment} prevSegment - A previous segment to check.
-         * @returns {boolean} `true` if the segment has been visited.
-         */
-        function isVisited(prevSegment) {
-            return (
-                visited[prevSegment.id] ||
-                segment.isLoopedPrevSegment(prevSegment)
-            );
-        }
-
-        while (stack.length > 0) {
-            item = stack[stack.length - 1];
-            segment = item[0];
-            index = item[1];
-
-            if (index === 0) {
-
-                // Skip if this segment has been visited already.
-                if (visited[segment.id]) {
-                    stack.pop();
-                    continue;
-                }
-
-                // Skip if all previous segments have not been visited.
-                if (segment !== startSegment &&
-                    segment.prevSegments.length > 0 &&
-                    !segment.prevSegments.every(isVisited)
-                ) {
-                    stack.pop();
-                    continue;
-                }
-
-                // Reset the flag of skipping if all branches have been skipped.
-                if (skippedSegment && segment.prevSegments.indexOf(skippedSegment) !== -1) {
-                    skippedSegment = null;
-                }
-                visited[segment.id] = true;
-
-                // Call the callback when the first time.
-                if (!skippedSegment) {
-                    resolvedCallback.call(this, segment, controller);
-                    if (segment === lastSegment) {
-                        controller.skip();
-                    }
-                    if (broken) {
-                        break;
-                    }
-                }
-            }
-
-            // Update the stack.
-            end = segment.nextSegments.length - 1;
-            if (index < end) {
-                item[1] += 1;
-                stack.push([segment.nextSegments[index], 0]);
-            } else if (index === end) {
-                item[0] = segment.nextSegments[index];
-                item[1] = 0;
-            } else {
-                stack.pop();
-            }
-        }
-    }
-}
-
-module.exports = CodePath;
diff --git a/node_modules/eslint/lib/code-path-analysis/debug-helpers.js b/node_modules/eslint/lib/code-path-analysis/debug-helpers.js
deleted file mode 100644
index 9af985c..0000000
--- a/node_modules/eslint/lib/code-path-analysis/debug-helpers.js
+++ /dev/null
@@ -1,200 +0,0 @@
-/**
- * @fileoverview Helpers to debug for code path analysis.
- * @author Toru Nagashima
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const debug = require("debug")("eslint:code-path");
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Gets id of a given segment.
- * @param {CodePathSegment} segment - A segment to get.
- * @returns {string} Id of the segment.
- */
-/* istanbul ignore next */
-function getId(segment) { // eslint-disable-line require-jsdoc
-    return segment.id + (segment.reachable ? "" : "!");
-}
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = {
-
-    /**
-     * A flag that debug dumping is enabled or not.
-     * @type {boolean}
-     */
-    enabled: debug.enabled,
-
-    /**
-     * Dumps given objects.
-     *
-     * @param {...any} args - objects to dump.
-     * @returns {void}
-     */
-    dump: debug,
-
-    /**
-     * Dumps the current analyzing state.
-     *
-     * @param {ASTNode} node - A node to dump.
-     * @param {CodePathState} state - A state to dump.
-     * @param {boolean} leaving - A flag whether or not it's leaving
-     * @returns {void}
-     */
-    dumpState: !debug.enabled ? debug : /* istanbul ignore next */ function(node, state, leaving) {
-        for (let i = 0; i < state.currentSegments.length; ++i) {
-            const segInternal = state.currentSegments[i].internal;
-
-            if (leaving) {
-                segInternal.exitNodes.push(node);
-            } else {
-                segInternal.nodes.push(node);
-            }
-        }
-
-        debug([
-            `${state.currentSegments.map(getId).join(",")})`,
-            `${node.type}${leaving ? ":exit" : ""}`
-        ].join(" "));
-    },
-
-    /**
-     * Dumps a DOT code of a given code path.
-     * The DOT code can be visialized with Graphvis.
-     *
-     * @param {CodePath} codePath - A code path to dump.
-     * @returns {void}
-     * @see http://www.graphviz.org
-     * @see http://www.webgraphviz.com
-     */
-    dumpDot: !debug.enabled ? debug : /* istanbul ignore next */ function(codePath) {
-        let text =
-            "\n" +
-            "digraph {\n" +
-            "node[shape=box,style=\"rounded,filled\",fillcolor=white];\n" +
-            "initial[label=\"\",shape=circle,style=filled,fillcolor=black,width=0.25,height=0.25];\n";
-
-        if (codePath.returnedSegments.length > 0) {
-            text += "final[label=\"\",shape=doublecircle,style=filled,fillcolor=black,width=0.25,height=0.25];\n";
-        }
-        if (codePath.thrownSegments.length > 0) {
-            text += "thrown[label=\"✘\",shape=circle,width=0.3,height=0.3,fixedsize];\n";
-        }
-
-        const traceMap = Object.create(null);
-        const arrows = this.makeDotArrows(codePath, traceMap);
-
-        for (const id in traceMap) { // eslint-disable-line guard-for-in
-            const segment = traceMap[id];
-
-            text += `${id}[`;
-
-            if (segment.reachable) {
-                text += "label=\"";
-            } else {
-                text += "style=\"rounded,dashed,filled\",fillcolor=\"#FF9800\",label=\"<>\\n";
-            }
-
-            if (segment.internal.nodes.length > 0 || segment.internal.exitNodes.length > 0) {
-                text += [].concat(
-                    segment.internal.nodes.map(node => {
-                        switch (node.type) {
-                            case "Identifier": return `${node.type} (${node.name})`;
-                            case "Literal": return `${node.type} (${node.value})`;
-                            default: return node.type;
-                        }
-                    }),
-                    segment.internal.exitNodes.map(node => {
-                        switch (node.type) {
-                            case "Identifier": return `${node.type}:exit (${node.name})`;
-                            case "Literal": return `${node.type}:exit (${node.value})`;
-                            default: return `${node.type}:exit`;
-                        }
-                    })
-                ).join("\\n");
-            } else {
-                text += "????";
-            }
-
-            text += "\"];\n";
-        }
-
-        text += `${arrows}\n`;
-        text += "}";
-        debug("DOT", text);
-    },
-
-    /**
-     * Makes a DOT code of a given code path.
-     * The DOT code can be visialized with Graphvis.
-     *
-     * @param {CodePath} codePath - A code path to make DOT.
-     * @param {Object} traceMap - Optional. A map to check whether or not segments had been done.
-     * @returns {string} A DOT code of the code path.
-     */
-    makeDotArrows(codePath, traceMap) {
-        const stack = [[codePath.initialSegment, 0]];
-        const done = traceMap || Object.create(null);
-        let lastId = codePath.initialSegment.id;
-        let text = `initial->${codePath.initialSegment.id}`;
-
-        while (stack.length > 0) {
-            const item = stack.pop();
-            const segment = item[0];
-            const index = item[1];
-
-            if (done[segment.id] && index === 0) {
-                continue;
-            }
-            done[segment.id] = segment;
-
-            const nextSegment = segment.allNextSegments[index];
-
-            if (!nextSegment) {
-                continue;
-            }
-
-            if (lastId === segment.id) {
-                text += `->${nextSegment.id}`;
-            } else {
-                text += `;\n${segment.id}->${nextSegment.id}`;
-            }
-            lastId = nextSegment.id;
-
-            stack.unshift([segment, 1 + index]);
-            stack.push([nextSegment, 0]);
-        }
-
-        codePath.returnedSegments.forEach(finalSegment => {
-            if (lastId === finalSegment.id) {
-                text += "->final";
-            } else {
-                text += `;\n${finalSegment.id}->final`;
-            }
-            lastId = null;
-        });
-
-        codePath.thrownSegments.forEach(finalSegment => {
-            if (lastId === finalSegment.id) {
-                text += "->thrown";
-            } else {
-                text += `;\n${finalSegment.id}->thrown`;
-            }
-            lastId = null;
-        });
-
-        return `${text};`;
-    }
-};
diff --git a/node_modules/eslint/lib/code-path-analysis/fork-context.js b/node_modules/eslint/lib/code-path-analysis/fork-context.js
deleted file mode 100644
index 939ed2d..0000000
--- a/node_modules/eslint/lib/code-path-analysis/fork-context.js
+++ /dev/null
@@ -1,260 +0,0 @@
-/**
- * @fileoverview A class to operate forking.
- *
- * This is state of forking.
- * This has a fork list and manages it.
- *
- * @author Toru Nagashima
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const assert = require("assert"),
-    CodePathSegment = require("./code-path-segment");
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Gets whether or not a given segment is reachable.
- *
- * @param {CodePathSegment} segment - A segment to get.
- * @returns {boolean} `true` if the segment is reachable.
- */
-function isReachable(segment) {
-    return segment.reachable;
-}
-
-/**
- * Creates new segments from the specific range of `context.segmentsList`.
- *
- * When `context.segmentsList` is `[[a, b], [c, d], [e, f]]`, `begin` is `0`, and
- * `end` is `-1`, this creates `[g, h]`. This `g` is from `a`, `c`, and `e`.
- * This `h` is from `b`, `d`, and `f`.
- *
- * @param {ForkContext} context - An instance.
- * @param {number} begin - The first index of the previous segments.
- * @param {number} end - The last index of the previous segments.
- * @param {Function} create - A factory function of new segments.
- * @returns {CodePathSegment[]} New segments.
- */
-function makeSegments(context, begin, end, create) {
-    const list = context.segmentsList;
-
-    const normalizedBegin = begin >= 0 ? begin : list.length + begin;
-    const normalizedEnd = end >= 0 ? end : list.length + end;
-
-    const segments = [];
-
-    for (let i = 0; i < context.count; ++i) {
-        const allPrevSegments = [];
-
-        for (let j = normalizedBegin; j <= normalizedEnd; ++j) {
-            allPrevSegments.push(list[j][i]);
-        }
-
-        segments.push(create(context.idGenerator.next(), allPrevSegments));
-    }
-
-    return segments;
-}
-
-/**
- * `segments` becomes doubly in a `finally` block. Then if a code path exits by a
- * control statement (such as `break`, `continue`) from the `finally` block, the
- * destination's segments may be half of the source segments. In that case, this
- * merges segments.
- *
- * @param {ForkContext} context - An instance.
- * @param {CodePathSegment[]} segments - Segments to merge.
- * @returns {CodePathSegment[]} The merged segments.
- */
-function mergeExtraSegments(context, segments) {
-    let currentSegments = segments;
-
-    while (currentSegments.length > context.count) {
-        const merged = [];
-
-        for (let i = 0, length = currentSegments.length / 2 | 0; i < length; ++i) {
-            merged.push(CodePathSegment.newNext(
-                context.idGenerator.next(),
-                [currentSegments[i], currentSegments[i + length]]
-            ));
-        }
-        currentSegments = merged;
-    }
-    return currentSegments;
-}
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-/**
- * A class to manage forking.
- */
-class ForkContext {
-
-    /**
-     * @param {IdGenerator} idGenerator - An identifier generator for segments.
-     * @param {ForkContext|null} upper - An upper fork context.
-     * @param {number} count - A number of parallel segments.
-     */
-    constructor(idGenerator, upper, count) {
-        this.idGenerator = idGenerator;
-        this.upper = upper;
-        this.count = count;
-        this.segmentsList = [];
-    }
-
-    /**
-     * The head segments.
-     * @type {CodePathSegment[]}
-     */
-    get head() {
-        const list = this.segmentsList;
-
-        return list.length === 0 ? [] : list[list.length - 1];
-    }
-
-    /**
-     * A flag which shows empty.
-     * @type {boolean}
-     */
-    get empty() {
-        return this.segmentsList.length === 0;
-    }
-
-    /**
-     * A flag which shows reachable.
-     * @type {boolean}
-     */
-    get reachable() {
-        const segments = this.head;
-
-        return segments.length > 0 && segments.some(isReachable);
-    }
-
-    /**
-     * Creates new segments from this context.
-     *
-     * @param {number} begin - The first index of previous segments.
-     * @param {number} end - The last index of previous segments.
-     * @returns {CodePathSegment[]} New segments.
-     */
-    makeNext(begin, end) {
-        return makeSegments(this, begin, end, CodePathSegment.newNext);
-    }
-
-    /**
-     * Creates new segments from this context.
-     * The new segments is always unreachable.
-     *
-     * @param {number} begin - The first index of previous segments.
-     * @param {number} end - The last index of previous segments.
-     * @returns {CodePathSegment[]} New segments.
-     */
-    makeUnreachable(begin, end) {
-        return makeSegments(this, begin, end, CodePathSegment.newUnreachable);
-    }
-
-    /**
-     * Creates new segments from this context.
-     * The new segments don't have connections for previous segments.
-     * But these inherit the reachable flag from this context.
-     *
-     * @param {number} begin - The first index of previous segments.
-     * @param {number} end - The last index of previous segments.
-     * @returns {CodePathSegment[]} New segments.
-     */
-    makeDisconnected(begin, end) {
-        return makeSegments(this, begin, end, CodePathSegment.newDisconnected);
-    }
-
-    /**
-     * Adds segments into this context.
-     * The added segments become the head.
-     *
-     * @param {CodePathSegment[]} segments - Segments to add.
-     * @returns {void}
-     */
-    add(segments) {
-        assert(segments.length >= this.count, `${segments.length} >= ${this.count}`);
-
-        this.segmentsList.push(mergeExtraSegments(this, segments));
-    }
-
-    /**
-     * Replaces the head segments with given segments.
-     * The current head segments are removed.
-     *
-     * @param {CodePathSegment[]} segments - Segments to add.
-     * @returns {void}
-     */
-    replaceHead(segments) {
-        assert(segments.length >= this.count, `${segments.length} >= ${this.count}`);
-
-        this.segmentsList.splice(-1, 1, mergeExtraSegments(this, segments));
-    }
-
-    /**
-     * Adds all segments of a given fork context into this context.
-     *
-     * @param {ForkContext} context - A fork context to add.
-     * @returns {void}
-     */
-    addAll(context) {
-        assert(context.count === this.count);
-
-        const source = context.segmentsList;
-
-        for (let i = 0; i < source.length; ++i) {
-            this.segmentsList.push(source[i]);
-        }
-    }
-
-    /**
-     * Clears all secments in this context.
-     *
-     * @returns {void}
-     */
-    clear() {
-        this.segmentsList = [];
-    }
-
-    /**
-     * Creates the root fork context.
-     *
-     * @param {IdGenerator} idGenerator - An identifier generator for segments.
-     * @returns {ForkContext} New fork context.
-     */
-    static newRoot(idGenerator) {
-        const context = new ForkContext(idGenerator, null, 1);
-
-        context.add([CodePathSegment.newRoot(idGenerator.next())]);
-
-        return context;
-    }
-
-    /**
-     * Creates an empty fork context preceded by a given context.
-     *
-     * @param {ForkContext} parentContext - The parent fork context.
-     * @param {boolean} forkLeavingPath - A flag which shows inside of `finally` block.
-     * @returns {ForkContext} New fork context.
-     */
-    static newEmpty(parentContext, forkLeavingPath) {
-        return new ForkContext(
-            parentContext.idGenerator,
-            parentContext,
-            (forkLeavingPath ? 2 : 1) * parentContext.count
-        );
-    }
-}
-
-module.exports = ForkContext;
diff --git a/node_modules/eslint/lib/code-path-analysis/id-generator.js b/node_modules/eslint/lib/code-path-analysis/id-generator.js
deleted file mode 100644
index 062058d..0000000
--- a/node_modules/eslint/lib/code-path-analysis/id-generator.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * @fileoverview A class of identifiers generator for code path segments.
- *
- * Each rule uses the identifier of code path segments to store additional
- * information of the code path.
- *
- * @author Toru Nagashima
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-/**
- * A generator for unique ids.
- */
-class IdGenerator {
-
-    /**
-     * @param {string} prefix - Optional. A prefix of generated ids.
-     */
-    constructor(prefix) {
-        this.prefix = String(prefix);
-        this.n = 0;
-    }
-
-    /**
-     * Generates id.
-     *
-     * @returns {string} A generated id.
-     */
-    next() {
-        this.n = 1 + this.n | 0;
-
-        /* istanbul ignore if */
-        if (this.n < 0) {
-            this.n = 1;
-        }
-
-        return this.prefix + this.n;
-    }
-}
-
-module.exports = IdGenerator;
diff --git a/node_modules/eslint/lib/config.js b/node_modules/eslint/lib/config.js
deleted file mode 100644
index 7ba5cd6..0000000
--- a/node_modules/eslint/lib/config.js
+++ /dev/null
@@ -1,364 +0,0 @@
-/**
- * @fileoverview Responsible for loading config files
- * @author Seth McLaughlin
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const path = require("path"),
-    os = require("os"),
-    ConfigOps = require("./config/config-ops"),
-    ConfigFile = require("./config/config-file"),
-    ConfigCache = require("./config/config-cache"),
-    Plugins = require("./config/plugins"),
-    FileFinder = require("./file-finder"),
-    isResolvable = require("is-resolvable");
-
-const debug = require("debug")("eslint:config");
-
-//------------------------------------------------------------------------------
-// Constants
-//------------------------------------------------------------------------------
-
-const PERSONAL_CONFIG_DIR = os.homedir();
-const SUBCONFIG_SEP = ":";
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Determines if any rules were explicitly passed in as options.
- * @param {Object} options The options used to create our configuration.
- * @returns {boolean} True if rules were passed in as options, false otherwise.
- * @private
- */
-function hasRules(options) {
-    return options.rules && Object.keys(options.rules).length > 0;
-}
-
-//------------------------------------------------------------------------------
-// API
-//------------------------------------------------------------------------------
-
-/**
- * Configuration class
- */
-class Config {
-
-    /**
-     * @param {Object} providedOptions Options to be passed in
-     * @param {Linter} linterContext Linter instance object
-     */
-    constructor(providedOptions, linterContext) {
-        const options = providedOptions || {};
-
-        this.linterContext = linterContext;
-        this.plugins = new Plugins(linterContext.environments, linterContext.rules);
-
-        this.options = options;
-        this.ignore = options.ignore;
-        this.ignorePath = options.ignorePath;
-        this.parser = options.parser;
-        this.parserOptions = options.parserOptions || {};
-
-        this.configCache = new ConfigCache();
-
-        this.baseConfig = options.baseConfig
-            ? ConfigOps.merge({}, ConfigFile.loadObject(options.baseConfig, this))
-            : { rules: {} };
-        this.baseConfig.filePath = "";
-        this.baseConfig.baseDirectory = this.options.cwd;
-
-        this.configCache.setConfig(this.baseConfig.filePath, this.baseConfig);
-        this.configCache.setMergedVectorConfig(this.baseConfig.filePath, this.baseConfig);
-
-        this.useEslintrc = (options.useEslintrc !== false);
-
-        this.env = (options.envs || []).reduce((envs, name) => {
-            envs[name] = true;
-            return envs;
-        }, {});
-
-        /*
-         * Handle declared globals.
-         * For global variable foo, handle "foo:false" and "foo:true" to set
-         * whether global is writable.
-         * If user declares "foo", convert to "foo:false".
-         */
-        this.globals = (options.globals || []).reduce((globals, def) => {
-            const parts = def.split(SUBCONFIG_SEP);
-
-            globals[parts[0]] = (parts.length > 1 && parts[1] === "true");
-
-            return globals;
-        }, {});
-
-        this.loadSpecificConfig(options.configFile);
-
-        // Empty values in configs don't merge properly
-        const cliConfigOptions = {
-            env: this.env,
-            rules: this.options.rules,
-            globals: this.globals,
-            parserOptions: this.parserOptions,
-            plugins: this.options.plugins
-        };
-
-        this.cliConfig = {};
-        Object.keys(cliConfigOptions).forEach(configKey => {
-            const value = cliConfigOptions[configKey];
-
-            if (value) {
-                this.cliConfig[configKey] = value;
-            }
-        });
-    }
-
-    /**
-     * Loads the config options from a config specified on the command line.
-     * @param {string} [config] A shareable named config or path to a config file.
-     * @returns {void}
-     */
-    loadSpecificConfig(config) {
-        if (config) {
-            debug(`Using command line config ${config}`);
-            const isNamedConfig =
-                isResolvable(config) ||
-                isResolvable(`eslint-config-${config}`) ||
-                config.charAt(0) === "@";
-
-            this.specificConfig = ConfigFile.load(
-                isNamedConfig ? config : path.resolve(this.options.cwd, config),
-                this
-            );
-        }
-    }
-
-    /**
-     * Gets the personal config object from user's home directory.
-     * @returns {Object} the personal config object (null if there is no personal config)
-     * @private
-     */
-    getPersonalConfig() {
-        if (typeof this.personalConfig === "undefined") {
-            let config;
-            const filename = ConfigFile.getFilenameForDirectory(PERSONAL_CONFIG_DIR);
-
-            if (filename) {
-                debug("Using personal config");
-                config = ConfigFile.load(filename, this);
-            }
-
-            this.personalConfig = config || null;
-        }
-
-        return this.personalConfig;
-    }
-
-    /**
-     * Builds a hierarchy of config objects, including the base config, all local configs from the directory tree,
-     * and a config file specified on the command line, if applicable.
-     * @param {string} directory a file in whose directory we start looking for a local config
-     * @returns {Object[]} The config objects, in ascending order of precedence
-     * @private
-     */
-    getConfigHierarchy(directory) {
-        debug(`Constructing config file hierarchy for ${directory}`);
-
-        // Step 1: Always include baseConfig
-        let configs = [this.baseConfig];
-
-        // Step 2: Add user-specified config from .eslintrc.* and package.json files
-        if (this.useEslintrc) {
-            debug("Using .eslintrc and package.json files");
-            configs = configs.concat(this.getLocalConfigHierarchy(directory));
-        } else {
-            debug("Not using .eslintrc or package.json files");
-        }
-
-        // Step 3: Merge in command line config file
-        if (this.specificConfig) {
-            debug("Using command line config file");
-            configs.push(this.specificConfig);
-        }
-
-        return configs;
-    }
-
-    /**
-     * Gets a list of config objects extracted from local config files that apply to the current directory, in
-     * descending order, beginning with the config that is highest in the directory tree.
-     * @param {string} directory The directory to start looking in for local config files.
-     * @returns {Object[]} The shallow local config objects, in ascending order of precedence (closest to the current
-     * directory at the end), or an empty array if there are no local configs.
-     * @private
-     */
-    getLocalConfigHierarchy(directory) {
-        const localConfigFiles = this.findLocalConfigFiles(directory),
-            projectConfigPath = ConfigFile.getFilenameForDirectory(this.options.cwd),
-            searched = [],
-            configs = [];
-
-        for (const localConfigFile of localConfigFiles) {
-            const localConfigDirectory = path.dirname(localConfigFile);
-            const localConfigHierarchyCache = this.configCache.getHierarchyLocalConfigs(localConfigDirectory);
-
-            if (localConfigHierarchyCache) {
-                const localConfigHierarchy = localConfigHierarchyCache.concat(configs.reverse());
-
-                this.configCache.setHierarchyLocalConfigs(searched, localConfigHierarchy);
-                return localConfigHierarchy;
-            }
-
-            /*
-             * Don't consider the personal config file in the home directory,
-             * except if the home directory is the same as the current working directory
-             */
-            if (localConfigDirectory === PERSONAL_CONFIG_DIR && localConfigFile !== projectConfigPath) {
-                continue;
-            }
-
-            debug(`Loading ${localConfigFile}`);
-            const localConfig = ConfigFile.load(localConfigFile, this);
-
-            // Ignore empty config files
-            if (!localConfig) {
-                continue;
-            }
-
-            debug(`Using ${localConfigFile}`);
-            configs.push(localConfig);
-            searched.push(localConfigDirectory);
-
-            // Stop traversing if a config is found with the root flag set
-            if (localConfig.root) {
-                break;
-            }
-        }
-
-        if (!configs.length && !this.specificConfig) {
-
-            // Fall back on the personal config from ~/.eslintrc
-            debug("Using personal config file");
-            const personalConfig = this.getPersonalConfig();
-
-            if (personalConfig) {
-                configs.push(personalConfig);
-            } else if (!hasRules(this.options) && !this.options.baseConfig) {
-
-                // No config file, no manual configuration, and no rules, so error.
-                const noConfigError = new Error("No ESLint configuration found.");
-
-                noConfigError.messageTemplate = "no-config-found";
-                noConfigError.messageData = {
-                    directory,
-                    filesExamined: localConfigFiles
-                };
-
-                throw noConfigError;
-            }
-        }
-
-        // Set the caches for the parent directories
-        this.configCache.setHierarchyLocalConfigs(searched, configs.reverse());
-
-        return configs;
-    }
-
-    /**
-     * Gets the vector of applicable configs and subconfigs from the hierarchy for a given file. A vector is an array of
-     * entries, each of which in an object specifying a config file path and an array of override indices corresponding
-     * to entries in the config file's overrides section whose glob patterns match the specified file path; e.g., the
-     * vector entry { configFile: '/home/john/app/.eslintrc', matchingOverrides: [0, 2] } would indicate that the main
-     * project .eslintrc file and its first and third override blocks apply to the current file.
-     * @param {string} filePath The file path for which to build the hierarchy and config vector.
-     * @returns {Array} config vector applicable to the specified path
-     * @private
-     */
-    getConfigVector(filePath) {
-        const directory = filePath ? path.dirname(filePath) : this.options.cwd;
-
-        return this.getConfigHierarchy(directory).map(config => {
-            const vectorEntry = {
-                filePath: config.filePath,
-                matchingOverrides: []
-            };
-
-            if (config.overrides) {
-                const relativePath = path.relative(config.baseDirectory, filePath || directory);
-
-                config.overrides.forEach((override, i) => {
-                    if (ConfigOps.pathMatchesGlobs(relativePath, override.files, override.excludedFiles)) {
-                        vectorEntry.matchingOverrides.push(i);
-                    }
-                });
-            }
-
-            return vectorEntry;
-        });
-    }
-
-    /**
-     * Finds local config files from the specified directory and its parent directories.
-     * @param {string} directory The directory to start searching from.
-     * @returns {GeneratorFunction} The paths of local config files found.
-     */
-    findLocalConfigFiles(directory) {
-        if (!this.localConfigFinder) {
-            this.localConfigFinder = new FileFinder(ConfigFile.CONFIG_FILES, this.options.cwd);
-        }
-
-        return this.localConfigFinder.findAllInDirectoryAndParents(directory);
-    }
-
-    /**
-     * Builds the authoritative config object for the specified file path by merging the hierarchy of config objects
-     * that apply to the current file, including the base config (conf/eslint-recommended), the user's personal config
-     * from their homedir, all local configs from the directory tree, any specific config file passed on the command
-     * line, any configuration overrides set directly on the command line, and finally the environment configs
-     * (conf/environments).
-     * @param {string} filePath a file in whose directory we start looking for a local config
-     * @returns {Object} config object
-     */
-    getConfig(filePath) {
-        const vector = this.getConfigVector(filePath);
-        let config = this.configCache.getMergedConfig(vector);
-
-        if (config) {
-            debug("Using config from cache");
-            return config;
-        }
-
-        // Step 1: Merge in the filesystem configurations (base, local, and personal)
-        config = ConfigOps.getConfigFromVector(vector, this.configCache);
-
-        // Step 2: Merge in command line configurations
-        config = ConfigOps.merge(config, this.cliConfig);
-
-        if (this.cliConfig.plugins) {
-            this.plugins.loadAll(this.cliConfig.plugins);
-        }
-
-        /*
-         * Step 3: Override parser only if it is passed explicitly through the command line
-         * or if it's not defined yet (because the final object will at least have the parser key)
-         */
-        if (this.parser || !config.parser) {
-            config = ConfigOps.merge(config, { parser: this.parser });
-        }
-
-        // Step 4: Apply environments to the config
-        config = ConfigOps.applyEnvironments(config, this.linterContext.environments);
-
-        this.configCache.setMergedConfig(vector, config);
-
-        return config;
-    }
-}
-
-module.exports = Config;
diff --git a/node_modules/eslint/lib/config/autoconfig.js b/node_modules/eslint/lib/config/autoconfig.js
deleted file mode 100644
index 8536fdc..0000000
--- a/node_modules/eslint/lib/config/autoconfig.js
+++ /dev/null
@@ -1,359 +0,0 @@
-/**
- * @fileoverview Used for creating a suggested configuration based on project code.
- * @author Ian VanSchooten
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const lodash = require("lodash"),
-    Linter = require("../linter"),
-    configRule = require("./config-rule"),
-    ConfigOps = require("./config-ops"),
-    recConfig = require("../../conf/eslint-recommended");
-
-const debug = require("debug")("eslint:autoconfig");
-const linter = new Linter();
-
-//------------------------------------------------------------------------------
-// Data
-//------------------------------------------------------------------------------
-
-const MAX_CONFIG_COMBINATIONS = 17, // 16 combinations + 1 for severity only
-    RECOMMENDED_CONFIG_NAME = "eslint:recommended";
-
-//------------------------------------------------------------------------------
-// Private
-//------------------------------------------------------------------------------
-
-/**
- * Information about a rule configuration, in the context of a Registry.
- *
- * @typedef {Object}     registryItem
- * @param   {ruleConfig} config        A valid configuration for the rule
- * @param   {number}     specificity   The number of elements in the ruleConfig array
- * @param   {number}     errorCount    The number of errors encountered when linting with the config
- */
-
-/**
- * This callback is used to measure execution status in a progress bar
- * @callback progressCallback
- * @param {number} The total number of times the callback will be called.
- */
-
-/**
- * Create registryItems for rules
- * @param   {rulesConfig} rulesConfig Hash of rule names and arrays of ruleConfig items
- * @returns {Object}                  registryItems for each rule in provided rulesConfig
- */
-function makeRegistryItems(rulesConfig) {
-    return Object.keys(rulesConfig).reduce((accumulator, ruleId) => {
-        accumulator[ruleId] = rulesConfig[ruleId].map(config => ({
-            config,
-            specificity: config.length || 1,
-            errorCount: void 0
-        }));
-        return accumulator;
-    }, {});
-}
-
-/**
- * Creates an object in which to store rule configs and error counts
- *
- * Unless a rulesConfig is provided at construction, the registry will not contain
- * any rules, only methods.  This will be useful for building up registries manually.
- *
- * Registry class
- */
-class Registry {
-
-    /**
-     * @param {rulesConfig} [rulesConfig] Hash of rule names and arrays of possible configurations
-     */
-    constructor(rulesConfig) {
-        this.rules = (rulesConfig) ? makeRegistryItems(rulesConfig) : {};
-    }
-
-    /**
-     * Populate the registry with core rule configs.
-     *
-     * It will set the registry's `rule` property to an object having rule names
-     * as keys and an array of registryItems as values.
-     *
-     * @returns {void}
-     */
-    populateFromCoreRules() {
-        const rulesConfig = configRule.createCoreRuleConfigs();
-
-        this.rules = makeRegistryItems(rulesConfig);
-    }
-
-    /**
-     * Creates sets of rule configurations which can be used for linting
-     * and initializes registry errors to zero for those configurations (side effect).
-     *
-     * This combines as many rules together as possible, such that the first sets
-     * in the array will have the highest number of rules configured, and later sets
-     * will have fewer and fewer, as not all rules have the same number of possible
-     * configurations.
-     *
-     * The length of the returned array will be <= MAX_CONFIG_COMBINATIONS.
-     *
-     * @param   {Object}   registry The autoconfig registry
-     * @returns {Object[]}          "rules" configurations to use for linting
-     */
-    buildRuleSets() {
-        let idx = 0;
-        const ruleIds = Object.keys(this.rules),
-            ruleSets = [];
-
-        /**
-         * Add a rule configuration from the registry to the ruleSets
-         *
-         * This is broken out into its own function so that it doesn't need to be
-         * created inside of the while loop.
-         *
-         * @param   {string} rule The ruleId to add.
-         * @returns {void}
-         */
-        const addRuleToRuleSet = function(rule) {
-
-            /*
-             * This check ensures that there is a rule configuration and that
-             * it has fewer than the max combinations allowed.
-             * If it has too many configs, we will only use the most basic of
-             * the possible configurations.
-             */
-            const hasFewCombos = (this.rules[rule].length <= MAX_CONFIG_COMBINATIONS);
-
-            if (this.rules[rule][idx] && (hasFewCombos || this.rules[rule][idx].specificity <= 2)) {
-
-                /*
-                 * If the rule has too many possible combinations, only take
-                 * simple ones, avoiding objects.
-                 */
-                if (!hasFewCombos && typeof this.rules[rule][idx].config[1] === "object") {
-                    return;
-                }
-
-                ruleSets[idx] = ruleSets[idx] || {};
-                ruleSets[idx][rule] = this.rules[rule][idx].config;
-
-                /*
-                 * Initialize errorCount to zero, since this is a config which
-                 * will be linted.
-                 */
-                this.rules[rule][idx].errorCount = 0;
-            }
-        }.bind(this);
-
-        while (ruleSets.length === idx) {
-            ruleIds.forEach(addRuleToRuleSet);
-            idx += 1;
-        }
-
-        return ruleSets;
-    }
-
-    /**
-     * Remove all items from the registry with a non-zero number of errors
-     *
-     * Note: this also removes rule configurations which were not linted
-     * (meaning, they have an undefined errorCount).
-     *
-     * @returns {void}
-     */
-    stripFailingConfigs() {
-        const ruleIds = Object.keys(this.rules),
-            newRegistry = new Registry();
-
-        newRegistry.rules = Object.assign({}, this.rules);
-        ruleIds.forEach(ruleId => {
-            const errorFreeItems = newRegistry.rules[ruleId].filter(registryItem => (registryItem.errorCount === 0));
-
-            if (errorFreeItems.length > 0) {
-                newRegistry.rules[ruleId] = errorFreeItems;
-            } else {
-                delete newRegistry.rules[ruleId];
-            }
-        });
-
-        return newRegistry;
-    }
-
-    /**
-     * Removes rule configurations which were not included in a ruleSet
-     *
-     * @returns {void}
-     */
-    stripExtraConfigs() {
-        const ruleIds = Object.keys(this.rules),
-            newRegistry = new Registry();
-
-        newRegistry.rules = Object.assign({}, this.rules);
-        ruleIds.forEach(ruleId => {
-            newRegistry.rules[ruleId] = newRegistry.rules[ruleId].filter(registryItem => (typeof registryItem.errorCount !== "undefined"));
-        });
-
-        return newRegistry;
-    }
-
-    /**
-     * Creates a registry of rules which had no error-free configs.
-     * The new registry is intended to be analyzed to determine whether its rules
-     * should be disabled or set to warning.
-     *
-     * @returns {Registry}  A registry of failing rules.
-     */
-    getFailingRulesRegistry() {
-        const ruleIds = Object.keys(this.rules),
-            failingRegistry = new Registry();
-
-        ruleIds.forEach(ruleId => {
-            const failingConfigs = this.rules[ruleId].filter(registryItem => (registryItem.errorCount > 0));
-
-            if (failingConfigs && failingConfigs.length === this.rules[ruleId].length) {
-                failingRegistry.rules[ruleId] = failingConfigs;
-            }
-        });
-
-        return failingRegistry;
-    }
-
-    /**
-     * Create an eslint config for any rules which only have one configuration
-     * in the registry.
-     *
-     * @returns {Object} An eslint config with rules section populated
-     */
-    createConfig() {
-        const ruleIds = Object.keys(this.rules),
-            config = { rules: {} };
-
-        ruleIds.forEach(ruleId => {
-            if (this.rules[ruleId].length === 1) {
-                config.rules[ruleId] = this.rules[ruleId][0].config;
-            }
-        });
-
-        return config;
-    }
-
-    /**
-     * Return a cloned registry containing only configs with a desired specificity
-     *
-     * @param   {number} specificity Only keep configs with this specificity
-     * @returns {Registry}           A registry of rules
-     */
-    filterBySpecificity(specificity) {
-        const ruleIds = Object.keys(this.rules),
-            newRegistry = new Registry();
-
-        newRegistry.rules = Object.assign({}, this.rules);
-        ruleIds.forEach(ruleId => {
-            newRegistry.rules[ruleId] = this.rules[ruleId].filter(registryItem => (registryItem.specificity === specificity));
-        });
-
-        return newRegistry;
-    }
-
-    /**
-     * Lint SourceCodes against all configurations in the registry, and record results
-     *
-     * @param   {Object[]} sourceCodes  SourceCode objects for each filename
-     * @param   {Object}   config       ESLint config object
-     * @param   {progressCallback} [cb] Optional callback for reporting execution status
-     * @returns {Registry}              New registry with errorCount populated
-     */
-    lintSourceCode(sourceCodes, config, cb) {
-        let lintedRegistry = new Registry();
-
-        lintedRegistry.rules = Object.assign({}, this.rules);
-
-        const ruleSets = lintedRegistry.buildRuleSets();
-
-        lintedRegistry = lintedRegistry.stripExtraConfigs();
-
-        debug("Linting with all possible rule combinations");
-
-        const filenames = Object.keys(sourceCodes);
-        const totalFilesLinting = filenames.length * ruleSets.length;
-
-        filenames.forEach(filename => {
-            debug(`Linting file: ${filename}`);
-
-            let ruleSetIdx = 0;
-
-            ruleSets.forEach(ruleSet => {
-                const lintConfig = Object.assign({}, config, { rules: ruleSet });
-                const lintResults = linter.verify(sourceCodes[filename], lintConfig);
-
-                lintResults.forEach(result => {
-
-                    /*
-                     * It is possible that the error is from a configuration comment
-                     * in a linted file, in which case there may not be a config
-                     * set in this ruleSetIdx.
-                     * (https://github.com/eslint/eslint/issues/5992)
-                     * (https://github.com/eslint/eslint/issues/7860)
-                     */
-                    if (
-                        lintedRegistry.rules[result.ruleId] &&
-                        lintedRegistry.rules[result.ruleId][ruleSetIdx]
-                    ) {
-                        lintedRegistry.rules[result.ruleId][ruleSetIdx].errorCount += 1;
-                    }
-                });
-
-                ruleSetIdx += 1;
-
-                if (cb) {
-                    cb(totalFilesLinting); // eslint-disable-line callback-return
-                }
-            });
-
-            // Deallocate for GC
-            sourceCodes[filename] = null;
-        });
-
-        return lintedRegistry;
-    }
-}
-
-/**
- * Extract rule configuration into eslint:recommended where possible.
- *
- * This will return a new config with `"extends": "eslint:recommended"` and
- * only the rules which have configurations different from the recommended config.
- *
- * @param   {Object} config config object
- * @returns {Object}        config object using `"extends": "eslint:recommended"`
- */
-function extendFromRecommended(config) {
-    const newConfig = Object.assign({}, config);
-
-    ConfigOps.normalizeToStrings(newConfig);
-
-    const recRules = Object.keys(recConfig.rules).filter(ruleId => ConfigOps.isErrorSeverity(recConfig.rules[ruleId]));
-
-    recRules.forEach(ruleId => {
-        if (lodash.isEqual(recConfig.rules[ruleId], newConfig.rules[ruleId])) {
-            delete newConfig.rules[ruleId];
-        }
-    });
-    newConfig.extends = RECOMMENDED_CONFIG_NAME;
-    return newConfig;
-}
-
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = {
-    Registry,
-    extendFromRecommended
-};
diff --git a/node_modules/eslint/lib/config/config-cache.js b/node_modules/eslint/lib/config/config-cache.js
deleted file mode 100644
index 07436a8..0000000
--- a/node_modules/eslint/lib/config/config-cache.js
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- * @fileoverview Responsible for caching config files
- * @author Sylvan Mably
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Get a string hash for a config vector
- * @param {Array} vector config vector to hash
- * @returns {string} hash of the vector values
- * @private
- */
-function hash(vector) {
-    return JSON.stringify(vector);
-}
-
-//------------------------------------------------------------------------------
-// API
-//------------------------------------------------------------------------------
-
-/**
- * Configuration caching class
- */
-module.exports = class ConfigCache {
-
-    constructor() {
-        this.configFullNameCache = new Map();
-        this.localHierarchyCache = new Map();
-        this.mergedVectorCache = new Map();
-        this.mergedCache = new Map();
-    }
-
-    /**
-     * Gets a config object from the cache for the specified config file path.
-     * @param {string} configFullName the name of the configuration as used in the eslint config(e.g. 'plugin:node/recommended'),
-     * or the absolute path to a config file. This should uniquely identify a config.
-     * @returns {Object|null} config object, if found in the cache, otherwise null
-     * @private
-     */
-    getConfig(configFullName) {
-        return this.configFullNameCache.get(configFullName);
-    }
-
-    /**
-     * Sets a config object in the cache for the specified config file path.
-     * @param {string} configFullName the name of the configuration as used in the eslint config(e.g. 'plugin:node/recommended'),
-     * or the absolute path to a config file. This should uniquely identify a config.
-     * @param {Object} config the config object to add to the cache
-     * @returns {void}
-     * @private
-     */
-    setConfig(configFullName, config) {
-        this.configFullNameCache.set(configFullName, config);
-    }
-
-    /**
-     * Gets a list of hierarchy-local config objects that apply to the specified directory.
-     * @param {string} directory the path to the directory
-     * @returns {Object[]|null} a list of config objects, if found in the cache, otherwise null
-     * @private
-     */
-    getHierarchyLocalConfigs(directory) {
-        return this.localHierarchyCache.get(directory);
-    }
-
-    /**
-     * For each of the supplied parent directories, sets the list of config objects for that directory to the
-     * appropriate subset of the supplied parent config objects.
-     * @param {string[]} parentDirectories a list of parent directories to add to the config cache
-     * @param {Object[]} parentConfigs a list of config objects that apply to the lowest directory in parentDirectories
-     * @returns {void}
-     * @private
-     */
-    setHierarchyLocalConfigs(parentDirectories, parentConfigs) {
-        parentDirectories.forEach((localConfigDirectory, i) => {
-            const directoryParentConfigs = parentConfigs.slice(0, parentConfigs.length - i);
-
-            this.localHierarchyCache.set(localConfigDirectory, directoryParentConfigs);
-        });
-    }
-
-    /**
-     * Gets a merged config object corresponding to the supplied vector.
-     * @param {Array} vector the vector to find a merged config for
-     * @returns {Object|null} a merged config object, if found in the cache, otherwise null
-     * @private
-     */
-    getMergedVectorConfig(vector) {
-        return this.mergedVectorCache.get(hash(vector));
-    }
-
-    /**
-     * Sets a merged config object in the cache for the supplied vector.
-     * @param {Array} vector the vector to save a merged config for
-     * @param {Object} config the merged config object to add to the cache
-     * @returns {void}
-     * @private
-     */
-    setMergedVectorConfig(vector, config) {
-        this.mergedVectorCache.set(hash(vector), config);
-    }
-
-    /**
-     * Gets a merged config object corresponding to the supplied vector, including configuration options from outside
-     * the vector.
-     * @param {Array} vector the vector to find a merged config for
-     * @returns {Object|null} a merged config object, if found in the cache, otherwise null
-     * @private
-     */
-    getMergedConfig(vector) {
-        return this.mergedCache.get(hash(vector));
-    }
-
-    /**
-     * Sets a merged config object in the cache for the supplied vector, including configuration options from outside
-     * the vector.
-     * @param {Array} vector the vector to save a merged config for
-     * @param {Object} config the merged config object to add to the cache
-     * @returns {void}
-     * @private
-     */
-    setMergedConfig(vector, config) {
-        this.mergedCache.set(hash(vector), config);
-    }
-};
diff --git a/node_modules/eslint/lib/config/config-file.js b/node_modules/eslint/lib/config/config-file.js
deleted file mode 100644
index 37ac848..0000000
--- a/node_modules/eslint/lib/config/config-file.js
+++ /dev/null
@@ -1,604 +0,0 @@
-/**
- * @fileoverview Helper to locate and load configuration files.
- * @author Nicholas C. Zakas
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const fs = require("fs"),
-    path = require("path"),
-    ConfigOps = require("./config-ops"),
-    validator = require("./config-validator"),
-    ModuleResolver = require("../util/module-resolver"),
-    naming = require("../util/naming"),
-    pathIsInside = require("path-is-inside"),
-    stripComments = require("strip-json-comments"),
-    stringify = require("json-stable-stringify-without-jsonify"),
-    requireUncached = require("require-uncached");
-
-const debug = require("debug")("eslint:config-file");
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Determines sort order for object keys for json-stable-stringify
- *
- * see: https://github.com/samn/json-stable-stringify#cmp
- *
- * @param   {Object} a The first comparison object ({key: akey, value: avalue})
- * @param   {Object} b The second comparison object ({key: bkey, value: bvalue})
- * @returns {number}   1 or -1, used in stringify cmp method
- */
-function sortByKey(a, b) {
-    return a.key > b.key ? 1 : -1;
-}
-
-//------------------------------------------------------------------------------
-// Private
-//------------------------------------------------------------------------------
-
-const CONFIG_FILES = [
-    ".eslintrc.js",
-    ".eslintrc.yaml",
-    ".eslintrc.yml",
-    ".eslintrc.json",
-    ".eslintrc",
-    "package.json"
-];
-
-const resolver = new ModuleResolver();
-
-/**
- * Convenience wrapper for synchronously reading file contents.
- * @param {string} filePath The filename to read.
- * @returns {string} The file contents, with the BOM removed.
- * @private
- */
-function readFile(filePath) {
-    return fs.readFileSync(filePath, "utf8").replace(/^\ufeff/, "");
-}
-
-/**
- * Determines if a given string represents a filepath or not using the same
- * conventions as require(), meaning that the first character must be nonalphanumeric
- * and not the @ sign which is used for scoped packages to be considered a file path.
- * @param {string} filePath The string to check.
- * @returns {boolean} True if it's a filepath, false if not.
- * @private
- */
-function isFilePath(filePath) {
-    return path.isAbsolute(filePath) || !/\w|@/.test(filePath.charAt(0));
-}
-
-/**
- * Loads a YAML configuration from a file.
- * @param {string} filePath The filename to load.
- * @returns {Object} The configuration object from the file.
- * @throws {Error} If the file cannot be read.
- * @private
- */
-function loadYAMLConfigFile(filePath) {
-    debug(`Loading YAML config file: ${filePath}`);
-
-    // lazy load YAML to improve performance when not used
-    const yaml = require("js-yaml");
-
-    try {
-
-        // empty YAML file can be null, so always use
-        return yaml.safeLoad(readFile(filePath)) || {};
-    } catch (e) {
-        debug(`Error reading YAML file: ${filePath}`);
-        e.message = `Cannot read config file: ${filePath}\nError: ${e.message}`;
-        throw e;
-    }
-}
-
-/**
- * Loads a JSON configuration from a file.
- * @param {string} filePath The filename to load.
- * @returns {Object} The configuration object from the file.
- * @throws {Error} If the file cannot be read.
- * @private
- */
-function loadJSONConfigFile(filePath) {
-    debug(`Loading JSON config file: ${filePath}`);
-
-    try {
-        return JSON.parse(stripComments(readFile(filePath)));
-    } catch (e) {
-        debug(`Error reading JSON file: ${filePath}`);
-        e.message = `Cannot read config file: ${filePath}\nError: ${e.message}`;
-        throw e;
-    }
-}
-
-/**
- * Loads a legacy (.eslintrc) configuration from a file.
- * @param {string} filePath The filename to load.
- * @returns {Object} The configuration object from the file.
- * @throws {Error} If the file cannot be read.
- * @private
- */
-function loadLegacyConfigFile(filePath) {
-    debug(`Loading config file: ${filePath}`);
-
-    // lazy load YAML to improve performance when not used
-    const yaml = require("js-yaml");
-
-    try {
-        return yaml.safeLoad(stripComments(readFile(filePath))) || /* istanbul ignore next */ {};
-    } catch (e) {
-        debug(`Error reading YAML file: ${filePath}`);
-        e.message = `Cannot read config file: ${filePath}\nError: ${e.message}`;
-        throw e;
-    }
-}
-
-/**
- * Loads a JavaScript configuration from a file.
- * @param {string} filePath The filename to load.
- * @returns {Object} The configuration object from the file.
- * @throws {Error} If the file cannot be read.
- * @private
- */
-function loadJSConfigFile(filePath) {
-    debug(`Loading JS config file: ${filePath}`);
-    try {
-        return requireUncached(filePath);
-    } catch (e) {
-        debug(`Error reading JavaScript file: ${filePath}`);
-        e.message = `Cannot read config file: ${filePath}\nError: ${e.message}`;
-        throw e;
-    }
-}
-
-/**
- * Loads a configuration from a package.json file.
- * @param {string} filePath The filename to load.
- * @returns {Object} The configuration object from the file.
- * @throws {Error} If the file cannot be read.
- * @private
- */
-function loadPackageJSONConfigFile(filePath) {
-    debug(`Loading package.json config file: ${filePath}`);
-    try {
-        return loadJSONConfigFile(filePath).eslintConfig || null;
-    } catch (e) {
-        debug(`Error reading package.json file: ${filePath}`);
-        e.message = `Cannot read config file: ${filePath}\nError: ${e.message}`;
-        throw e;
-    }
-}
-
-/**
- * Creates an error to notify about a missing config to extend from.
- * @param {string} configName The name of the missing config.
- * @returns {Error} The error object to throw
- * @private
- */
-function configMissingError(configName) {
-    const error = new Error(`Failed to load config "${configName}" to extend from.`);
-
-    error.messageTemplate = "extend-config-missing";
-    error.messageData = {
-        configName
-    };
-    return error;
-}
-
-/**
- * Loads a configuration file regardless of the source. Inspects the file path
- * to determine the correctly way to load the config file.
- * @param {Object} file The path to the configuration.
- * @returns {Object} The configuration information.
- * @private
- */
-function loadConfigFile(file) {
-    const filePath = file.filePath;
-    let config;
-
-    switch (path.extname(filePath)) {
-        case ".js":
-            config = loadJSConfigFile(filePath);
-            if (file.configName) {
-                config = config.configs[file.configName];
-                if (!config) {
-                    throw configMissingError(file.configFullName);
-                }
-            }
-            break;
-
-        case ".json":
-            if (path.basename(filePath) === "package.json") {
-                config = loadPackageJSONConfigFile(filePath);
-                if (config === null) {
-                    return null;
-                }
-            } else {
-                config = loadJSONConfigFile(filePath);
-            }
-            break;
-
-        case ".yaml":
-        case ".yml":
-            config = loadYAMLConfigFile(filePath);
-            break;
-
-        default:
-            config = loadLegacyConfigFile(filePath);
-    }
-
-    return ConfigOps.merge(ConfigOps.createEmptyConfig(), config);
-}
-
-/**
- * Writes a configuration file in JSON format.
- * @param {Object} config The configuration object to write.
- * @param {string} filePath The filename to write to.
- * @returns {void}
- * @private
- */
-function writeJSONConfigFile(config, filePath) {
-    debug(`Writing JSON config file: ${filePath}`);
-
-    const content = stringify(config, { cmp: sortByKey, space: 4 });
-
-    fs.writeFileSync(filePath, content, "utf8");
-}
-
-/**
- * Writes a configuration file in YAML format.
- * @param {Object} config The configuration object to write.
- * @param {string} filePath The filename to write to.
- * @returns {void}
- * @private
- */
-function writeYAMLConfigFile(config, filePath) {
-    debug(`Writing YAML config file: ${filePath}`);
-
-    // lazy load YAML to improve performance when not used
-    const yaml = require("js-yaml");
-
-    const content = yaml.safeDump(config, { sortKeys: true });
-
-    fs.writeFileSync(filePath, content, "utf8");
-}
-
-/**
- * Writes a configuration file in JavaScript format.
- * @param {Object} config The configuration object to write.
- * @param {string} filePath The filename to write to.
- * @returns {void}
- * @private
- */
-function writeJSConfigFile(config, filePath) {
-    debug(`Writing JS config file: ${filePath}`);
-
-    const content = `module.exports = ${stringify(config, { cmp: sortByKey, space: 4 })};`;
-
-    fs.writeFileSync(filePath, content, "utf8");
-}
-
-/**
- * Writes a configuration file.
- * @param {Object} config The configuration object to write.
- * @param {string} filePath The filename to write to.
- * @returns {void}
- * @throws {Error} When an unknown file type is specified.
- * @private
- */
-function write(config, filePath) {
-    switch (path.extname(filePath)) {
-        case ".js":
-            writeJSConfigFile(config, filePath);
-            break;
-
-        case ".json":
-            writeJSONConfigFile(config, filePath);
-            break;
-
-        case ".yaml":
-        case ".yml":
-            writeYAMLConfigFile(config, filePath);
-            break;
-
-        default:
-            throw new Error("Can't write to unknown file type.");
-    }
-}
-
-/**
- * Determines the base directory for node packages referenced in a config file.
- * This does not include node_modules in the path so it can be used for all
- * references relative to a config file.
- * @param {string} configFilePath The config file referencing the file.
- * @returns {string} The base directory for the file path.
- * @private
- */
-function getBaseDir(configFilePath) {
-
-    // calculates the path of the project including ESLint as dependency
-    const projectPath = path.resolve(__dirname, "../../../");
-
-    if (configFilePath && pathIsInside(configFilePath, projectPath)) {
-
-        // be careful of https://github.com/substack/node-resolve/issues/78
-        return path.join(path.resolve(configFilePath));
-    }
-
-    /*
-     * default to ESLint project path since it's unlikely that plugins will be
-     * in this directory
-     */
-    return path.join(projectPath);
-}
-
-/**
- * Determines the lookup path, including node_modules, for package
- * references relative to a config file.
- * @param {string} configFilePath The config file referencing the file.
- * @returns {string} The lookup path for the file path.
- * @private
- */
-function getLookupPath(configFilePath) {
-    const basedir = getBaseDir(configFilePath);
-
-    return path.join(basedir, "node_modules");
-}
-
-/**
- * Resolves a eslint core config path
- * @param {string} name The eslint config name.
- * @returns {string} The resolved path of the config.
- * @private
- */
-function getEslintCoreConfigPath(name) {
-    if (name === "eslint:recommended") {
-
-        /*
-         * Add an explicit substitution for eslint:recommended to
-         * conf/eslint-recommended.js.
-         */
-        return path.resolve(__dirname, "../../conf/eslint-recommended.js");
-    }
-
-    if (name === "eslint:all") {
-
-        /*
-         * Add an explicit substitution for eslint:all to conf/eslint-all.js
-         */
-        return path.resolve(__dirname, "../../conf/eslint-all.js");
-    }
-
-    throw configMissingError(name);
-}
-
-/**
- * Applies values from the "extends" field in a configuration file.
- * @param {Object} config The configuration information.
- * @param {Config} configContext Plugin context for the config instance
- * @param {string} filePath The file path from which the configuration information
- *      was loaded.
- * @param {string} [relativeTo] The path to resolve relative to.
- * @returns {Object} A new configuration object with all of the "extends" fields
- *      loaded and merged.
- * @private
- */
-function applyExtends(config, configContext, filePath, relativeTo) {
-    let configExtends = config.extends;
-
-    // normalize into an array for easier handling
-    if (!Array.isArray(config.extends)) {
-        configExtends = [config.extends];
-    }
-
-    // Make the last element in an array take the highest precedence
-    return configExtends.reduceRight((previousValue, parentPath) => {
-        try {
-            let extensionPath;
-
-            if (parentPath.startsWith("eslint:")) {
-                extensionPath = getEslintCoreConfigPath(parentPath);
-            } else if (isFilePath(parentPath)) {
-
-                /*
-                 * If the `extends` path is relative, use the directory of the current configuration
-                 * file as the reference point. Otherwise, use as-is.
-                 */
-                extensionPath = (path.isAbsolute(parentPath)
-                    ? parentPath
-                    : path.join(relativeTo || path.dirname(filePath), parentPath)
-                );
-            } else {
-                extensionPath = parentPath;
-            }
-            debug(`Loading ${extensionPath}`);
-
-            // eslint-disable-next-line no-use-before-define
-            return ConfigOps.merge(load(extensionPath, configContext, relativeTo), previousValue);
-        } catch (e) {
-
-            /*
-             * If the file referenced by `extends` failed to load, add the path
-             * to the configuration file that referenced it to the error
-             * message so the user is able to see where it was referenced from,
-             * then re-throw.
-             */
-            e.message += `\nReferenced from: ${filePath}`;
-            throw e;
-        }
-
-    }, config);
-}
-
-/**
- * Resolves a configuration file path into the fully-formed path, whether filename
- * or package name.
- * @param {string} filePath The filepath to resolve.
- * @param {string} [relativeTo] The path to resolve relative to.
- * @returns {Object} An object containing 3 properties:
- * - 'filePath' (required) the resolved path that can be used directly to load the configuration.
- * - 'configName' the name of the configuration inside the plugin.
- * - 'configFullName' (required) the name of the configuration as used in the eslint config(e.g. 'plugin:node/recommended'),
- *     or the absolute path to a config file. This should uniquely identify a config.
- * @private
- */
-function resolve(filePath, relativeTo) {
-    if (isFilePath(filePath)) {
-        const fullPath = path.resolve(relativeTo || "", filePath);
-
-        return { filePath: fullPath, configFullName: fullPath };
-    }
-    let normalizedPackageName;
-
-    if (filePath.startsWith("plugin:")) {
-        const configFullName = filePath;
-        const pluginName = filePath.slice(7, filePath.lastIndexOf("/"));
-        const configName = filePath.slice(filePath.lastIndexOf("/") + 1);
-
-        normalizedPackageName = naming.normalizePackageName(pluginName, "eslint-plugin");
-        debug(`Attempting to resolve ${normalizedPackageName}`);
-
-        return {
-            filePath: resolver.resolve(normalizedPackageName, getLookupPath(relativeTo)),
-            configName,
-            configFullName
-        };
-    }
-    normalizedPackageName = naming.normalizePackageName(filePath, "eslint-config");
-    debug(`Attempting to resolve ${normalizedPackageName}`);
-
-    return {
-        filePath: resolver.resolve(normalizedPackageName, getLookupPath(relativeTo)),
-        configFullName: filePath
-    };
-
-
-}
-
-/**
- * Loads a configuration file from the given file path.
- * @param {Object} resolvedPath The value from calling resolve() on a filename or package name.
- * @param {Config} configContext Plugins context
- * @returns {Object} The configuration information.
- */
-function loadFromDisk(resolvedPath, configContext) {
-    const dirname = path.dirname(resolvedPath.filePath),
-        lookupPath = getLookupPath(dirname);
-    let config = loadConfigFile(resolvedPath);
-
-    if (config) {
-
-        // ensure plugins are properly loaded first
-        if (config.plugins) {
-            configContext.plugins.loadAll(config.plugins);
-        }
-
-        // include full path of parser if present
-        if (config.parser) {
-            if (isFilePath(config.parser)) {
-                config.parser = path.resolve(dirname || "", config.parser);
-            } else {
-                config.parser = resolver.resolve(config.parser, lookupPath);
-            }
-        }
-
-        const ruleMap = configContext.linterContext.getRules();
-
-        // validate the configuration before continuing
-        validator.validate(config, resolvedPath.configFullName, ruleMap.get.bind(ruleMap), configContext.linterContext.environments);
-
-        /*
-         * If an `extends` property is defined, it represents a configuration file to use as
-         * a "parent". Load the referenced file and merge the configuration recursively.
-         */
-        if (config.extends) {
-            config = applyExtends(config, configContext, resolvedPath.filePath, dirname);
-        }
-    }
-
-    return config;
-}
-
-/**
- * Loads a config object, applying extends if present.
- * @param {Object} configObject a config object to load
- * @param {Config} configContext Context for the config instance
- * @returns {Object} the config object with extends applied if present, or the passed config if not
- * @private
- */
-function loadObject(configObject, configContext) {
-    return configObject.extends ? applyExtends(configObject, configContext, "") : configObject;
-}
-
-/**
- * Loads a config object from the config cache based on its filename, falling back to the disk if the file is not yet
- * cached.
- * @param {string} filePath the path to the config file
- * @param {Config} configContext Context for the config instance
- * @param {string} [relativeTo] The path to resolve relative to.
- * @returns {Object} the parsed config object (empty object if there was a parse error)
- * @private
- */
-function load(filePath, configContext, relativeTo) {
-    const resolvedPath = resolve(filePath, relativeTo);
-
-    const cachedConfig = configContext.configCache.getConfig(resolvedPath.configFullName);
-
-    if (cachedConfig) {
-        return cachedConfig;
-    }
-
-    const config = loadFromDisk(resolvedPath, configContext);
-
-    if (config) {
-        config.filePath = resolvedPath.filePath;
-        config.baseDirectory = path.dirname(resolvedPath.filePath);
-        configContext.configCache.setConfig(resolvedPath.configFullName, config);
-    }
-
-    return config;
-}
-
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = {
-
-    getBaseDir,
-    getLookupPath,
-    load,
-    loadObject,
-    resolve,
-    write,
-    applyExtends,
-    CONFIG_FILES,
-
-    /**
-     * Retrieves the configuration filename for a given directory. It loops over all
-     * of the valid configuration filenames in order to find the first one that exists.
-     * @param {string} directory The directory to check for a config file.
-     * @returns {?string} The filename of the configuration file for the directory
-     *      or null if there is no configuration file in the directory.
-     */
-    getFilenameForDirectory(directory) {
-        for (let i = 0, len = CONFIG_FILES.length; i < len; i++) {
-            const filename = path.join(directory, CONFIG_FILES[i]);
-
-            if (fs.existsSync(filename) && fs.statSync(filename).isFile()) {
-                return filename;
-            }
-        }
-
-        return null;
-    }
-};
diff --git a/node_modules/eslint/lib/config/config-initializer.js b/node_modules/eslint/lib/config/config-initializer.js
deleted file mode 100644
index e4865a0..0000000
--- a/node_modules/eslint/lib/config/config-initializer.js
+++ /dev/null
@@ -1,605 +0,0 @@
-/**
- * @fileoverview Config initialization wizard.
- * @author Ilya Volodin
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const util = require("util"),
-    inquirer = require("inquirer"),
-    ProgressBar = require("progress"),
-    semver = require("semver"),
-    autoconfig = require("./autoconfig.js"),
-    ConfigFile = require("./config-file"),
-    ConfigOps = require("./config-ops"),
-    getSourceCodeOfFiles = require("../util/source-code-util").getSourceCodeOfFiles,
-    ModuleResolver = require("../util/module-resolver"),
-    npmUtil = require("../util/npm-util"),
-    recConfig = require("../../conf/eslint-recommended"),
-    log = require("../logging");
-
-const debug = require("debug")("eslint:config-initializer");
-
-//------------------------------------------------------------------------------
-// Private
-//------------------------------------------------------------------------------
-
-/* istanbul ignore next: hard to test fs function */
-/**
- * Create .eslintrc file in the current working directory
- * @param {Object} config object that contains user's answers
- * @param {string} format The file format to write to.
- * @returns {void}
- */
-function writeFile(config, format) {
-
-    // default is .js
-    let extname = ".js";
-
-    if (format === "YAML") {
-        extname = ".yml";
-    } else if (format === "JSON") {
-        extname = ".json";
-    }
-
-    const installedESLint = config.installedESLint;
-
-    delete config.installedESLint;
-
-    ConfigFile.write(config, `./.eslintrc${extname}`);
-    log.info(`Successfully created .eslintrc${extname} file in ${process.cwd()}`);
-
-    if (installedESLint) {
-        log.info("ESLint was installed locally. We recommend using this local copy instead of your globally-installed copy.");
-    }
-}
-
-/**
- * Get the peer dependencies of the given module.
- * This adds the gotten value to cache at the first time, then reuses it.
- * In a process, this function is called twice, but `npmUtil.fetchPeerDependencies` needs to access network which is relatively slow.
- * @param {string} moduleName The module name to get.
- * @returns {Object} The peer dependencies of the given module.
- * This object is the object of `peerDependencies` field of `package.json`.
- * Returns null if npm was not found.
- */
-function getPeerDependencies(moduleName) {
-    let result = getPeerDependencies.cache.get(moduleName);
-
-    if (!result) {
-        log.info(`Checking peerDependencies of ${moduleName}`);
-
-        result = npmUtil.fetchPeerDependencies(moduleName);
-        getPeerDependencies.cache.set(moduleName, result);
-    }
-
-    return result;
-}
-getPeerDependencies.cache = new Map();
-
-/**
- * Synchronously install necessary plugins, configs, parsers, etc. based on the config
- * @param   {Object} config  config object
- * @param   {boolean} [installESLint=true]  If `false` is given, it does not install eslint.
- * @returns {void}
- */
-function installModules(config, installESLint) {
-    const modules = {};
-
-    // Create a list of modules which should be installed based on config
-    if (config.plugins) {
-        for (const plugin of config.plugins) {
-            modules[`eslint-plugin-${plugin}`] = "latest";
-        }
-    }
-    if (config.extends && config.extends.indexOf("eslint:") === -1) {
-        const moduleName = `eslint-config-${config.extends}`;
-
-        modules[moduleName] = "latest";
-        Object.assign(
-            modules,
-            getPeerDependencies(`${moduleName}@latest`)
-        );
-    }
-
-    // If no modules, do nothing.
-    if (Object.keys(modules).length === 0) {
-        return;
-    }
-
-    if (installESLint === false) {
-        delete modules.eslint;
-    } else {
-        const installStatus = npmUtil.checkDevDeps(["eslint"]);
-
-        // Mark to show messages if it's new installation of eslint.
-        if (installStatus.eslint === false) {
-            log.info("Local ESLint installation not found.");
-            modules.eslint = modules.eslint || "latest";
-            config.installedESLint = true;
-        }
-    }
-
-    // Install packages
-    const modulesToInstall = Object.keys(modules).map(name => `${name}@${modules[name]}`);
-
-    log.info(`Installing ${modulesToInstall.join(", ")}`);
-
-    npmUtil.installSyncSaveDev(modulesToInstall);
-}
-
-/**
- * Set the `rules` of a config by examining a user's source code
- *
- * Note: This clones the config object and returns a new config to avoid mutating
- * the original config parameter.
- *
- * @param   {Object} answers  answers received from inquirer
- * @param   {Object} config   config object
- * @returns {Object}          config object with configured rules
- */
-function configureRules(answers, config) {
-    const BAR_TOTAL = 20,
-        BAR_SOURCE_CODE_TOTAL = 4,
-        newConfig = Object.assign({}, config),
-        disabledConfigs = {};
-    let sourceCodes,
-        registry;
-
-    // Set up a progress bar, as this process can take a long time
-    const bar = new ProgressBar("Determining Config: :percent [:bar] :elapseds elapsed, eta :etas ", {
-        width: 30,
-        total: BAR_TOTAL
-    });
-
-    bar.tick(0); // Shows the progress bar
-
-    // Get the SourceCode of all chosen files
-    const patterns = answers.patterns.split(/[\s]+/);
-
-    try {
-        sourceCodes = getSourceCodeOfFiles(patterns, { baseConfig: newConfig, useEslintrc: false }, total => {
-            bar.tick((BAR_SOURCE_CODE_TOTAL / total));
-        });
-    } catch (e) {
-        log.info("\n");
-        throw e;
-    }
-    const fileQty = Object.keys(sourceCodes).length;
-
-    if (fileQty === 0) {
-        log.info("\n");
-        throw new Error("Automatic Configuration failed.  No files were able to be parsed.");
-    }
-
-    // Create a registry of rule configs
-    registry = new autoconfig.Registry();
-    registry.populateFromCoreRules();
-
-    // Lint all files with each rule config in the registry
-    registry = registry.lintSourceCode(sourceCodes, newConfig, total => {
-        bar.tick((BAR_TOTAL - BAR_SOURCE_CODE_TOTAL) / total); // Subtract out ticks used at beginning
-    });
-    debug(`\nRegistry: ${util.inspect(registry.rules, { depth: null })}`);
-
-    // Create a list of recommended rules, because we don't want to disable them
-    const recRules = Object.keys(recConfig.rules).filter(ruleId => ConfigOps.isErrorSeverity(recConfig.rules[ruleId]));
-
-    // Find and disable rules which had no error-free configuration
-    const failingRegistry = registry.getFailingRulesRegistry();
-
-    Object.keys(failingRegistry.rules).forEach(ruleId => {
-
-        // If the rule is recommended, set it to error, otherwise disable it
-        disabledConfigs[ruleId] = (recRules.indexOf(ruleId) !== -1) ? 2 : 0;
-    });
-
-    // Now that we know which rules to disable, strip out configs with errors
-    registry = registry.stripFailingConfigs();
-
-    /*
-     * If there is only one config that results in no errors for a rule, we should use it.
-     * createConfig will only add rules that have one configuration in the registry.
-     */
-    const singleConfigs = registry.createConfig().rules;
-
-    /*
-     * The "sweet spot" for number of options in a config seems to be two (severity plus one option).
-     * Very often, a third option (usually an object) is available to address
-     * edge cases, exceptions, or unique situations. We will prefer to use a config with
-     * specificity of two.
-     */
-    const specTwoConfigs = registry.filterBySpecificity(2).createConfig().rules;
-
-    // Maybe a specific combination using all three options works
-    const specThreeConfigs = registry.filterBySpecificity(3).createConfig().rules;
-
-    // If all else fails, try to use the default (severity only)
-    const defaultConfigs = registry.filterBySpecificity(1).createConfig().rules;
-
-    // Combine configs in reverse priority order (later take precedence)
-    newConfig.rules = Object.assign({}, disabledConfigs, defaultConfigs, specThreeConfigs, specTwoConfigs, singleConfigs);
-
-    // Make sure progress bar has finished (floating point rounding)
-    bar.update(BAR_TOTAL);
-
-    // Log out some stats to let the user know what happened
-    const finalRuleIds = Object.keys(newConfig.rules);
-    const totalRules = finalRuleIds.length;
-    const enabledRules = finalRuleIds.filter(ruleId => (newConfig.rules[ruleId] !== 0)).length;
-    const resultMessage = [
-        `\nEnabled ${enabledRules} out of ${totalRules}`,
-        `rules based on ${fileQty}`,
-        `file${(fileQty === 1) ? "." : "s."}`
-    ].join(" ");
-
-    log.info(resultMessage);
-
-    ConfigOps.normalizeToStrings(newConfig);
-    return newConfig;
-}
-
-/**
- * process user's answers and create config object
- * @param {Object} answers answers received from inquirer
- * @returns {Object} config object
- */
-function processAnswers(answers) {
-    let config = { rules: {}, env: {} };
-
-    if (answers.es6) {
-        config.env.es6 = true;
-        if (answers.modules) {
-            config.parserOptions = config.parserOptions || {};
-            config.parserOptions.sourceType = "module";
-        }
-    }
-    if (answers.commonjs) {
-        config.env.commonjs = true;
-    }
-    answers.env.forEach(env => {
-        config.env[env] = true;
-    });
-    if (answers.jsx) {
-        config.parserOptions = config.parserOptions || {};
-        config.parserOptions.ecmaFeatures = config.parserOptions.ecmaFeatures || {};
-        config.parserOptions.ecmaFeatures.jsx = true;
-        if (answers.react) {
-            config.plugins = ["react"];
-            config.parserOptions.ecmaFeatures.experimentalObjectRestSpread = true;
-        }
-    }
-
-    if (answers.source === "prompt") {
-        config.extends = "eslint:recommended";
-        config.rules.indent = ["error", answers.indent];
-        config.rules.quotes = ["error", answers.quotes];
-        config.rules["linebreak-style"] = ["error", answers.linebreak];
-        config.rules.semi = ["error", answers.semi ? "always" : "never"];
-    }
-
-    installModules(config);
-
-    if (answers.source === "auto") {
-        config = configureRules(answers, config);
-        config = autoconfig.extendFromRecommended(config);
-    }
-
-    ConfigOps.normalizeToStrings(config);
-    return config;
-}
-
-/**
- * process user's style guide of choice and return an appropriate config object.
- * @param {string} guide name of the chosen style guide
- * @param {boolean} [installESLint=true]  If `false` is given, it does not install eslint.
- * @returns {Object} config object
- */
-function getConfigForStyleGuide(guide, installESLint) {
-    const guides = {
-        google: { extends: "google" },
-        airbnb: { extends: "airbnb" },
-        "airbnb-base": { extends: "airbnb-base" },
-        standard: { extends: "standard" }
-    };
-
-    if (!guides[guide]) {
-        throw new Error("You referenced an unsupported guide.");
-    }
-
-    installModules(guides[guide], installESLint);
-
-    return guides[guide];
-}
-
-/**
- * Get the version of the local ESLint.
- * @returns {string|null} The version. If the local ESLint was not found, returns null.
- */
-function getLocalESLintVersion() {
-    try {
-        const resolver = new ModuleResolver();
-        const eslintPath = resolver.resolve("eslint", process.cwd());
-        const eslint = require(eslintPath);
-
-        return eslint.linter.version || null;
-    } catch (_err) {
-        return null;
-    }
-}
-
-/**
- * Get the shareable config name of the chosen style guide.
- * @param {Object} answers The answers object.
- * @returns {string} The shareable config name.
- */
-function getStyleGuideName(answers) {
-    if (answers.styleguide === "airbnb" && !answers.airbnbReact) {
-        return "airbnb-base";
-    }
-    return answers.styleguide;
-}
-
-/**
- * Check whether the local ESLint version conflicts with the required version of the chosen shareable config.
- * @param {Object} answers The answers object.
- * @returns {boolean} `true` if the local ESLint is found then it conflicts with the required version of the chosen shareable config.
- */
-function hasESLintVersionConflict(answers) {
-
-    // Get the local ESLint version.
-    const localESLintVersion = getLocalESLintVersion();
-
-    if (!localESLintVersion) {
-        return false;
-    }
-
-    // Get the required range of ESLint version.
-    const configName = getStyleGuideName(answers);
-    const moduleName = `eslint-config-${configName}@latest`;
-    const peerDependencies = getPeerDependencies(moduleName) || {};
-    const requiredESLintVersionRange = peerDependencies.eslint;
-
-    if (!requiredESLintVersionRange) {
-        return false;
-    }
-
-    answers.localESLintVersion = localESLintVersion;
-    answers.requiredESLintVersionRange = requiredESLintVersionRange;
-
-    // Check the version.
-    if (semver.satisfies(localESLintVersion, requiredESLintVersionRange)) {
-        answers.installESLint = false;
-        return false;
-    }
-
-    return true;
-}
-
-/* istanbul ignore next: no need to test inquirer*/
-/**
- * Ask use a few questions on command prompt
- * @returns {Promise} The promise with the result of the prompt
- */
-function promptUser() {
-
-    return inquirer.prompt([
-        {
-            type: "list",
-            name: "source",
-            message: "How would you like to configure ESLint?",
-            default: "prompt",
-            choices: [
-                { name: "Answer questions about your style", value: "prompt" },
-                { name: "Use a popular style guide", value: "guide" },
-                { name: "Inspect your JavaScript file(s)", value: "auto" }
-            ]
-        },
-        {
-            type: "list",
-            name: "styleguide",
-            message: "Which style guide do you want to follow?",
-            choices: [{ name: "Google", value: "google" }, { name: "Airbnb", value: "airbnb" }, { name: "Standard", value: "standard" }],
-            when(answers) {
-                answers.packageJsonExists = npmUtil.checkPackageJson();
-                return answers.source === "guide" && answers.packageJsonExists;
-            }
-        },
-        {
-            type: "confirm",
-            name: "airbnbReact",
-            message: "Do you use React?",
-            default: false,
-            when(answers) {
-                return answers.styleguide === "airbnb";
-            }
-        },
-        {
-            type: "input",
-            name: "patterns",
-            message: "Which file(s), path(s), or glob(s) should be examined?",
-            when(answers) {
-                return (answers.source === "auto");
-            },
-            validate(input) {
-                if (input.trim().length === 0 && input.trim() !== ",") {
-                    return "You must tell us what code to examine. Try again.";
-                }
-                return true;
-            }
-        },
-        {
-            type: "list",
-            name: "format",
-            message: "What format do you want your config file to be in?",
-            default: "JavaScript",
-            choices: ["JavaScript", "YAML", "JSON"],
-            when(answers) {
-                return ((answers.source === "guide" && answers.packageJsonExists) || answers.source === "auto");
-            }
-        },
-        {
-            type: "confirm",
-            name: "installESLint",
-            message(answers) {
-                const verb = semver.ltr(answers.localESLintVersion, answers.requiredESLintVersionRange)
-                    ? "upgrade"
-                    : "downgrade";
-
-                return `The style guide "${answers.styleguide}" requires eslint@${answers.requiredESLintVersionRange}. You are currently using eslint@${answers.localESLintVersion}.\n  Do you want to ${verb}?`;
-            },
-            default: true,
-            when(answers) {
-                return answers.source === "guide" && answers.packageJsonExists && hasESLintVersionConflict(answers);
-            }
-        }
-    ]).then(earlyAnswers => {
-
-        // early exit if you are using a style guide
-        if (earlyAnswers.source === "guide") {
-            if (!earlyAnswers.packageJsonExists) {
-                log.info("A package.json is necessary to install plugins such as style guides. Run `npm init` to create a package.json file and try again.");
-                return void 0;
-            }
-            if (earlyAnswers.installESLint === false && !semver.satisfies(earlyAnswers.localESLintVersion, earlyAnswers.requiredESLintVersionRange)) {
-                log.info(`Note: it might not work since ESLint's version is mismatched with the ${earlyAnswers.styleguide} config.`);
-            }
-            if (earlyAnswers.styleguide === "airbnb" && !earlyAnswers.airbnbReact) {
-                earlyAnswers.styleguide = "airbnb-base";
-            }
-
-            const config = getConfigForStyleGuide(earlyAnswers.styleguide, earlyAnswers.installESLint);
-
-            writeFile(config, earlyAnswers.format);
-
-            return void 0;
-        }
-
-        // continue with the questions otherwise...
-        return inquirer.prompt([
-            {
-                type: "confirm",
-                name: "es6",
-                message: "Are you using ECMAScript 6 features?",
-                default: false
-            },
-            {
-                type: "confirm",
-                name: "modules",
-                message: "Are you using ES6 modules?",
-                default: false,
-                when(answers) {
-                    return answers.es6 === true;
-                }
-            },
-            {
-                type: "checkbox",
-                name: "env",
-                message: "Where will your code run?",
-                default: ["browser"],
-                choices: [{ name: "Browser", value: "browser" }, { name: "Node", value: "node" }]
-            },
-            {
-                type: "confirm",
-                name: "commonjs",
-                message: "Do you use CommonJS?",
-                default: false,
-                when(answers) {
-                    return answers.env.some(env => env === "browser");
-                }
-            },
-            {
-                type: "confirm",
-                name: "jsx",
-                message: "Do you use JSX?",
-                default: false
-            },
-            {
-                type: "confirm",
-                name: "react",
-                message: "Do you use React?",
-                default: false,
-                when(answers) {
-                    return answers.jsx;
-                }
-            }
-        ]).then(secondAnswers => {
-
-            // early exit if you are using automatic style generation
-            if (earlyAnswers.source === "auto") {
-                const combinedAnswers = Object.assign({}, earlyAnswers, secondAnswers);
-
-                const config = processAnswers(combinedAnswers);
-
-                installModules(config);
-                writeFile(config, earlyAnswers.format);
-
-                return void 0;
-            }
-
-            // continue with the style questions otherwise...
-            return inquirer.prompt([
-                {
-                    type: "list",
-                    name: "indent",
-                    message: "What style of indentation do you use?",
-                    default: "tab",
-                    choices: [{ name: "Tabs", value: "tab" }, { name: "Spaces", value: 4 }]
-                },
-                {
-                    type: "list",
-                    name: "quotes",
-                    message: "What quotes do you use for strings?",
-                    default: "double",
-                    choices: [{ name: "Double", value: "double" }, { name: "Single", value: "single" }]
-                },
-                {
-                    type: "list",
-                    name: "linebreak",
-                    message: "What line endings do you use?",
-                    default: "unix",
-                    choices: [{ name: "Unix", value: "unix" }, { name: "Windows", value: "windows" }]
-                },
-                {
-                    type: "confirm",
-                    name: "semi",
-                    message: "Do you require semicolons?",
-                    default: true
-                },
-                {
-                    type: "list",
-                    name: "format",
-                    message: "What format do you want your config file to be in?",
-                    default: "JavaScript",
-                    choices: ["JavaScript", "YAML", "JSON"]
-                }
-            ]).then(answers => {
-                const totalAnswers = Object.assign({}, earlyAnswers, secondAnswers, answers);
-
-                const config = processAnswers(totalAnswers);
-
-                installModules(config);
-                writeFile(config, answers.format);
-            });
-        });
-    });
-}
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-const init = {
-    getConfigForStyleGuide,
-    hasESLintVersionConflict,
-    processAnswers,
-    /* istanbul ignore next */initializeConfig() {
-        return promptUser();
-    }
-};
-
-module.exports = init;
diff --git a/node_modules/eslint/lib/config/config-ops.js b/node_modules/eslint/lib/config/config-ops.js
deleted file mode 100644
index 67c23a8..0000000
--- a/node_modules/eslint/lib/config/config-ops.js
+++ /dev/null
@@ -1,381 +0,0 @@
-/**
- * @fileoverview Config file operations. This file must be usable in the browser,
- * so no Node-specific code can be here.
- * @author Nicholas C. Zakas
- */
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const minimatch = require("minimatch"),
-    path = require("path");
-
-const debug = require("debug")("eslint:config-ops");
-
-//------------------------------------------------------------------------------
-// Private
-//------------------------------------------------------------------------------
-
-const RULE_SEVERITY_STRINGS = ["off", "warn", "error"],
-    RULE_SEVERITY = RULE_SEVERITY_STRINGS.reduce((map, value, index) => {
-        map[value] = index;
-        return map;
-    }, {}),
-    VALID_SEVERITIES = [0, 1, 2, "off", "warn", "error"];
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = {
-
-    /**
-     * Creates an empty configuration object suitable for merging as a base.
-     * @returns {Object} A configuration object.
-     */
-    createEmptyConfig() {
-        return {
-            globals: {},
-            env: {},
-            rules: {},
-            parserOptions: {}
-        };
-    },
-
-    /**
-     * Creates an environment config based on the specified environments.
-     * @param {Object} env The environment settings.
-     * @param {Environments} envContext The environment context.
-     * @returns {Object} A configuration object with the appropriate rules and globals
-     *      set.
-     */
-    createEnvironmentConfig(env, envContext) {
-
-        const envConfig = this.createEmptyConfig();
-
-        if (env) {
-
-            envConfig.env = env;
-
-            Object.keys(env).filter(name => env[name]).forEach(name => {
-                const environment = envContext.get(name);
-
-                if (environment) {
-                    debug(`Creating config for environment ${name}`);
-                    if (environment.globals) {
-                        Object.assign(envConfig.globals, environment.globals);
-                    }
-
-                    if (environment.parserOptions) {
-                        Object.assign(envConfig.parserOptions, environment.parserOptions);
-                    }
-                }
-            });
-        }
-
-        return envConfig;
-    },
-
-    /**
-     * Given a config with environment settings, applies the globals and
-     * ecmaFeatures to the configuration and returns the result.
-     * @param {Object} config The configuration information.
-     * @param {Environments} envContent env context.
-     * @returns {Object} The updated configuration information.
-     */
-    applyEnvironments(config, envContent) {
-        if (config.env && typeof config.env === "object") {
-            debug("Apply environment settings to config");
-            return this.merge(this.createEnvironmentConfig(config.env, envContent), config);
-        }
-
-        return config;
-    },
-
-    /**
-     * Merges two config objects. This will not only add missing keys, but will also modify values to match.
-     * @param {Object} target config object
-     * @param {Object} src config object. Overrides in this config object will take priority over base.
-     * @param {boolean} [combine] Whether to combine arrays or not
-     * @param {boolean} [isRule] Whether its a rule
-     * @returns {Object} merged config object.
-     */
-    merge: function deepmerge(target, src, combine, isRule) {
-
-        /*
-         * The MIT License (MIT)
-         *
-         * Copyright (c) 2012 Nicholas Fisher
-         *
-         * 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.
-         */
-
-        /*
-         * This code is taken from deepmerge repo
-         * (https://github.com/KyleAMathews/deepmerge)
-         * and modified to meet our needs.
-         */
-        const array = Array.isArray(src) || Array.isArray(target);
-        let dst = array && [] || {};
-
-        if (array) {
-            const resolvedTarget = target || [];
-
-            // src could be a string, so check for array
-            if (isRule && Array.isArray(src) && src.length > 1) {
-                dst = dst.concat(src);
-            } else {
-                dst = dst.concat(resolvedTarget);
-            }
-            const resolvedSrc = typeof src === "object" ? src : [src];
-
-            Object.keys(resolvedSrc).forEach((_, i) => {
-                const e = resolvedSrc[i];
-
-                if (typeof dst[i] === "undefined") {
-                    dst[i] = e;
-                } else if (typeof e === "object") {
-                    if (isRule) {
-                        dst[i] = e;
-                    } else {
-                        dst[i] = deepmerge(resolvedTarget[i], e, combine, isRule);
-                    }
-                } else {
-                    if (!combine) {
-                        dst[i] = e;
-                    } else {
-                        if (dst.indexOf(e) === -1) {
-                            dst.push(e);
-                        }
-                    }
-                }
-            });
-        } else {
-            if (target && typeof target === "object") {
-                Object.keys(target).forEach(key => {
-                    dst[key] = target[key];
-                });
-            }
-            Object.keys(src).forEach(key => {
-                if (key === "overrides") {
-                    dst[key] = (target[key] || []).concat(src[key] || []);
-                } else if (Array.isArray(src[key]) || Array.isArray(target[key])) {
-                    dst[key] = deepmerge(target[key], src[key], key === "plugins" || key === "extends", isRule);
-                } else if (typeof src[key] !== "object" || !src[key] || key === "exported" || key === "astGlobals") {
-                    dst[key] = src[key];
-                } else {
-                    dst[key] = deepmerge(target[key] || {}, src[key], combine, key === "rules");
-                }
-            });
-        }
-
-        return dst;
-    },
-
-    /**
-     * Normalizes the severity value of a rule's configuration to a number
-     * @param {(number|string|[number, ...*]|[string, ...*])} ruleConfig A rule's configuration value, generally
-     * received from the user. A valid config value is either 0, 1, 2, the string "off" (treated the same as 0),
-     * the string "warn" (treated the same as 1), the string "error" (treated the same as 2), or an array
-     * whose first element is one of the above values. Strings are matched case-insensitively.
-     * @returns {(0|1|2)} The numeric severity value if the config value was valid, otherwise 0.
-     */
-    getRuleSeverity(ruleConfig) {
-        const severityValue = Array.isArray(ruleConfig) ? ruleConfig[0] : ruleConfig;
-
-        if (severityValue === 0 || severityValue === 1 || severityValue === 2) {
-            return severityValue;
-        }
-
-        if (typeof severityValue === "string") {
-            return RULE_SEVERITY[severityValue.toLowerCase()] || 0;
-        }
-
-        return 0;
-    },
-
-    /**
-     * Converts old-style severity settings (0, 1, 2) into new-style
-     * severity settings (off, warn, error) for all rules. Assumption is that severity
-     * values have already been validated as correct.
-     * @param {Object} config The config object to normalize.
-     * @returns {void}
-     */
-    normalizeToStrings(config) {
-
-        if (config.rules) {
-            Object.keys(config.rules).forEach(ruleId => {
-                const ruleConfig = config.rules[ruleId];
-
-                if (typeof ruleConfig === "number") {
-                    config.rules[ruleId] = RULE_SEVERITY_STRINGS[ruleConfig] || RULE_SEVERITY_STRINGS[0];
-                } else if (Array.isArray(ruleConfig) && typeof ruleConfig[0] === "number") {
-                    ruleConfig[0] = RULE_SEVERITY_STRINGS[ruleConfig[0]] || RULE_SEVERITY_STRINGS[0];
-                }
-            });
-        }
-    },
-
-    /**
-     * Determines if the severity for the given rule configuration represents an error.
-     * @param {int|string|Array} ruleConfig The configuration for an individual rule.
-     * @returns {boolean} True if the rule represents an error, false if not.
-     */
-    isErrorSeverity(ruleConfig) {
-
-        let severity = Array.isArray(ruleConfig) ? ruleConfig[0] : ruleConfig;
-
-        if (typeof severity === "string") {
-            severity = RULE_SEVERITY[severity.toLowerCase()] || 0;
-        }
-
-        return (typeof severity === "number" && severity === 2);
-    },
-
-    /**
-     * Checks whether a given config has valid severity or not.
-     * @param {number|string|Array} ruleConfig - The configuration for an individual rule.
-     * @returns {boolean} `true` if the configuration has valid severity.
-     */
-    isValidSeverity(ruleConfig) {
-        let severity = Array.isArray(ruleConfig) ? ruleConfig[0] : ruleConfig;
-
-        if (typeof severity === "string") {
-            severity = severity.toLowerCase();
-        }
-        return VALID_SEVERITIES.indexOf(severity) !== -1;
-    },
-
-    /**
-     * Checks whether every rule of a given config has valid severity or not.
-     * @param {Object} config - The configuration for rules.
-     * @returns {boolean} `true` if the configuration has valid severity.
-     */
-    isEverySeverityValid(config) {
-        return Object.keys(config).every(ruleId => this.isValidSeverity(config[ruleId]));
-    },
-
-    /**
-     * Merges all configurations in a given config vector. A vector is an array of objects, each containing a config
-     * file path and a list of subconfig indices that match the current file path. All config data is assumed to be
-     * cached.
-     * @param {Array} vector list of config files and their subconfig indices that match the current file path
-     * @param {Object} configCache the config cache
-     * @returns {Object} config object
-     */
-    getConfigFromVector(vector, configCache) {
-
-        const cachedConfig = configCache.getMergedVectorConfig(vector);
-
-        if (cachedConfig) {
-            return cachedConfig;
-        }
-
-        debug("Using config from partial cache");
-
-        const subvector = Array.from(vector);
-        let nearestCacheIndex = subvector.length - 1,
-            partialCachedConfig;
-
-        while (nearestCacheIndex >= 0) {
-            partialCachedConfig = configCache.getMergedVectorConfig(subvector);
-            if (partialCachedConfig) {
-                break;
-            }
-            subvector.pop();
-            nearestCacheIndex--;
-        }
-
-        if (!partialCachedConfig) {
-            partialCachedConfig = {};
-        }
-
-        let finalConfig = partialCachedConfig;
-
-        // Start from entry immediately following nearest cached config (first uncached entry)
-        for (let i = nearestCacheIndex + 1; i < vector.length; i++) {
-            finalConfig = this.mergeVectorEntry(finalConfig, vector[i], configCache);
-            configCache.setMergedVectorConfig(vector.slice(0, i + 1), finalConfig);
-        }
-
-        return finalConfig;
-    },
-
-    /**
-     * Merges the config options from a single vector entry into the supplied config.
-     * @param {Object} config the base config to merge the vector entry's options into
-     * @param {Object} vectorEntry a single entry from a vector, consisting of a config file path and an array of
-     * matching override indices
-     * @param {Object} configCache the config cache
-     * @returns {Object} merged config object
-     */
-    mergeVectorEntry(config, vectorEntry, configCache) {
-        const vectorEntryConfig = Object.assign({}, configCache.getConfig(vectorEntry.filePath));
-        let mergedConfig = Object.assign({}, config),
-            overrides;
-
-        if (vectorEntryConfig.overrides) {
-            overrides = vectorEntryConfig.overrides.filter(
-                (override, overrideIndex) => vectorEntry.matchingOverrides.indexOf(overrideIndex) !== -1
-            );
-        } else {
-            overrides = [];
-        }
-
-        mergedConfig = this.merge(mergedConfig, vectorEntryConfig);
-
-        delete mergedConfig.overrides;
-
-        mergedConfig = overrides.reduce((lastConfig, override) => this.merge(lastConfig, override), mergedConfig);
-
-        if (mergedConfig.filePath) {
-            delete mergedConfig.filePath;
-            delete mergedConfig.baseDirectory;
-        } else if (mergedConfig.files) {
-            delete mergedConfig.files;
-        }
-
-        return mergedConfig;
-    },
-
-    /**
-     * Checks that the specified file path matches all of the supplied glob patterns.
-     * @param {string} filePath The file path to test patterns against
-     * @param {string|string[]} patterns One or more glob patterns, of which at least one should match the file path
-     * @param {string|string[]} [excludedPatterns] One or more glob patterns, of which none should match the file path
-     * @returns {boolean} True if all the supplied patterns match the file path, false otherwise
-     */
-    pathMatchesGlobs(filePath, patterns, excludedPatterns) {
-        const patternList = [].concat(patterns);
-        const excludedPatternList = [].concat(excludedPatterns || []);
-
-        patternList.concat(excludedPatternList).forEach(pattern => {
-            if (path.isAbsolute(pattern) || pattern.includes("..")) {
-                throw new Error(`Invalid override pattern (expected relative path not containing '..'): ${pattern}`);
-            }
-        });
-
-        const opts = { matchBase: true };
-
-        return patternList.some(pattern => minimatch(filePath, pattern, opts)) &&
-            !excludedPatternList.some(excludedPattern => minimatch(filePath, excludedPattern, opts));
-    }
-};
diff --git a/node_modules/eslint/lib/config/config-rule.js b/node_modules/eslint/lib/config/config-rule.js
deleted file mode 100644
index 27d2944..0000000
--- a/node_modules/eslint/lib/config/config-rule.js
+++ /dev/null
@@ -1,321 +0,0 @@
-/**
- * @fileoverview Create configurations for a rule
- * @author Ian VanSchooten
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const Rules = require("../rules"),
-    loadRules = require("../load-rules");
-
-const rules = new Rules();
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Wrap all of the elements of an array into arrays.
- * @param   {*[]}     xs Any array.
- * @returns {Array[]}    An array of arrays.
- */
-function explodeArray(xs) {
-    return xs.reduce((accumulator, x) => {
-        accumulator.push([x]);
-        return accumulator;
-    }, []);
-}
-
-/**
- * Mix two arrays such that each element of the second array is concatenated
- * onto each element of the first array.
- *
- * For example:
- * combineArrays([a, [b, c]], [x, y]); // -> [[a, x], [a, y], [b, c, x], [b, c, y]]
- *
- * @param   {array} arr1 The first array to combine.
- * @param   {array} arr2 The second array to combine.
- * @returns {array}      A mixture of the elements of the first and second arrays.
- */
-function combineArrays(arr1, arr2) {
-    const res = [];
-
-    if (arr1.length === 0) {
-        return explodeArray(arr2);
-    }
-    if (arr2.length === 0) {
-        return explodeArray(arr1);
-    }
-    arr1.forEach(x1 => {
-        arr2.forEach(x2 => {
-            res.push([].concat(x1, x2));
-        });
-    });
-    return res;
-}
-
-/**
- * Group together valid rule configurations based on object properties
- *
- * e.g.:
- * groupByProperty([
- *     {before: true},
- *     {before: false},
- *     {after: true},
- *     {after: false}
- * ]);
- *
- * will return:
- * [
- *     [{before: true}, {before: false}],
- *     [{after: true}, {after: false}]
- * ]
- *
- * @param   {Object[]} objects Array of objects, each with one property/value pair
- * @returns {Array[]}          Array of arrays of objects grouped by property
- */
-function groupByProperty(objects) {
-    const groupedObj = objects.reduce((accumulator, obj) => {
-        const prop = Object.keys(obj)[0];
-
-        accumulator[prop] = accumulator[prop] ? accumulator[prop].concat(obj) : [obj];
-        return accumulator;
-    }, {});
-
-    return Object.keys(groupedObj).map(prop => groupedObj[prop]);
-}
-
-
-//------------------------------------------------------------------------------
-// Private
-//------------------------------------------------------------------------------
-
-/**
- * Configuration settings for a rule.
- *
- * A configuration can be a single number (severity), or an array where the first
- * element in the array is the severity, and is the only required element.
- * Configs may also have one or more additional elements to specify rule
- * configuration or options.
- *
- * @typedef {array|number} ruleConfig
- * @param {number}  0  The rule's severity (0, 1, 2).
- */
-
-/**
- * Object whose keys are rule names and values are arrays of valid ruleConfig items
- * which should be linted against the target source code to determine error counts.
- * (a ruleConfigSet.ruleConfigs).
- *
- * e.g. rulesConfig = {
- *     "comma-dangle": [2, [2, "always"], [2, "always-multiline"], [2, "never"]],
- *     "no-console": [2]
- * }
- * @typedef rulesConfig
- */
-
-
-/**
- * Create valid rule configurations by combining two arrays,
- * with each array containing multiple objects each with a
- * single property/value pair and matching properties.
- *
- * e.g.:
- * combinePropertyObjects(
- *     [{before: true}, {before: false}],
- *     [{after: true}, {after: false}]
- * );
- *
- * will return:
- * [
- *     {before: true, after: true},
- *     {before: true, after: false},
- *     {before: false, after: true},
- *     {before: false, after: false}
- * ]
- *
- * @param   {Object[]} objArr1 Single key/value objects, all with the same key
- * @param   {Object[]} objArr2 Single key/value objects, all with another key
- * @returns {Object[]}         Combined objects for each combination of input properties and values
- */
-function combinePropertyObjects(objArr1, objArr2) {
-    const res = [];
-
-    if (objArr1.length === 0) {
-        return objArr2;
-    }
-    if (objArr2.length === 0) {
-        return objArr1;
-    }
-    objArr1.forEach(obj1 => {
-        objArr2.forEach(obj2 => {
-            const combinedObj = {};
-            const obj1Props = Object.keys(obj1);
-            const obj2Props = Object.keys(obj2);
-
-            obj1Props.forEach(prop1 => {
-                combinedObj[prop1] = obj1[prop1];
-            });
-            obj2Props.forEach(prop2 => {
-                combinedObj[prop2] = obj2[prop2];
-            });
-            res.push(combinedObj);
-        });
-    });
-    return res;
-}
-
-/**
- * Creates a new instance of a rule configuration set
- *
- * A rule configuration set is an array of configurations that are valid for a
- * given rule.  For example, the configuration set for the "semi" rule could be:
- *
- * ruleConfigSet.ruleConfigs // -> [[2], [2, "always"], [2, "never"]]
- *
- * Rule configuration set class
- */
-class RuleConfigSet {
-
-    /**
-     * @param {ruleConfig[]} configs Valid rule configurations
-     */
-    constructor(configs) {
-
-        /**
-         * Stored valid rule configurations for this instance
-         * @type {array}
-         */
-        this.ruleConfigs = configs || [];
-    }
-
-    /**
-     * Add a severity level to the front of all configs in the instance.
-     * This should only be called after all configs have been added to the instance.
-     *
-     * @returns {void}
-     */
-    addErrorSeverity() {
-        const severity = 2;
-
-        this.ruleConfigs = this.ruleConfigs.map(config => {
-            config.unshift(severity);
-            return config;
-        });
-
-        // Add a single config at the beginning consisting of only the severity
-        this.ruleConfigs.unshift(severity);
-    }
-
-    /**
-     * Add rule configs from an array of strings (schema enums)
-     * @param  {string[]} enums Array of valid rule options (e.g. ["always", "never"])
-     * @returns {void}
-     */
-    addEnums(enums) {
-        this.ruleConfigs = this.ruleConfigs.concat(combineArrays(this.ruleConfigs, enums));
-    }
-
-    /**
-     * Add rule configurations from a schema object
-     * @param  {Object} obj Schema item with type === "object"
-     * @returns {boolean} true if at least one schema for the object could be generated, false otherwise
-     */
-    addObject(obj) {
-        const objectConfigSet = {
-            objectConfigs: [],
-            add(property, values) {
-                for (let idx = 0; idx < values.length; idx++) {
-                    const optionObj = {};
-
-                    optionObj[property] = values[idx];
-                    this.objectConfigs.push(optionObj);
-                }
-            },
-
-            combine() {
-                this.objectConfigs = groupByProperty(this.objectConfigs).reduce((accumulator, objArr) => combinePropertyObjects(accumulator, objArr), []);
-            }
-        };
-
-        /*
-         * The object schema could have multiple independent properties.
-         * If any contain enums or booleans, they can be added and then combined
-         */
-        Object.keys(obj.properties).forEach(prop => {
-            if (obj.properties[prop].enum) {
-                objectConfigSet.add(prop, obj.properties[prop].enum);
-            }
-            if (obj.properties[prop].type && obj.properties[prop].type === "boolean") {
-                objectConfigSet.add(prop, [true, false]);
-            }
-        });
-        objectConfigSet.combine();
-
-        if (objectConfigSet.objectConfigs.length > 0) {
-            this.ruleConfigs = this.ruleConfigs.concat(combineArrays(this.ruleConfigs, objectConfigSet.objectConfigs));
-            return true;
-        }
-
-        return false;
-    }
-}
-
-/**
- * Generate valid rule configurations based on a schema object
- * @param   {Object} schema  A rule's schema object
- * @returns {array[]}        Valid rule configurations
- */
-function generateConfigsFromSchema(schema) {
-    const configSet = new RuleConfigSet();
-
-    if (Array.isArray(schema)) {
-        for (const opt of schema) {
-            if (opt.enum) {
-                configSet.addEnums(opt.enum);
-            } else if (opt.type && opt.type === "object") {
-                if (!configSet.addObject(opt)) {
-                    break;
-                }
-
-            // TODO (IanVS): support oneOf
-            } else {
-
-                // If we don't know how to fill in this option, don't fill in any of the following options.
-                break;
-            }
-        }
-    }
-    configSet.addErrorSeverity();
-    return configSet.ruleConfigs;
-}
-
-/**
- * Generate possible rule configurations for all of the core rules
- * @returns {rulesConfig} Hash of rule names and arrays of possible configurations
- */
-function createCoreRuleConfigs() {
-    const ruleList = loadRules();
-
-    return Object.keys(ruleList).reduce((accumulator, id) => {
-        const rule = rules.get(id);
-        const schema = (typeof rule === "function") ? rule.schema : rule.meta.schema;
-
-        accumulator[id] = generateConfigsFromSchema(schema);
-        return accumulator;
-    }, {});
-}
-
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = {
-    generateConfigsFromSchema,
-    createCoreRuleConfigs
-};
diff --git a/node_modules/eslint/lib/config/config-validator.js b/node_modules/eslint/lib/config/config-validator.js
deleted file mode 100644
index 1a5b3ef..0000000
--- a/node_modules/eslint/lib/config/config-validator.js
+++ /dev/null
@@ -1,251 +0,0 @@
-/**
- * @fileoverview Validates configs.
- * @author Brandon Mills
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const ajv = require("../util/ajv"),
-    lodash = require("lodash"),
-    configSchema = require("../../conf/config-schema.js"),
-    util = require("util");
-
-const ruleValidators = new WeakMap();
-
-//------------------------------------------------------------------------------
-// Private
-//------------------------------------------------------------------------------
-let validateSchema;
-
-/**
- * Gets a complete options schema for a rule.
- * @param {{create: Function, schema: (Array|null)}} rule A new-style rule object
- * @returns {Object} JSON Schema for the rule's options.
- */
-function getRuleOptionsSchema(rule) {
-    const schema = rule.schema || rule.meta && rule.meta.schema;
-
-    // Given a tuple of schemas, insert warning level at the beginning
-    if (Array.isArray(schema)) {
-        if (schema.length) {
-            return {
-                type: "array",
-                items: schema,
-                minItems: 0,
-                maxItems: schema.length
-            };
-        }
-        return {
-            type: "array",
-            minItems: 0,
-            maxItems: 0
-        };
-
-    }
-
-    // Given a full schema, leave it alone
-    return schema || null;
-}
-
-/**
- * Validates a rule's severity and returns the severity value. Throws an error if the severity is invalid.
- * @param {options} options The given options for the rule.
- * @returns {number|string} The rule's severity value
- */
-function validateRuleSeverity(options) {
-    const severity = Array.isArray(options) ? options[0] : options;
-
-    if (severity !== 0 && severity !== 1 && severity !== 2 && !(typeof severity === "string" && /^(?:off|warn|error)$/i.test(severity))) {
-        throw new Error(`\tSeverity should be one of the following: 0 = off, 1 = warn, 2 = error (you passed '${util.inspect(severity).replace(/'/g, "\"").replace(/\n/g, "")}').\n`);
-    }
-
-    return severity;
-}
-
-/**
- * Validates the non-severity options passed to a rule, based on its schema.
- * @param {{create: Function}} rule The rule to validate
- * @param {array} localOptions The options for the rule, excluding severity
- * @returns {void}
- */
-function validateRuleSchema(rule, localOptions) {
-    if (!ruleValidators.has(rule)) {
-        const schema = getRuleOptionsSchema(rule);
-
-        if (schema) {
-            ruleValidators.set(rule, ajv.compile(schema));
-        }
-    }
-
-    const validateRule = ruleValidators.get(rule);
-
-    if (validateRule) {
-        validateRule(localOptions);
-        if (validateRule.errors) {
-            throw new Error(validateRule.errors.map(
-                error => `\tValue ${JSON.stringify(error.data)} ${error.message}.\n`
-            ).join(""));
-        }
-    }
-}
-
-/**
- * Validates a rule's options against its schema.
- * @param {{create: Function}|null} rule The rule that the config is being validated for
- * @param {string} ruleId The rule's unique name.
- * @param {array|number} options The given options for the rule.
- * @param {string|null} source The name of the configuration source to report in any errors. If null or undefined,
- * no source is prepended to the message.
- * @returns {void}
- */
-function validateRuleOptions(rule, ruleId, options, source) {
-    if (!rule) {
-        return;
-    }
-    try {
-        const severity = validateRuleSeverity(options);
-
-        if (severity !== 0 && !(typeof severity === "string" && severity.toLowerCase() === "off")) {
-            validateRuleSchema(rule, Array.isArray(options) ? options.slice(1) : []);
-        }
-    } catch (err) {
-        const enhancedMessage = `Configuration for rule "${ruleId}" is invalid:\n${err.message}`;
-
-        if (typeof source === "string") {
-            throw new Error(`${source}:\n\t${enhancedMessage}`);
-        } else {
-            throw new Error(enhancedMessage);
-        }
-    }
-}
-
-/**
- * Validates an environment object
- * @param {Object} environment The environment config object to validate.
- * @param {string} source The name of the configuration source to report in any errors.
- * @param {Environments} envContext Env context
- * @returns {void}
- */
-function validateEnvironment(environment, source, envContext) {
-
-    // not having an environment is ok
-    if (!environment) {
-        return;
-    }
-
-    Object.keys(environment).forEach(env => {
-        if (!envContext.get(env)) {
-            const message = `${source}:\n\tEnvironment key "${env}" is unknown\n`;
-
-            throw new Error(message);
-        }
-    });
-}
-
-/**
- * Validates a rules config object
- * @param {Object} rulesConfig The rules config object to validate.
- * @param {string} source The name of the configuration source to report in any errors.
- * @param {function(string): {create: Function}} ruleMapper A mapper function from strings to loaded rules
- * @returns {void}
- */
-function validateRules(rulesConfig, source, ruleMapper) {
-    if (!rulesConfig) {
-        return;
-    }
-
-    Object.keys(rulesConfig).forEach(id => {
-        validateRuleOptions(ruleMapper(id), id, rulesConfig[id], source);
-    });
-}
-
-/**
- * Formats an array of schema validation errors.
- * @param {Array} errors An array of error messages to format.
- * @returns {string} Formatted error message
- */
-function formatErrors(errors) {
-    return errors.map(error => {
-        if (error.keyword === "additionalProperties") {
-            const formattedPropertyPath = error.dataPath.length ? `${error.dataPath.slice(1)}.${error.params.additionalProperty}` : error.params.additionalProperty;
-
-            return `Unexpected top-level property "${formattedPropertyPath}"`;
-        }
-        if (error.keyword === "type") {
-            const formattedField = error.dataPath.slice(1);
-            const formattedExpectedType = Array.isArray(error.schema) ? error.schema.join("/") : error.schema;
-            const formattedValue = JSON.stringify(error.data);
-
-            return `Property "${formattedField}" is the wrong type (expected ${formattedExpectedType} but got \`${formattedValue}\`)`;
-        }
-
-        const field = error.dataPath[0] === "." ? error.dataPath.slice(1) : error.dataPath;
-
-        return `"${field}" ${error.message}. Value: ${JSON.stringify(error.data)}`;
-    }).map(message => `\t- ${message}.\n`).join("");
-}
-
-/**
- * Emits a deprecation warning containing a given filepath. A new deprecation warning is emitted
- * for each unique file path, but repeated invocations with the same file path have no effect.
- * No warnings are emitted if the `--no-deprecation` or `--no-warnings` Node runtime flags are active.
- * @param {string} source The name of the configuration source to report the warning for.
- * @returns {void}
- */
-const emitEcmaFeaturesWarning = lodash.memoize(source => {
-
-    /*
-     * util.deprecate seems to be the only way to emit a warning in Node 4.x while respecting the --no-warnings flag.
-     * (In Node 6+, process.emitWarning could be used instead.)
-     */
-    util.deprecate(
-        () => {},
-        `[eslint] The 'ecmaFeatures' config file property is deprecated, and has no effect. (found in ${source})`
-    )();
-});
-
-/**
- * Validates the top level properties of the config object.
- * @param {Object} config The config object to validate.
- * @param {string} source The name of the configuration source to report in any errors.
- * @returns {void}
- */
-function validateConfigSchema(config, source) {
-    validateSchema = validateSchema || ajv.compile(configSchema);
-
-    if (!validateSchema(config)) {
-        throw new Error(`ESLint configuration in ${source} is invalid:\n${formatErrors(validateSchema.errors)}`);
-    }
-
-    if (Object.prototype.hasOwnProperty.call(config, "ecmaFeatures")) {
-        emitEcmaFeaturesWarning(source);
-    }
-}
-
-/**
- * Validates an entire config object.
- * @param {Object} config The config object to validate.
- * @param {string} source The name of the configuration source to report in any errors.
- * @param {function(string): {create: Function}} ruleMapper A mapper function from rule IDs to defined rules
- * @param {Environments} envContext The env context
- * @returns {void}
- */
-function validate(config, source, ruleMapper, envContext) {
-    validateConfigSchema(config, source);
-    validateRules(config.rules, source, ruleMapper);
-    validateEnvironment(config.env, source, envContext);
-}
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = {
-    getRuleOptionsSchema,
-    validate,
-    validateRuleOptions
-};
diff --git a/node_modules/eslint/lib/config/environments.js b/node_modules/eslint/lib/config/environments.js
deleted file mode 100644
index 1ec9438..0000000
--- a/node_modules/eslint/lib/config/environments.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * @fileoverview Environments manager
- * @author Nicholas C. Zakas
- */
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const envs = require("../../conf/environments");
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-class Environments {
-
-    /**
-     * create env context
-     */
-    constructor() {
-        this._environments = new Map();
-
-        this.load();
-    }
-
-    /**
-     * Loads the default environments.
-     * @returns {void}
-     * @private
-     */
-    load() {
-        Object.keys(envs).forEach(envName => {
-            this._environments.set(envName, envs[envName]);
-        });
-    }
-
-    /**
-     * Gets the environment with the given name.
-     * @param {string} name The name of the environment to retrieve.
-     * @returns {Object?} The environment object or null if not found.
-     */
-    get(name) {
-        return this._environments.get(name) || null;
-    }
-
-    /**
-     * Gets all the environment present
-     * @returns {Object} The environment object for each env name
-     */
-    getAll() {
-        return Array.from(this._environments).reduce((coll, env) => {
-            coll[env[0]] = env[1];
-            return coll;
-        }, {});
-    }
-
-    /**
-     * Defines an environment.
-     * @param {string} name The name of the environment.
-     * @param {Object} env The environment settings.
-     * @returns {void}
-     */
-    define(name, env) {
-        this._environments.set(name, env);
-    }
-
-    /**
-     * Imports all environments from a plugin.
-     * @param {Object} plugin The plugin object.
-     * @param {string} pluginName The name of the plugin.
-     * @returns {void}
-     */
-    importPlugin(plugin, pluginName) {
-        if (plugin.environments) {
-            Object.keys(plugin.environments).forEach(envName => {
-                this.define(`${pluginName}/${envName}`, plugin.environments[envName]);
-            });
-        }
-    }
-}
-
-module.exports = Environments;
diff --git a/node_modules/eslint/lib/config/plugins.js b/node_modules/eslint/lib/config/plugins.js
deleted file mode 100644
index 756f9ff..0000000
--- a/node_modules/eslint/lib/config/plugins.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/**
- * @fileoverview Plugins manager
- * @author Nicholas C. Zakas
- */
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const debug = require("debug")("eslint:plugins");
-const naming = require("../util/naming");
-
-//------------------------------------------------------------------------------
-// Private
-//------------------------------------------------------------------------------
-
-const PLUGIN_NAME_PREFIX = "eslint-plugin-";
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-/**
- * Plugin class
- */
-class Plugins {
-
-    /**
-     * Creates the plugins context
-     * @param {Environments} envContext - env context
-     * @param {Rules} rulesContext - rules context
-     */
-    constructor(envContext, rulesContext) {
-        this._plugins = Object.create(null);
-        this._environments = envContext;
-        this._rules = rulesContext;
-    }
-
-    /**
-     * Defines a plugin with a given name rather than loading from disk.
-     * @param {string} pluginName The name of the plugin to load.
-     * @param {Object} plugin The plugin object.
-     * @returns {void}
-     */
-    define(pluginName, plugin) {
-        const pluginNamespace = naming.getNamespaceFromTerm(pluginName),
-            pluginNameWithoutNamespace = naming.removeNamespaceFromTerm(pluginName),
-            pluginNameWithoutPrefix = naming.removePrefixFromTerm(PLUGIN_NAME_PREFIX, pluginNameWithoutNamespace),
-            shortName = pluginNamespace + pluginNameWithoutPrefix;
-
-        // load up environments and rules
-        this._plugins[shortName] = plugin;
-        this._environments.importPlugin(plugin, shortName);
-        this._rules.importPlugin(plugin, shortName);
-    }
-
-    /**
-     * Gets a plugin with the given name.
-     * @param {string} pluginName The name of the plugin to retrieve.
-     * @returns {Object} The plugin or null if not loaded.
-     */
-    get(pluginName) {
-        return this._plugins[pluginName] || null;
-    }
-
-    /**
-     * Returns all plugins that are loaded.
-     * @returns {Object} The plugins cache.
-     */
-    getAll() {
-        return this._plugins;
-    }
-
-    /**
-     * Loads a plugin with the given name.
-     * @param {string} pluginName The name of the plugin to load.
-     * @returns {void}
-     * @throws {Error} If the plugin cannot be loaded.
-     */
-    load(pluginName) {
-        const pluginNamespace = naming.getNamespaceFromTerm(pluginName),
-            pluginNameWithoutNamespace = naming.removeNamespaceFromTerm(pluginName),
-            pluginNameWithoutPrefix = naming.removePrefixFromTerm(PLUGIN_NAME_PREFIX, pluginNameWithoutNamespace),
-            shortName = pluginNamespace + pluginNameWithoutPrefix,
-            longName = pluginNamespace + PLUGIN_NAME_PREFIX + pluginNameWithoutPrefix;
-        let plugin = null;
-
-        if (pluginName.match(/\s+/)) {
-            const whitespaceError = new Error(`Whitespace found in plugin name '${pluginName}'`);
-
-            whitespaceError.messageTemplate = "whitespace-found";
-            whitespaceError.messageData = {
-                pluginName: longName
-            };
-            throw whitespaceError;
-        }
-
-        if (!this._plugins[shortName]) {
-            try {
-                plugin = require(longName);
-            } catch (pluginLoadErr) {
-                try {
-
-                    // Check whether the plugin exists
-                    require.resolve(longName);
-                } catch (missingPluginErr) {
-
-                    // If the plugin can't be resolved, display the missing plugin error (usually a config or install error)
-                    debug(`Failed to load plugin ${longName}.`);
-                    missingPluginErr.message = `Failed to load plugin ${pluginName}: ${missingPluginErr.message}`;
-                    missingPluginErr.messageTemplate = "plugin-missing";
-                    missingPluginErr.messageData = {
-                        pluginName: longName
-                    };
-                    throw missingPluginErr;
-                }
-
-                // Otherwise, the plugin exists and is throwing on module load for some reason, so print the stack trace.
-                throw pluginLoadErr;
-            }
-
-            // This step is costly, so skip if debug is disabled
-            if (debug.enabled) {
-                const resolvedPath = require.resolve(longName);
-
-                let version = null;
-
-                try {
-                    version = require(`${longName}/package.json`).version;
-                } catch (e) {
-
-                    // Do nothing
-                }
-
-                const loadedPluginAndVersion = version
-                    ? `${longName}@${version}`
-                    : `${longName}, version unknown`;
-
-                debug(`Loaded plugin ${pluginName} (${loadedPluginAndVersion}) (from ${resolvedPath})`);
-            }
-
-            this.define(pluginName, plugin);
-        }
-    }
-
-    /**
-     * Loads all plugins from an array.
-     * @param {string[]} pluginNames An array of plugins names.
-     * @returns {void}
-     * @throws {Error} If a plugin cannot be loaded.
-     * @throws {Error} If "plugins" in config is not an array
-     */
-    loadAll(pluginNames) {
-
-        // if "plugins" in config is not an array, throw an error so user can fix their config.
-        if (!Array.isArray(pluginNames)) {
-            const pluginNotArrayMessage = "ESLint configuration error: \"plugins\" value must be an array";
-
-            debug(`${pluginNotArrayMessage}: ${JSON.stringify(pluginNames)}`);
-
-            throw new Error(pluginNotArrayMessage);
-        }
-
-        // load each plugin by name
-        pluginNames.forEach(this.load, this);
-    }
-}
-
-module.exports = Plugins;
diff --git a/node_modules/eslint/lib/file-finder.js b/node_modules/eslint/lib/file-finder.js
deleted file mode 100644
index 11091a9..0000000
--- a/node_modules/eslint/lib/file-finder.js
+++ /dev/null
@@ -1,144 +0,0 @@
-/**
- * @fileoverview Util class to find config files.
- * @author Aliaksei Shytkin
- */
-
-"use strict";
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-const fs = require("fs"),
-    path = require("path");
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Get the entries for a directory. Including a try-catch may be detrimental to
- * function performance, so move it out here a separate function.
- * @param {string} directory The directory to search in.
- * @returns {string[]} The entries in the directory or an empty array on error.
- * @private
- */
-function getDirectoryEntries(directory) {
-    try {
-
-        return fs.readdirSync(directory);
-    } catch (ex) {
-        return [];
-    }
-}
-
-/**
- * Create a hash of filenames from a directory listing
- * @param {string[]} entries Array of directory entries.
- * @param {string} directory Path to a current directory.
- * @param {string[]} supportedConfigs List of support filenames.
- * @returns {Object} Hashmap of filenames
- */
-function normalizeDirectoryEntries(entries, directory, supportedConfigs) {
-    const fileHash = {};
-
-    entries.forEach(entry => {
-        if (supportedConfigs.indexOf(entry) >= 0) {
-            const resolvedEntry = path.resolve(directory, entry);
-
-            if (fs.statSync(resolvedEntry).isFile()) {
-                fileHash[entry] = resolvedEntry;
-            }
-        }
-    });
-    return fileHash;
-}
-
-//------------------------------------------------------------------------------
-// API
-//------------------------------------------------------------------------------
-
-/**
- * FileFinder class
- */
-class FileFinder {
-
-    /**
-     * @param {string[]} files The basename(s) of the file(s) to find.
-     * @param {stirng} cwd Current working directory
-     */
-    constructor(files, cwd) {
-        this.fileNames = Array.isArray(files) ? files : [files];
-        this.cwd = cwd || process.cwd();
-        this.cache = {};
-    }
-
-    /**
-     * Find all instances of files with the specified file names, in directory and
-     * parent directories. Cache the results.
-     * Does not check if a matching directory entry is a file.
-     * Searches for all the file names in this.fileNames.
-     * Is currently used by lib/config.js to find .eslintrc and package.json files.
-     * @param  {string} relativeDirectory The directory to start the search from.
-     * @returns {GeneratorFunction} to iterate the file paths found
-     */
-    *findAllInDirectoryAndParents(relativeDirectory) {
-        const cache = this.cache;
-
-        const initialDirectory = relativeDirectory
-            ? path.resolve(this.cwd, relativeDirectory)
-            : this.cwd;
-
-        if (cache.hasOwnProperty(initialDirectory)) {
-            yield* cache[initialDirectory];
-            return; // to avoid doing the normal loop afterwards
-        }
-
-        const dirs = [];
-        const fileNames = this.fileNames;
-        let searched = 0;
-        let directory = initialDirectory;
-
-        do {
-            dirs[searched++] = directory;
-            cache[directory] = [];
-
-            const filesMap = normalizeDirectoryEntries(getDirectoryEntries(directory), directory, fileNames);
-
-            if (Object.keys(filesMap).length) {
-                for (let k = 0; k < fileNames.length; k++) {
-
-                    if (filesMap[fileNames[k]]) {
-                        const filePath = filesMap[fileNames[k]];
-
-                        // Add the file path to the cache of each directory searched.
-                        for (let j = 0; j < searched; j++) {
-                            cache[dirs[j]].push(filePath);
-                        }
-                        yield filePath;
-                        break;
-                    }
-                }
-            }
-
-            const child = directory;
-
-            // Assign parent directory to directory.
-            directory = path.dirname(directory);
-
-            if (directory === child) {
-                return;
-            }
-
-        } while (!cache.hasOwnProperty(directory));
-
-        // Add what has been cached previously to the cache of each directory searched.
-        for (let i = 0; i < searched; i++) {
-            [].push.apply(cache[dirs[i]], cache[directory]);
-        }
-
-        yield* cache[dirs[0]];
-    }
-}
-
-module.exports = FileFinder;
diff --git a/node_modules/eslint/lib/formatters/checkstyle.js b/node_modules/eslint/lib/formatters/checkstyle.js
deleted file mode 100644
index c807871..0000000
--- a/node_modules/eslint/lib/formatters/checkstyle.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * @fileoverview CheckStyle XML reporter
- * @author Ian Christian Myers
- */
-"use strict";
-
-const xmlEscape = require("../util/xml-escape");
-
-//------------------------------------------------------------------------------
-// Helper Functions
-//------------------------------------------------------------------------------
-
-/**
- * Returns the severity of warning or error
- * @param {Object} message message object to examine
- * @returns {string} severity level
- * @private
- */
-function getMessageType(message) {
-    if (message.fatal || message.severity === 2) {
-        return "error";
-    }
-    return "warning";
-
-}
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = function(results) {
-
-    let output = "";
-
-    output += "";
-    output += "";
-
-    results.forEach(result => {
-        const messages = result.messages;
-
-        output += ``;
-
-        messages.forEach(message => {
-            output += [
-                ``
-            ].join(" ");
-        });
-
-        output += "";
-
-    });
-
-    output += "";
-
-    return output;
-};
diff --git a/node_modules/eslint/lib/formatters/codeframe.js b/node_modules/eslint/lib/formatters/codeframe.js
deleted file mode 100644
index 0b97a0d..0000000
--- a/node_modules/eslint/lib/formatters/codeframe.js
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * @fileoverview Codeframe reporter
- * @author Vitor Balocco
- */
-"use strict";
-
-const chalk = require("chalk");
-const codeFrame = require("babel-code-frame");
-const path = require("path");
-
-//------------------------------------------------------------------------------
-// Helpers
-//------------------------------------------------------------------------------
-
-/**
- * Given a word and a count, append an s if count is not one.
- * @param   {string} word  A word in its singular form.
- * @param   {number} count A number controlling whether word should be pluralized.
- * @returns {string}       The original word with an s on the end if count is not one.
- */
-function pluralize(word, count) {
-    return (count === 1 ? word : `${word}s`);
-}
-
-/**
- * Gets a formatted relative file path from an absolute path and a line/column in the file.
- * @param   {string} filePath The absolute file path to format.
- * @param   {number} line     The line from the file to use for formatting.
- * @param   {number} column   The column from the file to use for formatting.
- * @returns {string}          The formatted file path.
- */
-function formatFilePath(filePath, line, column) {
-    let relPath = path.relative(process.cwd(), filePath);
-
-    if (line && column) {
-        relPath += `:${line}:${column}`;
-    }
-
-    return chalk.green(relPath);
-}
-
-/**
- * Gets the formatted output for a given message.
- * @param   {Object} message      The object that represents this message.
- * @param   {Object} parentResult The result object that this message belongs to.
- * @returns {string}              The formatted output.
- */
-function formatMessage(message, parentResult) {
-    const type = (message.fatal || message.severity === 2) ? chalk.red("error") : chalk.yellow("warning");
-    const msg = `${chalk.bold(message.message.replace(/([^ ])\.$/, "$1"))}`;
-    const ruleId = message.fatal ? "" : chalk.dim(`(${message.ruleId})`);
-    const filePath = formatFilePath(parentResult.filePath, message.line, message.column);
-    const sourceCode = parentResult.output ? parentResult.output : parentResult.source;
-
-    const firstLine = [
-        `${type}:`,
-        `${msg}`,
-        ruleId ? `${ruleId}` : "",
-        sourceCode ? `at ${filePath}:` : `at ${filePath}`
-    ].filter(String).join(" ");
-
-    const result = [firstLine];
-
-    if (sourceCode) {
-        result.push(
-            codeFrame(sourceCode, message.line, message.column, { highlightCode: false })
-        );
-    }
-
-    return result.join("\n");
-}
-
-/**
- * Gets the formatted output summary for a given number of errors and warnings.
- * @param   {number} errors   The number of errors.
- * @param   {number} warnings The number of warnings.
- * @param   {number} fixableErrors The number of fixable errors.
- * @param   {number} fixableWarnings The number of fixable warnings.
- * @returns {string}          The formatted output summary.
- */
-function formatSummary(errors, warnings, fixableErrors, fixableWarnings) {
-    const summaryColor = errors > 0 ? "red" : "yellow";
-    const summary = [];
-    const fixablesSummary = [];
-
-    if (errors > 0) {
-        summary.push(`${errors} ${pluralize("error", errors)}`);
-    }
-
-    if (warnings > 0) {
-        summary.push(`${warnings} ${pluralize("warning", warnings)}`);
-    }
-
-    if (fixableErrors > 0) {
-        fixablesSummary.push(`${fixableErrors} ${pluralize("error", fixableErrors)}`);
-    }
-
-    if (fixableWarnings > 0) {
-        fixablesSummary.push(`${fixableWarnings} ${pluralize("warning", fixableWarnings)}`);
-    }
-
-    let output = chalk[summaryColor].bold(`${summary.join(" and ")} found.`);
-
-    if (fixableErrors || fixableWarnings) {
-        output += chalk[summaryColor].bold(`\n${fixablesSummary.join(" and ")} potentially fixable with the \`--fix\` option.`);
-    }
-
-    return output;
-}
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = function(results) {
-    let errors = 0;
-    let warnings = 0;
-    let fixableErrors = 0;
-    let fixableWarnings = 0;
-
-    const resultsWithMessages = results.filter(result => result.messages.length > 0);
-
-    let output = resultsWithMessages.reduce((resultsOutput, result) => {
-        const messages = result.messages.map(message => `${formatMessage(message, result)}\n\n`);
-
-        errors += result.errorCount;
-        warnings += result.warningCount;
-        fixableErrors += result.fixableErrorCount;
-        fixableWarnings += result.fixableWarningCount;
-
-        return resultsOutput.concat(messages);
-    }, []).join("\n");
-
-    output += "\n";
-    output += formatSummary(errors, warnings, fixableErrors, fixableWarnings);
-
-    return (errors + warnings) > 0 ? output : "";
-};
diff --git a/node_modules/eslint/lib/formatters/compact.js b/node_modules/eslint/lib/formatters/compact.js
deleted file mode 100644
index 2b540bd..0000000
--- a/node_modules/eslint/lib/formatters/compact.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * @fileoverview Compact reporter
- * @author Nicholas C. Zakas
- */
-"use strict";
-
-//------------------------------------------------------------------------------
-// Helper Functions
-//------------------------------------------------------------------------------
-
-/**
- * Returns the severity of warning or error
- * @param {Object} message message object to examine
- * @returns {string} severity level
- * @private
- */
-function getMessageType(message) {
-    if (message.fatal || message.severity === 2) {
-        return "Error";
-    }
-    return "Warning";
-
-}
-
-
-//------------------------------------------------------------------------------
-// Public Interface
-//------------------------------------------------------------------------------
-
-module.exports = function(results) {
-
-    let output = "",
-        total = 0;
-
-    results.forEach(result => {
-
-        const messages = result.messages;
-
-        total += messages.length;
-
-        messages.forEach(message => {
-
-            output += `${result.filePath}: `;
-            output += `line ${message.line || 0}`;
-            output += `, col ${message.column || 0}`;
-            output += `, ${getMessageType(message)}`;
-            output += ` - ${message.message}`;
-            output += message.ruleId ? ` (${message.ruleId})` : "";
-            output += "\n";
-
-        });
-
-    });
-
-    if (total > 0) {
-        output += `\n${total} problem${total !== 1 ? "s" : ""}`;
-    }
-
-    return output;
-};
diff --git a/node_modules/eslint/lib/formatters/html-template-message.html b/node_modules/eslint/lib/formatters/html-template-message.html
deleted file mode 100644
index 66f49ff..0000000
--- a/node_modules/eslint/lib/formatters/html-template-message.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-    <%= lineNumber %>:<%= columnNumber %>
-    <%= severityName %>
-    <%- message %>
-    
-        <%= ruleId %>
-    
-
diff --git a/node_modules/eslint/lib/formatters/html-template-page.html b/node_modules/eslint/lib/formatters/html-template-page.html
deleted file mode 100644
index 4016576..0000000
--- a/node_modules/eslint/lib/formatters/html-template-page.html
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
-    
-        
-        ESLint Report
-        
-    
-    
-        
-

ESLint Report

-
- <%= reportSummary %> - Generated on <%= date %> -
-
- - - <%= results %> - -
- - - diff --git a/node_modules/eslint/lib/formatters/html-template-result.html b/node_modules/eslint/lib/formatters/html-template-result.html deleted file mode 100644 index f4a5593..0000000 --- a/node_modules/eslint/lib/formatters/html-template-result.html +++ /dev/null @@ -1,6 +0,0 @@ - - - [+] <%- filePath %> - <%- summary %> - - diff --git a/node_modules/eslint/lib/formatters/html.js b/node_modules/eslint/lib/formatters/html.js deleted file mode 100644 index d450f9d..0000000 --- a/node_modules/eslint/lib/formatters/html.js +++ /dev/null @@ -1,127 +0,0 @@ -/** - * @fileoverview HTML reporter - * @author Julian Laval - */ -"use strict"; - -const lodash = require("lodash"); -const fs = require("fs"); -const path = require("path"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const pageTemplate = lodash.template(fs.readFileSync(path.join(__dirname, "html-template-page.html"), "utf-8")); -const messageTemplate = lodash.template(fs.readFileSync(path.join(__dirname, "html-template-message.html"), "utf-8")); -const resultTemplate = lodash.template(fs.readFileSync(path.join(__dirname, "html-template-result.html"), "utf-8")); - -/** - * Given a word and a count, append an s if count is not one. - * @param {string} word A word in its singular form. - * @param {int} count A number controlling whether word should be pluralized. - * @returns {string} The original word with an s on the end if count is not one. - */ -function pluralize(word, count) { - return (count === 1 ? word : `${word}s`); -} - -/** - * Renders text along the template of x problems (x errors, x warnings) - * @param {string} totalErrors Total errors - * @param {string} totalWarnings Total warnings - * @returns {string} The formatted string, pluralized where necessary - */ -function renderSummary(totalErrors, totalWarnings) { - const totalProblems = totalErrors + totalWarnings; - let renderedText = `${totalProblems} ${pluralize("problem", totalProblems)}`; - - if (totalProblems !== 0) { - renderedText += ` (${totalErrors} ${pluralize("error", totalErrors)}, ${totalWarnings} ${pluralize("warning", totalWarnings)})`; - } - return renderedText; -} - -/** - * Get the color based on whether there are errors/warnings... - * @param {string} totalErrors Total errors - * @param {string} totalWarnings Total warnings - * @returns {int} The color code (0 = green, 1 = yellow, 2 = red) - */ -function renderColor(totalErrors, totalWarnings) { - if (totalErrors !== 0) { - return 2; - } - if (totalWarnings !== 0) { - return 1; - } - return 0; -} - -/** - * Get HTML (table rows) describing the messages. - * @param {Array} messages Messages. - * @param {int} parentIndex Index of the parent HTML row. - * @returns {string} HTML (table rows) describing the messages. - */ -function renderMessages(messages, parentIndex) { - - /** - * Get HTML (table row) describing a message. - * @param {Object} message Message. - * @returns {string} HTML (table row) describing a message. - */ - return lodash.map(messages, message => { - const lineNumber = message.line || 0; - const columnNumber = message.column || 0; - - return messageTemplate({ - parentIndex, - lineNumber, - columnNumber, - severityNumber: message.severity, - severityName: message.severity === 1 ? "Warning" : "Error", - message: message.message, - ruleId: message.ruleId - }); - }).join("\n"); -} - -/** - * @param {Array} results Test results. - * @returns {string} HTML string describing the results. - */ -function renderResults(results) { - return lodash.map(results, (result, index) => resultTemplate({ - index, - color: renderColor(result.errorCount, result.warningCount), - filePath: result.filePath, - summary: renderSummary(result.errorCount, result.warningCount) - - }) + renderMessages(result.messages, index)).join("\n"); -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = function(results) { - let totalErrors, - totalWarnings; - - totalErrors = 0; - totalWarnings = 0; - - // Iterate over results to get totals - results.forEach(result => { - totalErrors += result.errorCount; - totalWarnings += result.warningCount; - }); - - return pageTemplate({ - date: new Date(), - reportColor: renderColor(totalErrors, totalWarnings), - reportSummary: renderSummary(totalErrors, totalWarnings), - results: renderResults(results) - }); -}; diff --git a/node_modules/eslint/lib/formatters/jslint-xml.js b/node_modules/eslint/lib/formatters/jslint-xml.js deleted file mode 100644 index 1474343..0000000 --- a/node_modules/eslint/lib/formatters/jslint-xml.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @fileoverview JSLint XML reporter - * @author Ian Christian Myers - */ -"use strict"; - -const xmlEscape = require("../util/xml-escape"); - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = function(results) { - - let output = ""; - - output += ""; - output += ""; - - results.forEach(result => { - const messages = result.messages; - - output += ``; - - messages.forEach(message => { - output += [ - `` - ].join(" "); - }); - - output += ""; - - }); - - output += ""; - - return output; -}; diff --git a/node_modules/eslint/lib/formatters/json.js b/node_modules/eslint/lib/formatters/json.js deleted file mode 100644 index 82138af..0000000 --- a/node_modules/eslint/lib/formatters/json.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @fileoverview JSON reporter - * @author Burak Yigit Kaya aka BYK - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = function(results) { - return JSON.stringify(results); -}; diff --git a/node_modules/eslint/lib/formatters/junit.js b/node_modules/eslint/lib/formatters/junit.js deleted file mode 100644 index 77d548f..0000000 --- a/node_modules/eslint/lib/formatters/junit.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @fileoverview jUnit Reporter - * @author Jamund Ferguson - */ -"use strict"; - -const xmlEscape = require("../util/xml-escape"); - -//------------------------------------------------------------------------------ -// Helper Functions -//------------------------------------------------------------------------------ - -/** - * Returns the severity of warning or error - * @param {Object} message message object to examine - * @returns {string} severity level - * @private - */ -function getMessageType(message) { - if (message.fatal || message.severity === 2) { - return "Error"; - } - return "Warning"; - -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = function(results) { - - let output = ""; - - output += "\n"; - output += "\n"; - - results.forEach(result => { - - const messages = result.messages; - - if (messages.length > 0) { - output += `\n`; - messages.forEach(message => { - const type = message.fatal ? "error" : "failure"; - - output += ``; - output += `<${type} message="${xmlEscape(message.message || "")}">`; - output += ""; - output += ``; - output += "\n"; - }); - output += "\n"; - } else { - output += `\n`; - output += `\n`; - output += "\n"; - } - - }); - - output += "\n"; - - return output; -}; diff --git a/node_modules/eslint/lib/formatters/stylish.js b/node_modules/eslint/lib/formatters/stylish.js deleted file mode 100644 index e586fe8..0000000 --- a/node_modules/eslint/lib/formatters/stylish.js +++ /dev/null @@ -1,100 +0,0 @@ -/** - * @fileoverview Stylish reporter - * @author Sindre Sorhus - */ -"use strict"; - -const chalk = require("chalk"), - stripAnsi = require("strip-ansi"), - table = require("text-table"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Given a word and a count, append an s if count is not one. - * @param {string} word A word in its singular form. - * @param {int} count A number controlling whether word should be pluralized. - * @returns {string} The original word with an s on the end if count is not one. - */ -function pluralize(word, count) { - return (count === 1 ? word : `${word}s`); -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = function(results) { - - let output = "\n", - errorCount = 0, - warningCount = 0, - fixableErrorCount = 0, - fixableWarningCount = 0, - summaryColor = "yellow"; - - results.forEach(result => { - const messages = result.messages; - - if (messages.length === 0) { - return; - } - - errorCount += result.errorCount; - warningCount += result.warningCount; - fixableErrorCount += result.fixableErrorCount; - fixableWarningCount += result.fixableWarningCount; - - output += `${chalk.underline(result.filePath)}\n`; - - output += `${table( - messages.map(message => { - let messageType; - - if (message.fatal || message.severity === 2) { - messageType = chalk.red("error"); - summaryColor = "red"; - } else { - messageType = chalk.yellow("warning"); - } - - return [ - "", - message.line || 0, - message.column || 0, - messageType, - message.message.replace(/([^ ])\.$/, "$1"), - chalk.dim(message.ruleId || "") - ]; - }), - { - align: ["", "r", "l"], - stringLength(str) { - return stripAnsi(str).length; - } - } - ).split("\n").map(el => el.replace(/(\d+)\s+(\d+)/, (m, p1, p2) => chalk.dim(`${p1}:${p2}`))).join("\n")}\n\n`; - }); - - const total = errorCount + warningCount; - - if (total > 0) { - output += chalk[summaryColor].bold([ - "\u2716 ", total, pluralize(" problem", total), - " (", errorCount, pluralize(" error", errorCount), ", ", - warningCount, pluralize(" warning", warningCount), ")\n" - ].join("")); - - if (fixableErrorCount > 0 || fixableWarningCount > 0) { - output += chalk[summaryColor].bold([ - " ", fixableErrorCount, pluralize(" error", fixableErrorCount), ", ", - fixableWarningCount, pluralize(" warning", fixableWarningCount), - " potentially fixable with the `--fix` option.\n" - ].join("")); - } - } - - return total > 0 ? output : ""; -}; diff --git a/node_modules/eslint/lib/formatters/table.js b/node_modules/eslint/lib/formatters/table.js deleted file mode 100644 index ebc3314..0000000 --- a/node_modules/eslint/lib/formatters/table.js +++ /dev/null @@ -1,150 +0,0 @@ -/** - * @fileoverview "table reporter. - * @author Gajus Kuizinas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const chalk = require("chalk"), - table = require("table").table, - pluralize = require("pluralize"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Draws text table. - * @param {Array} messages Error messages relating to a specific file. - * @returns {string} A text table. - */ -function drawTable(messages) { - const rows = []; - - if (messages.length === 0) { - return ""; - } - - rows.push([ - chalk.bold("Line"), - chalk.bold("Column"), - chalk.bold("Type"), - chalk.bold("Message"), - chalk.bold("Rule ID") - ]); - - messages.forEach(message => { - let messageType; - - if (message.fatal || message.severity === 2) { - messageType = chalk.red("error"); - } else { - messageType = chalk.yellow("warning"); - } - - rows.push([ - message.line || 0, - message.column || 0, - messageType, - message.message, - message.ruleId || "" - ]); - }); - - return table(rows, { - columns: { - 0: { - width: 8, - wrapWord: true - }, - 1: { - width: 8, - wrapWord: true - }, - 2: { - width: 8, - wrapWord: true - }, - 3: { - paddingRight: 5, - width: 50, - wrapWord: true - }, - 4: { - width: 20, - wrapWord: true - } - }, - drawHorizontalLine(index) { - return index === 1; - } - }); -} - -/** - * Draws a report (multiple tables). - * @param {Array} results Report results for every file. - * @returns {string} A column of text tables. - */ -function drawReport(results) { - let files; - - files = results.map(result => { - if (!result.messages.length) { - return ""; - } - - return `\n${result.filePath}\n\n${drawTable(result.messages)}`; - }); - - files = files.filter(content => content.trim()); - - return files.join(""); -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = function(report) { - let result, - errorCount, - warningCount; - - result = ""; - errorCount = 0; - warningCount = 0; - - report.forEach(fileReport => { - errorCount += fileReport.errorCount; - warningCount += fileReport.warningCount; - }); - - if (errorCount || warningCount) { - result = drawReport(report); - } - - result += `\n${table([ - [ - chalk.red(pluralize("Error", errorCount, true)) - ], - [ - chalk.yellow(pluralize("Warning", warningCount, true)) - ] - ], { - columns: { - 0: { - width: 110, - wrapWord: true - } - }, - drawHorizontalLine() { - return true; - } - })}`; - - return result; -}; diff --git a/node_modules/eslint/lib/formatters/tap.js b/node_modules/eslint/lib/formatters/tap.js deleted file mode 100644 index 9651a2b..0000000 --- a/node_modules/eslint/lib/formatters/tap.js +++ /dev/null @@ -1,92 +0,0 @@ -/** - * @fileoverview TAP reporter - * @author Jonathan Kingston - */ -"use strict"; - -const yaml = require("js-yaml"); - -//------------------------------------------------------------------------------ -// Helper Functions -//------------------------------------------------------------------------------ - -/** - * Returns a canonical error level string based upon the error message passed in. - * @param {Object} message Individual error message provided by eslint - * @returns {string} Error level string - */ -function getMessageType(message) { - if (message.fatal || message.severity === 2) { - return "error"; - } - return "warning"; - -} - -/** - * Takes in a JavaScript object and outputs a TAP diagnostics string - * @param {Object} diagnostic JavaScript object to be embedded as YAML into output. - * @returns {string} diagnostics string with YAML embedded - TAP version 13 compliant - */ -function outputDiagnostics(diagnostic) { - const prefix = " "; - let output = `${prefix}---\n`; - - output += prefix + yaml.safeDump(diagnostic).split("\n").join(`\n${prefix}`); - output += "...\n"; - return output; -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = function(results) { - let output = `TAP version 13\n1..${results.length}\n`; - - results.forEach((result, id) => { - const messages = result.messages; - let testResult = "ok"; - let diagnostics = {}; - - if (messages.length > 0) { - testResult = "not ok"; - - messages.forEach(message => { - const diagnostic = { - message: message.message, - severity: getMessageType(message), - data: { - line: message.line || 0, - column: message.column || 0, - ruleId: message.ruleId || "" - } - }; - - /* - * If we have multiple messages place them under a messages key - * The first error will be logged as message key - * This is to adhere to TAP 13 loosely defined specification of having a message key - */ - if ("message" in diagnostics) { - if (typeof diagnostics.messages === "undefined") { - diagnostics.messages = []; - } - diagnostics.messages.push(diagnostic); - } else { - diagnostics = diagnostic; - } - }); - } - - output += `${testResult} ${id + 1} - ${result.filePath}\n`; - - // If we have an error include diagnostics - if (messages.length > 0) { - output += outputDiagnostics(diagnostics); - } - - }); - - return output; -}; diff --git a/node_modules/eslint/lib/formatters/unix.js b/node_modules/eslint/lib/formatters/unix.js deleted file mode 100644 index c6c4ebb..0000000 --- a/node_modules/eslint/lib/formatters/unix.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @fileoverview unix-style formatter. - * @author oshi-shinobu - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Helper Functions -//------------------------------------------------------------------------------ - -/** - * Returns a canonical error level string based upon the error message passed in. - * @param {Object} message Individual error message provided by eslint - * @returns {string} Error level string - */ -function getMessageType(message) { - if (message.fatal || message.severity === 2) { - return "Error"; - } - return "Warning"; - -} - - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = function(results) { - - let output = "", - total = 0; - - results.forEach(result => { - - const messages = result.messages; - - total += messages.length; - - messages.forEach(message => { - - output += `${result.filePath}:`; - output += `${message.line || 0}:`; - output += `${message.column || 0}:`; - output += ` ${message.message} `; - output += `[${getMessageType(message)}${message.ruleId ? `/${message.ruleId}` : ""}]`; - output += "\n"; - - }); - - }); - - if (total > 0) { - output += `\n${total} problem${total !== 1 ? "s" : ""}`; - } - - return output; -}; diff --git a/node_modules/eslint/lib/formatters/visualstudio.js b/node_modules/eslint/lib/formatters/visualstudio.js deleted file mode 100644 index 0d49431..0000000 --- a/node_modules/eslint/lib/formatters/visualstudio.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @fileoverview Visual Studio compatible formatter - * @author Ronald Pijnacker - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helper Functions -//------------------------------------------------------------------------------ - -/** - * Returns the severity of warning or error - * @param {Object} message message object to examine - * @returns {string} severity level - * @private - */ -function getMessageType(message) { - if (message.fatal || message.severity === 2) { - return "error"; - } - return "warning"; - -} - - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = function(results) { - - let output = "", - total = 0; - - results.forEach(result => { - - const messages = result.messages; - - total += messages.length; - - messages.forEach(message => { - - output += result.filePath; - output += `(${message.line || 0}`; - output += message.column ? `,${message.column}` : ""; - output += `): ${getMessageType(message)}`; - output += message.ruleId ? ` ${message.ruleId}` : ""; - output += ` : ${message.message}`; - output += "\n"; - - }); - - }); - - if (total === 0) { - output += "no problems"; - } else { - output += `\n${total} problem${total !== 1 ? "s" : ""}`; - } - - return output; -}; diff --git a/node_modules/eslint/lib/ignored-paths.js b/node_modules/eslint/lib/ignored-paths.js deleted file mode 100644 index 8fff260..0000000 --- a/node_modules/eslint/lib/ignored-paths.js +++ /dev/null @@ -1,289 +0,0 @@ -/** - * @fileoverview Responsible for loading ignore config files and managing ignore patterns - * @author Jonathan Rajavuori - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const fs = require("fs"), - path = require("path"), - ignore = require("ignore"), - pathUtil = require("./util/path-util"); - -const debug = require("debug")("eslint:ignored-paths"); - -//------------------------------------------------------------------------------ -// Constants -//------------------------------------------------------------------------------ - -const ESLINT_IGNORE_FILENAME = ".eslintignore"; - -/** - * Adds `"*"` at the end of `"node_modules/"`, - * so that subtle directories could be re-included by .gitignore patterns - * such as `"!node_modules/should_not_ignored"` - */ -const DEFAULT_IGNORE_DIRS = [ - "/node_modules/*", - "/bower_components/*" -]; -const DEFAULT_OPTIONS = { - dotfiles: false, - cwd: process.cwd() -}; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Find a file in the current directory. - * @param {string} cwd Current working directory - * @param {string} name File name - * @returns {string} Path of ignore file or an empty string. - */ -function findFile(cwd, name) { - const ignoreFilePath = path.resolve(cwd, name); - - return fs.existsSync(ignoreFilePath) && fs.statSync(ignoreFilePath).isFile() ? ignoreFilePath : ""; -} - -/** - * Find an ignore file in the current directory. - * @param {string} cwd Current working directory - * @returns {string} Path of ignore file or an empty string. - */ -function findIgnoreFile(cwd) { - return findFile(cwd, ESLINT_IGNORE_FILENAME); -} - -/** - * Find an package.json file in the current directory. - * @param {string} cwd Current working directory - * @returns {string} Path of package.json file or an empty string. - */ -function findPackageJSONFile(cwd) { - return findFile(cwd, "package.json"); -} - -/** - * Merge options with defaults - * @param {Object} options Options to merge with DEFAULT_OPTIONS constant - * @returns {Object} Merged options - */ -function mergeDefaultOptions(options) { - return Object.assign({}, DEFAULT_OPTIONS, options); -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -/** - * IgnoredPaths class - */ -class IgnoredPaths { - - /** - * @param {Object} providedOptions object containing 'ignore', 'ignorePath' and 'patterns' properties - */ - constructor(providedOptions) { - const options = mergeDefaultOptions(providedOptions); - - this.cache = {}; - - /** - * add pattern to node-ignore instance - * @param {Object} ig, instance of node-ignore - * @param {string} pattern, pattern do add to ig - * @returns {array} raw ignore rules - */ - function addPattern(ig, pattern) { - return ig.addPattern(pattern); - } - - this.defaultPatterns = [].concat(DEFAULT_IGNORE_DIRS, options.patterns || []); - this.baseDir = options.cwd; - - this.ig = { - custom: ignore(), - default: ignore() - }; - - /* - * Add a way to keep track of ignored files. This was present in node-ignore - * 2.x, but dropped for now as of 3.0.10. - */ - this.ig.custom.ignoreFiles = []; - this.ig.default.ignoreFiles = []; - - if (options.dotfiles !== true) { - - /* - * ignore files beginning with a dot, but not files in a parent or - * ancestor directory (which in relative format will begin with `../`). - */ - addPattern(this.ig.default, [".*", "!../"]); - } - - addPattern(this.ig.default, this.defaultPatterns); - - if (options.ignore !== false) { - let ignorePath; - - if (options.ignorePath) { - debug("Using specific ignore file"); - - try { - fs.statSync(options.ignorePath); - ignorePath = options.ignorePath; - } catch (e) { - e.message = `Cannot read ignore file: ${options.ignorePath}\nError: ${e.message}`; - throw e; - } - } else { - debug(`Looking for ignore file in ${options.cwd}`); - ignorePath = findIgnoreFile(options.cwd); - - try { - fs.statSync(ignorePath); - debug(`Loaded ignore file ${ignorePath}`); - } catch (e) { - debug("Could not find ignore file in cwd"); - this.options = options; - } - } - - if (ignorePath) { - debug(`Adding ${ignorePath}`); - this.baseDir = path.dirname(path.resolve(options.cwd, ignorePath)); - this.addIgnoreFile(this.ig.custom, ignorePath); - this.addIgnoreFile(this.ig.default, ignorePath); - } else { - try { - - // if the ignoreFile does not exist, check package.json for eslintIgnore - const packageJSONPath = findPackageJSONFile(options.cwd); - - if (packageJSONPath) { - let packageJSONOptions; - - try { - packageJSONOptions = JSON.parse(fs.readFileSync(packageJSONPath, "utf8")); - } catch (e) { - debug("Could not read package.json file to check eslintIgnore property"); - throw e; - } - - if (packageJSONOptions.eslintIgnore) { - if (Array.isArray(packageJSONOptions.eslintIgnore)) { - packageJSONOptions.eslintIgnore.forEach(pattern => { - addPattern(this.ig.custom, pattern); - addPattern(this.ig.default, pattern); - }); - } else { - throw new TypeError("Package.json eslintIgnore property requires an array of paths"); - } - } - } - } catch (e) { - debug("Could not find package.json to check eslintIgnore property"); - throw e; - } - } - - if (options.ignorePattern) { - addPattern(this.ig.custom, options.ignorePattern); - addPattern(this.ig.default, options.ignorePattern); - } - } - - this.options = options; - } - - /** - * read ignore filepath - * @param {string} filePath, file to add to ig - * @returns {array} raw ignore rules - */ - readIgnoreFile(filePath) { - if (typeof this.cache[filePath] === "undefined") { - this.cache[filePath] = fs.readFileSync(filePath, "utf8"); - } - return this.cache[filePath]; - } - - /** - * add ignore file to node-ignore instance - * @param {Object} ig, instance of node-ignore - * @param {string} filePath, file to add to ig - * @returns {array} raw ignore rules - */ - addIgnoreFile(ig, filePath) { - ig.ignoreFiles.push(filePath); - return ig.add(this.readIgnoreFile(filePath)); - } - - /** - * Determine whether a file path is included in the default or custom ignore patterns - * @param {string} filepath Path to check - * @param {string} [category=null] check 'default', 'custom' or both (null) - * @returns {boolean} true if the file path matches one or more patterns, false otherwise - */ - contains(filepath, category) { - - let result = false; - const absolutePath = path.resolve(this.options.cwd, filepath); - const relativePath = pathUtil.getRelativePath(absolutePath, this.baseDir); - - if ((typeof category === "undefined") || (category === "default")) { - result = result || (this.ig.default.filter([relativePath]).length === 0); - } - - if ((typeof category === "undefined") || (category === "custom")) { - result = result || (this.ig.custom.filter([relativePath]).length === 0); - } - - return result; - - } - - /** - * Returns a list of dir patterns for glob to ignore - * @returns {function()} method to check whether a folder should be ignored by glob. - */ - getIgnoredFoldersGlobChecker() { - - const ig = ignore().add(DEFAULT_IGNORE_DIRS); - - if (this.options.dotfiles !== true) { - - // Ignore hidden folders. (This cannot be ".*", or else it's not possible to unignore hidden files) - ig.add([".*/*", "!../"]); - } - - if (this.options.ignore) { - ig.add(this.ig.custom); - } - - const filter = ig.createFilter(); - - const base = this.baseDir; - - return function(absolutePath) { - const relative = pathUtil.getRelativePath(absolutePath, base); - - if (!relative) { - return false; - } - - return !filter(relative); - }; - } -} - -module.exports = IgnoredPaths; diff --git a/node_modules/eslint/lib/linter.js b/node_modules/eslint/lib/linter.js deleted file mode 100644 index 8c63152..0000000 --- a/node_modules/eslint/lib/linter.js +++ /dev/null @@ -1,1176 +0,0 @@ -/** - * @fileoverview Main Linter Class - * @author Gyandeep Singh - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const eslintScope = require("eslint-scope"), - evk = require("eslint-visitor-keys"), - levn = require("levn"), - lodash = require("lodash"), - blankScriptAST = require("../conf/blank-script.json"), - CodePathAnalyzer = require("./code-path-analysis/code-path-analyzer"), - ConfigOps = require("./config/config-ops"), - validator = require("./config/config-validator"), - Environments = require("./config/environments"), - applyDisableDirectives = require("./util/apply-disable-directives"), - createEmitter = require("./util/safe-emitter"), - NodeEventGenerator = require("./util/node-event-generator"), - SourceCode = require("./util/source-code"), - Traverser = require("./util/traverser"), - createReportTranslator = require("./report-translator"), - Rules = require("./rules"), - timing = require("./timing"), - astUtils = require("./ast-utils"), - pkg = require("../package.json"), - SourceCodeFixer = require("./util/source-code-fixer"); - -const debug = require("debug")("eslint:linter"); -const MAX_AUTOFIX_PASSES = 10; -const DEFAULT_PARSER_NAME = "espree"; - -//------------------------------------------------------------------------------ -// Typedefs -//------------------------------------------------------------------------------ - -/** - * The result of a parsing operation from parseForESLint() - * @typedef {Object} CustomParseResult - * @property {ASTNode} ast The ESTree AST Program node. - * @property {Object} services An object containing additional services related - * to the parser. - * @property {ScopeManager|null} scopeManager The scope manager object of this AST. - * @property {Object|null} visitorKeys The visitor keys to traverse this AST. - */ - -/** - * @typedef {Object} DisableDirective - * @property {("disable"|"enable"|"disable-line"|"disable-next-line")} type - * @property {number} line - * @property {number} column - * @property {(string|null)} ruleId - */ - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Parses a list of "name:boolean_value" or/and "name" options divided by comma or - * whitespace. - * @param {string} string The string to parse. - * @param {Comment} comment The comment node which has the string. - * @returns {Object} Result map object of names and boolean values - */ -function parseBooleanConfig(string, comment) { - const items = {}; - - // Collapse whitespace around `:` and `,` to make parsing easier - const trimmedString = string.replace(/\s*([:,])\s*/g, "$1"); - - trimmedString.split(/\s|,+/).forEach(name => { - if (!name) { - return; - } - const pos = name.indexOf(":"); - - if (pos === -1) { - items[name] = { - value: false, - comment - }; - } else { - items[name.slice(0, pos)] = { - value: name.slice(pos + 1) === "true", - comment - }; - } - }); - return items; -} - -/** - * Parses a JSON-like config. - * @param {string} string The string to parse. - * @param {Object} location Start line and column of comments for potential error message. - * @returns {({success: true, config: Object}|{success: false, error: Problem})} Result map object - */ -function parseJsonConfig(string, location) { - let items = {}; - - // Parses a JSON-like comment by the same way as parsing CLI option. - try { - items = levn.parse("Object", string) || {}; - - // Some tests say that it should ignore invalid comments such as `/*eslint no-alert:abc*/`. - // Also, commaless notations have invalid severity: - // "no-alert: 2 no-console: 2" --> {"no-alert": "2 no-console: 2"} - // Should ignore that case as well. - if (ConfigOps.isEverySeverityValid(items)) { - return { - success: true, - config: items - }; - } - } catch (ex) { - - // ignore to parse the string by a fallback. - } - - /* - * Optionator cannot parse commaless notations. - * But we are supporting that. So this is a fallback for that. - */ - items = {}; - const normalizedString = string.replace(/([a-zA-Z0-9\-/]+):/g, "\"$1\":").replace(/(]|[0-9])\s+(?=")/, "$1,"); - - try { - items = JSON.parse(`{${normalizedString}}`); - } catch (ex) { - return { - success: false, - error: { - ruleId: null, - fatal: true, - severity: 2, - source: null, - message: `Failed to parse JSON from '${normalizedString}': ${ex.message}`, - line: location.start.line, - column: location.start.column + 1 - } - }; - - } - - return { - success: true, - config: items - }; -} - -/** - * Parses a config of values separated by comma. - * @param {string} string The string to parse. - * @returns {Object} Result map of values and true values - */ -function parseListConfig(string) { - const items = {}; - - // Collapse whitespace around , - string.replace(/\s*,\s*/g, ",").split(/,+/).forEach(name => { - const trimmedName = name.trim(); - - if (trimmedName) { - items[trimmedName] = true; - } - }); - return items; -} - -/** - * Ensures that variables representing built-in properties of the Global Object, - * and any globals declared by special block comments, are present in the global - * scope. - * @param {Scope} globalScope The global scope. - * @param {Object} configGlobals The globals declared in configuration - * @param {{exportedVariables: Object, enabledGlobals: Object}} commentDirectives Directives from comment configuration - * @returns {void} - */ -function addDeclaredGlobals(globalScope, configGlobals, commentDirectives) { - Object.keys(configGlobals).forEach(name => { - let variable = globalScope.set.get(name); - - if (!variable) { - variable = new eslintScope.Variable(name, globalScope); - variable.eslintExplicitGlobal = false; - globalScope.variables.push(variable); - globalScope.set.set(name, variable); - } - variable.writeable = configGlobals[name]; - }); - - Object.keys(commentDirectives.enabledGlobals).forEach(name => { - let variable = globalScope.set.get(name); - - if (!variable) { - variable = new eslintScope.Variable(name, globalScope); - variable.eslintExplicitGlobal = true; - variable.eslintExplicitGlobalComment = commentDirectives.enabledGlobals[name].comment; - globalScope.variables.push(variable); - globalScope.set.set(name, variable); - } - variable.writeable = commentDirectives.enabledGlobals[name].value; - }); - - // mark all exported variables as such - Object.keys(commentDirectives.exportedVariables).forEach(name => { - const variable = globalScope.set.get(name); - - if (variable) { - variable.eslintUsed = true; - } - }); - - /* - * "through" contains all references which definitions cannot be found. - * Since we augment the global scope using configuration, we need to update - * references and remove the ones that were added by configuration. - */ - globalScope.through = globalScope.through.filter(reference => { - const name = reference.identifier.name; - const variable = globalScope.set.get(name); - - if (variable) { - - /* - * Links the variable and the reference. - * And this reference is removed from `Scope#through`. - */ - reference.resolved = variable; - variable.references.push(reference); - - return false; - } - - return true; - }); -} - -/** - * Creates a collection of disable directives from a comment - * @param {("disable"|"enable"|"disable-line"|"disable-next-line")} type The type of directive comment - * @param {{line: number, column: number}} loc The 0-based location of the comment token - * @param {string} value The value after the directive in the comment - * comment specified no specific rules, so it applies to all rules (e.g. `eslint-disable`) - * @returns {DisableDirective[]} Directives from the comment - */ -function createDisableDirectives(type, loc, value) { - const ruleIds = Object.keys(parseListConfig(value)); - const directiveRules = ruleIds.length ? ruleIds : [null]; - - return directiveRules.map(ruleId => ({ type, line: loc.line, column: loc.column + 1, ruleId })); -} - -/** - * Parses comments in file to extract file-specific config of rules, globals - * and environments and merges them with global config; also code blocks - * where reporting is disabled or enabled and merges them with reporting config. - * @param {string} filename The file being checked. - * @param {ASTNode} ast The top node of the AST. - * @param {function(string): {create: Function}} ruleMapper A map from rule IDs to defined rules - * @returns {{configuredRules: Object, enabledGlobals: Object, exportedVariables: Object, problems: Problem[], disableDirectives: DisableDirective[]}} - * A collection of the directive comments that were found, along with any problems that occurred when parsing - */ -function getDirectiveComments(filename, ast, ruleMapper) { - const configuredRules = {}; - const enabledGlobals = {}; - const exportedVariables = {}; - const problems = []; - const disableDirectives = []; - - ast.comments.filter(token => token.type !== "Shebang").forEach(comment => { - const trimmedCommentText = comment.value.trim(); - const match = /^(eslint(-\w+){0,3}|exported|globals?)(\s|$)/.exec(trimmedCommentText); - - if (!match) { - return; - } - - const directiveValue = trimmedCommentText.slice(match.index + match[1].length); - - if (/^eslint-disable-(next-)?line$/.test(match[1]) && comment.loc.start.line === comment.loc.end.line) { - const directiveType = match[1].slice("eslint-".length); - - [].push.apply(disableDirectives, createDisableDirectives(directiveType, comment.loc.start, directiveValue)); - } else if (comment.type === "Block") { - switch (match[1]) { - case "exported": - Object.assign(exportedVariables, parseBooleanConfig(directiveValue, comment)); - break; - - case "globals": - case "global": - Object.assign(enabledGlobals, parseBooleanConfig(directiveValue, comment)); - break; - - case "eslint-disable": - [].push.apply(disableDirectives, createDisableDirectives("disable", comment.loc.start, directiveValue)); - break; - - case "eslint-enable": - [].push.apply(disableDirectives, createDisableDirectives("enable", comment.loc.start, directiveValue)); - break; - - case "eslint": { - const parseResult = parseJsonConfig(directiveValue, comment.loc); - - if (parseResult.success) { - Object.keys(parseResult.config).forEach(name => { - const ruleValue = parseResult.config[name]; - - try { - validator.validateRuleOptions(ruleMapper(name), name, ruleValue); - } catch (err) { - problems.push({ - ruleId: name, - severity: 2, - source: null, - message: err.message, - line: comment.loc.start.line, - column: comment.loc.start.column + 1, - endLine: comment.loc.end.line, - endColumn: comment.loc.end.column + 1, - nodeType: null - }); - } - configuredRules[name] = ruleValue; - }); - } else { - problems.push(parseResult.error); - } - - break; - } - - // no default - } - } - }); - - return { - configuredRules, - enabledGlobals, - exportedVariables, - problems, - disableDirectives - }; -} - -/** - * Normalize ECMAScript version from the initial config - * @param {number} ecmaVersion ECMAScript version from the initial config - * @param {boolean} isModule Whether the source type is module or not - * @returns {number} normalized ECMAScript version - */ -function normalizeEcmaVersion(ecmaVersion, isModule) { - - // Need at least ES6 for modules - if (isModule && (!ecmaVersion || ecmaVersion < 6)) { - return 6; - } - - /* - * Calculate ECMAScript edition number from official year version starting with - * ES2015, which corresponds with ES6 (or a difference of 2009). - */ - if (ecmaVersion >= 2015) { - return ecmaVersion - 2009; - } - - return ecmaVersion; -} - -const eslintEnvPattern = /\/\*\s*eslint-env\s(.+?)\*\//g; - -/** - * Checks whether or not there is a comment which has "eslint-env *" in a given text. - * @param {string} text - A source code text to check. - * @returns {Object|null} A result of parseListConfig() with "eslint-env *" comment. - */ -function findEslintEnv(text) { - let match, retv; - - eslintEnvPattern.lastIndex = 0; - - while ((match = eslintEnvPattern.exec(text))) { - retv = Object.assign(retv || {}, parseListConfig(match[1])); - } - - return retv; -} - -/** - * Normalizes the possible options for `linter.verify` and `linter.verifyAndFix` to a - * consistent shape. - * @param {(string|{reportUnusedDisableDirectives: boolean, filename: string, allowInlineConfig: boolean})} providedOptions Options - * @returns {{reportUnusedDisableDirectives: boolean, filename: string, allowInlineConfig: boolean}} Normalized options - */ -function normalizeVerifyOptions(providedOptions) { - const isObjectOptions = typeof providedOptions === "object"; - const providedFilename = isObjectOptions ? providedOptions.filename : providedOptions; - - return { - filename: typeof providedFilename === "string" ? providedFilename : "", - allowInlineConfig: !isObjectOptions || providedOptions.allowInlineConfig !== false, - reportUnusedDisableDirectives: isObjectOptions && !!providedOptions.reportUnusedDisableDirectives - }; -} - -/** - * Combines the provided parserOptions with the options from environments - * @param {Object} providedOptions The provided 'parserOptions' key in a config - * @param {Environment[]} enabledEnvironments The environments enabled in configuration and with inline comments - * @returns {Object} Resulting parser options after merge - */ -function resolveParserOptions(providedOptions, enabledEnvironments) { - const parserOptionsFromEnv = enabledEnvironments - .filter(env => env.parserOptions) - .reduce((parserOptions, env) => ConfigOps.merge(parserOptions, env.parserOptions), {}); - - const mergedParserOptions = ConfigOps.merge(parserOptionsFromEnv, providedOptions || {}); - - const isModule = mergedParserOptions.sourceType === "module"; - - if (isModule) { - - // can't have global return inside of modules - mergedParserOptions.ecmaFeatures = Object.assign({}, mergedParserOptions.ecmaFeatures, { globalReturn: false }); - } - - mergedParserOptions.ecmaVersion = normalizeEcmaVersion(mergedParserOptions.ecmaVersion, isModule); - - return mergedParserOptions; -} - -/** - * Combines the provided globals object with the globals from environments - * @param {Object} providedGlobals The 'globals' key in a config - * @param {Environments[]} enabledEnvironments The environments enabled in configuration and with inline comments - * @returns {Object} The resolved globals object - */ -function resolveGlobals(providedGlobals, enabledEnvironments) { - return Object.assign.apply( - null, - [{}] - .concat(enabledEnvironments.filter(env => env.globals).map(env => env.globals)) - .concat(providedGlobals) - ); -} - -/** - * Strips Unicode BOM from a given text. - * - * @param {string} text - A text to strip. - * @returns {string} The stripped text. - */ -function stripUnicodeBOM(text) { - - /* - * Check Unicode BOM. - * In JavaScript, string data is stored as UTF-16, so BOM is 0xFEFF. - * http://www.ecma-international.org/ecma-262/6.0/#sec-unicode-format-control-characters - */ - if (text.charCodeAt(0) === 0xFEFF) { - return text.slice(1); - } - return text; -} - -/** - * Get the options for a rule (not including severity), if any - * @param {Array|number} ruleConfig rule configuration - * @returns {Array} of rule options, empty Array if none - */ -function getRuleOptions(ruleConfig) { - if (Array.isArray(ruleConfig)) { - return ruleConfig.slice(1); - } - return []; - -} - -/** - * Analyze scope of the given AST. - * @param {ASTNode} ast The `Program` node to analyze. - * @param {Object} parserOptions The parser options. - * @param {Object} visitorKeys The visitor keys. - * @returns {ScopeManager} The analysis result. - */ -function analyzeScope(ast, parserOptions, visitorKeys) { - const ecmaFeatures = parserOptions.ecmaFeatures || {}; - const ecmaVersion = parserOptions.ecmaVersion || 5; - - return eslintScope.analyze(ast, { - ignoreEval: true, - nodejsScope: ecmaFeatures.globalReturn, - impliedStrict: ecmaFeatures.impliedStrict, - ecmaVersion, - sourceType: parserOptions.sourceType || "script", - childVisitorKeys: visitorKeys || evk.KEYS, - fallback: Traverser.getKeys - }); -} - -/** - * Parses text into an AST. Moved out here because the try-catch prevents - * optimization of functions, so it's best to keep the try-catch as isolated - * as possible - * @param {string} text The text to parse. - * @param {Object} providedParserOptions Options to pass to the parser - * @param {string} parserName The name of the parser - * @param {Map} parserMap A map from names to loaded parsers - * @param {string} filePath The path to the file being parsed. - * @returns {{success: false, error: Problem}|{success: true, sourceCode: SourceCode}} - * An object containing the AST and parser services if parsing was successful, or the error if parsing failed - * @private - */ -function parse(text, providedParserOptions, parserName, parserMap, filePath) { - - - const textToParse = stripUnicodeBOM(text).replace(astUtils.SHEBANG_MATCHER, (match, captured) => `//${captured}`); - const parserOptions = Object.assign({}, providedParserOptions, { - loc: true, - range: true, - raw: true, - tokens: true, - comment: true, - eslintVisitorKeys: true, - eslintScopeManager: true, - filePath - }); - - let parser; - - try { - parser = parserMap.get(parserName) || require(parserName); - } catch (ex) { - return { - success: false, - error: { - ruleId: null, - fatal: true, - severity: 2, - source: null, - message: ex.message, - line: 0, - column: 0 - } - }; - } - - /* - * Check for parsing errors first. If there's a parsing error, nothing - * else can happen. However, a parsing error does not throw an error - * from this method - it's just considered a fatal error message, a - * problem that ESLint identified just like any other. - */ - try { - const parseResult = (typeof parser.parseForESLint === "function") - ? parser.parseForESLint(textToParse, parserOptions) - : { ast: parser.parse(textToParse, parserOptions) }; - const ast = parseResult.ast; - const parserServices = parseResult.services || {}; - const visitorKeys = parseResult.visitorKeys || evk.KEYS; - const scopeManager = parseResult.scopeManager || analyzeScope(ast, parserOptions, visitorKeys); - - return { - success: true, - - /* - * Save all values that `parseForESLint()` returned. - * If a `SourceCode` object is given as the first parameter instead of source code text, - * linter skips the parsing process and reuses the source code object. - * In that case, linter needs all the values that `parseForESLint()` returned. - */ - sourceCode: new SourceCode({ - text, - ast, - parserServices, - scopeManager, - visitorKeys - }) - }; - } catch (ex) { - - // If the message includes a leading line number, strip it: - const message = `Parsing error: ${ex.message.replace(/^line \d+:/i, "").trim()}`; - const source = ex.lineNumber ? SourceCode.splitLines(text)[ex.lineNumber - 1] : null; - - return { - success: false, - error: { - ruleId: null, - fatal: true, - severity: 2, - source, - message, - line: ex.lineNumber, - column: ex.column - } - }; - } -} - -/** - * Gets the scope for the current node - * @param {ScopeManager} scopeManager The scope manager for this AST - * @param {ASTNode} currentNode The node to get the scope of - * @param {number} ecmaVersion The `ecmaVersion` setting that this code was parsed with - * @returns {eslint-scope.Scope} The scope information for this node - */ -function getScope(scopeManager, currentNode, ecmaVersion) { - let initialNode; - - // if current node introduces a scope, add it to the list - if ( - ["FunctionDeclaration", "FunctionExpression", "ArrowFunctionExpression"].indexOf(currentNode.type) >= 0 || - ecmaVersion >= 6 && ["BlockStatement", "SwitchStatement", "CatchClause"].indexOf(currentNode.type) >= 0 - ) { - initialNode = currentNode; - } else { - initialNode = currentNode.parent; - } - - // Ascend the current node's parents - for (let node = initialNode; node; node = node.parent) { - - // Get the innermost scope - const scope = scopeManager.acquire(node, true); - - if (scope) { - if (scope.type === "function-expression-name") { - return scope.childScopes[0]; - } - return scope; - } - } - - return scopeManager.scopes[0]; -} - -/** - * Marks a variable as used in the current scope - * @param {ScopeManager} scopeManager The scope manager for this AST. The scope may be mutated by this function. - * @param {ASTNode} currentNode The node currently being traversed - * @param {Object} parserOptions The options used to parse this text - * @param {string} name The name of the variable that should be marked as used. - * @returns {boolean} True if the variable was found and marked as used, false if not. - */ -function markVariableAsUsed(scopeManager, currentNode, parserOptions, name) { - const hasGlobalReturn = parserOptions.ecmaFeatures && parserOptions.ecmaFeatures.globalReturn; - const specialScope = hasGlobalReturn || parserOptions.sourceType === "module"; - const currentScope = getScope(scopeManager, currentNode, parserOptions.ecmaVersion); - - // Special Node.js scope means we need to start one level deeper - const initialScope = currentScope.type === "global" && specialScope ? currentScope.childScopes[0] : currentScope; - - for (let scope = initialScope; scope; scope = scope.upper) { - const variable = scope.variables.find(scopeVar => scopeVar.name === name); - - if (variable) { - variable.eslintUsed = true; - return true; - } - } - - return false; -} - -/** - * Runs a rule, and gets its listeners - * @param {Rule} rule A normalized rule with a `create` method - * @param {Context} ruleContext The context that should be passed to the rule - * @returns {Object} A map of selector listeners provided by the rule - */ -function createRuleListeners(rule, ruleContext) { - try { - return rule.create(ruleContext); - } catch (ex) { - ex.message = `Error while loading rule '${ruleContext.id}': ${ex.message}`; - throw ex; - } -} - -// methods that exist on SourceCode object -const DEPRECATED_SOURCECODE_PASSTHROUGHS = { - getSource: "getText", - getSourceLines: "getLines", - getAllComments: "getAllComments", - getNodeByRangeIndex: "getNodeByRangeIndex", - getComments: "getComments", - getCommentsBefore: "getCommentsBefore", - getCommentsAfter: "getCommentsAfter", - getCommentsInside: "getCommentsInside", - getJSDocComment: "getJSDocComment", - getFirstToken: "getFirstToken", - getFirstTokens: "getFirstTokens", - getLastToken: "getLastToken", - getLastTokens: "getLastTokens", - getTokenAfter: "getTokenAfter", - getTokenBefore: "getTokenBefore", - getTokenByRangeStart: "getTokenByRangeStart", - getTokens: "getTokens", - getTokensAfter: "getTokensAfter", - getTokensBefore: "getTokensBefore", - getTokensBetween: "getTokensBetween" -}; - -const BASE_TRAVERSAL_CONTEXT = Object.freeze( - Object.keys(DEPRECATED_SOURCECODE_PASSTHROUGHS).reduce( - (contextInfo, methodName) => - Object.assign(contextInfo, { - [methodName]() { - const sourceCode = this.getSourceCode(); - - return sourceCode[DEPRECATED_SOURCECODE_PASSTHROUGHS[methodName]].apply(sourceCode, arguments); - } - }), - {} - ) -); - -/** - * Runs the given rules on the given SourceCode object - * @param {SourceCode} sourceCode A SourceCode object for the given text - * @param {Object} configuredRules The rules configuration - * @param {function(string): Rule} ruleMapper A mapper function from rule names to rules - * @param {Object} parserOptions The options that were passed to the parser - * @param {string} parserName The name of the parser in the config - * @param {Object} settings The settings that were enabled in the config - * @param {string} filename The reported filename of the code - * @returns {Problem[]} An array of reported problems - */ -function runRules(sourceCode, configuredRules, ruleMapper, parserOptions, parserName, settings, filename) { - const emitter = createEmitter(); - const traverser = new Traverser(); - - /* - * Create a frozen object with the ruleContext properties and methods that are shared by all rules. - * All rule contexts will inherit from this object. This avoids the performance penalty of copying all the - * properties once for each rule. - */ - const sharedTraversalContext = Object.freeze( - Object.assign( - Object.create(BASE_TRAVERSAL_CONTEXT), - { - getAncestors: () => traverser.parents(), - getDeclaredVariables: sourceCode.scopeManager.getDeclaredVariables.bind(sourceCode.scopeManager), - getFilename: () => filename, - getScope: () => getScope(sourceCode.scopeManager, traverser.current(), parserOptions.ecmaVersion), - getSourceCode: () => sourceCode, - markVariableAsUsed: name => markVariableAsUsed(sourceCode.scopeManager, traverser.current(), parserOptions, name), - parserOptions, - parserPath: parserName, - parserServices: sourceCode.parserServices, - settings, - - /** - * This is used to avoid breaking rules that used to monkeypatch the `Linter#report` method - * by using the `_linter` property on rule contexts. - * - * This should be removed in a major release after we create a better way to - * lint for unused disable comments. - * https://github.com/eslint/eslint/issues/9193 - */ - _linter: { - report() {}, - on: emitter.on - } - } - ) - ); - - - const lintingProblems = []; - - Object.keys(configuredRules).forEach(ruleId => { - const severity = ConfigOps.getRuleSeverity(configuredRules[ruleId]); - - if (severity === 0) { - return; - } - - const rule = ruleMapper(ruleId); - const messageIds = rule.meta && rule.meta.messages; - let reportTranslator = null; - const ruleContext = Object.freeze( - Object.assign( - Object.create(sharedTraversalContext), - { - id: ruleId, - options: getRuleOptions(configuredRules[ruleId]), - report() { - - /* - * Create a report translator lazily. - * In a vast majority of cases, any given rule reports zero errors on a given - * piece of code. Creating a translator lazily avoids the performance cost of - * creating a new translator function for each rule that usually doesn't get - * called. - * - * Using lazy report translators improves end-to-end performance by about 3% - * with Node 8.4.0. - */ - if (reportTranslator === null) { - reportTranslator = createReportTranslator({ ruleId, severity, sourceCode, messageIds }); - } - const problem = reportTranslator.apply(null, arguments); - - if (problem.fix && rule.meta && !rule.meta.fixable) { - throw new Error("Fixable rules should export a `meta.fixable` property."); - } - lintingProblems.push(problem); - - /* - * This is used to avoid breaking rules that used monkeypatch Linter, and relied on - * `linter.report` getting called with report info every time a rule reports a problem. - * To continue to support this, make sure that `context._linter.report` is called every - * time a problem is reported by a rule, even though `context._linter` is no longer a - * `Linter` instance. - * - * This should be removed in a major release after we create a better way to - * lint for unused disable comments. - * https://github.com/eslint/eslint/issues/9193 - */ - sharedTraversalContext._linter.report( // eslint-disable-line no-underscore-dangle - problem.ruleId, - problem.severity, - { loc: { start: { line: problem.line, column: problem.column - 1 } } }, - problem.message - ); - } - } - ) - ); - - const ruleListeners = createRuleListeners(rule, ruleContext); - - // add all the selectors from the rule as listeners - Object.keys(ruleListeners).forEach(selector => { - emitter.on( - selector, - timing.enabled - ? timing.time(ruleId, ruleListeners[selector]) - : ruleListeners[selector] - ); - }); - }); - - const eventGenerator = new CodePathAnalyzer(new NodeEventGenerator(emitter)); - - /* - * Each node has a type property. Whenever a particular type of - * node is found, an event is fired. This allows any listeners to - * automatically be informed that this type of node has been found - * and react accordingly. - */ - traverser.traverse(sourceCode.ast, { - enter(node, parent) { - node.parent = parent; - eventGenerator.enterNode(node); - }, - leave(node) { - eventGenerator.leaveNode(node); - }, - visitorKeys: sourceCode.visitorKeys - }); - - return lintingProblems; -} - -const lastSourceCodes = new WeakMap(); -const loadedParserMaps = new WeakMap(); - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -/** - * Object that is responsible for verifying JavaScript text - * @name eslint - */ -module.exports = class Linter { - - constructor() { - lastSourceCodes.set(this, null); - loadedParserMaps.set(this, new Map()); - this.version = pkg.version; - - this.rules = new Rules(); - this.environments = new Environments(); - } - - /** - * Configuration object for the `verify` API. A JS representation of the eslintrc files. - * @typedef {Object} ESLintConfig - * @property {Object} rules The rule configuration to verify against. - * @property {string} [parser] Parser to use when generatig the AST. - * @property {Object} [parserOptions] Options for the parsed used. - * @property {Object} [settings] Global settings passed to each rule. - * @property {Object} [env] The environment to verify in. - * @property {Object} [globals] Available globals to the code. - */ - - /** - * Same as linter.verify, except without support for processors. - * @param {string|SourceCode} textOrSourceCode The text to parse or a SourceCode object. - * @param {ESLintConfig} providedConfig An ESLintConfig instance to configure everything. - * @param {(string|Object)} [filenameOrOptions] The optional filename of the file being checked. - * If this is not set, the filename will default to '' in the rule context. If - * an object, then it has "filename", "saveState", and "allowInlineConfig" properties. - * @param {boolean} [filenameOrOptions.allowInlineConfig=true] Allow/disallow inline comments' ability to change config once it is set. Defaults to true if not supplied. - * Useful if you want to validate JS without comments overriding rules. - * @param {boolean} [filenameOrOptions.reportUnusedDisableDirectives=false] Adds reported errors for unused - * eslint-disable directives - * @returns {Object[]} The results as an array of messages or an empty array if no messages. - */ - _verifyWithoutProcessors(textOrSourceCode, providedConfig, filenameOrOptions) { - const config = providedConfig || {}; - const options = normalizeVerifyOptions(filenameOrOptions); - let text; - - // evaluate arguments - if (typeof textOrSourceCode === "string") { - lastSourceCodes.set(this, null); - text = textOrSourceCode; - } else { - lastSourceCodes.set(this, textOrSourceCode); - text = textOrSourceCode.text; - } - - // search and apply "eslint-env *". - const envInFile = findEslintEnv(text); - const resolvedEnvConfig = Object.assign({ builtin: true }, config.env, envInFile); - const enabledEnvs = Object.keys(resolvedEnvConfig) - .filter(envName => resolvedEnvConfig[envName]) - .map(envName => this.environments.get(envName)) - .filter(env => env); - - const parserOptions = resolveParserOptions(config.parserOptions || {}, enabledEnvs); - const configuredGlobals = resolveGlobals(config.globals || {}, enabledEnvs); - const parserName = config.parser || DEFAULT_PARSER_NAME; - const settings = config.settings || {}; - - if (!lastSourceCodes.get(this)) { - - // there's no input, just exit here - if (text.trim().length === 0) { - lastSourceCodes.set(this, new SourceCode(text, blankScriptAST)); - return []; - } - - const parseResult = parse( - text, - parserOptions, - parserName, - loadedParserMaps.get(this), - options.filename - ); - - if (!parseResult.success) { - return [parseResult.error]; - } - - lastSourceCodes.set(this, parseResult.sourceCode); - } else { - - /* - * If the given source code object as the first argument does not have scopeManager, analyze the scope. - * This is for backward compatibility (SourceCode is frozen so it cannot rebind). - */ - const lastSourceCode = lastSourceCodes.get(this); - - if (!lastSourceCode.scopeManager) { - lastSourceCodes.set(this, new SourceCode({ - text: lastSourceCode.text, - ast: lastSourceCode.ast, - parserServices: lastSourceCode.parserServices, - visitorKeys: lastSourceCode.visitorKeys, - scopeManager: analyzeScope(lastSourceCode.ast, parserOptions) - })); - } - } - - const sourceCode = lastSourceCodes.get(this); - const commentDirectives = options.allowInlineConfig - ? getDirectiveComments(options.filename, sourceCode.ast, ruleId => this.rules.get(ruleId)) - : { configuredRules: {}, enabledGlobals: {}, exportedVariables: {}, problems: [], disableDirectives: [] }; - - // augment global scope with declared global variables - addDeclaredGlobals( - sourceCode.scopeManager.scopes[0], - configuredGlobals, - { exportedVariables: commentDirectives.exportedVariables, enabledGlobals: commentDirectives.enabledGlobals } - ); - - const configuredRules = Object.assign({}, config.rules, commentDirectives.configuredRules); - - const lintingProblems = runRules( - sourceCode, - configuredRules, - ruleId => this.rules.get(ruleId), - parserOptions, - parserName, - settings, - options.filename - ); - - return applyDisableDirectives({ - directives: commentDirectives.disableDirectives, - problems: lintingProblems - .concat(commentDirectives.problems) - .sort((problemA, problemB) => problemA.line - problemB.line || problemA.column - problemB.column), - reportUnusedDisableDirectives: options.reportUnusedDisableDirectives - }); - } - - /** - * Verifies the text against the rules specified by the second argument. - * @param {string|SourceCode} textOrSourceCode The text to parse or a SourceCode object. - * @param {ESLintConfig} config An ESLintConfig instance to configure everything. - * @param {(string|Object)} [filenameOrOptions] The optional filename of the file being checked. - * If this is not set, the filename will default to '' in the rule context. If - * an object, then it has "filename", "saveState", and "allowInlineConfig" properties. - * @param {boolean} [saveState] Indicates if the state from the last run should be saved. - * Mostly useful for testing purposes. - * @param {boolean} [filenameOrOptions.allowInlineConfig] Allow/disallow inline comments' ability to change config once it is set. Defaults to true if not supplied. - * Useful if you want to validate JS without comments overriding rules. - * @param {function(string): string[]} [filenameOrOptions.preprocess] preprocessor for source text. If provided, - * this should accept a string of source text, and return an array of code blocks to lint. - * @param {function(Array): Object[]} [filenameOrOptions.postprocess] postprocessor for report messages. If provided, - * this should accept an array of the message lists for each code block returned from the preprocessor, - * apply a mapping to the messages as appropriate, and return a one-dimensional array of messages - * @returns {Object[]} The results as an array of messages or an empty array if no messages. - */ - verify(textOrSourceCode, config, filenameOrOptions) { - const preprocess = filenameOrOptions && filenameOrOptions.preprocess || (rawText => [rawText]); - const postprocess = filenameOrOptions && filenameOrOptions.postprocess || lodash.flatten; - - return postprocess( - preprocess(textOrSourceCode).map( - textBlock => this._verifyWithoutProcessors(textBlock, config, filenameOrOptions) - ) - ); - } - - /** - * Gets the SourceCode object representing the parsed source. - * @returns {SourceCode} The SourceCode object. - */ - getSourceCode() { - return lastSourceCodes.get(this); - } - - /** - * Defines a new linting rule. - * @param {string} ruleId A unique rule identifier - * @param {Function} ruleModule Function from context to object mapping AST node types to event handlers - * @returns {void} - */ - defineRule(ruleId, ruleModule) { - this.rules.define(ruleId, ruleModule); - } - - /** - * Defines many new linting rules. - * @param {Object} rulesToDefine map from unique rule identifier to rule - * @returns {void} - */ - defineRules(rulesToDefine) { - Object.getOwnPropertyNames(rulesToDefine).forEach(ruleId => { - this.defineRule(ruleId, rulesToDefine[ruleId]); - }); - } - - /** - * Gets an object with all loaded rules. - * @returns {Map} All loaded rules - */ - getRules() { - return this.rules.getAllLoadedRules(); - } - - /** - * Define a new parser module - * @param {any} parserId Name of the parser - * @param {any} parserModule The parser object - * @returns {void} - */ - defineParser(parserId, parserModule) { - loadedParserMaps.get(this).set(parserId, parserModule); - } - - /** - * Performs multiple autofix passes over the text until as many fixes as possible - * have been applied. - * @param {string} text The source text to apply fixes to. - * @param {Object} config The ESLint config object to use. - * @param {Object} options The ESLint options object to use. - * @param {string} options.filename The filename from which the text was read. - * @param {boolean} options.allowInlineConfig Flag indicating if inline comments - * should be allowed. - * @param {boolean|Function} options.fix Determines whether fixes should be applied - * @param {Function} options.preprocess preprocessor for source text. If provided, this should - * accept a string of source text, and return an array of code blocks to lint. - * @param {Function} options.postprocess postprocessor for report messages. If provided, - * this should accept an array of the message lists for each code block returned from the preprocessor, - * apply a mapping to the messages as appropriate, and return a one-dimensional array of messages - * @returns {Object} The result of the fix operation as returned from the - * SourceCodeFixer. - */ - verifyAndFix(text, config, options) { - let messages = [], - fixedResult, - fixed = false, - passNumber = 0, - currentText = text; - const debugTextDescription = options && options.filename || `${text.slice(0, 10)}...`; - const shouldFix = options && typeof options.fix !== "undefined" ? options.fix : true; - - /** - * This loop continues until one of the following is true: - * - * 1. No more fixes have been applied. - * 2. Ten passes have been made. - * - * That means anytime a fix is successfully applied, there will be another pass. - * Essentially, guaranteeing a minimum of two passes. - */ - do { - passNumber++; - - debug(`Linting code for ${debugTextDescription} (pass ${passNumber})`); - messages = this.verify(currentText, config, options); - - debug(`Generating fixed text for ${debugTextDescription} (pass ${passNumber})`); - fixedResult = SourceCodeFixer.applyFixes(currentText, messages, shouldFix); - - /* - * stop if there are any syntax errors. - * 'fixedResult.output' is a empty string. - */ - if (messages.length === 1 && messages[0].fatal) { - break; - } - - // keep track if any fixes were ever applied - important for return value - fixed = fixed || fixedResult.fixed; - - // update to use the fixed output instead of the original text - currentText = fixedResult.output; - - } while ( - fixedResult.fixed && - passNumber < MAX_AUTOFIX_PASSES - ); - - /* - * If the last result had fixes, we need to lint again to be sure we have - * the most up-to-date information. - */ - if (fixedResult.fixed) { - fixedResult.messages = this.verify(currentText, config, options); - } - - // ensure the last result properly reflects if fixes were done - fixedResult.fixed = fixed; - fixedResult.output = currentText; - - return fixedResult; - } -}; diff --git a/node_modules/eslint/lib/load-rules.js b/node_modules/eslint/lib/load-rules.js deleted file mode 100644 index a9da956..0000000 --- a/node_modules/eslint/lib/load-rules.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @fileoverview Module for loading rules from files and directories. - * @author Michael Ficarra - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const fs = require("fs"), - path = require("path"); - -const rulesDirCache = {}; - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -/** - * Load all rule modules from specified directory. - * @param {string} [relativeRulesDir] Path to rules directory, may be relative. Defaults to `lib/rules`. - * @param {string} cwd Current working directory - * @returns {Object} Loaded rule modules by rule ids (file names). - */ -module.exports = function(relativeRulesDir, cwd) { - - const rulesDir = relativeRulesDir - ? path.resolve(cwd, relativeRulesDir) - : path.join(__dirname, "rules"); - - // cache will help performance as IO operation are expensive - if (rulesDirCache[rulesDir]) { - return rulesDirCache[rulesDir]; - } - - const rules = Object.create(null); - - fs.readdirSync(rulesDir).forEach(file => { - if (path.extname(file) !== ".js") { - return; - } - rules[file.slice(0, -3)] = path.join(rulesDir, file); - }); - rulesDirCache[rulesDir] = rules; - - return rules; -}; diff --git a/node_modules/eslint/lib/logging.js b/node_modules/eslint/lib/logging.js deleted file mode 100644 index 22451e5..0000000 --- a/node_modules/eslint/lib/logging.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * @fileoverview Handle logging for ESLint - * @author Gyandeep Singh - */ - -"use strict"; - -/* eslint no-console: "off" */ - -/* istanbul ignore next */ -module.exports = { - - /** - * Cover for console.log - * @returns {void} - */ - info() { - console.log.apply(console, arguments); - }, - - /** - * Cover for console.error - * @returns {void} - */ - error() { - console.error.apply(console, arguments); - } -}; diff --git a/node_modules/eslint/lib/options.js b/node_modules/eslint/lib/options.js deleted file mode 100644 index 9265d15..0000000 --- a/node_modules/eslint/lib/options.js +++ /dev/null @@ -1,241 +0,0 @@ -/** - * @fileoverview Options configuration for optionator. - * @author George Zahariev - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const optionator = require("optionator"); - -//------------------------------------------------------------------------------ -// Initialization and Public Interface -//------------------------------------------------------------------------------ - -// exports "parse(args)", "generateHelp()", and "generateHelpForOption(optionName)" -module.exports = optionator({ - prepend: "eslint [options] file.js [file.js] [dir]", - defaults: { - concatRepeatedArrays: true, - mergeRepeatedObjects: true - }, - options: [ - { - heading: "Basic configuration" - }, - { - option: "eslintrc", - type: "Boolean", - default: "true", - description: "Disable use of configuration from .eslintrc.*" - }, - { - option: "config", - alias: "c", - type: "path::String", - description: "Use this configuration, overriding .eslintrc.* config options if present" - }, - { - option: "env", - type: "[String]", - description: "Specify environments" - }, - { - option: "ext", - type: "[String]", - default: ".js", - description: "Specify JavaScript file extensions" - }, - { - option: "global", - type: "[String]", - description: "Define global variables" - }, - { - option: "parser", - type: "String", - description: "Specify the parser to be used" - }, - { - option: "parser-options", - type: "Object", - description: "Specify parser options" - }, - { - heading: "Specifying rules and plugins" - }, - { - option: "rulesdir", - type: "[path::String]", - description: "Use additional rules from this directory" - }, - { - option: "plugin", - type: "[String]", - description: "Specify plugins" - }, - { - option: "rule", - type: "Object", - description: "Specify rules" - }, - { - heading: "Fixing problems" - }, - { - option: "fix", - type: "Boolean", - default: false, - description: "Automatically fix problems" - }, - { - option: "fix-dry-run", - type: "Boolean", - default: false, - description: "Automatically fix problems without saving the changes to the file system" - }, - { - heading: "Ignoring files" - }, - { - option: "ignore-path", - type: "path::String", - description: "Specify path of ignore file" - }, - { - option: "ignore", - type: "Boolean", - default: "true", - description: "Disable use of ignore files and patterns" - }, - { - option: "ignore-pattern", - type: "[String]", - description: "Pattern of files to ignore (in addition to those in .eslintignore)", - concatRepeatedArrays: [true, { - oneValuePerFlag: true - }] - }, - { - heading: "Using stdin" - }, - { - option: "stdin", - type: "Boolean", - default: "false", - description: "Lint code provided on " - }, - { - option: "stdin-filename", - type: "String", - description: "Specify filename to process STDIN as" - }, - { - heading: "Handling warnings" - }, - { - option: "quiet", - type: "Boolean", - default: "false", - description: "Report errors only" - }, - { - option: "max-warnings", - type: "Int", - default: "-1", - description: "Number of warnings to trigger nonzero exit code" - }, - { - heading: "Output" - }, - { - option: "output-file", - alias: "o", - type: "path::String", - description: "Specify file to write report to" - }, - { - option: "format", - alias: "f", - type: "String", - default: "stylish", - description: "Use a specific output format" - }, - { - option: "color", - type: "Boolean", - alias: "no-color", - description: "Force enabling/disabling of color" - }, - { - heading: "Inline configuration comments" - }, - { - option: "inline-config", - type: "Boolean", - default: "true", - description: "Prevent comments from changing config or rules" - }, - { - option: "report-unused-disable-directives", - type: "Boolean", - default: false, - description: "Adds reported errors for unused eslint-disable directives" - }, - { - heading: "Caching" - }, - { - option: "cache", - type: "Boolean", - default: "false", - description: "Only check changed files" - }, - { - option: "cache-file", - type: "path::String", - default: ".eslintcache", - description: "Path to the cache file. Deprecated: use --cache-location" - }, - { - option: "cache-location", - type: "path::String", - description: "Path to the cache file or directory" - }, - { - heading: "Miscellaneous" - }, - { - option: "init", - type: "Boolean", - default: "false", - description: "Run config initialization wizard" - }, - { - option: "debug", - type: "Boolean", - default: false, - description: "Output debugging information" - }, - { - option: "help", - alias: "h", - type: "Boolean", - description: "Show help" - }, - { - option: "version", - alias: "v", - type: "Boolean", - description: "Output the version number" - }, - { - option: "print-config", - type: "path::String", - description: "Print the configuration for the given file" - } - ] -}); diff --git a/node_modules/eslint/lib/report-translator.js b/node_modules/eslint/lib/report-translator.js deleted file mode 100644 index 7893a1f..0000000 --- a/node_modules/eslint/lib/report-translator.js +++ /dev/null @@ -1,286 +0,0 @@ -/** - * @fileoverview A helper that translates context.report() calls from the rule API into generic problem objects - * @author Teddy Katz - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const assert = require("assert"); -const ruleFixer = require("./util/rule-fixer"); -const interpolate = require("./util/interpolate"); - -//------------------------------------------------------------------------------ -// Typedefs -//------------------------------------------------------------------------------ - -/** - * An error message description - * @typedef {Object} MessageDescriptor - * @property {ASTNode} [node] The reported node - * @property {Location} loc The location of the problem. - * @property {string} message The problem message. - * @property {Object} [data] Optional data to use to fill in placeholders in the - * message. - * @property {Function} [fix] The function to call that creates a fix command. - */ - -/** - * Information about the report - * @typedef {Object} ReportInfo - * @property {string} ruleId - * @property {(0|1|2)} severity - * @property {(string|undefined)} message - * @property {(string|undefined)} messageId - * @property {number} line - * @property {number} column - * @property {(number|undefined)} endLine - * @property {(number|undefined)} endColumn - * @property {(string|null)} nodeType - * @property {string} source - * @property {({text: string, range: (number[]|null)}|null)} fix - */ - -//------------------------------------------------------------------------------ -// Module Definition -//------------------------------------------------------------------------------ - - -/** - * Translates a multi-argument context.report() call into a single object argument call - * @param {...*} arguments A list of arguments passed to `context.report` - * @returns {MessageDescriptor} A normalized object containing report information - */ -function normalizeMultiArgReportCall() { - - // If there is one argument, it is considered to be a new-style call already. - if (arguments.length === 1) { - - // Shallow clone the object to avoid surprises if reusing the descriptor - return Object.assign({}, arguments[0]); - } - - // If the second argument is a string, the arguments are interpreted as [node, message, data, fix]. - if (typeof arguments[1] === "string") { - return { - node: arguments[0], - message: arguments[1], - data: arguments[2], - fix: arguments[3] - }; - } - - // Otherwise, the arguments are interpreted as [node, loc, message, data, fix]. - return { - node: arguments[0], - loc: arguments[1], - message: arguments[2], - data: arguments[3], - fix: arguments[4] - }; -} - -/** - * Asserts that either a loc or a node was provided, and the node is valid if it was provided. - * @param {MessageDescriptor} descriptor A descriptor to validate - * @returns {void} - * @throws AssertionError if neither a node nor a loc was provided, or if the node is not an object - */ -function assertValidNodeInfo(descriptor) { - if (descriptor.node) { - assert(typeof descriptor.node === "object", "Node must be an object"); - } else { - assert(descriptor.loc, "Node must be provided when reporting error if location is not provided"); - } -} - -/** - * Normalizes a MessageDescriptor to always have a `loc` with `start` and `end` properties - * @param {MessageDescriptor} descriptor A descriptor for the report from a rule. - * @returns {{start: Location, end: (Location|null)}} An updated location that infers the `start` and `end` properties - * from the `node` of the original descriptor, or infers the `start` from the `loc` of the original descriptor. - */ -function normalizeReportLoc(descriptor) { - if (descriptor.loc) { - if (descriptor.loc.start) { - return descriptor.loc; - } - return { start: descriptor.loc, end: null }; - } - return descriptor.node.loc; -} - -/** - * Interpolates data placeholders in report messages - * @param {MessageDescriptor} descriptor The report message descriptor. - * @returns {string} The interpolated message for the descriptor - */ -function normalizeMessagePlaceholders(descriptor) { - return interpolate(descriptor.message, descriptor.data); -} - -/** - * Compares items in a fixes array by range. - * @param {Fix} a The first message. - * @param {Fix} b The second message. - * @returns {int} -1 if a comes before b, 1 if a comes after b, 0 if equal. - * @private - */ -function compareFixesByRange(a, b) { - return a.range[0] - b.range[0] || a.range[1] - b.range[1]; -} - -/** - * Merges the given fixes array into one. - * @param {Fix[]} fixes The fixes to merge. - * @param {SourceCode} sourceCode The source code object to get the text between fixes. - * @returns {{text: string, range: number[]}} The merged fixes - */ -function mergeFixes(fixes, sourceCode) { - if (fixes.length === 0) { - return null; - } - if (fixes.length === 1) { - return fixes[0]; - } - - fixes.sort(compareFixesByRange); - - const originalText = sourceCode.text; - const start = fixes[0].range[0]; - const end = fixes[fixes.length - 1].range[1]; - let text = ""; - let lastPos = Number.MIN_SAFE_INTEGER; - - for (const fix of fixes) { - assert(fix.range[0] >= lastPos, "Fix objects must not be overlapped in a report."); - - if (fix.range[0] >= 0) { - text += originalText.slice(Math.max(0, start, lastPos), fix.range[0]); - } - text += fix.text; - lastPos = fix.range[1]; - } - text += originalText.slice(Math.max(0, start, lastPos), end); - - return { range: [start, end], text }; -} - -/** - * Gets one fix object from the given descriptor. - * If the descriptor retrieves multiple fixes, this merges those to one. - * @param {MessageDescriptor} descriptor The report descriptor. - * @param {SourceCode} sourceCode The source code object to get text between fixes. - * @returns {({text: string, range: number[]}|null)} The fix for the descriptor - */ -function normalizeFixes(descriptor, sourceCode) { - if (typeof descriptor.fix !== "function") { - return null; - } - - // @type {null | Fix | Fix[] | IterableIterator} - const fix = descriptor.fix(ruleFixer); - - // Merge to one. - if (fix && Symbol.iterator in fix) { - return mergeFixes(Array.from(fix), sourceCode); - } - return fix; -} - -/** - * Creates information about the report from a descriptor - * @param {Object} options Information about the problem - * @param {string} options.ruleId Rule ID - * @param {(0|1|2)} options.severity Rule severity - * @param {(ASTNode|null)} options.node Node - * @param {string} options.message Error message - * @param {{start: SourceLocation, end: (SourceLocation|null)}} options.loc Start and end location - * @param {{text: string, range: (number[]|null)}} options.fix The fix object - * @param {string[]} options.sourceLines Source lines - * @returns {function(...args): ReportInfo} Function that returns information about the report - */ -function createProblem(options) { - const problem = { - ruleId: options.ruleId, - severity: options.severity, - message: options.message, - line: options.loc.start.line, - column: options.loc.start.column + 1, - nodeType: options.node && options.node.type || null, - source: options.sourceLines[options.loc.start.line - 1] || "" - }; - - /* - * If this isn’t in the conditional, some of the tests fail - * because `messageId` is present in the problem object - */ - if (options.messageId) { - problem.messageId = options.messageId; - } - - if (options.loc.end) { - problem.endLine = options.loc.end.line; - problem.endColumn = options.loc.end.column + 1; - } - - if (options.fix) { - problem.fix = options.fix; - } - - return problem; -} - -/** - * Returns a function that converts the arguments of a `context.report` call from a rule into a reported - * problem for the Node.js API. - * @param {{ruleId: string, severity: number, sourceCode: SourceCode, messageIds: Object}} metadata Metadata for the reported problem - * @param {SourceCode} sourceCode The `SourceCode` instance for the text being linted - * @returns {function(...args): ReportInfo} Function that returns information about the report - */ - -module.exports = function createReportTranslator(metadata) { - - /* - * `createReportTranslator` gets called once per enabled rule per file. It needs to be very performant. - * The report translator itself (i.e. the function that `createReportTranslator` returns) gets - * called every time a rule reports a problem, which happens much less frequently (usually, the vast - * majority of rules don't report any problems for a given file). - */ - return function() { - const descriptor = normalizeMultiArgReportCall.apply(null, arguments); - - assertValidNodeInfo(descriptor); - - if (descriptor.messageId) { - if (!metadata.messageIds) { - throw new TypeError("context.report() called with a messageId, but no messages were present in the rule metadata."); - } - const id = descriptor.messageId; - const messages = metadata.messageIds; - - if (descriptor.message) { - throw new TypeError("context.report() called with a message and a messageId. Please only pass one."); - } - if (!messages || !Object.prototype.hasOwnProperty.call(messages, id)) { - throw new TypeError(`context.report() called with a messageId of '${id}' which is not present in the 'messages' config: ${JSON.stringify(messages, null, 2)}`); - } - descriptor.message = messages[id]; - } - - - return createProblem({ - ruleId: metadata.ruleId, - severity: metadata.severity, - node: descriptor.node, - message: normalizeMessagePlaceholders(descriptor), - messageId: descriptor.messageId, - loc: normalizeReportLoc(descriptor), - fix: normalizeFixes(descriptor, metadata.sourceCode), - sourceLines: metadata.sourceCode.lines - }); - }; -}; diff --git a/node_modules/eslint/lib/rules.js b/node_modules/eslint/lib/rules.js deleted file mode 100644 index 040f9db..0000000 --- a/node_modules/eslint/lib/rules.js +++ /dev/null @@ -1,140 +0,0 @@ -/** - * @fileoverview Defines a storage for rules. - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); -const loadRules = require("./load-rules"); -const ruleReplacements = require("../conf/replacements").rules; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Creates a stub rule that gets used when a rule with a given ID is not found. - * @param {string} ruleId The ID of the missing rule - * @returns {{create: function(RuleContext): Object}} A rule that reports an error at the first location - * in the program. The report has the message `Definition for rule '${ruleId}' was not found` if the rule is unknown, - * or `Rule '${ruleId}' was removed and replaced by: ${replacements.join(", ")}` if the rule is known to have been - * replaced. - */ -const createMissingRule = lodash.memoize(ruleId => { - const message = Object.prototype.hasOwnProperty.call(ruleReplacements, ruleId) - ? `Rule '${ruleId}' was removed and replaced by: ${ruleReplacements[ruleId].join(", ")}` - : `Definition for rule '${ruleId}' was not found`; - - return { - create: context => ({ - Program() { - context.report({ - loc: { line: 1, column: 0 }, - message - }); - } - }) - }; -}); - -/** - * Normalizes a rule module to the new-style API - * @param {(Function|{create: Function})} rule A rule object, which can either be a function - * ("old-style") or an object with a `create` method ("new-style") - * @returns {{create: Function}} A new-style rule. - */ -function normalizeRule(rule) { - return typeof rule === "function" ? Object.assign({ create: rule }, rule) : rule; -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -class Rules { - constructor() { - this._rules = Object.create(null); - - this.load(); - } - - /** - * Registers a rule module for rule id in storage. - * @param {string} ruleId Rule id (file name). - * @param {Function} ruleModule Rule handler. - * @returns {void} - */ - define(ruleId, ruleModule) { - this._rules[ruleId] = normalizeRule(ruleModule); - } - - /** - * Loads and registers all rules from passed rules directory. - * @param {string} [rulesDir] Path to rules directory, may be relative. Defaults to `lib/rules`. - * @param {string} cwd Current working directory - * @returns {void} - */ - load(rulesDir, cwd) { - const newRules = loadRules(rulesDir, cwd); - - Object.keys(newRules).forEach(ruleId => { - this.define(ruleId, newRules[ruleId]); - }); - } - - /** - * Registers all given rules of a plugin. - * @param {Object} plugin The plugin object to import. - * @param {string} pluginName The name of the plugin without prefix (`eslint-plugin-`). - * @returns {void} - */ - importPlugin(plugin, pluginName) { - if (plugin.rules) { - Object.keys(plugin.rules).forEach(ruleId => { - const qualifiedRuleId = `${pluginName}/${ruleId}`, - rule = plugin.rules[ruleId]; - - this.define(qualifiedRuleId, rule); - }); - } - } - - /** - * Access rule handler by id (file name). - * @param {string} ruleId Rule id (file name). - * @returns {{create: Function, schema: JsonSchema[]}} - * A rule. This is normalized to always have the new-style shape with a `create` method. - */ - get(ruleId) { - if (!Object.prototype.hasOwnProperty.call(this._rules, ruleId)) { - return createMissingRule(ruleId); - } - if (typeof this._rules[ruleId] === "string") { - return normalizeRule(require(this._rules[ruleId])); - } - return this._rules[ruleId]; - - } - - /** - * Get an object with all currently loaded rules - * @returns {Map} All loaded rules - */ - getAllLoadedRules() { - const allRules = new Map(); - - Object.keys(this._rules).forEach(name => { - const rule = this.get(name); - - allRules.set(name, rule); - }); - return allRules; - } -} - -module.exports = Rules; diff --git a/node_modules/eslint/lib/rules/.eslintrc.yml b/node_modules/eslint/lib/rules/.eslintrc.yml deleted file mode 100644 index 64b3cee..0000000 --- a/node_modules/eslint/lib/rules/.eslintrc.yml +++ /dev/null @@ -1,4 +0,0 @@ -rules: - rulesdir/no-invalid-meta: "error" - rulesdir/consistent-docs-description: "error" - rulesdir/consistent-docs-url: "error" diff --git a/node_modules/eslint/lib/rules/accessor-pairs.js b/node_modules/eslint/lib/rules/accessor-pairs.js deleted file mode 100644 index 6860729..0000000 --- a/node_modules/eslint/lib/rules/accessor-pairs.js +++ /dev/null @@ -1,161 +0,0 @@ -/** - * @fileoverview Rule to flag wrapping non-iife in parens - * @author Gyandeep Singh - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a given node is an `Identifier` node which was named a given name. - * @param {ASTNode} node - A node to check. - * @param {string} name - An expected name of the node. - * @returns {boolean} `true` if the node is an `Identifier` node which was named as expected. - */ -function isIdentifier(node, name) { - return node.type === "Identifier" && node.name === name; -} - -/** - * Checks whether or not a given node is an argument of a specified method call. - * @param {ASTNode} node - A node to check. - * @param {number} index - An expected index of the node in arguments. - * @param {string} object - An expected name of the object of the method. - * @param {string} property - An expected name of the method. - * @returns {boolean} `true` if the node is an argument of the specified method call. - */ -function isArgumentOfMethodCall(node, index, object, property) { - const parent = node.parent; - - return ( - parent.type === "CallExpression" && - parent.callee.type === "MemberExpression" && - parent.callee.computed === false && - isIdentifier(parent.callee.object, object) && - isIdentifier(parent.callee.property, property) && - parent.arguments[index] === node - ); -} - -/** - * Checks whether or not a given node is a property descriptor. - * @param {ASTNode} node - A node to check. - * @returns {boolean} `true` if the node is a property descriptor. - */ -function isPropertyDescriptor(node) { - - // Object.defineProperty(obj, "foo", {set: ...}) - if (isArgumentOfMethodCall(node, 2, "Object", "defineProperty") || - isArgumentOfMethodCall(node, 2, "Reflect", "defineProperty") - ) { - return true; - } - - /* - * Object.defineProperties(obj, {foo: {set: ...}}) - * Object.create(proto, {foo: {set: ...}}) - */ - const grandparent = node.parent.parent; - - return grandparent.type === "ObjectExpression" && ( - isArgumentOfMethodCall(grandparent, 1, "Object", "create") || - isArgumentOfMethodCall(grandparent, 1, "Object", "defineProperties") - ); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce getter and setter pairs in objects", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/accessor-pairs" - }, - schema: [{ - type: "object", - properties: { - getWithoutSet: { - type: "boolean" - }, - setWithoutGet: { - type: "boolean" - } - }, - additionalProperties: false - }], - messages: { - getter: "Getter is not present.", - setter: "Setter is not present." - } - }, - create(context) { - const config = context.options[0] || {}; - const checkGetWithoutSet = config.getWithoutSet === true; - const checkSetWithoutGet = config.setWithoutGet !== false; - - /** - * Checks a object expression to see if it has setter and getter both present or none. - * @param {ASTNode} node The node to check. - * @returns {void} - * @private - */ - function checkLonelySetGet(node) { - let isSetPresent = false; - let isGetPresent = false; - const isDescriptor = isPropertyDescriptor(node); - - for (let i = 0, end = node.properties.length; i < end; i++) { - const property = node.properties[i]; - - let propToCheck = ""; - - if (property.kind === "init") { - if (isDescriptor && !property.computed) { - propToCheck = property.key.name; - } - } else { - propToCheck = property.kind; - } - - switch (propToCheck) { - case "set": - isSetPresent = true; - break; - - case "get": - isGetPresent = true; - break; - - default: - - // Do nothing - } - - if (isSetPresent && isGetPresent) { - break; - } - } - - if (checkSetWithoutGet && isSetPresent && !isGetPresent) { - context.report({ node, messageId: "getter" }); - } else if (checkGetWithoutSet && isGetPresent && !isSetPresent) { - context.report({ node, messageId: "setter" }); - } - } - - return { - ObjectExpression(node) { - if (checkSetWithoutGet || checkGetWithoutSet) { - checkLonelySetGet(node); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/array-bracket-newline.js b/node_modules/eslint/lib/rules/array-bracket-newline.js deleted file mode 100644 index e190405..0000000 --- a/node_modules/eslint/lib/rules/array-bracket-newline.js +++ /dev/null @@ -1,256 +0,0 @@ -/** - * @fileoverview Rule to enforce linebreaks after open and before close array brackets - * @author Jan Peer Stöcklmair - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce linebreaks after opening and before closing array brackets", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/array-bracket-newline" - }, - fixable: "whitespace", - schema: [ - { - oneOf: [ - { - enum: ["always", "never", "consistent"] - }, - { - type: "object", - properties: { - multiline: { - type: "boolean" - }, - minItems: { - type: ["integer", "null"], - minimum: 0 - } - }, - additionalProperties: false - } - ] - } - ], - messages: { - unexpectedOpeningLinebreak: "There should be no linebreak after '['.", - unexpectedClosingLinebreak: "There should be no linebreak before ']'.", - missingOpeningLinebreak: "A linebreak is required after '['.", - missingClosingLinebreak: "A linebreak is required before ']'." - } - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - - //---------------------------------------------------------------------- - // Helpers - //---------------------------------------------------------------------- - - /** - * Normalizes a given option value. - * - * @param {string|Object|undefined} option - An option value to parse. - * @returns {{multiline: boolean, minItems: number}} Normalized option object. - */ - function normalizeOptionValue(option) { - let consistent = false; - let multiline = false; - let minItems = 0; - - if (option) { - if (option === "consistent") { - consistent = true; - minItems = Number.POSITIVE_INFINITY; - } else if (option === "always" || option.minItems === 0) { - minItems = 0; - } else if (option === "never") { - minItems = Number.POSITIVE_INFINITY; - } else { - multiline = Boolean(option.multiline); - minItems = option.minItems || Number.POSITIVE_INFINITY; - } - } else { - consistent = false; - multiline = true; - minItems = Number.POSITIVE_INFINITY; - } - - return { consistent, multiline, minItems }; - } - - /** - * Normalizes a given option value. - * - * @param {string|Object|undefined} options - An option value to parse. - * @returns {{ArrayExpression: {multiline: boolean, minItems: number}, ArrayPattern: {multiline: boolean, minItems: number}}} Normalized option object. - */ - function normalizeOptions(options) { - const value = normalizeOptionValue(options); - - return { ArrayExpression: value, ArrayPattern: value }; - } - - /** - * Reports that there shouldn't be a linebreak after the first token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportNoBeginningLinebreak(node, token) { - context.report({ - node, - loc: token.loc, - messageId: "unexpectedOpeningLinebreak", - fix(fixer) { - const nextToken = sourceCode.getTokenAfter(token, { includeComments: true }); - - if (astUtils.isCommentToken(nextToken)) { - return null; - } - - return fixer.removeRange([token.range[1], nextToken.range[0]]); - } - }); - } - - /** - * Reports that there shouldn't be a linebreak before the last token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportNoEndingLinebreak(node, token) { - context.report({ - node, - loc: token.loc, - messageId: "unexpectedClosingLinebreak", - fix(fixer) { - const previousToken = sourceCode.getTokenBefore(token, { includeComments: true }); - - if (astUtils.isCommentToken(previousToken)) { - return null; - } - - return fixer.removeRange([previousToken.range[1], token.range[0]]); - } - }); - } - - /** - * Reports that there should be a linebreak after the first token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportRequiredBeginningLinebreak(node, token) { - context.report({ - node, - loc: token.loc, - messageId: "missingOpeningLinebreak", - fix(fixer) { - return fixer.insertTextAfter(token, "\n"); - } - }); - } - - /** - * Reports that there should be a linebreak before the last token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportRequiredEndingLinebreak(node, token) { - context.report({ - node, - loc: token.loc, - messageId: "missingClosingLinebreak", - fix(fixer) { - return fixer.insertTextBefore(token, "\n"); - } - }); - } - - /** - * Reports a given node if it violated this rule. - * - * @param {ASTNode} node - A node to check. This is an ArrayExpression node or an ArrayPattern node. - * @returns {void} - */ - function check(node) { - const elements = node.elements; - const normalizedOptions = normalizeOptions(context.options[0]); - const options = normalizedOptions[node.type]; - const openBracket = sourceCode.getFirstToken(node); - const closeBracket = sourceCode.getLastToken(node); - const firstIncComment = sourceCode.getTokenAfter(openBracket, { includeComments: true }); - const lastIncComment = sourceCode.getTokenBefore(closeBracket, { includeComments: true }); - const first = sourceCode.getTokenAfter(openBracket); - const last = sourceCode.getTokenBefore(closeBracket); - - const needsLinebreaks = ( - elements.length >= options.minItems || - ( - options.multiline && - elements.length > 0 && - firstIncComment.loc.start.line !== lastIncComment.loc.end.line - ) || - ( - elements.length === 0 && - firstIncComment.type === "Block" && - firstIncComment.loc.start.line !== lastIncComment.loc.end.line && - firstIncComment === lastIncComment - ) || - ( - options.consistent && - firstIncComment.loc.start.line !== openBracket.loc.end.line - ) - ); - - /* - * Use tokens or comments to check multiline or not. - * But use only tokens to check whether linebreaks are needed. - * This allows: - * var arr = [ // eslint-disable-line foo - * 'a' - * ] - */ - - if (needsLinebreaks) { - if (astUtils.isTokenOnSameLine(openBracket, first)) { - reportRequiredBeginningLinebreak(node, openBracket); - } - if (astUtils.isTokenOnSameLine(last, closeBracket)) { - reportRequiredEndingLinebreak(node, closeBracket); - } - } else { - if (!astUtils.isTokenOnSameLine(openBracket, first)) { - reportNoBeginningLinebreak(node, openBracket); - } - if (!astUtils.isTokenOnSameLine(last, closeBracket)) { - reportNoEndingLinebreak(node, closeBracket); - } - } - } - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- - - return { - ArrayPattern: check, - ArrayExpression: check - }; - } -}; diff --git a/node_modules/eslint/lib/rules/array-bracket-spacing.js b/node_modules/eslint/lib/rules/array-bracket-spacing.js deleted file mode 100644 index c64ff3d..0000000 --- a/node_modules/eslint/lib/rules/array-bracket-spacing.js +++ /dev/null @@ -1,236 +0,0 @@ -/** - * @fileoverview Disallows or enforces spaces inside of array brackets. - * @author Jamund Ferguson - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing inside array brackets", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/array-bracket-spacing" - }, - fixable: "whitespace", - schema: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - singleValue: { - type: "boolean" - }, - objectsInArrays: { - type: "boolean" - }, - arraysInArrays: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - messages: { - unexpectedSpaceAfter: "There should be no space after '{{tokenValue}}'.", - unexpectedSpaceBefore: "There should be no space before '{{tokenValue}}'.", - missingSpaceAfter: "A space is required after '{{tokenValue}}'.", - missingSpaceBefore: "A space is required before '{{tokenValue}}'." - } - }, - create(context) { - const spaced = context.options[0] === "always", - sourceCode = context.getSourceCode(); - - /** - * Determines whether an option is set, relative to the spacing option. - * If spaced is "always", then check whether option is set to false. - * If spaced is "never", then check whether option is set to true. - * @param {Object} option - The option to exclude. - * @returns {boolean} Whether or not the property is excluded. - */ - function isOptionSet(option) { - return context.options[1] ? context.options[1][option] === !spaced : false; - } - - const options = { - spaced, - singleElementException: isOptionSet("singleValue"), - objectsInArraysException: isOptionSet("objectsInArrays"), - arraysInArraysException: isOptionSet("arraysInArrays") - }; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Reports that there shouldn't be a space after the first token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportNoBeginningSpace(node, token) { - context.report({ - node, - loc: token.loc.start, - messageId: "unexpectedSpaceAfter", - data: { - tokenValue: token.value - }, - fix(fixer) { - const nextToken = sourceCode.getTokenAfter(token); - - return fixer.removeRange([token.range[1], nextToken.range[0]]); - } - }); - } - - /** - * Reports that there shouldn't be a space before the last token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportNoEndingSpace(node, token) { - context.report({ - node, - loc: token.loc.start, - messageId: "unexpectedSpaceBefore", - data: { - tokenValue: token.value - }, - fix(fixer) { - const previousToken = sourceCode.getTokenBefore(token); - - return fixer.removeRange([previousToken.range[1], token.range[0]]); - } - }); - } - - /** - * Reports that there should be a space after the first token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportRequiredBeginningSpace(node, token) { - context.report({ - node, - loc: token.loc.start, - messageId: "missingSpaceAfter", - data: { - tokenValue: token.value - }, - fix(fixer) { - return fixer.insertTextAfter(token, " "); - } - }); - } - - /** - * Reports that there should be a space before the last token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportRequiredEndingSpace(node, token) { - context.report({ - node, - loc: token.loc.start, - messageId: "missingSpaceBefore", - data: { - tokenValue: token.value - }, - fix(fixer) { - return fixer.insertTextBefore(token, " "); - } - }); - } - - /** - * Determines if a node is an object type - * @param {ASTNode} node - The node to check. - * @returns {boolean} Whether or not the node is an object type. - */ - function isObjectType(node) { - return node && (node.type === "ObjectExpression" || node.type === "ObjectPattern"); - } - - /** - * Determines if a node is an array type - * @param {ASTNode} node - The node to check. - * @returns {boolean} Whether or not the node is an array type. - */ - function isArrayType(node) { - return node && (node.type === "ArrayExpression" || node.type === "ArrayPattern"); - } - - /** - * Validates the spacing around array brackets - * @param {ASTNode} node - The node we're checking for spacing - * @returns {void} - */ - function validateArraySpacing(node) { - if (options.spaced && node.elements.length === 0) { - return; - } - - const first = sourceCode.getFirstToken(node), - second = sourceCode.getFirstToken(node, 1), - last = node.typeAnnotation - ? sourceCode.getTokenBefore(node.typeAnnotation) - : sourceCode.getLastToken(node), - penultimate = sourceCode.getTokenBefore(last), - firstElement = node.elements[0], - lastElement = node.elements[node.elements.length - 1]; - - const openingBracketMustBeSpaced = - options.objectsInArraysException && isObjectType(firstElement) || - options.arraysInArraysException && isArrayType(firstElement) || - options.singleElementException && node.elements.length === 1 - ? !options.spaced : options.spaced; - - const closingBracketMustBeSpaced = - options.objectsInArraysException && isObjectType(lastElement) || - options.arraysInArraysException && isArrayType(lastElement) || - options.singleElementException && node.elements.length === 1 - ? !options.spaced : options.spaced; - - if (astUtils.isTokenOnSameLine(first, second)) { - if (openingBracketMustBeSpaced && !sourceCode.isSpaceBetweenTokens(first, second)) { - reportRequiredBeginningSpace(node, first); - } - if (!openingBracketMustBeSpaced && sourceCode.isSpaceBetweenTokens(first, second)) { - reportNoBeginningSpace(node, first); - } - } - - if (first !== penultimate && astUtils.isTokenOnSameLine(penultimate, last)) { - if (closingBracketMustBeSpaced && !sourceCode.isSpaceBetweenTokens(penultimate, last)) { - reportRequiredEndingSpace(node, last); - } - if (!closingBracketMustBeSpaced && sourceCode.isSpaceBetweenTokens(penultimate, last)) { - reportNoEndingSpace(node, last); - } - } - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - ArrayPattern: validateArraySpacing, - ArrayExpression: validateArraySpacing - }; - } -}; diff --git a/node_modules/eslint/lib/rules/array-callback-return.js b/node_modules/eslint/lib/rules/array-callback-return.js deleted file mode 100644 index 2375dcb..0000000 --- a/node_modules/eslint/lib/rules/array-callback-return.js +++ /dev/null @@ -1,255 +0,0 @@ -/** - * @fileoverview Rule to enforce return statements in callbacks of array's methods - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const TARGET_NODE_TYPE = /^(?:Arrow)?FunctionExpression$/; -const TARGET_METHODS = /^(?:every|filter|find(?:Index)?|map|reduce(?:Right)?|some|sort)$/; - -/** - * Checks a given code path segment is reachable. - * - * @param {CodePathSegment} segment - A segment to check. - * @returns {boolean} `true` if the segment is reachable. - */ -function isReachable(segment) { - return segment.reachable; -} - -/** - * Gets a readable location. - * - * - FunctionExpression -> the function name or `function` keyword. - * - ArrowFunctionExpression -> `=>` token. - * - * @param {ASTNode} node - A function node to get. - * @param {SourceCode} sourceCode - A source code to get tokens. - * @returns {ASTNode|Token} The node or the token of a location. - */ -function getLocation(node, sourceCode) { - if (node.type === "ArrowFunctionExpression") { - return sourceCode.getTokenBefore(node.body); - } - return node.id || node; -} - -/** - * Checks a given node is a MemberExpression node which has the specified name's - * property. - * - * @param {ASTNode} node - A node to check. - * @returns {boolean} `true` if the node is a MemberExpression node which has - * the specified name's property - */ -function isTargetMethod(node) { - return ( - node.type === "MemberExpression" && - TARGET_METHODS.test(astUtils.getStaticPropertyName(node) || "") - ); -} - -/** - * Checks whether or not a given node is a function expression which is the - * callback of an array method. - * - * @param {ASTNode} node - A node to check. This is one of - * FunctionExpression or ArrowFunctionExpression. - * @returns {boolean} `true` if the node is the callback of an array method. - */ -function isCallbackOfArrayMethod(node) { - let currentNode = node; - - while (currentNode) { - const parent = currentNode.parent; - - switch (parent.type) { - - /* - * Looks up the destination. e.g., - * foo.every(nativeFoo || function foo() { ... }); - */ - case "LogicalExpression": - case "ConditionalExpression": - currentNode = parent; - break; - - /* - * If the upper function is IIFE, checks the destination of the return value. - * e.g. - * foo.every((function() { - * // setup... - * return function callback() { ... }; - * })()); - */ - case "ReturnStatement": { - const func = astUtils.getUpperFunction(parent); - - if (func === null || !astUtils.isCallee(func)) { - return false; - } - currentNode = func.parent; - break; - } - - /* - * e.g. - * Array.from([], function() {}); - * list.every(function() {}); - */ - case "CallExpression": - if (astUtils.isArrayFromMethod(parent.callee)) { - return ( - parent.arguments.length >= 2 && - parent.arguments[1] === currentNode - ); - } - if (isTargetMethod(parent.callee)) { - return ( - parent.arguments.length >= 1 && - parent.arguments[0] === currentNode - ); - } - return false; - - // Otherwise this node is not target. - default: - return false; - } - } - - /* istanbul ignore next: unreachable */ - return false; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce `return` statements in callbacks of array methods", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/array-callback-return" - }, - - schema: [ - { - type: "object", - properties: { - allowImplicit: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - messages: { - expectedAtEnd: "Expected to return a value at the end of {{name}}.", - expectedInside: "Expected to return a value in {{name}}.", - expectedReturnValue: "{{name}} expected a return value." - } - }, - - create(context) { - - const options = context.options[0] || { allowImplicit: false }; - - let funcInfo = { - upper: null, - codePath: null, - hasReturn: false, - shouldCheck: false, - node: null - }; - - /** - * Checks whether or not the last code path segment is reachable. - * Then reports this function if the segment is reachable. - * - * If the last code path segment is reachable, there are paths which are not - * returned or thrown. - * - * @param {ASTNode} node - A node to check. - * @returns {void} - */ - function checkLastSegment(node) { - if (funcInfo.shouldCheck && - funcInfo.codePath.currentSegments.some(isReachable) - ) { - context.report({ - node, - loc: getLocation(node, context.getSourceCode()).loc.start, - messageId: funcInfo.hasReturn - ? "expectedAtEnd" - : "expectedInside", - data: { - name: astUtils.getFunctionNameWithKind(funcInfo.node) - } - }); - } - } - - return { - - // Stacks this function's information. - onCodePathStart(codePath, node) { - funcInfo = { - upper: funcInfo, - codePath, - hasReturn: false, - shouldCheck: - TARGET_NODE_TYPE.test(node.type) && - node.body.type === "BlockStatement" && - isCallbackOfArrayMethod(node) && - !node.async && - !node.generator, - node - }; - }, - - // Pops this function's information. - onCodePathEnd() { - funcInfo = funcInfo.upper; - }, - - // Checks the return statement is valid. - ReturnStatement(node) { - if (funcInfo.shouldCheck) { - funcInfo.hasReturn = true; - - // if allowImplicit: false, should also check node.argument - if (!options.allowImplicit && !node.argument) { - context.report({ - node, - messageId: "expectedReturnValue", - data: { - name: lodash.upperFirst(astUtils.getFunctionNameWithKind(funcInfo.node)) - } - }); - } - } - }, - - // Reports a given function if the last path is reachable. - "FunctionExpression:exit": checkLastSegment, - "ArrowFunctionExpression:exit": checkLastSegment - }; - } -}; diff --git a/node_modules/eslint/lib/rules/array-element-newline.js b/node_modules/eslint/lib/rules/array-element-newline.js deleted file mode 100644 index 359b8d4..0000000 --- a/node_modules/eslint/lib/rules/array-element-newline.js +++ /dev/null @@ -1,236 +0,0 @@ -/** - * @fileoverview Rule to enforce line breaks after each array element - * @author Jan Peer Stöcklmair - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce line breaks after each array element", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/array-element-newline" - }, - fixable: "whitespace", - schema: [ - { - oneOf: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - multiline: { - type: "boolean" - }, - minItems: { - type: ["integer", "null"], - minimum: 0 - } - }, - additionalProperties: false - } - ] - } - ], - - messages: { - unexpectedLineBreak: "There should be no linebreak here.", - missingLineBreak: "There should be a linebreak after this element." - } - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - //---------------------------------------------------------------------- - // Helpers - //---------------------------------------------------------------------- - - /** - * Normalizes a given option value. - * - * @param {string|Object|undefined} providedOption - An option value to parse. - * @returns {{multiline: boolean, minItems: number}} Normalized option object. - */ - function normalizeOptionValue(providedOption) { - let multiline = false; - let minItems; - - const option = providedOption || "always"; - - if (!option || option === "always" || option.minItems === 0) { - minItems = 0; - } else if (option === "never") { - minItems = Number.POSITIVE_INFINITY; - } else { - multiline = Boolean(option.multiline); - minItems = option.minItems || Number.POSITIVE_INFINITY; - } - - return { multiline, minItems }; - } - - /** - * Normalizes a given option value. - * - * @param {string|Object|undefined} options - An option value to parse. - * @returns {{ArrayExpression: {multiline: boolean, minItems: number}, ArrayPattern: {multiline: boolean, minItems: number}}} Normalized option object. - */ - function normalizeOptions(options) { - const value = normalizeOptionValue(options); - - return { ArrayExpression: value, ArrayPattern: value }; - } - - /** - * Reports that there shouldn't be a line break after the first token - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportNoLineBreak(token) { - const tokenBefore = sourceCode.getTokenBefore(token, { includeComments: true }); - - context.report({ - loc: { - start: tokenBefore.loc.end, - end: token.loc.start - }, - messageId: "unexpectedLineBreak", - fix(fixer) { - if (astUtils.isCommentToken(tokenBefore)) { - return null; - } - - if (!astUtils.isTokenOnSameLine(tokenBefore, token)) { - return fixer.replaceTextRange([tokenBefore.range[1], token.range[0]], " "); - } - - /* - * This will check if the comma is on the same line as the next element - * Following array: - * [ - * 1 - * , 2 - * , 3 - * ] - * - * will be fixed to: - * [ - * 1, 2, 3 - * ] - */ - const twoTokensBefore = sourceCode.getTokenBefore(tokenBefore, { includeComments: true }); - - if (astUtils.isCommentToken(twoTokensBefore)) { - return null; - } - - return fixer.replaceTextRange([twoTokensBefore.range[1], tokenBefore.range[0]], ""); - - } - }); - } - - /** - * Reports that there should be a line break after the first token - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportRequiredLineBreak(token) { - const tokenBefore = sourceCode.getTokenBefore(token, { includeComments: true }); - - context.report({ - loc: { - start: tokenBefore.loc.end, - end: token.loc.start - }, - messageId: "missingLineBreak", - fix(fixer) { - return fixer.replaceTextRange([tokenBefore.range[1], token.range[0]], "\n"); - } - }); - } - - /** - * Reports a given node if it violated this rule. - * - * @param {ASTNode} node - A node to check. This is an ObjectExpression node or an ObjectPattern node. - * @param {{multiline: boolean, minItems: number}} options - An option object. - * @returns {void} - */ - function check(node) { - const elements = node.elements; - const normalizedOptions = normalizeOptions(context.options[0]); - const options = normalizedOptions[node.type]; - - let elementBreak = false; - - /* - * MULTILINE: true - * loop through every element and check - * if at least one element has linebreaks inside - * this ensures that following is not valid (due to elements are on the same line): - * - * [ - * 1, - * 2, - * 3 - * ] - */ - if (options.multiline) { - elementBreak = elements - .filter(element => element !== null) - .some(element => element.loc.start.line !== element.loc.end.line); - } - - const needsLinebreaks = ( - elements.length >= options.minItems || - ( - options.multiline && - elementBreak - ) - ); - - elements.forEach((element, i) => { - const previousElement = elements[i - 1]; - - if (i === 0 || element === null || previousElement === null) { - return; - } - - const commaToken = sourceCode.getFirstTokenBetween(previousElement, element, astUtils.isCommaToken); - const lastTokenOfPreviousElement = sourceCode.getTokenBefore(commaToken); - const firstTokenOfCurrentElement = sourceCode.getTokenAfter(commaToken); - - if (needsLinebreaks) { - if (astUtils.isTokenOnSameLine(lastTokenOfPreviousElement, firstTokenOfCurrentElement)) { - reportRequiredLineBreak(firstTokenOfCurrentElement); - } - } else { - if (!astUtils.isTokenOnSameLine(lastTokenOfPreviousElement, firstTokenOfCurrentElement)) { - reportNoLineBreak(firstTokenOfCurrentElement); - } - } - }); - } - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- - - return { - ArrayPattern: check, - ArrayExpression: check - }; - } -}; diff --git a/node_modules/eslint/lib/rules/arrow-body-style.js b/node_modules/eslint/lib/rules/arrow-body-style.js deleted file mode 100644 index 1f0d137..0000000 --- a/node_modules/eslint/lib/rules/arrow-body-style.js +++ /dev/null @@ -1,236 +0,0 @@ -/** - * @fileoverview Rule to require braces in arrow function body. - * @author Alberto Rodríguez - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require braces around arrow function bodies", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/arrow-body-style" - }, - - schema: { - anyOf: [ - { - type: "array", - items: [ - { - enum: ["always", "never"] - } - ], - minItems: 0, - maxItems: 1 - }, - { - type: "array", - items: [ - { - enum: ["as-needed"] - }, - { - type: "object", - properties: { - requireReturnForObjectLiteral: { type: "boolean" } - }, - additionalProperties: false - } - ], - minItems: 0, - maxItems: 2 - } - ] - }, - - fixable: "code", - - messages: { - unexpectedOtherBlock: "Unexpected block statement surrounding arrow body.", - unexpectedEmptyBlock: "Unexpected block statement surrounding arrow body; put a value of `undefined` immediately after the `=>`.", - unexpectedObjectBlock: "Unexpected block statement surrounding arrow body; parenthesize the returned value and move it immediately after the `=>`.", - unexpectedSingleBlock: "Unexpected block statement surrounding arrow body; move the returned value immediately after the `=>`.", - expectedBlock: "Expected block statement surrounding arrow body." - } - }, - - create(context) { - const options = context.options; - const always = options[0] === "always"; - const asNeeded = !options[0] || options[0] === "as-needed"; - const never = options[0] === "never"; - const requireReturnForObjectLiteral = options[1] && options[1].requireReturnForObjectLiteral; - const sourceCode = context.getSourceCode(); - - /** - * Checks whether the given node has ASI problem or not. - * @param {Token} token The token to check. - * @returns {boolean} `true` if it changes semantics if `;` or `}` followed by the token are removed. - */ - function hasASIProblem(token) { - return token && token.type === "Punctuator" && /^[([/`+-]/.test(token.value); - } - - /** - * Gets the closing parenthesis which is the pair of the given opening parenthesis. - * @param {Token} token The opening parenthesis token to get. - * @returns {Token} The found closing parenthesis token. - */ - function findClosingParen(token) { - let node = sourceCode.getNodeByRangeIndex(token.range[1]); - - while (!astUtils.isParenthesised(sourceCode, node)) { - node = node.parent; - } - return sourceCode.getTokenAfter(node); - } - - /** - * Determines whether a arrow function body needs braces - * @param {ASTNode} node The arrow function node. - * @returns {void} - */ - function validate(node) { - const arrowBody = node.body; - - if (arrowBody.type === "BlockStatement") { - const blockBody = arrowBody.body; - - if (blockBody.length !== 1 && !never) { - return; - } - - if (asNeeded && requireReturnForObjectLiteral && blockBody[0].type === "ReturnStatement" && - blockBody[0].argument && blockBody[0].argument.type === "ObjectExpression") { - return; - } - - if (never || asNeeded && blockBody[0].type === "ReturnStatement") { - let messageId; - - if (blockBody.length === 0) { - messageId = "unexpectedEmptyBlock"; - } else if (blockBody.length > 1) { - messageId = "unexpectedOtherBlock"; - } else if (astUtils.isOpeningBraceToken(sourceCode.getFirstToken(blockBody[0], { skip: 1 }))) { - messageId = "unexpectedObjectBlock"; - } else { - messageId = "unexpectedSingleBlock"; - } - - context.report({ - node, - loc: arrowBody.loc.start, - messageId, - fix(fixer) { - const fixes = []; - - if (blockBody.length !== 1 || - blockBody[0].type !== "ReturnStatement" || - !blockBody[0].argument || - hasASIProblem(sourceCode.getTokenAfter(arrowBody)) - ) { - return fixes; - } - - const openingBrace = sourceCode.getFirstToken(arrowBody); - const closingBrace = sourceCode.getLastToken(arrowBody); - const firstValueToken = sourceCode.getFirstToken(blockBody[0], 1); - const lastValueToken = sourceCode.getLastToken(blockBody[0]); - const commentsExist = - sourceCode.commentsExistBetween(openingBrace, firstValueToken) || - sourceCode.commentsExistBetween(lastValueToken, closingBrace); - - /* - * Remove tokens around the return value. - * If comments don't exist, remove extra spaces as well. - */ - if (commentsExist) { - fixes.push( - fixer.remove(openingBrace), - fixer.remove(closingBrace), - fixer.remove(sourceCode.getTokenAfter(openingBrace)) // return keyword - ); - } else { - fixes.push( - fixer.removeRange([openingBrace.range[0], firstValueToken.range[0]]), - fixer.removeRange([lastValueToken.range[1], closingBrace.range[1]]) - ); - } - - /* - * If the first token of the reutrn value is `{`, - * enclose the return value by parentheses to avoid syntax error. - */ - if (astUtils.isOpeningBraceToken(firstValueToken)) { - fixes.push( - fixer.insertTextBefore(firstValueToken, "("), - fixer.insertTextAfter(lastValueToken, ")") - ); - } - - /* - * If the last token of the return statement is semicolon, remove it. - * Non-block arrow body is an expression, not a statement. - */ - if (astUtils.isSemicolonToken(lastValueToken)) { - fixes.push(fixer.remove(lastValueToken)); - } - - return fixes; - } - }); - } - } else { - if (always || (asNeeded && requireReturnForObjectLiteral && arrowBody.type === "ObjectExpression")) { - context.report({ - node, - loc: arrowBody.loc.start, - messageId: "expectedBlock", - fix(fixer) { - const fixes = []; - const arrowToken = sourceCode.getTokenBefore(arrowBody, astUtils.isArrowToken); - const firstBodyToken = sourceCode.getTokenAfter(arrowToken); - const lastBodyToken = sourceCode.getLastToken(node); - const isParenthesisedObjectLiteral = - astUtils.isOpeningParenToken(firstBodyToken) && - astUtils.isOpeningBraceToken(sourceCode.getTokenAfter(firstBodyToken)); - - // Wrap the value by a block and a return statement. - fixes.push( - fixer.insertTextBefore(firstBodyToken, "{return "), - fixer.insertTextAfter(lastBodyToken, "}") - ); - - // If the value is object literal, remove parentheses which were forced by syntax. - if (isParenthesisedObjectLiteral) { - fixes.push( - fixer.remove(firstBodyToken), - fixer.remove(findClosingParen(firstBodyToken)) - ); - } - - return fixes; - } - }); - } - } - } - - return { - "ArrowFunctionExpression:exit": validate - }; - } -}; diff --git a/node_modules/eslint/lib/rules/arrow-parens.js b/node_modules/eslint/lib/rules/arrow-parens.js deleted file mode 100644 index 8cabb7f..0000000 --- a/node_modules/eslint/lib/rules/arrow-parens.js +++ /dev/null @@ -1,161 +0,0 @@ -/** - * @fileoverview Rule to require parens in arrow function arguments. - * @author Jxck - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require parentheses around arrow function arguments", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/arrow-parens" - }, - - fixable: "code", - - schema: [ - { - enum: ["always", "as-needed"] - }, - { - type: "object", - properties: { - requireForBlockBody: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - messages: { - unexpectedParens: "Unexpected parentheses around single function argument.", - expectedParens: "Expected parentheses around arrow function argument.", - - unexpectedParensInline: "Unexpected parentheses around single function argument having a body with no curly braces.", - expectedParensBlock: "Expected parentheses around arrow function argument having a body with curly braces." - } - }, - - create(context) { - const asNeeded = context.options[0] === "as-needed"; - const requireForBlockBody = asNeeded && context.options[1] && context.options[1].requireForBlockBody === true; - - const sourceCode = context.getSourceCode(); - - /** - * Determines whether a arrow function argument end with `)` - * @param {ASTNode} node The arrow function node. - * @returns {void} - */ - function parens(node) { - const isAsync = node.async; - const firstTokenOfParam = sourceCode.getFirstToken(node, isAsync ? 1 : 0); - - /** - * Remove the parenthesis around a parameter - * @param {Fixer} fixer Fixer - * @returns {string} fixed parameter - */ - function fixParamsWithParenthesis(fixer) { - const paramToken = sourceCode.getTokenAfter(firstTokenOfParam); - - /* - * ES8 allows Trailing commas in function parameter lists and calls - * https://github.com/eslint/eslint/issues/8834 - */ - const closingParenToken = sourceCode.getTokenAfter(paramToken, astUtils.isClosingParenToken); - const asyncToken = isAsync ? sourceCode.getTokenBefore(firstTokenOfParam) : null; - const shouldAddSpaceForAsync = asyncToken && (asyncToken.range[1] === firstTokenOfParam.range[0]); - - return fixer.replaceTextRange([ - firstTokenOfParam.range[0], - closingParenToken.range[1] - ], `${shouldAddSpaceForAsync ? " " : ""}${paramToken.value}`); - } - - // "as-needed", { "requireForBlockBody": true }: x => x - if ( - requireForBlockBody && - node.params.length === 1 && - node.params[0].type === "Identifier" && - !node.params[0].typeAnnotation && - node.body.type !== "BlockStatement" && - !node.returnType - ) { - if (astUtils.isOpeningParenToken(firstTokenOfParam)) { - context.report({ - node, - messageId: "unexpectedParensInline", - fix: fixParamsWithParenthesis - }); - } - return; - } - - if ( - requireForBlockBody && - node.body.type === "BlockStatement" - ) { - if (!astUtils.isOpeningParenToken(firstTokenOfParam)) { - context.report({ - node, - messageId: "expectedParensBlock", - fix(fixer) { - return fixer.replaceText(firstTokenOfParam, `(${firstTokenOfParam.value})`); - } - }); - } - return; - } - - // "as-needed": x => x - if (asNeeded && - node.params.length === 1 && - node.params[0].type === "Identifier" && - !node.params[0].typeAnnotation && - !node.returnType - ) { - if (astUtils.isOpeningParenToken(firstTokenOfParam)) { - context.report({ - node, - messageId: "unexpectedParens", - fix: fixParamsWithParenthesis - }); - } - return; - } - - if (firstTokenOfParam.type === "Identifier") { - const after = sourceCode.getTokenAfter(firstTokenOfParam); - - // (x) => x - if (after.value !== ")") { - context.report({ - node, - messageId: "expectedParens", - fix(fixer) { - return fixer.replaceText(firstTokenOfParam, `(${firstTokenOfParam.value})`); - } - }); - } - } - } - - return { - ArrowFunctionExpression: parens - }; - } -}; diff --git a/node_modules/eslint/lib/rules/arrow-spacing.js b/node_modules/eslint/lib/rules/arrow-spacing.js deleted file mode 100644 index 52f8fca..0000000 --- a/node_modules/eslint/lib/rules/arrow-spacing.js +++ /dev/null @@ -1,158 +0,0 @@ -/** - * @fileoverview Rule to define spacing before/after arrow function's arrow. - * @author Jxck - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing before and after the arrow in arrow functions", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/arrow-spacing" - }, - - fixable: "whitespace", - - schema: [ - { - type: "object", - properties: { - before: { - type: "boolean" - }, - after: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - messages: { - expectedBefore: "Missing space before =>.", - unexpectedBefore: "Unexpected space before =>.", - - expectedAfter: "Missing space after =>.", - unexpectedAfter: "Unexpected space after =>." - } - }, - - create(context) { - - // merge rules with default - const rule = { before: true, after: true }, - option = context.options[0] || {}; - - rule.before = option.before !== false; - rule.after = option.after !== false; - - const sourceCode = context.getSourceCode(); - - /** - * Get tokens of arrow(`=>`) and before/after arrow. - * @param {ASTNode} node The arrow function node. - * @returns {Object} Tokens of arrow and before/after arrow. - */ - function getTokens(node) { - const arrow = sourceCode.getTokenBefore(node.body, astUtils.isArrowToken); - - return { - before: sourceCode.getTokenBefore(arrow), - arrow, - after: sourceCode.getTokenAfter(arrow) - }; - } - - /** - * Count spaces before/after arrow(`=>`) token. - * @param {Object} tokens Tokens before/after arrow. - * @returns {Object} count of space before/after arrow. - */ - function countSpaces(tokens) { - const before = tokens.arrow.range[0] - tokens.before.range[1]; - const after = tokens.after.range[0] - tokens.arrow.range[1]; - - return { before, after }; - } - - /** - * Determines whether space(s) before after arrow(`=>`) is satisfy rule. - * if before/after value is `true`, there should be space(s). - * if before/after value is `false`, there should be no space. - * @param {ASTNode} node The arrow function node. - * @returns {void} - */ - function spaces(node) { - const tokens = getTokens(node); - const countSpace = countSpaces(tokens); - - if (rule.before) { - - // should be space(s) before arrow - if (countSpace.before === 0) { - context.report({ - node: tokens.before, - messageId: "expectedBefore", - fix(fixer) { - return fixer.insertTextBefore(tokens.arrow, " "); - } - }); - } - } else { - - // should be no space before arrow - if (countSpace.before > 0) { - context.report({ - node: tokens.before, - messageId: "unexpectedBefore", - fix(fixer) { - return fixer.removeRange([tokens.before.range[1], tokens.arrow.range[0]]); - } - }); - } - } - - if (rule.after) { - - // should be space(s) after arrow - if (countSpace.after === 0) { - context.report({ - node: tokens.after, - messageId: "expectedAfter", - fix(fixer) { - return fixer.insertTextAfter(tokens.arrow, " "); - } - }); - } - } else { - - // should be no space after arrow - if (countSpace.after > 0) { - context.report({ - node: tokens.after, - messageId: "unexpectedAfter", - fix(fixer) { - return fixer.removeRange([tokens.arrow.range[1], tokens.after.range[0]]); - } - }); - } - } - } - - return { - ArrowFunctionExpression: spaces - }; - } -}; diff --git a/node_modules/eslint/lib/rules/block-scoped-var.js b/node_modules/eslint/lib/rules/block-scoped-var.js deleted file mode 100644 index 1000fbc..0000000 --- a/node_modules/eslint/lib/rules/block-scoped-var.js +++ /dev/null @@ -1,120 +0,0 @@ -/** - * @fileoverview Rule to check for "block scoped" variables by binding context - * @author Matt DuVall - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce the use of variables within the scope they are defined", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/block-scoped-var" - }, - - schema: [], - - messages: { - outOfScope: "'{{name}}' used outside of binding context." - } - }, - - create(context) { - let stack = []; - - /** - * Makes a block scope. - * @param {ASTNode} node - A node of a scope. - * @returns {void} - */ - function enterScope(node) { - stack.push(node.range); - } - - /** - * Pops the last block scope. - * @returns {void} - */ - function exitScope() { - stack.pop(); - } - - /** - * Reports a given reference. - * @param {eslint-scope.Reference} reference - A reference to report. - * @returns {void} - */ - function report(reference) { - const identifier = reference.identifier; - - context.report({ node: identifier, messageId: "outOfScope", data: { name: identifier.name } }); - } - - /** - * Finds and reports references which are outside of valid scopes. - * @param {ASTNode} node - A node to get variables. - * @returns {void} - */ - function checkForVariables(node) { - if (node.kind !== "var") { - return; - } - - // Defines a predicate to check whether or not a given reference is outside of valid scope. - const scopeRange = stack[stack.length - 1]; - - /** - * Check if a reference is out of scope - * @param {ASTNode} reference node to examine - * @returns {boolean} True is its outside the scope - * @private - */ - function isOutsideOfScope(reference) { - const idRange = reference.identifier.range; - - return idRange[0] < scopeRange[0] || idRange[1] > scopeRange[1]; - } - - // Gets declared variables, and checks its references. - const variables = context.getDeclaredVariables(node); - - for (let i = 0; i < variables.length; ++i) { - - // Reports. - variables[i] - .references - .filter(isOutsideOfScope) - .forEach(report); - } - } - - return { - Program(node) { - stack = [node.range]; - }, - - // Manages scopes. - BlockStatement: enterScope, - "BlockStatement:exit": exitScope, - ForStatement: enterScope, - "ForStatement:exit": exitScope, - ForInStatement: enterScope, - "ForInStatement:exit": exitScope, - ForOfStatement: enterScope, - "ForOfStatement:exit": exitScope, - SwitchStatement: enterScope, - "SwitchStatement:exit": exitScope, - CatchClause: enterScope, - "CatchClause:exit": exitScope, - - // Finds and reports references which are outside of valid scope. - VariableDeclaration: checkForVariables - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/block-spacing.js b/node_modules/eslint/lib/rules/block-spacing.js deleted file mode 100644 index 5363813..0000000 --- a/node_modules/eslint/lib/rules/block-spacing.js +++ /dev/null @@ -1,145 +0,0 @@ -/** - * @fileoverview A rule to disallow or enforce spaces inside of single line blocks. - * @author Toru Nagashima - */ - -"use strict"; - -const util = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow or enforce spaces inside of blocks after opening block and before closing block", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/block-spacing" - }, - - fixable: "whitespace", - - schema: [ - { enum: ["always", "never"] } - ], - - messages: { - missing: "Requires a space {{location}} '{{token}}'", - extra: "Unexpected space(s) {{location}} '{{token}}'" - } - }, - - create(context) { - const always = (context.options[0] !== "never"), - messageId = always ? "missing" : "extra", - sourceCode = context.getSourceCode(); - - /** - * Gets the open brace token from a given node. - * @param {ASTNode} node - A BlockStatement/SwitchStatement node to get. - * @returns {Token} The token of the open brace. - */ - function getOpenBrace(node) { - if (node.type === "SwitchStatement") { - if (node.cases.length > 0) { - return sourceCode.getTokenBefore(node.cases[0]); - } - return sourceCode.getLastToken(node, 1); - } - return sourceCode.getFirstToken(node); - } - - /** - * Checks whether or not: - * - given tokens are on same line. - * - there is/isn't a space between given tokens. - * @param {Token} left - A token to check. - * @param {Token} right - The token which is next to `left`. - * @returns {boolean} - * When the option is `"always"`, `true` if there are one or more spaces between given tokens. - * When the option is `"never"`, `true` if there are not any spaces between given tokens. - * If given tokens are not on same line, it's always `true`. - */ - function isValid(left, right) { - return ( - !util.isTokenOnSameLine(left, right) || - sourceCode.isSpaceBetweenTokens(left, right) === always - ); - } - - /** - * Reports invalid spacing style inside braces. - * @param {ASTNode} node - A BlockStatement/SwitchStatement node to get. - * @returns {void} - */ - function checkSpacingInsideBraces(node) { - - // Gets braces and the first/last token of content. - const openBrace = getOpenBrace(node); - const closeBrace = sourceCode.getLastToken(node); - const firstToken = sourceCode.getTokenAfter(openBrace, { includeComments: true }); - const lastToken = sourceCode.getTokenBefore(closeBrace, { includeComments: true }); - - // Skip if the node is invalid or empty. - if (openBrace.type !== "Punctuator" || - openBrace.value !== "{" || - closeBrace.type !== "Punctuator" || - closeBrace.value !== "}" || - firstToken === closeBrace - ) { - return; - } - - // Skip line comments for option never - if (!always && firstToken.type === "Line") { - return; - } - - // Check. - if (!isValid(openBrace, firstToken)) { - context.report({ - node, - loc: openBrace.loc.start, - messageId, - data: { - location: "after", - token: openBrace.value - }, - fix(fixer) { - if (always) { - return fixer.insertTextBefore(firstToken, " "); - } - - return fixer.removeRange([openBrace.range[1], firstToken.range[0]]); - } - }); - } - if (!isValid(lastToken, closeBrace)) { - context.report({ - node, - loc: closeBrace.loc.start, - messageId, - data: { - location: "before", - token: closeBrace.value - }, - fix(fixer) { - if (always) { - return fixer.insertTextAfter(lastToken, " "); - } - - return fixer.removeRange([lastToken.range[1], closeBrace.range[0]]); - } - }); - } - } - - return { - BlockStatement: checkSpacingInsideBraces, - SwitchStatement: checkSpacingInsideBraces - }; - } -}; diff --git a/node_modules/eslint/lib/rules/brace-style.js b/node_modules/eslint/lib/rules/brace-style.js deleted file mode 100644 index e2cbafe..0000000 --- a/node_modules/eslint/lib/rules/brace-style.js +++ /dev/null @@ -1,185 +0,0 @@ -/** - * @fileoverview Rule to flag block statements that do not use the one true brace style - * @author Ian Christian Myers - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent brace style for blocks", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/brace-style" - }, - - schema: [ - { - enum: ["1tbs", "stroustrup", "allman"] - }, - { - type: "object", - properties: { - allowSingleLine: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - fixable: "whitespace", - - messages: { - nextLineOpen: "Opening curly brace does not appear on the same line as controlling statement.", - sameLineOpen: "Opening curly brace appears on the same line as controlling statement.", - blockSameLine: "Statement inside of curly braces should be on next line.", - nextLineClose: "Closing curly brace does not appear on the same line as the subsequent block.", - singleLineClose: "Closing curly brace should be on the same line as opening curly brace or on the line after the previous block.", - sameLineClose: "Closing curly brace appears on the same line as the subsequent block." - } - }, - - create(context) { - const style = context.options[0] || "1tbs", - params = context.options[1] || {}, - sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Fixes a place where a newline unexpectedly appears - * @param {Token} firstToken The token before the unexpected newline - * @param {Token} secondToken The token after the unexpected newline - * @returns {Function} A fixer function to remove the newlines between the tokens - */ - function removeNewlineBetween(firstToken, secondToken) { - const textRange = [firstToken.range[1], secondToken.range[0]]; - const textBetween = sourceCode.text.slice(textRange[0], textRange[1]); - - // Don't do a fix if there is a comment between the tokens - if (textBetween.trim()) { - return null; - } - return fixer => fixer.replaceTextRange(textRange, " "); - } - - /** - * Validates a pair of curly brackets based on the user's config - * @param {Token} openingCurly The opening curly bracket - * @param {Token} closingCurly The closing curly bracket - * @returns {void} - */ - function validateCurlyPair(openingCurly, closingCurly) { - const tokenBeforeOpeningCurly = sourceCode.getTokenBefore(openingCurly); - const tokenAfterOpeningCurly = sourceCode.getTokenAfter(openingCurly); - const tokenBeforeClosingCurly = sourceCode.getTokenBefore(closingCurly); - const singleLineException = params.allowSingleLine && astUtils.isTokenOnSameLine(openingCurly, closingCurly); - - if (style !== "allman" && !astUtils.isTokenOnSameLine(tokenBeforeOpeningCurly, openingCurly)) { - context.report({ - node: openingCurly, - messageId: "nextLineOpen", - fix: removeNewlineBetween(tokenBeforeOpeningCurly, openingCurly) - }); - } - - if (style === "allman" && astUtils.isTokenOnSameLine(tokenBeforeOpeningCurly, openingCurly) && !singleLineException) { - context.report({ - node: openingCurly, - messageId: "sameLineOpen", - fix: fixer => fixer.insertTextBefore(openingCurly, "\n") - }); - } - - if (astUtils.isTokenOnSameLine(openingCurly, tokenAfterOpeningCurly) && tokenAfterOpeningCurly !== closingCurly && !singleLineException) { - context.report({ - node: openingCurly, - messageId: "blockSameLine", - fix: fixer => fixer.insertTextAfter(openingCurly, "\n") - }); - } - - if (tokenBeforeClosingCurly !== openingCurly && !singleLineException && astUtils.isTokenOnSameLine(tokenBeforeClosingCurly, closingCurly)) { - context.report({ - node: closingCurly, - messageId: "singleLineClose", - fix: fixer => fixer.insertTextBefore(closingCurly, "\n") - }); - } - } - - /** - * Validates the location of a token that appears before a keyword (e.g. a newline before `else`) - * @param {Token} curlyToken The closing curly token. This is assumed to precede a keyword token (such as `else` or `finally`). - * @returns {void} - */ - function validateCurlyBeforeKeyword(curlyToken) { - const keywordToken = sourceCode.getTokenAfter(curlyToken); - - if (style === "1tbs" && !astUtils.isTokenOnSameLine(curlyToken, keywordToken)) { - context.report({ - node: curlyToken, - messageId: "nextLineClose", - fix: removeNewlineBetween(curlyToken, keywordToken) - }); - } - - if (style !== "1tbs" && astUtils.isTokenOnSameLine(curlyToken, keywordToken)) { - context.report({ - node: curlyToken, - messageId: "sameLineClose", - fix: fixer => fixer.insertTextAfter(curlyToken, "\n") - }); - } - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - BlockStatement(node) { - if (!astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type)) { - validateCurlyPair(sourceCode.getFirstToken(node), sourceCode.getLastToken(node)); - } - }, - ClassBody(node) { - validateCurlyPair(sourceCode.getFirstToken(node), sourceCode.getLastToken(node)); - }, - SwitchStatement(node) { - const closingCurly = sourceCode.getLastToken(node); - const openingCurly = sourceCode.getTokenBefore(node.cases.length ? node.cases[0] : closingCurly); - - validateCurlyPair(openingCurly, closingCurly); - }, - IfStatement(node) { - if (node.consequent.type === "BlockStatement" && node.alternate) { - - // Handle the keyword after the `if` block (before `else`) - validateCurlyBeforeKeyword(sourceCode.getLastToken(node.consequent)); - } - }, - TryStatement(node) { - - // Handle the keyword after the `try` block (before `catch` or `finally`) - validateCurlyBeforeKeyword(sourceCode.getLastToken(node.block)); - - if (node.handler && node.finalizer) { - - // Handle the keyword after the `catch` block (before `finally`) - validateCurlyBeforeKeyword(sourceCode.getLastToken(node.handler.body)); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/callback-return.js b/node_modules/eslint/lib/rules/callback-return.js deleted file mode 100644 index f55fed8..0000000 --- a/node_modules/eslint/lib/rules/callback-return.js +++ /dev/null @@ -1,180 +0,0 @@ -/** - * @fileoverview Enforce return after a callback. - * @author Jamund Ferguson - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require `return` statements after callbacks", - category: "Node.js and CommonJS", - recommended: false, - url: "https://eslint.org/docs/rules/callback-return" - }, - - schema: [{ - type: "array", - items: { type: "string" } - }], - - messages: { - missingReturn: "Expected return with your callback function." - } - }, - - create(context) { - - const callbacks = context.options[0] || ["callback", "cb", "next"], - sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Find the closest parent matching a list of types. - * @param {ASTNode} node The node whose parents we are searching - * @param {Array} types The node types to match - * @returns {ASTNode} The matched node or undefined. - */ - function findClosestParentOfType(node, types) { - if (!node.parent) { - return null; - } - if (types.indexOf(node.parent.type) === -1) { - return findClosestParentOfType(node.parent, types); - } - return node.parent; - } - - /** - * Check to see if a node contains only identifers - * @param {ASTNode} node The node to check - * @returns {boolean} Whether or not the node contains only identifers - */ - function containsOnlyIdentifiers(node) { - if (node.type === "Identifier") { - return true; - } - - if (node.type === "MemberExpression") { - if (node.object.type === "Identifier") { - return true; - } - if (node.object.type === "MemberExpression") { - return containsOnlyIdentifiers(node.object); - } - } - - return false; - } - - /** - * Check to see if a CallExpression is in our callback list. - * @param {ASTNode} node The node to check against our callback names list. - * @returns {boolean} Whether or not this function matches our callback name. - */ - function isCallback(node) { - return containsOnlyIdentifiers(node.callee) && callbacks.indexOf(sourceCode.getText(node.callee)) > -1; - } - - /** - * Determines whether or not the callback is part of a callback expression. - * @param {ASTNode} node The callback node - * @param {ASTNode} parentNode The expression node - * @returns {boolean} Whether or not this is part of a callback expression - */ - function isCallbackExpression(node, parentNode) { - - // ensure the parent node exists and is an expression - if (!parentNode || parentNode.type !== "ExpressionStatement") { - return false; - } - - // cb() - if (parentNode.expression === node) { - return true; - } - - // special case for cb && cb() and similar - if (parentNode.expression.type === "BinaryExpression" || parentNode.expression.type === "LogicalExpression") { - if (parentNode.expression.right === node) { - return true; - } - } - - return false; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - CallExpression(node) { - - // if we're not a callback we can return - if (!isCallback(node)) { - return; - } - - // find the closest block, return or loop - const closestBlock = findClosestParentOfType(node, ["BlockStatement", "ReturnStatement", "ArrowFunctionExpression"]) || {}; - - // if our parent is a return we know we're ok - if (closestBlock.type === "ReturnStatement") { - return; - } - - // arrow functions don't always have blocks and implicitly return - if (closestBlock.type === "ArrowFunctionExpression") { - return; - } - - // block statements are part of functions and most if statements - if (closestBlock.type === "BlockStatement") { - - // find the last item in the block - const lastItem = closestBlock.body[closestBlock.body.length - 1]; - - // if the callback is the last thing in a block that might be ok - if (isCallbackExpression(node, lastItem)) { - - const parentType = closestBlock.parent.type; - - // but only if the block is part of a function - if (parentType === "FunctionExpression" || - parentType === "FunctionDeclaration" || - parentType === "ArrowFunctionExpression" - ) { - return; - } - - } - - // ending a block with a return is also ok - if (lastItem.type === "ReturnStatement") { - - // but only if the callback is immediately before - if (isCallbackExpression(node, closestBlock.body[closestBlock.body.length - 2])) { - return; - } - } - - } - - // as long as you're the child of a function at this point you should be asked to return - if (findClosestParentOfType(node, ["FunctionDeclaration", "FunctionExpression", "ArrowFunctionExpression"])) { - context.report({ node, messageId: "missingReturn" }); - } - - } - - }; - } -}; diff --git a/node_modules/eslint/lib/rules/camelcase.js b/node_modules/eslint/lib/rules/camelcase.js deleted file mode 100644 index 84db54f..0000000 --- a/node_modules/eslint/lib/rules/camelcase.js +++ /dev/null @@ -1,159 +0,0 @@ -/** - * @fileoverview Rule to flag non-camelcased identifiers - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce camelcase naming convention", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/camelcase" - }, - - schema: [ - { - type: "object", - properties: { - properties: { - enum: ["always", "never"] - } - }, - additionalProperties: false - } - ], - - messages: { - notCamelCase: "Identifier '{{name}}' is not in camel case." - } - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - // contains reported nodes to avoid reporting twice on destructuring with shorthand notation - const reported = []; - const ALLOWED_PARENT_TYPES = new Set(["CallExpression", "NewExpression"]); - - /** - * Checks if a string contains an underscore and isn't all upper-case - * @param {string} name The string to check. - * @returns {boolean} if the string is underscored - * @private - */ - function isUnderscored(name) { - - // if there's an underscore, it might be A_CONSTANT, which is okay - return name.indexOf("_") > -1 && name !== name.toUpperCase(); - } - - /** - * Reports an AST node as a rule violation. - * @param {ASTNode} node The node to report. - * @returns {void} - * @private - */ - function report(node) { - if (reported.indexOf(node) < 0) { - reported.push(node); - context.report({ node, messageId: "notCamelCase", data: { name: node.name } }); - } - } - - const options = context.options[0] || {}; - let properties = options.properties || ""; - - if (properties !== "always" && properties !== "never") { - properties = "always"; - } - - return { - - Identifier(node) { - - /* - * Leading and trailing underscores are commonly used to flag - * private/protected identifiers, strip them - */ - const name = node.name.replace(/^_+|_+$/g, ""), - effectiveParent = (node.parent.type === "MemberExpression") ? node.parent.parent : node.parent; - - // MemberExpressions get special rules - if (node.parent.type === "MemberExpression") { - - // "never" check properties - if (properties === "never") { - return; - } - - // Always report underscored object names - if (node.parent.object.type === "Identifier" && node.parent.object.name === node.name && isUnderscored(name)) { - report(node); - - // Report AssignmentExpressions only if they are the left side of the assignment - } else if (effectiveParent.type === "AssignmentExpression" && isUnderscored(name) && (effectiveParent.right.type !== "MemberExpression" || effectiveParent.left.type === "MemberExpression" && effectiveParent.left.property.name === node.name)) { - report(node); - } - - /* - * Properties have their own rules, and - * AssignmentPattern nodes can be treated like Properties: - * e.g.: const { no_camelcased = false } = bar; - */ - } else if (node.parent.type === "Property" || node.parent.type === "AssignmentPattern") { - - if (node.parent.parent && node.parent.parent.type === "ObjectPattern") { - - if (node.parent.shorthand && node.parent.value.left && isUnderscored(name)) { - - report(node); - } - - // prevent checking righthand side of destructured object - if (node.parent.key === node && node.parent.value !== node) { - return; - } - - if (node.parent.value.name && isUnderscored(name)) { - report(node); - } - } - - // "never" check properties - if (properties === "never") { - return; - } - - // don't check right hand side of AssignmentExpression to prevent duplicate warnings - if (isUnderscored(name) && !ALLOWED_PARENT_TYPES.has(effectiveParent.type) && !(node.parent.right === node)) { - report(node); - } - - // Check if it's an import specifier - } else if (["ImportSpecifier", "ImportNamespaceSpecifier", "ImportDefaultSpecifier"].indexOf(node.parent.type) >= 0) { - - // Report only if the local imported identifier is underscored - if (node.parent.local && node.parent.local.name === node.name && isUnderscored(name)) { - report(node); - } - - // Report anything that is underscored that isn't a CallExpression - } else if (isUnderscored(name) && !ALLOWED_PARENT_TYPES.has(effectiveParent.type)) { - report(node); - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/capitalized-comments.js b/node_modules/eslint/lib/rules/capitalized-comments.js deleted file mode 100644 index c98a446..0000000 --- a/node_modules/eslint/lib/rules/capitalized-comments.js +++ /dev/null @@ -1,307 +0,0 @@ -/** - * @fileoverview enforce or disallow capitalization of the first letter of a comment - * @author Kevin Partington - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const LETTER_PATTERN = require("../util/patterns/letters"); -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const DEFAULT_IGNORE_PATTERN = astUtils.COMMENTS_IGNORE_PATTERN, - WHITESPACE = /\s/g, - MAYBE_URL = /^\s*[^:/?#\s]+:\/\/[^?#]/, // TODO: Combine w/ max-len pattern? - DEFAULTS = { - ignorePattern: null, - ignoreInlineComments: false, - ignoreConsecutiveComments: false - }; - -/* - * Base schema body for defining the basic capitalization rule, ignorePattern, - * and ignoreInlineComments values. - * This can be used in a few different ways in the actual schema. - */ -const SCHEMA_BODY = { - type: "object", - properties: { - ignorePattern: { - type: "string" - }, - ignoreInlineComments: { - type: "boolean" - }, - ignoreConsecutiveComments: { - type: "boolean" - } - }, - additionalProperties: false -}; - -/** - * Get normalized options for either block or line comments from the given - * user-provided options. - * - If the user-provided options is just a string, returns a normalized - * set of options using default values for all other options. - * - If the user-provided options is an object, then a normalized option - * set is returned. Options specified in overrides will take priority - * over options specified in the main options object, which will in - * turn take priority over the rule's defaults. - * - * @param {Object|string} rawOptions The user-provided options. - * @param {string} which Either "line" or "block". - * @returns {Object} The normalized options. - */ -function getNormalizedOptions(rawOptions, which) { - if (!rawOptions) { - return Object.assign({}, DEFAULTS); - } - - return Object.assign({}, DEFAULTS, rawOptions[which] || rawOptions); -} - -/** - * Get normalized options for block and line comments. - * - * @param {Object|string} rawOptions The user-provided options. - * @returns {Object} An object with "Line" and "Block" keys and corresponding - * normalized options objects. - */ -function getAllNormalizedOptions(rawOptions) { - return { - Line: getNormalizedOptions(rawOptions, "line"), - Block: getNormalizedOptions(rawOptions, "block") - }; -} - -/** - * Creates a regular expression for each ignorePattern defined in the rule - * options. - * - * This is done in order to avoid invoking the RegExp constructor repeatedly. - * - * @param {Object} normalizedOptions The normalized rule options. - * @returns {void} - */ -function createRegExpForIgnorePatterns(normalizedOptions) { - Object.keys(normalizedOptions).forEach(key => { - const ignorePatternStr = normalizedOptions[key].ignorePattern; - - if (ignorePatternStr) { - const regExp = RegExp(`^\\s*(?:${ignorePatternStr})`); - - normalizedOptions[key].ignorePatternRegExp = regExp; - } - }); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce or disallow capitalization of the first letter of a comment", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/capitalized-comments" - }, - fixable: "code", - schema: [ - { enum: ["always", "never"] }, - { - oneOf: [ - SCHEMA_BODY, - { - type: "object", - properties: { - line: SCHEMA_BODY, - block: SCHEMA_BODY - }, - additionalProperties: false - } - ] - } - ], - - messages: { - unexpectedLowercaseComment: "Comments should not begin with a lowercase character", - unexpectedUppercaseComment: "Comments should not begin with an uppercase character" - } - }, - - create(context) { - - const capitalize = context.options[0] || "always", - normalizedOptions = getAllNormalizedOptions(context.options[1]), - sourceCode = context.getSourceCode(); - - createRegExpForIgnorePatterns(normalizedOptions); - - //---------------------------------------------------------------------- - // Helpers - //---------------------------------------------------------------------- - - /** - * Checks whether a comment is an inline comment. - * - * For the purpose of this rule, a comment is inline if: - * 1. The comment is preceded by a token on the same line; and - * 2. The command is followed by a token on the same line. - * - * Note that the comment itself need not be single-line! - * - * Also, it follows from this definition that only block comments can - * be considered as possibly inline. This is because line comments - * would consume any following tokens on the same line as the comment. - * - * @param {ASTNode} comment The comment node to check. - * @returns {boolean} True if the comment is an inline comment, false - * otherwise. - */ - function isInlineComment(comment) { - const previousToken = sourceCode.getTokenBefore(comment, { includeComments: true }), - nextToken = sourceCode.getTokenAfter(comment, { includeComments: true }); - - return Boolean( - previousToken && - nextToken && - comment.loc.start.line === previousToken.loc.end.line && - comment.loc.end.line === nextToken.loc.start.line - ); - } - - /** - * Determine if a comment follows another comment. - * - * @param {ASTNode} comment The comment to check. - * @returns {boolean} True if the comment follows a valid comment. - */ - function isConsecutiveComment(comment) { - const previousTokenOrComment = sourceCode.getTokenBefore(comment, { includeComments: true }); - - return Boolean( - previousTokenOrComment && - ["Block", "Line"].indexOf(previousTokenOrComment.type) !== -1 - ); - } - - /** - * Check a comment to determine if it is valid for this rule. - * - * @param {ASTNode} comment The comment node to process. - * @param {Object} options The options for checking this comment. - * @returns {boolean} True if the comment is valid, false otherwise. - */ - function isCommentValid(comment, options) { - - // 1. Check for default ignore pattern. - if (DEFAULT_IGNORE_PATTERN.test(comment.value)) { - return true; - } - - // 2. Check for custom ignore pattern. - const commentWithoutAsterisks = comment.value - .replace(/\*/g, ""); - - if (options.ignorePatternRegExp && options.ignorePatternRegExp.test(commentWithoutAsterisks)) { - return true; - } - - // 3. Check for inline comments. - if (options.ignoreInlineComments && isInlineComment(comment)) { - return true; - } - - // 4. Is this a consecutive comment (and are we tolerating those)? - if (options.ignoreConsecutiveComments && isConsecutiveComment(comment)) { - return true; - } - - // 5. Does the comment start with a possible URL? - if (MAYBE_URL.test(commentWithoutAsterisks)) { - return true; - } - - // 6. Is the initial word character a letter? - const commentWordCharsOnly = commentWithoutAsterisks - .replace(WHITESPACE, ""); - - if (commentWordCharsOnly.length === 0) { - return true; - } - - const firstWordChar = commentWordCharsOnly[0]; - - if (!LETTER_PATTERN.test(firstWordChar)) { - return true; - } - - // 7. Check the case of the initial word character. - const isUppercase = firstWordChar !== firstWordChar.toLocaleLowerCase(), - isLowercase = firstWordChar !== firstWordChar.toLocaleUpperCase(); - - if (capitalize === "always" && isLowercase) { - return false; - } - if (capitalize === "never" && isUppercase) { - return false; - } - - return true; - } - - /** - * Process a comment to determine if it needs to be reported. - * - * @param {ASTNode} comment The comment node to process. - * @returns {void} - */ - function processComment(comment) { - const options = normalizedOptions[comment.type], - commentValid = isCommentValid(comment, options); - - if (!commentValid) { - const messageId = capitalize === "always" - ? "unexpectedLowercaseComment" - : "unexpectedUppercaseComment"; - - context.report({ - node: null, // Intentionally using loc instead - loc: comment.loc, - messageId, - fix(fixer) { - const match = comment.value.match(LETTER_PATTERN); - - return fixer.replaceTextRange( - - // Offset match.index by 2 to account for the first 2 characters that start the comment (// or /*) - [comment.range[0] + match.index + 2, comment.range[0] + match.index + 3], - capitalize === "always" ? match[0].toLocaleUpperCase() : match[0].toLocaleLowerCase() - ); - } - }); - } - } - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- - - return { - Program() { - const comments = sourceCode.getAllComments(); - - comments.filter(token => token.type !== "Shebang").forEach(processComment); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/class-methods-use-this.js b/node_modules/eslint/lib/rules/class-methods-use-this.js deleted file mode 100644 index b7d9413..0000000 --- a/node_modules/eslint/lib/rules/class-methods-use-this.js +++ /dev/null @@ -1,115 +0,0 @@ -/** - * @fileoverview Rule to enforce that all class methods use 'this'. - * @author Patrick Williams - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce that class methods utilize `this`", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/class-methods-use-this" - }, - schema: [{ - type: "object", - properties: { - exceptMethods: { - type: "array", - items: { - type: "string" - } - } - }, - additionalProperties: false - }], - - messages: { - missingThis: "Expected 'this' to be used by class method '{{name}}'." - } - }, - create(context) { - const config = context.options[0] ? Object.assign({}, context.options[0]) : {}; - const exceptMethods = new Set(config.exceptMethods || []); - - const stack = []; - - /** - * Initializes the current context to false and pushes it onto the stack. - * These booleans represent whether 'this' has been used in the context. - * @returns {void} - * @private - */ - function enterFunction() { - stack.push(false); - } - - /** - * Check if the node is an instance method - * @param {ASTNode} node - node to check - * @returns {boolean} True if its an instance method - * @private - */ - function isInstanceMethod(node) { - return !node.static && node.kind !== "constructor" && node.type === "MethodDefinition"; - } - - /** - * Check if the node is an instance method not excluded by config - * @param {ASTNode} node - node to check - * @returns {boolean} True if it is an instance method, and not excluded by config - * @private - */ - function isIncludedInstanceMethod(node) { - return isInstanceMethod(node) && !exceptMethods.has(node.key.name); - } - - /** - * Checks if we are leaving a function that is a method, and reports if 'this' has not been used. - * Static methods and the constructor are exempt. - * Then pops the context off the stack. - * @param {ASTNode} node - A function node that was entered. - * @returns {void} - * @private - */ - function exitFunction(node) { - const methodUsesThis = stack.pop(); - - if (isIncludedInstanceMethod(node.parent) && !methodUsesThis) { - context.report({ - node, - messageId: "missingThis", - data: { - name: node.parent.key.name - } - }); - } - } - - /** - * Mark the current context as having used 'this'. - * @returns {void} - * @private - */ - function markThisUsed() { - if (stack.length) { - stack[stack.length - 1] = true; - } - } - - return { - FunctionDeclaration: enterFunction, - "FunctionDeclaration:exit": exitFunction, - FunctionExpression: enterFunction, - "FunctionExpression:exit": exitFunction, - ThisExpression: markThisUsed, - Super: markThisUsed - }; - } -}; diff --git a/node_modules/eslint/lib/rules/comma-dangle.js b/node_modules/eslint/lib/rules/comma-dangle.js deleted file mode 100644 index 50de7b5..0000000 --- a/node_modules/eslint/lib/rules/comma-dangle.js +++ /dev/null @@ -1,341 +0,0 @@ -/** - * @fileoverview Rule to forbid or enforce dangling commas. - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const DEFAULT_OPTIONS = Object.freeze({ - arrays: "never", - objects: "never", - imports: "never", - exports: "never", - functions: "ignore" -}); - -/** - * Checks whether or not a trailing comma is allowed in a given node. - * If the `lastItem` is `RestElement` or `RestProperty`, it disallows trailing commas. - * - * @param {ASTNode} lastItem - The node of the last element in the given node. - * @returns {boolean} `true` if a trailing comma is allowed. - */ -function isTrailingCommaAllowed(lastItem) { - return !( - lastItem.type === "RestElement" || - lastItem.type === "RestProperty" || - lastItem.type === "ExperimentalRestProperty" - ); -} - -/** - * Normalize option value. - * - * @param {string|Object|undefined} optionValue - The 1st option value to normalize. - * @returns {Object} The normalized option value. - */ -function normalizeOptions(optionValue) { - if (typeof optionValue === "string") { - return { - arrays: optionValue, - objects: optionValue, - imports: optionValue, - exports: optionValue, - - // For backward compatibility, always ignore functions. - functions: "ignore" - }; - } - if (typeof optionValue === "object" && optionValue !== null) { - return { - arrays: optionValue.arrays || DEFAULT_OPTIONS.arrays, - objects: optionValue.objects || DEFAULT_OPTIONS.objects, - imports: optionValue.imports || DEFAULT_OPTIONS.imports, - exports: optionValue.exports || DEFAULT_OPTIONS.exports, - functions: optionValue.functions || DEFAULT_OPTIONS.functions - }; - } - - return DEFAULT_OPTIONS; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow trailing commas", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/comma-dangle" - }, - fixable: "code", - schema: { - definitions: { - value: { - enum: [ - "always-multiline", - "always", - "never", - "only-multiline" - ] - }, - valueWithIgnore: { - enum: [ - "always-multiline", - "always", - "ignore", - "never", - "only-multiline" - ] - } - }, - type: "array", - items: [ - { - oneOf: [ - { - $ref: "#/definitions/value" - }, - { - type: "object", - properties: { - arrays: { $ref: "#/definitions/valueWithIgnore" }, - objects: { $ref: "#/definitions/valueWithIgnore" }, - imports: { $ref: "#/definitions/valueWithIgnore" }, - exports: { $ref: "#/definitions/valueWithIgnore" }, - functions: { $ref: "#/definitions/valueWithIgnore" } - }, - additionalProperties: false - } - ] - } - ] - }, - - messages: { - unexpected: "Unexpected trailing comma.", - missing: "Missing trailing comma." - } - }, - - create(context) { - const options = normalizeOptions(context.options[0]); - const sourceCode = context.getSourceCode(); - - /** - * Gets the last item of the given node. - * @param {ASTNode} node - The node to get. - * @returns {ASTNode|null} The last node or null. - */ - function getLastItem(node) { - switch (node.type) { - case "ObjectExpression": - case "ObjectPattern": - return lodash.last(node.properties); - case "ArrayExpression": - case "ArrayPattern": - return lodash.last(node.elements); - case "ImportDeclaration": - case "ExportNamedDeclaration": - return lodash.last(node.specifiers); - case "FunctionDeclaration": - case "FunctionExpression": - case "ArrowFunctionExpression": - return lodash.last(node.params); - case "CallExpression": - case "NewExpression": - return lodash.last(node.arguments); - default: - return null; - } - } - - /** - * Gets the trailing comma token of the given node. - * If the trailing comma does not exist, this returns the token which is - * the insertion point of the trailing comma token. - * - * @param {ASTNode} node - The node to get. - * @param {ASTNode} lastItem - The last item of the node. - * @returns {Token} The trailing comma token or the insertion point. - */ - function getTrailingToken(node, lastItem) { - switch (node.type) { - case "ObjectExpression": - case "ArrayExpression": - case "CallExpression": - case "NewExpression": - return sourceCode.getLastToken(node, 1); - default: { - const nextToken = sourceCode.getTokenAfter(lastItem); - - if (astUtils.isCommaToken(nextToken)) { - return nextToken; - } - return sourceCode.getLastToken(lastItem); - } - } - } - - /** - * Checks whether or not a given node is multiline. - * This rule handles a given node as multiline when the closing parenthesis - * and the last element are not on the same line. - * - * @param {ASTNode} node - A node to check. - * @returns {boolean} `true` if the node is multiline. - */ - function isMultiline(node) { - const lastItem = getLastItem(node); - - if (!lastItem) { - return false; - } - - const penultimateToken = getTrailingToken(node, lastItem); - const lastToken = sourceCode.getTokenAfter(penultimateToken); - - return lastToken.loc.end.line !== penultimateToken.loc.end.line; - } - - /** - * Reports a trailing comma if it exists. - * - * @param {ASTNode} node - A node to check. Its type is one of - * ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern, - * ImportDeclaration, and ExportNamedDeclaration. - * @returns {void} - */ - function forbidTrailingComma(node) { - const lastItem = getLastItem(node); - - if (!lastItem || (node.type === "ImportDeclaration" && lastItem.type !== "ImportSpecifier")) { - return; - } - - const trailingToken = getTrailingToken(node, lastItem); - - if (astUtils.isCommaToken(trailingToken)) { - context.report({ - node: lastItem, - loc: trailingToken.loc.start, - messageId: "unexpected", - fix(fixer) { - return fixer.remove(trailingToken); - } - }); - } - } - - /** - * Reports the last element of a given node if it does not have a trailing - * comma. - * - * If a given node is `ArrayPattern` which has `RestElement`, the trailing - * comma is disallowed, so report if it exists. - * - * @param {ASTNode} node - A node to check. Its type is one of - * ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern, - * ImportDeclaration, and ExportNamedDeclaration. - * @returns {void} - */ - function forceTrailingComma(node) { - const lastItem = getLastItem(node); - - if (!lastItem || (node.type === "ImportDeclaration" && lastItem.type !== "ImportSpecifier")) { - return; - } - if (!isTrailingCommaAllowed(lastItem)) { - forbidTrailingComma(node); - return; - } - - const trailingToken = getTrailingToken(node, lastItem); - - if (trailingToken.value !== ",") { - context.report({ - node: lastItem, - loc: trailingToken.loc.end, - messageId: "missing", - fix(fixer) { - return fixer.insertTextAfter(trailingToken, ","); - } - }); - } - } - - /** - * If a given node is multiline, reports the last element of a given node - * when it does not have a trailing comma. - * Otherwise, reports a trailing comma if it exists. - * - * @param {ASTNode} node - A node to check. Its type is one of - * ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern, - * ImportDeclaration, and ExportNamedDeclaration. - * @returns {void} - */ - function forceTrailingCommaIfMultiline(node) { - if (isMultiline(node)) { - forceTrailingComma(node); - } else { - forbidTrailingComma(node); - } - } - - /** - * Only if a given node is not multiline, reports the last element of a given node - * when it does not have a trailing comma. - * Otherwise, reports a trailing comma if it exists. - * - * @param {ASTNode} node - A node to check. Its type is one of - * ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern, - * ImportDeclaration, and ExportNamedDeclaration. - * @returns {void} - */ - function allowTrailingCommaIfMultiline(node) { - if (!isMultiline(node)) { - forbidTrailingComma(node); - } - } - - const predicate = { - always: forceTrailingComma, - "always-multiline": forceTrailingCommaIfMultiline, - "only-multiline": allowTrailingCommaIfMultiline, - never: forbidTrailingComma, - ignore: lodash.noop - }; - - return { - ObjectExpression: predicate[options.objects], - ObjectPattern: predicate[options.objects], - - ArrayExpression: predicate[options.arrays], - ArrayPattern: predicate[options.arrays], - - ImportDeclaration: predicate[options.imports], - - ExportNamedDeclaration: predicate[options.exports], - - FunctionDeclaration: predicate[options.functions], - FunctionExpression: predicate[options.functions], - ArrowFunctionExpression: predicate[options.functions], - CallExpression: predicate[options.functions], - NewExpression: predicate[options.functions] - }; - } -}; diff --git a/node_modules/eslint/lib/rules/comma-spacing.js b/node_modules/eslint/lib/rules/comma-spacing.js deleted file mode 100644 index 2a48e54..0000000 --- a/node_modules/eslint/lib/rules/comma-spacing.js +++ /dev/null @@ -1,187 +0,0 @@ -/** - * @fileoverview Comma spacing - validates spacing before and after comma - * @author Vignesh Anand aka vegetableman. - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing before and after commas", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/comma-spacing" - }, - - fixable: "whitespace", - - schema: [ - { - type: "object", - properties: { - before: { - type: "boolean" - }, - after: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - messages: { - missing: "A space is required {{loc}} ','.", - unexpected: "There should be no space {{loc}} ','." - } - }, - - create(context) { - - const sourceCode = context.getSourceCode(); - const tokensAndComments = sourceCode.tokensAndComments; - - const options = { - before: context.options[0] ? !!context.options[0].before : false, - after: context.options[0] ? !!context.options[0].after : true - }; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - // list of comma tokens to ignore for the check of leading whitespace - const commaTokensToIgnore = []; - - /** - * Reports a spacing error with an appropriate message. - * @param {ASTNode} node The binary expression node to report. - * @param {string} loc Is the error "before" or "after" the comma? - * @param {ASTNode} otherNode The node at the left or right of `node` - * @returns {void} - * @private - */ - function report(node, loc, otherNode) { - context.report({ - node, - fix(fixer) { - if (options[loc]) { - if (loc === "before") { - return fixer.insertTextBefore(node, " "); - } - return fixer.insertTextAfter(node, " "); - - } - let start, end; - const newText = ""; - - if (loc === "before") { - start = otherNode.range[1]; - end = node.range[0]; - } else { - start = node.range[1]; - end = otherNode.range[0]; - } - - return fixer.replaceTextRange([start, end], newText); - - }, - messageId: options[loc] ? "missing" : "unexpected", - data: { - loc - } - }); - } - - /** - * Validates the spacing around a comma token. - * @param {Object} tokens - The tokens to be validated. - * @param {Token} tokens.comma The token representing the comma. - * @param {Token} [tokens.left] The last token before the comma. - * @param {Token} [tokens.right] The first token after the comma. - * @param {Token|ASTNode} reportItem The item to use when reporting an error. - * @returns {void} - * @private - */ - function validateCommaItemSpacing(tokens, reportItem) { - if (tokens.left && astUtils.isTokenOnSameLine(tokens.left, tokens.comma) && - (options.before !== sourceCode.isSpaceBetweenTokens(tokens.left, tokens.comma)) - ) { - report(reportItem, "before", tokens.left); - } - - if (tokens.right && !options.after && tokens.right.type === "Line") { - return; - } - - if (tokens.right && astUtils.isTokenOnSameLine(tokens.comma, tokens.right) && - (options.after !== sourceCode.isSpaceBetweenTokens(tokens.comma, tokens.right)) - ) { - report(reportItem, "after", tokens.right); - } - } - - /** - * Adds null elements of the given ArrayExpression or ArrayPattern node to the ignore list. - * @param {ASTNode} node An ArrayExpression or ArrayPattern node. - * @returns {void} - */ - function addNullElementsToIgnoreList(node) { - let previousToken = sourceCode.getFirstToken(node); - - node.elements.forEach(element => { - let token; - - if (element === null) { - token = sourceCode.getTokenAfter(previousToken); - - if (astUtils.isCommaToken(token)) { - commaTokensToIgnore.push(token); - } - } else { - token = sourceCode.getTokenAfter(element); - } - - previousToken = token; - }); - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - "Program:exit"() { - tokensAndComments.forEach((token, i) => { - - if (!astUtils.isCommaToken(token)) { - return; - } - - if (token && token.type === "JSXText") { - return; - } - - const previousToken = tokensAndComments[i - 1]; - const nextToken = tokensAndComments[i + 1]; - - validateCommaItemSpacing({ - comma: token, - left: astUtils.isCommaToken(previousToken) || commaTokensToIgnore.indexOf(token) > -1 ? null : previousToken, - right: astUtils.isCommaToken(nextToken) ? null : nextToken - }, token); - }); - }, - ArrayExpression: addNullElementsToIgnoreList, - ArrayPattern: addNullElementsToIgnoreList - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/comma-style.js b/node_modules/eslint/lib/rules/comma-style.js deleted file mode 100644 index 5ba2dbb..0000000 --- a/node_modules/eslint/lib/rules/comma-style.js +++ /dev/null @@ -1,311 +0,0 @@ -/** - * @fileoverview Comma style - enforces comma styles of two types: last and first - * @author Vignesh Anand aka vegetableman - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent comma style", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/comma-style" - }, - fixable: "code", - schema: [ - { - enum: ["first", "last"] - }, - { - type: "object", - properties: { - exceptions: { - type: "object", - additionalProperties: { - type: "boolean" - } - } - }, - additionalProperties: false - } - ], - messages: { - unexpectedLineBeforeAndAfterComma: "Bad line breaking before and after ','.", - expectedCommaFirst: "',' should be placed first.", - expectedCommaLast: "',' should be placed last." - } - }, - - create(context) { - const style = context.options[0] || "last", - sourceCode = context.getSourceCode(); - const exceptions = { - ArrayPattern: true, - ArrowFunctionExpression: true, - CallExpression: true, - FunctionDeclaration: true, - FunctionExpression: true, - ImportDeclaration: true, - ObjectPattern: true, - NewExpression: true - }; - - if (context.options.length === 2 && context.options[1].hasOwnProperty("exceptions")) { - const keys = Object.keys(context.options[1].exceptions); - - for (let i = 0; i < keys.length; i++) { - exceptions[keys[i]] = context.options[1].exceptions[keys[i]]; - } - } - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Modified text based on the style - * @param {string} styleType Style type - * @param {string} text Source code text - * @returns {string} modified text - * @private - */ - function getReplacedText(styleType, text) { - switch (styleType) { - case "between": - return `,${text.replace("\n", "")}`; - - case "first": - return `${text},`; - - case "last": - return `,${text}`; - - default: - return ""; - } - } - - /** - * Determines the fixer function for a given style. - * @param {string} styleType comma style - * @param {ASTNode} previousItemToken The token to check. - * @param {ASTNode} commaToken The token to check. - * @param {ASTNode} currentItemToken The token to check. - * @returns {Function} Fixer function - * @private - */ - function getFixerFunction(styleType, previousItemToken, commaToken, currentItemToken) { - const text = - sourceCode.text.slice(previousItemToken.range[1], commaToken.range[0]) + - sourceCode.text.slice(commaToken.range[1], currentItemToken.range[0]); - const range = [previousItemToken.range[1], currentItemToken.range[0]]; - - return function(fixer) { - return fixer.replaceTextRange(range, getReplacedText(styleType, text)); - }; - } - - /** - * Validates the spacing around single items in lists. - * @param {Token} previousItemToken The last token from the previous item. - * @param {Token} commaToken The token representing the comma. - * @param {Token} currentItemToken The first token of the current item. - * @param {Token} reportItem The item to use when reporting an error. - * @returns {void} - * @private - */ - function validateCommaItemSpacing(previousItemToken, commaToken, currentItemToken, reportItem) { - - // if single line - if (astUtils.isTokenOnSameLine(commaToken, currentItemToken) && - astUtils.isTokenOnSameLine(previousItemToken, commaToken)) { - - // do nothing. - - } else if (!astUtils.isTokenOnSameLine(commaToken, currentItemToken) && - !astUtils.isTokenOnSameLine(previousItemToken, commaToken)) { - - // lone comma - context.report({ - node: reportItem, - loc: { - line: commaToken.loc.end.line, - column: commaToken.loc.start.column - }, - messageId: "unexpectedLineBeforeAndAfterComma", - fix: getFixerFunction("between", previousItemToken, commaToken, currentItemToken) - }); - - } else if (style === "first" && !astUtils.isTokenOnSameLine(commaToken, currentItemToken)) { - - context.report({ - node: reportItem, - messageId: "expectedCommaFirst", - fix: getFixerFunction(style, previousItemToken, commaToken, currentItemToken) - }); - - } else if (style === "last" && astUtils.isTokenOnSameLine(commaToken, currentItemToken)) { - - context.report({ - node: reportItem, - loc: { - line: commaToken.loc.end.line, - column: commaToken.loc.end.column - }, - messageId: "expectedCommaLast", - fix: getFixerFunction(style, previousItemToken, commaToken, currentItemToken) - }); - } - } - - /** - * Checks the comma placement with regards to a declaration/property/element - * @param {ASTNode} node The binary expression node to check - * @param {string} property The property of the node containing child nodes. - * @private - * @returns {void} - */ - function validateComma(node, property) { - const items = node[property], - arrayLiteral = (node.type === "ArrayExpression" || node.type === "ArrayPattern"); - - if (items.length > 1 || arrayLiteral) { - - // seed as opening [ - let previousItemToken = sourceCode.getFirstToken(node); - - items.forEach(item => { - const commaToken = item ? sourceCode.getTokenBefore(item) : previousItemToken, - currentItemToken = item ? sourceCode.getFirstToken(item) : sourceCode.getTokenAfter(commaToken), - reportItem = item || currentItemToken, - tokenBeforeComma = sourceCode.getTokenBefore(commaToken); - - // Check if previous token is wrapped in parentheses - if (tokenBeforeComma && astUtils.isClosingParenToken(tokenBeforeComma)) { - previousItemToken = tokenBeforeComma; - } - - /* - * This works by comparing three token locations: - * - previousItemToken is the last token of the previous item - * - commaToken is the location of the comma before the current item - * - currentItemToken is the first token of the current item - * - * These values get switched around if item is undefined. - * previousItemToken will refer to the last token not belonging - * to the current item, which could be a comma or an opening - * square bracket. currentItemToken could be a comma. - * - * All comparisons are done based on these tokens directly, so - * they are always valid regardless of an undefined item. - */ - if (astUtils.isCommaToken(commaToken)) { - validateCommaItemSpacing(previousItemToken, commaToken, - currentItemToken, reportItem); - } - - if (item) { - const tokenAfterItem = sourceCode.getTokenAfter(item, astUtils.isNotClosingParenToken); - - previousItemToken = tokenAfterItem - ? sourceCode.getTokenBefore(tokenAfterItem) - : sourceCode.ast.tokens[sourceCode.ast.tokens.length - 1]; - } - }); - - /* - * Special case for array literals that have empty last items, such - * as [ 1, 2, ]. These arrays only have two items show up in the - * AST, so we need to look at the token to verify that there's no - * dangling comma. - */ - if (arrayLiteral) { - - const lastToken = sourceCode.getLastToken(node), - nextToLastToken = sourceCode.getTokenBefore(lastToken); - - if (astUtils.isCommaToken(nextToLastToken)) { - validateCommaItemSpacing( - sourceCode.getTokenBefore(nextToLastToken), - nextToLastToken, - lastToken, - lastToken - ); - } - } - } - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - const nodes = {}; - - if (!exceptions.VariableDeclaration) { - nodes.VariableDeclaration = function(node) { - validateComma(node, "declarations"); - }; - } - if (!exceptions.ObjectExpression) { - nodes.ObjectExpression = function(node) { - validateComma(node, "properties"); - }; - } - if (!exceptions.ObjectPattern) { - nodes.ObjectPattern = function(node) { - validateComma(node, "properties"); - }; - } - if (!exceptions.ArrayExpression) { - nodes.ArrayExpression = function(node) { - validateComma(node, "elements"); - }; - } - if (!exceptions.ArrayPattern) { - nodes.ArrayPattern = function(node) { - validateComma(node, "elements"); - }; - } - if (!exceptions.FunctionDeclaration) { - nodes.FunctionDeclaration = function(node) { - validateComma(node, "params"); - }; - } - if (!exceptions.FunctionExpression) { - nodes.FunctionExpression = function(node) { - validateComma(node, "params"); - }; - } - if (!exceptions.ArrowFunctionExpression) { - nodes.ArrowFunctionExpression = function(node) { - validateComma(node, "params"); - }; - } - if (!exceptions.CallExpression) { - nodes.CallExpression = function(node) { - validateComma(node, "arguments"); - }; - } - if (!exceptions.ImportDeclaration) { - nodes.ImportDeclaration = function(node) { - validateComma(node, "specifiers"); - }; - } - if (!exceptions.NewExpression) { - nodes.NewExpression = function(node) { - validateComma(node, "arguments"); - }; - } - - return nodes; - } -}; diff --git a/node_modules/eslint/lib/rules/complexity.js b/node_modules/eslint/lib/rules/complexity.js deleted file mode 100644 index 0b86441..0000000 --- a/node_modules/eslint/lib/rules/complexity.js +++ /dev/null @@ -1,159 +0,0 @@ -/** - * @fileoverview Counts the cyclomatic complexity of each function of the script. See http://en.wikipedia.org/wiki/Cyclomatic_complexity. - * Counts the number of if, conditional, for, whilte, try, switch/case, - * @author Patrick Brosset - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce a maximum cyclomatic complexity allowed in a program", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/complexity" - }, - - schema: [ - { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - type: "object", - properties: { - maximum: { - type: "integer", - minimum: 0 - }, - max: { - type: "integer", - minimum: 0 - } - }, - additionalProperties: false - } - ] - } - ], - - messages: { - complex: "{{name}} has a complexity of {{complexity}}." - } - }, - - create(context) { - const option = context.options[0]; - let THRESHOLD = 20; - - if (typeof option === "object" && option.hasOwnProperty("maximum") && typeof option.maximum === "number") { - THRESHOLD = option.maximum; - } - if (typeof option === "object" && option.hasOwnProperty("max") && typeof option.max === "number") { - THRESHOLD = option.max; - } - if (typeof option === "number") { - THRESHOLD = option; - } - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - // Using a stack to store complexity (handling nested functions) - const fns = []; - - /** - * When parsing a new function, store it in our function stack - * @returns {void} - * @private - */ - function startFunction() { - fns.push(1); - } - - /** - * Evaluate the node at the end of function - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function endFunction(node) { - const name = lodash.upperFirst(astUtils.getFunctionNameWithKind(node)); - const complexity = fns.pop(); - - if (complexity > THRESHOLD) { - context.report({ - node, - messageId: "complex", - data: { name, complexity } - }); - } - } - - /** - * Increase the complexity of the function in context - * @returns {void} - * @private - */ - function increaseComplexity() { - if (fns.length) { - fns[fns.length - 1]++; - } - } - - /** - * Increase the switch complexity in context - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function increaseSwitchComplexity(node) { - - // Avoiding `default` - if (node.test) { - increaseComplexity(); - } - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - FunctionDeclaration: startFunction, - FunctionExpression: startFunction, - ArrowFunctionExpression: startFunction, - "FunctionDeclaration:exit": endFunction, - "FunctionExpression:exit": endFunction, - "ArrowFunctionExpression:exit": endFunction, - - CatchClause: increaseComplexity, - ConditionalExpression: increaseComplexity, - LogicalExpression: increaseComplexity, - ForStatement: increaseComplexity, - ForInStatement: increaseComplexity, - ForOfStatement: increaseComplexity, - IfStatement: increaseComplexity, - SwitchCase: increaseSwitchComplexity, - WhileStatement: increaseComplexity, - DoWhileStatement: increaseComplexity - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/computed-property-spacing.js b/node_modules/eslint/lib/rules/computed-property-spacing.js deleted file mode 100644 index 51334a2..0000000 --- a/node_modules/eslint/lib/rules/computed-property-spacing.js +++ /dev/null @@ -1,185 +0,0 @@ -/** - * @fileoverview Disallows or enforces spaces inside computed properties. - * @author Jamund Ferguson - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing inside computed property brackets", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/computed-property-spacing" - }, - - fixable: "whitespace", - - schema: [ - { - enum: ["always", "never"] - } - ], - - messages: { - unexpectedSpaceBefore: "There should be no space before '{{tokenValue}}'.", - unexpectedSpaceAfter: "There should be no space after '{{tokenValue}}'.", - - missingSpaceBefore: "A space is required before '{{tokenValue}}'.", - missingSpaceAfter: "A space is required after '{{tokenValue}}'." - } - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const propertyNameMustBeSpaced = context.options[0] === "always"; // default is "never" - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Reports that there shouldn't be a space after the first token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @param {Token} tokenAfter - The token after `token`. - * @returns {void} - */ - function reportNoBeginningSpace(node, token, tokenAfter) { - context.report({ - node, - loc: token.loc.start, - messageId: "unexpectedSpaceAfter", - data: { - tokenValue: token.value - }, - fix(fixer) { - return fixer.removeRange([token.range[1], tokenAfter.range[0]]); - } - }); - } - - /** - * Reports that there shouldn't be a space before the last token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @param {Token} tokenBefore - The token before `token`. - * @returns {void} - */ - function reportNoEndingSpace(node, token, tokenBefore) { - context.report({ - node, - loc: token.loc.start, - messageId: "unexpectedSpaceBefore", - data: { - tokenValue: token.value - }, - fix(fixer) { - return fixer.removeRange([tokenBefore.range[1], token.range[0]]); - } - }); - } - - /** - * Reports that there should be a space after the first token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportRequiredBeginningSpace(node, token) { - context.report({ - node, - loc: token.loc.start, - messageId: "missingSpaceAfter", - data: { - tokenValue: token.value - }, - fix(fixer) { - return fixer.insertTextAfter(token, " "); - } - }); - } - - /** - * Reports that there should be a space before the last token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportRequiredEndingSpace(node, token) { - context.report({ - node, - loc: token.loc.start, - messageId: "missingSpaceBefore", - data: { - tokenValue: token.value - }, - fix(fixer) { - return fixer.insertTextBefore(token, " "); - } - }); - } - - /** - * Returns a function that checks the spacing of a node on the property name - * that was passed in. - * @param {string} propertyName The property on the node to check for spacing - * @returns {Function} A function that will check spacing on a node - */ - function checkSpacing(propertyName) { - return function(node) { - if (!node.computed) { - return; - } - - const property = node[propertyName]; - - const before = sourceCode.getTokenBefore(property), - first = sourceCode.getFirstToken(property), - last = sourceCode.getLastToken(property), - after = sourceCode.getTokenAfter(property); - - if (astUtils.isTokenOnSameLine(before, first)) { - if (propertyNameMustBeSpaced) { - if (!sourceCode.isSpaceBetweenTokens(before, first) && astUtils.isTokenOnSameLine(before, first)) { - reportRequiredBeginningSpace(node, before); - } - } else { - if (sourceCode.isSpaceBetweenTokens(before, first)) { - reportNoBeginningSpace(node, before, first); - } - } - } - - if (astUtils.isTokenOnSameLine(last, after)) { - if (propertyNameMustBeSpaced) { - if (!sourceCode.isSpaceBetweenTokens(last, after) && astUtils.isTokenOnSameLine(last, after)) { - reportRequiredEndingSpace(node, after); - } - } else { - if (sourceCode.isSpaceBetweenTokens(last, after)) { - reportNoEndingSpace(node, after, last); - } - } - } - }; - } - - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - Property: checkSpacing("key"), - MemberExpression: checkSpacing("property") - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/consistent-return.js b/node_modules/eslint/lib/rules/consistent-return.js deleted file mode 100644 index c86b171..0000000 --- a/node_modules/eslint/lib/rules/consistent-return.js +++ /dev/null @@ -1,194 +0,0 @@ -/** - * @fileoverview Rule to flag consistent return values - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a given node is an `Identifier` node which was named a given name. - * @param {ASTNode} node - A node to check. - * @param {string} name - An expected name of the node. - * @returns {boolean} `true` if the node is an `Identifier` node which was named as expected. - */ -function isIdentifier(node, name) { - return node.type === "Identifier" && node.name === name; -} - -/** - * Checks whether or not a given code path segment is unreachable. - * @param {CodePathSegment} segment - A CodePathSegment to check. - * @returns {boolean} `true` if the segment is unreachable. - */ -function isUnreachable(segment) { - return !segment.reachable; -} - -/** - * Checks whether a given node is a `constructor` method in an ES6 class - * @param {ASTNode} node A node to check - * @returns {boolean} `true` if the node is a `constructor` method - */ -function isClassConstructor(node) { - return node.type === "FunctionExpression" && - node.parent && - node.parent.type === "MethodDefinition" && - node.parent.kind === "constructor"; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require `return` statements to either always or never specify values", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/consistent-return" - }, - - schema: [{ - type: "object", - properties: { - treatUndefinedAsUnspecified: { - type: "boolean" - } - }, - additionalProperties: false - }], - - messages: { - missingReturn: "Expected to return a value at the end of {{name}}.", - missingReturnValue: "{{name}} expected a return value.", - unexpectedReturnValue: "{{name}} expected no return value." - } - }, - - create(context) { - const options = context.options[0] || {}; - const treatUndefinedAsUnspecified = options.treatUndefinedAsUnspecified === true; - let funcInfo = null; - - /** - * Checks whether of not the implicit returning is consistent if the last - * code path segment is reachable. - * - * @param {ASTNode} node - A program/function node to check. - * @returns {void} - */ - function checkLastSegment(node) { - let loc, name; - - /* - * Skip if it expected no return value or unreachable. - * When unreachable, all paths are returned or thrown. - */ - if (!funcInfo.hasReturnValue || - funcInfo.codePath.currentSegments.every(isUnreachable) || - astUtils.isES5Constructor(node) || - isClassConstructor(node) - ) { - return; - } - - // Adjust a location and a message. - if (node.type === "Program") { - - // The head of program. - loc = { line: 1, column: 0 }; - name = "program"; - } else if (node.type === "ArrowFunctionExpression") { - - // `=>` token - loc = context.getSourceCode().getTokenBefore(node.body, astUtils.isArrowToken).loc.start; - } else if ( - node.parent.type === "MethodDefinition" || - (node.parent.type === "Property" && node.parent.method) - ) { - - // Method name. - loc = node.parent.key.loc.start; - } else { - - // Function name or `function` keyword. - loc = (node.id || node).loc.start; - } - - if (!name) { - name = astUtils.getFunctionNameWithKind(node); - } - - // Reports. - context.report({ - node, - loc, - messageId: "missingReturn", - data: { name } - }); - } - - return { - - // Initializes/Disposes state of each code path. - onCodePathStart(codePath, node) { - funcInfo = { - upper: funcInfo, - codePath, - hasReturn: false, - hasReturnValue: false, - messageId: "", - node - }; - }, - onCodePathEnd() { - funcInfo = funcInfo.upper; - }, - - // Reports a given return statement if it's inconsistent. - ReturnStatement(node) { - const argument = node.argument; - let hasReturnValue = Boolean(argument); - - if (treatUndefinedAsUnspecified && hasReturnValue) { - hasReturnValue = !isIdentifier(argument, "undefined") && argument.operator !== "void"; - } - - if (!funcInfo.hasReturn) { - funcInfo.hasReturn = true; - funcInfo.hasReturnValue = hasReturnValue; - funcInfo.messageId = hasReturnValue ? "missingReturnValue" : "unexpectedReturnValue"; - funcInfo.data = { - name: funcInfo.node.type === "Program" - ? "Program" - : lodash.upperFirst(astUtils.getFunctionNameWithKind(funcInfo.node)) - }; - } else if (funcInfo.hasReturnValue !== hasReturnValue) { - context.report({ - node, - messageId: funcInfo.messageId, - data: funcInfo.data - }); - } - }, - - // Reports a given program/function if the implicit returning is not consistent. - "Program:exit": checkLastSegment, - "FunctionDeclaration:exit": checkLastSegment, - "FunctionExpression:exit": checkLastSegment, - "ArrowFunctionExpression:exit": checkLastSegment - }; - } -}; diff --git a/node_modules/eslint/lib/rules/consistent-this.js b/node_modules/eslint/lib/rules/consistent-this.js deleted file mode 100644 index 5cc3a64..0000000 --- a/node_modules/eslint/lib/rules/consistent-this.js +++ /dev/null @@ -1,149 +0,0 @@ -/** - * @fileoverview Rule to enforce consistent naming of "this" context variables - * @author Raphael Pigulla - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent naming when capturing the current execution context", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/consistent-this" - }, - - schema: { - type: "array", - items: { - type: "string", - minLength: 1 - }, - uniqueItems: true - }, - - messages: { - aliasNotAssignedToThis: "Designated alias '{{name}}' is not assigned to 'this'.", - unexpectedAlias: "Unexpected alias '{{name}}' for 'this'." - } - }, - - create(context) { - let aliases = []; - - if (context.options.length === 0) { - aliases.push("that"); - } else { - aliases = context.options; - } - - /** - * Reports that a variable declarator or assignment expression is assigning - * a non-'this' value to the specified alias. - * @param {ASTNode} node - The assigning node. - * @param {string} name - the name of the alias that was incorrectly used. - * @returns {void} - */ - function reportBadAssignment(node, name) { - context.report({ node, messageId: "aliasNotAssignedToThis", data: { name } }); - } - - /** - * Checks that an assignment to an identifier only assigns 'this' to the - * appropriate alias, and the alias is only assigned to 'this'. - * @param {ASTNode} node - The assigning node. - * @param {Identifier} name - The name of the variable assigned to. - * @param {Expression} value - The value of the assignment. - * @returns {void} - */ - function checkAssignment(node, name, value) { - const isThis = value.type === "ThisExpression"; - - if (aliases.indexOf(name) !== -1) { - if (!isThis || node.operator && node.operator !== "=") { - reportBadAssignment(node, name); - } - } else if (isThis) { - context.report({ node, messageId: "unexpectedAlias", data: { name } }); - } - } - - /** - * Ensures that a variable declaration of the alias in a program or function - * is assigned to the correct value. - * @param {string} alias alias the check the assignment of. - * @param {Object} scope scope of the current code we are checking. - * @private - * @returns {void} - */ - function checkWasAssigned(alias, scope) { - const variable = scope.set.get(alias); - - if (!variable) { - return; - } - - if (variable.defs.some(def => def.node.type === "VariableDeclarator" && - def.node.init !== null)) { - return; - } - - /* - * The alias has been declared and not assigned: check it was - * assigned later in the same scope. - */ - if (!variable.references.some(reference => { - const write = reference.writeExpr; - - return ( - reference.from === scope && - write && write.type === "ThisExpression" && - write.parent.operator === "=" - ); - })) { - variable.defs.map(def => def.node).forEach(node => { - reportBadAssignment(node, alias); - }); - } - } - - /** - * Check each alias to ensure that is was assinged to the correct value. - * @returns {void} - */ - function ensureWasAssigned() { - const scope = context.getScope(); - - aliases.forEach(alias => { - checkWasAssigned(alias, scope); - }); - } - - return { - "Program:exit": ensureWasAssigned, - "FunctionExpression:exit": ensureWasAssigned, - "FunctionDeclaration:exit": ensureWasAssigned, - - VariableDeclarator(node) { - const id = node.id; - const isDestructuring = - id.type === "ArrayPattern" || id.type === "ObjectPattern"; - - if (node.init !== null && !isDestructuring) { - checkAssignment(node, id.name, node.init); - } - }, - - AssignmentExpression(node) { - if (node.left.type === "Identifier") { - checkAssignment(node, node.left.name, node.right); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/constructor-super.js b/node_modules/eslint/lib/rules/constructor-super.js deleted file mode 100644 index 3cbc2f5..0000000 --- a/node_modules/eslint/lib/rules/constructor-super.js +++ /dev/null @@ -1,395 +0,0 @@ -/** - * @fileoverview A rule to verify `super()` callings in constructor. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether a given code path segment is reachable or not. - * - * @param {CodePathSegment} segment - A code path segment to check. - * @returns {boolean} `true` if the segment is reachable. - */ -function isReachable(segment) { - return segment.reachable; -} - -/** - * Checks whether or not a given node is a constructor. - * @param {ASTNode} node - A node to check. This node type is one of - * `Program`, `FunctionDeclaration`, `FunctionExpression`, and - * `ArrowFunctionExpression`. - * @returns {boolean} `true` if the node is a constructor. - */ -function isConstructorFunction(node) { - return ( - node.type === "FunctionExpression" && - node.parent.type === "MethodDefinition" && - node.parent.kind === "constructor" - ); -} - -/** - * Checks whether a given node can be a constructor or not. - * - * @param {ASTNode} node - A node to check. - * @returns {boolean} `true` if the node can be a constructor. - */ -function isPossibleConstructor(node) { - if (!node) { - return false; - } - - switch (node.type) { - case "ClassExpression": - case "FunctionExpression": - case "ThisExpression": - case "MemberExpression": - case "CallExpression": - case "NewExpression": - case "YieldExpression": - case "TaggedTemplateExpression": - case "MetaProperty": - return true; - - case "Identifier": - return node.name !== "undefined"; - - case "AssignmentExpression": - return isPossibleConstructor(node.right); - - case "LogicalExpression": - return ( - isPossibleConstructor(node.left) || - isPossibleConstructor(node.right) - ); - - case "ConditionalExpression": - return ( - isPossibleConstructor(node.alternate) || - isPossibleConstructor(node.consequent) - ); - - case "SequenceExpression": { - const lastExpression = node.expressions[node.expressions.length - 1]; - - return isPossibleConstructor(lastExpression); - } - - default: - return false; - } -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require `super()` calls in constructors", - category: "ECMAScript 6", - recommended: true, - url: "https://eslint.org/docs/rules/constructor-super" - }, - - schema: [], - - messages: { - missingSome: "Lacked a call of 'super()' in some code paths.", - missingAll: "Expected to call 'super()'.", - - duplicate: "Unexpected duplicate 'super()'.", - badSuper: "Unexpected 'super()' because 'super' is not a constructor.", - unexpected: "Unexpected 'super()'." - } - }, - - create(context) { - - /* - * {{hasExtends: boolean, scope: Scope, codePath: CodePath}[]} - * Information for each constructor. - * - upper: Information of the upper constructor. - * - hasExtends: A flag which shows whether own class has a valid `extends` - * part. - * - scope: The scope of own class. - * - codePath: The code path object of the constructor. - */ - let funcInfo = null; - - /* - * {Map} - * Information for each code path segment. - * - calledInSomePaths: A flag of be called `super()` in some code paths. - * - calledInEveryPaths: A flag of be called `super()` in all code paths. - * - validNodes: - */ - let segInfoMap = Object.create(null); - - /** - * Gets the flag which shows `super()` is called in some paths. - * @param {CodePathSegment} segment - A code path segment to get. - * @returns {boolean} The flag which shows `super()` is called in some paths - */ - function isCalledInSomePath(segment) { - return segment.reachable && segInfoMap[segment.id].calledInSomePaths; - } - - /** - * Gets the flag which shows `super()` is called in all paths. - * @param {CodePathSegment} segment - A code path segment to get. - * @returns {boolean} The flag which shows `super()` is called in all paths. - */ - function isCalledInEveryPath(segment) { - - /* - * If specific segment is the looped segment of the current segment, - * skip the segment. - * If not skipped, this never becomes true after a loop. - */ - if (segment.nextSegments.length === 1 && - segment.nextSegments[0].isLoopedPrevSegment(segment) - ) { - return true; - } - return segment.reachable && segInfoMap[segment.id].calledInEveryPaths; - } - - return { - - /** - * Stacks a constructor information. - * @param {CodePath} codePath - A code path which was started. - * @param {ASTNode} node - The current node. - * @returns {void} - */ - onCodePathStart(codePath, node) { - if (isConstructorFunction(node)) { - - // Class > ClassBody > MethodDefinition > FunctionExpression - const classNode = node.parent.parent.parent; - const superClass = classNode.superClass; - - funcInfo = { - upper: funcInfo, - isConstructor: true, - hasExtends: Boolean(superClass), - superIsConstructor: isPossibleConstructor(superClass), - codePath - }; - } else { - funcInfo = { - upper: funcInfo, - isConstructor: false, - hasExtends: false, - superIsConstructor: false, - codePath - }; - } - }, - - /** - * Pops a constructor information. - * And reports if `super()` lacked. - * @param {CodePath} codePath - A code path which was ended. - * @param {ASTNode} node - The current node. - * @returns {void} - */ - onCodePathEnd(codePath, node) { - const hasExtends = funcInfo.hasExtends; - - // Pop. - funcInfo = funcInfo.upper; - - if (!hasExtends) { - return; - } - - // Reports if `super()` lacked. - const segments = codePath.returnedSegments; - const calledInEveryPaths = segments.every(isCalledInEveryPath); - const calledInSomePaths = segments.some(isCalledInSomePath); - - if (!calledInEveryPaths) { - context.report({ - messageId: calledInSomePaths - ? "missingSome" - : "missingAll", - node: node.parent - }); - } - }, - - /** - * Initialize information of a given code path segment. - * @param {CodePathSegment} segment - A code path segment to initialize. - * @returns {void} - */ - onCodePathSegmentStart(segment) { - if (!(funcInfo && funcInfo.isConstructor && funcInfo.hasExtends)) { - return; - } - - // Initialize info. - const info = segInfoMap[segment.id] = { - calledInSomePaths: false, - calledInEveryPaths: false, - validNodes: [] - }; - - // When there are previous segments, aggregates these. - const prevSegments = segment.prevSegments; - - if (prevSegments.length > 0) { - info.calledInSomePaths = prevSegments.some(isCalledInSomePath); - info.calledInEveryPaths = prevSegments.every(isCalledInEveryPath); - } - }, - - /** - * Update information of the code path segment when a code path was - * looped. - * @param {CodePathSegment} fromSegment - The code path segment of the - * end of a loop. - * @param {CodePathSegment} toSegment - A code path segment of the head - * of a loop. - * @returns {void} - */ - onCodePathSegmentLoop(fromSegment, toSegment) { - if (!(funcInfo && funcInfo.isConstructor && funcInfo.hasExtends)) { - return; - } - - // Update information inside of the loop. - const isRealLoop = toSegment.prevSegments.length >= 2; - - funcInfo.codePath.traverseSegments( - { first: toSegment, last: fromSegment }, - segment => { - const info = segInfoMap[segment.id]; - const prevSegments = segment.prevSegments; - - // Updates flags. - info.calledInSomePaths = prevSegments.some(isCalledInSomePath); - info.calledInEveryPaths = prevSegments.every(isCalledInEveryPath); - - // If flags become true anew, reports the valid nodes. - if (info.calledInSomePaths || isRealLoop) { - const nodes = info.validNodes; - - info.validNodes = []; - - for (let i = 0; i < nodes.length; ++i) { - const node = nodes[i]; - - context.report({ - messageId: "duplicate", - node - }); - } - } - } - ); - }, - - /** - * Checks for a call of `super()`. - * @param {ASTNode} node - A CallExpression node to check. - * @returns {void} - */ - "CallExpression:exit"(node) { - if (!(funcInfo && funcInfo.isConstructor)) { - return; - } - - // Skips except `super()`. - if (node.callee.type !== "Super") { - return; - } - - // Reports if needed. - if (funcInfo.hasExtends) { - const segments = funcInfo.codePath.currentSegments; - let duplicate = false; - let info = null; - - for (let i = 0; i < segments.length; ++i) { - const segment = segments[i]; - - if (segment.reachable) { - info = segInfoMap[segment.id]; - - duplicate = duplicate || info.calledInSomePaths; - info.calledInSomePaths = info.calledInEveryPaths = true; - } - } - - if (info) { - if (duplicate) { - context.report({ - messageId: "duplicate", - node - }); - } else if (!funcInfo.superIsConstructor) { - context.report({ - messageId: "badSuper", - node - }); - } else { - info.validNodes.push(node); - } - } - } else if (funcInfo.codePath.currentSegments.some(isReachable)) { - context.report({ - messageId: "unexpected", - node - }); - } - }, - - /** - * Set the mark to the returned path as `super()` was called. - * @param {ASTNode} node - A ReturnStatement node to check. - * @returns {void} - */ - ReturnStatement(node) { - if (!(funcInfo && funcInfo.isConstructor && funcInfo.hasExtends)) { - return; - } - - // Skips if no argument. - if (!node.argument) { - return; - } - - // Returning argument is a substitute of 'super()'. - const segments = funcInfo.codePath.currentSegments; - - for (let i = 0; i < segments.length; ++i) { - const segment = segments[i]; - - if (segment.reachable) { - const info = segInfoMap[segment.id]; - - info.calledInSomePaths = info.calledInEveryPaths = true; - } - } - }, - - /** - * Resets state. - * @returns {void} - */ - "Program:exit"() { - segInfoMap = Object.create(null); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/curly.js b/node_modules/eslint/lib/rules/curly.js deleted file mode 100644 index 07d991b..0000000 --- a/node_modules/eslint/lib/rules/curly.js +++ /dev/null @@ -1,380 +0,0 @@ -/** - * @fileoverview Rule to flag statements without curly braces - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent brace style for all control statements", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/curly" - }, - - schema: { - anyOf: [ - { - type: "array", - items: [ - { - enum: ["all"] - } - ], - minItems: 0, - maxItems: 1 - }, - { - type: "array", - items: [ - { - enum: ["multi", "multi-line", "multi-or-nest"] - }, - { - enum: ["consistent"] - } - ], - minItems: 0, - maxItems: 2 - } - ] - }, - - fixable: "code", - - messages: { - missingCurlyAfter: "Expected { after '{{name}}'.", - missingCurlyAfterCondition: "Expected { after '{{name}}' condition.", - unexpectedCurlyAfter: "Unnecessary { after '{{name}}'.", - unexpectedCurlyAfterCondition: "Unnecessary { after '{{name}}' condition." - } - }, - - create(context) { - - const multiOnly = (context.options[0] === "multi"); - const multiLine = (context.options[0] === "multi-line"); - const multiOrNest = (context.options[0] === "multi-or-nest"); - const consistent = (context.options[1] === "consistent"); - - const sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Determines if a given node is a one-liner that's on the same line as it's preceding code. - * @param {ASTNode} node The node to check. - * @returns {boolean} True if the node is a one-liner that's on the same line as it's preceding code. - * @private - */ - function isCollapsedOneLiner(node) { - const before = sourceCode.getTokenBefore(node); - const last = sourceCode.getLastToken(node); - const lastExcludingSemicolon = astUtils.isSemicolonToken(last) ? sourceCode.getTokenBefore(last) : last; - - return before.loc.start.line === lastExcludingSemicolon.loc.end.line; - } - - /** - * Determines if a given node is a one-liner. - * @param {ASTNode} node The node to check. - * @returns {boolean} True if the node is a one-liner. - * @private - */ - function isOneLiner(node) { - const first = sourceCode.getFirstToken(node), - last = sourceCode.getLastToken(node); - - return first.loc.start.line === last.loc.end.line; - } - - /** - * Checks if the given token is an `else` token or not. - * - * @param {Token} token - The token to check. - * @returns {boolean} `true` if the token is an `else` token. - */ - function isElseKeywordToken(token) { - return token.value === "else" && token.type === "Keyword"; - } - - /** - * Gets the `else` keyword token of a given `IfStatement` node. - * @param {ASTNode} node - A `IfStatement` node to get. - * @returns {Token} The `else` keyword token. - */ - function getElseKeyword(node) { - return node.alternate && sourceCode.getFirstTokenBetween(node.consequent, node.alternate, isElseKeywordToken); - } - - /** - * Checks a given IfStatement node requires braces of the consequent chunk. - * This returns `true` when below: - * - * 1. The given node has the `alternate` node. - * 2. There is a `IfStatement` which doesn't have `alternate` node in the - * trailing statement chain of the `consequent` node. - * - * @param {ASTNode} node - A IfStatement node to check. - * @returns {boolean} `true` if the node requires braces of the consequent chunk. - */ - function requiresBraceOfConsequent(node) { - if (node.alternate && node.consequent.type === "BlockStatement") { - if (node.consequent.body.length >= 2) { - return true; - } - - for ( - let currentNode = node.consequent.body[0]; - currentNode; - currentNode = astUtils.getTrailingStatement(currentNode) - ) { - if (currentNode.type === "IfStatement" && !currentNode.alternate) { - return true; - } - } - } - - return false; - } - - /** - * Determines if a semicolon needs to be inserted after removing a set of curly brackets, in order to avoid a SyntaxError. - * @param {Token} closingBracket The } token - * @returns {boolean} `true` if a semicolon needs to be inserted after the last statement in the block. - */ - function needsSemicolon(closingBracket) { - const tokenBefore = sourceCode.getTokenBefore(closingBracket); - const tokenAfter = sourceCode.getTokenAfter(closingBracket); - const lastBlockNode = sourceCode.getNodeByRangeIndex(tokenBefore.range[0]); - - if (astUtils.isSemicolonToken(tokenBefore)) { - - // If the last statement already has a semicolon, don't add another one. - return false; - } - - if (!tokenAfter) { - - // If there are no statements after this block, there is no need to add a semicolon. - return false; - } - - if (lastBlockNode.type === "BlockStatement" && lastBlockNode.parent.type !== "FunctionExpression" && lastBlockNode.parent.type !== "ArrowFunctionExpression") { - - /* - * If the last node surrounded by curly brackets is a BlockStatement (other than a FunctionExpression or an ArrowFunctionExpression), - * don't insert a semicolon. Otherwise, the semicolon would be parsed as a separate statement, which would cause - * a SyntaxError if it was followed by `else`. - */ - return false; - } - - if (tokenBefore.loc.end.line === tokenAfter.loc.start.line) { - - // If the next token is on the same line, insert a semicolon. - return true; - } - - if (/^[([/`+-]/.test(tokenAfter.value)) { - - // If the next token starts with a character that would disrupt ASI, insert a semicolon. - return true; - } - - if (tokenBefore.type === "Punctuator" && (tokenBefore.value === "++" || tokenBefore.value === "--")) { - - // If the last token is ++ or --, insert a semicolon to avoid disrupting ASI. - return true; - } - - // Otherwise, do not insert a semicolon. - return false; - } - - /** - * Prepares to check the body of a node to see if it's a block statement. - * @param {ASTNode} node The node to report if there's a problem. - * @param {ASTNode} body The body node to check for blocks. - * @param {string} name The name to report if there's a problem. - * @param {{ condition: boolean }} opts Options to pass to the report functions - * @returns {Object} a prepared check object, with "actual", "expected", "check" properties. - * "actual" will be `true` or `false` whether the body is already a block statement. - * "expected" will be `true` or `false` if the body should be a block statement or not, or - * `null` if it doesn't matter, depending on the rule options. It can be modified to change - * the final behavior of "check". - * "check" will be a function reporting appropriate problems depending on the other - * properties. - */ - function prepareCheck(node, body, name, opts) { - const hasBlock = (body.type === "BlockStatement"); - let expected = null; - - if (node.type === "IfStatement" && node.consequent === body && requiresBraceOfConsequent(node)) { - expected = true; - } else if (multiOnly) { - if (hasBlock && body.body.length === 1) { - expected = false; - } - } else if (multiLine) { - if (!isCollapsedOneLiner(body)) { - expected = true; - } - } else if (multiOrNest) { - if (hasBlock && body.body.length === 1 && isOneLiner(body.body[0])) { - const leadingComments = sourceCode.getCommentsBefore(body.body[0]); - - expected = leadingComments.length > 0; - } else if (!isOneLiner(body)) { - expected = true; - } - } else { - expected = true; - } - - return { - actual: hasBlock, - expected, - check() { - if (this.expected !== null && this.expected !== this.actual) { - if (this.expected) { - context.report({ - node, - loc: (name !== "else" ? node : getElseKeyword(node)).loc.start, - messageId: opts && opts.condition ? "missingCurlyAfterCondition" : "missingCurlyAfter", - data: { - name - }, - fix: fixer => fixer.replaceText(body, `{${sourceCode.getText(body)}}`) - }); - } else { - context.report({ - node, - loc: (name !== "else" ? node : getElseKeyword(node)).loc.start, - messageId: opts && opts.condition ? "unexpectedCurlyAfterCondition" : "unexpectedCurlyAfter", - data: { - name - }, - fix(fixer) { - - /* - * `do while` expressions sometimes need a space to be inserted after `do`. - * e.g. `do{foo()} while (bar)` should be corrected to `do foo() while (bar)` - */ - const needsPrecedingSpace = node.type === "DoWhileStatement" && - sourceCode.getTokenBefore(body).range[1] === body.range[0] && - !astUtils.canTokensBeAdjacent("do", sourceCode.getFirstToken(body, { skip: 1 })); - - const openingBracket = sourceCode.getFirstToken(body); - const closingBracket = sourceCode.getLastToken(body); - const lastTokenInBlock = sourceCode.getTokenBefore(closingBracket); - - if (needsSemicolon(closingBracket)) { - - /* - * If removing braces would cause a SyntaxError due to multiple statements on the same line (or - * change the semantics of the code due to ASI), don't perform a fix. - */ - return null; - } - - const resultingBodyText = sourceCode.getText().slice(openingBracket.range[1], lastTokenInBlock.range[0]) + - sourceCode.getText(lastTokenInBlock) + - sourceCode.getText().slice(lastTokenInBlock.range[1], closingBracket.range[0]); - - return fixer.replaceText(body, (needsPrecedingSpace ? " " : "") + resultingBodyText); - } - }); - } - } - } - }; - } - - /** - * Prepares to check the bodies of a "if", "else if" and "else" chain. - * @param {ASTNode} node The first IfStatement node of the chain. - * @returns {Object[]} prepared checks for each body of the chain. See `prepareCheck` for more - * information. - */ - function prepareIfChecks(node) { - const preparedChecks = []; - - for (let currentNode = node; currentNode; currentNode = currentNode.alternate) { - preparedChecks.push(prepareCheck(currentNode, currentNode.consequent, "if", { condition: true })); - if (currentNode.alternate && currentNode.alternate.type !== "IfStatement") { - preparedChecks.push(prepareCheck(currentNode, currentNode.alternate, "else")); - break; - } - } - - if (consistent) { - - /* - * If any node should have or already have braces, make sure they - * all have braces. - * If all nodes shouldn't have braces, make sure they don't. - */ - const expected = preparedChecks.some(preparedCheck => { - if (preparedCheck.expected !== null) { - return preparedCheck.expected; - } - return preparedCheck.actual; - }); - - preparedChecks.forEach(preparedCheck => { - preparedCheck.expected = expected; - }); - } - - return preparedChecks; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - IfStatement(node) { - if (node.parent.type !== "IfStatement") { - prepareIfChecks(node).forEach(preparedCheck => { - preparedCheck.check(); - }); - } - }, - - WhileStatement(node) { - prepareCheck(node, node.body, "while", { condition: true }).check(); - }, - - DoWhileStatement(node) { - prepareCheck(node, node.body, "do").check(); - }, - - ForStatement(node) { - prepareCheck(node, node.body, "for", { condition: true }).check(); - }, - - ForInStatement(node) { - prepareCheck(node, node.body, "for-in").check(); - }, - - ForOfStatement(node) { - prepareCheck(node, node.body, "for-of").check(); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/default-case.js b/node_modules/eslint/lib/rules/default-case.js deleted file mode 100644 index cf12319..0000000 --- a/node_modules/eslint/lib/rules/default-case.js +++ /dev/null @@ -1,95 +0,0 @@ -/** - * @fileoverview require default case in switch statements - * @author Aliaksei Shytkin - */ -"use strict"; - -const DEFAULT_COMMENT_PATTERN = /^no default$/i; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require `default` cases in `switch` statements", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/default-case" - }, - - schema: [{ - type: "object", - properties: { - commentPattern: { - type: "string" - } - }, - additionalProperties: false - }], - - messages: { - missingDefaultCase: "Expected a default case." - } - }, - - create(context) { - const options = context.options[0] || {}; - const commentPattern = options.commentPattern - ? new RegExp(options.commentPattern) - : DEFAULT_COMMENT_PATTERN; - - const sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Shortcut to get last element of array - * @param {*[]} collection Array - * @returns {*} Last element - */ - function last(collection) { - return collection[collection.length - 1]; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - - SwitchStatement(node) { - - if (!node.cases.length) { - - /* - * skip check of empty switch because there is no easy way - * to extract comments inside it now - */ - return; - } - - const hasDefault = node.cases.some(v => v.test === null); - - if (!hasDefault) { - - let comment; - - const lastCase = last(node.cases); - const comments = sourceCode.getCommentsAfter(lastCase); - - if (comments.length) { - comment = last(comments); - } - - if (!comment || !commentPattern.test(comment.value.trim())) { - context.report({ node, messageId: "missingDefaultCase" }); - } - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/dot-location.js b/node_modules/eslint/lib/rules/dot-location.js deleted file mode 100644 index 7ff8ca6..0000000 --- a/node_modules/eslint/lib/rules/dot-location.js +++ /dev/null @@ -1,94 +0,0 @@ -/** - * @fileoverview Validates newlines before and after dots - * @author Greg Cochard - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent newlines before and after dots", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/dot-location" - }, - - schema: [ - { - enum: ["object", "property"] - } - ], - - fixable: "code", - - messages: { - expectedDotAfterObject: "Expected dot to be on same line as object.", - expectedDotBeforeProperty: "Expected dot to be on same line as property." - } - }, - - create(context) { - - const config = context.options[0]; - - // default to onObject if no preference is passed - const onObject = config === "object" || !config; - - const sourceCode = context.getSourceCode(); - - /** - * Reports if the dot between object and property is on the correct loccation. - * @param {ASTNode} obj The object owning the property. - * @param {ASTNode} prop The property of the object. - * @param {ASTNode} node The corresponding node of the token. - * @returns {void} - */ - function checkDotLocation(obj, prop, node) { - const dot = sourceCode.getTokenBefore(prop); - const textBeforeDot = sourceCode.getText().slice(obj.range[1], dot.range[0]); - const textAfterDot = sourceCode.getText().slice(dot.range[1], prop.range[0]); - - if (dot.type === "Punctuator" && dot.value === ".") { - if (onObject) { - if (!astUtils.isTokenOnSameLine(obj, dot)) { - const neededTextAfterObj = astUtils.isDecimalInteger(obj) ? " " : ""; - - context.report({ - node, - loc: dot.loc.start, - messageId: "expectedDotAfterObject", - fix: fixer => fixer.replaceTextRange([obj.range[1], prop.range[0]], `${neededTextAfterObj}.${textBeforeDot}${textAfterDot}`) - }); - } - } else if (!astUtils.isTokenOnSameLine(dot, prop)) { - context.report({ - node, - loc: dot.loc.start, - messageId: "expectedDotBeforeProperty", - fix: fixer => fixer.replaceTextRange([obj.range[1], prop.range[0]], `${textBeforeDot}${textAfterDot}.`) - }); - } - } - } - - /** - * Checks the spacing of the dot within a member expression. - * @param {ASTNode} node The node to check. - * @returns {void} - */ - function checkNode(node) { - checkDotLocation(node.object, node.property, node); - } - - return { - MemberExpression: checkNode - }; - } -}; diff --git a/node_modules/eslint/lib/rules/dot-notation.js b/node_modules/eslint/lib/rules/dot-notation.js deleted file mode 100644 index c381661..0000000 --- a/node_modules/eslint/lib/rules/dot-notation.js +++ /dev/null @@ -1,165 +0,0 @@ -/** - * @fileoverview Rule to warn about using dot notation instead of square bracket notation when possible. - * @author Josh Perez - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const validIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/; -const keywords = require("../util/keywords"); - -module.exports = { - meta: { - docs: { - description: "enforce dot notation whenever possible", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/dot-notation" - }, - - schema: [ - { - type: "object", - properties: { - allowKeywords: { - type: "boolean" - }, - allowPattern: { - type: "string" - } - }, - additionalProperties: false - } - ], - - fixable: "code", - - messages: { - useDot: "[{{key}}] is better written in dot notation.", - useBrackets: ".{{key}} is a syntax error." - } - }, - - create(context) { - const options = context.options[0] || {}; - const allowKeywords = options.allowKeywords === void 0 || !!options.allowKeywords; - const sourceCode = context.getSourceCode(); - - let allowPattern; - - if (options.allowPattern) { - allowPattern = new RegExp(options.allowPattern); - } - - /** - * Check if the property is valid dot notation - * @param {ASTNode} node The dot notation node - * @param {string} value Value which is to be checked - * @returns {void} - */ - function checkComputedProperty(node, value) { - if ( - validIdentifier.test(value) && - (allowKeywords || keywords.indexOf(String(value)) === -1) && - !(allowPattern && allowPattern.test(value)) - ) { - const formattedValue = node.property.type === "Literal" ? JSON.stringify(value) : `\`${value}\``; - - context.report({ - node: node.property, - messageId: "useDot", - data: { - key: formattedValue - }, - fix(fixer) { - const leftBracket = sourceCode.getTokenAfter(node.object, astUtils.isOpeningBracketToken); - const rightBracket = sourceCode.getLastToken(node); - - if (sourceCode.getFirstTokenBetween(leftBracket, rightBracket, { includeComments: true, filter: astUtils.isCommentToken })) { - - // Don't perform any fixes if there are comments inside the brackets. - return null; - } - - const tokenAfterProperty = sourceCode.getTokenAfter(rightBracket); - const needsSpaceAfterProperty = tokenAfterProperty && - rightBracket.range[1] === tokenAfterProperty.range[0] && - !astUtils.canTokensBeAdjacent(String(value), tokenAfterProperty); - - const textBeforeDot = astUtils.isDecimalInteger(node.object) ? " " : ""; - const textAfterProperty = needsSpaceAfterProperty ? " " : ""; - - return fixer.replaceTextRange( - [leftBracket.range[0], rightBracket.range[1]], - `${textBeforeDot}.${value}${textAfterProperty}` - ); - } - }); - } - } - - return { - MemberExpression(node) { - if ( - node.computed && - node.property.type === "Literal" - ) { - checkComputedProperty(node, node.property.value); - } - if ( - node.computed && - node.property.type === "TemplateLiteral" && - node.property.expressions.length === 0 - ) { - checkComputedProperty(node, node.property.quasis[0].value.cooked); - } - if ( - !allowKeywords && - !node.computed && - keywords.indexOf(String(node.property.name)) !== -1 - ) { - context.report({ - node: node.property, - messageId: "useBrackets", - data: { - key: node.property.name - }, - fix(fixer) { - const dot = sourceCode.getTokenBefore(node.property); - const textAfterDot = sourceCode.text.slice(dot.range[1], node.property.range[0]); - - if (textAfterDot.trim()) { - - // Don't perform any fixes if there are comments between the dot and the property name. - return null; - } - - if (node.object.type === "Identifier" && node.object.name === "let") { - - /* - * A statement that starts with `let[` is parsed as a destructuring variable declaration, not - * a MemberExpression. - */ - return null; - } - - return fixer.replaceTextRange( - [dot.range[0], node.property.range[1]], - `[${textAfterDot}"${node.property.name}"]` - ); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/eol-last.js b/node_modules/eslint/lib/rules/eol-last.js deleted file mode 100644 index 3ecf422..0000000 --- a/node_modules/eslint/lib/rules/eol-last.js +++ /dev/null @@ -1,107 +0,0 @@ -/** - * @fileoverview Require or disallow newline at the end of files - * @author Nodeca Team - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow newline at the end of files", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/eol-last" - }, - fixable: "whitespace", - schema: [ - { - enum: ["always", "never", "unix", "windows"] - } - ], - messages: { - missing: "Newline required at end of file but not found.", - unexpected: "Newline not allowed at end of file." - } - }, - create(context) { - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - Program: function checkBadEOF(node) { - const sourceCode = context.getSourceCode(), - src = sourceCode.getText(), - location = { - column: lodash.last(sourceCode.lines).length, - line: sourceCode.lines.length - }, - LF = "\n", - CRLF = `\r${LF}`, - endsWithNewline = lodash.endsWith(src, LF); - - /* - * Empty source is always valid: No content in file so we don't - * need to lint for a newline on the last line of content. - */ - if (!src.length) { - return; - } - - let mode = context.options[0] || "always", - appendCRLF = false; - - if (mode === "unix") { - - // `"unix"` should behave exactly as `"always"` - mode = "always"; - } - if (mode === "windows") { - - // `"windows"` should behave exactly as `"always"`, but append CRLF in the fixer for backwards compatibility - mode = "always"; - appendCRLF = true; - } - if (mode === "always" && !endsWithNewline) { - - // File is not newline-terminated, but should be - context.report({ - node, - loc: location, - messageId: "missing", - fix(fixer) { - return fixer.insertTextAfterRange([0, src.length], appendCRLF ? CRLF : LF); - } - }); - } else if (mode === "never" && endsWithNewline) { - - // File is newline-terminated, but shouldn't be - context.report({ - node, - loc: location, - messageId: "unexpected", - fix(fixer) { - const finalEOLs = /(?:\r?\n)+$/, - match = finalEOLs.exec(sourceCode.text), - start = match.index, - end = sourceCode.text.length; - - return fixer.replaceTextRange([start, end], ""); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/eqeqeq.js b/node_modules/eslint/lib/rules/eqeqeq.js deleted file mode 100644 index ec9d0a7..0000000 --- a/node_modules/eslint/lib/rules/eqeqeq.js +++ /dev/null @@ -1,185 +0,0 @@ -/** - * @fileoverview Rule to flag statements that use != and == instead of !== and === - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require the use of `===` and `!==`", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/eqeqeq" - }, - - schema: { - anyOf: [ - { - type: "array", - items: [ - { - enum: ["always"] - }, - { - type: "object", - properties: { - null: { - enum: ["always", "never", "ignore"] - } - }, - additionalProperties: false - } - ], - additionalItems: false - }, - { - type: "array", - items: [ - { - enum: ["smart", "allow-null"] - } - ], - additionalItems: false - } - ] - }, - - fixable: "code", - - messages: { - unexpected: "Expected '{{expectedOperator}}' and instead saw '{{actualOperator}}'." - } - }, - - create(context) { - const config = context.options[0] || "always"; - const options = context.options[1] || {}; - const sourceCode = context.getSourceCode(); - - const nullOption = (config === "always") - ? options.null || "always" - : "ignore"; - const enforceRuleForNull = (nullOption === "always"); - const enforceInverseRuleForNull = (nullOption === "never"); - - /** - * Checks if an expression is a typeof expression - * @param {ASTNode} node The node to check - * @returns {boolean} if the node is a typeof expression - */ - function isTypeOf(node) { - return node.type === "UnaryExpression" && node.operator === "typeof"; - } - - /** - * Checks if either operand of a binary expression is a typeof operation - * @param {ASTNode} node The node to check - * @returns {boolean} if one of the operands is typeof - * @private - */ - function isTypeOfBinary(node) { - return isTypeOf(node.left) || isTypeOf(node.right); - } - - /** - * Checks if operands are literals of the same type (via typeof) - * @param {ASTNode} node The node to check - * @returns {boolean} if operands are of same type - * @private - */ - function areLiteralsAndSameType(node) { - return node.left.type === "Literal" && node.right.type === "Literal" && - typeof node.left.value === typeof node.right.value; - } - - /** - * Checks if one of the operands is a literal null - * @param {ASTNode} node The node to check - * @returns {boolean} if operands are null - * @private - */ - function isNullCheck(node) { - return astUtils.isNullLiteral(node.right) || astUtils.isNullLiteral(node.left); - } - - /** - * Gets the location (line and column) of the binary expression's operator - * @param {ASTNode} node The binary expression node to check - * @param {string} operator The operator to find - * @returns {Object} { line, column } location of operator - * @private - */ - function getOperatorLocation(node) { - const opToken = sourceCode.getTokenAfter(node.left); - - return { line: opToken.loc.start.line, column: opToken.loc.start.column }; - } - - /** - * Reports a message for this rule. - * @param {ASTNode} node The binary expression node that was checked - * @param {string} expectedOperator The operator that was expected (either '==', '!=', '===', or '!==') - * @returns {void} - * @private - */ - function report(node, expectedOperator) { - context.report({ - node, - loc: getOperatorLocation(node), - messageId: "unexpected", - data: { expectedOperator, actualOperator: node.operator }, - fix(fixer) { - - // If the comparison is a `typeof` comparison or both sides are literals with the same type, then it's safe to fix. - if (isTypeOfBinary(node) || areLiteralsAndSameType(node)) { - const operatorToken = sourceCode.getFirstTokenBetween( - node.left, - node.right, - token => token.value === node.operator - ); - - return fixer.replaceText(operatorToken, expectedOperator); - } - return null; - } - }); - } - - return { - BinaryExpression(node) { - const isNull = isNullCheck(node); - - if (node.operator !== "==" && node.operator !== "!=") { - if (enforceInverseRuleForNull && isNull) { - report(node, node.operator.slice(0, -1)); - } - return; - } - - if (config === "smart" && (isTypeOfBinary(node) || - areLiteralsAndSameType(node) || isNull)) { - return; - } - - if (!enforceRuleForNull && isNull) { - return; - } - - report(node, `${node.operator}=`); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/for-direction.js b/node_modules/eslint/lib/rules/for-direction.js deleted file mode 100644 index c91888d..0000000 --- a/node_modules/eslint/lib/rules/for-direction.js +++ /dev/null @@ -1,106 +0,0 @@ -/** - * @fileoverview enforce "for" loop update clause moving the counter in the right direction.(for-direction) - * @author Aladdin-ADD - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce \"for\" loop update clause moving the counter in the right direction.", - category: "Possible Errors", - recommended: false, - url: "https://eslint.org/docs/rules/for-direction" - }, - fixable: null, - schema: [] - }, - - create(context) { - - /** - * report an error. - * @param {ASTNode} node the node to report. - * @returns {void} - */ - function report(node) { - context.report({ - node, - message: "The update clause in this loop moves the variable in the wrong direction." - }); - } - - /** - * check UpdateExpression add/sub the counter - * @param {ASTNode} update UpdateExpression to check - * @param {string} counter variable name to check - * @returns {int} if add return 1, if sub return -1, if nochange, return 0 - */ - function getUpdateDirection(update, counter) { - if (update.argument.type === "Identifier" && update.argument.name === counter) { - if (update.operator === "++") { - return 1; - } - if (update.operator === "--") { - return -1; - } - } - return 0; - } - - /** - * check AssignmentExpression add/sub the counter - * @param {ASTNode} update AssignmentExpression to check - * @param {string} counter variable name to check - * @returns {int} if add return 1, if sub return -1, if nochange, return 0 - */ - function getAssignmentDirection(update, counter) { - if (update.left.name === counter) { - if (update.operator === "+=") { - return 1; - } - if (update.operator === "-=") { - return -1; - } - } - return 0; - } - return { - ForStatement(node) { - - if (node.test && node.test.type === "BinaryExpression" && node.test.left.type === "Identifier" && node.update) { - const counter = node.test.left.name; - const operator = node.test.operator; - const update = node.update; - - if (operator === "<" || operator === "<=") { - - // report error if update sub the counter (--, -=) - if (update.type === "UpdateExpression" && getUpdateDirection(update, counter) < 0) { - report(node); - } - - if (update.type === "AssignmentExpression" && getAssignmentDirection(update, counter) < 0) { - report(node); - } - } else if (operator === ">" || operator === ">=") { - - // report error if update add the counter (++, +=) - if (update.type === "UpdateExpression" && getUpdateDirection(update, counter) > 0) { - report(node); - } - - if (update.type === "AssignmentExpression" && getAssignmentDirection(update, counter) > 0) { - report(node); - } - } - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/func-call-spacing.js b/node_modules/eslint/lib/rules/func-call-spacing.js deleted file mode 100644 index b13613c..0000000 --- a/node_modules/eslint/lib/rules/func-call-spacing.js +++ /dev/null @@ -1,160 +0,0 @@ -/** - * @fileoverview Rule to control spacing within function calls - * @author Matt DuVall - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow spacing between function identifiers and their invocations", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/func-call-spacing" - }, - - fixable: "whitespace", - schema: { - anyOf: [ - { - type: "array", - items: [ - { - enum: ["never"] - } - ], - minItems: 0, - maxItems: 1 - }, - { - type: "array", - items: [ - { - enum: ["always"] - }, - { - type: "object", - properties: { - allowNewlines: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - minItems: 0, - maxItems: 2 - } - ] - } - }, - - create(context) { - - const never = context.options[0] !== "always"; - const allowNewlines = !never && context.options[1] && context.options[1].allowNewlines; - const sourceCode = context.getSourceCode(); - const text = sourceCode.getText(); - - /** - * Check if open space is present in a function name - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkSpacing(node) { - const lastToken = sourceCode.getLastToken(node); - const lastCalleeToken = sourceCode.getLastToken(node.callee); - const parenToken = sourceCode.getFirstTokenBetween(lastCalleeToken, lastToken, astUtils.isOpeningParenToken); - const prevToken = parenToken && sourceCode.getTokenBefore(parenToken); - - // Parens in NewExpression are optional - if (!(parenToken && parenToken.range[1] < node.range[1])) { - return; - } - - const textBetweenTokens = text.slice(prevToken.range[1], parenToken.range[0]).replace(/\/\*.*?\*\//g, ""); - const hasWhitespace = /\s/.test(textBetweenTokens); - const hasNewline = hasWhitespace && astUtils.LINEBREAK_MATCHER.test(textBetweenTokens); - - /* - * never allowNewlines hasWhitespace hasNewline message - * F F F F Missing space between function name and paren. - * F F F T (Invalid `!hasWhitespace && hasNewline`) - * F F T T Unexpected newline between function name and paren. - * F F T F (OK) - * F T T F (OK) - * F T T T (OK) - * F T F T (Invalid `!hasWhitespace && hasNewline`) - * F T F F Missing space between function name and paren. - * T T F F (Invalid `never && allowNewlines`) - * T T F T (Invalid `!hasWhitespace && hasNewline`) - * T T T T (Invalid `never && allowNewlines`) - * T T T F (Invalid `never && allowNewlines`) - * T F T F Unexpected space between function name and paren. - * T F T T Unexpected space between function name and paren. - * T F F T (Invalid `!hasWhitespace && hasNewline`) - * T F F F (OK) - * - * T T Unexpected space between function name and paren. - * F F Missing space between function name and paren. - * F F T Unexpected newline between function name and paren. - */ - - if (never && hasWhitespace) { - context.report({ - node, - loc: lastCalleeToken.loc.start, - message: "Unexpected space between function name and paren.", - fix(fixer) { - - /* - * Only autofix if there is no newline - * https://github.com/eslint/eslint/issues/7787 - */ - if (!hasNewline) { - return fixer.removeRange([prevToken.range[1], parenToken.range[0]]); - } - - return null; - } - }); - } else if (!never && !hasWhitespace) { - context.report({ - node, - loc: lastCalleeToken.loc.start, - message: "Missing space between function name and paren.", - fix(fixer) { - return fixer.insertTextBefore(parenToken, " "); - } - }); - } else if (!never && !allowNewlines && hasNewline) { - context.report({ - node, - loc: lastCalleeToken.loc.start, - message: "Unexpected newline between function name and paren.", - fix(fixer) { - return fixer.replaceTextRange([prevToken.range[1], parenToken.range[0]], " "); - } - }); - } - } - - return { - CallExpression: checkSpacing, - NewExpression: checkSpacing - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/func-name-matching.js b/node_modules/eslint/lib/rules/func-name-matching.js deleted file mode 100644 index 85fd7d4..0000000 --- a/node_modules/eslint/lib/rules/func-name-matching.js +++ /dev/null @@ -1,194 +0,0 @@ -/** - * @fileoverview Rule to require function names to match the name of the variable or property to which they are assigned. - * @author Annie Zhang, Pavel Strashkin - */ - -"use strict"; - -//-------------------------------------------------------------------------- -// Requirements -//-------------------------------------------------------------------------- - -const astUtils = require("../ast-utils"); -const esutils = require("esutils"); - -//-------------------------------------------------------------------------- -// Helpers -//-------------------------------------------------------------------------- - -/** - * Determines if a pattern is `module.exports` or `module["exports"]` - * @param {ASTNode} pattern The left side of the AssignmentExpression - * @returns {boolean} True if the pattern is `module.exports` or `module["exports"]` - */ -function isModuleExports(pattern) { - if (pattern.type === "MemberExpression" && pattern.object.type === "Identifier" && pattern.object.name === "module") { - - // module.exports - if (pattern.property.type === "Identifier" && pattern.property.name === "exports") { - return true; - } - - // module["exports"] - if (pattern.property.type === "Literal" && pattern.property.value === "exports") { - return true; - } - } - return false; -} - -/** - * Determines if a string name is a valid identifier - * @param {string} name The string to be checked - * @param {int} ecmaVersion The ECMAScript version if specified in the parserOptions config - * @returns {boolean} True if the string is a valid identifier - */ -function isIdentifier(name, ecmaVersion) { - if (ecmaVersion >= 6) { - return esutils.keyword.isIdentifierES6(name); - } - return esutils.keyword.isIdentifierES5(name); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const alwaysOrNever = { enum: ["always", "never"] }; -const optionsObject = { - type: "object", - properties: { - includeCommonJSModuleExports: { - type: "boolean" - } - }, - additionalProperties: false -}; - -module.exports = { - meta: { - docs: { - description: "require function names to match the name of the variable or property to which they are assigned", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/func-name-matching" - }, - - schema: { - anyOf: [{ - type: "array", - additionalItems: false, - items: [alwaysOrNever, optionsObject] - }, { - type: "array", - additionalItems: false, - items: [optionsObject] - }] - } - }, - - create(context) { - const options = (typeof context.options[0] === "object" ? context.options[0] : context.options[1]) || {}; - const nameMatches = typeof context.options[0] === "string" ? context.options[0] : "always"; - const includeModuleExports = options.includeCommonJSModuleExports; - const ecmaVersion = context.parserOptions && context.parserOptions.ecmaVersion ? context.parserOptions.ecmaVersion : 5; - - /** - * Compares identifiers based on the nameMatches option - * @param {string} x the first identifier - * @param {string} y the second identifier - * @returns {boolean} whether the two identifiers should warn. - */ - function shouldWarn(x, y) { - return (nameMatches === "always" && x !== y) || (nameMatches === "never" && x === y); - } - - /** - * Reports - * @param {ASTNode} node The node to report - * @param {string} name The variable or property name - * @param {string} funcName The function name - * @param {boolean} isProp True if the reported node is a property assignment - * @returns {void} - */ - function report(node, name, funcName, isProp) { - let message; - - if (nameMatches === "always" && isProp) { - message = "Function name `{{funcName}}` should match property name `{{name}}`"; - } else if (nameMatches === "always") { - message = "Function name `{{funcName}}` should match variable name `{{name}}`"; - } else if (isProp) { - message = "Function name `{{funcName}}` should not match property name `{{name}}`"; - } else { - message = "Function name `{{funcName}}` should not match variable name `{{name}}`"; - } - context.report({ - node, - message, - data: { - name, - funcName - } - }); - } - - /** - * Determines whether a given node is a string literal - * @param {ASTNode} node The node to check - * @returns {boolean} `true` if the node is a string literal - */ - function isStringLiteral(node) { - return node.type === "Literal" && typeof node.value === "string"; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - - VariableDeclarator(node) { - if (!node.init || node.init.type !== "FunctionExpression" || node.id.type !== "Identifier") { - return; - } - if (node.init.id && shouldWarn(node.id.name, node.init.id.name)) { - report(node, node.id.name, node.init.id.name, false); - } - }, - - AssignmentExpression(node) { - if ( - node.right.type !== "FunctionExpression" || - (node.left.computed && node.left.property.type !== "Literal") || - (!includeModuleExports && isModuleExports(node.left)) || - (node.left.type !== "Identifier" && node.left.type !== "MemberExpression") - ) { - return; - } - - const isProp = node.left.type === "MemberExpression"; - const name = isProp ? astUtils.getStaticPropertyName(node.left) : node.left.name; - - if (node.right.id && isIdentifier(name) && shouldWarn(name, node.right.id.name)) { - report(node, name, node.right.id.name, isProp); - } - }, - - Property(node) { - if (node.value.type !== "FunctionExpression" || !node.value.id || node.computed && !isStringLiteral(node.key)) { - return; - } - if (node.key.type === "Identifier" && shouldWarn(node.key.name, node.value.id.name)) { - report(node, node.key.name, node.value.id.name, true); - } else if ( - isStringLiteral(node.key) && - isIdentifier(node.key.value, ecmaVersion) && - shouldWarn(node.key.value, node.value.id.name) - ) { - report(node, node.key.value, node.value.id.name, true); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/func-names.js b/node_modules/eslint/lib/rules/func-names.js deleted file mode 100644 index 722f276..0000000 --- a/node_modules/eslint/lib/rules/func-names.js +++ /dev/null @@ -1,115 +0,0 @@ -/** - * @fileoverview Rule to warn when a function expression does not have a name. - * @author Kyle T. Nunery - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -/** - * Checks whether or not a given variable is a function name. - * @param {eslint-scope.Variable} variable - A variable to check. - * @returns {boolean} `true` if the variable is a function name. - */ -function isFunctionName(variable) { - return variable && variable.defs[0].type === "FunctionName"; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow named `function` expressions", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/func-names" - }, - - schema: [ - { - enum: ["always", "as-needed", "never"] - } - ] - }, - - create(context) { - const never = context.options[0] === "never"; - const asNeeded = context.options[0] === "as-needed"; - - /** - * Determines whether the current FunctionExpression node is a get, set, or - * shorthand method in an object literal or a class. - * @param {ASTNode} node - A node to check. - * @returns {boolean} True if the node is a get, set, or shorthand method. - */ - function isObjectOrClassMethod(node) { - const parent = node.parent; - - return (parent.type === "MethodDefinition" || ( - parent.type === "Property" && ( - parent.method || - parent.kind === "get" || - parent.kind === "set" - ) - )); - } - - /** - * Determines whether the current FunctionExpression node has a name that would be - * inferred from context in a conforming ES6 environment. - * @param {ASTNode} node - A node to check. - * @returns {boolean} True if the node would have a name assigned automatically. - */ - function hasInferredName(node) { - const parent = node.parent; - - return isObjectOrClassMethod(node) || - (parent.type === "VariableDeclarator" && parent.id.type === "Identifier" && parent.init === node) || - (parent.type === "Property" && parent.value === node) || - (parent.type === "AssignmentExpression" && parent.left.type === "Identifier" && parent.right === node) || - (parent.type === "ExportDefaultDeclaration" && parent.declaration === node) || - (parent.type === "AssignmentPattern" && parent.right === node); - } - - return { - "FunctionExpression:exit"(node) { - - // Skip recursive functions. - const nameVar = context.getDeclaredVariables(node)[0]; - - if (isFunctionName(nameVar) && nameVar.references.length > 0) { - return; - } - - const hasName = Boolean(node.id && node.id.name); - const name = astUtils.getFunctionNameWithKind(node); - - if (never) { - if (hasName) { - context.report({ - node, - message: "Unexpected named {{name}}.", - data: { name } - }); - } - } else { - if (!hasName && (asNeeded ? !hasInferredName(node) : !isObjectOrClassMethod(node))) { - context.report({ - node, - message: "Unexpected unnamed {{name}}.", - data: { name } - }); - } - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/func-style.js b/node_modules/eslint/lib/rules/func-style.js deleted file mode 100644 index ea6d74f..0000000 --- a/node_modules/eslint/lib/rules/func-style.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * @fileoverview Rule to enforce a particular function style - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce the consistent use of either `function` declarations or expressions", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/func-style" - }, - - schema: [ - { - enum: ["declaration", "expression"] - }, - { - type: "object", - properties: { - allowArrowFunctions: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const style = context.options[0], - allowArrowFunctions = context.options[1] && context.options[1].allowArrowFunctions === true, - enforceDeclarations = (style === "declaration"), - stack = []; - - const nodesToCheck = { - FunctionDeclaration(node) { - stack.push(false); - - if (!enforceDeclarations && node.parent.type !== "ExportDefaultDeclaration") { - context.report({ node, message: "Expected a function expression." }); - } - }, - "FunctionDeclaration:exit"() { - stack.pop(); - }, - - FunctionExpression(node) { - stack.push(false); - - if (enforceDeclarations && node.parent.type === "VariableDeclarator") { - context.report({ node: node.parent, message: "Expected a function declaration." }); - } - }, - "FunctionExpression:exit"() { - stack.pop(); - }, - - ThisExpression() { - if (stack.length > 0) { - stack[stack.length - 1] = true; - } - } - }; - - if (!allowArrowFunctions) { - nodesToCheck.ArrowFunctionExpression = function() { - stack.push(false); - }; - - nodesToCheck["ArrowFunctionExpression:exit"] = function(node) { - const hasThisExpr = stack.pop(); - - if (enforceDeclarations && !hasThisExpr && node.parent.type === "VariableDeclarator") { - context.report({ node: node.parent, message: "Expected a function declaration." }); - } - }; - } - - return nodesToCheck; - - } -}; diff --git a/node_modules/eslint/lib/rules/function-paren-newline.js b/node_modules/eslint/lib/rules/function-paren-newline.js deleted file mode 100644 index 7e4f279..0000000 --- a/node_modules/eslint/lib/rules/function-paren-newline.js +++ /dev/null @@ -1,222 +0,0 @@ -/** - * @fileoverview enforce consistent line breaks inside function parentheses - * @author Teddy Katz - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent line breaks inside function parentheses", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/function-paren-newline" - }, - fixable: "whitespace", - schema: [ - { - oneOf: [ - { - enum: ["always", "never", "consistent", "multiline"] - }, - { - type: "object", - properties: { - minItems: { - type: "integer", - minimum: 0 - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const rawOption = context.options[0] || "multiline"; - const multilineOption = rawOption === "multiline"; - const consistentOption = rawOption === "consistent"; - let minItems; - - if (typeof rawOption === "object") { - minItems = rawOption.minItems; - } else if (rawOption === "always") { - minItems = 0; - } else if (rawOption === "never") { - minItems = Infinity; - } else { - minItems = null; - } - - //---------------------------------------------------------------------- - // Helpers - //---------------------------------------------------------------------- - - /** - * Determines whether there should be newlines inside function parens - * @param {ASTNode[]} elements The arguments or parameters in the list - * @param {boolean} hasLeftNewline `true` if the left paren has a newline in the current code. - * @returns {boolean} `true` if there should be newlines inside the function parens - */ - function shouldHaveNewlines(elements, hasLeftNewline) { - if (multilineOption) { - return elements.some((element, index) => index !== elements.length - 1 && element.loc.end.line !== elements[index + 1].loc.start.line); - } - if (consistentOption) { - return hasLeftNewline; - } - return elements.length >= minItems; - } - - /** - * Validates a list of arguments or parameters - * @param {Object} parens An object with keys `leftParen` for the left paren token, and `rightParen` for the right paren token - * @param {ASTNode[]} elements The arguments or parameters in the list - * @returns {void} - */ - function validateParens(parens, elements) { - const leftParen = parens.leftParen; - const rightParen = parens.rightParen; - const tokenAfterLeftParen = sourceCode.getTokenAfter(leftParen); - const tokenBeforeRightParen = sourceCode.getTokenBefore(rightParen); - const hasLeftNewline = !astUtils.isTokenOnSameLine(leftParen, tokenAfterLeftParen); - const hasRightNewline = !astUtils.isTokenOnSameLine(tokenBeforeRightParen, rightParen); - const needsNewlines = shouldHaveNewlines(elements, hasLeftNewline); - - if (hasLeftNewline && !needsNewlines) { - context.report({ - node: leftParen, - message: "Unexpected newline after '('.", - fix(fixer) { - return sourceCode.getText().slice(leftParen.range[1], tokenAfterLeftParen.range[0]).trim() - - // If there is a comment between the ( and the first element, don't do a fix. - ? null - : fixer.removeRange([leftParen.range[1], tokenAfterLeftParen.range[0]]); - } - }); - } else if (!hasLeftNewline && needsNewlines) { - context.report({ - node: leftParen, - message: "Expected a newline after '('.", - fix: fixer => fixer.insertTextAfter(leftParen, "\n") - }); - } - - if (hasRightNewline && !needsNewlines) { - context.report({ - node: rightParen, - message: "Unexpected newline before ')'.", - fix(fixer) { - return sourceCode.getText().slice(tokenBeforeRightParen.range[1], rightParen.range[0]).trim() - - // If there is a comment between the last element and the ), don't do a fix. - ? null - : fixer.removeRange([tokenBeforeRightParen.range[1], rightParen.range[0]]); - } - }); - } else if (!hasRightNewline && needsNewlines) { - context.report({ - node: rightParen, - message: "Expected a newline before ')'.", - fix: fixer => fixer.insertTextBefore(rightParen, "\n") - }); - } - } - - /** - * Gets the left paren and right paren tokens of a node. - * @param {ASTNode} node The node with parens - * @returns {Object} An object with keys `leftParen` for the left paren token, and `rightParen` for the right paren token. - * Can also return `null` if an expression has no parens (e.g. a NewExpression with no arguments, or an ArrowFunctionExpression - * with a single parameter) - */ - function getParenTokens(node) { - switch (node.type) { - case "NewExpression": - if (!node.arguments.length && !( - astUtils.isOpeningParenToken(sourceCode.getLastToken(node, { skip: 1 })) && - astUtils.isClosingParenToken(sourceCode.getLastToken(node)) - )) { - - // If the NewExpression does not have parens (e.g. `new Foo`), return null. - return null; - } - - // falls through - - case "CallExpression": - return { - leftParen: sourceCode.getTokenAfter(node.callee, astUtils.isOpeningParenToken), - rightParen: sourceCode.getLastToken(node) - }; - - case "FunctionDeclaration": - case "FunctionExpression": { - const leftParen = sourceCode.getFirstToken(node, astUtils.isOpeningParenToken); - const rightParen = node.params.length - ? sourceCode.getTokenAfter(node.params[node.params.length - 1], astUtils.isClosingParenToken) - : sourceCode.getTokenAfter(leftParen); - - return { leftParen, rightParen }; - } - - case "ArrowFunctionExpression": { - const firstToken = sourceCode.getFirstToken(node); - - if (!astUtils.isOpeningParenToken(firstToken)) { - - // If the ArrowFunctionExpression has a single param without parens, return null. - return null; - } - - return { - leftParen: firstToken, - rightParen: sourceCode.getTokenBefore(node.body, astUtils.isClosingParenToken) - }; - } - - default: - throw new TypeError(`unexpected node with type ${node.type}`); - } - } - - /** - * Validates the parentheses for a node - * @param {ASTNode} node The node with parens - * @returns {void} - */ - function validateNode(node) { - const parens = getParenTokens(node); - - if (parens) { - validateParens(parens, astUtils.isFunction(node) ? node.params : node.arguments); - } - } - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- - - return { - ArrowFunctionExpression: validateNode, - CallExpression: validateNode, - FunctionDeclaration: validateNode, - FunctionExpression: validateNode, - NewExpression: validateNode - }; - } -}; diff --git a/node_modules/eslint/lib/rules/generator-star-spacing.js b/node_modules/eslint/lib/rules/generator-star-spacing.js deleted file mode 100644 index 68f2863..0000000 --- a/node_modules/eslint/lib/rules/generator-star-spacing.js +++ /dev/null @@ -1,199 +0,0 @@ -/** - * @fileoverview Rule to check the spacing around the * in generator functions. - * @author Jamund Ferguson - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const OVERRIDE_SCHEMA = { - oneOf: [ - { - enum: ["before", "after", "both", "neither"] - }, - { - type: "object", - properties: { - before: { type: "boolean" }, - after: { type: "boolean" } - }, - additionalProperties: false - } - ] -}; - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing around `*` operators in generator functions", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/generator-star-spacing" - }, - - fixable: "whitespace", - - schema: [ - { - oneOf: [ - { - enum: ["before", "after", "both", "neither"] - }, - { - type: "object", - properties: { - before: { type: "boolean" }, - after: { type: "boolean" }, - named: OVERRIDE_SCHEMA, - anonymous: OVERRIDE_SCHEMA, - method: OVERRIDE_SCHEMA - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - - const optionDefinitions = { - before: { before: true, after: false }, - after: { before: false, after: true }, - both: { before: true, after: true }, - neither: { before: false, after: false } - }; - - /** - * Returns resolved option definitions based on an option and defaults - * - * @param {any} option - The option object or string value - * @param {Object} defaults - The defaults to use if options are not present - * @returns {Object} the resolved object definition - */ - function optionToDefinition(option, defaults) { - if (!option) { - return defaults; - } - - return typeof option === "string" - ? optionDefinitions[option] - : Object.assign({}, defaults, option); - } - - const modes = (function(option) { - const defaults = optionToDefinition(option, optionDefinitions.before); - - return { - named: optionToDefinition(option.named, defaults), - anonymous: optionToDefinition(option.anonymous, defaults), - method: optionToDefinition(option.method, defaults) - }; - }(context.options[0] || {})); - - const sourceCode = context.getSourceCode(); - - /** - * Checks if the given token is a star token or not. - * - * @param {Token} token - The token to check. - * @returns {boolean} `true` if the token is a star token. - */ - function isStarToken(token) { - return token.value === "*" && token.type === "Punctuator"; - } - - /** - * Gets the generator star token of the given function node. - * - * @param {ASTNode} node - The function node to get. - * @returns {Token} Found star token. - */ - function getStarToken(node) { - return sourceCode.getFirstToken( - (node.parent.method || node.parent.type === "MethodDefinition") ? node.parent : node, - isStarToken - ); - } - - /** - * Checks the spacing between two tokens before or after the star token. - * - * @param {string} kind Either "named", "anonymous", or "method" - * @param {string} side Either "before" or "after". - * @param {Token} leftToken `function` keyword token if side is "before", or - * star token if side is "after". - * @param {Token} rightToken Star token if side is "before", or identifier - * token if side is "after". - * @returns {void} - */ - function checkSpacing(kind, side, leftToken, rightToken) { - if (!!(rightToken.range[0] - leftToken.range[1]) !== modes[kind][side]) { - const after = leftToken.value === "*"; - const spaceRequired = modes[kind][side]; - const node = after ? leftToken : rightToken; - const type = spaceRequired ? "Missing" : "Unexpected"; - const message = "{{type}} space {{side}} *."; - const data = { - type, - side - }; - - context.report({ - node, - message, - data, - fix(fixer) { - if (spaceRequired) { - if (after) { - return fixer.insertTextAfter(node, " "); - } - return fixer.insertTextBefore(node, " "); - } - return fixer.removeRange([leftToken.range[1], rightToken.range[0]]); - } - }); - } - } - - /** - * Enforces the spacing around the star if node is a generator function. - * - * @param {ASTNode} node A function expression or declaration node. - * @returns {void} - */ - function checkFunction(node) { - if (!node.generator) { - return; - } - - const starToken = getStarToken(node); - const prevToken = sourceCode.getTokenBefore(starToken); - const nextToken = sourceCode.getTokenAfter(starToken); - - let kind = "named"; - - if (node.parent.type === "MethodDefinition" || (node.parent.type === "Property" && node.parent.method)) { - kind = "method"; - } else if (!node.id) { - kind = "anonymous"; - } - - // Only check before when preceded by `function`|`static` keyword - if (!(kind === "method" && starToken === sourceCode.getFirstToken(node.parent))) { - checkSpacing(kind, "before", prevToken, starToken); - } - - checkSpacing(kind, "after", starToken, nextToken); - } - - return { - FunctionDeclaration: checkFunction, - FunctionExpression: checkFunction - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/getter-return.js b/node_modules/eslint/lib/rules/getter-return.js deleted file mode 100644 index 58f2a39..0000000 --- a/node_modules/eslint/lib/rules/getter-return.js +++ /dev/null @@ -1,178 +0,0 @@ -/** - * @fileoverview Enforces that a return statement is present in property getters. - * @author Aladdin-ADD(hh_2013@foxmail.com) - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ -const TARGET_NODE_TYPE = /^(?:Arrow)?FunctionExpression$/; - -/** - * Checks a given code path segment is reachable. - * - * @param {CodePathSegment} segment - A segment to check. - * @returns {boolean} `true` if the segment is reachable. - */ -function isReachable(segment) { - return segment.reachable; -} - -/** - * Gets a readable location. - * - * - FunctionExpression -> the function name or `function` keyword. - * - * @param {ASTNode} node - A function node to get. - * @returns {ASTNode|Token} The node or the token of a location. - */ -function getId(node) { - return node.id || node; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce `return` statements in getters", - category: "Possible Errors", - recommended: false, - url: "https://eslint.org/docs/rules/getter-return" - }, - fixable: null, - schema: [ - { - type: "object", - properties: { - allowImplicit: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const options = context.options[0] || { allowImplicit: false }; - - let funcInfo = { - upper: null, - codePath: null, - hasReturn: false, - shouldCheck: false, - node: null - }; - - /** - * Checks whether or not the last code path segment is reachable. - * Then reports this function if the segment is reachable. - * - * If the last code path segment is reachable, there are paths which are not - * returned or thrown. - * - * @param {ASTNode} node - A node to check. - * @returns {void} - */ - function checkLastSegment(node) { - if (funcInfo.shouldCheck && - funcInfo.codePath.currentSegments.some(isReachable) - ) { - context.report({ - node, - loc: getId(node).loc.start, - message: funcInfo.hasReturn - ? "Expected {{name}} to always return a value." - : "Expected to return a value in {{name}}.", - data: { - name: astUtils.getFunctionNameWithKind(funcInfo.node) - } - }); - } - } - - /** - * Checks whether a node means a getter function. - * @param {ASTNode} node - a node to check. - * @returns {boolean} if node means a getter, return true; else return false. - */ - function isGetter(node) { - const parent = node.parent; - - if (TARGET_NODE_TYPE.test(node.type) && node.body.type === "BlockStatement") { - if (parent.kind === "get") { - return true; - } - if (parent.type === "Property" && astUtils.getStaticPropertyName(parent) === "get" && parent.parent.type === "ObjectExpression") { - - // Object.defineProperty() - if (parent.parent.parent.type === "CallExpression" && - astUtils.getStaticPropertyName(parent.parent.parent.callee) === "defineProperty") { - return true; - } - - // Object.defineProperties() - if (parent.parent.parent.type === "Property" && - parent.parent.parent.parent.type === "ObjectExpression" && - parent.parent.parent.parent.parent.type === "CallExpression" && - astUtils.getStaticPropertyName(parent.parent.parent.parent.parent.callee) === "defineProperties") { - return true; - } - } - } - return false; - } - return { - - // Stacks this function's information. - onCodePathStart(codePath, node) { - funcInfo = { - upper: funcInfo, - codePath, - hasReturn: false, - shouldCheck: isGetter(node), - node - }; - }, - - // Pops this function's information. - onCodePathEnd() { - funcInfo = funcInfo.upper; - }, - - // Checks the return statement is valid. - ReturnStatement(node) { - if (funcInfo.shouldCheck) { - funcInfo.hasReturn = true; - - // if allowImplicit: false, should also check node.argument - if (!options.allowImplicit && !node.argument) { - context.report({ - node, - message: "Expected to return a value in {{name}}.", - data: { - name: astUtils.getFunctionNameWithKind(funcInfo.node) - } - }); - } - } - }, - - // Reports a given function if the last path is reachable. - "FunctionExpression:exit": checkLastSegment, - "ArrowFunctionExpression:exit": checkLastSegment - }; - } -}; diff --git a/node_modules/eslint/lib/rules/global-require.js b/node_modules/eslint/lib/rules/global-require.js deleted file mode 100644 index a5f5335..0000000 --- a/node_modules/eslint/lib/rules/global-require.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * @fileoverview Rule for disallowing require() outside of the top-level module context - * @author Jamund Ferguson - */ - -"use strict"; - -const ACCEPTABLE_PARENTS = [ - "AssignmentExpression", - "VariableDeclarator", - "MemberExpression", - "ExpressionStatement", - "CallExpression", - "ConditionalExpression", - "Program", - "VariableDeclaration" -]; - -/** - * Finds the eslint-scope reference in the given scope. - * @param {Object} scope The scope to search. - * @param {ASTNode} node The identifier node. - * @returns {Reference|null} Returns the found reference or null if none were found. - */ -function findReference(scope, node) { - const references = scope.references.filter(reference => reference.identifier.range[0] === node.range[0] && - reference.identifier.range[1] === node.range[1]); - - /* istanbul ignore else: correctly returns null */ - if (references.length === 1) { - return references[0]; - } - return null; - -} - -/** - * Checks if the given identifier node is shadowed in the given scope. - * @param {Object} scope The current scope. - * @param {ASTNode} node The identifier node to check. - * @returns {boolean} Whether or not the name is shadowed. - */ -function isShadowed(scope, node) { - const reference = findReference(scope, node); - - return reference && reference.resolved && reference.resolved.defs.length > 0; -} - -module.exports = { - meta: { - docs: { - description: "require `require()` calls to be placed at top-level module scope", - category: "Node.js and CommonJS", - recommended: false, - url: "https://eslint.org/docs/rules/global-require" - }, - - schema: [] - }, - - create(context) { - return { - CallExpression(node) { - const currentScope = context.getScope(); - - if (node.callee.name === "require" && !isShadowed(currentScope, node.callee)) { - const isGoodRequire = context.getAncestors().every(parent => ACCEPTABLE_PARENTS.indexOf(parent.type) > -1); - - if (!isGoodRequire) { - context.report({ node, message: "Unexpected require()." }); - } - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/guard-for-in.js b/node_modules/eslint/lib/rules/guard-for-in.js deleted file mode 100644 index 0f85e49..0000000 --- a/node_modules/eslint/lib/rules/guard-for-in.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * @fileoverview Rule to flag for-in loops without if statements inside - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require `for-in` loops to include an `if` statement", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/guard-for-in" - }, - - schema: [] - }, - - create(context) { - - return { - - ForInStatement(node) { - const body = node.body; - - // empty statement - if (body.type === "EmptyStatement") { - return; - } - - // if statement - if (body.type === "IfStatement") { - return; - } - - // empty block - if (body.type === "BlockStatement" && body.body.length === 0) { - return; - } - - // block with just if statement - if (body.type === "BlockStatement" && body.body.length === 1 && body.body[0].type === "IfStatement") { - return; - } - - // block that starts with if statement - if (body.type === "BlockStatement" && body.body.length >= 1 && body.body[0].type === "IfStatement") { - const i = body.body[0]; - - // ... whose consequent is a continue - if (i.consequent.type === "ContinueStatement") { - return; - } - - // ... whose consequent is a block that contains only a continue - if (i.consequent.type === "BlockStatement" && i.consequent.body.length === 1 && i.consequent.body[0].type === "ContinueStatement") { - return; - } - } - - context.report({ node, message: "The body of a for-in should be wrapped in an if statement to filter unwanted properties from the prototype." }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/handle-callback-err.js b/node_modules/eslint/lib/rules/handle-callback-err.js deleted file mode 100644 index f6e6c10..0000000 --- a/node_modules/eslint/lib/rules/handle-callback-err.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * @fileoverview Ensure handling of errors when we know they exist. - * @author Jamund Ferguson - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require error handling in callbacks", - category: "Node.js and CommonJS", - recommended: false, - url: "https://eslint.org/docs/rules/handle-callback-err" - }, - - schema: [ - { - type: "string" - } - ] - }, - - create(context) { - - const errorArgument = context.options[0] || "err"; - - /** - * Checks if the given argument should be interpreted as a regexp pattern. - * @param {string} stringToCheck The string which should be checked. - * @returns {boolean} Whether or not the string should be interpreted as a pattern. - */ - function isPattern(stringToCheck) { - const firstChar = stringToCheck[0]; - - return firstChar === "^"; - } - - /** - * Checks if the given name matches the configured error argument. - * @param {string} name The name which should be compared. - * @returns {boolean} Whether or not the given name matches the configured error variable name. - */ - function matchesConfiguredErrorName(name) { - if (isPattern(errorArgument)) { - const regexp = new RegExp(errorArgument); - - return regexp.test(name); - } - return name === errorArgument; - } - - /** - * Get the parameters of a given function scope. - * @param {Object} scope The function scope. - * @returns {array} All parameters of the given scope. - */ - function getParameters(scope) { - return scope.variables.filter(variable => variable.defs[0] && variable.defs[0].type === "Parameter"); - } - - /** - * Check to see if we're handling the error object properly. - * @param {ASTNode} node The AST node to check. - * @returns {void} - */ - function checkForError(node) { - const scope = context.getScope(), - parameters = getParameters(scope), - firstParameter = parameters[0]; - - if (firstParameter && matchesConfiguredErrorName(firstParameter.name)) { - if (firstParameter.references.length === 0) { - context.report({ node, message: "Expected error to be handled." }); - } - } - } - - return { - FunctionDeclaration: checkForError, - FunctionExpression: checkForError, - ArrowFunctionExpression: checkForError - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/id-blacklist.js b/node_modules/eslint/lib/rules/id-blacklist.js deleted file mode 100644 index ba9b5d4..0000000 --- a/node_modules/eslint/lib/rules/id-blacklist.js +++ /dev/null @@ -1,122 +0,0 @@ -/** - * @fileoverview Rule that warns when identifier names that are - * blacklisted in the configuration are used. - * @author Keith Cirkel (http://keithcirkel.co.uk) - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow specified identifiers", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/id-blacklist" - }, - - schema: { - type: "array", - items: { - type: "string" - }, - uniqueItems: true - } - }, - - create(context) { - - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - const blacklist = context.options; - - - /** - * Checks if a string matches the provided pattern - * @param {string} name The string to check. - * @returns {boolean} if the string is a match - * @private - */ - function isInvalid(name) { - return blacklist.indexOf(name) !== -1; - } - - /** - * Verifies if we should report an error or not based on the effective - * parent node and the identifier name. - * @param {ASTNode} effectiveParent The effective parent node of the node to be reported - * @param {string} name The identifier name of the identifier node - * @returns {boolean} whether an error should be reported or not - */ - function shouldReport(effectiveParent, name) { - return effectiveParent.type !== "CallExpression" && - effectiveParent.type !== "NewExpression" && - isInvalid(name); - } - - /** - * Reports an AST node as a rule violation. - * @param {ASTNode} node The node to report. - * @returns {void} - * @private - */ - function report(node) { - context.report({ - node, - message: "Identifier '{{name}}' is blacklisted.", - data: { - name: node.name - } - }); - } - - return { - - Identifier(node) { - const name = node.name, - effectiveParent = (node.parent.type === "MemberExpression") ? node.parent.parent : node.parent; - - // MemberExpressions get special rules - if (node.parent.type === "MemberExpression") { - - // Always check object names - if (node.parent.object.type === "Identifier" && - node.parent.object.name === node.name) { - if (isInvalid(name)) { - report(node); - } - - // Report AssignmentExpressions only if they are the left side of the assignment - } else if (effectiveParent.type === "AssignmentExpression" && - (effectiveParent.right.type !== "MemberExpression" || - effectiveParent.left.type === "MemberExpression" && - effectiveParent.left.property.name === node.name)) { - if (isInvalid(name)) { - report(node); - } - } - - // Properties have their own rules - } else if (node.parent.type === "Property") { - - if (shouldReport(effectiveParent, name)) { - report(node); - } - - // Report anything that is a match and not a CallExpression - } else if (shouldReport(effectiveParent, name)) { - report(node); - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/id-length.js b/node_modules/eslint/lib/rules/id-length.js deleted file mode 100644 index eaed262..0000000 --- a/node_modules/eslint/lib/rules/id-length.js +++ /dev/null @@ -1,117 +0,0 @@ -/** - * @fileoverview Rule that warns when identifier names are shorter or longer - * than the values provided in configuration. - * @author Burak Yigit Kaya aka BYK - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce minimum and maximum identifier lengths", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/id-length" - }, - - schema: [ - { - type: "object", - properties: { - min: { - type: "number" - }, - max: { - type: "number" - }, - exceptions: { - type: "array", - uniqueItems: true, - items: { - type: "string" - } - }, - properties: { - enum: ["always", "never"] - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const options = context.options[0] || {}; - const minLength = typeof options.min !== "undefined" ? options.min : 2; - const maxLength = typeof options.max !== "undefined" ? options.max : Infinity; - const properties = options.properties !== "never"; - const exceptions = (options.exceptions ? options.exceptions : []) - .reduce((obj, item) => { - obj[item] = true; - - return obj; - }, {}); - - const SUPPORTED_EXPRESSIONS = { - MemberExpression: properties && function(parent) { - return !parent.computed && ( - - // regular property assignment - (parent.parent.left === parent && parent.parent.type === "AssignmentExpression" || - - // or the last identifier in an ObjectPattern destructuring - parent.parent.type === "Property" && parent.parent.value === parent && - parent.parent.parent.type === "ObjectPattern" && parent.parent.parent.parent.left === parent.parent.parent) - ); - }, - AssignmentPattern(parent, node) { - return parent.left === node; - }, - VariableDeclarator(parent, node) { - return parent.id === node; - }, - Property: properties && function(parent, node) { - return parent.key === node; - }, - ImportDefaultSpecifier: true, - RestElement: true, - FunctionExpression: true, - ArrowFunctionExpression: true, - ClassDeclaration: true, - FunctionDeclaration: true, - MethodDefinition: true, - CatchClause: true - }; - - return { - Identifier(node) { - const name = node.name; - const parent = node.parent; - - const isShort = name.length < minLength; - const isLong = name.length > maxLength; - - if (!(isShort || isLong) || exceptions[name]) { - return; // Nothing to report - } - - const isValidExpression = SUPPORTED_EXPRESSIONS[parent.type]; - - if (isValidExpression && (isValidExpression === true || isValidExpression(parent, node))) { - context.report({ - node, - message: isShort - ? "Identifier name '{{name}}' is too short (< {{min}})." - : "Identifier name '{{name}}' is too long (> {{max}}).", - data: { name, min: minLength, max: maxLength } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/id-match.js b/node_modules/eslint/lib/rules/id-match.js deleted file mode 100644 index 608ef17..0000000 --- a/node_modules/eslint/lib/rules/id-match.js +++ /dev/null @@ -1,145 +0,0 @@ -/** - * @fileoverview Rule to flag non-matching identifiers - * @author Matthieu Larcher - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require identifiers to match a specified regular expression", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/id-match" - }, - - schema: [ - { - type: "string" - }, - { - type: "object", - properties: { - properties: { - type: "boolean" - } - } - } - ] - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - const pattern = context.options[0] || "^.+$", - regexp = new RegExp(pattern); - - const options = context.options[1] || {}, - properties = !!options.properties, - onlyDeclarations = !!options.onlyDeclarations; - - /** - * Checks if a string matches the provided pattern - * @param {string} name The string to check. - * @returns {boolean} if the string is a match - * @private - */ - function isInvalid(name) { - return !regexp.test(name); - } - - /** - * Verifies if we should report an error or not based on the effective - * parent node and the identifier name. - * @param {ASTNode} effectiveParent The effective parent node of the node to be reported - * @param {string} name The identifier name of the identifier node - * @returns {boolean} whether an error should be reported or not - */ - function shouldReport(effectiveParent, name) { - return effectiveParent.type !== "CallExpression" && - effectiveParent.type !== "NewExpression" && - isInvalid(name); - } - - /** - * Reports an AST node as a rule violation. - * @param {ASTNode} node The node to report. - * @returns {void} - * @private - */ - function report(node) { - context.report({ - node, - message: "Identifier '{{name}}' does not match the pattern '{{pattern}}'.", - data: { - name: node.name, - pattern - } - }); - } - - return { - - Identifier(node) { - const name = node.name, - parent = node.parent, - effectiveParent = (parent.type === "MemberExpression") ? parent.parent : parent; - - if (parent.type === "MemberExpression") { - - if (!properties) { - return; - } - - // Always check object names - if (parent.object.type === "Identifier" && - parent.object.name === name) { - if (isInvalid(name)) { - report(node); - } - - // Report AssignmentExpressions only if they are the left side of the assignment - } else if (effectiveParent.type === "AssignmentExpression" && - (effectiveParent.right.type !== "MemberExpression" || - effectiveParent.left.type === "MemberExpression" && - effectiveParent.left.property.name === name)) { - if (isInvalid(name)) { - report(node); - } - } - - } else if (parent.type === "Property") { - - if (!properties || parent.key.name !== name) { - return; - } - - if (shouldReport(effectiveParent, name)) { - report(node); - } - - } else { - const isDeclaration = effectiveParent.type === "FunctionDeclaration" || effectiveParent.type === "VariableDeclarator"; - - if (onlyDeclarations && !isDeclaration) { - return; - } - - if (shouldReport(effectiveParent, name)) { - report(node); - } - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js b/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js deleted file mode 100644 index a7ad112..0000000 --- a/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * @fileoverview enforce the location of arrow function bodies - * @author Sharmila Jesupaul - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ -module.exports = { - meta: { - docs: { - description: "enforce the location of arrow function bodies", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/implicit-arrow-linebreak" - }, - fixable: "whitespace", - schema: [ - { - enum: ["beside", "below"] - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - //---------------------------------------------------------------------- - // Helpers - //---------------------------------------------------------------------- - /** - * Gets the applicable preference for a particular keyword - * @returns {string} The applicable option for the keyword, e.g. 'beside' - */ - function getOption() { - return context.options[0] || "beside"; - } - - /** - * Validates the location of an arrow function body - * @param {ASTNode} node The arrow function body - * @param {string} keywordName The applicable keyword name for the arrow function body - * @returns {void} - */ - function validateExpression(node) { - const option = getOption(); - - let tokenBefore = sourceCode.getTokenBefore(node.body); - const hasParens = tokenBefore.value === "("; - - if (node.type === "BlockStatement") { - return; - } - - let fixerTarget = node.body; - - if (hasParens) { - - // Gets the first token before the function body that is not an open paren - tokenBefore = sourceCode.getTokenBefore(node.body, token => token.value !== "("); - fixerTarget = sourceCode.getTokenAfter(tokenBefore); - } - - if (tokenBefore.loc.end.line === fixerTarget.loc.start.line && option === "below") { - context.report({ - node: fixerTarget, - message: "Expected a linebreak before this expression.", - fix: fixer => fixer.insertTextBefore(fixerTarget, "\n") - }); - } else if (tokenBefore.loc.end.line !== fixerTarget.loc.start.line && option === "beside") { - context.report({ - node: fixerTarget, - message: "Expected no linebreak before this expression.", - fix: fixer => fixer.replaceTextRange([tokenBefore.range[1], fixerTarget.range[0]], " ") - }); - } - } - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- - return { - ArrowFunctionExpression: node => validateExpression(node) - }; - } -}; diff --git a/node_modules/eslint/lib/rules/indent-legacy.js b/node_modules/eslint/lib/rules/indent-legacy.js deleted file mode 100644 index dc6d168..0000000 --- a/node_modules/eslint/lib/rules/indent-legacy.js +++ /dev/null @@ -1,1135 +0,0 @@ -/** - * @fileoverview This option sets a specific tab width for your code - * - * This rule has been ported and modified from nodeca. - * @author Vitaly Puzrin - * @author Gyandeep Singh - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -/* istanbul ignore next: this rule has known coverage issues, but it's deprecated and shouldn't be updated in the future anyway. */ -module.exports = { - meta: { - docs: { - description: "enforce consistent indentation", - category: "Stylistic Issues", - recommended: false, - replacedBy: ["indent"], - url: "https://eslint.org/docs/rules/indent-legacy" - }, - - deprecated: true, - - fixable: "whitespace", - - schema: [ - { - oneOf: [ - { - enum: ["tab"] - }, - { - type: "integer", - minimum: 0 - } - ] - }, - { - type: "object", - properties: { - SwitchCase: { - type: "integer", - minimum: 0 - }, - VariableDeclarator: { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - type: "object", - properties: { - var: { - type: "integer", - minimum: 0 - }, - let: { - type: "integer", - minimum: 0 - }, - const: { - type: "integer", - minimum: 0 - } - } - } - ] - }, - outerIIFEBody: { - type: "integer", - minimum: 0 - }, - MemberExpression: { - type: "integer", - minimum: 0 - }, - FunctionDeclaration: { - type: "object", - properties: { - parameters: { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - enum: ["first"] - } - ] - }, - body: { - type: "integer", - minimum: 0 - } - } - }, - FunctionExpression: { - type: "object", - properties: { - parameters: { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - enum: ["first"] - } - ] - }, - body: { - type: "integer", - minimum: 0 - } - } - }, - CallExpression: { - type: "object", - properties: { - parameters: { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - enum: ["first"] - } - ] - } - } - }, - ArrayExpression: { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - enum: ["first"] - } - ] - }, - ObjectExpression: { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - enum: ["first"] - } - ] - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const DEFAULT_VARIABLE_INDENT = 1; - const DEFAULT_PARAMETER_INDENT = null; // For backwards compatibility, don't check parameter indentation unless specified in the config - const DEFAULT_FUNCTION_BODY_INDENT = 1; - - let indentType = "space"; - let indentSize = 4; - const options = { - SwitchCase: 0, - VariableDeclarator: { - var: DEFAULT_VARIABLE_INDENT, - let: DEFAULT_VARIABLE_INDENT, - const: DEFAULT_VARIABLE_INDENT - }, - outerIIFEBody: null, - FunctionDeclaration: { - parameters: DEFAULT_PARAMETER_INDENT, - body: DEFAULT_FUNCTION_BODY_INDENT - }, - FunctionExpression: { - parameters: DEFAULT_PARAMETER_INDENT, - body: DEFAULT_FUNCTION_BODY_INDENT - }, - CallExpression: { - arguments: DEFAULT_PARAMETER_INDENT - }, - ArrayExpression: 1, - ObjectExpression: 1 - }; - - const sourceCode = context.getSourceCode(); - - if (context.options.length) { - if (context.options[0] === "tab") { - indentSize = 1; - indentType = "tab"; - } else /* istanbul ignore else : this will be caught by options validation */ if (typeof context.options[0] === "number") { - indentSize = context.options[0]; - indentType = "space"; - } - - if (context.options[1]) { - const opts = context.options[1]; - - options.SwitchCase = opts.SwitchCase || 0; - const variableDeclaratorRules = opts.VariableDeclarator; - - if (typeof variableDeclaratorRules === "number") { - options.VariableDeclarator = { - var: variableDeclaratorRules, - let: variableDeclaratorRules, - const: variableDeclaratorRules - }; - } else if (typeof variableDeclaratorRules === "object") { - Object.assign(options.VariableDeclarator, variableDeclaratorRules); - } - - if (typeof opts.outerIIFEBody === "number") { - options.outerIIFEBody = opts.outerIIFEBody; - } - - if (typeof opts.MemberExpression === "number") { - options.MemberExpression = opts.MemberExpression; - } - - if (typeof opts.FunctionDeclaration === "object") { - Object.assign(options.FunctionDeclaration, opts.FunctionDeclaration); - } - - if (typeof opts.FunctionExpression === "object") { - Object.assign(options.FunctionExpression, opts.FunctionExpression); - } - - if (typeof opts.CallExpression === "object") { - Object.assign(options.CallExpression, opts.CallExpression); - } - - if (typeof opts.ArrayExpression === "number" || typeof opts.ArrayExpression === "string") { - options.ArrayExpression = opts.ArrayExpression; - } - - if (typeof opts.ObjectExpression === "number" || typeof opts.ObjectExpression === "string") { - options.ObjectExpression = opts.ObjectExpression; - } - } - } - - const caseIndentStore = {}; - - /** - * Creates an error message for a line, given the expected/actual indentation. - * @param {int} expectedAmount The expected amount of indentation characters for this line - * @param {int} actualSpaces The actual number of indentation spaces that were found on this line - * @param {int} actualTabs The actual number of indentation tabs that were found on this line - * @returns {string} An error message for this line - */ - function createErrorMessage(expectedAmount, actualSpaces, actualTabs) { - const expectedStatement = `${expectedAmount} ${indentType}${expectedAmount === 1 ? "" : "s"}`; // e.g. "2 tabs" - const foundSpacesWord = `space${actualSpaces === 1 ? "" : "s"}`; // e.g. "space" - const foundTabsWord = `tab${actualTabs === 1 ? "" : "s"}`; // e.g. "tabs" - let foundStatement; - - if (actualSpaces > 0 && actualTabs > 0) { - foundStatement = `${actualSpaces} ${foundSpacesWord} and ${actualTabs} ${foundTabsWord}`; // e.g. "1 space and 2 tabs" - } else if (actualSpaces > 0) { - - /* - * Abbreviate the message if the expected indentation is also spaces. - * e.g. 'Expected 4 spaces but found 2' rather than 'Expected 4 spaces but found 2 spaces' - */ - foundStatement = indentType === "space" ? actualSpaces : `${actualSpaces} ${foundSpacesWord}`; - } else if (actualTabs > 0) { - foundStatement = indentType === "tab" ? actualTabs : `${actualTabs} ${foundTabsWord}`; - } else { - foundStatement = "0"; - } - - return `Expected indentation of ${expectedStatement} but found ${foundStatement}.`; - } - - /** - * Reports a given indent violation - * @param {ASTNode} node Node violating the indent rule - * @param {int} needed Expected indentation character count - * @param {int} gottenSpaces Indentation space count in the actual node/code - * @param {int} gottenTabs Indentation tab count in the actual node/code - * @param {Object=} loc Error line and column location - * @param {boolean} isLastNodeCheck Is the error for last node check - * @param {int} lastNodeCheckEndOffset Number of charecters to skip from the end - * @returns {void} - */ - function report(node, needed, gottenSpaces, gottenTabs, loc, isLastNodeCheck) { - if (gottenSpaces && gottenTabs) { - - // To avoid conflicts with `no-mixed-spaces-and-tabs`, don't report lines that have both spaces and tabs. - return; - } - - const desiredIndent = (indentType === "space" ? " " : "\t").repeat(needed); - - const textRange = isLastNodeCheck - ? [node.range[1] - node.loc.end.column, node.range[1] - node.loc.end.column + gottenSpaces + gottenTabs] - : [node.range[0] - node.loc.start.column, node.range[0] - node.loc.start.column + gottenSpaces + gottenTabs]; - - context.report({ - node, - loc, - message: createErrorMessage(needed, gottenSpaces, gottenTabs), - fix: fixer => fixer.replaceTextRange(textRange, desiredIndent) - }); - } - - /** - * Get the actual indent of node - * @param {ASTNode|Token} node Node to examine - * @param {boolean} [byLastLine=false] get indent of node's last line - * @returns {Object} The node's indent. Contains keys `space` and `tab`, representing the indent of each character. Also - * contains keys `goodChar` and `badChar`, where `goodChar` is the amount of the user's desired indentation character, and - * `badChar` is the amount of the other indentation character. - */ - function getNodeIndent(node, byLastLine) { - const token = byLastLine ? sourceCode.getLastToken(node) : sourceCode.getFirstToken(node); - const srcCharsBeforeNode = sourceCode.getText(token, token.loc.start.column).split(""); - const indentChars = srcCharsBeforeNode.slice(0, srcCharsBeforeNode.findIndex(char => char !== " " && char !== "\t")); - const spaces = indentChars.filter(char => char === " ").length; - const tabs = indentChars.filter(char => char === "\t").length; - - return { - space: spaces, - tab: tabs, - goodChar: indentType === "space" ? spaces : tabs, - badChar: indentType === "space" ? tabs : spaces - }; - } - - /** - * Checks node is the first in its own start line. By default it looks by start line. - * @param {ASTNode} node The node to check - * @param {boolean} [byEndLocation=false] Lookup based on start position or end - * @returns {boolean} true if its the first in the its start line - */ - function isNodeFirstInLine(node, byEndLocation) { - const firstToken = byEndLocation === true ? sourceCode.getLastToken(node, 1) : sourceCode.getTokenBefore(node), - startLine = byEndLocation === true ? node.loc.end.line : node.loc.start.line, - endLine = firstToken ? firstToken.loc.end.line : -1; - - return startLine !== endLine; - } - - /** - * Check indent for node - * @param {ASTNode} node Node to check - * @param {int} neededIndent needed indent - * @param {boolean} [excludeCommas=false] skip comma on start of line - * @returns {void} - */ - function checkNodeIndent(node, neededIndent) { - const actualIndent = getNodeIndent(node, false); - - if ( - node.type !== "ArrayExpression" && - node.type !== "ObjectExpression" && - (actualIndent.goodChar !== neededIndent || actualIndent.badChar !== 0) && - isNodeFirstInLine(node) - ) { - report(node, neededIndent, actualIndent.space, actualIndent.tab); - } - - if (node.type === "IfStatement" && node.alternate) { - const elseToken = sourceCode.getTokenBefore(node.alternate); - - checkNodeIndent(elseToken, neededIndent); - - if (!isNodeFirstInLine(node.alternate)) { - checkNodeIndent(node.alternate, neededIndent); - } - } - - if (node.type === "TryStatement" && node.handler) { - const catchToken = sourceCode.getFirstToken(node.handler); - - checkNodeIndent(catchToken, neededIndent); - } - - if (node.type === "TryStatement" && node.finalizer) { - const finallyToken = sourceCode.getTokenBefore(node.finalizer); - - checkNodeIndent(finallyToken, neededIndent); - } - - if (node.type === "DoWhileStatement") { - const whileToken = sourceCode.getTokenAfter(node.body); - - checkNodeIndent(whileToken, neededIndent); - } - } - - /** - * Check indent for nodes list - * @param {ASTNode[]} nodes list of node objects - * @param {int} indent needed indent - * @param {boolean} [excludeCommas=false] skip comma on start of line - * @returns {void} - */ - function checkNodesIndent(nodes, indent) { - nodes.forEach(node => checkNodeIndent(node, indent)); - } - - /** - * Check last node line indent this detects, that block closed correctly - * @param {ASTNode} node Node to examine - * @param {int} lastLineIndent needed indent - * @returns {void} - */ - function checkLastNodeLineIndent(node, lastLineIndent) { - const lastToken = sourceCode.getLastToken(node); - const endIndent = getNodeIndent(lastToken, true); - - if ((endIndent.goodChar !== lastLineIndent || endIndent.badChar !== 0) && isNodeFirstInLine(node, true)) { - report( - node, - lastLineIndent, - endIndent.space, - endIndent.tab, - { line: lastToken.loc.start.line, column: lastToken.loc.start.column }, - true - ); - } - } - - /** - * Check last node line indent this detects, that block closed correctly - * This function for more complicated return statement case, where closing parenthesis may be followed by ';' - * @param {ASTNode} node Node to examine - * @param {int} firstLineIndent first line needed indent - * @returns {void} - */ - function checkLastReturnStatementLineIndent(node, firstLineIndent) { - - /* - * in case if return statement ends with ');' we have traverse back to ')' - * otherwise we'll measure indent for ';' and replace ')' - */ - const lastToken = sourceCode.getLastToken(node, astUtils.isClosingParenToken); - const textBeforeClosingParenthesis = sourceCode.getText(lastToken, lastToken.loc.start.column).slice(0, -1); - - if (textBeforeClosingParenthesis.trim()) { - - // There are tokens before the closing paren, don't report this case - return; - } - - const endIndent = getNodeIndent(lastToken, true); - - if (endIndent.goodChar !== firstLineIndent) { - report( - node, - firstLineIndent, - endIndent.space, - endIndent.tab, - { line: lastToken.loc.start.line, column: lastToken.loc.start.column }, - true - ); - } - } - - /** - * Check first node line indent is correct - * @param {ASTNode} node Node to examine - * @param {int} firstLineIndent needed indent - * @returns {void} - */ - function checkFirstNodeLineIndent(node, firstLineIndent) { - const startIndent = getNodeIndent(node, false); - - if ((startIndent.goodChar !== firstLineIndent || startIndent.badChar !== 0) && isNodeFirstInLine(node)) { - report( - node, - firstLineIndent, - startIndent.space, - startIndent.tab, - { line: node.loc.start.line, column: node.loc.start.column } - ); - } - } - - /** - * Returns a parent node of given node based on a specified type - * if not present then return null - * @param {ASTNode} node node to examine - * @param {string} type type that is being looked for - * @param {string} stopAtList end points for the evaluating code - * @returns {ASTNode|void} if found then node otherwise null - */ - function getParentNodeByType(node, type, stopAtList) { - let parent = node.parent; - const stopAtSet = new Set(stopAtList || ["Program"]); - - while (parent.type !== type && !stopAtSet.has(parent.type) && parent.type !== "Program") { - parent = parent.parent; - } - - return parent.type === type ? parent : null; - } - - /** - * Returns the VariableDeclarator based on the current node - * if not present then return null - * @param {ASTNode} node node to examine - * @returns {ASTNode|void} if found then node otherwise null - */ - function getVariableDeclaratorNode(node) { - return getParentNodeByType(node, "VariableDeclarator"); - } - - /** - * Check to see if the node is part of the multi-line variable declaration. - * Also if its on the same line as the varNode - * @param {ASTNode} node node to check - * @param {ASTNode} varNode variable declaration node to check against - * @returns {boolean} True if all the above condition satisfy - */ - function isNodeInVarOnTop(node, varNode) { - return varNode && - varNode.parent.loc.start.line === node.loc.start.line && - varNode.parent.declarations.length > 1; - } - - /** - * Check to see if the argument before the callee node is multi-line and - * there should only be 1 argument before the callee node - * @param {ASTNode} node node to check - * @returns {boolean} True if arguments are multi-line - */ - function isArgBeforeCalleeNodeMultiline(node) { - const parent = node.parent; - - if (parent.arguments.length >= 2 && parent.arguments[1] === node) { - return parent.arguments[0].loc.end.line > parent.arguments[0].loc.start.line; - } - - return false; - } - - /** - * Check to see if the node is a file level IIFE - * @param {ASTNode} node The function node to check. - * @returns {boolean} True if the node is the outer IIFE - */ - function isOuterIIFE(node) { - const parent = node.parent; - let stmt = parent.parent; - - /* - * Verify that the node is an IIEF - */ - if ( - parent.type !== "CallExpression" || - parent.callee !== node) { - - return false; - } - - /* - * Navigate legal ancestors to determine whether this IIEF is outer - */ - while ( - stmt.type === "UnaryExpression" && ( - stmt.operator === "!" || - stmt.operator === "~" || - stmt.operator === "+" || - stmt.operator === "-") || - stmt.type === "AssignmentExpression" || - stmt.type === "LogicalExpression" || - stmt.type === "SequenceExpression" || - stmt.type === "VariableDeclarator") { - - stmt = stmt.parent; - } - - return (( - stmt.type === "ExpressionStatement" || - stmt.type === "VariableDeclaration") && - stmt.parent && stmt.parent.type === "Program" - ); - } - - /** - * Check indent for function block content - * @param {ASTNode} node A BlockStatement node that is inside of a function. - * @returns {void} - */ - function checkIndentInFunctionBlock(node) { - - /* - * Search first caller in chain. - * Ex.: - * - * Models <- Identifier - * .User - * .find() - * .exec(function() { - * // function body - * }); - * - * Looks for 'Models' - */ - const calleeNode = node.parent; // FunctionExpression - let indent; - - if (calleeNode.parent && - (calleeNode.parent.type === "Property" || - calleeNode.parent.type === "ArrayExpression")) { - - // If function is part of array or object, comma can be put at left - indent = getNodeIndent(calleeNode, false).goodChar; - } else { - - // If function is standalone, simple calculate indent - indent = getNodeIndent(calleeNode).goodChar; - } - - if (calleeNode.parent.type === "CallExpression") { - const calleeParent = calleeNode.parent; - - if (calleeNode.type !== "FunctionExpression" && calleeNode.type !== "ArrowFunctionExpression") { - if (calleeParent && calleeParent.loc.start.line < node.loc.start.line) { - indent = getNodeIndent(calleeParent).goodChar; - } - } else { - if (isArgBeforeCalleeNodeMultiline(calleeNode) && - calleeParent.callee.loc.start.line === calleeParent.callee.loc.end.line && - !isNodeFirstInLine(calleeNode)) { - indent = getNodeIndent(calleeParent).goodChar; - } - } - } - - /* - * function body indent should be indent + indent size, unless this - * is a FunctionDeclaration, FunctionExpression, or outer IIFE and the corresponding options are enabled. - */ - let functionOffset = indentSize; - - if (options.outerIIFEBody !== null && isOuterIIFE(calleeNode)) { - functionOffset = options.outerIIFEBody * indentSize; - } else if (calleeNode.type === "FunctionExpression") { - functionOffset = options.FunctionExpression.body * indentSize; - } else if (calleeNode.type === "FunctionDeclaration") { - functionOffset = options.FunctionDeclaration.body * indentSize; - } - indent += functionOffset; - - // check if the node is inside a variable - const parentVarNode = getVariableDeclaratorNode(node); - - if (parentVarNode && isNodeInVarOnTop(node, parentVarNode)) { - indent += indentSize * options.VariableDeclarator[parentVarNode.parent.kind]; - } - - if (node.body.length > 0) { - checkNodesIndent(node.body, indent); - } - - checkLastNodeLineIndent(node, indent - functionOffset); - } - - - /** - * Checks if the given node starts and ends on the same line - * @param {ASTNode} node The node to check - * @returns {boolean} Whether or not the block starts and ends on the same line. - */ - function isSingleLineNode(node) { - const lastToken = sourceCode.getLastToken(node), - startLine = node.loc.start.line, - endLine = lastToken.loc.end.line; - - return startLine === endLine; - } - - /** - * Check to see if the first element inside an array is an object and on the same line as the node - * If the node is not an array then it will return false. - * @param {ASTNode} node node to check - * @returns {boolean} success/failure - */ - function isFirstArrayElementOnSameLine(node) { - if (node.type === "ArrayExpression" && node.elements[0]) { - return node.elements[0].loc.start.line === node.loc.start.line && node.elements[0].type === "ObjectExpression"; - } - return false; - - } - - /** - * Check indent for array block content or object block content - * @param {ASTNode} node node to examine - * @returns {void} - */ - function checkIndentInArrayOrObjectBlock(node) { - - // Skip inline - if (isSingleLineNode(node)) { - return; - } - - let elements = (node.type === "ArrayExpression") ? node.elements : node.properties; - - // filter out empty elements example would be [ , 2] so remove first element as espree considers it as null - elements = elements.filter(elem => elem !== null); - - let nodeIndent; - let elementsIndent; - const parentVarNode = getVariableDeclaratorNode(node); - - // TODO - come up with a better strategy in future - if (isNodeFirstInLine(node)) { - const parent = node.parent; - - nodeIndent = getNodeIndent(parent).goodChar; - if (!parentVarNode || parentVarNode.loc.start.line !== node.loc.start.line) { - if (parent.type !== "VariableDeclarator" || parentVarNode === parentVarNode.parent.declarations[0]) { - if (parent.type === "VariableDeclarator" && parentVarNode.loc.start.line === parent.loc.start.line) { - nodeIndent += (indentSize * options.VariableDeclarator[parentVarNode.parent.kind]); - } else if (parent.type === "ObjectExpression" || parent.type === "ArrayExpression") { - const parentElements = node.parent.type === "ObjectExpression" ? node.parent.properties : node.parent.elements; - - if (parentElements[0] && - parentElements[0].loc.start.line === parent.loc.start.line && - parentElements[0].loc.end.line !== parent.loc.start.line) { - - /* - * If the first element of the array spans multiple lines, don't increase the expected indentation of the rest. - * e.g. [{ - * foo: 1 - * }, - * { - * bar: 1 - * }] - * the second object is not indented. - */ - } else if (typeof options[parent.type] === "number") { - nodeIndent += options[parent.type] * indentSize; - } else { - nodeIndent = parentElements[0].loc.start.column; - } - } else if (parent.type === "CallExpression" || parent.type === "NewExpression") { - if (typeof options.CallExpression.arguments === "number") { - nodeIndent += options.CallExpression.arguments * indentSize; - } else if (options.CallExpression.arguments === "first") { - if (parent.arguments.indexOf(node) !== -1) { - nodeIndent = parent.arguments[0].loc.start.column; - } - } else { - nodeIndent += indentSize; - } - } else if (parent.type === "LogicalExpression" || parent.type === "ArrowFunctionExpression") { - nodeIndent += indentSize; - } - } - } else if (!parentVarNode && !isFirstArrayElementOnSameLine(parent) && parent.type !== "MemberExpression" && parent.type !== "ExpressionStatement" && parent.type !== "AssignmentExpression" && parent.type !== "Property") { - nodeIndent += indentSize; - } - - checkFirstNodeLineIndent(node, nodeIndent); - } else { - nodeIndent = getNodeIndent(node).goodChar; - } - - if (options[node.type] === "first") { - elementsIndent = elements.length ? elements[0].loc.start.column : 0; // If there are no elements, elementsIndent doesn't matter. - } else { - elementsIndent = nodeIndent + indentSize * options[node.type]; - } - - /* - * Check if the node is a multiple variable declaration; if so, then - * make sure indentation takes that into account. - */ - if (isNodeInVarOnTop(node, parentVarNode)) { - elementsIndent += indentSize * options.VariableDeclarator[parentVarNode.parent.kind]; - } - - checkNodesIndent(elements, elementsIndent); - - if (elements.length > 0) { - - // Skip last block line check if last item in same line - if (elements[elements.length - 1].loc.end.line === node.loc.end.line) { - return; - } - } - - checkLastNodeLineIndent(node, nodeIndent + - (isNodeInVarOnTop(node, parentVarNode) ? options.VariableDeclarator[parentVarNode.parent.kind] * indentSize : 0)); - } - - /** - * Check if the node or node body is a BlockStatement or not - * @param {ASTNode} node node to test - * @returns {boolean} True if it or its body is a block statement - */ - function isNodeBodyBlock(node) { - return node.type === "BlockStatement" || node.type === "ClassBody" || (node.body && node.body.type === "BlockStatement") || - (node.consequent && node.consequent.type === "BlockStatement"); - } - - /** - * Check indentation for blocks - * @param {ASTNode} node node to check - * @returns {void} - */ - function blockIndentationCheck(node) { - - // Skip inline blocks - if (isSingleLineNode(node)) { - return; - } - - if (node.parent && ( - node.parent.type === "FunctionExpression" || - node.parent.type === "FunctionDeclaration" || - node.parent.type === "ArrowFunctionExpression") - ) { - checkIndentInFunctionBlock(node); - return; - } - - let indent; - let nodesToCheck = []; - - /* - * For this statements we should check indent from statement beginning, - * not from the beginning of the block. - */ - const statementsWithProperties = [ - "IfStatement", "WhileStatement", "ForStatement", "ForInStatement", "ForOfStatement", "DoWhileStatement", "ClassDeclaration", "TryStatement" - ]; - - if (node.parent && statementsWithProperties.indexOf(node.parent.type) !== -1 && isNodeBodyBlock(node)) { - indent = getNodeIndent(node.parent).goodChar; - } else if (node.parent && node.parent.type === "CatchClause") { - indent = getNodeIndent(node.parent.parent).goodChar; - } else { - indent = getNodeIndent(node).goodChar; - } - - if (node.type === "IfStatement" && node.consequent.type !== "BlockStatement") { - nodesToCheck = [node.consequent]; - } else if (Array.isArray(node.body)) { - nodesToCheck = node.body; - } else { - nodesToCheck = [node.body]; - } - - if (nodesToCheck.length > 0) { - checkNodesIndent(nodesToCheck, indent + indentSize); - } - - if (node.type === "BlockStatement") { - checkLastNodeLineIndent(node, indent); - } - } - - /** - * Filter out the elements which are on the same line of each other or the node. - * basically have only 1 elements from each line except the variable declaration line. - * @param {ASTNode} node Variable declaration node - * @returns {ASTNode[]} Filtered elements - */ - function filterOutSameLineVars(node) { - return node.declarations.reduce((finalCollection, elem) => { - const lastElem = finalCollection[finalCollection.length - 1]; - - if ((elem.loc.start.line !== node.loc.start.line && !lastElem) || - (lastElem && lastElem.loc.start.line !== elem.loc.start.line)) { - finalCollection.push(elem); - } - - return finalCollection; - }, []); - } - - /** - * Check indentation for variable declarations - * @param {ASTNode} node node to examine - * @returns {void} - */ - function checkIndentInVariableDeclarations(node) { - const elements = filterOutSameLineVars(node); - const nodeIndent = getNodeIndent(node).goodChar; - const lastElement = elements[elements.length - 1]; - - const elementsIndent = nodeIndent + indentSize * options.VariableDeclarator[node.kind]; - - checkNodesIndent(elements, elementsIndent); - - // Only check the last line if there is any token after the last item - if (sourceCode.getLastToken(node).loc.end.line <= lastElement.loc.end.line) { - return; - } - - const tokenBeforeLastElement = sourceCode.getTokenBefore(lastElement); - - if (tokenBeforeLastElement.value === ",") { - - // Special case for comma-first syntax where the semicolon is indented - checkLastNodeLineIndent(node, getNodeIndent(tokenBeforeLastElement).goodChar); - } else { - checkLastNodeLineIndent(node, elementsIndent - indentSize); - } - } - - /** - * Check and decide whether to check for indentation for blockless nodes - * Scenarios are for or while statements without braces around them - * @param {ASTNode} node node to examine - * @returns {void} - */ - function blockLessNodes(node) { - if (node.body.type !== "BlockStatement") { - blockIndentationCheck(node); - } - } - - /** - * Returns the expected indentation for the case statement - * @param {ASTNode} node node to examine - * @param {int} [providedSwitchIndent] indent for switch statement - * @returns {int} indent size - */ - function expectedCaseIndent(node, providedSwitchIndent) { - const switchNode = (node.type === "SwitchStatement") ? node : node.parent; - const switchIndent = typeof providedSwitchIndent === "undefined" - ? getNodeIndent(switchNode).goodChar - : providedSwitchIndent; - let caseIndent; - - if (caseIndentStore[switchNode.loc.start.line]) { - return caseIndentStore[switchNode.loc.start.line]; - } - - if (switchNode.cases.length > 0 && options.SwitchCase === 0) { - caseIndent = switchIndent; - } else { - caseIndent = switchIndent + (indentSize * options.SwitchCase); - } - - caseIndentStore[switchNode.loc.start.line] = caseIndent; - return caseIndent; - - } - - /** - * Checks wether a return statement is wrapped in () - * @param {ASTNode} node node to examine - * @returns {boolean} the result - */ - function isWrappedInParenthesis(node) { - const regex = /^return\s*?\(\s*?\);*?/; - - const statementWithoutArgument = sourceCode.getText(node).replace( - sourceCode.getText(node.argument), "" - ); - - return regex.test(statementWithoutArgument); - } - - return { - Program(node) { - if (node.body.length > 0) { - - // Root nodes should have no indent - checkNodesIndent(node.body, getNodeIndent(node).goodChar); - } - }, - - ClassBody: blockIndentationCheck, - - BlockStatement: blockIndentationCheck, - - WhileStatement: blockLessNodes, - - ForStatement: blockLessNodes, - - ForInStatement: blockLessNodes, - - ForOfStatement: blockLessNodes, - - DoWhileStatement: blockLessNodes, - - IfStatement(node) { - if (node.consequent.type !== "BlockStatement" && node.consequent.loc.start.line > node.loc.start.line) { - blockIndentationCheck(node); - } - }, - - VariableDeclaration(node) { - if (node.declarations[node.declarations.length - 1].loc.start.line > node.declarations[0].loc.start.line) { - checkIndentInVariableDeclarations(node); - } - }, - - ObjectExpression(node) { - checkIndentInArrayOrObjectBlock(node); - }, - - ArrayExpression(node) { - checkIndentInArrayOrObjectBlock(node); - }, - - MemberExpression(node) { - - if (typeof options.MemberExpression === "undefined") { - return; - } - - if (isSingleLineNode(node)) { - return; - } - - /* - * The typical layout of variable declarations and assignments - * alter the expectation of correct indentation. Skip them. - * TODO: Add appropriate configuration options for variable - * declarations and assignments. - */ - if (getParentNodeByType(node, "VariableDeclarator", ["FunctionExpression", "ArrowFunctionExpression"])) { - return; - } - - if (getParentNodeByType(node, "AssignmentExpression", ["FunctionExpression"])) { - return; - } - - const propertyIndent = getNodeIndent(node).goodChar + indentSize * options.MemberExpression; - - const checkNodes = [node.property]; - - const dot = sourceCode.getTokenBefore(node.property); - - if (dot.type === "Punctuator" && dot.value === ".") { - checkNodes.push(dot); - } - - checkNodesIndent(checkNodes, propertyIndent); - }, - - SwitchStatement(node) { - - // Switch is not a 'BlockStatement' - const switchIndent = getNodeIndent(node).goodChar; - const caseIndent = expectedCaseIndent(node, switchIndent); - - checkNodesIndent(node.cases, caseIndent); - - - checkLastNodeLineIndent(node, switchIndent); - }, - - SwitchCase(node) { - - // Skip inline cases - if (isSingleLineNode(node)) { - return; - } - const caseIndent = expectedCaseIndent(node); - - checkNodesIndent(node.consequent, caseIndent + indentSize); - }, - - FunctionDeclaration(node) { - if (isSingleLineNode(node)) { - return; - } - if (options.FunctionDeclaration.parameters === "first" && node.params.length) { - checkNodesIndent(node.params.slice(1), node.params[0].loc.start.column); - } else if (options.FunctionDeclaration.parameters !== null) { - checkNodesIndent(node.params, getNodeIndent(node).goodChar + indentSize * options.FunctionDeclaration.parameters); - } - }, - - FunctionExpression(node) { - if (isSingleLineNode(node)) { - return; - } - if (options.FunctionExpression.parameters === "first" && node.params.length) { - checkNodesIndent(node.params.slice(1), node.params[0].loc.start.column); - } else if (options.FunctionExpression.parameters !== null) { - checkNodesIndent(node.params, getNodeIndent(node).goodChar + indentSize * options.FunctionExpression.parameters); - } - }, - - ReturnStatement(node) { - if (isSingleLineNode(node)) { - return; - } - - const firstLineIndent = getNodeIndent(node).goodChar; - - // in case if return statement is wrapped in parenthesis - if (isWrappedInParenthesis(node)) { - checkLastReturnStatementLineIndent(node, firstLineIndent); - } else { - checkNodeIndent(node, firstLineIndent); - } - }, - - CallExpression(node) { - if (isSingleLineNode(node)) { - return; - } - if (options.CallExpression.arguments === "first" && node.arguments.length) { - checkNodesIndent(node.arguments.slice(1), node.arguments[0].loc.start.column); - } else if (options.CallExpression.arguments !== null) { - checkNodesIndent(node.arguments, getNodeIndent(node).goodChar + indentSize * options.CallExpression.arguments); - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/indent.js b/node_modules/eslint/lib/rules/indent.js deleted file mode 100644 index a08b4d7..0000000 --- a/node_modules/eslint/lib/rules/indent.js +++ /dev/null @@ -1,1555 +0,0 @@ -/** - * @fileoverview This option sets a specific tab width for your code - * - * @author Teddy Katz - * @author Vitaly Puzrin - * @author Gyandeep Singh - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); -const astUtils = require("../ast-utils"); -const createTree = require("functional-red-black-tree"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const KNOWN_NODES = new Set([ - "AssignmentExpression", - "AssignmentPattern", - "ArrayExpression", - "ArrayPattern", - "ArrowFunctionExpression", - "AwaitExpression", - "BlockStatement", - "BinaryExpression", - "BreakStatement", - "CallExpression", - "CatchClause", - "ClassBody", - "ClassDeclaration", - "ClassExpression", - "ConditionalExpression", - "ContinueStatement", - "DoWhileStatement", - "DebuggerStatement", - "EmptyStatement", - "ExperimentalRestProperty", - "ExperimentalSpreadProperty", - "ExpressionStatement", - "ForStatement", - "ForInStatement", - "ForOfStatement", - "FunctionDeclaration", - "FunctionExpression", - "Identifier", - "IfStatement", - "Literal", - "LabeledStatement", - "LogicalExpression", - "MemberExpression", - "MetaProperty", - "MethodDefinition", - "NewExpression", - "ObjectExpression", - "ObjectPattern", - "Program", - "Property", - "RestElement", - "ReturnStatement", - "SequenceExpression", - "SpreadElement", - "Super", - "SwitchCase", - "SwitchStatement", - "TaggedTemplateExpression", - "TemplateElement", - "TemplateLiteral", - "ThisExpression", - "ThrowStatement", - "TryStatement", - "UnaryExpression", - "UpdateExpression", - "VariableDeclaration", - "VariableDeclarator", - "WhileStatement", - "WithStatement", - "YieldExpression", - "JSXIdentifier", - "JSXNamespacedName", - "JSXMemberExpression", - "JSXEmptyExpression", - "JSXExpressionContainer", - "JSXElement", - "JSXClosingElement", - "JSXOpeningElement", - "JSXAttribute", - "JSXSpreadAttribute", - "JSXText", - "ExportDefaultDeclaration", - "ExportNamedDeclaration", - "ExportAllDeclaration", - "ExportSpecifier", - "ImportDeclaration", - "ImportSpecifier", - "ImportDefaultSpecifier", - "ImportNamespaceSpecifier" -]); - -/* - * General rule strategy: - * 1. An OffsetStorage instance stores a map of desired offsets, where each token has a specified offset from another - * specified token or to the first column. - * 2. As the AST is traversed, modify the desired offsets of tokens accordingly. For example, when entering a - * BlockStatement, offset all of the tokens in the BlockStatement by 1 indent level from the opening curly - * brace of the BlockStatement. - * 3. After traversing the AST, calculate the expected indentation levels of every token according to the - * OffsetStorage container. - * 4. For each line, compare the expected indentation of the first token to the actual indentation in the file, - * and report the token if the two values are not equal. - */ - - -/** - * A mutable balanced binary search tree that stores (key, value) pairs. The keys are numeric, and must be unique. - * This is intended to be a generic wrapper around a balanced binary search tree library, so that the underlying implementation - * can easily be swapped out. - */ -class BinarySearchTree { - - /** - * Creates an empty tree - */ - constructor() { - this._rbTree = createTree(); - } - - /** - * Inserts an entry into the tree. - * @param {number} key The entry's key - * @param {*} value The entry's value - * @returns {void} - */ - insert(key, value) { - const iterator = this._rbTree.find(key); - - if (iterator.valid) { - this._rbTree = iterator.update(value); - } else { - this._rbTree = this._rbTree.insert(key, value); - } - } - - /** - * Finds the entry with the largest key less than or equal to the provided key - * @param {number} key The provided key - * @returns {{key: number, value: *}|null} The found entry, or null if no such entry exists. - */ - findLe(key) { - const iterator = this._rbTree.le(key); - - return iterator && { key: iterator.key, value: iterator.value }; - } - - /** - * Deletes all of the keys in the interval [start, end) - * @param {number} start The start of the range - * @param {number} end The end of the range - * @returns {void} - */ - deleteRange(start, end) { - - // Exit without traversing the tree if the range has zero size. - if (start === end) { - return; - } - const iterator = this._rbTree.ge(start); - - while (iterator.valid && iterator.key < end) { - this._rbTree = this._rbTree.remove(iterator.key); - iterator.next(); - } - } -} - -/** - * A helper class to get token-based info related to indentation - */ -class TokenInfo { - - /** - * @param {SourceCode} sourceCode A SourceCode object - */ - constructor(sourceCode) { - this.sourceCode = sourceCode; - this.firstTokensByLineNumber = sourceCode.tokensAndComments.reduce((map, token) => { - if (!map.has(token.loc.start.line)) { - map.set(token.loc.start.line, token); - } - if (!map.has(token.loc.end.line) && sourceCode.text.slice(token.range[1] - token.loc.end.column, token.range[1]).trim()) { - map.set(token.loc.end.line, token); - } - return map; - }, new Map()); - } - - /** - * Gets the first token on a given token's line - * @param {Token|ASTNode} token a node or token - * @returns {Token} The first token on the given line - */ - getFirstTokenOfLine(token) { - return this.firstTokensByLineNumber.get(token.loc.start.line); - } - - /** - * Determines whether a token is the first token in its line - * @param {Token} token The token - * @returns {boolean} `true` if the token is the first on its line - */ - isFirstTokenOfLine(token) { - return this.getFirstTokenOfLine(token) === token; - } - - /** - * Get the actual indent of a token - * @param {Token} token Token to examine. This should be the first token on its line. - * @returns {string} The indentation characters that precede the token - */ - getTokenIndent(token) { - return this.sourceCode.text.slice(token.range[0] - token.loc.start.column, token.range[0]); - } -} - -/** - * A class to store information on desired offsets of tokens from each other - */ -class OffsetStorage { - - /** - * @param {TokenInfo} tokenInfo a TokenInfo instance - * @param {number} indentSize The desired size of each indentation level - * @param {string} indentType The indentation character - */ - constructor(tokenInfo, indentSize, indentType) { - this._tokenInfo = tokenInfo; - this._indentSize = indentSize; - this._indentType = indentType; - - this._tree = new BinarySearchTree(); - this._tree.insert(0, { offset: 0, from: null, force: false }); - - this._lockedFirstTokens = new WeakMap(); - this._desiredIndentCache = new WeakMap(); - this._ignoredTokens = new WeakSet(); - } - - _getOffsetDescriptor(token) { - return this._tree.findLe(token.range[0]).value; - } - - /** - * Sets the offset column of token B to match the offset column of token A. - * **WARNING**: This matches a *column*, even if baseToken is not the first token on its line. In - * most cases, `setDesiredOffset` should be used instead. - * @param {Token} baseToken The first token - * @param {Token} offsetToken The second token, whose offset should be matched to the first token - * @returns {void} - */ - matchOffsetOf(baseToken, offsetToken) { - - /* - * lockedFirstTokens is a map from a token whose indentation is controlled by the "first" option to - * the token that it depends on. For example, with the `ArrayExpression: first` option, the first - * token of each element in the array after the first will be mapped to the first token of the first - * element. The desired indentation of each of these tokens is computed based on the desired indentation - * of the "first" element, rather than through the normal offset mechanism. - */ - this._lockedFirstTokens.set(offsetToken, baseToken); - } - - /** - * Sets the desired offset of a token. - * - * This uses a line-based offset collapsing behavior to handle tokens on the same line. - * For example, consider the following two cases: - * - * ( - * [ - * bar - * ] - * ) - * - * ([ - * bar - * ]) - * - * Based on the first case, it's clear that the `bar` token needs to have an offset of 1 indent level (4 spaces) from - * the `[` token, and the `[` token has to have an offset of 1 indent level from the `(` token. Since the `(` token is - * the first on its line (with an indent of 0 spaces), the `bar` token needs to be offset by 2 indent levels (8 spaces) - * from the start of its line. - * - * However, in the second case `bar` should only be indented by 4 spaces. This is because the offset of 1 indent level - * between the `(` and the `[` tokens gets "collapsed" because the two tokens are on the same line. As a result, the - * `(` token is mapped to the `[` token with an offset of 0, and the rule correctly decides that `bar` should be indented - * by 1 indent level from the start of the line. - * - * This is useful because rule listeners can usually just call `setDesiredOffset` for all the tokens in the node, - * without needing to check which lines those tokens are on. - * - * Note that since collapsing only occurs when two tokens are on the same line, there are a few cases where non-intuitive - * behavior can occur. For example, consider the following cases: - * - * foo( - * ). - * bar( - * baz - * ) - * - * foo( - * ).bar( - * baz - * ) - * - * Based on the first example, it would seem that `bar` should be offset by 1 indent level from `foo`, and `baz` - * should be offset by 1 indent level from `bar`. However, this is not correct, because it would result in `baz` - * being indented by 2 indent levels in the second case (since `foo`, `bar`, and `baz` are all on separate lines, no - * collapsing would occur). - * - * Instead, the correct way would be to offset `baz` by 1 level from `bar`, offset `bar` by 1 level from the `)`, and - * offset the `)` by 0 levels from `foo`. This ensures that the offset between `bar` and the `)` are correctly collapsed - * in the second case. - * - * @param {Token} token The token - * @param {Token} fromToken The token that `token` should be offset from - * @param {number} offset The desired indent level - * @returns {void} - */ - setDesiredOffset(token, fromToken, offset) { - return this.setDesiredOffsets(token.range, fromToken, offset); - } - - /** - * Sets the desired offset of all tokens in a range - * It's common for node listeners in this file to need to apply the same offset to a large, contiguous range of tokens. - * Moreover, the offset of any given token is usually updated multiple times (roughly once for each node that contains - * it). This means that the offset of each token is updated O(AST depth) times. - * It would not be performant to store and update the offsets for each token independently, because the rule would end - * up having a time complexity of O(number of tokens * AST depth), which is quite slow for large files. - * - * Instead, the offset tree is represented as a collection of contiguous offset ranges in a file. For example, the following - * list could represent the state of the offset tree at a given point: - * - * * Tokens starting in the interval [0, 15) are aligned with the beginning of the file - * * Tokens starting in the interval [15, 30) are offset by 1 indent level from the `bar` token - * * Tokens starting in the interval [30, 43) are offset by 1 indent level from the `foo` token - * * Tokens starting in the interval [43, 820) are offset by 2 indent levels from the `bar` token - * * Tokens starting in the interval [820, ∞) are offset by 1 indent level from the `baz` token - * - * The `setDesiredOffsets` methods inserts ranges like the ones above. The third line above would be inserted by using: - * `setDesiredOffsets([30, 43], fooToken, 1);` - * - * @param {[number, number]} range A [start, end] pair. All tokens with range[0] <= token.start < range[1] will have the offset applied. - * @param {Token} fromToken The token that this is offset from - * @param {number} offset The desired indent level - * @param {boolean} force `true` if this offset should not use the normal collapsing behavior. This should almost always be false. - * @returns {void} - */ - setDesiredOffsets(range, fromToken, offset, force) { - - /* - * Offset ranges are stored as a collection of nodes, where each node maps a numeric key to an offset - * descriptor. The tree for the example above would have the following nodes: - * - * * key: 0, value: { offset: 0, from: null } - * * key: 15, value: { offset: 1, from: barToken } - * * key: 30, value: { offset: 1, from: fooToken } - * * key: 43, value: { offset: 2, from: barToken } - * * key: 820, value: { offset: 1, from: bazToken } - * - * To find the offset descriptor for any given token, one needs to find the node with the largest key - * which is <= token.start. To make this operation fast, the nodes are stored in a balanced binary - * search tree indexed by key. - */ - - const descriptorToInsert = { offset, from: fromToken, force }; - - const descriptorAfterRange = this._tree.findLe(range[1]).value; - - const fromTokenIsInRange = fromToken && fromToken.range[0] >= range[0] && fromToken.range[1] <= range[1]; - const fromTokenDescriptor = fromTokenIsInRange && this._getOffsetDescriptor(fromToken); - - // First, remove any existing nodes in the range from the tree. - this._tree.deleteRange(range[0] + 1, range[1]); - - // Insert a new node into the tree for this range - this._tree.insert(range[0], descriptorToInsert); - - /* - * To avoid circular offset dependencies, keep the `fromToken` token mapped to whatever it was mapped to previously, - * even if it's in the current range. - */ - if (fromTokenIsInRange) { - this._tree.insert(fromToken.range[0], fromTokenDescriptor); - this._tree.insert(fromToken.range[1], descriptorToInsert); - } - - /* - * To avoid modifying the offset of tokens after the range, insert another node to keep the offset of the following - * tokens the same as it was before. - */ - this._tree.insert(range[1], descriptorAfterRange); - } - - /** - * Gets the desired indent of a token - * @param {Token} token The token - * @returns {string} The desired indent of the token - */ - getDesiredIndent(token) { - if (!this._desiredIndentCache.has(token)) { - - if (this._ignoredTokens.has(token)) { - - /* - * If the token is ignored, use the actual indent of the token as the desired indent. - * This ensures that no errors are reported for this token. - */ - this._desiredIndentCache.set( - token, - this._tokenInfo.getTokenIndent(token) - ); - } else if (this._lockedFirstTokens.has(token)) { - const firstToken = this._lockedFirstTokens.get(token); - - this._desiredIndentCache.set( - token, - - // (indentation for the first element's line) - this.getDesiredIndent(this._tokenInfo.getFirstTokenOfLine(firstToken)) + - - // (space between the start of the first element's line and the first element) - this._indentType.repeat(firstToken.loc.start.column - this._tokenInfo.getFirstTokenOfLine(firstToken).loc.start.column) - ); - } else { - const offsetInfo = this._getOffsetDescriptor(token); - const offset = ( - offsetInfo.from && - offsetInfo.from.loc.start.line === token.loc.start.line && - !/^\s*?\n/.test(token.value) && - !offsetInfo.force - ) ? 0 : offsetInfo.offset * this._indentSize; - - this._desiredIndentCache.set( - token, - (offsetInfo.from ? this.getDesiredIndent(offsetInfo.from) : "") + this._indentType.repeat(offset) - ); - } - } - return this._desiredIndentCache.get(token); - } - - /** - * Ignores a token, preventing it from being reported. - * @param {Token} token The token - * @returns {void} - */ - ignoreToken(token) { - if (this._tokenInfo.isFirstTokenOfLine(token)) { - this._ignoredTokens.add(token); - } - } - - /** - * Gets the first token that the given token's indentation is dependent on - * @param {Token} token The token - * @returns {Token} The token that the given token depends on, or `null` if the given token is at the top level - */ - getFirstDependency(token) { - return this._getOffsetDescriptor(token).from; - } -} - -const ELEMENT_LIST_SCHEMA = { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - enum: ["first", "off"] - } - ] -}; - -module.exports = { - meta: { - docs: { - description: "enforce consistent indentation", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/indent" - }, - - fixable: "whitespace", - - schema: [ - { - oneOf: [ - { - enum: ["tab"] - }, - { - type: "integer", - minimum: 0 - } - ] - }, - { - type: "object", - properties: { - SwitchCase: { - type: "integer", - minimum: 0 - }, - VariableDeclarator: { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - type: "object", - properties: { - var: { - type: "integer", - minimum: 0 - }, - let: { - type: "integer", - minimum: 0 - }, - const: { - type: "integer", - minimum: 0 - } - }, - additionalProperties: false - } - ] - }, - outerIIFEBody: { - type: "integer", - minimum: 0 - }, - MemberExpression: { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - enum: ["off"] - } - ] - }, - FunctionDeclaration: { - type: "object", - properties: { - parameters: ELEMENT_LIST_SCHEMA, - body: { - type: "integer", - minimum: 0 - } - }, - additionalProperties: false - }, - FunctionExpression: { - type: "object", - properties: { - parameters: ELEMENT_LIST_SCHEMA, - body: { - type: "integer", - minimum: 0 - } - }, - additionalProperties: false - }, - CallExpression: { - type: "object", - properties: { - arguments: ELEMENT_LIST_SCHEMA - }, - additionalProperties: false - }, - ArrayExpression: ELEMENT_LIST_SCHEMA, - ObjectExpression: ELEMENT_LIST_SCHEMA, - ImportDeclaration: ELEMENT_LIST_SCHEMA, - flatTernaryExpressions: { - type: "boolean" - }, - ignoredNodes: { - type: "array", - items: { - type: "string", - not: { - pattern: ":exit$" - } - } - }, - ignoreComments: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const DEFAULT_VARIABLE_INDENT = 1; - const DEFAULT_PARAMETER_INDENT = 1; - const DEFAULT_FUNCTION_BODY_INDENT = 1; - - let indentType = "space"; - let indentSize = 4; - const options = { - SwitchCase: 0, - VariableDeclarator: { - var: DEFAULT_VARIABLE_INDENT, - let: DEFAULT_VARIABLE_INDENT, - const: DEFAULT_VARIABLE_INDENT - }, - outerIIFEBody: 1, - FunctionDeclaration: { - parameters: DEFAULT_PARAMETER_INDENT, - body: DEFAULT_FUNCTION_BODY_INDENT - }, - FunctionExpression: { - parameters: DEFAULT_PARAMETER_INDENT, - body: DEFAULT_FUNCTION_BODY_INDENT - }, - CallExpression: { - arguments: DEFAULT_PARAMETER_INDENT - }, - MemberExpression: 1, - ArrayExpression: 1, - ObjectExpression: 1, - ImportDeclaration: 1, - flatTernaryExpressions: false, - ignoredNodes: [], - ignoreComments: false - }; - - if (context.options.length) { - if (context.options[0] === "tab") { - indentSize = 1; - indentType = "tab"; - } else { - indentSize = context.options[0]; - indentType = "space"; - } - - if (context.options[1]) { - lodash.merge(options, context.options[1]); - - if (typeof options.VariableDeclarator === "number") { - options.VariableDeclarator = { - var: options.VariableDeclarator, - let: options.VariableDeclarator, - const: options.VariableDeclarator - }; - } - } - } - - const sourceCode = context.getSourceCode(); - const tokenInfo = new TokenInfo(sourceCode); - const offsets = new OffsetStorage(tokenInfo, indentSize, indentType === "space" ? " " : "\t"); - const parameterParens = new WeakSet(); - - /** - * Creates an error message for a line, given the expected/actual indentation. - * @param {int} expectedAmount The expected amount of indentation characters for this line - * @param {int} actualSpaces The actual number of indentation spaces that were found on this line - * @param {int} actualTabs The actual number of indentation tabs that were found on this line - * @returns {string} An error message for this line - */ - function createErrorMessage(expectedAmount, actualSpaces, actualTabs) { - const expectedStatement = `${expectedAmount} ${indentType}${expectedAmount === 1 ? "" : "s"}`; // e.g. "2 tabs" - const foundSpacesWord = `space${actualSpaces === 1 ? "" : "s"}`; // e.g. "space" - const foundTabsWord = `tab${actualTabs === 1 ? "" : "s"}`; // e.g. "tabs" - let foundStatement; - - if (actualSpaces > 0) { - - /* - * Abbreviate the message if the expected indentation is also spaces. - * e.g. 'Expected 4 spaces but found 2' rather than 'Expected 4 spaces but found 2 spaces' - */ - foundStatement = indentType === "space" ? actualSpaces : `${actualSpaces} ${foundSpacesWord}`; - } else if (actualTabs > 0) { - foundStatement = indentType === "tab" ? actualTabs : `${actualTabs} ${foundTabsWord}`; - } else { - foundStatement = "0"; - } - - return `Expected indentation of ${expectedStatement} but found ${foundStatement}.`; - } - - /** - * Reports a given indent violation - * @param {Token} token Token violating the indent rule - * @param {string} neededIndent Expected indentation string - * @returns {void} - */ - function report(token, neededIndent) { - const actualIndent = Array.from(tokenInfo.getTokenIndent(token)); - const numSpaces = actualIndent.filter(char => char === " ").length; - const numTabs = actualIndent.filter(char => char === "\t").length; - - context.report({ - node: token, - message: createErrorMessage(neededIndent.length, numSpaces, numTabs), - loc: { - start: { line: token.loc.start.line, column: 0 }, - end: { line: token.loc.start.line, column: token.loc.start.column } - }, - fix(fixer) { - const range = [token.range[0] - token.loc.start.column, token.range[0]]; - const newText = neededIndent; - - return fixer.replaceTextRange(range, newText); - } - }); - } - - /** - * Checks if a token's indentation is correct - * @param {Token} token Token to examine - * @param {string} desiredIndent Desired indentation of the string - * @returns {boolean} `true` if the token's indentation is correct - */ - function validateTokenIndent(token, desiredIndent) { - const indentation = tokenInfo.getTokenIndent(token); - - return indentation === desiredIndent || - - // To avoid conflicts with no-mixed-spaces-and-tabs, don't report mixed spaces and tabs. - indentation.includes(" ") && indentation.includes("\t"); - } - - /** - * Check to see if the node is a file level IIFE - * @param {ASTNode} node The function node to check. - * @returns {boolean} True if the node is the outer IIFE - */ - function isOuterIIFE(node) { - - /* - * Verify that the node is an IIFE - */ - if (!node.parent || node.parent.type !== "CallExpression" || node.parent.callee !== node) { - return false; - } - - /* - * Navigate legal ancestors to determine whether this IIFE is outer. - * A "legal ancestor" is an expression or statement that causes the function to get executed immediately. - * For example, `!(function(){})()` is an outer IIFE even though it is preceded by a ! operator. - */ - let statement = node.parent && node.parent.parent; - - while ( - statement.type === "UnaryExpression" && ["!", "~", "+", "-"].indexOf(statement.operator) > -1 || - statement.type === "AssignmentExpression" || - statement.type === "LogicalExpression" || - statement.type === "SequenceExpression" || - statement.type === "VariableDeclarator" - ) { - statement = statement.parent; - } - - return (statement.type === "ExpressionStatement" || statement.type === "VariableDeclaration") && statement.parent.type === "Program"; - } - - /** - * Counts the number of linebreaks that follow the last non-whitespace character in a string - * @param {string} string The string to check - * @returns {number} The number of JavaScript linebreaks that follow the last non-whitespace character, - * or the total number of linebreaks if the string is all whitespace. - */ - function countTrailingLinebreaks(string) { - const trailingWhitespace = string.match(/\s*$/)[0]; - const linebreakMatches = trailingWhitespace.match(astUtils.createGlobalLinebreakMatcher()); - - return linebreakMatches === null ? 0 : linebreakMatches.length; - } - - /** - * Check indentation for lists of elements (arrays, objects, function params) - * @param {ASTNode[]} elements List of elements that should be offset - * @param {Token} startToken The start token of the list that element should be aligned against, e.g. '[' - * @param {Token} endToken The end token of the list, e.g. ']' - * @param {number|string} offset The amount that the elements should be offset - * @returns {void} - */ - function addElementListIndent(elements, startToken, endToken, offset) { - - /** - * Gets the first token of a given element, including surrounding parentheses. - * @param {ASTNode} element A node in the `elements` list - * @returns {Token} The first token of this element - */ - function getFirstToken(element) { - let token = sourceCode.getTokenBefore(element); - - while (astUtils.isOpeningParenToken(token) && token !== startToken) { - token = sourceCode.getTokenBefore(token); - } - return sourceCode.getTokenAfter(token); - } - - // Run through all the tokens in the list, and offset them by one indent level (mainly for comments, other things will end up overridden) - offsets.setDesiredOffsets( - [startToken.range[1], endToken.range[0]], - startToken, - typeof offset === "number" ? offset : 1 - ); - offsets.setDesiredOffset(endToken, startToken, 0); - - // If the preference is "first" but there is no first element (e.g. sparse arrays w/ empty first slot), fall back to 1 level. - if (offset === "first" && elements.length && !elements[0]) { - return; - } - elements.forEach((element, index) => { - if (!element) { - - // Skip holes in arrays - return; - } - if (offset === "off") { - - // Ignore the first token of every element if the "off" option is used - offsets.ignoreToken(getFirstToken(element)); - } - - // Offset the following elements correctly relative to the first element - if (index === 0) { - return; - } - if (offset === "first" && tokenInfo.isFirstTokenOfLine(getFirstToken(element))) { - offsets.matchOffsetOf(getFirstToken(elements[0]), getFirstToken(element)); - } else { - const previousElement = elements[index - 1]; - const firstTokenOfPreviousElement = previousElement && getFirstToken(previousElement); - const previousElementLastToken = previousElement && sourceCode.getLastToken(previousElement); - - if ( - previousElement && - previousElementLastToken.loc.end.line - countTrailingLinebreaks(previousElementLastToken.value) > startToken.loc.end.line - ) { - offsets.setDesiredOffsets(element.range, firstTokenOfPreviousElement, 0); - } - } - }); - } - - /** - * Check and decide whether to check for indentation for blockless nodes - * Scenarios are for or while statements without braces around them - * @param {ASTNode} node node to examine - * @returns {void} - */ - function addBlocklessNodeIndent(node) { - if (node.type !== "BlockStatement") { - const lastParentToken = sourceCode.getTokenBefore(node, astUtils.isNotOpeningParenToken); - - let firstBodyToken = sourceCode.getFirstToken(node); - let lastBodyToken = sourceCode.getLastToken(node); - - while ( - astUtils.isOpeningParenToken(sourceCode.getTokenBefore(firstBodyToken)) && - astUtils.isClosingParenToken(sourceCode.getTokenAfter(lastBodyToken)) - ) { - firstBodyToken = sourceCode.getTokenBefore(firstBodyToken); - lastBodyToken = sourceCode.getTokenAfter(lastBodyToken); - } - - offsets.setDesiredOffsets([firstBodyToken.range[0], lastBodyToken.range[1]], lastParentToken, 1); - - /* - * For blockless nodes with semicolon-first style, don't indent the semicolon. - * e.g. - * if (foo) bar() - * ; [1, 2, 3].map(foo) - */ - const lastToken = sourceCode.getLastToken(node); - - if (node.type !== "EmptyStatement" && astUtils.isSemicolonToken(lastToken)) { - offsets.setDesiredOffset(lastToken, lastParentToken, 0); - } - } - } - - /** - * Checks the indentation for nodes that are like function calls (`CallExpression` and `NewExpression`) - * @param {ASTNode} node A CallExpression or NewExpression node - * @returns {void} - */ - function addFunctionCallIndent(node) { - let openingParen; - - if (node.arguments.length) { - openingParen = sourceCode.getFirstTokenBetween(node.callee, node.arguments[0], astUtils.isOpeningParenToken); - } else { - openingParen = sourceCode.getLastToken(node, 1); - } - const closingParen = sourceCode.getLastToken(node); - - parameterParens.add(openingParen); - parameterParens.add(closingParen); - offsets.setDesiredOffset(openingParen, sourceCode.getTokenBefore(openingParen), 0); - - addElementListIndent(node.arguments, openingParen, closingParen, options.CallExpression.arguments); - } - - /** - * Checks the indentation of parenthesized values, given a list of tokens in a program - * @param {Token[]} tokens A list of tokens - * @returns {void} - */ - function addParensIndent(tokens) { - const parenStack = []; - const parenPairs = []; - - tokens.forEach(nextToken => { - - // Accumulate a list of parenthesis pairs - if (astUtils.isOpeningParenToken(nextToken)) { - parenStack.push(nextToken); - } else if (astUtils.isClosingParenToken(nextToken)) { - parenPairs.unshift({ left: parenStack.pop(), right: nextToken }); - } - }); - - parenPairs.forEach(pair => { - const leftParen = pair.left; - const rightParen = pair.right; - - // We only want to handle parens around expressions, so exclude parentheses that are in function parameters and function call arguments. - if (!parameterParens.has(leftParen) && !parameterParens.has(rightParen)) { - const parenthesizedTokens = new Set(sourceCode.getTokensBetween(leftParen, rightParen)); - - parenthesizedTokens.forEach(token => { - if (!parenthesizedTokens.has(offsets.getFirstDependency(token))) { - offsets.setDesiredOffset(token, leftParen, 1); - } - }); - } - - offsets.setDesiredOffset(rightParen, leftParen, 0); - }); - } - - /** - * Ignore all tokens within an unknown node whose offset do not depend - * on another token's offset within the unknown node - * @param {ASTNode} node Unknown Node - * @returns {void} - */ - function ignoreNode(node) { - const unknownNodeTokens = new Set(sourceCode.getTokens(node, { includeComments: true })); - - unknownNodeTokens.forEach(token => { - if (!unknownNodeTokens.has(offsets.getFirstDependency(token))) { - const firstTokenOfLine = tokenInfo.getFirstTokenOfLine(token); - - if (token === firstTokenOfLine) { - offsets.ignoreToken(token); - } else { - offsets.setDesiredOffset(token, firstTokenOfLine, 0); - } - } - }); - } - - /** - * Check whether the given token is on the first line of a statement. - * @param {Token} token The token to check. - * @param {ASTNode} leafNode The expression node that the token belongs directly. - * @returns {boolean} `true` if the token is on the first line of a statement. - */ - function isOnFirstLineOfStatement(token, leafNode) { - let node = leafNode; - - while (node.parent && !node.parent.type.endsWith("Statement") && !node.parent.type.endsWith("Declaration")) { - node = node.parent; - } - node = node.parent; - - return !node || node.loc.start.line === token.loc.start.line; - } - - const ignoredNodeFirstTokens = new Set(); - - const baseOffsetListeners = { - "ArrayExpression, ArrayPattern"(node) { - const openingBracket = sourceCode.getFirstToken(node); - const closingBracket = sourceCode.getTokenAfter(lodash.findLast(node.elements) || openingBracket, astUtils.isClosingBracketToken); - - addElementListIndent(node.elements, openingBracket, closingBracket, options.ArrayExpression); - }, - - "ObjectExpression, ObjectPattern"(node) { - const openingCurly = sourceCode.getFirstToken(node); - const closingCurly = sourceCode.getTokenAfter( - node.properties.length ? node.properties[node.properties.length - 1] : openingCurly, - astUtils.isClosingBraceToken - ); - - addElementListIndent(node.properties, openingCurly, closingCurly, options.ObjectExpression); - }, - - ArrowFunctionExpression(node) { - const firstToken = sourceCode.getFirstToken(node); - - if (astUtils.isOpeningParenToken(firstToken)) { - const openingParen = firstToken; - const closingParen = sourceCode.getTokenBefore(node.body, astUtils.isClosingParenToken); - - parameterParens.add(openingParen); - parameterParens.add(closingParen); - addElementListIndent(node.params, openingParen, closingParen, options.FunctionExpression.parameters); - } - addBlocklessNodeIndent(node.body); - }, - - AssignmentExpression(node) { - const operator = sourceCode.getFirstTokenBetween(node.left, node.right, token => token.value === node.operator); - - offsets.setDesiredOffsets([operator.range[0], node.range[1]], sourceCode.getLastToken(node.left), 1); - offsets.ignoreToken(operator); - offsets.ignoreToken(sourceCode.getTokenAfter(operator)); - }, - - "BinaryExpression, LogicalExpression"(node) { - const operator = sourceCode.getFirstTokenBetween(node.left, node.right, token => token.value === node.operator); - - /* - * For backwards compatibility, don't check BinaryExpression indents, e.g. - * var foo = bar && - * baz; - */ - - const tokenAfterOperator = sourceCode.getTokenAfter(operator); - - offsets.ignoreToken(operator); - offsets.ignoreToken(tokenAfterOperator); - offsets.setDesiredOffset(tokenAfterOperator, operator, 0); - }, - - "BlockStatement, ClassBody"(node) { - - let blockIndentLevel; - - if (node.parent && isOuterIIFE(node.parent)) { - blockIndentLevel = options.outerIIFEBody; - } else if (node.parent && (node.parent.type === "FunctionExpression" || node.parent.type === "ArrowFunctionExpression")) { - blockIndentLevel = options.FunctionExpression.body; - } else if (node.parent && node.parent.type === "FunctionDeclaration") { - blockIndentLevel = options.FunctionDeclaration.body; - } else { - blockIndentLevel = 1; - } - - /* - * For blocks that aren't lone statements, ensure that the opening curly brace - * is aligned with the parent. - */ - if (!astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type)) { - offsets.setDesiredOffset(sourceCode.getFirstToken(node), sourceCode.getFirstToken(node.parent), 0); - } - addElementListIndent(node.body, sourceCode.getFirstToken(node), sourceCode.getLastToken(node), blockIndentLevel); - }, - - CallExpression: addFunctionCallIndent, - - - "ClassDeclaration[superClass], ClassExpression[superClass]"(node) { - const classToken = sourceCode.getFirstToken(node); - const extendsToken = sourceCode.getTokenBefore(node.superClass, astUtils.isNotOpeningParenToken); - - offsets.setDesiredOffsets([extendsToken.range[0], node.body.range[0]], classToken, 1); - }, - - ConditionalExpression(node) { - const firstToken = sourceCode.getFirstToken(node); - - // `flatTernaryExpressions` option is for the following style: - // var a = - // foo > 0 ? bar : - // foo < 0 ? baz : - // /*else*/ qiz ; - if (!options.flatTernaryExpressions || - !astUtils.isTokenOnSameLine(node.test, node.consequent) || - isOnFirstLineOfStatement(firstToken, node) - ) { - const questionMarkToken = sourceCode.getFirstTokenBetween(node.test, node.consequent, token => token.type === "Punctuator" && token.value === "?"); - const colonToken = sourceCode.getFirstTokenBetween(node.consequent, node.alternate, token => token.type === "Punctuator" && token.value === ":"); - - const firstConsequentToken = sourceCode.getTokenAfter(questionMarkToken); - const lastConsequentToken = sourceCode.getTokenBefore(colonToken); - const firstAlternateToken = sourceCode.getTokenAfter(colonToken); - - offsets.setDesiredOffset(questionMarkToken, firstToken, 1); - offsets.setDesiredOffset(colonToken, firstToken, 1); - - offsets.setDesiredOffset(firstConsequentToken, firstToken, 1); - - /* - * The alternate and the consequent should usually have the same indentation. - * If they share part of a line, align the alternate against the first token of the consequent. - * This allows the alternate to be indented correctly in cases like this: - * foo ? ( - * bar - * ) : ( // this '(' is aligned with the '(' above, so it's considered to be aligned with `foo` - * baz // as a result, `baz` is offset by 1 rather than 2 - * ) - */ - if (lastConsequentToken.loc.end.line === firstAlternateToken.loc.start.line) { - offsets.setDesiredOffset(firstAlternateToken, firstConsequentToken, 0); - } else { - - /** - * If the alternate and consequent do not share part of a line, offset the alternate from the first - * token of the conditional expression. For example: - * foo ? bar - * : baz - * - * If `baz` were aligned with `bar` rather than being offset by 1 from `foo`, `baz` would end up - * having no expected indentation. - */ - offsets.setDesiredOffset(firstAlternateToken, firstToken, 1); - } - } - }, - - "DoWhileStatement, WhileStatement, ForInStatement, ForOfStatement": node => addBlocklessNodeIndent(node.body), - - ExportNamedDeclaration(node) { - if (node.declaration === null) { - const closingCurly = sourceCode.getLastToken(node, astUtils.isClosingBraceToken); - - // Indent the specifiers in `export {foo, bar, baz}` - addElementListIndent(node.specifiers, sourceCode.getFirstToken(node, { skip: 1 }), closingCurly, 1); - - if (node.source) { - - // Indent everything after and including the `from` token in `export {foo, bar, baz} from 'qux'` - offsets.setDesiredOffsets([closingCurly.range[1], node.range[1]], sourceCode.getFirstToken(node), 1); - } - } - }, - - ForStatement(node) { - const forOpeningParen = sourceCode.getFirstToken(node, 1); - - if (node.init) { - offsets.setDesiredOffsets(node.init.range, forOpeningParen, 1); - } - if (node.test) { - offsets.setDesiredOffsets(node.test.range, forOpeningParen, 1); - } - if (node.update) { - offsets.setDesiredOffsets(node.update.range, forOpeningParen, 1); - } - addBlocklessNodeIndent(node.body); - }, - - "FunctionDeclaration, FunctionExpression"(node) { - const closingParen = sourceCode.getTokenBefore(node.body); - const openingParen = sourceCode.getTokenBefore(node.params.length ? node.params[0] : closingParen); - - parameterParens.add(openingParen); - parameterParens.add(closingParen); - addElementListIndent(node.params, openingParen, closingParen, options[node.type].parameters); - }, - - IfStatement(node) { - addBlocklessNodeIndent(node.consequent); - if (node.alternate && node.alternate.type !== "IfStatement") { - addBlocklessNodeIndent(node.alternate); - } - }, - - ImportDeclaration(node) { - if (node.specifiers.some(specifier => specifier.type === "ImportSpecifier")) { - const openingCurly = sourceCode.getFirstToken(node, astUtils.isOpeningBraceToken); - const closingCurly = sourceCode.getLastToken(node, astUtils.isClosingBraceToken); - - addElementListIndent(node.specifiers.filter(specifier => specifier.type === "ImportSpecifier"), openingCurly, closingCurly, options.ImportDeclaration); - } - - const fromToken = sourceCode.getLastToken(node, token => token.type === "Identifier" && token.value === "from"); - - if (fromToken) { - offsets.setDesiredOffsets([fromToken.range[0], node.range[1]], sourceCode.getFirstToken(node), 1); - } - }, - - "MemberExpression, JSXMemberExpression, MetaProperty"(node) { - const object = node.type === "MetaProperty" ? node.meta : node.object; - const firstNonObjectToken = sourceCode.getFirstTokenBetween(object, node.property, astUtils.isNotClosingParenToken); - const secondNonObjectToken = sourceCode.getTokenAfter(firstNonObjectToken); - - const objectParenCount = sourceCode.getTokensBetween(object, node.property, { filter: astUtils.isClosingParenToken }).length; - const firstObjectToken = objectParenCount - ? sourceCode.getTokenBefore(object, { skip: objectParenCount - 1 }) - : sourceCode.getFirstToken(object); - const lastObjectToken = sourceCode.getTokenBefore(firstNonObjectToken); - const firstPropertyToken = node.computed ? firstNonObjectToken : secondNonObjectToken; - - if (node.computed) { - - // For computed MemberExpressions, match the closing bracket with the opening bracket. - offsets.setDesiredOffset(sourceCode.getLastToken(node), firstNonObjectToken, 0); - offsets.setDesiredOffsets(node.property.range, firstNonObjectToken, 1); - } - - /* - * If the object ends on the same line that the property starts, match against the last token - * of the object, to ensure that the MemberExpression is not indented. - * - * Otherwise, match against the first token of the object, e.g. - * foo - * .bar - * .baz // <-- offset by 1 from `foo` - */ - const offsetBase = lastObjectToken.loc.end.line === firstPropertyToken.loc.start.line - ? lastObjectToken - : firstObjectToken; - - if (typeof options.MemberExpression === "number") { - - // Match the dot (for non-computed properties) or the opening bracket (for computed properties) against the object. - offsets.setDesiredOffset(firstNonObjectToken, offsetBase, options.MemberExpression); - - /* - * For computed MemberExpressions, match the first token of the property against the opening bracket. - * Otherwise, match the first token of the property against the object. - */ - offsets.setDesiredOffset(secondNonObjectToken, node.computed ? firstNonObjectToken : offsetBase, options.MemberExpression); - } else { - - // If the MemberExpression option is off, ignore the dot and the first token of the property. - offsets.ignoreToken(firstNonObjectToken); - offsets.ignoreToken(secondNonObjectToken); - - // To ignore the property indentation, ensure that the property tokens depend on the ignored tokens. - offsets.setDesiredOffset(firstNonObjectToken, offsetBase, 0); - offsets.setDesiredOffset(secondNonObjectToken, firstNonObjectToken, 0); - } - }, - - NewExpression(node) { - - // Only indent the arguments if the NewExpression has parens (e.g. `new Foo(bar)` or `new Foo()`, but not `new Foo` - if (node.arguments.length > 0 || - astUtils.isClosingParenToken(sourceCode.getLastToken(node)) && - astUtils.isOpeningParenToken(sourceCode.getLastToken(node, 1))) { - addFunctionCallIndent(node); - } - }, - - Property(node) { - if (!node.shorthand && !node.method && node.kind === "init") { - const colon = sourceCode.getFirstTokenBetween(node.key, node.value, astUtils.isColonToken); - - offsets.ignoreToken(sourceCode.getTokenAfter(colon)); - } - }, - - SwitchStatement(node) { - const openingCurly = sourceCode.getTokenAfter(node.discriminant, astUtils.isOpeningBraceToken); - const closingCurly = sourceCode.getLastToken(node); - - offsets.setDesiredOffsets([openingCurly.range[1], closingCurly.range[0]], openingCurly, options.SwitchCase); - - if (node.cases.length) { - sourceCode.getTokensBetween( - node.cases[node.cases.length - 1], - closingCurly, - { includeComments: true, filter: astUtils.isCommentToken } - ).forEach(token => offsets.ignoreToken(token)); - } - }, - - SwitchCase(node) { - if (!(node.consequent.length === 1 && node.consequent[0].type === "BlockStatement")) { - const caseKeyword = sourceCode.getFirstToken(node); - const tokenAfterCurrentCase = sourceCode.getTokenAfter(node); - - offsets.setDesiredOffsets([caseKeyword.range[1], tokenAfterCurrentCase.range[0]], caseKeyword, 1); - } - }, - - TemplateLiteral(node) { - node.expressions.forEach((expression, index) => { - const previousQuasi = node.quasis[index]; - const nextQuasi = node.quasis[index + 1]; - const tokenToAlignFrom = previousQuasi.loc.start.line === previousQuasi.loc.end.line ? sourceCode.getFirstToken(previousQuasi) : null; - - offsets.setDesiredOffsets([previousQuasi.range[1], nextQuasi.range[0]], tokenToAlignFrom, 1); - offsets.setDesiredOffset(sourceCode.getFirstToken(nextQuasi), tokenToAlignFrom, 0); - }); - }, - - VariableDeclaration(node) { - const variableIndent = options.VariableDeclarator.hasOwnProperty(node.kind) ? options.VariableDeclarator[node.kind] : DEFAULT_VARIABLE_INDENT; - - if (node.declarations[node.declarations.length - 1].loc.start.line > node.loc.start.line) { - - /* - * VariableDeclarator indentation is a bit different from other forms of indentation, in that the - * indentation of an opening bracket sometimes won't match that of a closing bracket. For example, - * the following indentations are correct: - * - * var foo = { - * ok: true - * }; - * - * var foo = { - * ok: true, - * }, - * bar = 1; - * - * Account for when exiting the AST (after indentations have already been set for the nodes in - * the declaration) by manually increasing the indentation level of the tokens in this declarator - * on the same line as the start of the declaration, provided that there are declarators that - * follow this one. - */ - const firstToken = sourceCode.getFirstToken(node); - - offsets.setDesiredOffsets(node.range, firstToken, variableIndent, true); - } else { - offsets.setDesiredOffsets(node.range, sourceCode.getFirstToken(node), variableIndent); - } - const lastToken = sourceCode.getLastToken(node); - - if (astUtils.isSemicolonToken(lastToken)) { - offsets.ignoreToken(lastToken); - } - }, - - VariableDeclarator(node) { - if (node.init) { - const equalOperator = sourceCode.getTokenBefore(node.init, astUtils.isNotOpeningParenToken); - const tokenAfterOperator = sourceCode.getTokenAfter(equalOperator); - - offsets.ignoreToken(equalOperator); - offsets.ignoreToken(tokenAfterOperator); - offsets.setDesiredOffsets([tokenAfterOperator.range[0], node.range[1]], equalOperator, 1); - offsets.setDesiredOffset(equalOperator, sourceCode.getLastToken(node.id), 0); - } - }, - - "JSXAttribute[value]"(node) { - const equalsToken = sourceCode.getFirstTokenBetween(node.name, node.value, token => token.type === "Punctuator" && token.value === "="); - - offsets.setDesiredOffsets([equalsToken.range[0], node.value.range[1]], sourceCode.getFirstToken(node.name), 1); - }, - - JSXElement(node) { - if (node.closingElement) { - addElementListIndent(node.children, sourceCode.getFirstToken(node.openingElement), sourceCode.getFirstToken(node.closingElement), 1); - } - }, - - JSXOpeningElement(node) { - const firstToken = sourceCode.getFirstToken(node); - let closingToken; - - if (node.selfClosing) { - closingToken = sourceCode.getLastToken(node, { skip: 1 }); - offsets.setDesiredOffset(sourceCode.getLastToken(node), closingToken, 0); - } else { - closingToken = sourceCode.getLastToken(node); - } - offsets.setDesiredOffsets(node.name.range, sourceCode.getFirstToken(node)); - addElementListIndent(node.attributes, firstToken, closingToken, 1); - }, - - JSXClosingElement(node) { - const firstToken = sourceCode.getFirstToken(node); - - offsets.setDesiredOffsets(node.name.range, firstToken, 1); - }, - - JSXExpressionContainer(node) { - const openingCurly = sourceCode.getFirstToken(node); - const closingCurly = sourceCode.getLastToken(node); - - offsets.setDesiredOffsets( - [openingCurly.range[1], closingCurly.range[0]], - openingCurly, - 1 - ); - }, - - "*"(node) { - const firstToken = sourceCode.getFirstToken(node); - - // Ensure that the children of every node are indented at least as much as the first token. - if (firstToken && !ignoredNodeFirstTokens.has(firstToken)) { - offsets.setDesiredOffsets(node.range, firstToken, 0); - } - } - }; - - const listenerCallQueue = []; - - /* - * To ignore the indentation of a node: - * 1. Don't call the node's listener when entering it (if it has a listener) - * 2. Don't set any offsets against the first token of the node. - * 3. Call `ignoreNode` on the node sometime after exiting it and before validating offsets. - */ - const offsetListeners = lodash.mapValues( - baseOffsetListeners, - - /* - * Offset listener calls are deferred until traversal is finished, and are called as - * part of the final `Program:exit` listener. This is necessary because a node might - * be matched by multiple selectors. - * - * Example: Suppose there is an offset listener for `Identifier`, and the user has - * specified in configuration that `MemberExpression > Identifier` should be ignored. - * Due to selector specificity rules, the `Identifier` listener will get called first. However, - * if a given Identifier node is supposed to be ignored, then the `Identifier` offset listener - * should not have been called at all. Without doing extra selector matching, we don't know - * whether the Identifier matches the `MemberExpression > Identifier` selector until the - * `MemberExpression > Identifier` listener is called. - * - * To avoid this, the `Identifier` listener isn't called until traversal finishes and all - * ignored nodes are known. - */ - listener => - node => - listenerCallQueue.push({ listener, node }) - ); - - // For each ignored node selector, set up a listener to collect it into the `ignoredNodes` set. - const ignoredNodes = new Set(); - - /** - * Ignores a node - * @param {ASTNode} node The node to ignore - * @returns {void} - */ - function addToIgnoredNodes(node) { - ignoredNodes.add(node); - ignoredNodeFirstTokens.add(sourceCode.getFirstToken(node)); - } - - const ignoredNodeListeners = options.ignoredNodes.reduce( - (listeners, ignoredSelector) => Object.assign(listeners, { [ignoredSelector]: addToIgnoredNodes }), - {} - ); - - /* - * Join the listeners, and add a listener to verify that all tokens actually have the correct indentation - * at the end. - * - * Using Object.assign will cause some offset listeners to be overwritten if the same selector also appears - * in `ignoredNodeListeners`. This isn't a problem because all of the matching nodes will be ignored, - * so those listeners wouldn't be called anyway. - */ - return Object.assign( - offsetListeners, - ignoredNodeListeners, - { - "*:exit"(node) { - - // If a node's type is nonstandard, we can't tell how its children should be offset, so ignore it. - if (!KNOWN_NODES.has(node.type)) { - addToIgnoredNodes(node); - } - }, - "Program:exit"() { - - // If ignoreComments option is enabled, ignore all comment tokens. - if (options.ignoreComments) { - sourceCode.getAllComments() - .forEach(comment => offsets.ignoreToken(comment)); - } - - // Invoke the queued offset listeners for the nodes that aren't ignored. - listenerCallQueue - .filter(nodeInfo => !ignoredNodes.has(nodeInfo.node)) - .forEach(nodeInfo => nodeInfo.listener(nodeInfo.node)); - - // Update the offsets for ignored nodes to prevent their child tokens from being reported. - ignoredNodes.forEach(ignoreNode); - - addParensIndent(sourceCode.ast.tokens); - - /* - * Create a Map from (tokenOrComment) => (precedingToken). - * This is necessary because sourceCode.getTokenBefore does not handle a comment as an argument correctly. - */ - const precedingTokens = sourceCode.ast.comments.reduce((commentMap, comment) => { - const tokenOrCommentBefore = sourceCode.getTokenBefore(comment, { includeComments: true }); - - return commentMap.set(comment, commentMap.has(tokenOrCommentBefore) ? commentMap.get(tokenOrCommentBefore) : tokenOrCommentBefore); - }, new WeakMap()); - - sourceCode.lines.forEach((line, lineIndex) => { - const lineNumber = lineIndex + 1; - - if (!tokenInfo.firstTokensByLineNumber.has(lineNumber)) { - - // Don't check indentation on blank lines - return; - } - - const firstTokenOfLine = tokenInfo.firstTokensByLineNumber.get(lineNumber); - - if (firstTokenOfLine.loc.start.line !== lineNumber) { - - // Don't check the indentation of multi-line tokens (e.g. template literals or block comments) twice. - return; - } - - // If the token matches the expected expected indentation, don't report it. - if (validateTokenIndent(firstTokenOfLine, offsets.getDesiredIndent(firstTokenOfLine))) { - return; - } - - if (astUtils.isCommentToken(firstTokenOfLine)) { - const tokenBefore = precedingTokens.get(firstTokenOfLine); - const tokenAfter = tokenBefore ? sourceCode.getTokenAfter(tokenBefore) : sourceCode.ast.tokens[0]; - - // If a comment matches the expected indentation of the token immediately before or after, don't report it. - if ( - tokenBefore && validateTokenIndent(firstTokenOfLine, offsets.getDesiredIndent(tokenBefore)) || - tokenAfter && validateTokenIndent(firstTokenOfLine, offsets.getDesiredIndent(tokenAfter)) - ) { - return; - } - } - - // Otherwise, report the token/comment. - report(firstTokenOfLine, offsets.getDesiredIndent(firstTokenOfLine)); - }); - } - } - ); - } -}; diff --git a/node_modules/eslint/lib/rules/init-declarations.js b/node_modules/eslint/lib/rules/init-declarations.js deleted file mode 100644 index 412b96d..0000000 --- a/node_modules/eslint/lib/rules/init-declarations.js +++ /dev/null @@ -1,138 +0,0 @@ -/** - * @fileoverview A rule to control the style of variable initializations. - * @author Colin Ihrig - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a given node is a for loop. - * @param {ASTNode} block - A node to check. - * @returns {boolean} `true` when the node is a for loop. - */ -function isForLoop(block) { - return block.type === "ForInStatement" || - block.type === "ForOfStatement" || - block.type === "ForStatement"; -} - -/** - * Checks whether or not a given declarator node has its initializer. - * @param {ASTNode} node - A declarator node to check. - * @returns {boolean} `true` when the node has its initializer. - */ -function isInitialized(node) { - const declaration = node.parent; - const block = declaration.parent; - - if (isForLoop(block)) { - if (block.type === "ForStatement") { - return block.init === declaration; - } - return block.left === declaration; - } - return Boolean(node.init); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow initialization in variable declarations", - category: "Variables", - recommended: false, - url: "https://eslint.org/docs/rules/init-declarations" - }, - - schema: { - anyOf: [ - { - type: "array", - items: [ - { - enum: ["always"] - } - ], - minItems: 0, - maxItems: 1 - }, - { - type: "array", - items: [ - { - enum: ["never"] - }, - { - type: "object", - properties: { - ignoreForLoopInit: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - minItems: 0, - maxItems: 2 - } - ] - } - }, - - create(context) { - - const MODE_ALWAYS = "always", - MODE_NEVER = "never"; - - const mode = context.options[0] || MODE_ALWAYS; - const params = context.options[1] || {}; - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - "VariableDeclaration:exit"(node) { - - const kind = node.kind, - declarations = node.declarations; - - for (let i = 0; i < declarations.length; ++i) { - const declaration = declarations[i], - id = declaration.id, - initialized = isInitialized(declaration), - isIgnoredForLoop = params.ignoreForLoopInit && isForLoop(node.parent); - - if (id.type !== "Identifier") { - continue; - } - - if (mode === MODE_ALWAYS && !initialized) { - context.report({ - node: declaration, - message: "Variable '{{idName}}' should be initialized on declaration.", - data: { - idName: id.name - } - }); - } else if (mode === MODE_NEVER && kind !== "const" && initialized && !isIgnoredForLoop) { - context.report({ - node: declaration, - message: "Variable '{{idName}}' should not be initialized on declaration.", - data: { - idName: id.name - } - }); - } - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/jsx-quotes.js b/node_modules/eslint/lib/rules/jsx-quotes.js deleted file mode 100644 index 54ec481..0000000 --- a/node_modules/eslint/lib/rules/jsx-quotes.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * @fileoverview A rule to ensure consistent quotes used in jsx syntax. - * @author Mathias Schreck - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Constants -//------------------------------------------------------------------------------ - -const QUOTE_SETTINGS = { - "prefer-double": { - quote: "\"", - description: "singlequote", - convert(str) { - return str.replace(/'/g, "\""); - } - }, - "prefer-single": { - quote: "'", - description: "doublequote", - convert(str) { - return str.replace(/"/g, "'"); - } - } -}; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce the consistent use of either double or single quotes in JSX attributes", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/jsx-quotes" - }, - - fixable: "whitespace", - - schema: [ - { - enum: ["prefer-single", "prefer-double"] - } - ] - }, - - create(context) { - const quoteOption = context.options[0] || "prefer-double", - setting = QUOTE_SETTINGS[quoteOption]; - - /** - * Checks if the given string literal node uses the expected quotes - * @param {ASTNode} node - A string literal node. - * @returns {boolean} Whether or not the string literal used the expected quotes. - * @public - */ - function usesExpectedQuotes(node) { - return node.value.indexOf(setting.quote) !== -1 || astUtils.isSurroundedBy(node.raw, setting.quote); - } - - return { - JSXAttribute(node) { - const attributeValue = node.value; - - if (attributeValue && astUtils.isStringLiteral(attributeValue) && !usesExpectedQuotes(attributeValue)) { - context.report({ - node: attributeValue, - message: "Unexpected usage of {{description}}.", - data: { - description: setting.description - }, - fix(fixer) { - return fixer.replaceText(attributeValue, setting.convert(attributeValue.raw)); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/key-spacing.js b/node_modules/eslint/lib/rules/key-spacing.js deleted file mode 100644 index b1208e1..0000000 --- a/node_modules/eslint/lib/rules/key-spacing.js +++ /dev/null @@ -1,643 +0,0 @@ -/** - * @fileoverview Rule to specify spacing of object literal keys and values - * @author Brandon Mills - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether a string contains a line terminator as defined in - * http://www.ecma-international.org/ecma-262/5.1/#sec-7.3 - * @param {string} str String to test. - * @returns {boolean} True if str contains a line terminator. - */ -function containsLineTerminator(str) { - return astUtils.LINEBREAK_MATCHER.test(str); -} - -/** - * Gets the last element of an array. - * @param {Array} arr An array. - * @returns {any} Last element of arr. - */ -function last(arr) { - return arr[arr.length - 1]; -} - -/** - * Checks whether a node is contained on a single line. - * @param {ASTNode} node AST Node being evaluated. - * @returns {boolean} True if the node is a single line. - */ -function isSingleLine(node) { - return (node.loc.end.line === node.loc.start.line); -} - -/** - * Initializes a single option property from the configuration with defaults for undefined values - * @param {Object} toOptions Object to be initialized - * @param {Object} fromOptions Object to be initialized from - * @returns {Object} The object with correctly initialized options and values - */ -function initOptionProperty(toOptions, fromOptions) { - toOptions.mode = fromOptions.mode || "strict"; - - // Set value of beforeColon - if (typeof fromOptions.beforeColon !== "undefined") { - toOptions.beforeColon = +fromOptions.beforeColon; - } else { - toOptions.beforeColon = 0; - } - - // Set value of afterColon - if (typeof fromOptions.afterColon !== "undefined") { - toOptions.afterColon = +fromOptions.afterColon; - } else { - toOptions.afterColon = 1; - } - - // Set align if exists - if (typeof fromOptions.align !== "undefined") { - if (typeof fromOptions.align === "object") { - toOptions.align = fromOptions.align; - } else { // "string" - toOptions.align = { - on: fromOptions.align, - mode: toOptions.mode, - beforeColon: toOptions.beforeColon, - afterColon: toOptions.afterColon - }; - } - } - - return toOptions; -} - -/** - * Initializes all the option values (singleLine, multiLine and align) from the configuration with defaults for undefined values - * @param {Object} toOptions Object to be initialized - * @param {Object} fromOptions Object to be initialized from - * @returns {Object} The object with correctly initialized options and values - */ -function initOptions(toOptions, fromOptions) { - if (typeof fromOptions.align === "object") { - - // Initialize the alignment configuration - toOptions.align = initOptionProperty({}, fromOptions.align); - toOptions.align.on = fromOptions.align.on || "colon"; - toOptions.align.mode = fromOptions.align.mode || "strict"; - - toOptions.multiLine = initOptionProperty({}, (fromOptions.multiLine || fromOptions)); - toOptions.singleLine = initOptionProperty({}, (fromOptions.singleLine || fromOptions)); - - } else { // string or undefined - toOptions.multiLine = initOptionProperty({}, (fromOptions.multiLine || fromOptions)); - toOptions.singleLine = initOptionProperty({}, (fromOptions.singleLine || fromOptions)); - - // If alignment options are defined in multiLine, pull them out into the general align configuration - if (toOptions.multiLine.align) { - toOptions.align = { - on: toOptions.multiLine.align.on, - mode: toOptions.multiLine.align.mode || toOptions.multiLine.mode, - beforeColon: toOptions.multiLine.align.beforeColon, - afterColon: toOptions.multiLine.align.afterColon - }; - } - } - - return toOptions; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const messages = { - key: "{{error}} space after {{computed}}key '{{key}}'.", - value: "{{error}} space before value for {{computed}}key '{{key}}'." -}; - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing between keys and values in object literal properties", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/key-spacing" - }, - - fixable: "whitespace", - - schema: [{ - anyOf: [ - { - type: "object", - properties: { - align: { - anyOf: [ - { - enum: ["colon", "value"] - }, - { - type: "object", - properties: { - mode: { - enum: ["strict", "minimum"] - }, - on: { - enum: ["colon", "value"] - }, - beforeColon: { - type: "boolean" - }, - afterColon: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - mode: { - enum: ["strict", "minimum"] - }, - beforeColon: { - type: "boolean" - }, - afterColon: { - type: "boolean" - } - }, - additionalProperties: false - }, - { - type: "object", - properties: { - singleLine: { - type: "object", - properties: { - mode: { - enum: ["strict", "minimum"] - }, - beforeColon: { - type: "boolean" - }, - afterColon: { - type: "boolean" - } - }, - additionalProperties: false - }, - multiLine: { - type: "object", - properties: { - align: { - anyOf: [ - { - enum: ["colon", "value"] - }, - { - type: "object", - properties: { - mode: { - enum: ["strict", "minimum"] - }, - on: { - enum: ["colon", "value"] - }, - beforeColon: { - type: "boolean" - }, - afterColon: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - mode: { - enum: ["strict", "minimum"] - }, - beforeColon: { - type: "boolean" - }, - afterColon: { - type: "boolean" - } - }, - additionalProperties: false - } - }, - additionalProperties: false - }, - { - type: "object", - properties: { - singleLine: { - type: "object", - properties: { - mode: { - enum: ["strict", "minimum"] - }, - beforeColon: { - type: "boolean" - }, - afterColon: { - type: "boolean" - } - }, - additionalProperties: false - }, - multiLine: { - type: "object", - properties: { - mode: { - enum: ["strict", "minimum"] - }, - beforeColon: { - type: "boolean" - }, - afterColon: { - type: "boolean" - } - }, - additionalProperties: false - }, - align: { - type: "object", - properties: { - mode: { - enum: ["strict", "minimum"] - }, - on: { - enum: ["colon", "value"] - }, - beforeColon: { - type: "boolean" - }, - afterColon: { - type: "boolean" - } - }, - additionalProperties: false - } - }, - additionalProperties: false - } - ] - }] - }, - - create(context) { - - /** - * OPTIONS - * "key-spacing": [2, { - * beforeColon: false, - * afterColon: true, - * align: "colon" // Optional, or "value" - * } - */ - const options = context.options[0] || {}, - ruleOptions = initOptions({}, options), - multiLineOptions = ruleOptions.multiLine, - singleLineOptions = ruleOptions.singleLine, - alignmentOptions = ruleOptions.align || null; - - const sourceCode = context.getSourceCode(); - - /** - * Checks whether a property is a member of the property group it follows. - * @param {ASTNode} lastMember The last Property known to be in the group. - * @param {ASTNode} candidate The next Property that might be in the group. - * @returns {boolean} True if the candidate property is part of the group. - */ - function continuesPropertyGroup(lastMember, candidate) { - const groupEndLine = lastMember.loc.start.line, - candidateStartLine = candidate.loc.start.line; - - if (candidateStartLine - groupEndLine <= 1) { - return true; - } - - /* - * Check that the first comment is adjacent to the end of the group, the - * last comment is adjacent to the candidate property, and that successive - * comments are adjacent to each other. - */ - const leadingComments = sourceCode.getCommentsBefore(candidate); - - if ( - leadingComments.length && - leadingComments[0].loc.start.line - groupEndLine <= 1 && - candidateStartLine - last(leadingComments).loc.end.line <= 1 - ) { - for (let i = 1; i < leadingComments.length; i++) { - if (leadingComments[i].loc.start.line - leadingComments[i - 1].loc.end.line > 1) { - return false; - } - } - return true; - } - - return false; - } - - /** - * Determines if the given property is key-value property. - * @param {ASTNode} property Property node to check. - * @returns {boolean} Whether the property is a key-value property. - */ - function isKeyValueProperty(property) { - return !( - property.method || - property.shorthand || - property.kind !== "init" || - property.type !== "Property" // Could be "ExperimentalSpreadProperty" or "SpreadElement" - ); - } - - /** - * Starting from the given a node (a property.key node here) looks forward - * until it finds the last token before a colon punctuator and returns it. - * @param {ASTNode} node The node to start looking from. - * @returns {ASTNode} The last token before a colon punctuator. - */ - function getLastTokenBeforeColon(node) { - const colonToken = sourceCode.getTokenAfter(node, astUtils.isColonToken); - - return sourceCode.getTokenBefore(colonToken); - } - - /** - * Starting from the given a node (a property.key node here) looks forward - * until it finds the colon punctuator and returns it. - * @param {ASTNode} node The node to start looking from. - * @returns {ASTNode} The colon punctuator. - */ - function getNextColon(node) { - return sourceCode.getTokenAfter(node, astUtils.isColonToken); - } - - /** - * Gets an object literal property's key as the identifier name or string value. - * @param {ASTNode} property Property node whose key to retrieve. - * @returns {string} The property's key. - */ - function getKey(property) { - const key = property.key; - - if (property.computed) { - return sourceCode.getText().slice(key.range[0], key.range[1]); - } - - return property.key.name || property.key.value; - } - - /** - * Reports an appropriately-formatted error if spacing is incorrect on one - * side of the colon. - * @param {ASTNode} property Key-value pair in an object literal. - * @param {string} side Side being verified - either "key" or "value". - * @param {string} whitespace Actual whitespace string. - * @param {int} expected Expected whitespace length. - * @param {string} mode Value of the mode as "strict" or "minimum" - * @returns {void} - */ - function report(property, side, whitespace, expected, mode) { - const diff = whitespace.length - expected, - nextColon = getNextColon(property.key), - tokenBeforeColon = sourceCode.getTokenBefore(nextColon, { includeComments: true }), - tokenAfterColon = sourceCode.getTokenAfter(nextColon, { includeComments: true }), - isKeySide = side === "key", - locStart = isKeySide ? tokenBeforeColon.loc.start : tokenAfterColon.loc.start, - isExtra = diff > 0, - diffAbs = Math.abs(diff), - spaces = Array(diffAbs + 1).join(" "); - - if (( - diff && mode === "strict" || - diff < 0 && mode === "minimum" || - diff > 0 && !expected && mode === "minimum") && - !(expected && containsLineTerminator(whitespace)) - ) { - let fix; - - if (isExtra) { - let range; - - // Remove whitespace - if (isKeySide) { - range = [tokenBeforeColon.range[1], tokenBeforeColon.range[1] + diffAbs]; - } else { - range = [tokenAfterColon.range[0] - diffAbs, tokenAfterColon.range[0]]; - } - fix = function(fixer) { - return fixer.removeRange(range); - }; - } else { - - // Add whitespace - if (isKeySide) { - fix = function(fixer) { - return fixer.insertTextAfter(tokenBeforeColon, spaces); - }; - } else { - fix = function(fixer) { - return fixer.insertTextBefore(tokenAfterColon, spaces); - }; - } - } - - context.report({ - node: property[side], - loc: locStart, - message: messages[side], - data: { - error: isExtra ? "Extra" : "Missing", - computed: property.computed ? "computed " : "", - key: getKey(property) - }, - fix - }); - } - } - - /** - * Gets the number of characters in a key, including quotes around string - * keys and braces around computed property keys. - * @param {ASTNode} property Property of on object literal. - * @returns {int} Width of the key. - */ - function getKeyWidth(property) { - const startToken = sourceCode.getFirstToken(property); - const endToken = getLastTokenBeforeColon(property.key); - - return endToken.range[1] - startToken.range[0]; - } - - /** - * Gets the whitespace around the colon in an object literal property. - * @param {ASTNode} property Property node from an object literal. - * @returns {Object} Whitespace before and after the property's colon. - */ - function getPropertyWhitespace(property) { - const whitespace = /(\s*):(\s*)/.exec(sourceCode.getText().slice( - property.key.range[1], property.value.range[0] - )); - - if (whitespace) { - return { - beforeColon: whitespace[1], - afterColon: whitespace[2] - }; - } - return null; - } - - /** - * Creates groups of properties. - * @param {ASTNode} node ObjectExpression node being evaluated. - * @returns {Array.} Groups of property AST node lists. - */ - function createGroups(node) { - if (node.properties.length === 1) { - return [node.properties]; - } - - return node.properties.reduce((groups, property) => { - const currentGroup = last(groups), - prev = last(currentGroup); - - if (!prev || continuesPropertyGroup(prev, property)) { - currentGroup.push(property); - } else { - groups.push([property]); - } - - return groups; - }, [ - [] - ]); - } - - /** - * Verifies correct vertical alignment of a group of properties. - * @param {ASTNode[]} properties List of Property AST nodes. - * @returns {void} - */ - function verifyGroupAlignment(properties) { - const length = properties.length, - widths = properties.map(getKeyWidth), // Width of keys, including quotes - align = alignmentOptions.on; // "value" or "colon" - let targetWidth = Math.max.apply(null, widths), - beforeColon, afterColon, mode; - - if (alignmentOptions && length > 1) { // When aligning values within a group, use the alignment configuration. - beforeColon = alignmentOptions.beforeColon; - afterColon = alignmentOptions.afterColon; - mode = alignmentOptions.mode; - } else { - beforeColon = multiLineOptions.beforeColon; - afterColon = multiLineOptions.afterColon; - mode = alignmentOptions.mode; - } - - // Conditionally include one space before or after colon - targetWidth += (align === "colon" ? beforeColon : afterColon); - - for (let i = 0; i < length; i++) { - const property = properties[i]; - const whitespace = getPropertyWhitespace(property); - - if (whitespace) { // Object literal getters/setters lack a colon - const width = widths[i]; - - if (align === "value") { - report(property, "key", whitespace.beforeColon, beforeColon, mode); - report(property, "value", whitespace.afterColon, targetWidth - width, mode); - } else { // align = "colon" - report(property, "key", whitespace.beforeColon, targetWidth - width, mode); - report(property, "value", whitespace.afterColon, afterColon, mode); - } - } - } - } - - /** - * Verifies vertical alignment, taking into account groups of properties. - * @param {ASTNode} node ObjectExpression node being evaluated. - * @returns {void} - */ - function verifyAlignment(node) { - createGroups(node).forEach(group => { - verifyGroupAlignment(group.filter(isKeyValueProperty)); - }); - } - - /** - * Verifies spacing of property conforms to specified options. - * @param {ASTNode} node Property node being evaluated. - * @param {Object} lineOptions Configured singleLine or multiLine options - * @returns {void} - */ - function verifySpacing(node, lineOptions) { - const actual = getPropertyWhitespace(node); - - if (actual) { // Object literal getters/setters lack colons - report(node, "key", actual.beforeColon, lineOptions.beforeColon, lineOptions.mode); - report(node, "value", actual.afterColon, lineOptions.afterColon, lineOptions.mode); - } - } - - /** - * Verifies spacing of each property in a list. - * @param {ASTNode[]} properties List of Property AST nodes. - * @returns {void} - */ - function verifyListSpacing(properties) { - const length = properties.length; - - for (let i = 0; i < length; i++) { - verifySpacing(properties[i], singleLineOptions); - } - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - if (alignmentOptions) { // Verify vertical alignment - - return { - ObjectExpression(node) { - if (isSingleLine(node)) { - verifyListSpacing(node.properties.filter(isKeyValueProperty)); - } else { - verifyAlignment(node); - } - } - }; - - } - - // Obey beforeColon and afterColon in each property as configured - return { - Property(node) { - verifySpacing(node, isSingleLine(node.parent) ? singleLineOptions : multiLineOptions); - } - }; - - - } -}; diff --git a/node_modules/eslint/lib/rules/keyword-spacing.js b/node_modules/eslint/lib/rules/keyword-spacing.js deleted file mode 100644 index a2ce79a..0000000 --- a/node_modules/eslint/lib/rules/keyword-spacing.js +++ /dev/null @@ -1,578 +0,0 @@ -/** - * @fileoverview Rule to enforce spacing before and after keywords. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"), - keywords = require("../util/keywords"); - -//------------------------------------------------------------------------------ -// Constants -//------------------------------------------------------------------------------ - -const PREV_TOKEN = /^[)\]}>]$/; -const NEXT_TOKEN = /^(?:[([{<~!]|\+\+?|--?)$/; -const PREV_TOKEN_M = /^[)\]}>*]$/; -const NEXT_TOKEN_M = /^[{*]$/; -const TEMPLATE_OPEN_PAREN = /\$\{$/; -const TEMPLATE_CLOSE_PAREN = /^\}/; -const CHECK_TYPE = /^(?:JSXElement|RegularExpression|String|Template)$/; -const KEYS = keywords.concat(["as", "async", "await", "from", "get", "let", "of", "set", "yield"]); - -// check duplications. -(function() { - KEYS.sort(); - for (let i = 1; i < KEYS.length; ++i) { - if (KEYS[i] === KEYS[i - 1]) { - throw new Error(`Duplication was found in the keyword list: ${KEYS[i]}`); - } - } -}()); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a given token is a "Template" token ends with "${". - * - * @param {Token} token - A token to check. - * @returns {boolean} `true` if the token is a "Template" token ends with "${". - */ -function isOpenParenOfTemplate(token) { - return token.type === "Template" && TEMPLATE_OPEN_PAREN.test(token.value); -} - -/** - * Checks whether or not a given token is a "Template" token starts with "}". - * - * @param {Token} token - A token to check. - * @returns {boolean} `true` if the token is a "Template" token starts with "}". - */ -function isCloseParenOfTemplate(token) { - return token.type === "Template" && TEMPLATE_CLOSE_PAREN.test(token.value); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing before and after keywords", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/keyword-spacing" - }, - - fixable: "whitespace", - - schema: [ - { - type: "object", - properties: { - before: { type: "boolean" }, - after: { type: "boolean" }, - overrides: { - type: "object", - properties: KEYS.reduce((retv, key) => { - retv[key] = { - type: "object", - properties: { - before: { type: "boolean" }, - after: { type: "boolean" } - }, - additionalProperties: false - }; - return retv; - }, {}), - additionalProperties: false - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - /** - * Reports a given token if there are not space(s) before the token. - * - * @param {Token} token - A token to report. - * @param {RegExp} pattern - A pattern of the previous token to check. - * @returns {void} - */ - function expectSpaceBefore(token, pattern) { - const prevToken = sourceCode.getTokenBefore(token); - - if (prevToken && - (CHECK_TYPE.test(prevToken.type) || pattern.test(prevToken.value)) && - !isOpenParenOfTemplate(prevToken) && - astUtils.isTokenOnSameLine(prevToken, token) && - !sourceCode.isSpaceBetweenTokens(prevToken, token) - ) { - context.report({ - loc: token.loc.start, - message: "Expected space(s) before \"{{value}}\".", - data: token, - fix(fixer) { - return fixer.insertTextBefore(token, " "); - } - }); - } - } - - /** - * Reports a given token if there are space(s) before the token. - * - * @param {Token} token - A token to report. - * @param {RegExp} pattern - A pattern of the previous token to check. - * @returns {void} - */ - function unexpectSpaceBefore(token, pattern) { - const prevToken = sourceCode.getTokenBefore(token); - - if (prevToken && - (CHECK_TYPE.test(prevToken.type) || pattern.test(prevToken.value)) && - !isOpenParenOfTemplate(prevToken) && - astUtils.isTokenOnSameLine(prevToken, token) && - sourceCode.isSpaceBetweenTokens(prevToken, token) - ) { - context.report({ - loc: token.loc.start, - message: "Unexpected space(s) before \"{{value}}\".", - data: token, - fix(fixer) { - return fixer.removeRange([prevToken.range[1], token.range[0]]); - } - }); - } - } - - /** - * Reports a given token if there are not space(s) after the token. - * - * @param {Token} token - A token to report. - * @param {RegExp} pattern - A pattern of the next token to check. - * @returns {void} - */ - function expectSpaceAfter(token, pattern) { - const nextToken = sourceCode.getTokenAfter(token); - - if (nextToken && - (CHECK_TYPE.test(nextToken.type) || pattern.test(nextToken.value)) && - !isCloseParenOfTemplate(nextToken) && - astUtils.isTokenOnSameLine(token, nextToken) && - !sourceCode.isSpaceBetweenTokens(token, nextToken) - ) { - context.report({ - loc: token.loc.start, - message: "Expected space(s) after \"{{value}}\".", - data: token, - fix(fixer) { - return fixer.insertTextAfter(token, " "); - } - }); - } - } - - /** - * Reports a given token if there are space(s) after the token. - * - * @param {Token} token - A token to report. - * @param {RegExp} pattern - A pattern of the next token to check. - * @returns {void} - */ - function unexpectSpaceAfter(token, pattern) { - const nextToken = sourceCode.getTokenAfter(token); - - if (nextToken && - (CHECK_TYPE.test(nextToken.type) || pattern.test(nextToken.value)) && - !isCloseParenOfTemplate(nextToken) && - astUtils.isTokenOnSameLine(token, nextToken) && - sourceCode.isSpaceBetweenTokens(token, nextToken) - ) { - context.report({ - loc: token.loc.start, - message: "Unexpected space(s) after \"{{value}}\".", - data: token, - fix(fixer) { - return fixer.removeRange([token.range[1], nextToken.range[0]]); - } - }); - } - } - - /** - * Parses the option object and determines check methods for each keyword. - * - * @param {Object|undefined} options - The option object to parse. - * @returns {Object} - Normalized option object. - * Keys are keywords (there are for every keyword). - * Values are instances of `{"before": function, "after": function}`. - */ - function parseOptions(options) { - const before = !options || options.before !== false; - const after = !options || options.after !== false; - const defaultValue = { - before: before ? expectSpaceBefore : unexpectSpaceBefore, - after: after ? expectSpaceAfter : unexpectSpaceAfter - }; - const overrides = (options && options.overrides) || {}; - const retv = Object.create(null); - - for (let i = 0; i < KEYS.length; ++i) { - const key = KEYS[i]; - const override = overrides[key]; - - if (override) { - const thisBefore = ("before" in override) ? override.before : before; - const thisAfter = ("after" in override) ? override.after : after; - - retv[key] = { - before: thisBefore ? expectSpaceBefore : unexpectSpaceBefore, - after: thisAfter ? expectSpaceAfter : unexpectSpaceAfter - }; - } else { - retv[key] = defaultValue; - } - } - - return retv; - } - - const checkMethodMap = parseOptions(context.options[0]); - - /** - * Reports a given token if usage of spacing followed by the token is - * invalid. - * - * @param {Token} token - A token to report. - * @param {RegExp|undefined} pattern - Optional. A pattern of the previous - * token to check. - * @returns {void} - */ - function checkSpacingBefore(token, pattern) { - checkMethodMap[token.value].before(token, pattern || PREV_TOKEN); - } - - /** - * Reports a given token if usage of spacing preceded by the token is - * invalid. - * - * @param {Token} token - A token to report. - * @param {RegExp|undefined} pattern - Optional. A pattern of the next - * token to check. - * @returns {void} - */ - function checkSpacingAfter(token, pattern) { - checkMethodMap[token.value].after(token, pattern || NEXT_TOKEN); - } - - /** - * Reports a given token if usage of spacing around the token is invalid. - * - * @param {Token} token - A token to report. - * @returns {void} - */ - function checkSpacingAround(token) { - checkSpacingBefore(token); - checkSpacingAfter(token); - } - - /** - * Reports the first token of a given node if the first token is a keyword - * and usage of spacing around the token is invalid. - * - * @param {ASTNode|null} node - A node to report. - * @returns {void} - */ - function checkSpacingAroundFirstToken(node) { - const firstToken = node && sourceCode.getFirstToken(node); - - if (firstToken && firstToken.type === "Keyword") { - checkSpacingAround(firstToken); - } - } - - /** - * Reports the first token of a given node if the first token is a keyword - * and usage of spacing followed by the token is invalid. - * - * This is used for unary operators (e.g. `typeof`), `function`, and `super`. - * Other rules are handling usage of spacing preceded by those keywords. - * - * @param {ASTNode|null} node - A node to report. - * @returns {void} - */ - function checkSpacingBeforeFirstToken(node) { - const firstToken = node && sourceCode.getFirstToken(node); - - if (firstToken && firstToken.type === "Keyword") { - checkSpacingBefore(firstToken); - } - } - - /** - * Reports the previous token of a given node if the token is a keyword and - * usage of spacing around the token is invalid. - * - * @param {ASTNode|null} node - A node to report. - * @returns {void} - */ - function checkSpacingAroundTokenBefore(node) { - if (node) { - const token = sourceCode.getTokenBefore(node, astUtils.isKeywordToken); - - checkSpacingAround(token); - } - } - - /** - * Reports `async` or `function` keywords of a given node if usage of - * spacing around those keywords is invalid. - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function checkSpacingForFunction(node) { - const firstToken = node && sourceCode.getFirstToken(node); - - if (firstToken && - ((firstToken.type === "Keyword" && firstToken.value === "function") || - firstToken.value === "async") - ) { - checkSpacingBefore(firstToken); - } - } - - /** - * Reports `class` and `extends` keywords of a given node if usage of - * spacing around those keywords is invalid. - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function checkSpacingForClass(node) { - checkSpacingAroundFirstToken(node); - checkSpacingAroundTokenBefore(node.superClass); - } - - /** - * Reports `if` and `else` keywords of a given node if usage of spacing - * around those keywords is invalid. - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function checkSpacingForIfStatement(node) { - checkSpacingAroundFirstToken(node); - checkSpacingAroundTokenBefore(node.alternate); - } - - /** - * Reports `try`, `catch`, and `finally` keywords of a given node if usage - * of spacing around those keywords is invalid. - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function checkSpacingForTryStatement(node) { - checkSpacingAroundFirstToken(node); - checkSpacingAroundFirstToken(node.handler); - checkSpacingAroundTokenBefore(node.finalizer); - } - - /** - * Reports `do` and `while` keywords of a given node if usage of spacing - * around those keywords is invalid. - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function checkSpacingForDoWhileStatement(node) { - checkSpacingAroundFirstToken(node); - checkSpacingAroundTokenBefore(node.test); - } - - /** - * Reports `for` and `in` keywords of a given node if usage of spacing - * around those keywords is invalid. - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function checkSpacingForForInStatement(node) { - checkSpacingAroundFirstToken(node); - checkSpacingAroundTokenBefore(node.right); - } - - /** - * Reports `for` and `of` keywords of a given node if usage of spacing - * around those keywords is invalid. - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function checkSpacingForForOfStatement(node) { - if (node.await) { - checkSpacingBefore(sourceCode.getFirstToken(node, 0)); - checkSpacingAfter(sourceCode.getFirstToken(node, 1)); - } else { - checkSpacingAroundFirstToken(node); - } - checkSpacingAround(sourceCode.getTokenBefore(node.right, astUtils.isNotOpeningParenToken)); - } - - /** - * Reports `import`, `export`, `as`, and `from` keywords of a given node if - * usage of spacing around those keywords is invalid. - * - * This rule handles the `*` token in module declarations. - * - * import*as A from "./a"; /*error Expected space(s) after "import". - * error Expected space(s) before "as". - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function checkSpacingForModuleDeclaration(node) { - const firstToken = sourceCode.getFirstToken(node); - - checkSpacingBefore(firstToken, PREV_TOKEN_M); - checkSpacingAfter(firstToken, NEXT_TOKEN_M); - - if (node.source) { - const fromToken = sourceCode.getTokenBefore(node.source); - - checkSpacingBefore(fromToken, PREV_TOKEN_M); - checkSpacingAfter(fromToken, NEXT_TOKEN_M); - } - } - - /** - * Reports `as` keyword of a given node if usage of spacing around this - * keyword is invalid. - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function checkSpacingForImportNamespaceSpecifier(node) { - const asToken = sourceCode.getFirstToken(node, 1); - - checkSpacingBefore(asToken, PREV_TOKEN_M); - } - - /** - * Reports `static`, `get`, and `set` keywords of a given node if usage of - * spacing around those keywords is invalid. - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function checkSpacingForProperty(node) { - if (node.static) { - checkSpacingAroundFirstToken(node); - } - if (node.kind === "get" || - node.kind === "set" || - ( - (node.method || node.type === "MethodDefinition") && - node.value.async - ) - ) { - const token = sourceCode.getTokenBefore( - node.key, - tok => { - switch (tok.value) { - case "get": - case "set": - case "async": - return true; - default: - return false; - } - } - ); - - if (!token) { - throw new Error("Failed to find token get, set, or async beside method name"); - } - - - checkSpacingAround(token); - } - } - - /** - * Reports `await` keyword of a given node if usage of spacing before - * this keyword is invalid. - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function checkSpacingForAwaitExpression(node) { - checkSpacingBefore(sourceCode.getFirstToken(node)); - } - - return { - - // Statements - DebuggerStatement: checkSpacingAroundFirstToken, - WithStatement: checkSpacingAroundFirstToken, - - // Statements - Control flow - BreakStatement: checkSpacingAroundFirstToken, - ContinueStatement: checkSpacingAroundFirstToken, - ReturnStatement: checkSpacingAroundFirstToken, - ThrowStatement: checkSpacingAroundFirstToken, - TryStatement: checkSpacingForTryStatement, - - // Statements - Choice - IfStatement: checkSpacingForIfStatement, - SwitchStatement: checkSpacingAroundFirstToken, - SwitchCase: checkSpacingAroundFirstToken, - - // Statements - Loops - DoWhileStatement: checkSpacingForDoWhileStatement, - ForInStatement: checkSpacingForForInStatement, - ForOfStatement: checkSpacingForForOfStatement, - ForStatement: checkSpacingAroundFirstToken, - WhileStatement: checkSpacingAroundFirstToken, - - // Statements - Declarations - ClassDeclaration: checkSpacingForClass, - ExportNamedDeclaration: checkSpacingForModuleDeclaration, - ExportDefaultDeclaration: checkSpacingAroundFirstToken, - ExportAllDeclaration: checkSpacingForModuleDeclaration, - FunctionDeclaration: checkSpacingForFunction, - ImportDeclaration: checkSpacingForModuleDeclaration, - VariableDeclaration: checkSpacingAroundFirstToken, - - // Expressions - ArrowFunctionExpression: checkSpacingForFunction, - AwaitExpression: checkSpacingForAwaitExpression, - ClassExpression: checkSpacingForClass, - FunctionExpression: checkSpacingForFunction, - NewExpression: checkSpacingBeforeFirstToken, - Super: checkSpacingBeforeFirstToken, - ThisExpression: checkSpacingBeforeFirstToken, - UnaryExpression: checkSpacingBeforeFirstToken, - YieldExpression: checkSpacingBeforeFirstToken, - - // Others - ImportNamespaceSpecifier: checkSpacingForImportNamespaceSpecifier, - MethodDefinition: checkSpacingForProperty, - Property: checkSpacingForProperty - }; - } -}; diff --git a/node_modules/eslint/lib/rules/line-comment-position.js b/node_modules/eslint/lib/rules/line-comment-position.js deleted file mode 100644 index ebdb024..0000000 --- a/node_modules/eslint/lib/rules/line-comment-position.js +++ /dev/null @@ -1,116 +0,0 @@ -/** - * @fileoverview Rule to enforce the position of line comments - * @author Alberto Rodríguez - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce position of line comments", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/line-comment-position" - }, - - schema: [ - { - oneOf: [ - { - enum: ["above", "beside"] - }, - { - type: "object", - properties: { - position: { - enum: ["above", "beside"] - }, - ignorePattern: { - type: "string" - }, - applyDefaultPatterns: { - type: "boolean" - }, - applyDefaultIgnorePatterns: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - const options = context.options[0]; - - let above, - ignorePattern, - applyDefaultIgnorePatterns = true; - - if (!options || typeof options === "string") { - above = !options || options === "above"; - - } else { - above = options.position === "above"; - ignorePattern = options.ignorePattern; - - if (options.hasOwnProperty("applyDefaultIgnorePatterns")) { - applyDefaultIgnorePatterns = options.applyDefaultIgnorePatterns !== false; - } else { - applyDefaultIgnorePatterns = options.applyDefaultPatterns !== false; - } - } - - const defaultIgnoreRegExp = astUtils.COMMENTS_IGNORE_PATTERN; - const fallThroughRegExp = /^\s*falls?\s?through/; - const customIgnoreRegExp = new RegExp(ignorePattern); - const sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - Program() { - const comments = sourceCode.getAllComments(); - - comments.filter(token => token.type === "Line").forEach(node => { - if (applyDefaultIgnorePatterns && (defaultIgnoreRegExp.test(node.value) || fallThroughRegExp.test(node.value))) { - return; - } - - if (ignorePattern && customIgnoreRegExp.test(node.value)) { - return; - } - - const previous = sourceCode.getTokenBefore(node, { includeComments: true }); - const isOnSameLine = previous && previous.loc.end.line === node.loc.start.line; - - if (above) { - if (isOnSameLine) { - context.report({ - node, - message: "Expected comment to be above code." - }); - } - } else { - if (!isOnSameLine) { - context.report({ - node, - message: "Expected comment to be beside code." - }); - } - } - }); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/linebreak-style.js b/node_modules/eslint/lib/rules/linebreak-style.js deleted file mode 100644 index d5a170f..0000000 --- a/node_modules/eslint/lib/rules/linebreak-style.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @fileoverview Rule to enforce a single linebreak style. - * @author Erik Mueller - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent linebreak style", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/linebreak-style" - }, - - fixable: "whitespace", - - schema: [ - { - enum: ["unix", "windows"] - } - ] - }, - - create(context) { - - const EXPECTED_LF_MSG = "Expected linebreaks to be 'LF' but found 'CRLF'.", - EXPECTED_CRLF_MSG = "Expected linebreaks to be 'CRLF' but found 'LF'."; - - const sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Builds a fix function that replaces text at the specified range in the source text. - * @param {int[]} range The range to replace - * @param {string} text The text to insert. - * @returns {Function} Fixer function - * @private - */ - function createFix(range, text) { - return function(fixer) { - return fixer.replaceTextRange(range, text); - }; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - Program: function checkForlinebreakStyle(node) { - const linebreakStyle = context.options[0] || "unix", - expectedLF = linebreakStyle === "unix", - expectedLFChars = expectedLF ? "\n" : "\r\n", - source = sourceCode.getText(), - pattern = astUtils.createGlobalLinebreakMatcher(); - let match; - - let i = 0; - - while ((match = pattern.exec(source)) !== null) { - i++; - if (match[0] === expectedLFChars) { - continue; - } - - const index = match.index; - const range = [index, index + match[0].length]; - - context.report({ - node, - loc: { - line: i, - column: sourceCode.lines[i - 1].length - }, - message: expectedLF ? EXPECTED_LF_MSG : EXPECTED_CRLF_MSG, - fix: createFix(range, expectedLFChars) - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/lines-around-comment.js b/node_modules/eslint/lib/rules/lines-around-comment.js deleted file mode 100644 index 5d98473..0000000 --- a/node_modules/eslint/lib/rules/lines-around-comment.js +++ /dev/null @@ -1,398 +0,0 @@ -/** - * @fileoverview Enforces empty lines around comments. - * @author Jamund Ferguson - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"), - astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Return an array with with any line numbers that are empty. - * @param {Array} lines An array of each line of the file. - * @returns {Array} An array of line numbers. - */ -function getEmptyLineNums(lines) { - const emptyLines = lines.map((line, i) => ({ - code: line.trim(), - num: i + 1 - })).filter(line => !line.code).map(line => line.num); - - return emptyLines; -} - -/** - * Return an array with with any line numbers that contain comments. - * @param {Array} comments An array of comment tokens. - * @returns {Array} An array of line numbers. - */ -function getCommentLineNums(comments) { - const lines = []; - - comments.forEach(token => { - const start = token.loc.start.line; - const end = token.loc.end.line; - - lines.push(start, end); - }); - return lines; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require empty lines around comments", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/lines-around-comment" - }, - - fixable: "whitespace", - - schema: [ - { - type: "object", - properties: { - beforeBlockComment: { - type: "boolean" - }, - afterBlockComment: { - type: "boolean" - }, - beforeLineComment: { - type: "boolean" - }, - afterLineComment: { - type: "boolean" - }, - allowBlockStart: { - type: "boolean" - }, - allowBlockEnd: { - type: "boolean" - }, - allowClassStart: { - type: "boolean" - }, - allowClassEnd: { - type: "boolean" - }, - allowObjectStart: { - type: "boolean" - }, - allowObjectEnd: { - type: "boolean" - }, - allowArrayStart: { - type: "boolean" - }, - allowArrayEnd: { - type: "boolean" - }, - ignorePattern: { - type: "string" - }, - applyDefaultIgnorePatterns: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const options = context.options[0] ? Object.assign({}, context.options[0]) : {}; - const ignorePattern = options.ignorePattern; - const defaultIgnoreRegExp = astUtils.COMMENTS_IGNORE_PATTERN; - const customIgnoreRegExp = new RegExp(ignorePattern); - const applyDefaultIgnorePatterns = options.applyDefaultIgnorePatterns !== false; - - - options.beforeLineComment = options.beforeLineComment || false; - options.afterLineComment = options.afterLineComment || false; - options.beforeBlockComment = typeof options.beforeBlockComment !== "undefined" ? options.beforeBlockComment : true; - options.afterBlockComment = options.afterBlockComment || false; - options.allowBlockStart = options.allowBlockStart || false; - options.allowBlockEnd = options.allowBlockEnd || false; - - const sourceCode = context.getSourceCode(); - - const lines = sourceCode.lines, - numLines = lines.length + 1, - comments = sourceCode.getAllComments(), - commentLines = getCommentLineNums(comments), - emptyLines = getEmptyLineNums(lines), - commentAndEmptyLines = commentLines.concat(emptyLines); - - /** - * Returns whether or not comments are on lines starting with or ending with code - * @param {token} token The comment token to check. - * @returns {boolean} True if the comment is not alone. - */ - function codeAroundComment(token) { - let currentToken = token; - - do { - currentToken = sourceCode.getTokenBefore(currentToken, { includeComments: true }); - } while (currentToken && astUtils.isCommentToken(currentToken)); - - if (currentToken && astUtils.isTokenOnSameLine(currentToken, token)) { - return true; - } - - currentToken = token; - do { - currentToken = sourceCode.getTokenAfter(currentToken, { includeComments: true }); - } while (currentToken && astUtils.isCommentToken(currentToken)); - - if (currentToken && astUtils.isTokenOnSameLine(token, currentToken)) { - return true; - } - - return false; - } - - /** - * Returns whether or not comments are inside a node type or not. - * @param {ASTNode} parent The Comment parent node. - * @param {string} nodeType The parent type to check against. - * @returns {boolean} True if the comment is inside nodeType. - */ - function isParentNodeType(parent, nodeType) { - return parent.type === nodeType || - (parent.body && parent.body.type === nodeType) || - (parent.consequent && parent.consequent.type === nodeType); - } - - /** - * Returns the parent node that contains the given token. - * @param {token} token The token to check. - * @returns {ASTNode} The parent node that contains the given token. - */ - function getParentNodeOfToken(token) { - return sourceCode.getNodeByRangeIndex(token.range[0]); - } - - /** - * Returns whether or not comments are at the parent start or not. - * @param {token} token The Comment token. - * @param {string} nodeType The parent type to check against. - * @returns {boolean} True if the comment is at parent start. - */ - function isCommentAtParentStart(token, nodeType) { - const parent = getParentNodeOfToken(token); - - return parent && isParentNodeType(parent, nodeType) && - token.loc.start.line - parent.loc.start.line === 1; - } - - /** - * Returns whether or not comments are at the parent end or not. - * @param {token} token The Comment token. - * @param {string} nodeType The parent type to check against. - * @returns {boolean} True if the comment is at parent end. - */ - function isCommentAtParentEnd(token, nodeType) { - const parent = getParentNodeOfToken(token); - - return parent && isParentNodeType(parent, nodeType) && - parent.loc.end.line - token.loc.end.line === 1; - } - - /** - * Returns whether or not comments are at the block start or not. - * @param {token} token The Comment token. - * @returns {boolean} True if the comment is at block start. - */ - function isCommentAtBlockStart(token) { - return isCommentAtParentStart(token, "ClassBody") || isCommentAtParentStart(token, "BlockStatement") || isCommentAtParentStart(token, "SwitchCase"); - } - - /** - * Returns whether or not comments are at the block end or not. - * @param {token} token The Comment token. - * @returns {boolean} True if the comment is at block end. - */ - function isCommentAtBlockEnd(token) { - return isCommentAtParentEnd(token, "ClassBody") || isCommentAtParentEnd(token, "BlockStatement") || isCommentAtParentEnd(token, "SwitchCase") || isCommentAtParentEnd(token, "SwitchStatement"); - } - - /** - * Returns whether or not comments are at the class start or not. - * @param {token} token The Comment token. - * @returns {boolean} True if the comment is at class start. - */ - function isCommentAtClassStart(token) { - return isCommentAtParentStart(token, "ClassBody"); - } - - /** - * Returns whether or not comments are at the class end or not. - * @param {token} token The Comment token. - * @returns {boolean} True if the comment is at class end. - */ - function isCommentAtClassEnd(token) { - return isCommentAtParentEnd(token, "ClassBody"); - } - - /** - * Returns whether or not comments are at the object start or not. - * @param {token} token The Comment token. - * @returns {boolean} True if the comment is at object start. - */ - function isCommentAtObjectStart(token) { - return isCommentAtParentStart(token, "ObjectExpression") || isCommentAtParentStart(token, "ObjectPattern"); - } - - /** - * Returns whether or not comments are at the object end or not. - * @param {token} token The Comment token. - * @returns {boolean} True if the comment is at object end. - */ - function isCommentAtObjectEnd(token) { - return isCommentAtParentEnd(token, "ObjectExpression") || isCommentAtParentEnd(token, "ObjectPattern"); - } - - /** - * Returns whether or not comments are at the array start or not. - * @param {token} token The Comment token. - * @returns {boolean} True if the comment is at array start. - */ - function isCommentAtArrayStart(token) { - return isCommentAtParentStart(token, "ArrayExpression") || isCommentAtParentStart(token, "ArrayPattern"); - } - - /** - * Returns whether or not comments are at the array end or not. - * @param {token} token The Comment token. - * @returns {boolean} True if the comment is at array end. - */ - function isCommentAtArrayEnd(token) { - return isCommentAtParentEnd(token, "ArrayExpression") || isCommentAtParentEnd(token, "ArrayPattern"); - } - - /** - * Checks if a comment token has lines around it (ignores inline comments) - * @param {token} token The Comment token. - * @param {Object} opts Options to determine the newline. - * @param {boolean} opts.after Should have a newline after this line. - * @param {boolean} opts.before Should have a newline before this line. - * @returns {void} - */ - function checkForEmptyLine(token, opts) { - if (applyDefaultIgnorePatterns && defaultIgnoreRegExp.test(token.value)) { - return; - } - - if (ignorePattern && customIgnoreRegExp.test(token.value)) { - return; - } - - let after = opts.after, - before = opts.before; - - const prevLineNum = token.loc.start.line - 1, - nextLineNum = token.loc.end.line + 1, - commentIsNotAlone = codeAroundComment(token); - - const blockStartAllowed = options.allowBlockStart && - isCommentAtBlockStart(token) && - !(options.allowClassStart === false && - isCommentAtClassStart(token)), - blockEndAllowed = options.allowBlockEnd && isCommentAtBlockEnd(token) && !(options.allowClassEnd === false && isCommentAtClassEnd(token)), - classStartAllowed = options.allowClassStart && isCommentAtClassStart(token), - classEndAllowed = options.allowClassEnd && isCommentAtClassEnd(token), - objectStartAllowed = options.allowObjectStart && isCommentAtObjectStart(token), - objectEndAllowed = options.allowObjectEnd && isCommentAtObjectEnd(token), - arrayStartAllowed = options.allowArrayStart && isCommentAtArrayStart(token), - arrayEndAllowed = options.allowArrayEnd && isCommentAtArrayEnd(token); - - const exceptionStartAllowed = blockStartAllowed || classStartAllowed || objectStartAllowed || arrayStartAllowed; - const exceptionEndAllowed = blockEndAllowed || classEndAllowed || objectEndAllowed || arrayEndAllowed; - - // ignore top of the file and bottom of the file - if (prevLineNum < 1) { - before = false; - } - if (nextLineNum >= numLines) { - after = false; - } - - // we ignore all inline comments - if (commentIsNotAlone) { - return; - } - - const previousTokenOrComment = sourceCode.getTokenBefore(token, { includeComments: true }); - const nextTokenOrComment = sourceCode.getTokenAfter(token, { includeComments: true }); - - // check for newline before - if (!exceptionStartAllowed && before && !lodash.includes(commentAndEmptyLines, prevLineNum) && - !(astUtils.isCommentToken(previousTokenOrComment) && astUtils.isTokenOnSameLine(previousTokenOrComment, token))) { - const lineStart = token.range[0] - token.loc.start.column; - const range = [lineStart, lineStart]; - - context.report({ - node: token, - message: "Expected line before comment.", - fix(fixer) { - return fixer.insertTextBeforeRange(range, "\n"); - } - }); - } - - // check for newline after - if (!exceptionEndAllowed && after && !lodash.includes(commentAndEmptyLines, nextLineNum) && - !(astUtils.isCommentToken(nextTokenOrComment) && astUtils.isTokenOnSameLine(token, nextTokenOrComment))) { - context.report({ - node: token, - message: "Expected line after comment.", - fix(fixer) { - return fixer.insertTextAfter(token, "\n"); - } - }); - } - - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - Program() { - comments.forEach(token => { - if (token.type === "Line") { - if (options.beforeLineComment || options.afterLineComment) { - checkForEmptyLine(token, { - after: options.afterLineComment, - before: options.beforeLineComment - }); - } - } else if (token.type === "Block") { - if (options.beforeBlockComment || options.afterBlockComment) { - checkForEmptyLine(token, { - after: options.afterBlockComment, - before: options.beforeBlockComment - }); - } - } - }); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/lines-around-directive.js b/node_modules/eslint/lib/rules/lines-around-directive.js deleted file mode 100644 index 3ba3ab5..0000000 --- a/node_modules/eslint/lib/rules/lines-around-directive.js +++ /dev/null @@ -1,194 +0,0 @@ -/** - * @fileoverview Require or disallow newlines around directives. - * @author Kai Cataldo - * @deprecated - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow newlines around directives", - category: "Stylistic Issues", - recommended: false, - replacedBy: ["padding-line-between-statements"], - url: "https://eslint.org/docs/rules/lines-around-directive" - }, - schema: [{ - oneOf: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - before: { - enum: ["always", "never"] - }, - after: { - enum: ["always", "never"] - } - }, - additionalProperties: false, - minProperties: 2 - } - ] - }], - fixable: "whitespace", - deprecated: true - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const config = context.options[0] || "always"; - const expectLineBefore = typeof config === "string" ? config : config.before; - const expectLineAfter = typeof config === "string" ? config : config.after; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Check if node is preceded by a blank newline. - * @param {ASTNode} node Node to check. - * @returns {boolean} Whether or not the passed in node is preceded by a blank newline. - */ - function hasNewlineBefore(node) { - const tokenBefore = sourceCode.getTokenBefore(node, { includeComments: true }); - const tokenLineBefore = tokenBefore ? tokenBefore.loc.end.line : 0; - - return node.loc.start.line - tokenLineBefore >= 2; - } - - /** - * Gets the last token of a node that is on the same line as the rest of the node. - * This will usually be the last token of the node, but it will be the second-to-last token if the node has a trailing - * semicolon on a different line. - * @param {ASTNode} node A directive node - * @returns {Token} The last token of the node on the line - */ - function getLastTokenOnLine(node) { - const lastToken = sourceCode.getLastToken(node); - const secondToLastToken = sourceCode.getTokenBefore(lastToken); - - return astUtils.isSemicolonToken(lastToken) && lastToken.loc.start.line > secondToLastToken.loc.end.line - ? secondToLastToken - : lastToken; - } - - /** - * Check if node is followed by a blank newline. - * @param {ASTNode} node Node to check. - * @returns {boolean} Whether or not the passed in node is followed by a blank newline. - */ - function hasNewlineAfter(node) { - const lastToken = getLastTokenOnLine(node); - const tokenAfter = sourceCode.getTokenAfter(lastToken, { includeComments: true }); - - return tokenAfter.loc.start.line - lastToken.loc.end.line >= 2; - } - - /** - * Report errors for newlines around directives. - * @param {ASTNode} node Node to check. - * @param {string} location Whether the error was found before or after the directive. - * @param {boolean} expected Whether or not a newline was expected or unexpected. - * @returns {void} - */ - function reportError(node, location, expected) { - context.report({ - node, - message: "{{expected}} newline {{location}} \"{{value}}\" directive.", - data: { - expected: expected ? "Expected" : "Unexpected", - value: node.expression.value, - location - }, - fix(fixer) { - const lastToken = getLastTokenOnLine(node); - - if (expected) { - return location === "before" ? fixer.insertTextBefore(node, "\n") : fixer.insertTextAfter(lastToken, "\n"); - } - return fixer.removeRange(location === "before" ? [node.range[0] - 1, node.range[0]] : [lastToken.range[1], lastToken.range[1] + 1]); - } - }); - } - - /** - * Check lines around directives in node - * @param {ASTNode} node - node to check - * @returns {void} - */ - function checkDirectives(node) { - const directives = astUtils.getDirectivePrologue(node); - - if (!directives.length) { - return; - } - - const firstDirective = directives[0]; - const leadingComments = sourceCode.getCommentsBefore(firstDirective); - - /* - * Only check before the first directive if it is preceded by a comment or if it is at the top of - * the file and expectLineBefore is set to "never". This is to not force a newline at the top of - * the file if there are no comments as well as for compatibility with padded-blocks. - */ - if (leadingComments.length) { - if (expectLineBefore === "always" && !hasNewlineBefore(firstDirective)) { - reportError(firstDirective, "before", true); - } - - if (expectLineBefore === "never" && hasNewlineBefore(firstDirective)) { - reportError(firstDirective, "before", false); - } - } else if ( - node.type === "Program" && - expectLineBefore === "never" && - !leadingComments.length && - hasNewlineBefore(firstDirective) - ) { - reportError(firstDirective, "before", false); - } - - const lastDirective = directives[directives.length - 1]; - const statements = node.type === "Program" ? node.body : node.body.body; - - /* - * Do not check after the last directive if the body only - * contains a directive prologue and isn't followed by a comment to ensure - * this rule behaves well with padded-blocks. - */ - if (lastDirective === statements[statements.length - 1] && !lastDirective.trailingComments) { - return; - } - - if (expectLineAfter === "always" && !hasNewlineAfter(lastDirective)) { - reportError(lastDirective, "after", true); - } - - if (expectLineAfter === "never" && hasNewlineAfter(lastDirective)) { - reportError(lastDirective, "after", false); - } - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - Program: checkDirectives, - FunctionDeclaration: checkDirectives, - FunctionExpression: checkDirectives, - ArrowFunctionExpression: checkDirectives - }; - } -}; diff --git a/node_modules/eslint/lib/rules/lines-between-class-members.js b/node_modules/eslint/lib/rules/lines-between-class-members.js deleted file mode 100644 index 252984d..0000000 --- a/node_modules/eslint/lib/rules/lines-between-class-members.js +++ /dev/null @@ -1,140 +0,0 @@ -/** - * @fileoverview Rule to check empty newline between class members - * @author 薛定谔的猫 - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow an empty line between class members", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/lines-between-class-members" - }, - - fixable: "whitespace", - - schema: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - exceptAfterSingleLine: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const options = []; - - options[0] = context.options[0] || "always"; - options[1] = context.options[1] || { exceptAfterSingleLine: false }; - - const ALWAYS_MESSAGE = "Expected blank line between class members."; - const NEVER_MESSAGE = "Unexpected blank line between class members."; - - const sourceCode = context.getSourceCode(); - - /** - * Checks if there is padding between two tokens - * @param {Token} first The first token - * @param {Token} second The second token - * @returns {boolean} True if there is at least a line between the tokens - */ - function isPaddingBetweenTokens(first, second) { - const comments = sourceCode.getCommentsBefore(second); - const len = comments.length; - - // If there is no comments - if (len === 0) { - const linesBetweenFstAndSnd = second.loc.start.line - first.loc.end.line - 1; - - return linesBetweenFstAndSnd >= 1; - } - - - // If there are comments - let sumOfCommentLines = 0; // the numbers of lines of comments - let prevCommentLineNum = -1; // line number of the end of the previous comment - - for (let i = 0; i < len; i++) { - const commentLinesOfThisComment = comments[i].loc.end.line - comments[i].loc.start.line + 1; - - sumOfCommentLines += commentLinesOfThisComment; - - /* - * If this comment and the previous comment are in the same line, - * the count of comment lines is duplicated. So decrement sumOfCommentLines. - */ - if (prevCommentLineNum === comments[i].loc.start.line) { - sumOfCommentLines -= 1; - } - - prevCommentLineNum = comments[i].loc.end.line; - } - - /* - * If the first block and the first comment are in the same line, - * the count of comment lines is duplicated. So decrement sumOfCommentLines. - */ - if (first.loc.end.line === comments[0].loc.start.line) { - sumOfCommentLines -= 1; - } - - /* - * If the last comment and the second block are in the same line, - * the count of comment lines is duplicated. So decrement sumOfCommentLines. - */ - if (comments[len - 1].loc.end.line === second.loc.start.line) { - sumOfCommentLines -= 1; - } - - const linesBetweenFstAndSnd = second.loc.start.line - first.loc.end.line - 1; - - return linesBetweenFstAndSnd - sumOfCommentLines >= 1; - } - - return { - ClassBody(node) { - const body = node.body; - - for (let i = 0; i < body.length - 1; i++) { - const curFirst = sourceCode.getFirstToken(body[i]); - const curLast = sourceCode.getLastToken(body[i]); - const nextFirst = sourceCode.getFirstToken(body[i + 1]); - const isPadded = isPaddingBetweenTokens(curLast, nextFirst); - const isMulti = !astUtils.isTokenOnSameLine(curFirst, curLast); - const skip = !isMulti && options[1].exceptAfterSingleLine; - - - if ((options[0] === "always" && !skip && !isPadded) || - (options[0] === "never" && isPadded)) { - context.report({ - node: body[i + 1], - message: isPadded ? NEVER_MESSAGE : ALWAYS_MESSAGE, - fix(fixer) { - return isPadded - ? fixer.replaceTextRange([curLast.range[1], nextFirst.range[0]], "\n") - : fixer.insertTextAfter(curLast, "\n"); - } - }); - } - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/max-depth.js b/node_modules/eslint/lib/rules/max-depth.js deleted file mode 100644 index ead44b9..0000000 --- a/node_modules/eslint/lib/rules/max-depth.js +++ /dev/null @@ -1,149 +0,0 @@ -/** - * @fileoverview A rule to set the maximum depth block can be nested in a function. - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce a maximum depth that blocks can be nested", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/max-depth" - }, - - schema: [ - { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - type: "object", - properties: { - maximum: { - type: "integer", - minimum: 0 - }, - max: { - type: "integer", - minimum: 0 - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - const functionStack = [], - option = context.options[0]; - let maxDepth = 4; - - if (typeof option === "object" && option.hasOwnProperty("maximum") && typeof option.maximum === "number") { - maxDepth = option.maximum; - } - if (typeof option === "object" && option.hasOwnProperty("max") && typeof option.max === "number") { - maxDepth = option.max; - } - if (typeof option === "number") { - maxDepth = option; - } - - /** - * When parsing a new function, store it in our function stack - * @returns {void} - * @private - */ - function startFunction() { - functionStack.push(0); - } - - /** - * When parsing is done then pop out the reference - * @returns {void} - * @private - */ - function endFunction() { - functionStack.pop(); - } - - /** - * Save the block and Evaluate the node - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function pushBlock(node) { - const len = ++functionStack[functionStack.length - 1]; - - if (len > maxDepth) { - context.report({ node, message: "Blocks are nested too deeply ({{depth}}).", data: { depth: len } }); - } - } - - /** - * Pop the saved block - * @returns {void} - * @private - */ - function popBlock() { - functionStack[functionStack.length - 1]--; - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - Program: startFunction, - FunctionDeclaration: startFunction, - FunctionExpression: startFunction, - ArrowFunctionExpression: startFunction, - - IfStatement(node) { - if (node.parent.type !== "IfStatement") { - pushBlock(node); - } - }, - SwitchStatement: pushBlock, - TryStatement: pushBlock, - DoWhileStatement: pushBlock, - WhileStatement: pushBlock, - WithStatement: pushBlock, - ForStatement: pushBlock, - ForInStatement: pushBlock, - ForOfStatement: pushBlock, - - "IfStatement:exit": popBlock, - "SwitchStatement:exit": popBlock, - "TryStatement:exit": popBlock, - "DoWhileStatement:exit": popBlock, - "WhileStatement:exit": popBlock, - "WithStatement:exit": popBlock, - "ForStatement:exit": popBlock, - "ForInStatement:exit": popBlock, - "ForOfStatement:exit": popBlock, - - "FunctionDeclaration:exit": endFunction, - "FunctionExpression:exit": endFunction, - "ArrowFunctionExpression:exit": endFunction, - "Program:exit": endFunction - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/max-len.js b/node_modules/eslint/lib/rules/max-len.js deleted file mode 100644 index 273eb84..0000000 --- a/node_modules/eslint/lib/rules/max-len.js +++ /dev/null @@ -1,373 +0,0 @@ -/** - * @fileoverview Rule to check for max length on a line. - * @author Matt DuVall - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Constants -//------------------------------------------------------------------------------ - -const OPTIONS_SCHEMA = { - type: "object", - properties: { - code: { - type: "integer", - minimum: 0 - }, - comments: { - type: "integer", - minimum: 0 - }, - tabWidth: { - type: "integer", - minimum: 0 - }, - ignorePattern: { - type: "string" - }, - ignoreComments: { - type: "boolean" - }, - ignoreStrings: { - type: "boolean" - }, - ignoreUrls: { - type: "boolean" - }, - ignoreTemplateLiterals: { - type: "boolean" - }, - ignoreRegExpLiterals: { - type: "boolean" - }, - ignoreTrailingComments: { - type: "boolean" - } - }, - additionalProperties: false -}; - -const OPTIONS_OR_INTEGER_SCHEMA = { - anyOf: [ - OPTIONS_SCHEMA, - { - type: "integer", - minimum: 0 - } - ] -}; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce a maximum line length", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/max-len" - }, - - schema: [ - OPTIONS_OR_INTEGER_SCHEMA, - OPTIONS_OR_INTEGER_SCHEMA, - OPTIONS_SCHEMA - ] - }, - - create(context) { - - /* - * Inspired by http://tools.ietf.org/html/rfc3986#appendix-B, however: - * - They're matching an entire string that we know is a URI - * - We're matching part of a string where we think there *might* be a URL - * - We're only concerned about URLs, as picking out any URI would cause - * too many false positives - * - We don't care about matching the entire URL, any small segment is fine - */ - const URL_REGEXP = /[^:/?#]:\/\/[^?#]/; - - const sourceCode = context.getSourceCode(); - - /** - * Computes the length of a line that may contain tabs. The width of each - * tab will be the number of spaces to the next tab stop. - * @param {string} line The line. - * @param {int} tabWidth The width of each tab stop in spaces. - * @returns {int} The computed line length. - * @private - */ - function computeLineLength(line, tabWidth) { - let extraCharacterCount = 0; - - line.replace(/\t/g, (match, offset) => { - const totalOffset = offset + extraCharacterCount, - previousTabStopOffset = tabWidth ? totalOffset % tabWidth : 0, - spaceCount = tabWidth - previousTabStopOffset; - - extraCharacterCount += spaceCount - 1; // -1 for the replaced tab - }); - return Array.from(line).length + extraCharacterCount; - } - - // The options object must be the last option specified… - const lastOption = context.options[context.options.length - 1]; - const options = typeof lastOption === "object" ? Object.create(lastOption) : {}; - - // …but max code length… - if (typeof context.options[0] === "number") { - options.code = context.options[0]; - } - - // …and tabWidth can be optionally specified directly as integers. - if (typeof context.options[1] === "number") { - options.tabWidth = context.options[1]; - } - - const maxLength = options.code || 80, - tabWidth = options.tabWidth || 4, - ignoreComments = options.ignoreComments || false, - ignoreStrings = options.ignoreStrings || false, - ignoreTemplateLiterals = options.ignoreTemplateLiterals || false, - ignoreRegExpLiterals = options.ignoreRegExpLiterals || false, - ignoreTrailingComments = options.ignoreTrailingComments || options.ignoreComments || false, - ignoreUrls = options.ignoreUrls || false, - maxCommentLength = options.comments; - let ignorePattern = options.ignorePattern || null; - - if (ignorePattern) { - ignorePattern = new RegExp(ignorePattern); - } - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Tells if a given comment is trailing: it starts on the current line and - * extends to or past the end of the current line. - * @param {string} line The source line we want to check for a trailing comment on - * @param {number} lineNumber The one-indexed line number for line - * @param {ASTNode} comment The comment to inspect - * @returns {boolean} If the comment is trailing on the given line - */ - function isTrailingComment(line, lineNumber, comment) { - return comment && - (comment.loc.start.line === lineNumber && lineNumber <= comment.loc.end.line) && - (comment.loc.end.line > lineNumber || comment.loc.end.column === line.length); - } - - /** - * Tells if a comment encompasses the entire line. - * @param {string} line The source line with a trailing comment - * @param {number} lineNumber The one-indexed line number this is on - * @param {ASTNode} comment The comment to remove - * @returns {boolean} If the comment covers the entire line - */ - function isFullLineComment(line, lineNumber, comment) { - const start = comment.loc.start, - end = comment.loc.end, - isFirstTokenOnLine = !line.slice(0, comment.loc.start.column).trim(); - - return comment && - (start.line < lineNumber || (start.line === lineNumber && isFirstTokenOnLine)) && - (end.line > lineNumber || (end.line === lineNumber && end.column === line.length)); - } - - /** - * Gets the line after the comment and any remaining trailing whitespace is - * stripped. - * @param {string} line The source line with a trailing comment - * @param {ASTNode} comment The comment to remove - * @returns {string} Line without comment and trailing whitepace - */ - function stripTrailingComment(line, comment) { - - // loc.column is zero-indexed - return line.slice(0, comment.loc.start.column).replace(/\s+$/, ""); - } - - /** - * Ensure that an array exists at [key] on `object`, and add `value` to it. - * - * @param {Object} object the object to mutate - * @param {string} key the object's key - * @param {*} value the value to add - * @returns {void} - * @private - */ - function ensureArrayAndPush(object, key, value) { - if (!Array.isArray(object[key])) { - object[key] = []; - } - object[key].push(value); - } - - /** - * Retrieves an array containing all strings (" or ') in the source code. - * - * @returns {ASTNode[]} An array of string nodes. - */ - function getAllStrings() { - return sourceCode.ast.tokens.filter(token => (token.type === "String" || - (token.type === "JSXText" && sourceCode.getNodeByRangeIndex(token.range[0] - 1).type === "JSXAttribute"))); - } - - /** - * Retrieves an array containing all template literals in the source code. - * - * @returns {ASTNode[]} An array of template literal nodes. - */ - function getAllTemplateLiterals() { - return sourceCode.ast.tokens.filter(token => token.type === "Template"); - } - - - /** - * Retrieves an array containing all RegExp literals in the source code. - * - * @returns {ASTNode[]} An array of RegExp literal nodes. - */ - function getAllRegExpLiterals() { - return sourceCode.ast.tokens.filter(token => token.type === "RegularExpression"); - } - - - /** - * A reducer to group an AST node by line number, both start and end. - * - * @param {Object} acc the accumulator - * @param {ASTNode} node the AST node in question - * @returns {Object} the modified accumulator - * @private - */ - function groupByLineNumber(acc, node) { - for (let i = node.loc.start.line; i <= node.loc.end.line; ++i) { - ensureArrayAndPush(acc, i, node); - } - return acc; - } - - /** - * Check the program for max length - * @param {ASTNode} node Node to examine - * @returns {void} - * @private - */ - function checkProgramForMaxLength(node) { - - // split (honors line-ending) - const lines = sourceCode.lines, - - // list of comments to ignore - comments = ignoreComments || maxCommentLength || ignoreTrailingComments ? sourceCode.getAllComments() : []; - - // we iterate over comments in parallel with the lines - let commentsIndex = 0; - - const strings = getAllStrings(); - const stringsByLine = strings.reduce(groupByLineNumber, {}); - - const templateLiterals = getAllTemplateLiterals(); - const templateLiteralsByLine = templateLiterals.reduce(groupByLineNumber, {}); - - const regExpLiterals = getAllRegExpLiterals(); - const regExpLiteralsByLine = regExpLiterals.reduce(groupByLineNumber, {}); - - lines.forEach((line, i) => { - - // i is zero-indexed, line numbers are one-indexed - const lineNumber = i + 1; - - /* - * if we're checking comment length; we need to know whether this - * line is a comment - */ - let lineIsComment = false; - let textToMeasure; - - /* - * We can short-circuit the comment checks if we're already out of - * comments to check. - */ - if (commentsIndex < comments.length) { - let comment = null; - - // iterate over comments until we find one past the current line - do { - comment = comments[++commentsIndex]; - } while (comment && comment.loc.start.line <= lineNumber); - - // and step back by one - comment = comments[--commentsIndex]; - - if (isFullLineComment(line, lineNumber, comment)) { - lineIsComment = true; - textToMeasure = line; - } else if (ignoreTrailingComments && isTrailingComment(line, lineNumber, comment)) { - textToMeasure = stripTrailingComment(line, comment); - } else { - textToMeasure = line; - } - } else { - textToMeasure = line; - } - if (ignorePattern && ignorePattern.test(textToMeasure) || - ignoreUrls && URL_REGEXP.test(textToMeasure) || - ignoreStrings && stringsByLine[lineNumber] || - ignoreTemplateLiterals && templateLiteralsByLine[lineNumber] || - ignoreRegExpLiterals && regExpLiteralsByLine[lineNumber] - ) { - - // ignore this line - return; - } - - const lineLength = computeLineLength(textToMeasure, tabWidth); - const commentLengthApplies = lineIsComment && maxCommentLength; - - if (lineIsComment && ignoreComments) { - return; - } - - if (commentLengthApplies) { - if (lineLength > maxCommentLength) { - context.report({ - node, - loc: { line: lineNumber, column: 0 }, - message: "Line {{lineNumber}} exceeds the maximum comment line length of {{maxCommentLength}}.", - data: { - lineNumber: i + 1, - maxCommentLength - } - }); - } - } else if (lineLength > maxLength) { - context.report({ - node, - loc: { line: lineNumber, column: 0 }, - message: "Line {{lineNumber}} exceeds the maximum line length of {{maxLength}}.", - data: { - lineNumber: i + 1, - maxLength - } - }); - } - }); - } - - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - Program: checkProgramForMaxLength - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/max-lines.js b/node_modules/eslint/lib/rules/max-lines.js deleted file mode 100644 index 9bb4420..0000000 --- a/node_modules/eslint/lib/rules/max-lines.js +++ /dev/null @@ -1,145 +0,0 @@ -/** - * @fileoverview enforce a maximum file length - * @author Alberto Rodríguez - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce a maximum number of lines per file", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/max-lines" - }, - - schema: [ - { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - type: "object", - properties: { - max: { - type: "integer", - minimum: 0 - }, - skipComments: { - type: "boolean" - }, - skipBlankLines: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - const option = context.options[0]; - let max = 300; - - if (typeof option === "object" && option.hasOwnProperty("max") && typeof option.max === "number") { - max = option.max; - } - - if (typeof option === "number") { - max = option; - } - - const skipComments = option && option.skipComments; - const skipBlankLines = option && option.skipBlankLines; - - const sourceCode = context.getSourceCode(); - - /** - * Returns whether or not a token is a comment node type - * @param {Token} token The token to check - * @returns {boolean} True if the token is a comment node - */ - function isCommentNodeType(token) { - return token && (token.type === "Block" || token.type === "Line"); - } - - /** - * Returns the line numbers of a comment that don't have any code on the same line - * @param {Node} comment The comment node to check - * @returns {int[]} The line numbers - */ - function getLinesWithoutCode(comment) { - let start = comment.loc.start.line; - let end = comment.loc.end.line; - - let token; - - token = comment; - do { - token = sourceCode.getTokenBefore(token, { includeComments: true }); - } while (isCommentNodeType(token)); - - if (token && astUtils.isTokenOnSameLine(token, comment)) { - start += 1; - } - - token = comment; - do { - token = sourceCode.getTokenAfter(token, { includeComments: true }); - } while (isCommentNodeType(token)); - - if (token && astUtils.isTokenOnSameLine(comment, token)) { - end -= 1; - } - - if (start <= end) { - return lodash.range(start, end + 1); - } - return []; - } - - return { - "Program:exit"() { - let lines = sourceCode.lines.map((text, i) => ({ lineNumber: i + 1, text })); - - if (skipBlankLines) { - lines = lines.filter(l => l.text.trim() !== ""); - } - - if (skipComments) { - const comments = sourceCode.getAllComments(); - - const commentLines = lodash.flatten(comments.map(comment => getLinesWithoutCode(comment))); - - lines = lines.filter(l => !lodash.includes(commentLines, l.lineNumber)); - } - - if (lines.length > max) { - context.report({ - loc: { line: 1, column: 0 }, - message: "File must be at most {{max}} lines long. It's {{actual}} lines long.", - data: { - max, - actual: lines.length - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/max-nested-callbacks.js b/node_modules/eslint/lib/rules/max-nested-callbacks.js deleted file mode 100644 index 7d7386e..0000000 --- a/node_modules/eslint/lib/rules/max-nested-callbacks.js +++ /dev/null @@ -1,113 +0,0 @@ -/** - * @fileoverview Rule to enforce a maximum number of nested callbacks. - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce a maximum depth that callbacks can be nested", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/max-nested-callbacks" - }, - - schema: [ - { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - type: "object", - properties: { - maximum: { - type: "integer", - minimum: 0 - }, - max: { - type: "integer", - minimum: 0 - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Constants - //-------------------------------------------------------------------------- - const option = context.options[0]; - let THRESHOLD = 10; - - if (typeof option === "object" && option.hasOwnProperty("maximum") && typeof option.maximum === "number") { - THRESHOLD = option.maximum; - } - if (typeof option === "object" && option.hasOwnProperty("max") && typeof option.max === "number") { - THRESHOLD = option.max; - } - if (typeof option === "number") { - THRESHOLD = option; - } - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - const callbackStack = []; - - /** - * Checks a given function node for too many callbacks. - * @param {ASTNode} node The node to check. - * @returns {void} - * @private - */ - function checkFunction(node) { - const parent = node.parent; - - if (parent.type === "CallExpression") { - callbackStack.push(node); - } - - if (callbackStack.length > THRESHOLD) { - const opts = { num: callbackStack.length, max: THRESHOLD }; - - context.report({ node, message: "Too many nested callbacks ({{num}}). Maximum allowed is {{max}}.", data: opts }); - } - } - - /** - * Pops the call stack. - * @returns {void} - * @private - */ - function popStack() { - callbackStack.pop(); - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - ArrowFunctionExpression: checkFunction, - "ArrowFunctionExpression:exit": popStack, - - FunctionExpression: checkFunction, - "FunctionExpression:exit": popStack - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/max-params.js b/node_modules/eslint/lib/rules/max-params.js deleted file mode 100644 index d7c22c5..0000000 --- a/node_modules/eslint/lib/rules/max-params.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @fileoverview Rule to flag when a function has too many parameters - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce a maximum number of parameters in function definitions", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/max-params" - }, - - schema: [ - { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - type: "object", - properties: { - maximum: { - type: "integer", - minimum: 0 - }, - max: { - type: "integer", - minimum: 0 - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - - const option = context.options[0]; - let numParams = 3; - - if (typeof option === "object" && option.hasOwnProperty("maximum") && typeof option.maximum === "number") { - numParams = option.maximum; - } - if (typeof option === "object" && option.hasOwnProperty("max") && typeof option.max === "number") { - numParams = option.max; - } - if (typeof option === "number") { - numParams = option; - } - - /** - * Checks a function to see if it has too many parameters. - * @param {ASTNode} node The node to check. - * @returns {void} - * @private - */ - function checkFunction(node) { - if (node.params.length > numParams) { - context.report({ - node, - message: "{{name}} has too many parameters ({{count}}). Maximum allowed is {{max}}.", - data: { - name: lodash.upperFirst(astUtils.getFunctionNameWithKind(node)), - count: node.params.length, - max: numParams - } - }); - } - } - - return { - FunctionDeclaration: checkFunction, - ArrowFunctionExpression: checkFunction, - FunctionExpression: checkFunction - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/max-statements-per-line.js b/node_modules/eslint/lib/rules/max-statements-per-line.js deleted file mode 100644 index a6776bd..0000000 --- a/node_modules/eslint/lib/rules/max-statements-per-line.js +++ /dev/null @@ -1,195 +0,0 @@ -/** - * @fileoverview Specify the maximum number of statements allowed per line. - * @author Kenneth Williams - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce a maximum number of statements allowed per line", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/max-statements-per-line" - }, - - schema: [ - { - type: "object", - properties: { - max: { - type: "integer", - minimum: 1 - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const sourceCode = context.getSourceCode(), - options = context.options[0] || {}, - maxStatementsPerLine = typeof options.max !== "undefined" ? options.max : 1, - message = "This line has {{numberOfStatementsOnThisLine}} {{statements}}. Maximum allowed is {{maxStatementsPerLine}}."; - - let lastStatementLine = 0, - numberOfStatementsOnThisLine = 0, - firstExtraStatement; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - const SINGLE_CHILD_ALLOWED = /^(?:(?:DoWhile|For|ForIn|ForOf|If|Labeled|While)Statement|Export(?:Default|Named)Declaration)$/; - - /** - * Reports with the first extra statement, and clears it. - * - * @returns {void} - */ - function reportFirstExtraStatementAndClear() { - if (firstExtraStatement) { - context.report({ - node: firstExtraStatement, - message, - data: { - numberOfStatementsOnThisLine, - maxStatementsPerLine, - statements: numberOfStatementsOnThisLine === 1 ? "statement" : "statements" - } - }); - } - firstExtraStatement = null; - } - - /** - * Gets the actual last token of a given node. - * - * @param {ASTNode} node - A node to get. This is a node except EmptyStatement. - * @returns {Token} The actual last token. - */ - function getActualLastToken(node) { - return sourceCode.getLastToken(node, astUtils.isNotSemicolonToken); - } - - /** - * Addresses a given node. - * It updates the state of this rule, then reports the node if the node violated this rule. - * - * @param {ASTNode} node - A node to check. - * @returns {void} - */ - function enterStatement(node) { - const line = node.loc.start.line; - - /* - * Skip to allow non-block statements if this is direct child of control statements. - * `if (a) foo();` is counted as 1. - * But `if (a) foo(); else foo();` should be counted as 2. - */ - if (SINGLE_CHILD_ALLOWED.test(node.parent.type) && - node.parent.alternate !== node - ) { - return; - } - - // Update state. - if (line === lastStatementLine) { - numberOfStatementsOnThisLine += 1; - } else { - reportFirstExtraStatementAndClear(); - numberOfStatementsOnThisLine = 1; - lastStatementLine = line; - } - - // Reports if the node violated this rule. - if (numberOfStatementsOnThisLine === maxStatementsPerLine + 1) { - firstExtraStatement = firstExtraStatement || node; - } - } - - /** - * Updates the state of this rule with the end line of leaving node to check with the next statement. - * - * @param {ASTNode} node - A node to check. - * @returns {void} - */ - function leaveStatement(node) { - const line = getActualLastToken(node).loc.end.line; - - // Update state. - if (line !== lastStatementLine) { - reportFirstExtraStatementAndClear(); - numberOfStatementsOnThisLine = 1; - lastStatementLine = line; - } - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - BreakStatement: enterStatement, - ClassDeclaration: enterStatement, - ContinueStatement: enterStatement, - DebuggerStatement: enterStatement, - DoWhileStatement: enterStatement, - ExpressionStatement: enterStatement, - ForInStatement: enterStatement, - ForOfStatement: enterStatement, - ForStatement: enterStatement, - FunctionDeclaration: enterStatement, - IfStatement: enterStatement, - ImportDeclaration: enterStatement, - LabeledStatement: enterStatement, - ReturnStatement: enterStatement, - SwitchStatement: enterStatement, - ThrowStatement: enterStatement, - TryStatement: enterStatement, - VariableDeclaration: enterStatement, - WhileStatement: enterStatement, - WithStatement: enterStatement, - ExportNamedDeclaration: enterStatement, - ExportDefaultDeclaration: enterStatement, - ExportAllDeclaration: enterStatement, - - "BreakStatement:exit": leaveStatement, - "ClassDeclaration:exit": leaveStatement, - "ContinueStatement:exit": leaveStatement, - "DebuggerStatement:exit": leaveStatement, - "DoWhileStatement:exit": leaveStatement, - "ExpressionStatement:exit": leaveStatement, - "ForInStatement:exit": leaveStatement, - "ForOfStatement:exit": leaveStatement, - "ForStatement:exit": leaveStatement, - "FunctionDeclaration:exit": leaveStatement, - "IfStatement:exit": leaveStatement, - "ImportDeclaration:exit": leaveStatement, - "LabeledStatement:exit": leaveStatement, - "ReturnStatement:exit": leaveStatement, - "SwitchStatement:exit": leaveStatement, - "ThrowStatement:exit": leaveStatement, - "TryStatement:exit": leaveStatement, - "VariableDeclaration:exit": leaveStatement, - "WhileStatement:exit": leaveStatement, - "WithStatement:exit": leaveStatement, - "ExportNamedDeclaration:exit": leaveStatement, - "ExportDefaultDeclaration:exit": leaveStatement, - "ExportAllDeclaration:exit": leaveStatement, - "Program:exit": reportFirstExtraStatementAndClear - }; - } -}; diff --git a/node_modules/eslint/lib/rules/max-statements.js b/node_modules/eslint/lib/rules/max-statements.js deleted file mode 100644 index faa0d5d..0000000 --- a/node_modules/eslint/lib/rules/max-statements.js +++ /dev/null @@ -1,171 +0,0 @@ -/** - * @fileoverview A rule to set the maximum number of statements in a function. - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce a maximum number of statements allowed in function blocks", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/max-statements" - }, - - schema: [ - { - oneOf: [ - { - type: "integer", - minimum: 0 - }, - { - type: "object", - properties: { - maximum: { - type: "integer", - minimum: 0 - }, - max: { - type: "integer", - minimum: 0 - } - }, - additionalProperties: false - } - ] - }, - { - type: "object", - properties: { - ignoreTopLevelFunctions: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - const functionStack = [], - option = context.options[0], - ignoreTopLevelFunctions = context.options[1] && context.options[1].ignoreTopLevelFunctions || false, - topLevelFunctions = []; - let maxStatements = 10; - - if (typeof option === "object" && option.hasOwnProperty("maximum") && typeof option.maximum === "number") { - maxStatements = option.maximum; - } - if (typeof option === "object" && option.hasOwnProperty("max") && typeof option.max === "number") { - maxStatements = option.max; - } - if (typeof option === "number") { - maxStatements = option; - } - - /** - * Reports a node if it has too many statements - * @param {ASTNode} node node to evaluate - * @param {int} count Number of statements in node - * @param {int} max Maximum number of statements allowed - * @returns {void} - * @private - */ - function reportIfTooManyStatements(node, count, max) { - if (count > max) { - const name = lodash.upperFirst(astUtils.getFunctionNameWithKind(node)); - - context.report({ - node, - message: "{{name}} has too many statements ({{count}}). Maximum allowed is {{max}}.", - data: { name, count, max } - }); - } - } - - /** - * When parsing a new function, store it in our function stack - * @returns {void} - * @private - */ - function startFunction() { - functionStack.push(0); - } - - /** - * Evaluate the node at the end of function - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function endFunction(node) { - const count = functionStack.pop(); - - if (ignoreTopLevelFunctions && functionStack.length === 0) { - topLevelFunctions.push({ node, count }); - } else { - reportIfTooManyStatements(node, count, maxStatements); - } - } - - /** - * Increment the count of the functions - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function countStatements(node) { - functionStack[functionStack.length - 1] += node.body.length; - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - FunctionDeclaration: startFunction, - FunctionExpression: startFunction, - ArrowFunctionExpression: startFunction, - - BlockStatement: countStatements, - - "FunctionDeclaration:exit": endFunction, - "FunctionExpression:exit": endFunction, - "ArrowFunctionExpression:exit": endFunction, - - "Program:exit"() { - if (topLevelFunctions.length === 1) { - return; - } - - topLevelFunctions.forEach(element => { - const count = element.count; - const node = element.node; - - reportIfTooManyStatements(node, count, maxStatements); - }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/multiline-comment-style.js b/node_modules/eslint/lib/rules/multiline-comment-style.js deleted file mode 100644 index 4da9a61..0000000 --- a/node_modules/eslint/lib/rules/multiline-comment-style.js +++ /dev/null @@ -1,295 +0,0 @@ -/** - * @fileoverview enforce a particular style for multiline comments - * @author Teddy Katz - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce a particular style for multiline comments", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/multiline-comment-style" - }, - fixable: "whitespace", - schema: [{ enum: ["starred-block", "separate-lines", "bare-block"] }] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const option = context.options[0] || "starred-block"; - - const EXPECTED_BLOCK_ERROR = "Expected a block comment instead of consecutive line comments."; - const START_NEWLINE_ERROR = "Expected a linebreak after '/*'."; - const END_NEWLINE_ERROR = "Expected a linebreak before '*/'."; - const MISSING_STAR_ERROR = "Expected a '*' at the start of this line."; - const ALIGNMENT_ERROR = "Expected this line to be aligned with the start of the comment."; - const EXPECTED_LINES_ERROR = "Expected multiple line comments instead of a block comment."; - - //---------------------------------------------------------------------- - // Helpers - //---------------------------------------------------------------------- - - /** - * Gets a list of comment lines in a group - * @param {Token[]} commentGroup A group of comments, containing either multiple line comments or a single block comment - * @returns {string[]} A list of comment lines - */ - function getCommentLines(commentGroup) { - if (commentGroup[0].type === "Line") { - return commentGroup.map(comment => comment.value); - } - return commentGroup[0].value - .split(astUtils.LINEBREAK_MATCHER) - .map(line => line.replace(/^\s*\*?/, "")); - } - - /** - * Converts a comment into starred-block form - * @param {Token} firstComment The first comment of the group being converted - * @param {string[]} commentLinesList A list of lines to appear in the new starred-block comment - * @returns {string} A representation of the comment value in starred-block form, excluding start and end markers - */ - function convertToStarredBlock(firstComment, commentLinesList) { - const initialOffset = sourceCode.text.slice(firstComment.range[0] - firstComment.loc.start.column, firstComment.range[0]); - const starredLines = commentLinesList.map(line => `${initialOffset} *${line}`); - - return `\n${starredLines.join("\n")}\n${initialOffset} `; - } - - /** - * Converts a comment into separate-line form - * @param {Token} firstComment The first comment of the group being converted - * @param {string[]} commentLinesList A list of lines to appear in the new starred-block comment - * @returns {string} A representation of the comment value in separate-line form - */ - function convertToSeparateLines(firstComment, commentLinesList) { - const initialOffset = sourceCode.text.slice(firstComment.range[0] - firstComment.loc.start.column, firstComment.range[0]); - const separateLines = commentLinesList.map(line => `// ${line.trim()}`); - - return separateLines.join(`\n${initialOffset}`); - } - - /** - * Converts a comment into bare-block form - * @param {Token} firstComment The first comment of the group being converted - * @param {string[]} commentLinesList A list of lines to appear in the new starred-block comment - * @returns {string} A representation of the comment value in bare-block form - */ - function convertToBlock(firstComment, commentLinesList) { - const initialOffset = sourceCode.text.slice(firstComment.range[0] - firstComment.loc.start.column, firstComment.range[0]); - const blockLines = commentLinesList.map(line => line.trim()); - - return `/* ${blockLines.join(`\n${initialOffset} `)} */`; - } - - /** - * Check a comment is JSDoc form - * @param {Token[]} commentGroup A group of comments, containing either multiple line comments or a single block comment - * @returns {boolean} if commentGroup is JSDoc form, return true - */ - function isJSDoc(commentGroup) { - const lines = commentGroup[0].value.split(astUtils.LINEBREAK_MATCHER); - - return commentGroup[0].type === "Block" && - /^\*\s*$/.test(lines[0]) && - lines.slice(1, -1).every(line => /^\s* /.test(line)) && - /^\s*$/.test(lines[lines.length - 1]); - } - - /** - * Each method checks a group of comments to see if it's valid according to the given option. - * @param {Token[]} commentGroup A list of comments that appear together. This will either contain a single - * block comment or multiple line comments. - * @returns {void} - */ - const commentGroupCheckers = { - "starred-block"(commentGroup) { - const commentLines = getCommentLines(commentGroup); - - if (commentLines.some(value => value.includes("*/"))) { - return; - } - - if (commentGroup.length > 1) { - context.report({ - loc: { - start: commentGroup[0].loc.start, - end: commentGroup[commentGroup.length - 1].loc.end - }, - message: EXPECTED_BLOCK_ERROR, - fix(fixer) { - const range = [commentGroup[0].range[0], commentGroup[commentGroup.length - 1].range[1]]; - const starredBlock = `/*${convertToStarredBlock(commentGroup[0], commentLines)}*/`; - - return commentLines.some(value => value.startsWith("/")) - ? null - : fixer.replaceTextRange(range, starredBlock); - } - }); - } else { - const block = commentGroup[0]; - const lines = block.value.split(astUtils.LINEBREAK_MATCHER); - const expectedLinePrefix = `${sourceCode.text.slice(block.range[0] - block.loc.start.column, block.range[0])} *`; - - if (!/^\*?\s*$/.test(lines[0])) { - const start = block.value.startsWith("*") ? block.range[0] + 1 : block.range[0]; - - context.report({ - loc: { - start: block.loc.start, - end: { line: block.loc.start.line, column: block.loc.start.column + 2 } - }, - message: START_NEWLINE_ERROR, - fix: fixer => fixer.insertTextAfterRange([start, start + 2], `\n${expectedLinePrefix}`) - }); - } - - if (!/^\s*$/.test(lines[lines.length - 1])) { - context.report({ - loc: { - start: { line: block.loc.end.line, column: block.loc.end.column - 2 }, - end: block.loc.end - }, - message: END_NEWLINE_ERROR, - fix: fixer => fixer.replaceTextRange([block.range[1] - 2, block.range[1]], `\n${expectedLinePrefix}/`) - }); - } - - for (let lineNumber = block.loc.start.line + 1; lineNumber <= block.loc.end.line; lineNumber++) { - const lineText = sourceCode.lines[lineNumber - 1]; - - if (!lineText.startsWith(expectedLinePrefix)) { - context.report({ - loc: { - start: { line: lineNumber, column: 0 }, - end: { line: lineNumber, column: sourceCode.lines[lineNumber - 1].length } - }, - message: /^\s*\*/.test(lineText) - ? ALIGNMENT_ERROR - : MISSING_STAR_ERROR, - fix(fixer) { - const lineStartIndex = sourceCode.getIndexFromLoc({ line: lineNumber, column: 0 }); - const linePrefixLength = lineText.match(/^\s*\*? ?/)[0].length; - const commentStartIndex = lineStartIndex + linePrefixLength; - - const replacementText = lineNumber === block.loc.end.line || lineText.length === linePrefixLength - ? expectedLinePrefix - : `${expectedLinePrefix} `; - - return fixer.replaceTextRange([lineStartIndex, commentStartIndex], replacementText); - } - }); - } - } - } - }, - "separate-lines"(commentGroup) { - if (!isJSDoc(commentGroup) && commentGroup[0].type === "Block") { - const commentLines = getCommentLines(commentGroup); - const block = commentGroup[0]; - const tokenAfter = sourceCode.getTokenAfter(block, { includeComments: true }); - - if (tokenAfter && block.loc.end.line === tokenAfter.loc.start.line) { - return; - } - - context.report({ - loc: { - start: block.loc.start, - end: { line: block.loc.start.line, column: block.loc.start.column + 2 } - }, - message: EXPECTED_LINES_ERROR, - fix(fixer) { - return fixer.replaceText(block, convertToSeparateLines(block, commentLines.filter(line => line))); - } - }); - } - }, - "bare-block"(commentGroup) { - if (!isJSDoc(commentGroup)) { - const commentLines = getCommentLines(commentGroup); - - // disallows consecutive line comments in favor of using a block comment. - if (commentGroup[0].type === "Line" && commentLines.length > 1 && - !commentLines.some(value => value.includes("*/"))) { - context.report({ - loc: { - start: commentGroup[0].loc.start, - end: commentGroup[commentGroup.length - 1].loc.end - }, - message: EXPECTED_BLOCK_ERROR, - fix(fixer) { - const range = [commentGroup[0].range[0], commentGroup[commentGroup.length - 1].range[1]]; - const block = convertToBlock(commentGroup[0], commentLines.filter(line => line)); - - return fixer.replaceTextRange(range, block); - } - }); - } - - // prohibits block comments from having a * at the beginning of each line. - if (commentGroup[0].type === "Block") { - const block = commentGroup[0]; - const lines = block.value.split(astUtils.LINEBREAK_MATCHER).filter(line => line.trim()); - - if (lines.length > 0 && lines.every(line => /^\s*\*/.test(line))) { - context.report({ - loc: { - start: block.loc.start, - end: { line: block.loc.start.line, column: block.loc.start.column + 2 } - }, - message: EXPECTED_BLOCK_ERROR, - fix(fixer) { - return fixer.replaceText(block, convertToBlock(block, commentLines.filter(line => line))); - } - }); - } - } - } - } - }; - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- - - return { - Program() { - return sourceCode.getAllComments() - .filter(comment => comment.type !== "Shebang") - .filter(comment => !astUtils.COMMENTS_IGNORE_PATTERN.test(comment.value)) - .filter(comment => { - const tokenBefore = sourceCode.getTokenBefore(comment, { includeComments: true }); - - return !tokenBefore || tokenBefore.loc.end.line < comment.loc.start.line; - }) - .reduce((commentGroups, comment, index, commentList) => { - const tokenBefore = sourceCode.getTokenBefore(comment, { includeComments: true }); - - if ( - comment.type === "Line" && - index && commentList[index - 1].type === "Line" && - tokenBefore && tokenBefore.loc.end.line === comment.loc.start.line - 1 && - tokenBefore === commentList[index - 1] - ) { - commentGroups[commentGroups.length - 1].push(comment); - } else { - commentGroups.push([comment]); - } - - return commentGroups; - }, []) - .filter(commentGroup => !(commentGroup.length === 1 && commentGroup[0].loc.start.line === commentGroup[0].loc.end.line)) - .forEach(commentGroupCheckers[option]); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/multiline-ternary.js b/node_modules/eslint/lib/rules/multiline-ternary.js deleted file mode 100644 index 10cf269..0000000 --- a/node_modules/eslint/lib/rules/multiline-ternary.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * @fileoverview Enforce newlines between operands of ternary expressions - * @author Kai Cataldo - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce newlines between operands of ternary expressions", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/multiline-ternary" - }, - schema: [ - { - enum: ["always", "always-multiline", "never"] - } - ] - }, - - create(context) { - const option = context.options[0]; - const multiline = option !== "never"; - const allowSingleLine = option === "always-multiline"; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Tests whether node is preceded by supplied tokens - * @param {ASTNode} node - node to check - * @param {ASTNode} parentNode - parent of node to report - * @param {boolean} expected - whether newline was expected or not - * @returns {void} - * @private - */ - function reportError(node, parentNode, expected) { - context.report({ - node, - message: "{{expected}} newline between {{typeOfError}} of ternary expression.", - data: { - expected: expected ? "Expected" : "Unexpected", - typeOfError: node === parentNode.test ? "test and consequent" : "consequent and alternate" - } - }); - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - ConditionalExpression(node) { - const areTestAndConsequentOnSameLine = astUtils.isTokenOnSameLine(node.test, node.consequent); - const areConsequentAndAlternateOnSameLine = astUtils.isTokenOnSameLine(node.consequent, node.alternate); - - if (!multiline) { - if (!areTestAndConsequentOnSameLine) { - reportError(node.test, node, false); - } - - if (!areConsequentAndAlternateOnSameLine) { - reportError(node.consequent, node, false); - } - } else { - if (allowSingleLine && node.loc.start.line === node.loc.end.line) { - return; - } - - if (areTestAndConsequentOnSameLine) { - reportError(node.test, node, true); - } - - if (areConsequentAndAlternateOnSameLine) { - reportError(node.consequent, node, true); - } - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/new-cap.js b/node_modules/eslint/lib/rules/new-cap.js deleted file mode 100644 index cc33e3b..0000000 --- a/node_modules/eslint/lib/rules/new-cap.js +++ /dev/null @@ -1,273 +0,0 @@ -/** - * @fileoverview Rule to flag use of constructors without capital letters - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const CAPS_ALLOWED = [ - "Array", - "Boolean", - "Date", - "Error", - "Function", - "Number", - "Object", - "RegExp", - "String", - "Symbol" -]; - -/** - * Ensure that if the key is provided, it must be an array. - * @param {Object} obj Object to check with `key`. - * @param {string} key Object key to check on `obj`. - * @param {*} fallback If obj[key] is not present, this will be returned. - * @returns {string[]} Returns obj[key] if it's an Array, otherwise `fallback` - */ -function checkArray(obj, key, fallback) { - - /* istanbul ignore if */ - if (Object.prototype.hasOwnProperty.call(obj, key) && !Array.isArray(obj[key])) { - throw new TypeError(`${key}, if provided, must be an Array`); - } - return obj[key] || fallback; -} - -/** - * A reducer function to invert an array to an Object mapping the string form of the key, to `true`. - * @param {Object} map Accumulator object for the reduce. - * @param {string} key Object key to set to `true`. - * @returns {Object} Returns the updated Object for further reduction. - */ -function invert(map, key) { - map[key] = true; - return map; -} - -/** - * Creates an object with the cap is new exceptions as its keys and true as their values. - * @param {Object} config Rule configuration - * @returns {Object} Object with cap is new exceptions. - */ -function calculateCapIsNewExceptions(config) { - let capIsNewExceptions = checkArray(config, "capIsNewExceptions", CAPS_ALLOWED); - - if (capIsNewExceptions !== CAPS_ALLOWED) { - capIsNewExceptions = capIsNewExceptions.concat(CAPS_ALLOWED); - } - - return capIsNewExceptions.reduce(invert, {}); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require constructor names to begin with a capital letter", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/new-cap" - }, - - schema: [ - { - type: "object", - properties: { - newIsCap: { - type: "boolean" - }, - capIsNew: { - type: "boolean" - }, - newIsCapExceptions: { - type: "array", - items: { - type: "string" - } - }, - newIsCapExceptionPattern: { - type: "string" - }, - capIsNewExceptions: { - type: "array", - items: { - type: "string" - } - }, - capIsNewExceptionPattern: { - type: "string" - }, - properties: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const config = context.options[0] ? Object.assign({}, context.options[0]) : {}; - - config.newIsCap = config.newIsCap !== false; - config.capIsNew = config.capIsNew !== false; - const skipProperties = config.properties === false; - - const newIsCapExceptions = checkArray(config, "newIsCapExceptions", []).reduce(invert, {}); - const newIsCapExceptionPattern = config.newIsCapExceptionPattern ? new RegExp(config.newIsCapExceptionPattern) : null; - - const capIsNewExceptions = calculateCapIsNewExceptions(config); - const capIsNewExceptionPattern = config.capIsNewExceptionPattern ? new RegExp(config.capIsNewExceptionPattern) : null; - - const listeners = {}; - - const sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Get exact callee name from expression - * @param {ASTNode} node CallExpression or NewExpression node - * @returns {string} name - */ - function extractNameFromExpression(node) { - - let name = ""; - - if (node.callee.type === "MemberExpression") { - const property = node.callee.property; - - if (property.type === "Literal" && (typeof property.value === "string")) { - name = property.value; - } else if (property.type === "Identifier" && !node.callee.computed) { - name = property.name; - } - } else { - name = node.callee.name; - } - return name; - } - - /** - * Returns the capitalization state of the string - - * Whether the first character is uppercase, lowercase, or non-alphabetic - * @param {string} str String - * @returns {string} capitalization state: "non-alpha", "lower", or "upper" - */ - function getCap(str) { - const firstChar = str.charAt(0); - - const firstCharLower = firstChar.toLowerCase(); - const firstCharUpper = firstChar.toUpperCase(); - - if (firstCharLower === firstCharUpper) { - - // char has no uppercase variant, so it's non-alphabetic - return "non-alpha"; - } - if (firstChar === firstCharLower) { - return "lower"; - } - return "upper"; - - } - - /** - * Check if capitalization is allowed for a CallExpression - * @param {Object} allowedMap Object mapping calleeName to a Boolean - * @param {ASTNode} node CallExpression node - * @param {string} calleeName Capitalized callee name from a CallExpression - * @param {Object} pattern RegExp object from options pattern - * @returns {boolean} Returns true if the callee may be capitalized - */ - function isCapAllowed(allowedMap, node, calleeName, pattern) { - const sourceText = sourceCode.getText(node.callee); - - if (allowedMap[calleeName] || allowedMap[sourceText]) { - return true; - } - - if (pattern && pattern.test(sourceText)) { - return true; - } - - if (calleeName === "UTC" && node.callee.type === "MemberExpression") { - - // allow if callee is Date.UTC - return node.callee.object.type === "Identifier" && - node.callee.object.name === "Date"; - } - - return skipProperties && node.callee.type === "MemberExpression"; - } - - /** - * Reports the given message for the given node. The location will be the start of the property or the callee. - * @param {ASTNode} node CallExpression or NewExpression node. - * @param {string} message The message to report. - * @returns {void} - */ - function report(node, message) { - let callee = node.callee; - - if (callee.type === "MemberExpression") { - callee = callee.property; - } - - context.report({ node, loc: callee.loc.start, message }); - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - if (config.newIsCap) { - listeners.NewExpression = function(node) { - - const constructorName = extractNameFromExpression(node); - - if (constructorName) { - const capitalization = getCap(constructorName); - const isAllowed = capitalization !== "lower" || isCapAllowed(newIsCapExceptions, node, constructorName, newIsCapExceptionPattern); - - if (!isAllowed) { - report(node, "A constructor name should not start with a lowercase letter."); - } - } - }; - } - - if (config.capIsNew) { - listeners.CallExpression = function(node) { - - const calleeName = extractNameFromExpression(node); - - if (calleeName) { - const capitalization = getCap(calleeName); - const isAllowed = capitalization !== "upper" || isCapAllowed(capIsNewExceptions, node, calleeName, capIsNewExceptionPattern); - - if (!isAllowed) { - report(node, "A function with a name starting with an uppercase letter should only be used as a constructor."); - } - } - }; - } - - return listeners; - } -}; diff --git a/node_modules/eslint/lib/rules/new-parens.js b/node_modules/eslint/lib/rules/new-parens.js deleted file mode 100644 index abf2e03..0000000 --- a/node_modules/eslint/lib/rules/new-parens.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @fileoverview Rule to flag when using constructor without parentheses - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require parentheses when invoking a constructor with no arguments", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/new-parens" - }, - - schema: [], - - fixable: "code" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - return { - NewExpression(node) { - if (node.arguments.length !== 0) { - return; // shortcut: if there are arguments, there have to be parens - } - - const lastToken = sourceCode.getLastToken(node); - const hasLastParen = lastToken && astUtils.isClosingParenToken(lastToken); - const hasParens = hasLastParen && astUtils.isOpeningParenToken(sourceCode.getTokenBefore(lastToken)); - - if (!hasParens) { - context.report({ - node, - message: "Missing '()' invoking a constructor.", - fix: fixer => fixer.insertTextAfter(node, "()") - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/newline-after-var.js b/node_modules/eslint/lib/rules/newline-after-var.js deleted file mode 100644 index b11d9d9..0000000 --- a/node_modules/eslint/lib/rules/newline-after-var.js +++ /dev/null @@ -1,255 +0,0 @@ -/** - * @fileoverview Rule to check empty newline after "var" statement - * @author Gopal Venkatesan - * @deprecated - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow an empty line after variable declarations", - category: "Stylistic Issues", - recommended: false, - replacedBy: ["padding-line-between-statements"], - url: "https://eslint.org/docs/rules/newline-after-var" - }, - - schema: [ - { - enum: ["never", "always"] - } - ], - - fixable: "whitespace", - - deprecated: true - }, - - create(context) { - - const ALWAYS_MESSAGE = "Expected blank line after variable declarations.", - NEVER_MESSAGE = "Unexpected blank line after variable declarations."; - - const sourceCode = context.getSourceCode(); - - // Default `mode` to "always". - const mode = context.options[0] === "never" ? "never" : "always"; - - // Cache starting and ending line numbers of comments for faster lookup - const commentEndLine = sourceCode.getAllComments().reduce((result, token) => { - result[token.loc.start.line] = token.loc.end.line; - return result; - }, {}); - - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Gets a token from the given node to compare line to the next statement. - * - * In general, the token is the last token of the node. However, the token is the second last token if the following conditions satisfy. - * - * - The last token is semicolon. - * - The semicolon is on a different line from the previous token of the semicolon. - * - * This behavior would address semicolon-less style code. e.g.: - * - * var foo = 1 - * - * ;(a || b).doSomething() - * - * @param {ASTNode} node - The node to get. - * @returns {Token} The token to compare line to the next statement. - */ - function getLastToken(node) { - const lastToken = sourceCode.getLastToken(node); - - if (lastToken.type === "Punctuator" && lastToken.value === ";") { - const prevToken = sourceCode.getTokenBefore(lastToken); - - if (prevToken.loc.end.line !== lastToken.loc.start.line) { - return prevToken; - } - } - - return lastToken; - } - - /** - * Determine if provided keyword is a variable declaration - * @private - * @param {string} keyword - keyword to test - * @returns {boolean} True if `keyword` is a type of var - */ - function isVar(keyword) { - return keyword === "var" || keyword === "let" || keyword === "const"; - } - - /** - * Determine if provided keyword is a variant of for specifiers - * @private - * @param {string} keyword - keyword to test - * @returns {boolean} True if `keyword` is a variant of for specifier - */ - function isForTypeSpecifier(keyword) { - return keyword === "ForStatement" || keyword === "ForInStatement" || keyword === "ForOfStatement"; - } - - /** - * Determine if provided keyword is an export specifiers - * @private - * @param {string} nodeType - nodeType to test - * @returns {boolean} True if `nodeType` is an export specifier - */ - function isExportSpecifier(nodeType) { - return nodeType === "ExportNamedDeclaration" || nodeType === "ExportSpecifier" || - nodeType === "ExportDefaultDeclaration" || nodeType === "ExportAllDeclaration"; - } - - /** - * Determine if provided node is the last of their parent block. - * @private - * @param {ASTNode} node - node to test - * @returns {boolean} True if `node` is last of their parent block. - */ - function isLastNode(node) { - const token = sourceCode.getTokenAfter(node); - - return !token || (token.type === "Punctuator" && token.value === "}"); - } - - /** - * Gets the last line of a group of consecutive comments - * @param {number} commentStartLine The starting line of the group - * @returns {number} The number of the last comment line of the group - */ - function getLastCommentLineOfBlock(commentStartLine) { - const currentCommentEnd = commentEndLine[commentStartLine]; - - return commentEndLine[currentCommentEnd + 1] ? getLastCommentLineOfBlock(currentCommentEnd + 1) : currentCommentEnd; - } - - /** - * Determine if a token starts more than one line after a comment ends - * @param {token} token The token being checked - * @param {integer} commentStartLine The line number on which the comment starts - * @returns {boolean} True if `token` does not start immediately after a comment - */ - function hasBlankLineAfterComment(token, commentStartLine) { - return token.loc.start.line > getLastCommentLineOfBlock(commentStartLine) + 1; - } - - /** - * Checks that a blank line exists after a variable declaration when mode is - * set to "always", or checks that there is no blank line when mode is set - * to "never" - * @private - * @param {ASTNode} node - `VariableDeclaration` node to test - * @returns {void} - */ - function checkForBlankLine(node) { - - /* - * lastToken is the last token on the node's line. It will usually also be the last token of the node, but it will - * sometimes be second-last if there is a semicolon on a different line. - */ - const lastToken = getLastToken(node), - - /* - * If lastToken is the last token of the node, nextToken should be the token after the node. Otherwise, nextToken - * is the last token of the node. - */ - nextToken = lastToken === sourceCode.getLastToken(node) ? sourceCode.getTokenAfter(node) : sourceCode.getLastToken(node), - nextLineNum = lastToken.loc.end.line + 1; - - // Ignore if there is no following statement - if (!nextToken) { - return; - } - - // Ignore if parent of node is a for variant - if (isForTypeSpecifier(node.parent.type)) { - return; - } - - // Ignore if parent of node is an export specifier - if (isExportSpecifier(node.parent.type)) { - return; - } - - /* - * Some coding styles use multiple `var` statements, so do nothing if - * the next token is a `var` statement. - */ - if (nextToken.type === "Keyword" && isVar(nextToken.value)) { - return; - } - - // Ignore if it is last statement in a block - if (isLastNode(node)) { - return; - } - - // Next statement is not a `var`... - const noNextLineToken = nextToken.loc.start.line > nextLineNum; - const hasNextLineComment = (typeof commentEndLine[nextLineNum] !== "undefined"); - - if (mode === "never" && noNextLineToken && !hasNextLineComment) { - context.report({ - node, - message: NEVER_MESSAGE, - data: { identifier: node.name }, - fix(fixer) { - const linesBetween = sourceCode.getText().slice(lastToken.range[1], nextToken.range[0]).split(astUtils.LINEBREAK_MATCHER); - - return fixer.replaceTextRange([lastToken.range[1], nextToken.range[0]], `${linesBetween.slice(0, -1).join("")}\n${linesBetween[linesBetween.length - 1]}`); - } - }); - } - - // Token on the next line, or comment without blank line - if ( - mode === "always" && ( - !noNextLineToken || - hasNextLineComment && !hasBlankLineAfterComment(nextToken, nextLineNum) - ) - ) { - context.report({ - node, - message: ALWAYS_MESSAGE, - data: { identifier: node.name }, - fix(fixer) { - if ((noNextLineToken ? getLastCommentLineOfBlock(nextLineNum) : lastToken.loc.end.line) === nextToken.loc.start.line) { - return fixer.insertTextBefore(nextToken, "\n\n"); - } - - return fixer.insertTextBeforeRange([nextToken.range[0] - nextToken.loc.start.column, nextToken.range[1]], "\n"); - } - }); - } - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - VariableDeclaration: checkForBlankLine - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/newline-before-return.js b/node_modules/eslint/lib/rules/newline-before-return.js deleted file mode 100644 index 5bc1f70..0000000 --- a/node_modules/eslint/lib/rules/newline-before-return.js +++ /dev/null @@ -1,211 +0,0 @@ -/** - * @fileoverview Rule to require newlines before `return` statement - * @author Kai Cataldo - * @deprecated - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require an empty line before `return` statements", - category: "Stylistic Issues", - recommended: false, - replacedBy: ["padding-line-between-statements"], - url: "https://eslint.org/docs/rules/newline-before-return" - }, - fixable: "whitespace", - schema: [], - deprecated: true - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Tests whether node is preceded by supplied tokens - * @param {ASTNode} node - node to check - * @param {array} testTokens - array of tokens to test against - * @returns {boolean} Whether or not the node is preceded by one of the supplied tokens - * @private - */ - function isPrecededByTokens(node, testTokens) { - const tokenBefore = sourceCode.getTokenBefore(node); - - return testTokens.some(token => tokenBefore.value === token); - } - - /** - * Checks whether node is the first node after statement or in block - * @param {ASTNode} node - node to check - * @returns {boolean} Whether or not the node is the first node after statement or in block - * @private - */ - function isFirstNode(node) { - const parentType = node.parent.type; - - if (node.parent.body) { - return Array.isArray(node.parent.body) - ? node.parent.body[0] === node - : node.parent.body === node; - } - - if (parentType === "IfStatement") { - return isPrecededByTokens(node, ["else", ")"]); - } - if (parentType === "DoWhileStatement") { - return isPrecededByTokens(node, ["do"]); - } - if (parentType === "SwitchCase") { - return isPrecededByTokens(node, [":"]); - } - return isPrecededByTokens(node, [")"]); - - } - - /** - * Returns the number of lines of comments that precede the node - * @param {ASTNode} node - node to check for overlapping comments - * @param {number} lineNumTokenBefore - line number of previous token, to check for overlapping comments - * @returns {number} Number of lines of comments that precede the node - * @private - */ - function calcCommentLines(node, lineNumTokenBefore) { - const comments = sourceCode.getCommentsBefore(node); - let numLinesComments = 0; - - if (!comments.length) { - return numLinesComments; - } - - comments.forEach(comment => { - numLinesComments++; - - if (comment.type === "Block") { - numLinesComments += comment.loc.end.line - comment.loc.start.line; - } - - // avoid counting lines with inline comments twice - if (comment.loc.start.line === lineNumTokenBefore) { - numLinesComments--; - } - - if (comment.loc.end.line === node.loc.start.line) { - numLinesComments--; - } - }); - - return numLinesComments; - } - - /** - * Returns the line number of the token before the node that is passed in as an argument - * @param {ASTNode} node - The node to use as the start of the calculation - * @returns {number} Line number of the token before `node` - * @private - */ - function getLineNumberOfTokenBefore(node) { - const tokenBefore = sourceCode.getTokenBefore(node); - let lineNumTokenBefore; - - /** - * Global return (at the beginning of a script) is a special case. - * If there is no token before `return`, then we expect no line - * break before the return. Comments are allowed to occupy lines - * before the global return, just no blank lines. - * Setting lineNumTokenBefore to zero in that case results in the - * desired behavior. - */ - if (tokenBefore) { - lineNumTokenBefore = tokenBefore.loc.end.line; - } else { - lineNumTokenBefore = 0; // global return at beginning of script - } - - return lineNumTokenBefore; - } - - /** - * Checks whether node is preceded by a newline - * @param {ASTNode} node - node to check - * @returns {boolean} Whether or not the node is preceded by a newline - * @private - */ - function hasNewlineBefore(node) { - const lineNumNode = node.loc.start.line; - const lineNumTokenBefore = getLineNumberOfTokenBefore(node); - const commentLines = calcCommentLines(node, lineNumTokenBefore); - - return (lineNumNode - lineNumTokenBefore - commentLines) > 1; - } - - /** - * Checks whether it is safe to apply a fix to a given return statement. - * - * The fix is not considered safe if the given return statement has leading comments, - * as we cannot safely determine if the newline should be added before or after the comments. - * For more information, see: https://github.com/eslint/eslint/issues/5958#issuecomment-222767211 - * - * @param {ASTNode} node - The return statement node to check. - * @returns {boolean} `true` if it can fix the node. - * @private - */ - function canFix(node) { - const leadingComments = sourceCode.getCommentsBefore(node); - const lastLeadingComment = leadingComments[leadingComments.length - 1]; - const tokenBefore = sourceCode.getTokenBefore(node); - - if (leadingComments.length === 0) { - return true; - } - - /* - * if the last leading comment ends in the same line as the previous token and - * does not share a line with the `return` node, we can consider it safe to fix. - * Example: - * function a() { - * var b; //comment - * return; - * } - */ - if (lastLeadingComment.loc.end.line === tokenBefore.loc.end.line && - lastLeadingComment.loc.end.line !== node.loc.start.line) { - return true; - } - - return false; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - ReturnStatement(node) { - if (!isFirstNode(node) && !hasNewlineBefore(node)) { - context.report({ - node, - message: "Expected newline before return statement.", - fix(fixer) { - if (canFix(node)) { - const tokenBefore = sourceCode.getTokenBefore(node); - const newlines = node.loc.start.line === tokenBefore.loc.end.line ? "\n\n" : "\n"; - - return fixer.insertTextBefore(node, newlines); - } - return null; - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/newline-per-chained-call.js b/node_modules/eslint/lib/rules/newline-per-chained-call.js deleted file mode 100644 index 9691da4..0000000 --- a/node_modules/eslint/lib/rules/newline-per-chained-call.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * @fileoverview Rule to ensure newline per method call when chaining calls - * @author Rajendra Patil - * @author Burak Yigit Kaya - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require a newline after each call in a method chain", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/newline-per-chained-call" - }, - fixable: "whitespace", - schema: [{ - type: "object", - properties: { - ignoreChainWithDepth: { - type: "integer", - minimum: 1, - maximum: 10 - } - }, - additionalProperties: false - }] - }, - - create(context) { - - const options = context.options[0] || {}, - ignoreChainWithDepth = options.ignoreChainWithDepth || 2; - - const sourceCode = context.getSourceCode(); - - /** - * Get the prefix of a given MemberExpression node. - * If the MemberExpression node is a computed value it returns a - * left bracket. If not it returns a period. - * - * @param {ASTNode} node - A MemberExpression node to get - * @returns {string} The prefix of the node. - */ - function getPrefix(node) { - return node.computed ? "[" : "."; - } - - /** - * Gets the property text of a given MemberExpression node. - * If the text is multiline, this returns only the first line. - * - * @param {ASTNode} node - A MemberExpression node to get. - * @returns {string} The property text of the node. - */ - function getPropertyText(node) { - const prefix = getPrefix(node); - const lines = sourceCode.getText(node.property).split(astUtils.LINEBREAK_MATCHER); - const suffix = node.computed && lines.length === 1 ? "]" : ""; - - return prefix + lines[0] + suffix; - } - - return { - "CallExpression:exit"(node) { - if (!node.callee || node.callee.type !== "MemberExpression") { - return; - } - - const callee = node.callee; - let parent = callee.object; - let depth = 1; - - while (parent && parent.callee) { - depth += 1; - parent = parent.callee.object; - } - - if (depth > ignoreChainWithDepth && astUtils.isTokenOnSameLine(callee.object, callee.property)) { - context.report({ - node: callee.property, - loc: callee.property.loc.start, - message: "Expected line break before `{{callee}}`.", - data: { - callee: getPropertyText(callee) - }, - fix(fixer) { - const firstTokenAfterObject = sourceCode.getTokenAfter(callee.object, astUtils.isNotClosingParenToken); - - return fixer.insertTextBefore(firstTokenAfterObject, "\n"); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-alert.js b/node_modules/eslint/lib/rules/no-alert.js deleted file mode 100644 index 69d419d..0000000 --- a/node_modules/eslint/lib/rules/no-alert.js +++ /dev/null @@ -1,125 +0,0 @@ -/** - * @fileoverview Rule to flag use of alert, confirm, prompt - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const getPropertyName = require("../ast-utils").getStaticPropertyName; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks if the given name is a prohibited identifier. - * @param {string} name The name to check - * @returns {boolean} Whether or not the name is prohibited. - */ -function isProhibitedIdentifier(name) { - return /^(alert|confirm|prompt)$/.test(name); -} - -/** - * Finds the eslint-scope reference in the given scope. - * @param {Object} scope The scope to search. - * @param {ASTNode} node The identifier node. - * @returns {Reference|null} Returns the found reference or null if none were found. - */ -function findReference(scope, node) { - const references = scope.references.filter(reference => reference.identifier.range[0] === node.range[0] && - reference.identifier.range[1] === node.range[1]); - - if (references.length === 1) { - return references[0]; - } - return null; -} - -/** - * Checks if the given identifier node is shadowed in the given scope. - * @param {Object} scope The current scope. - * @param {string} node The identifier node to check - * @returns {boolean} Whether or not the name is shadowed. - */ -function isShadowed(scope, node) { - const reference = findReference(scope, node); - - return reference && reference.resolved && reference.resolved.defs.length > 0; -} - -/** - * Checks if the given identifier node is a ThisExpression in the global scope or the global window property. - * @param {Object} scope The current scope. - * @param {string} node The identifier node to check - * @returns {boolean} Whether or not the node is a reference to the global object. - */ -function isGlobalThisReferenceOrGlobalWindow(scope, node) { - if (scope.type === "global" && node.type === "ThisExpression") { - return true; - } - if (node.name === "window") { - return !isShadowed(scope, node); - } - - return false; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of `alert`, `confirm`, and `prompt`", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-alert" - }, - - schema: [], - - messages: { - unexpected: "Unexpected {{name}}." - } - }, - - create(context) { - return { - CallExpression(node) { - const callee = node.callee, - currentScope = context.getScope(); - - // without window. - if (callee.type === "Identifier") { - const name = callee.name; - - if (!isShadowed(currentScope, callee) && isProhibitedIdentifier(callee.name)) { - context.report({ - node, - messageId: "unexpected", - data: { name } - }); - } - - } else if (callee.type === "MemberExpression" && isGlobalThisReferenceOrGlobalWindow(currentScope, callee.object)) { - const name = getPropertyName(callee); - - if (isProhibitedIdentifier(name)) { - context.report({ - node, - messageId: "unexpected", - data: { name } - }); - } - } - - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-array-constructor.js b/node_modules/eslint/lib/rules/no-array-constructor.js deleted file mode 100644 index 51676f7..0000000 --- a/node_modules/eslint/lib/rules/no-array-constructor.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @fileoverview Disallow construction of dense arrays using the Array constructor - * @author Matt DuVall - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `Array` constructors", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-array-constructor" - }, - - schema: [], - - messages: { - preferLiteral: "The array literal notation [] is preferable." - } - }, - - create(context) { - - /** - * Disallow construction of dense arrays using the Array constructor - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function check(node) { - if ( - node.arguments.length !== 1 && - node.callee.type === "Identifier" && - node.callee.name === "Array" - ) { - context.report({ node, messageId: "preferLiteral" }); - } - } - - return { - CallExpression: check, - NewExpression: check - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-await-in-loop.js b/node_modules/eslint/lib/rules/no-await-in-loop.js deleted file mode 100644 index ef0bda9..0000000 --- a/node_modules/eslint/lib/rules/no-await-in-loop.js +++ /dev/null @@ -1,102 +0,0 @@ -/** - * @fileoverview Rule to disallow uses of await inside of loops. - * @author Nat Mote (nmote) - */ -"use strict"; - -/** - * Check whether it should stop traversing ancestors at the given node. - * @param {ASTNode} node A node to check. - * @returns {boolean} `true` if it should stop traversing. - */ -function isBoundary(node) { - const t = node.type; - - return ( - t === "FunctionDeclaration" || - t === "FunctionExpression" || - t === "ArrowFunctionExpression" || - - /* - * Don't report the await expressions on for-await-of loop since it's - * asynchronous iteration intentionally. - */ - (t === "ForOfStatement" && node.await === true) - ); -} - -/** - * Check whether the given node is in loop. - * @param {ASTNode} node A node to check. - * @param {ASTNode} parent A parent node to check. - * @returns {boolean} `true` if the node is in loop. - */ -function isLooped(node, parent) { - switch (parent.type) { - case "ForStatement": - return ( - node === parent.test || - node === parent.update || - node === parent.body - ); - - case "ForOfStatement": - case "ForInStatement": - return node === parent.body; - - case "WhileStatement": - case "DoWhileStatement": - return node === parent.test || node === parent.body; - - default: - return false; - } -} - -module.exports = { - meta: { - docs: { - description: "disallow `await` inside of loops", - category: "Possible Errors", - recommended: false, - url: "https://eslint.org/docs/rules/no-await-in-loop" - }, - schema: [], - messages: { - unexpectedAwait: "Unexpected `await` inside a loop." - } - }, - create(context) { - - /** - * Validate an await expression. - * @param {ASTNode} awaitNode An AwaitExpression or ForOfStatement node to validate. - * @returns {void} - */ - function validate(awaitNode) { - if (awaitNode.type === "ForOfStatement" && !awaitNode.await) { - return; - } - - let node = awaitNode; - let parent = node.parent; - - while (parent && !isBoundary(parent)) { - if (isLooped(node, parent)) { - context.report({ - node: awaitNode, - messageId: "unexpectedAwait" - }); - return; - } - node = parent; - parent = parent.parent; - } - } - - return { - AwaitExpression: validate, - ForOfStatement: validate - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-bitwise.js b/node_modules/eslint/lib/rules/no-bitwise.js deleted file mode 100644 index 36bbdaf..0000000 --- a/node_modules/eslint/lib/rules/no-bitwise.js +++ /dev/null @@ -1,116 +0,0 @@ -/** - * @fileoverview Rule to flag bitwise identifiers - * @author Nicholas C. Zakas - */ - -"use strict"; - -/* - * - * Set of bitwise operators. - * - */ -const BITWISE_OPERATORS = [ - "^", "|", "&", "<<", ">>", ">>>", - "^=", "|=", "&=", "<<=", ">>=", ">>>=", - "~" -]; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow bitwise operators", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-bitwise" - }, - - schema: [ - { - type: "object", - properties: { - allow: { - type: "array", - items: { - enum: BITWISE_OPERATORS - }, - uniqueItems: true - }, - int32Hint: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - messages: { - unexpected: "Unexpected use of '{{operator}}'." - } - }, - - create(context) { - const options = context.options[0] || {}; - const allowed = options.allow || []; - const int32Hint = options.int32Hint === true; - - /** - * Reports an unexpected use of a bitwise operator. - * @param {ASTNode} node Node which contains the bitwise operator. - * @returns {void} - */ - function report(node) { - context.report({ node, messageId: "unexpected", data: { operator: node.operator } }); - } - - /** - * Checks if the given node has a bitwise operator. - * @param {ASTNode} node The node to check. - * @returns {boolean} Whether or not the node has a bitwise operator. - */ - function hasBitwiseOperator(node) { - return BITWISE_OPERATORS.indexOf(node.operator) !== -1; - } - - /** - * Checks if exceptions were provided, e.g. `{ allow: ['~', '|'] }`. - * @param {ASTNode} node The node to check. - * @returns {boolean} Whether or not the node has a bitwise operator. - */ - function allowedOperator(node) { - return allowed.indexOf(node.operator) !== -1; - } - - /** - * Checks if the given bitwise operator is used for integer typecasting, i.e. "|0" - * @param {ASTNode} node The node to check. - * @returns {boolean} whether the node is used in integer typecasting. - */ - function isInt32Hint(node) { - return int32Hint && node.operator === "|" && node.right && - node.right.type === "Literal" && node.right.value === 0; - } - - /** - * Report if the given node contains a bitwise operator. - * @param {ASTNode} node The node to check. - * @returns {void} - */ - function checkNodeForBitwiseOperator(node) { - if (hasBitwiseOperator(node) && !allowedOperator(node) && !isInt32Hint(node)) { - report(node); - } - } - - return { - AssignmentExpression: checkNodeForBitwiseOperator, - BinaryExpression: checkNodeForBitwiseOperator, - UnaryExpression: checkNodeForBitwiseOperator - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-buffer-constructor.js b/node_modules/eslint/lib/rules/no-buffer-constructor.js deleted file mode 100644 index 51f78ed..0000000 --- a/node_modules/eslint/lib/rules/no-buffer-constructor.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @fileoverview disallow use of the Buffer() constructor - * @author Teddy Katz - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow use of the `Buffer()` constructor", - category: "Node.js and CommonJS", - recommended: false, - url: "https://eslint.org/docs/rules/no-buffer-constructor" - }, - schema: [], - messages: { - deprecated: "{{expr}} is deprecated. Use Buffer.from(), Buffer.alloc(), or Buffer.allocUnsafe() instead." - } - }, - - create(context) { - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- - - return { - "CallExpression[callee.name='Buffer'], NewExpression[callee.name='Buffer']"(node) { - context.report({ - node, - messageId: "deprecated", - data: { expr: node.type === "CallExpression" ? "Buffer()" : "new Buffer()" } - }); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-caller.js b/node_modules/eslint/lib/rules/no-caller.js deleted file mode 100644 index 9756b21..0000000 --- a/node_modules/eslint/lib/rules/no-caller.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @fileoverview Rule to flag use of arguments.callee and arguments.caller. - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of `arguments.caller` or `arguments.callee`", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-caller" - }, - - schema: [], - - messages: { - unexpected: "Avoid arguments.{{prop}}." - } - }, - - create(context) { - - return { - - MemberExpression(node) { - const objectName = node.object.name, - propertyName = node.property.name; - - if (objectName === "arguments" && !node.computed && propertyName && propertyName.match(/^calle[er]$/)) { - context.report({ node, messageId: "unexpected", data: { prop: propertyName } }); - } - - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-case-declarations.js b/node_modules/eslint/lib/rules/no-case-declarations.js deleted file mode 100644 index 862be4c..0000000 --- a/node_modules/eslint/lib/rules/no-case-declarations.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * @fileoverview Rule to flag use of an lexical declarations inside a case clause - * @author Erik Arvidsson - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow lexical declarations in case clauses", - category: "Best Practices", - recommended: true, - url: "https://eslint.org/docs/rules/no-case-declarations" - }, - - schema: [], - - messages: { - unexpected: "Unexpected lexical declaration in case block." - } - }, - - create(context) { - - /** - * Checks whether or not a node is a lexical declaration. - * @param {ASTNode} node A direct child statement of a switch case. - * @returns {boolean} Whether or not the node is a lexical declaration. - */ - function isLexicalDeclaration(node) { - switch (node.type) { - case "FunctionDeclaration": - case "ClassDeclaration": - return true; - case "VariableDeclaration": - return node.kind !== "var"; - default: - return false; - } - } - - return { - SwitchCase(node) { - for (let i = 0; i < node.consequent.length; i++) { - const statement = node.consequent[i]; - - if (isLexicalDeclaration(statement)) { - context.report({ - node, - messageId: "unexpected" - }); - } - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-catch-shadow.js b/node_modules/eslint/lib/rules/no-catch-shadow.js deleted file mode 100644 index 9077922..0000000 --- a/node_modules/eslint/lib/rules/no-catch-shadow.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @fileoverview Rule to flag variable leak in CatchClauses in IE 8 and earlier - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `catch` clause parameters from shadowing variables in the outer scope", - category: "Variables", - recommended: false, - url: "https://eslint.org/docs/rules/no-catch-shadow" - }, - - schema: [], - - messages: { - mutable: "Value of '{{name}}' may be overwritten in IE 8 and earlier." - } - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Check if the parameters are been shadowed - * @param {Object} scope current scope - * @param {string} name parameter name - * @returns {boolean} True is its been shadowed - */ - function paramIsShadowing(scope, name) { - return astUtils.getVariableByName(scope, name) !== null; - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - - CatchClause(node) { - let scope = context.getScope(); - - /* - * When ecmaVersion >= 6, CatchClause creates its own scope - * so start from one upper scope to exclude the current node - */ - if (scope.block === node) { - scope = scope.upper; - } - - if (paramIsShadowing(scope, node.param.name)) { - context.report({ node, messageId: "mutable", data: { name: node.param.name } }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-class-assign.js b/node_modules/eslint/lib/rules/no-class-assign.js deleted file mode 100644 index 58dddd6..0000000 --- a/node_modules/eslint/lib/rules/no-class-assign.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @fileoverview A rule to disallow modifying variables of class declarations - * @author Toru Nagashima - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow reassigning class members", - category: "ECMAScript 6", - recommended: true, - url: "https://eslint.org/docs/rules/no-class-assign" - }, - - schema: [], - - messages: { - class: "'{{name}}' is a class." - } - }, - - create(context) { - - /** - * Finds and reports references that are non initializer and writable. - * @param {Variable} variable - A variable to check. - * @returns {void} - */ - function checkVariable(variable) { - astUtils.getModifyingReferences(variable.references).forEach(reference => { - context.report({ node: reference.identifier, messageId: "class", data: { name: reference.identifier.name } }); - - }); - } - - /** - * Finds and reports references that are non initializer and writable. - * @param {ASTNode} node - A ClassDeclaration/ClassExpression node to check. - * @returns {void} - */ - function checkForClass(node) { - context.getDeclaredVariables(node).forEach(checkVariable); - } - - return { - ClassDeclaration: checkForClass, - ClassExpression: checkForClass - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-compare-neg-zero.js b/node_modules/eslint/lib/rules/no-compare-neg-zero.js deleted file mode 100644 index 6903bd0..0000000 --- a/node_modules/eslint/lib/rules/no-compare-neg-zero.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @fileoverview The rule should warn against code that tries to compare against -0. - * @author Aladdin-ADD - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow comparing against -0", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-compare-neg-zero" - }, - fixable: null, - schema: [], - messages: { - unexpected: "Do not use the '{{operator}}' operator to compare against -0." - } - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Checks a given node is -0 - * - * @param {ASTNode} node - A node to check. - * @returns {boolean} `true` if the node is -0. - */ - function isNegZero(node) { - return node.type === "UnaryExpression" && node.operator === "-" && node.argument.type === "Literal" && node.argument.value === 0; - } - const OPERATORS_TO_CHECK = new Set([">", ">=", "<", "<=", "==", "===", "!=", "!=="]); - - return { - BinaryExpression(node) { - if (OPERATORS_TO_CHECK.has(node.operator)) { - if (isNegZero(node.left) || isNegZero(node.right)) { - context.report({ - node, - messageId: "unexpected", - data: { operator: node.operator } - }); - } - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-cond-assign.js b/node_modules/eslint/lib/rules/no-cond-assign.js deleted file mode 100644 index f949bcc..0000000 --- a/node_modules/eslint/lib/rules/no-cond-assign.js +++ /dev/null @@ -1,146 +0,0 @@ -/** - * @fileoverview Rule to flag assignment in a conditional statement's test expression - * @author Stephen Murray - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -const NODE_DESCRIPTIONS = { - DoWhileStatement: "a 'do...while' statement", - ForStatement: "a 'for' statement", - IfStatement: "an 'if' statement", - WhileStatement: "a 'while' statement" -}; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow assignment operators in conditional expressions", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-cond-assign" - }, - - schema: [ - { - enum: ["except-parens", "always"] - } - ], - - messages: { - unexpected: "Unexpected assignment within {{type}}.", - - // must match JSHint's error message - missing: "Expected a conditional expression and instead saw an assignment." - } - }, - - create(context) { - - const prohibitAssign = (context.options[0] || "except-parens"); - - const sourceCode = context.getSourceCode(); - - /** - * Check whether an AST node is the test expression for a conditional statement. - * @param {!Object} node The node to test. - * @returns {boolean} `true` if the node is the text expression for a conditional statement; otherwise, `false`. - */ - function isConditionalTestExpression(node) { - return node.parent && - node.parent.test && - node === node.parent.test; - } - - /** - * Given an AST node, perform a bottom-up search for the first ancestor that represents a conditional statement. - * @param {!Object} node The node to use at the start of the search. - * @returns {?Object} The closest ancestor node that represents a conditional statement. - */ - function findConditionalAncestor(node) { - let currentAncestor = node; - - do { - if (isConditionalTestExpression(currentAncestor)) { - return currentAncestor.parent; - } - } while ((currentAncestor = currentAncestor.parent) && !astUtils.isFunction(currentAncestor)); - - return null; - } - - /** - * Check whether the code represented by an AST node is enclosed in two sets of parentheses. - * @param {!Object} node The node to test. - * @returns {boolean} `true` if the code is enclosed in two sets of parentheses; otherwise, `false`. - */ - function isParenthesisedTwice(node) { - const previousToken = sourceCode.getTokenBefore(node, 1), - nextToken = sourceCode.getTokenAfter(node, 1); - - return astUtils.isParenthesised(sourceCode, node) && - astUtils.isOpeningParenToken(previousToken) && previousToken.range[1] <= node.range[0] && - astUtils.isClosingParenToken(nextToken) && nextToken.range[0] >= node.range[1]; - } - - /** - * Check a conditional statement's test expression for top-level assignments that are not enclosed in parentheses. - * @param {!Object} node The node for the conditional statement. - * @returns {void} - */ - function testForAssign(node) { - if (node.test && - (node.test.type === "AssignmentExpression") && - (node.type === "ForStatement" - ? !astUtils.isParenthesised(sourceCode, node.test) - : !isParenthesisedTwice(node.test) - ) - ) { - - context.report({ - node, - loc: node.test.loc.start, - messageId: "missing" - }); - } - } - - /** - * Check whether an assignment expression is descended from a conditional statement's test expression. - * @param {!Object} node The node for the assignment expression. - * @returns {void} - */ - function testForConditionalAncestor(node) { - const ancestor = findConditionalAncestor(node); - - if (ancestor) { - context.report({ - node: ancestor, - messageId: "unexpected", - data: { - type: NODE_DESCRIPTIONS[ancestor.type] || ancestor.type - } - }); - } - } - - if (prohibitAssign === "always") { - return { - AssignmentExpression: testForConditionalAncestor - }; - } - - return { - DoWhileStatement: testForAssign, - ForStatement: testForAssign, - IfStatement: testForAssign, - WhileStatement: testForAssign - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-confusing-arrow.js b/node_modules/eslint/lib/rules/no-confusing-arrow.js deleted file mode 100644 index 297e3b1..0000000 --- a/node_modules/eslint/lib/rules/no-confusing-arrow.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @fileoverview A rule to warn against using arrow functions when they could be - * confused with comparisions - * @author Jxck - */ - -"use strict"; - -const astUtils = require("../ast-utils.js"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a node is a conditional expression. - * @param {ASTNode} node - node to test - * @returns {boolean} `true` if the node is a conditional expression. - */ -function isConditional(node) { - return node && node.type === "ConditionalExpression"; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow arrow functions where they could be confused with comparisons", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/no-confusing-arrow" - }, - - fixable: "code", - - schema: [{ - type: "object", - properties: { - allowParens: { type: "boolean" } - }, - additionalProperties: false - }], - - messages: { - confusing: "Arrow function used ambiguously with a conditional expression." - } - }, - - create(context) { - const config = context.options[0] || {}; - const sourceCode = context.getSourceCode(); - - /** - * Reports if an arrow function contains an ambiguous conditional. - * @param {ASTNode} node - A node to check and report. - * @returns {void} - */ - function checkArrowFunc(node) { - const body = node.body; - - if (isConditional(body) && !(config.allowParens && astUtils.isParenthesised(sourceCode, body))) { - context.report({ - node, - messageId: "confusing", - fix(fixer) { - - // if `allowParens` is not set to true dont bother wrapping in parens - return config.allowParens && fixer.replaceText(node.body, `(${sourceCode.getText(node.body)})`); - } - }); - } - } - - return { - ArrowFunctionExpression: checkArrowFunc - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-console.js b/node_modules/eslint/lib/rules/no-console.js deleted file mode 100644 index fd5c33a..0000000 --- a/node_modules/eslint/lib/rules/no-console.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * @fileoverview Rule to flag use of console object - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of `console`", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-console" - }, - - schema: [ - { - type: "object", - properties: { - allow: { - type: "array", - items: { - type: "string" - }, - minItems: 1, - uniqueItems: true - } - }, - additionalProperties: false - } - ], - - messages: { - unexpected: "Unexpected console statement." - } - }, - - create(context) { - const options = context.options[0] || {}; - const allowed = options.allow || []; - - /** - * Checks whether the given reference is 'console' or not. - * - * @param {eslint-scope.Reference} reference - The reference to check. - * @returns {boolean} `true` if the reference is 'console'. - */ - function isConsole(reference) { - const id = reference.identifier; - - return id && id.name === "console"; - } - - /** - * Checks whether the property name of the given MemberExpression node - * is allowed by options or not. - * - * @param {ASTNode} node - The MemberExpression node to check. - * @returns {boolean} `true` if the property name of the node is allowed. - */ - function isAllowed(node) { - const propertyName = astUtils.getStaticPropertyName(node); - - return propertyName && allowed.indexOf(propertyName) !== -1; - } - - /** - * Checks whether the given reference is a member access which is not - * allowed by options or not. - * - * @param {eslint-scope.Reference} reference - The reference to check. - * @returns {boolean} `true` if the reference is a member access which - * is not allowed by options. - */ - function isMemberAccessExceptAllowed(reference) { - const node = reference.identifier; - const parent = node.parent; - - return ( - parent.type === "MemberExpression" && - parent.object === node && - !isAllowed(parent) - ); - } - - /** - * Reports the given reference as a violation. - * - * @param {eslint-scope.Reference} reference - The reference to report. - * @returns {void} - */ - function report(reference) { - const node = reference.identifier.parent; - - context.report({ - node, - loc: node.loc, - messageId: "unexpected" - }); - } - - return { - "Program:exit"() { - const scope = context.getScope(); - const consoleVar = astUtils.getVariableByName(scope, "console"); - const shadowed = consoleVar && consoleVar.defs.length > 0; - - /* - * 'scope.through' includes all references to undefined - * variables. If the variable 'console' is not defined, it uses - * 'scope.through'. - */ - const references = consoleVar - ? consoleVar.references - : scope.through.filter(isConsole); - - if (!shadowed) { - references - .filter(isMemberAccessExceptAllowed) - .forEach(report); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-const-assign.js b/node_modules/eslint/lib/rules/no-const-assign.js deleted file mode 100644 index 043fe05..0000000 --- a/node_modules/eslint/lib/rules/no-const-assign.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @fileoverview A rule to disallow modifying variables that are declared using `const` - * @author Toru Nagashima - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow reassigning `const` variables", - category: "ECMAScript 6", - recommended: true, - url: "https://eslint.org/docs/rules/no-const-assign" - }, - - schema: [], - - messages: { - const: "'{{name}}' is constant." - } - }, - - create(context) { - - /** - * Finds and reports references that are non initializer and writable. - * @param {Variable} variable - A variable to check. - * @returns {void} - */ - function checkVariable(variable) { - astUtils.getModifyingReferences(variable.references).forEach(reference => { - context.report({ node: reference.identifier, messageId: "const", data: { name: reference.identifier.name } }); - }); - } - - return { - VariableDeclaration(node) { - if (node.kind === "const") { - context.getDeclaredVariables(node).forEach(checkVariable); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-constant-condition.js b/node_modules/eslint/lib/rules/no-constant-condition.js deleted file mode 100644 index 724da97..0000000 --- a/node_modules/eslint/lib/rules/no-constant-condition.js +++ /dev/null @@ -1,214 +0,0 @@ -/** - * @fileoverview Rule to flag use constant conditions - * @author Christian Schulz - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow constant expressions in conditions", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-constant-condition" - }, - - schema: [ - { - type: "object", - properties: { - checkLoops: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - messages: { - unexpected: "Unexpected constant condition." - } - }, - - create(context) { - const options = context.options[0] || {}, - checkLoops = options.checkLoops !== false, - loopSetStack = []; - - let loopsInCurrentScope = new Set(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - - /** - * Checks if a branch node of LogicalExpression short circuits the whole condition - * @param {ASTNode} node The branch of main condition which needs to be checked - * @param {string} operator The operator of the main LogicalExpression. - * @returns {boolean} true when condition short circuits whole condition - */ - function isLogicalIdentity(node, operator) { - switch (node.type) { - case "Literal": - return (operator === "||" && node.value === true) || - (operator === "&&" && node.value === false); - - case "UnaryExpression": - return (operator === "&&" && node.operator === "void"); - - case "LogicalExpression": - return isLogicalIdentity(node.left, node.operator) || - isLogicalIdentity(node.right, node.operator); - - // no default - } - return false; - } - - /** - * Checks if a node has a constant truthiness value. - * @param {ASTNode} node The AST node to check. - * @param {boolean} inBooleanPosition `false` if checking branch of a condition. - * `true` in all other cases - * @returns {Bool} true when node's truthiness is constant - * @private - */ - function isConstant(node, inBooleanPosition) { - switch (node.type) { - case "Literal": - case "ArrowFunctionExpression": - case "FunctionExpression": - case "ObjectExpression": - case "ArrayExpression": - return true; - - case "UnaryExpression": - if (node.operator === "void") { - return true; - } - - return (node.operator === "typeof" && inBooleanPosition) || - isConstant(node.argument, true); - - case "BinaryExpression": - return isConstant(node.left, false) && - isConstant(node.right, false) && - node.operator !== "in"; - - case "LogicalExpression": { - const isLeftConstant = isConstant(node.left, inBooleanPosition); - const isRightConstant = isConstant(node.right, inBooleanPosition); - const isLeftShortCircuit = (isLeftConstant && isLogicalIdentity(node.left, node.operator)); - const isRightShortCircuit = (isRightConstant && isLogicalIdentity(node.right, node.operator)); - - return (isLeftConstant && isRightConstant) || isLeftShortCircuit || isRightShortCircuit; - } - - case "AssignmentExpression": - return (node.operator === "=") && isConstant(node.right, inBooleanPosition); - - case "SequenceExpression": - return isConstant(node.expressions[node.expressions.length - 1], inBooleanPosition); - - // no default - } - return false; - } - - /** - * Tracks when the given node contains a constant condition. - * @param {ASTNode} node The AST node to check. - * @returns {void} - * @private - */ - function trackConstantConditionLoop(node) { - if (node.test && isConstant(node.test, true)) { - loopsInCurrentScope.add(node); - } - } - - /** - * Reports when the set contains the given constant condition node - * @param {ASTNode} node The AST node to check. - * @returns {void} - * @private - */ - function checkConstantConditionLoopInSet(node) { - if (loopsInCurrentScope.has(node)) { - loopsInCurrentScope.delete(node); - context.report({ node: node.test, messageId: "unexpected" }); - } - } - - /** - * Reports when the given node contains a constant condition. - * @param {ASTNode} node The AST node to check. - * @returns {void} - * @private - */ - function reportIfConstant(node) { - if (node.test && isConstant(node.test, true)) { - context.report({ node: node.test, messageId: "unexpected" }); - } - } - - /** - * Stores current set of constant loops in loopSetStack temporarily - * and uses a new set to track constant loops - * @returns {void} - * @private - */ - function enterFunction() { - loopSetStack.push(loopsInCurrentScope); - loopsInCurrentScope = new Set(); - } - - /** - * Reports when the set still contains stored constant conditions - * @param {ASTNode} node The AST node to check. - * @returns {void} - * @private - */ - function exitFunction() { - loopsInCurrentScope = loopSetStack.pop(); - } - - /** - * Checks node when checkLoops option is enabled - * @param {ASTNode} node The AST node to check. - * @returns {void} - * @private - */ - function checkLoop(node) { - if (checkLoops) { - trackConstantConditionLoop(node); - } - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - ConditionalExpression: reportIfConstant, - IfStatement: reportIfConstant, - WhileStatement: checkLoop, - "WhileStatement:exit": checkConstantConditionLoopInSet, - DoWhileStatement: checkLoop, - "DoWhileStatement:exit": checkConstantConditionLoopInSet, - ForStatement: checkLoop, - "ForStatement > .test": node => checkLoop(node.parent), - "ForStatement:exit": checkConstantConditionLoopInSet, - FunctionDeclaration: enterFunction, - "FunctionDeclaration:exit": exitFunction, - YieldExpression: () => loopsInCurrentScope.clear() - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-continue.js b/node_modules/eslint/lib/rules/no-continue.js deleted file mode 100644 index 3075b77..0000000 --- a/node_modules/eslint/lib/rules/no-continue.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * @fileoverview Rule to flag use of continue statement - * @author Borislav Zhivkov - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `continue` statements", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-continue" - }, - - schema: [], - - messages: { - unexpected: "Unexpected use of continue statement." - } - }, - - create(context) { - - return { - ContinueStatement(node) { - context.report({ node, messageId: "unexpected" }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-control-regex.js b/node_modules/eslint/lib/rules/no-control-regex.js deleted file mode 100644 index 24bb6be..0000000 --- a/node_modules/eslint/lib/rules/no-control-regex.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * @fileoverview Rule to forbid control charactes from regular expressions. - * @author Nicholas C. Zakas - */ - -"use strict"; - -const RegExpValidator = require("regexpp").RegExpValidator; -const collector = new class { - constructor() { - this.ecmaVersion = 2018; - this._source = ""; - this._controlChars = []; - this._validator = new RegExpValidator(this); - } - - onPatternEnter() { - this._controlChars = []; - } - - onCharacter(start, end, cp) { - if (cp >= 0x00 && - cp <= 0x1F && - ( - this._source.codePointAt(start) === cp || - this._source.slice(start, end).startsWith("\\x") || - this._source.slice(start, end).startsWith("\\u") - ) - ) { - this._controlChars.push(`\\x${`0${cp.toString(16)}`.slice(-2)}`); - } - } - - collectControlChars(regexpStr) { - try { - this._source = regexpStr; - this._validator.validatePattern(regexpStr); // Call onCharacter hook - } catch (err) { - - // Ignore syntax errors in RegExp. - } - return this._controlChars; - } -}(); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow control characters in regular expressions", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-control-regex" - }, - - schema: [], - - messages: { - unexpected: "Unexpected control character(s) in regular expression: {{controlChars}}." - } - }, - - create(context) { - - /** - * Get the regex expression - * @param {ASTNode} node node to evaluate - * @returns {RegExp|null} Regex if found else null - * @private - */ - function getRegExpPattern(node) { - if (node.regex) { - return node.regex.pattern; - } - if (typeof node.value === "string" && - (node.parent.type === "NewExpression" || node.parent.type === "CallExpression") && - node.parent.callee.type === "Identifier" && - node.parent.callee.name === "RegExp" && - node.parent.arguments[0] === node - ) { - return node.value; - } - - return null; - } - - return { - Literal(node) { - const pattern = getRegExpPattern(node); - - if (pattern) { - const controlCharacters = collector.collectControlChars(pattern); - - if (controlCharacters.length > 0) { - context.report({ - node, - messageId: "unexpected", - data: { - controlChars: controlCharacters.join(", ") - } - }); - } - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-debugger.js b/node_modules/eslint/lib/rules/no-debugger.js deleted file mode 100644 index f00e819..0000000 --- a/node_modules/eslint/lib/rules/no-debugger.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * @fileoverview Rule to flag use of a debugger statement - * @author Nicholas C. Zakas - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of `debugger`", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-debugger" - }, - fixable: "code", - schema: [], - messages: { - unexpected: "Unexpected 'debugger' statement." - } - }, - - create(context) { - - return { - DebuggerStatement(node) { - context.report({ - node, - messageId: "unexpected", - fix(fixer) { - if (astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type)) { - return fixer.remove(node); - } - return null; - } - }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-delete-var.js b/node_modules/eslint/lib/rules/no-delete-var.js deleted file mode 100644 index f54a396..0000000 --- a/node_modules/eslint/lib/rules/no-delete-var.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @fileoverview Rule to flag when deleting variables - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow deleting variables", - category: "Variables", - recommended: true, - url: "https://eslint.org/docs/rules/no-delete-var" - }, - - schema: [], - - messages: { - unexpected: "Variables should not be deleted." - } - }, - - create(context) { - - return { - - UnaryExpression(node) { - if (node.operator === "delete" && node.argument.type === "Identifier") { - context.report({ node, messageId: "unexpected" }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-div-regex.js b/node_modules/eslint/lib/rules/no-div-regex.js deleted file mode 100644 index c050249..0000000 --- a/node_modules/eslint/lib/rules/no-div-regex.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @fileoverview Rule to check for ambiguous div operator in regexes - * @author Matt DuVall - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow division operators explicitly at the beginning of regular expressions", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-div-regex" - }, - - schema: [], - - messages: { - unexpected: "A regular expression literal can be confused with '/='." - } - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - return { - - Literal(node) { - const token = sourceCode.getFirstToken(node); - - if (token.type === "RegularExpression" && token.value[1] === "=") { - context.report({ node, messageId: "unexpected" }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-dupe-args.js b/node_modules/eslint/lib/rules/no-dupe-args.js deleted file mode 100644 index e5a7f41..0000000 --- a/node_modules/eslint/lib/rules/no-dupe-args.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @fileoverview Rule to flag duplicate arguments - * @author Jamund Ferguson - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow duplicate arguments in `function` definitions", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-dupe-args" - }, - - schema: [], - - messages: { - unexpected: "Duplicate param '{{name}}'." - } - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Checks whether or not a given definition is a parameter's. - * @param {eslint-scope.DefEntry} def - A definition to check. - * @returns {boolean} `true` if the definition is a parameter's. - */ - function isParameter(def) { - return def.type === "Parameter"; - } - - /** - * Determines if a given node has duplicate parameters. - * @param {ASTNode} node The node to check. - * @returns {void} - * @private - */ - function checkParams(node) { - const variables = context.getDeclaredVariables(node); - - for (let i = 0; i < variables.length; ++i) { - const variable = variables[i]; - - // Checks and reports duplications. - const defs = variable.defs.filter(isParameter); - - if (defs.length >= 2) { - context.report({ - node, - messageId: "unexpected", - data: { name: variable.name } - }); - } - } - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - FunctionDeclaration: checkParams, - FunctionExpression: checkParams - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-dupe-class-members.js b/node_modules/eslint/lib/rules/no-dupe-class-members.js deleted file mode 100644 index d0fc359..0000000 --- a/node_modules/eslint/lib/rules/no-dupe-class-members.js +++ /dev/null @@ -1,114 +0,0 @@ -/** - * @fileoverview A rule to disallow duplicate name in class members. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow duplicate class members", - category: "ECMAScript 6", - recommended: true, - url: "https://eslint.org/docs/rules/no-dupe-class-members" - }, - - schema: [], - - messages: { - unexpected: "Duplicate name '{{name}}'." - } - }, - - create(context) { - let stack = []; - - /** - * Gets state of a given member name. - * @param {string} name - A name of a member. - * @param {boolean} isStatic - A flag which specifies that is a static member. - * @returns {Object} A state of a given member name. - * - retv.init {boolean} A flag which shows the name is declared as normal member. - * - retv.get {boolean} A flag which shows the name is declared as getter. - * - retv.set {boolean} A flag which shows the name is declared as setter. - */ - function getState(name, isStatic) { - const stateMap = stack[stack.length - 1]; - const key = `$${name}`; // to avoid "__proto__". - - if (!stateMap[key]) { - stateMap[key] = { - nonStatic: { init: false, get: false, set: false }, - static: { init: false, get: false, set: false } - }; - } - - return stateMap[key][isStatic ? "static" : "nonStatic"]; - } - - /** - * Gets the name text of a given node. - * - * @param {ASTNode} node - A node to get the name. - * @returns {string} The name text of the node. - */ - function getName(node) { - switch (node.type) { - case "Identifier": return node.name; - case "Literal": return String(node.value); - - /* istanbul ignore next: syntax error */ - default: return ""; - } - } - - return { - - // Initializes the stack of state of member declarations. - Program() { - stack = []; - }, - - // Initializes state of member declarations for the class. - ClassBody() { - stack.push(Object.create(null)); - }, - - // Disposes the state for the class. - "ClassBody:exit"() { - stack.pop(); - }, - - // Reports the node if its name has been declared already. - MethodDefinition(node) { - if (node.computed) { - return; - } - - const name = getName(node.key); - const state = getState(name, node.static); - let isDuplicate = false; - - if (node.kind === "get") { - isDuplicate = (state.init || state.get); - state.get = true; - } else if (node.kind === "set") { - isDuplicate = (state.init || state.set); - state.set = true; - } else { - isDuplicate = (state.init || state.get || state.set); - state.init = true; - } - - if (isDuplicate) { - context.report({ node, messageId: "unexpected", data: { name } }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-dupe-keys.js b/node_modules/eslint/lib/rules/no-dupe-keys.js deleted file mode 100644 index 577710c..0000000 --- a/node_modules/eslint/lib/rules/no-dupe-keys.js +++ /dev/null @@ -1,140 +0,0 @@ -/** - * @fileoverview Rule to flag use of duplicate keys in an object. - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const GET_KIND = /^(?:init|get)$/; -const SET_KIND = /^(?:init|set)$/; - -/** - * The class which stores properties' information of an object. - */ -class ObjectInfo { - - /** - * @param {ObjectInfo|null} upper - The information of the outer object. - * @param {ASTNode} node - The ObjectExpression node of this information. - */ - constructor(upper, node) { - this.upper = upper; - this.node = node; - this.properties = new Map(); - } - - /** - * Gets the information of the given Property node. - * @param {ASTNode} node - The Property node to get. - * @returns {{get: boolean, set: boolean}} The information of the property. - */ - getPropertyInfo(node) { - const name = astUtils.getStaticPropertyName(node); - - if (!this.properties.has(name)) { - this.properties.set(name, { get: false, set: false }); - } - return this.properties.get(name); - } - - /** - * Checks whether the given property has been defined already or not. - * @param {ASTNode} node - The Property node to check. - * @returns {boolean} `true` if the property has been defined. - */ - isPropertyDefined(node) { - const entry = this.getPropertyInfo(node); - - return ( - (GET_KIND.test(node.kind) && entry.get) || - (SET_KIND.test(node.kind) && entry.set) - ); - } - - /** - * Defines the given property. - * @param {ASTNode} node - The Property node to define. - * @returns {void} - */ - defineProperty(node) { - const entry = this.getPropertyInfo(node); - - if (GET_KIND.test(node.kind)) { - entry.get = true; - } - if (SET_KIND.test(node.kind)) { - entry.set = true; - } - } -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow duplicate keys in object literals", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-dupe-keys" - }, - - schema: [], - - messages: { - unexpected: "Duplicate key '{{name}}'." - } - }, - - create(context) { - let info = null; - - return { - ObjectExpression(node) { - info = new ObjectInfo(info, node); - }, - "ObjectExpression:exit"() { - info = info.upper; - }, - - Property(node) { - const name = astUtils.getStaticPropertyName(node); - - // Skip destructuring. - if (node.parent.type !== "ObjectExpression") { - return; - } - - // Skip if the name is not static. - if (!name) { - return; - } - - // Reports if the name is defined already. - if (info.isPropertyDefined(node)) { - context.report({ - node: info.node, - loc: node.key.loc, - messageId: "unexpected", - data: { name } - }); - } - - // Update info. - info.defineProperty(node); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-duplicate-case.js b/node_modules/eslint/lib/rules/no-duplicate-case.js deleted file mode 100644 index 128b1fc..0000000 --- a/node_modules/eslint/lib/rules/no-duplicate-case.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @fileoverview Rule to disallow a duplicate case label. - * @author Dieter Oberkofler - * @author Burak Yigit Kaya - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow duplicate case labels", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-duplicate-case" - }, - - schema: [], - - messages: { - unexpected: "Duplicate case label." - } - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - return { - SwitchStatement(node) { - const mapping = {}; - - node.cases.forEach(switchCase => { - const key = sourceCode.getText(switchCase.test); - - if (mapping[key]) { - context.report({ node: switchCase, messageId: "unexpected" }); - } else { - mapping[key] = switchCase; - } - }); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-duplicate-imports.js b/node_modules/eslint/lib/rules/no-duplicate-imports.js deleted file mode 100644 index 32071da..0000000 --- a/node_modules/eslint/lib/rules/no-duplicate-imports.js +++ /dev/null @@ -1,138 +0,0 @@ -/** - * @fileoverview Restrict usage of duplicate imports. - * @author Simen Bekkhus - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -/** - * Returns the name of the module imported or re-exported. - * - * @param {ASTNode} node - A node to get. - * @returns {string} the name of the module, or empty string if no name. - */ -function getValue(node) { - if (node && node.source && node.source.value) { - return node.source.value.trim(); - } - - return ""; -} - -/** - * Checks if the name of the import or export exists in the given array, and reports if so. - * - * @param {RuleContext} context - The ESLint rule context object. - * @param {ASTNode} node - A node to get. - * @param {string} value - The name of the imported or exported module. - * @param {string[]} array - The array containing other imports or exports in the file. - * @param {string} message - A message to be reported after the name of the module - * - * @returns {void} No return value - */ -function checkAndReport(context, node, value, array, message) { - if (array.indexOf(value) !== -1) { - context.report({ - node, - message: "'{{module}}' {{message}}", - data: { - module: value, - message - } - }); - } -} - -/** - * @callback nodeCallback - * @param {ASTNode} node - A node to handle. - */ - -/** - * Returns a function handling the imports of a given file - * - * @param {RuleContext} context - The ESLint rule context object. - * @param {boolean} includeExports - Whether or not to check for exports in addition to imports. - * @param {string[]} importsInFile - The array containing other imports in the file. - * @param {string[]} exportsInFile - The array containing other exports in the file. - * - * @returns {nodeCallback} A function passed to ESLint to handle the statement. - */ -function handleImports(context, includeExports, importsInFile, exportsInFile) { - return function(node) { - const value = getValue(node); - - if (value) { - checkAndReport(context, node, value, importsInFile, "import is duplicated."); - - if (includeExports) { - checkAndReport(context, node, value, exportsInFile, "import is duplicated as export."); - } - - importsInFile.push(value); - } - }; -} - -/** - * Returns a function handling the exports of a given file - * - * @param {RuleContext} context - The ESLint rule context object. - * @param {string[]} importsInFile - The array containing other imports in the file. - * @param {string[]} exportsInFile - The array containing other exports in the file. - * - * @returns {nodeCallback} A function passed to ESLint to handle the statement. - */ -function handleExports(context, importsInFile, exportsInFile) { - return function(node) { - const value = getValue(node); - - if (value) { - checkAndReport(context, node, value, exportsInFile, "export is duplicated."); - checkAndReport(context, node, value, importsInFile, "export is duplicated as import."); - - exportsInFile.push(value); - } - }; -} - -module.exports = { - meta: { - docs: { - description: "disallow duplicate module imports", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/no-duplicate-imports" - }, - - schema: [{ - type: "object", - properties: { - includeExports: { - type: "boolean" - } - }, - additionalProperties: false - }] - }, - - create(context) { - const includeExports = (context.options[0] || {}).includeExports, - importsInFile = [], - exportsInFile = []; - - const handlers = { - ImportDeclaration: handleImports(context, includeExports, importsInFile, exportsInFile) - }; - - if (includeExports) { - handlers.ExportNamedDeclaration = handleExports(context, importsInFile, exportsInFile); - handlers.ExportAllDeclaration = handleExports(context, importsInFile, exportsInFile); - } - - return handlers; - } -}; diff --git a/node_modules/eslint/lib/rules/no-else-return.js b/node_modules/eslint/lib/rules/no-else-return.js deleted file mode 100644 index 5e58acf..0000000 --- a/node_modules/eslint/lib/rules/no-else-return.js +++ /dev/null @@ -1,283 +0,0 @@ -/** - * @fileoverview Rule to flag `else` after a `return` in `if` - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); -const FixTracker = require("../util/fix-tracker"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `else` blocks after `return` statements in `if` statements", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-else-return" - }, - - schema: [{ - type: "object", - properties: { - allowElseIf: { - type: "boolean" - } - }, - additionalProperties: false - }], - - fixable: "code", - - messages: { - unexpected: "Unnecessary 'else' after 'return'." - } - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Display the context report if rule is violated - * - * @param {Node} node The 'else' node - * @returns {void} - */ - function displayReport(node) { - context.report({ - node, - messageId: "unexpected", - fix: fixer => { - const sourceCode = context.getSourceCode(); - const startToken = sourceCode.getFirstToken(node); - const elseToken = sourceCode.getTokenBefore(startToken); - const source = sourceCode.getText(node); - const lastIfToken = sourceCode.getTokenBefore(elseToken); - let fixedSource, firstTokenOfElseBlock; - - if (startToken.type === "Punctuator" && startToken.value === "{") { - firstTokenOfElseBlock = sourceCode.getTokenAfter(startToken); - } else { - firstTokenOfElseBlock = startToken; - } - - /* - * If the if block does not have curly braces and does not end in a semicolon - * and the else block starts with (, [, /, +, ` or -, then it is not - * safe to remove the else keyword, because ASI will not add a semicolon - * after the if block - */ - const ifBlockMaybeUnsafe = node.parent.consequent.type !== "BlockStatement" && lastIfToken.value !== ";"; - const elseBlockUnsafe = /^[([/+`-]/.test(firstTokenOfElseBlock.value); - - if (ifBlockMaybeUnsafe && elseBlockUnsafe) { - return null; - } - - const endToken = sourceCode.getLastToken(node); - const lastTokenOfElseBlock = sourceCode.getTokenBefore(endToken); - - if (lastTokenOfElseBlock.value !== ";") { - const nextToken = sourceCode.getTokenAfter(endToken); - - const nextTokenUnsafe = nextToken && /^[([/+`-]/.test(nextToken.value); - const nextTokenOnSameLine = nextToken && nextToken.loc.start.line === lastTokenOfElseBlock.loc.start.line; - - /* - * If the else block contents does not end in a semicolon, - * and the else block starts with (, [, /, +, ` or -, then it is not - * safe to remove the else block, because ASI will not add a semicolon - * after the remaining else block contents - */ - if (nextTokenUnsafe || (nextTokenOnSameLine && nextToken.value !== "}")) { - return null; - } - } - - if (startToken.type === "Punctuator" && startToken.value === "{") { - fixedSource = source.slice(1, -1); - } else { - fixedSource = source; - } - - /* - * Extend the replacement range to include the entire - * function to avoid conflicting with no-useless-return. - * https://github.com/eslint/eslint/issues/8026 - */ - return new FixTracker(fixer, sourceCode) - .retainEnclosingFunction(node) - .replaceTextRange([elseToken.range[0], node.range[1]], fixedSource); - } - }); - } - - /** - * Check to see if the node is a ReturnStatement - * - * @param {Node} node The node being evaluated - * @returns {boolean} True if node is a return - */ - function checkForReturn(node) { - return node.type === "ReturnStatement"; - } - - /** - * Naive return checking, does not iterate through the whole - * BlockStatement because we make the assumption that the ReturnStatement - * will be the last node in the body of the BlockStatement. - * - * @param {Node} node The consequent/alternate node - * @returns {boolean} True if it has a return - */ - function naiveHasReturn(node) { - if (node.type === "BlockStatement") { - const body = node.body, - lastChildNode = body[body.length - 1]; - - return lastChildNode && checkForReturn(lastChildNode); - } - return checkForReturn(node); - } - - /** - * Check to see if the node is valid for evaluation, - * meaning it has an else. - * - * @param {Node} node The node being evaluated - * @returns {boolean} True if the node is valid - */ - function hasElse(node) { - return node.alternate && node.consequent; - } - - /** - * If the consequent is an IfStatement, check to see if it has an else - * and both its consequent and alternate path return, meaning this is - * a nested case of rule violation. If-Else not considered currently. - * - * @param {Node} node The consequent node - * @returns {boolean} True if this is a nested rule violation - */ - function checkForIf(node) { - return node.type === "IfStatement" && hasElse(node) && - naiveHasReturn(node.alternate) && naiveHasReturn(node.consequent); - } - - /** - * Check the consequent/body node to make sure it is not - * a ReturnStatement or an IfStatement that returns on both - * code paths. - * - * @param {Node} node The consequent or body node - * @param {Node} alternate The alternate node - * @returns {boolean} `true` if it is a Return/If node that always returns. - */ - function checkForReturnOrIf(node) { - return checkForReturn(node) || checkForIf(node); - } - - - /** - * Check whether a node returns in every codepath. - * @param {Node} node The node to be checked - * @returns {boolean} `true` if it returns on every codepath. - */ - function alwaysReturns(node) { - if (node.type === "BlockStatement") { - - // If we have a BlockStatement, check each consequent body node. - return node.body.some(checkForReturnOrIf); - } - - /* - * If not a block statement, make sure the consequent isn't a - * ReturnStatement or an IfStatement with returns on both paths. - */ - return checkForReturnOrIf(node); - } - - - /** - * Check the if statement, but don't catch else-if blocks. - * @returns {void} - * @param {Node} node The node for the if statement to check - * @private - */ - function checkIfWithoutElse(node) { - const parent = node.parent; - - /* - * Fixing this would require splitting one statement into two, so no error should - * be reported if this node is in a position where only one statement is allowed. - */ - if (!astUtils.STATEMENT_LIST_PARENTS.has(parent.type)) { - return; - } - - const consequents = []; - let alternate; - - for (let currentNode = node; currentNode.type === "IfStatement"; currentNode = currentNode.alternate) { - if (!currentNode.alternate) { - return; - } - consequents.push(currentNode.consequent); - alternate = currentNode.alternate; - } - - if (consequents.every(alwaysReturns)) { - displayReport(alternate); - } - } - - /** - * Check the if statement - * @returns {void} - * @param {Node} node The node for the if statement to check - * @private - */ - function checkIfWithElse(node) { - const parent = node.parent; - - - /* - * Fixing this would require splitting one statement into two, so no error should - * be reported if this node is in a position where only one statement is allowed. - */ - if (!astUtils.STATEMENT_LIST_PARENTS.has(parent.type)) { - return; - } - - const alternate = node.alternate; - - if (alternate && alwaysReturns(node.consequent)) { - displayReport(alternate); - } - } - - const allowElseIf = !(context.options[0] && context.options[0].allowElseIf === false); - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - - "IfStatement:exit": allowElseIf ? checkIfWithoutElse : checkIfWithElse - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-empty-character-class.js b/node_modules/eslint/lib/rules/no-empty-character-class.js deleted file mode 100644 index e3f06b0..0000000 --- a/node_modules/eslint/lib/rules/no-empty-character-class.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * @fileoverview Rule to flag the use of empty character classes in regular expressions - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/* - * plain-English description of the following regexp: - * 0. `^` fix the match at the beginning of the string - * 1. `\/`: the `/` that begins the regexp - * 2. `([^\\[]|\\.|\[([^\\\]]|\\.)+\])*`: regexp contents; 0 or more of the following - * 2.0. `[^\\[]`: any character that's not a `\` or a `[` (anything but escape sequences and character classes) - * 2.1. `\\.`: an escape sequence - * 2.2. `\[([^\\\]]|\\.)+\]`: a character class that isn't empty - * 3. `\/` the `/` that ends the regexp - * 4. `[gimuy]*`: optional regexp flags - * 5. `$`: fix the match at the end of the string - */ -const regex = /^\/([^\\[]|\\.|\[([^\\\]]|\\.)+])*\/[gimuys]*$/; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow empty character classes in regular expressions", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-empty-character-class" - }, - - schema: [], - - messages: { - unexpected: "Empty class." - } - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - return { - - Literal(node) { - const token = sourceCode.getFirstToken(node); - - if (token.type === "RegularExpression" && !regex.test(token.value)) { - context.report({ node, messageId: "unexpected" }); - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-empty-function.js b/node_modules/eslint/lib/rules/no-empty-function.js deleted file mode 100644 index d9948cd..0000000 --- a/node_modules/eslint/lib/rules/no-empty-function.js +++ /dev/null @@ -1,165 +0,0 @@ -/** - * @fileoverview Rule to disallow empty functions. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const ALLOW_OPTIONS = Object.freeze([ - "functions", - "arrowFunctions", - "generatorFunctions", - "methods", - "generatorMethods", - "getters", - "setters", - "constructors" -]); - -/** - * Gets the kind of a given function node. - * - * @param {ASTNode} node - A function node to get. This is one of - * an ArrowFunctionExpression, a FunctionDeclaration, or a - * FunctionExpression. - * @returns {string} The kind of the function. This is one of "functions", - * "arrowFunctions", "generatorFunctions", "asyncFunctions", "methods", - * "generatorMethods", "asyncMethods", "getters", "setters", and - * "constructors". - */ -function getKind(node) { - const parent = node.parent; - let kind = ""; - - if (node.type === "ArrowFunctionExpression") { - return "arrowFunctions"; - } - - // Detects main kind. - if (parent.type === "Property") { - if (parent.kind === "get") { - return "getters"; - } - if (parent.kind === "set") { - return "setters"; - } - kind = parent.method ? "methods" : "functions"; - - } else if (parent.type === "MethodDefinition") { - if (parent.kind === "get") { - return "getters"; - } - if (parent.kind === "set") { - return "setters"; - } - if (parent.kind === "constructor") { - return "constructors"; - } - kind = "methods"; - - } else { - kind = "functions"; - } - - // Detects prefix. - let prefix = ""; - - if (node.generator) { - prefix = "generator"; - } else if (node.async) { - prefix = "async"; - } else { - return kind; - } - return prefix + kind[0].toUpperCase() + kind.slice(1); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow empty functions", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-empty-function" - }, - - schema: [ - { - type: "object", - properties: { - allow: { - type: "array", - items: { enum: ALLOW_OPTIONS }, - uniqueItems: true - } - }, - additionalProperties: false - } - ], - - messages: { - unexpected: "Unexpected empty {{name}}." - } - }, - - create(context) { - const options = context.options[0] || {}; - const allowed = options.allow || []; - - const sourceCode = context.getSourceCode(); - - /** - * Reports a given function node if the node matches the following patterns. - * - * - Not allowed by options. - * - The body is empty. - * - The body doesn't have any comments. - * - * @param {ASTNode} node - A function node to report. This is one of - * an ArrowFunctionExpression, a FunctionDeclaration, or a - * FunctionExpression. - * @returns {void} - */ - function reportIfEmpty(node) { - const kind = getKind(node); - const name = astUtils.getFunctionNameWithKind(node); - const innerComments = sourceCode.getTokens(node.body, { - includeComments: true, - filter: astUtils.isCommentToken - }); - - if (allowed.indexOf(kind) === -1 && - node.body.type === "BlockStatement" && - node.body.body.length === 0 && - innerComments.length === 0 - ) { - context.report({ - node, - loc: node.body.loc.start, - messageId: "unexpected", - data: { name } - }); - } - } - - return { - ArrowFunctionExpression: reportIfEmpty, - FunctionDeclaration: reportIfEmpty, - FunctionExpression: reportIfEmpty - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-empty-pattern.js b/node_modules/eslint/lib/rules/no-empty-pattern.js deleted file mode 100644 index 9397105..0000000 --- a/node_modules/eslint/lib/rules/no-empty-pattern.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @fileoverview Rule to disallow an empty pattern - * @author Alberto Rodríguez - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow empty destructuring patterns", - category: "Best Practices", - recommended: true, - url: "https://eslint.org/docs/rules/no-empty-pattern" - }, - - schema: [], - - messages: { - unexpected: "Unexpected empty {{type}} pattern." - } - }, - - create(context) { - return { - ObjectPattern(node) { - if (node.properties.length === 0) { - context.report({ node, messageId: "unexpected", data: { type: "object" } }); - } - }, - ArrayPattern(node) { - if (node.elements.length === 0) { - context.report({ node, messageId: "unexpected", data: { type: "array" } }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-empty.js b/node_modules/eslint/lib/rules/no-empty.js deleted file mode 100644 index a598d40..0000000 --- a/node_modules/eslint/lib/rules/no-empty.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @fileoverview Rule to flag use of an empty block statement - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow empty block statements", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-empty" - }, - - schema: [ - { - type: "object", - properties: { - allowEmptyCatch: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - messages: { - unexpected: "Empty {{type}} statement." - } - }, - - create(context) { - const options = context.options[0] || {}, - allowEmptyCatch = options.allowEmptyCatch || false; - - const sourceCode = context.getSourceCode(); - - return { - BlockStatement(node) { - - // if the body is not empty, we can just return immediately - if (node.body.length !== 0) { - return; - } - - // a function is generally allowed to be empty - if (astUtils.isFunction(node.parent)) { - return; - } - - if (allowEmptyCatch && node.parent.type === "CatchClause") { - return; - } - - // any other block is only allowed to be empty, if it contains a comment - if (sourceCode.getCommentsInside(node).length > 0) { - return; - } - - context.report({ node, messageId: "unexpected", data: { type: "block" } }); - }, - - SwitchStatement(node) { - - if (typeof node.cases === "undefined" || node.cases.length === 0) { - context.report({ node, messageId: "unexpected", data: { type: "switch" } }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-eq-null.js b/node_modules/eslint/lib/rules/no-eq-null.js deleted file mode 100644 index eadd16d..0000000 --- a/node_modules/eslint/lib/rules/no-eq-null.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @fileoverview Rule to flag comparisons to null without a type-checking - * operator. - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `null` comparisons without type-checking operators", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-eq-null" - }, - - schema: [], - - messages: { - unexpected: "Use '===' to compare with null." - } - }, - - create(context) { - - return { - - BinaryExpression(node) { - const badOperator = node.operator === "==" || node.operator === "!="; - - if (node.right.type === "Literal" && node.right.raw === "null" && badOperator || - node.left.type === "Literal" && node.left.raw === "null" && badOperator) { - context.report({ node, messageId: "unexpected" }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-eval.js b/node_modules/eslint/lib/rules/no-eval.js deleted file mode 100644 index 68ed086..0000000 --- a/node_modules/eslint/lib/rules/no-eval.js +++ /dev/null @@ -1,312 +0,0 @@ -/** - * @fileoverview Rule to flag use of eval() statement - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const candidatesOfGlobalObject = Object.freeze([ - "global", - "window" -]); - -/** - * Checks a given node is a Identifier node of the specified name. - * - * @param {ASTNode} node - A node to check. - * @param {string} name - A name to check. - * @returns {boolean} `true` if the node is a Identifier node of the name. - */ -function isIdentifier(node, name) { - return node.type === "Identifier" && node.name === name; -} - -/** - * Checks a given node is a Literal node of the specified string value. - * - * @param {ASTNode} node - A node to check. - * @param {string} name - A name to check. - * @returns {boolean} `true` if the node is a Literal node of the name. - */ -function isConstant(node, name) { - switch (node.type) { - case "Literal": - return node.value === name; - - case "TemplateLiteral": - return ( - node.expressions.length === 0 && - node.quasis[0].value.cooked === name - ); - - default: - return false; - } -} - -/** - * Checks a given node is a MemberExpression node which has the specified name's - * property. - * - * @param {ASTNode} node - A node to check. - * @param {string} name - A name to check. - * @returns {boolean} `true` if the node is a MemberExpression node which has - * the specified name's property - */ -function isMember(node, name) { - return ( - node.type === "MemberExpression" && - (node.computed ? isConstant : isIdentifier)(node.property, name) - ); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of `eval()`", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-eval" - }, - - schema: [ - { - type: "object", - properties: { - allowIndirect: { type: "boolean" } - }, - additionalProperties: false - } - ], - - messages: { - unexpected: "eval can be harmful." - } - }, - - create(context) { - const allowIndirect = Boolean( - context.options[0] && - context.options[0].allowIndirect - ); - const sourceCode = context.getSourceCode(); - let funcInfo = null; - - /** - * Pushs a variable scope (Program or Function) information to the stack. - * - * This is used in order to check whether or not `this` binding is a - * reference to the global object. - * - * @param {ASTNode} node - A node of the scope. This is one of Program, - * FunctionDeclaration, FunctionExpression, and ArrowFunctionExpression. - * @returns {void} - */ - function enterVarScope(node) { - const strict = context.getScope().isStrict; - - funcInfo = { - upper: funcInfo, - node, - strict, - defaultThis: false, - initialized: strict - }; - } - - /** - * Pops a variable scope from the stack. - * - * @returns {void} - */ - function exitVarScope() { - funcInfo = funcInfo.upper; - } - - /** - * Reports a given node. - * - * `node` is `Identifier` or `MemberExpression`. - * The parent of `node` might be `CallExpression`. - * - * The location of the report is always `eval` `Identifier` (or possibly - * `Literal`). The type of the report is `CallExpression` if the parent is - * `CallExpression`. Otherwise, it's the given node type. - * - * @param {ASTNode} node - A node to report. - * @returns {void} - */ - function report(node) { - const parent = node.parent; - const locationNode = node.type === "MemberExpression" - ? node.property - : node; - - const reportNode = parent.type === "CallExpression" && parent.callee === node - ? parent - : node; - - context.report({ - node: reportNode, - loc: locationNode.loc.start, - messageId: "unexpected" - }); - } - - /** - * Reports accesses of `eval` via the global object. - * - * @param {eslint-scope.Scope} globalScope - The global scope. - * @returns {void} - */ - function reportAccessingEvalViaGlobalObject(globalScope) { - for (let i = 0; i < candidatesOfGlobalObject.length; ++i) { - const name = candidatesOfGlobalObject[i]; - const variable = astUtils.getVariableByName(globalScope, name); - - if (!variable) { - continue; - } - - const references = variable.references; - - for (let j = 0; j < references.length; ++j) { - const identifier = references[j].identifier; - let node = identifier.parent; - - // To detect code like `window.window.eval`. - while (isMember(node, name)) { - node = node.parent; - } - - // Reports. - if (isMember(node, "eval")) { - report(node); - } - } - } - } - - /** - * Reports all accesses of `eval` (excludes direct calls to eval). - * - * @param {eslint-scope.Scope} globalScope - The global scope. - * @returns {void} - */ - function reportAccessingEval(globalScope) { - const variable = astUtils.getVariableByName(globalScope, "eval"); - - if (!variable) { - return; - } - - const references = variable.references; - - for (let i = 0; i < references.length; ++i) { - const reference = references[i]; - const id = reference.identifier; - - if (id.name === "eval" && !astUtils.isCallee(id)) { - - // Is accessing to eval (excludes direct calls to eval) - report(id); - } - } - } - - if (allowIndirect) { - - // Checks only direct calls to eval. It's simple! - return { - "CallExpression:exit"(node) { - const callee = node.callee; - - if (isIdentifier(callee, "eval")) { - report(callee); - } - } - }; - } - - return { - "CallExpression:exit"(node) { - const callee = node.callee; - - if (isIdentifier(callee, "eval")) { - report(callee); - } - }, - - Program(node) { - const scope = context.getScope(), - features = context.parserOptions.ecmaFeatures || {}, - strict = - scope.isStrict || - node.sourceType === "module" || - (features.globalReturn && scope.childScopes[0].isStrict); - - funcInfo = { - upper: null, - node, - strict, - defaultThis: true, - initialized: true - }; - }, - - "Program:exit"() { - const globalScope = context.getScope(); - - exitVarScope(); - reportAccessingEval(globalScope); - reportAccessingEvalViaGlobalObject(globalScope); - }, - - FunctionDeclaration: enterVarScope, - "FunctionDeclaration:exit": exitVarScope, - FunctionExpression: enterVarScope, - "FunctionExpression:exit": exitVarScope, - ArrowFunctionExpression: enterVarScope, - "ArrowFunctionExpression:exit": exitVarScope, - - ThisExpression(node) { - if (!isMember(node.parent, "eval")) { - return; - } - - /* - * `this.eval` is found. - * Checks whether or not the value of `this` is the global object. - */ - if (!funcInfo.initialized) { - funcInfo.initialized = true; - funcInfo.defaultThis = astUtils.isDefaultThisBinding( - funcInfo.node, - sourceCode - ); - } - - if (!funcInfo.strict && funcInfo.defaultThis) { - - // `this.eval` is possible built-in `eval`. - report(node.parent); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-ex-assign.js b/node_modules/eslint/lib/rules/no-ex-assign.js deleted file mode 100644 index feace41..0000000 --- a/node_modules/eslint/lib/rules/no-ex-assign.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * @fileoverview Rule to flag assignment of the exception parameter - * @author Stephen Murray - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow reassigning exceptions in `catch` clauses", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-ex-assign" - }, - - schema: [], - - messages: { - unexpected: "Do not assign to the exception parameter." - } - }, - - create(context) { - - /** - * Finds and reports references that are non initializer and writable. - * @param {Variable} variable - A variable to check. - * @returns {void} - */ - function checkVariable(variable) { - astUtils.getModifyingReferences(variable.references).forEach(reference => { - context.report({ node: reference.identifier, messageId: "unexpected" }); - }); - } - - return { - CatchClause(node) { - context.getDeclaredVariables(node).forEach(checkVariable); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-extend-native.js b/node_modules/eslint/lib/rules/no-extend-native.js deleted file mode 100644 index 3ba1309..0000000 --- a/node_modules/eslint/lib/rules/no-extend-native.js +++ /dev/null @@ -1,179 +0,0 @@ -/** - * @fileoverview Rule to flag adding properties to native object's prototypes. - * @author David Nelson - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); -const globals = require("globals"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const propertyDefinitionMethods = new Set(["defineProperty", "defineProperties"]); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow extending native types", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-extend-native" - }, - - schema: [ - { - type: "object", - properties: { - exceptions: { - type: "array", - items: { - type: "string" - }, - uniqueItems: true - } - }, - additionalProperties: false - } - ], - - messages: { - unexpected: "{{builtin}} prototype is read only, properties should not be added." - } - }, - - create(context) { - - const config = context.options[0] || {}; - const exceptions = new Set(config.exceptions || []); - const modifiedBuiltins = new Set( - Object.keys(globals.builtin) - .filter(builtin => builtin[0].toUpperCase() === builtin[0]) - .filter(builtin => !exceptions.has(builtin)) - ); - - /** - * Reports a lint error for the given node. - * @param {ASTNode} node The node to report. - * @param {string} builtin The name of the native builtin being extended. - * @returns {void} - */ - function reportNode(node, builtin) { - context.report({ - node, - messageId: "unexpected", - data: { - builtin - } - }); - } - - /** - * Check to see if the `prototype` property of the given object - * identifier node is being accessed. - * @param {ASTNode} identifierNode The Identifier representing the object - * to check. - * @returns {boolean} True if the identifier is the object of a - * MemberExpression and its `prototype` property is being accessed, - * false otherwise. - */ - function isPrototypePropertyAccessed(identifierNode) { - return Boolean( - identifierNode && - identifierNode.parent && - identifierNode.parent.type === "MemberExpression" && - identifierNode.parent.object === identifierNode && - astUtils.getStaticPropertyName(identifierNode.parent) === "prototype" - ); - } - - /** - * Checks that an identifier is an object of a prototype whose member - * is being assigned in an AssignmentExpression. - * Example: Object.prototype.foo = "bar" - * @param {ASTNode} identifierNode The identifier to check. - * @returns {boolean} True if the identifier's prototype is modified. - */ - function isInPrototypePropertyAssignment(identifierNode) { - return Boolean( - isPrototypePropertyAccessed(identifierNode) && - identifierNode.parent.parent.type === "MemberExpression" && - identifierNode.parent.parent.parent.type === "AssignmentExpression" && - identifierNode.parent.parent.parent.left === identifierNode.parent.parent - ); - } - - /** - * Checks that an identifier is an object of a prototype whose member - * is being extended via the Object.defineProperty() or - * Object.defineProperties() methods. - * Example: Object.defineProperty(Array.prototype, "foo", ...) - * Example: Object.defineProperties(Array.prototype, ...) - * @param {ASTNode} identifierNode The identifier to check. - * @returns {boolean} True if the identifier's prototype is modified. - */ - function isInDefinePropertyCall(identifierNode) { - return Boolean( - isPrototypePropertyAccessed(identifierNode) && - identifierNode.parent.parent.type === "CallExpression" && - identifierNode.parent.parent.arguments[0] === identifierNode.parent && - identifierNode.parent.parent.callee.type === "MemberExpression" && - identifierNode.parent.parent.callee.object.type === "Identifier" && - identifierNode.parent.parent.callee.object.name === "Object" && - identifierNode.parent.parent.callee.property.type === "Identifier" && - propertyDefinitionMethods.has(identifierNode.parent.parent.callee.property.name) - ); - } - - /** - * Check to see if object prototype access is part of a prototype - * extension. There are three ways a prototype can be extended: - * 1. Assignment to prototype property (Object.prototype.foo = 1) - * 2. Object.defineProperty()/Object.defineProperties() on a prototype - * If prototype extension is detected, report the AssignmentExpression - * or CallExpression node. - * @param {ASTNode} identifierNode The Identifier representing the object - * which prototype is being accessed and possibly extended. - * @returns {void} - */ - function checkAndReportPrototypeExtension(identifierNode) { - if (isInPrototypePropertyAssignment(identifierNode)) { - - // Identifier --> MemberExpression --> MemberExpression --> AssignmentExpression - reportNode(identifierNode.parent.parent.parent, identifierNode.name); - } else if (isInDefinePropertyCall(identifierNode)) { - - // Identifier --> MemberExpression --> CallExpression - reportNode(identifierNode.parent.parent, identifierNode.name); - } - } - - return { - - "Program:exit"() { - const globalScope = context.getScope(); - - modifiedBuiltins.forEach(builtin => { - const builtinVar = globalScope.set.get(builtin); - - if (builtinVar && builtinVar.references) { - builtinVar.references - .map(ref => ref.identifier) - .forEach(checkAndReportPrototypeExtension); - } - }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-extra-bind.js b/node_modules/eslint/lib/rules/no-extra-bind.js deleted file mode 100644 index 8d90180..0000000 --- a/node_modules/eslint/lib/rules/no-extra-bind.js +++ /dev/null @@ -1,150 +0,0 @@ -/** - * @fileoverview Rule to flag unnecessary bind calls - * @author Bence Dányi - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary calls to `.bind()`", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-extra-bind" - }, - - schema: [], - - fixable: "code", - - messages: { - unexpected: "The function binding is unnecessary." - } - }, - - create(context) { - let scopeInfo = null; - - /** - * Reports a given function node. - * - * @param {ASTNode} node - A node to report. This is a FunctionExpression or - * an ArrowFunctionExpression. - * @returns {void} - */ - function report(node) { - context.report({ - node: node.parent.parent, - messageId: "unexpected", - loc: node.parent.property.loc.start, - fix(fixer) { - const firstTokenToRemove = context.getSourceCode() - .getFirstTokenBetween(node.parent.object, node.parent.property, astUtils.isNotClosingParenToken); - - return fixer.removeRange([firstTokenToRemove.range[0], node.parent.parent.range[1]]); - } - }); - } - - /** - * Checks whether or not a given function node is the callee of `.bind()` - * method. - * - * e.g. `(function() {}.bind(foo))` - * - * @param {ASTNode} node - A node to report. This is a FunctionExpression or - * an ArrowFunctionExpression. - * @returns {boolean} `true` if the node is the callee of `.bind()` method. - */ - function isCalleeOfBindMethod(node) { - const parent = node.parent; - const grandparent = parent.parent; - - return ( - grandparent && - grandparent.type === "CallExpression" && - grandparent.callee === parent && - grandparent.arguments.length === 1 && - parent.type === "MemberExpression" && - parent.object === node && - astUtils.getStaticPropertyName(parent) === "bind" - ); - } - - /** - * Adds a scope information object to the stack. - * - * @param {ASTNode} node - A node to add. This node is a FunctionExpression - * or a FunctionDeclaration node. - * @returns {void} - */ - function enterFunction(node) { - scopeInfo = { - isBound: isCalleeOfBindMethod(node), - thisFound: false, - upper: scopeInfo - }; - } - - /** - * Removes the scope information object from the top of the stack. - * At the same time, this reports the function node if the function has - * `.bind()` and the `this` keywords found. - * - * @param {ASTNode} node - A node to remove. This node is a - * FunctionExpression or a FunctionDeclaration node. - * @returns {void} - */ - function exitFunction(node) { - if (scopeInfo.isBound && !scopeInfo.thisFound) { - report(node); - } - - scopeInfo = scopeInfo.upper; - } - - /** - * Reports a given arrow function if the function is callee of `.bind()` - * method. - * - * @param {ASTNode} node - A node to report. This node is an - * ArrowFunctionExpression. - * @returns {void} - */ - function exitArrowFunction(node) { - if (isCalleeOfBindMethod(node)) { - report(node); - } - } - - /** - * Set the mark as the `this` keyword was found in this scope. - * - * @returns {void} - */ - function markAsThisFound() { - if (scopeInfo) { - scopeInfo.thisFound = true; - } - } - - return { - "ArrowFunctionExpression:exit": exitArrowFunction, - FunctionDeclaration: enterFunction, - "FunctionDeclaration:exit": exitFunction, - FunctionExpression: enterFunction, - "FunctionExpression:exit": exitFunction, - ThisExpression: markAsThisFound - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-extra-boolean-cast.js b/node_modules/eslint/lib/rules/no-extra-boolean-cast.js deleted file mode 100644 index 3819136..0000000 --- a/node_modules/eslint/lib/rules/no-extra-boolean-cast.js +++ /dev/null @@ -1,128 +0,0 @@ -/** - * @fileoverview Rule to flag unnecessary double negation in Boolean contexts - * @author Brandon Mills - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary boolean casts", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-extra-boolean-cast" - }, - - schema: [], - - fixable: "code", - - messages: { - unexpectedCall: "Redundant Boolean call.", - unexpectedNegation: "Redundant double negation." - } - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - // Node types which have a test which will coerce values to booleans. - const BOOLEAN_NODE_TYPES = [ - "IfStatement", - "DoWhileStatement", - "WhileStatement", - "ConditionalExpression", - "ForStatement" - ]; - - /** - * Check if a node is in a context where its value would be coerced to a boolean at runtime. - * - * @param {Object} node The node - * @param {Object} parent Its parent - * @returns {boolean} If it is in a boolean context - */ - function isInBooleanContext(node, parent) { - return ( - (BOOLEAN_NODE_TYPES.indexOf(parent.type) !== -1 && - node === parent.test) || - - // ! - (parent.type === "UnaryExpression" && - parent.operator === "!") - ); - } - - - return { - UnaryExpression(node) { - const ancestors = context.getAncestors(), - parent = ancestors.pop(), - grandparent = ancestors.pop(); - - // Exit early if it's guaranteed not to match - if (node.operator !== "!" || - parent.type !== "UnaryExpression" || - parent.operator !== "!") { - return; - } - - if (isInBooleanContext(parent, grandparent) || - - // Boolean() and new Boolean() - ((grandparent.type === "CallExpression" || grandparent.type === "NewExpression") && - grandparent.callee.type === "Identifier" && - grandparent.callee.name === "Boolean") - ) { - context.report({ - node, - messageId: "unexpectedNegation", - fix: fixer => fixer.replaceText(parent, sourceCode.getText(node.argument)) - }); - } - }, - CallExpression(node) { - const parent = node.parent; - - if (node.callee.type !== "Identifier" || node.callee.name !== "Boolean") { - return; - } - - if (isInBooleanContext(node, parent)) { - context.report({ - node, - messageId: "unexpectedCall", - fix: fixer => { - if (!node.arguments.length) { - return fixer.replaceText(parent, "true"); - } - - if (node.arguments.length > 1 || node.arguments[0].type === "SpreadElement") { - return null; - } - - const argument = node.arguments[0]; - - if (astUtils.getPrecedence(argument) < astUtils.getPrecedence(node.parent)) { - return fixer.replaceText(node, `(${sourceCode.getText(argument)})`); - } - return fixer.replaceText(node, sourceCode.getText(argument)); - } - }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-extra-label.js b/node_modules/eslint/lib/rules/no-extra-label.js deleted file mode 100644 index 73a3fea..0000000 --- a/node_modules/eslint/lib/rules/no-extra-label.js +++ /dev/null @@ -1,145 +0,0 @@ -/** - * @fileoverview Rule to disallow unnecessary labels - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary labels", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-extra-label" - }, - - schema: [], - - fixable: "code", - - messages: { - unexpected: "This label '{{name}}' is unnecessary." - } - }, - - create(context) { - const sourceCode = context.getSourceCode(); - let scopeInfo = null; - - /** - * Creates a new scope with a breakable statement. - * - * @param {ASTNode} node - A node to create. This is a BreakableStatement. - * @returns {void} - */ - function enterBreakableStatement(node) { - scopeInfo = { - label: node.parent.type === "LabeledStatement" ? node.parent.label : null, - breakable: true, - upper: scopeInfo - }; - } - - /** - * Removes the top scope of the stack. - * - * @returns {void} - */ - function exitBreakableStatement() { - scopeInfo = scopeInfo.upper; - } - - /** - * Creates a new scope with a labeled statement. - * - * This ignores it if the body is a breakable statement. - * In this case it's handled in the `enterBreakableStatement` function. - * - * @param {ASTNode} node - A node to create. This is a LabeledStatement. - * @returns {void} - */ - function enterLabeledStatement(node) { - if (!astUtils.isBreakableStatement(node.body)) { - scopeInfo = { - label: node.label, - breakable: false, - upper: scopeInfo - }; - } - } - - /** - * Removes the top scope of the stack. - * - * This ignores it if the body is a breakable statement. - * In this case it's handled in the `exitBreakableStatement` function. - * - * @param {ASTNode} node - A node. This is a LabeledStatement. - * @returns {void} - */ - function exitLabeledStatement(node) { - if (!astUtils.isBreakableStatement(node.body)) { - scopeInfo = scopeInfo.upper; - } - } - - /** - * Reports a given control node if it's unnecessary. - * - * @param {ASTNode} node - A node. This is a BreakStatement or a - * ContinueStatement. - * @returns {void} - */ - function reportIfUnnecessary(node) { - if (!node.label) { - return; - } - - const labelNode = node.label; - - for (let info = scopeInfo; info !== null; info = info.upper) { - if (info.breakable || info.label && info.label.name === labelNode.name) { - if (info.breakable && info.label && info.label.name === labelNode.name) { - context.report({ - node: labelNode, - messageId: "unexpected", - data: labelNode, - fix: fixer => fixer.removeRange([sourceCode.getFirstToken(node).range[1], labelNode.range[1]]) - }); - } - return; - } - } - } - - return { - WhileStatement: enterBreakableStatement, - "WhileStatement:exit": exitBreakableStatement, - DoWhileStatement: enterBreakableStatement, - "DoWhileStatement:exit": exitBreakableStatement, - ForStatement: enterBreakableStatement, - "ForStatement:exit": exitBreakableStatement, - ForInStatement: enterBreakableStatement, - "ForInStatement:exit": exitBreakableStatement, - ForOfStatement: enterBreakableStatement, - "ForOfStatement:exit": exitBreakableStatement, - SwitchStatement: enterBreakableStatement, - "SwitchStatement:exit": exitBreakableStatement, - LabeledStatement: enterLabeledStatement, - "LabeledStatement:exit": exitLabeledStatement, - BreakStatement: reportIfUnnecessary, - ContinueStatement: reportIfUnnecessary - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-extra-parens.js b/node_modules/eslint/lib/rules/no-extra-parens.js deleted file mode 100644 index 9765dfa..0000000 --- a/node_modules/eslint/lib/rules/no-extra-parens.js +++ /dev/null @@ -1,751 +0,0 @@ -/** - * @fileoverview Disallow parenthesising higher precedence subexpressions. - * @author Michael Ficarra - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils.js"); - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary parentheses", - category: "Possible Errors", - recommended: false, - url: "https://eslint.org/docs/rules/no-extra-parens" - }, - - fixable: "code", - - schema: { - anyOf: [ - { - type: "array", - items: [ - { - enum: ["functions"] - } - ], - minItems: 0, - maxItems: 1 - }, - { - type: "array", - items: [ - { - enum: ["all"] - }, - { - type: "object", - properties: { - conditionalAssign: { type: "boolean" }, - nestedBinaryExpressions: { type: "boolean" }, - returnAssign: { type: "boolean" }, - ignoreJSX: { enum: ["none", "all", "single-line", "multi-line"] }, - enforceForArrowConditionals: { type: "boolean" } - }, - additionalProperties: false - } - ], - minItems: 0, - maxItems: 2 - } - ] - }, - - messages: { - unexpected: "Gratuitous parentheses around expression." - } - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - const tokensToIgnore = new WeakSet(); - const isParenthesised = astUtils.isParenthesised.bind(astUtils, sourceCode); - const precedence = astUtils.getPrecedence; - const ALL_NODES = context.options[0] !== "functions"; - const EXCEPT_COND_ASSIGN = ALL_NODES && context.options[1] && context.options[1].conditionalAssign === false; - const NESTED_BINARY = ALL_NODES && context.options[1] && context.options[1].nestedBinaryExpressions === false; - const EXCEPT_RETURN_ASSIGN = ALL_NODES && context.options[1] && context.options[1].returnAssign === false; - const IGNORE_JSX = ALL_NODES && context.options[1] && context.options[1].ignoreJSX; - const IGNORE_ARROW_CONDITIONALS = ALL_NODES && context.options[1] && - context.options[1].enforceForArrowConditionals === false; - - const PRECEDENCE_OF_ASSIGNMENT_EXPR = precedence({ type: "AssignmentExpression" }); - const PRECEDENCE_OF_UPDATE_EXPR = precedence({ type: "UpdateExpression" }); - - /** - * Determines if this rule should be enforced for a node given the current configuration. - * @param {ASTNode} node - The node to be checked. - * @returns {boolean} True if the rule should be enforced for this node. - * @private - */ - function ruleApplies(node) { - if (node.type === "JSXElement") { - const isSingleLine = node.loc.start.line === node.loc.end.line; - - switch (IGNORE_JSX) { - - // Exclude this JSX element from linting - case "all": - return false; - - // Exclude this JSX element if it is multi-line element - case "multi-line": - return isSingleLine; - - // Exclude this JSX element if it is single-line element - case "single-line": - return !isSingleLine; - - // Nothing special to be done for JSX elements - case "none": - break; - - // no default - } - } - - return ALL_NODES || node.type === "FunctionExpression" || node.type === "ArrowFunctionExpression"; - } - - /** - * Determines if a node is surrounded by parentheses twice. - * @param {ASTNode} node - The node to be checked. - * @returns {boolean} True if the node is doubly parenthesised. - * @private - */ - function isParenthesisedTwice(node) { - const previousToken = sourceCode.getTokenBefore(node, 1), - nextToken = sourceCode.getTokenAfter(node, 1); - - return isParenthesised(node) && previousToken && nextToken && - astUtils.isOpeningParenToken(previousToken) && previousToken.range[1] <= node.range[0] && - astUtils.isClosingParenToken(nextToken) && nextToken.range[0] >= node.range[1]; - } - - /** - * Determines if a node is surrounded by (potentially) invalid parentheses. - * @param {ASTNode} node - The node to be checked. - * @returns {boolean} True if the node is incorrectly parenthesised. - * @private - */ - function hasExcessParens(node) { - return ruleApplies(node) && isParenthesised(node); - } - - /** - * Determines if a node that is expected to be parenthesised is surrounded by - * (potentially) invalid extra parentheses. - * @param {ASTNode} node - The node to be checked. - * @returns {boolean} True if the node is has an unexpected extra pair of parentheses. - * @private - */ - function hasDoubleExcessParens(node) { - return ruleApplies(node) && isParenthesisedTwice(node); - } - - /** - * Determines if a node test expression is allowed to have a parenthesised assignment - * @param {ASTNode} node - The node to be checked. - * @returns {boolean} True if the assignment can be parenthesised. - * @private - */ - function isCondAssignException(node) { - return EXCEPT_COND_ASSIGN && node.test.type === "AssignmentExpression"; - } - - /** - * Determines if a node is in a return statement - * @param {ASTNode} node - The node to be checked. - * @returns {boolean} True if the node is in a return statement. - * @private - */ - function isInReturnStatement(node) { - for (let currentNode = node; currentNode; currentNode = currentNode.parent) { - if ( - currentNode.type === "ReturnStatement" || - (currentNode.type === "ArrowFunctionExpression" && currentNode.body.type !== "BlockStatement") - ) { - return true; - } - } - - return false; - } - - /** - * Determines if a constructor function is newed-up with parens - * @param {ASTNode} newExpression - The NewExpression node to be checked. - * @returns {boolean} True if the constructor is called with parens. - * @private - */ - function isNewExpressionWithParens(newExpression) { - const lastToken = sourceCode.getLastToken(newExpression); - const penultimateToken = sourceCode.getTokenBefore(lastToken); - - return newExpression.arguments.length > 0 || astUtils.isOpeningParenToken(penultimateToken) && astUtils.isClosingParenToken(lastToken); - } - - /** - * Determines if a node is or contains an assignment expression - * @param {ASTNode} node - The node to be checked. - * @returns {boolean} True if the node is or contains an assignment expression. - * @private - */ - function containsAssignment(node) { - if (node.type === "AssignmentExpression") { - return true; - } - if (node.type === "ConditionalExpression" && - (node.consequent.type === "AssignmentExpression" || node.alternate.type === "AssignmentExpression")) { - return true; - } - if ((node.left && node.left.type === "AssignmentExpression") || - (node.right && node.right.type === "AssignmentExpression")) { - return true; - } - - return false; - } - - /** - * Determines if a node is contained by or is itself a return statement and is allowed to have a parenthesised assignment - * @param {ASTNode} node - The node to be checked. - * @returns {boolean} True if the assignment can be parenthesised. - * @private - */ - function isReturnAssignException(node) { - if (!EXCEPT_RETURN_ASSIGN || !isInReturnStatement(node)) { - return false; - } - - if (node.type === "ReturnStatement") { - return node.argument && containsAssignment(node.argument); - } - if (node.type === "ArrowFunctionExpression" && node.body.type !== "BlockStatement") { - return containsAssignment(node.body); - } - return containsAssignment(node); - - } - - /** - * Determines if a node following a [no LineTerminator here] restriction is - * surrounded by (potentially) invalid extra parentheses. - * @param {Token} token - The token preceding the [no LineTerminator here] restriction. - * @param {ASTNode} node - The node to be checked. - * @returns {boolean} True if the node is incorrectly parenthesised. - * @private - */ - function hasExcessParensNoLineTerminator(token, node) { - if (token.loc.end.line === node.loc.start.line) { - return hasExcessParens(node); - } - - return hasDoubleExcessParens(node); - } - - /** - * Determines whether a node should be preceded by an additional space when removing parens - * @param {ASTNode} node node to evaluate; must be surrounded by parentheses - * @returns {boolean} `true` if a space should be inserted before the node - * @private - */ - function requiresLeadingSpace(node) { - const leftParenToken = sourceCode.getTokenBefore(node); - const tokenBeforeLeftParen = sourceCode.getTokenBefore(node, 1); - const firstToken = sourceCode.getFirstToken(node); - - return tokenBeforeLeftParen && - tokenBeforeLeftParen.range[1] === leftParenToken.range[0] && - leftParenToken.range[1] === firstToken.range[0] && - !astUtils.canTokensBeAdjacent(tokenBeforeLeftParen, firstToken); - } - - /** - * Determines whether a node should be followed by an additional space when removing parens - * @param {ASTNode} node node to evaluate; must be surrounded by parentheses - * @returns {boolean} `true` if a space should be inserted after the node - * @private - */ - function requiresTrailingSpace(node) { - const nextTwoTokens = sourceCode.getTokensAfter(node, { count: 2 }); - const rightParenToken = nextTwoTokens[0]; - const tokenAfterRightParen = nextTwoTokens[1]; - const tokenBeforeRightParen = sourceCode.getLastToken(node); - - return rightParenToken && tokenAfterRightParen && - !sourceCode.isSpaceBetweenTokens(rightParenToken, tokenAfterRightParen) && - !astUtils.canTokensBeAdjacent(tokenBeforeRightParen, tokenAfterRightParen); - } - - /** - * Determines if a given expression node is an IIFE - * @param {ASTNode} node The node to check - * @returns {boolean} `true` if the given node is an IIFE - */ - function isIIFE(node) { - return node.type === "CallExpression" && node.callee.type === "FunctionExpression"; - } - - /** - * Report the node - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function report(node) { - const leftParenToken = sourceCode.getTokenBefore(node); - const rightParenToken = sourceCode.getTokenAfter(node); - - if (!isParenthesisedTwice(node)) { - if (tokensToIgnore.has(sourceCode.getFirstToken(node))) { - return; - } - - if (isIIFE(node) && !isParenthesised(node.callee)) { - return; - } - } - - context.report({ - node, - loc: leftParenToken.loc.start, - messageId: "unexpected", - fix(fixer) { - const parenthesizedSource = sourceCode.text.slice(leftParenToken.range[1], rightParenToken.range[0]); - - return fixer.replaceTextRange([ - leftParenToken.range[0], - rightParenToken.range[1] - ], (requiresLeadingSpace(node) ? " " : "") + parenthesizedSource + (requiresTrailingSpace(node) ? " " : "")); - } - }); - } - - /** - * Evaluate Unary update - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkUnaryUpdate(node) { - if (node.type === "UnaryExpression" && node.argument.type === "BinaryExpression" && node.argument.operator === "**") { - return; - } - - if (hasExcessParens(node.argument) && precedence(node.argument) >= precedence(node)) { - report(node.argument); - } - } - - /** - * Check if a member expression contains a call expression - * @param {ASTNode} node MemberExpression node to evaluate - * @returns {boolean} true if found, false if not - */ - function doesMemberExpressionContainCallExpression(node) { - let currentNode = node.object; - let currentNodeType = node.object.type; - - while (currentNodeType === "MemberExpression") { - currentNode = currentNode.object; - currentNodeType = currentNode.type; - } - - return currentNodeType === "CallExpression"; - } - - /** - * Evaluate a new call - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkCallNew(node) { - const callee = node.callee; - - if (hasExcessParens(callee) && precedence(callee) >= precedence(node)) { - const hasNewParensException = callee.type === "NewExpression" && !isNewExpressionWithParens(callee); - - if ( - hasDoubleExcessParens(callee) || - !isIIFE(node) && !hasNewParensException && !( - - /* - * Allow extra parens around a new expression if - * there are intervening parentheses. - */ - callee.type === "MemberExpression" && - doesMemberExpressionContainCallExpression(callee) - ) - ) { - report(node.callee); - } - } - if (node.arguments.length === 1) { - if (hasDoubleExcessParens(node.arguments[0]) && precedence(node.arguments[0]) >= PRECEDENCE_OF_ASSIGNMENT_EXPR) { - report(node.arguments[0]); - } - } else { - node.arguments - .filter(arg => hasExcessParens(arg) && precedence(arg) >= PRECEDENCE_OF_ASSIGNMENT_EXPR) - .forEach(report); - } - } - - /** - * Evaluate binary logicals - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkBinaryLogical(node) { - const prec = precedence(node); - const leftPrecedence = precedence(node.left); - const rightPrecedence = precedence(node.right); - const isExponentiation = node.operator === "**"; - const shouldSkipLeft = (NESTED_BINARY && (node.left.type === "BinaryExpression" || node.left.type === "LogicalExpression")) || - node.left.type === "UnaryExpression" && isExponentiation; - const shouldSkipRight = NESTED_BINARY && (node.right.type === "BinaryExpression" || node.right.type === "LogicalExpression"); - - if (!shouldSkipLeft && hasExcessParens(node.left) && (leftPrecedence > prec || (leftPrecedence === prec && !isExponentiation))) { - report(node.left); - } - if (!shouldSkipRight && hasExcessParens(node.right) && (rightPrecedence > prec || (rightPrecedence === prec && isExponentiation))) { - report(node.right); - } - } - - /** - * Check the parentheses around the super class of the given class definition. - * @param {ASTNode} node The node of class declarations to check. - * @returns {void} - */ - function checkClass(node) { - if (!node.superClass) { - return; - } - - /* - * If `node.superClass` is a LeftHandSideExpression, parentheses are extra. - * Otherwise, parentheses are needed. - */ - const hasExtraParens = precedence(node.superClass) > PRECEDENCE_OF_UPDATE_EXPR - ? hasExcessParens(node.superClass) - : hasDoubleExcessParens(node.superClass); - - if (hasExtraParens) { - report(node.superClass); - } - } - - /** - * Check the parentheses around the argument of the given spread operator. - * @param {ASTNode} node The node of spread elements/properties to check. - * @returns {void} - */ - function checkSpreadOperator(node) { - const hasExtraParens = precedence(node.argument) >= PRECEDENCE_OF_ASSIGNMENT_EXPR - ? hasExcessParens(node.argument) - : hasDoubleExcessParens(node.argument); - - if (hasExtraParens) { - report(node.argument); - } - } - - /** - * Checks the parentheses for an ExpressionStatement or ExportDefaultDeclaration - * @param {ASTNode} node The ExpressionStatement.expression or ExportDefaultDeclaration.declaration node - * @returns {void} - */ - function checkExpressionOrExportStatement(node) { - const firstToken = isParenthesised(node) ? sourceCode.getTokenBefore(node) : sourceCode.getFirstToken(node); - const secondToken = sourceCode.getTokenAfter(firstToken, astUtils.isNotOpeningParenToken); - const thirdToken = secondToken ? sourceCode.getTokenAfter(secondToken) : null; - - if ( - astUtils.isOpeningParenToken(firstToken) && - ( - astUtils.isOpeningBraceToken(secondToken) || - secondToken.type === "Keyword" && ( - secondToken.value === "function" || - secondToken.value === "class" || - secondToken.value === "let" && astUtils.isOpeningBracketToken(sourceCode.getTokenAfter(secondToken, astUtils.isNotClosingParenToken)) - ) || - secondToken && secondToken.type === "Identifier" && secondToken.value === "async" && thirdToken && thirdToken.type === "Keyword" && thirdToken.value === "function" - ) - ) { - tokensToIgnore.add(secondToken); - } - - if (hasExcessParens(node)) { - report(node); - } - } - - return { - ArrayExpression(node) { - node.elements - .filter(e => e && hasExcessParens(e) && precedence(e) >= PRECEDENCE_OF_ASSIGNMENT_EXPR) - .forEach(report); - }, - - ArrowFunctionExpression(node) { - if (isReturnAssignException(node)) { - return; - } - - if (node.body.type === "ConditionalExpression" && - IGNORE_ARROW_CONDITIONALS && - !isParenthesisedTwice(node.body) - ) { - return; - } - - if (node.body.type !== "BlockStatement") { - const firstBodyToken = sourceCode.getFirstToken(node.body, astUtils.isNotOpeningParenToken); - const tokenBeforeFirst = sourceCode.getTokenBefore(firstBodyToken); - - if (astUtils.isOpeningParenToken(tokenBeforeFirst) && astUtils.isOpeningBraceToken(firstBodyToken)) { - tokensToIgnore.add(firstBodyToken); - } - if (hasExcessParens(node.body) && precedence(node.body) >= PRECEDENCE_OF_ASSIGNMENT_EXPR) { - report(node.body); - } - } - }, - - AssignmentExpression(node) { - if (isReturnAssignException(node)) { - return; - } - - if (hasExcessParens(node.right) && precedence(node.right) >= precedence(node)) { - report(node.right); - } - }, - - BinaryExpression: checkBinaryLogical, - CallExpression: checkCallNew, - - ConditionalExpression(node) { - if (isReturnAssignException(node)) { - return; - } - - if (hasExcessParens(node.test) && precedence(node.test) >= precedence({ type: "LogicalExpression", operator: "||" })) { - report(node.test); - } - - if (hasExcessParens(node.consequent) && precedence(node.consequent) >= PRECEDENCE_OF_ASSIGNMENT_EXPR) { - report(node.consequent); - } - - if (hasExcessParens(node.alternate) && precedence(node.alternate) >= PRECEDENCE_OF_ASSIGNMENT_EXPR) { - report(node.alternate); - } - }, - - DoWhileStatement(node) { - if (hasDoubleExcessParens(node.test) && !isCondAssignException(node)) { - report(node.test); - } - }, - - ExportDefaultDeclaration: node => checkExpressionOrExportStatement(node.declaration), - ExpressionStatement: node => checkExpressionOrExportStatement(node.expression), - - "ForInStatement, ForOfStatement"(node) { - if (node.left.type !== "VariableDeclarator") { - const firstLeftToken = sourceCode.getFirstToken(node.left, astUtils.isNotOpeningParenToken); - - if ( - firstLeftToken.value === "let" && ( - - /* - * If `let` is the only thing on the left side of the loop, it's the loop variable: `for ((let) of foo);` - * Removing it will cause a syntax error, because it will be parsed as the start of a VariableDeclarator. - */ - firstLeftToken.range[1] === node.left.range[1] || - - /* - * If `let` is followed by a `[` token, it's a property access on the `let` value: `for ((let[foo]) of bar);` - * Removing it will cause the property access to be parsed as a destructuring declaration of `foo` instead. - */ - astUtils.isOpeningBracketToken( - sourceCode.getTokenAfter(firstLeftToken, astUtils.isNotClosingParenToken) - ) - ) - ) { - tokensToIgnore.add(firstLeftToken); - } - } - if (!(node.type === "ForOfStatement" && node.right.type === "SequenceExpression") && hasExcessParens(node.right)) { - report(node.right); - } - if (hasExcessParens(node.left)) { - report(node.left); - } - }, - - ForStatement(node) { - if (node.init && hasExcessParens(node.init)) { - report(node.init); - } - - if (node.test && hasExcessParens(node.test) && !isCondAssignException(node)) { - report(node.test); - } - - if (node.update && hasExcessParens(node.update)) { - report(node.update); - } - }, - - IfStatement(node) { - if (hasDoubleExcessParens(node.test) && !isCondAssignException(node)) { - report(node.test); - } - }, - - LogicalExpression: checkBinaryLogical, - - MemberExpression(node) { - const nodeObjHasExcessParens = hasExcessParens(node.object); - - if ( - nodeObjHasExcessParens && - precedence(node.object) >= precedence(node) && - ( - node.computed || - !( - astUtils.isDecimalInteger(node.object) || - - // RegExp literal is allowed to have parens (#1589) - (node.object.type === "Literal" && node.object.regex) - ) - ) - ) { - report(node.object); - } - - if (nodeObjHasExcessParens && - node.object.type === "CallExpression" && - node.parent.type !== "NewExpression") { - report(node.object); - } - - if (node.computed && hasExcessParens(node.property)) { - report(node.property); - } - }, - - NewExpression: checkCallNew, - - ObjectExpression(node) { - node.properties - .filter(property => { - const value = property.value; - - return value && hasExcessParens(value) && precedence(value) >= PRECEDENCE_OF_ASSIGNMENT_EXPR; - }).forEach(property => report(property.value)); - }, - - ReturnStatement(node) { - const returnToken = sourceCode.getFirstToken(node); - - if (isReturnAssignException(node)) { - return; - } - - if (node.argument && - hasExcessParensNoLineTerminator(returnToken, node.argument) && - - // RegExp literal is allowed to have parens (#1589) - !(node.argument.type === "Literal" && node.argument.regex)) { - report(node.argument); - } - }, - - SequenceExpression(node) { - node.expressions - .filter(e => hasExcessParens(e) && precedence(e) >= precedence(node)) - .forEach(report); - }, - - SwitchCase(node) { - if (node.test && hasExcessParens(node.test)) { - report(node.test); - } - }, - - SwitchStatement(node) { - if (hasDoubleExcessParens(node.discriminant)) { - report(node.discriminant); - } - }, - - ThrowStatement(node) { - const throwToken = sourceCode.getFirstToken(node); - - if (hasExcessParensNoLineTerminator(throwToken, node.argument)) { - report(node.argument); - } - }, - - UnaryExpression: checkUnaryUpdate, - UpdateExpression: checkUnaryUpdate, - AwaitExpression: checkUnaryUpdate, - - VariableDeclarator(node) { - if (node.init && hasExcessParens(node.init) && - precedence(node.init) >= PRECEDENCE_OF_ASSIGNMENT_EXPR && - - // RegExp literal is allowed to have parens (#1589) - !(node.init.type === "Literal" && node.init.regex)) { - report(node.init); - } - }, - - WhileStatement(node) { - if (hasDoubleExcessParens(node.test) && !isCondAssignException(node)) { - report(node.test); - } - }, - - WithStatement(node) { - if (hasDoubleExcessParens(node.object)) { - report(node.object); - } - }, - - YieldExpression(node) { - if (node.argument) { - const yieldToken = sourceCode.getFirstToken(node); - - if ((precedence(node.argument) >= precedence(node) && - hasExcessParensNoLineTerminator(yieldToken, node.argument)) || - hasDoubleExcessParens(node.argument)) { - report(node.argument); - } - } - }, - - ClassDeclaration: checkClass, - ClassExpression: checkClass, - - SpreadElement: checkSpreadOperator, - SpreadProperty: checkSpreadOperator, - ExperimentalSpreadProperty: checkSpreadOperator - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-extra-semi.js b/node_modules/eslint/lib/rules/no-extra-semi.js deleted file mode 100644 index a074108..0000000 --- a/node_modules/eslint/lib/rules/no-extra-semi.js +++ /dev/null @@ -1,125 +0,0 @@ -/** - * @fileoverview Rule to flag use of unnecessary semicolons - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const FixTracker = require("../util/fix-tracker"); -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary semicolons", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-extra-semi" - }, - - fixable: "code", - schema: [], - - messages: { - unexpected: "Unnecessary semicolon." - } - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - /** - * Reports an unnecessary semicolon error. - * @param {Node|Token} nodeOrToken - A node or a token to be reported. - * @returns {void} - */ - function report(nodeOrToken) { - context.report({ - node: nodeOrToken, - messageId: "unexpected", - fix(fixer) { - - /* - * Expand the replacement range to include the surrounding - * tokens to avoid conflicting with semi. - * https://github.com/eslint/eslint/issues/7928 - */ - return new FixTracker(fixer, context.getSourceCode()) - .retainSurroundingTokens(nodeOrToken) - .remove(nodeOrToken); - } - }); - } - - /** - * Checks for a part of a class body. - * This checks tokens from a specified token to a next MethodDefinition or the end of class body. - * - * @param {Token} firstToken - The first token to check. - * @returns {void} - */ - function checkForPartOfClassBody(firstToken) { - for (let token = firstToken; - token.type === "Punctuator" && !astUtils.isClosingBraceToken(token); - token = sourceCode.getTokenAfter(token) - ) { - if (astUtils.isSemicolonToken(token)) { - report(token); - } - } - } - - return { - - /** - * Reports this empty statement, except if the parent node is a loop. - * @param {Node} node - A EmptyStatement node to be reported. - * @returns {void} - */ - EmptyStatement(node) { - const parent = node.parent, - allowedParentTypes = [ - "ForStatement", - "ForInStatement", - "ForOfStatement", - "WhileStatement", - "DoWhileStatement", - "IfStatement", - "LabeledStatement", - "WithStatement" - ]; - - if (allowedParentTypes.indexOf(parent.type) === -1) { - report(node); - } - }, - - /** - * Checks tokens from the head of this class body to the first MethodDefinition or the end of this class body. - * @param {Node} node - A ClassBody node to check. - * @returns {void} - */ - ClassBody(node) { - checkForPartOfClassBody(sourceCode.getFirstToken(node, 1)); // 0 is `{`. - }, - - /** - * Checks tokens from this MethodDefinition to the next MethodDefinition or the end of this class body. - * @param {Node} node - A MethodDefinition node of the start point. - * @returns {void} - */ - MethodDefinition(node) { - checkForPartOfClassBody(sourceCode.getTokenAfter(node)); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-fallthrough.js b/node_modules/eslint/lib/rules/no-fallthrough.js deleted file mode 100644 index ce4f91a..0000000 --- a/node_modules/eslint/lib/rules/no-fallthrough.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * @fileoverview Rule to flag fall-through cases in switch statements. - * @author Matt DuVall - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const DEFAULT_FALLTHROUGH_COMMENT = /falls?\s?through/i; - -/** - * Checks whether or not a given node has a fallthrough comment. - * @param {ASTNode} node - A SwitchCase node to get comments. - * @param {RuleContext} context - A rule context which stores comments. - * @param {RegExp} fallthroughCommentPattern - A pattern to match comment to. - * @returns {boolean} `true` if the node has a valid fallthrough comment. - */ -function hasFallthroughComment(node, context, fallthroughCommentPattern) { - const sourceCode = context.getSourceCode(); - const comment = lodash.last(sourceCode.getCommentsBefore(node)); - - return Boolean(comment && fallthroughCommentPattern.test(comment.value)); -} - -/** - * Checks whether or not a given code path segment is reachable. - * @param {CodePathSegment} segment - A CodePathSegment to check. - * @returns {boolean} `true` if the segment is reachable. - */ -function isReachable(segment) { - return segment.reachable; -} - -/** - * Checks whether a node and a token are separated by blank lines - * @param {ASTNode} node - The node to check - * @param {Token} token - The token to compare against - * @returns {boolean} `true` if there are blank lines between node and token - */ -function hasBlankLinesBetween(node, token) { - return token.loc.start.line > node.loc.end.line + 1; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow fallthrough of `case` statements", - category: "Best Practices", - recommended: true, - url: "https://eslint.org/docs/rules/no-fallthrough" - }, - - schema: [ - { - type: "object", - properties: { - commentPattern: { - type: "string" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const options = context.options[0] || {}; - let currentCodePath = null; - const sourceCode = context.getSourceCode(); - - /* - * We need to use leading comments of the next SwitchCase node because - * trailing comments is wrong if semicolons are omitted. - */ - let fallthroughCase = null; - let fallthroughCommentPattern = null; - - if (options.commentPattern) { - fallthroughCommentPattern = new RegExp(options.commentPattern); - } else { - fallthroughCommentPattern = DEFAULT_FALLTHROUGH_COMMENT; - } - - return { - onCodePathStart(codePath) { - currentCodePath = codePath; - }, - onCodePathEnd() { - currentCodePath = currentCodePath.upper; - }, - - SwitchCase(node) { - - /* - * Checks whether or not there is a fallthrough comment. - * And reports the previous fallthrough node if that does not exist. - */ - if (fallthroughCase && !hasFallthroughComment(node, context, fallthroughCommentPattern)) { - context.report({ - message: "Expected a 'break' statement before '{{type}}'.", - data: { type: node.test ? "case" : "default" }, - node - }); - } - fallthroughCase = null; - }, - - "SwitchCase:exit"(node) { - const nextToken = sourceCode.getTokenAfter(node); - - /* - * `reachable` meant fall through because statements preceded by - * `break`, `return`, or `throw` are unreachable. - * And allows empty cases and the last case. - */ - if (currentCodePath.currentSegments.some(isReachable) && - (node.consequent.length > 0 || hasBlankLinesBetween(node, nextToken)) && - lodash.last(node.parent.cases) !== node) { - fallthroughCase = node; - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-floating-decimal.js b/node_modules/eslint/lib/rules/no-floating-decimal.js deleted file mode 100644 index da8c479..0000000 --- a/node_modules/eslint/lib/rules/no-floating-decimal.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * @fileoverview Rule to flag use of a leading/trailing decimal point in a numeric literal - * @author James Allardice - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow leading or trailing decimal points in numeric literals", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-floating-decimal" - }, - - schema: [], - - fixable: "code" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - return { - Literal(node) { - - if (typeof node.value === "number") { - if (node.raw.startsWith(".")) { - context.report({ - node, - message: "A leading decimal point can be confused with a dot.", - fix(fixer) { - const tokenBefore = sourceCode.getTokenBefore(node); - const needsSpaceBefore = tokenBefore && - tokenBefore.range[1] === node.range[0] && - !astUtils.canTokensBeAdjacent(tokenBefore, `0${node.raw}`); - - return fixer.insertTextBefore(node, needsSpaceBefore ? " 0" : "0"); - } - }); - } - if (node.raw.indexOf(".") === node.raw.length - 1) { - context.report({ - node, - message: "A trailing decimal point can be confused with a dot.", - fix: fixer => fixer.insertTextAfter(node, "0") - }); - } - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-func-assign.js b/node_modules/eslint/lib/rules/no-func-assign.js deleted file mode 100644 index a0a17f3..0000000 --- a/node_modules/eslint/lib/rules/no-func-assign.js +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @fileoverview Rule to flag use of function declaration identifiers as variables. - * @author Ian Christian Myers - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow reassigning `function` declarations", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-func-assign" - }, - - schema: [] - }, - - create(context) { - - /** - * Reports a reference if is non initializer and writable. - * @param {References} references - Collection of reference to check. - * @returns {void} - */ - function checkReference(references) { - astUtils.getModifyingReferences(references).forEach(reference => { - context.report({ node: reference.identifier, message: "'{{name}}' is a function.", data: { name: reference.identifier.name } }); - }); - } - - /** - * Finds and reports references that are non initializer and writable. - * @param {Variable} variable - A variable to check. - * @returns {void} - */ - function checkVariable(variable) { - if (variable.defs[0].type === "FunctionName") { - checkReference(variable.references); - } - } - - /** - * Checks parameters of a given function node. - * @param {ASTNode} node - A function node to check. - * @returns {void} - */ - function checkForFunction(node) { - context.getDeclaredVariables(node).forEach(checkVariable); - } - - return { - FunctionDeclaration: checkForFunction, - FunctionExpression: checkForFunction - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-global-assign.js b/node_modules/eslint/lib/rules/no-global-assign.js deleted file mode 100644 index 3397bdb..0000000 --- a/node_modules/eslint/lib/rules/no-global-assign.js +++ /dev/null @@ -1,86 +0,0 @@ -/** - * @fileoverview Rule to disallow assignments to native objects or read-only global variables - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow assignments to native objects or read-only global variables", - category: "Best Practices", - recommended: true, - url: "https://eslint.org/docs/rules/no-global-assign" - }, - - schema: [ - { - type: "object", - properties: { - exceptions: { - type: "array", - items: { type: "string" }, - uniqueItems: true - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const config = context.options[0]; - const exceptions = (config && config.exceptions) || []; - - /** - * Reports write references. - * @param {Reference} reference - A reference to check. - * @param {int} index - The index of the reference in the references. - * @param {Reference[]} references - The array that the reference belongs to. - * @returns {void} - */ - function checkReference(reference, index, references) { - const identifier = reference.identifier; - - if (reference.init === false && - reference.isWrite() && - - /* - * Destructuring assignments can have multiple default value, - * so possibly there are multiple writeable references for the same identifier. - */ - (index === 0 || references[index - 1].identifier !== identifier) - ) { - context.report({ - node: identifier, - message: "Read-only global '{{name}}' should not be modified.", - data: identifier - }); - } - } - - /** - * Reports write references if a given variable is read-only builtin. - * @param {Variable} variable - A variable to check. - * @returns {void} - */ - function checkVariable(variable) { - if (variable.writeable === false && exceptions.indexOf(variable.name) === -1) { - variable.references.forEach(checkReference); - } - } - - return { - Program() { - const globalScope = context.getScope(); - - globalScope.variables.forEach(checkVariable); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-implicit-coercion.js b/node_modules/eslint/lib/rules/no-implicit-coercion.js deleted file mode 100644 index 1dd4d43..0000000 --- a/node_modules/eslint/lib/rules/no-implicit-coercion.js +++ /dev/null @@ -1,290 +0,0 @@ -/** - * @fileoverview A rule to disallow the type conversions with shorter notations. - * @author Toru Nagashima - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const INDEX_OF_PATTERN = /^(?:i|lastI)ndexOf$/; -const ALLOWABLE_OPERATORS = ["~", "!!", "+", "*"]; - -/** - * Parses and normalizes an option object. - * @param {Object} options - An option object to parse. - * @returns {Object} The parsed and normalized option object. - */ -function parseOptions(options) { - return { - boolean: "boolean" in options ? Boolean(options.boolean) : true, - number: "number" in options ? Boolean(options.number) : true, - string: "string" in options ? Boolean(options.string) : true, - allow: options.allow || [] - }; -} - -/** - * Checks whether or not a node is a double logical nigating. - * @param {ASTNode} node - An UnaryExpression node to check. - * @returns {boolean} Whether or not the node is a double logical nigating. - */ -function isDoubleLogicalNegating(node) { - return ( - node.operator === "!" && - node.argument.type === "UnaryExpression" && - node.argument.operator === "!" - ); -} - -/** - * Checks whether or not a node is a binary negating of `.indexOf()` method calling. - * @param {ASTNode} node - An UnaryExpression node to check. - * @returns {boolean} Whether or not the node is a binary negating of `.indexOf()` method calling. - */ -function isBinaryNegatingOfIndexOf(node) { - return ( - node.operator === "~" && - node.argument.type === "CallExpression" && - node.argument.callee.type === "MemberExpression" && - node.argument.callee.property.type === "Identifier" && - INDEX_OF_PATTERN.test(node.argument.callee.property.name) - ); -} - -/** - * Checks whether or not a node is a multiplying by one. - * @param {BinaryExpression} node - A BinaryExpression node to check. - * @returns {boolean} Whether or not the node is a multiplying by one. - */ -function isMultiplyByOne(node) { - return node.operator === "*" && ( - node.left.type === "Literal" && node.left.value === 1 || - node.right.type === "Literal" && node.right.value === 1 - ); -} - -/** - * Checks whether the result of a node is numeric or not - * @param {ASTNode} node The node to test - * @returns {boolean} true if the node is a number literal or a `Number()`, `parseInt` or `parseFloat` call - */ -function isNumeric(node) { - return ( - node.type === "Literal" && typeof node.value === "number" || - node.type === "CallExpression" && ( - node.callee.name === "Number" || - node.callee.name === "parseInt" || - node.callee.name === "parseFloat" - ) - ); -} - -/** - * Returns the first non-numeric operand in a BinaryExpression. Designed to be - * used from bottom to up since it walks up the BinaryExpression trees using - * node.parent to find the result. - * @param {BinaryExpression} node The BinaryExpression node to be walked up on - * @returns {ASTNode|null} The first non-numeric item in the BinaryExpression tree or null - */ -function getNonNumericOperand(node) { - const left = node.left, - right = node.right; - - if (right.type !== "BinaryExpression" && !isNumeric(right)) { - return right; - } - - if (left.type !== "BinaryExpression" && !isNumeric(left)) { - return left; - } - - return null; -} - -/** - * Checks whether a node is an empty string literal or not. - * @param {ASTNode} node The node to check. - * @returns {boolean} Whether or not the passed in node is an - * empty string literal or not. - */ -function isEmptyString(node) { - return astUtils.isStringLiteral(node) && (node.value === "" || (node.type === "TemplateLiteral" && node.quasis.length === 1 && node.quasis[0].value.cooked === "")); -} - -/** - * Checks whether or not a node is a concatenating with an empty string. - * @param {ASTNode} node - A BinaryExpression node to check. - * @returns {boolean} Whether or not the node is a concatenating with an empty string. - */ -function isConcatWithEmptyString(node) { - return node.operator === "+" && ( - (isEmptyString(node.left) && !astUtils.isStringLiteral(node.right)) || - (isEmptyString(node.right) && !astUtils.isStringLiteral(node.left)) - ); -} - -/** - * Checks whether or not a node is appended with an empty string. - * @param {ASTNode} node - An AssignmentExpression node to check. - * @returns {boolean} Whether or not the node is appended with an empty string. - */ -function isAppendEmptyString(node) { - return node.operator === "+=" && isEmptyString(node.right); -} - -/** - * Returns the operand that is not an empty string from a flagged BinaryExpression. - * @param {ASTNode} node - The flagged BinaryExpression node to check. - * @returns {ASTNode} The operand that is not an empty string from a flagged BinaryExpression. - */ -function getNonEmptyOperand(node) { - return isEmptyString(node.left) ? node.right : node.left; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow shorthand type conversions", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-implicit-coercion" - }, - - fixable: "code", - schema: [{ - type: "object", - properties: { - boolean: { - type: "boolean" - }, - number: { - type: "boolean" - }, - string: { - type: "boolean" - }, - allow: { - type: "array", - items: { - enum: ALLOWABLE_OPERATORS - }, - uniqueItems: true - } - }, - additionalProperties: false - }] - }, - - create(context) { - const options = parseOptions(context.options[0] || {}); - const sourceCode = context.getSourceCode(); - - /** - * Reports an error and autofixes the node - * @param {ASTNode} node - An ast node to report the error on. - * @param {string} recommendation - The recommended code for the issue - * @param {bool} shouldFix - Whether this report should fix the node - * @returns {void} - */ - function report(node, recommendation, shouldFix) { - context.report({ - node, - message: "use `{{recommendation}}` instead.", - data: { - recommendation - }, - fix(fixer) { - if (!shouldFix) { - return null; - } - - const tokenBefore = sourceCode.getTokenBefore(node); - - if ( - tokenBefore && - tokenBefore.range[1] === node.range[0] && - !astUtils.canTokensBeAdjacent(tokenBefore, recommendation) - ) { - return fixer.replaceText(node, ` ${recommendation}`); - } - return fixer.replaceText(node, recommendation); - } - }); - } - - return { - UnaryExpression(node) { - let operatorAllowed; - - // !!foo - operatorAllowed = options.allow.indexOf("!!") >= 0; - if (!operatorAllowed && options.boolean && isDoubleLogicalNegating(node)) { - const recommendation = `Boolean(${sourceCode.getText(node.argument.argument)})`; - - report(node, recommendation, true); - } - - // ~foo.indexOf(bar) - operatorAllowed = options.allow.indexOf("~") >= 0; - if (!operatorAllowed && options.boolean && isBinaryNegatingOfIndexOf(node)) { - const recommendation = `${sourceCode.getText(node.argument)} !== -1`; - - report(node, recommendation, false); - } - - // +foo - operatorAllowed = options.allow.indexOf("+") >= 0; - if (!operatorAllowed && options.number && node.operator === "+" && !isNumeric(node.argument)) { - const recommendation = `Number(${sourceCode.getText(node.argument)})`; - - report(node, recommendation, true); - } - }, - - // Use `:exit` to prevent double reporting - "BinaryExpression:exit"(node) { - let operatorAllowed; - - // 1 * foo - operatorAllowed = options.allow.indexOf("*") >= 0; - const nonNumericOperand = !operatorAllowed && options.number && isMultiplyByOne(node) && getNonNumericOperand(node); - - if (nonNumericOperand) { - const recommendation = `Number(${sourceCode.getText(nonNumericOperand)})`; - - report(node, recommendation, true); - } - - // "" + foo - operatorAllowed = options.allow.indexOf("+") >= 0; - if (!operatorAllowed && options.string && isConcatWithEmptyString(node)) { - const recommendation = `String(${sourceCode.getText(getNonEmptyOperand(node))})`; - - report(node, recommendation, true); - } - }, - - AssignmentExpression(node) { - - // foo += "" - const operatorAllowed = options.allow.indexOf("+") >= 0; - - if (!operatorAllowed && options.string && isAppendEmptyString(node)) { - const code = sourceCode.getText(getNonEmptyOperand(node)); - const recommendation = `${code} = String(${code})`; - - report(node, recommendation, true); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-implicit-globals.js b/node_modules/eslint/lib/rules/no-implicit-globals.js deleted file mode 100644 index c4717b6..0000000 --- a/node_modules/eslint/lib/rules/no-implicit-globals.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * @fileoverview Rule to check for implicit global variables and functions. - * @author Joshua Peek - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow variable and `function` declarations in the global scope", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-implicit-globals" - }, - - schema: [] - }, - - create(context) { - return { - Program() { - const scope = context.getScope(); - - scope.variables.forEach(variable => { - if (variable.writeable) { - return; - } - - variable.defs.forEach(def => { - if (def.type === "FunctionName" || (def.type === "Variable" && def.parent.kind === "var")) { - context.report({ node: def.node, message: "Implicit global variable, assign as global property instead." }); - } - }); - }); - - scope.implicit.variables.forEach(variable => { - const scopeVariable = scope.set.get(variable.name); - - if (scopeVariable && scopeVariable.writeable) { - return; - } - - variable.defs.forEach(def => { - context.report({ node: def.node, message: "Implicit global variable, assign as global property instead." }); - }); - }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-implied-eval.js b/node_modules/eslint/lib/rules/no-implied-eval.js deleted file mode 100644 index de294bc..0000000 --- a/node_modules/eslint/lib/rules/no-implied-eval.js +++ /dev/null @@ -1,162 +0,0 @@ -/** - * @fileoverview Rule to flag use of implied eval via setTimeout and setInterval - * @author James Allardice - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of `eval()`-like methods", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-implied-eval" - }, - - schema: [] - }, - - create(context) { - const CALLEE_RE = /^(setTimeout|setInterval|execScript)$/; - - /* - * Figures out if we should inspect a given binary expression. Is a stack - * of stacks, where the first element in each substack is a CallExpression. - */ - const impliedEvalAncestorsStack = []; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Get the last element of an array, without modifying arr, like pop(), but non-destructive. - * @param {array} arr What to inspect - * @returns {*} The last element of arr - * @private - */ - function last(arr) { - return arr ? arr[arr.length - 1] : null; - } - - /** - * Checks if the given MemberExpression node is a potentially implied eval identifier on window. - * @param {ASTNode} node The MemberExpression node to check. - * @returns {boolean} Whether or not the given node is potentially an implied eval. - * @private - */ - function isImpliedEvalMemberExpression(node) { - const object = node.object, - property = node.property, - hasImpliedEvalName = CALLEE_RE.test(property.name) || CALLEE_RE.test(property.value); - - return object.name === "window" && hasImpliedEvalName; - } - - /** - * Determines if a node represents a call to a potentially implied eval. - * - * This checks the callee name and that there's an argument, but not the type of the argument. - * - * @param {ASTNode} node The CallExpression to check. - * @returns {boolean} True if the node matches, false if not. - * @private - */ - function isImpliedEvalCallExpression(node) { - const isMemberExpression = (node.callee.type === "MemberExpression"), - isIdentifier = (node.callee.type === "Identifier"), - isImpliedEvalCallee = - (isIdentifier && CALLEE_RE.test(node.callee.name)) || - (isMemberExpression && isImpliedEvalMemberExpression(node.callee)); - - return isImpliedEvalCallee && node.arguments.length; - } - - /** - * Checks that the parent is a direct descendent of an potential implied eval CallExpression, and if the parent is a CallExpression, that we're the first argument. - * @param {ASTNode} node The node to inspect the parent of. - * @returns {boolean} Was the parent a direct descendent, and is the child therefore potentially part of a dangerous argument? - * @private - */ - function hasImpliedEvalParent(node) { - - // make sure our parent is marked - return node.parent === last(last(impliedEvalAncestorsStack)) && - - // if our parent is a CallExpression, make sure we're the first argument - (node.parent.type !== "CallExpression" || node === node.parent.arguments[0]); - } - - /** - * Checks if our parent is marked as part of an implied eval argument. If - * so, collapses the top of impliedEvalAncestorsStack and reports on the - * original CallExpression. - * @param {ASTNode} node The CallExpression to check. - * @returns {boolean} True if the node matches, false if not. - * @private - */ - function checkString(node) { - if (hasImpliedEvalParent(node)) { - - // remove the entire substack, to avoid duplicate reports - const substack = impliedEvalAncestorsStack.pop(); - - context.report({ node: substack[0], message: "Implied eval. Consider passing a function instead of a string." }); - } - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - CallExpression(node) { - if (isImpliedEvalCallExpression(node)) { - - // call expressions create a new substack - impliedEvalAncestorsStack.push([node]); - } - }, - - "CallExpression:exit"(node) { - if (node === last(last(impliedEvalAncestorsStack))) { - - /* - * Destroys the entire sub-stack, rather than just using - * last(impliedEvalAncestorsStack).pop(), as a CallExpression is - * always the bottom of a impliedEvalAncestorsStack substack. - */ - impliedEvalAncestorsStack.pop(); - } - }, - - BinaryExpression(node) { - if (node.operator === "+" && hasImpliedEvalParent(node)) { - last(impliedEvalAncestorsStack).push(node); - } - }, - - "BinaryExpression:exit"(node) { - if (node === last(last(impliedEvalAncestorsStack))) { - last(impliedEvalAncestorsStack).pop(); - } - }, - - Literal(node) { - if (typeof node.value === "string") { - checkString(node); - } - }, - - TemplateLiteral(node) { - checkString(node); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-inline-comments.js b/node_modules/eslint/lib/rules/no-inline-comments.js deleted file mode 100644 index 85a0d38..0000000 --- a/node_modules/eslint/lib/rules/no-inline-comments.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * @fileoverview Enforces or disallows inline comments. - * @author Greg Cochard - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow inline comments after code", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-inline-comments" - }, - - schema: [] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - /** - * Will check that comments are not on lines starting with or ending with code - * @param {ASTNode} node The comment node to check - * @private - * @returns {void} - */ - function testCodeAroundComment(node) { - - // Get the whole line and cut it off at the start of the comment - const startLine = String(sourceCode.lines[node.loc.start.line - 1]); - const endLine = String(sourceCode.lines[node.loc.end.line - 1]); - - const preamble = startLine.slice(0, node.loc.start.column).trim(); - - // Also check after the comment - const postamble = endLine.slice(node.loc.end.column).trim(); - - // Check that this comment isn't an ESLint directive - const isDirective = astUtils.isDirectiveComment(node); - - // Should be empty if there was only whitespace around the comment - if (!isDirective && (preamble || postamble)) { - context.report({ node, message: "Unexpected comment inline with code." }); - } - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - Program() { - const comments = sourceCode.getAllComments(); - - comments.filter(token => token.type !== "Shebang").forEach(testCodeAroundComment); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-inner-declarations.js b/node_modules/eslint/lib/rules/no-inner-declarations.js deleted file mode 100644 index 032c0a0..0000000 --- a/node_modules/eslint/lib/rules/no-inner-declarations.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * @fileoverview Rule to enforce declarations in program or function body root. - * @author Brandon Mills - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow variable or `function` declarations in nested blocks", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-inner-declarations" - }, - - schema: [ - { - enum: ["functions", "both"] - } - ] - }, - - create(context) { - - /** - * Find the nearest Program or Function ancestor node. - * @returns {Object} Ancestor's type and distance from node. - */ - function nearestBody() { - const ancestors = context.getAncestors(); - let ancestor = ancestors.pop(), - generation = 1; - - while (ancestor && ["Program", "FunctionDeclaration", - "FunctionExpression", "ArrowFunctionExpression" - ].indexOf(ancestor.type) < 0) { - generation += 1; - ancestor = ancestors.pop(); - } - - return { - - // Type of containing ancestor - type: ancestor.type, - - // Separation between ancestor and node - distance: generation - }; - } - - /** - * Ensure that a given node is at a program or function body's root. - * @param {ASTNode} node Declaration node to check. - * @returns {void} - */ - function check(node) { - const body = nearestBody(), - valid = ((body.type === "Program" && body.distance === 1) || - body.distance === 2); - - if (!valid) { - context.report({ - node, - message: "Move {{type}} declaration to {{body}} root.", - data: { - type: (node.type === "FunctionDeclaration" ? "function" : "variable"), - body: (body.type === "Program" ? "program" : "function body") - } - }); - } - } - - return { - - FunctionDeclaration: check, - VariableDeclaration(node) { - if (context.options[0] === "both" && node.kind === "var") { - check(node); - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-invalid-regexp.js b/node_modules/eslint/lib/rules/no-invalid-regexp.js deleted file mode 100644 index 7169e0c..0000000 --- a/node_modules/eslint/lib/rules/no-invalid-regexp.js +++ /dev/null @@ -1,124 +0,0 @@ -/** - * @fileoverview Validate strings passed to the RegExp constructor - * @author Michael Ficarra - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const RegExpValidator = require("regexpp").RegExpValidator; -const validator = new RegExpValidator({ ecmaVersion: 2018 }); -const validFlags = /[gimuys]/g; -const undefined1 = void 0; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow invalid regular expression strings in `RegExp` constructors", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-invalid-regexp" - }, - - schema: [{ - type: "object", - properties: { - allowConstructorFlags: { - type: "array", - items: { - type: "string" - } - } - }, - additionalProperties: false - }] - }, - - create(context) { - - const options = context.options[0]; - let allowedFlags = null; - - if (options && options.allowConstructorFlags) { - const temp = options.allowConstructorFlags.join("").replace(validFlags, ""); - - if (temp) { - allowedFlags = new RegExp(`[${temp}]`, "gi"); - } - } - - /** - * Check if node is a string - * @param {ASTNode} node node to evaluate - * @returns {boolean} True if its a string - * @private - */ - function isString(node) { - return node && node.type === "Literal" && typeof node.value === "string"; - } - - /** - * Check syntax error in a given pattern. - * @param {string} pattern The RegExp pattern to validate. - * @param {boolean} uFlag The Unicode flag. - * @returns {string|null} The syntax error. - */ - function validateRegExpPattern(pattern, uFlag) { - try { - validator.validatePattern(pattern, undefined1, undefined1, uFlag); - return null; - } catch (err) { - return err.message; - } - } - - /** - * Check syntax error in a given flags. - * @param {string} flags The RegExp flags to validate. - * @returns {string|null} The syntax error. - */ - function validateRegExpFlags(flags) { - try { - validator.validateFlags(flags); - return null; - } catch (err) { - return `Invalid flags supplied to RegExp constructor '${flags}'`; - } - } - - return { - "CallExpression, NewExpression"(node) { - if (node.callee.type !== "Identifier" || node.callee.name !== "RegExp" || !isString(node.arguments[0])) { - return; - } - const pattern = node.arguments[0].value; - let flags = isString(node.arguments[1]) ? node.arguments[1].value : ""; - - if (allowedFlags) { - flags = flags.replace(allowedFlags, ""); - } - - // If flags are unknown, check both are errored or not. - const message = validateRegExpFlags(flags) || ( - flags - ? validateRegExpPattern(pattern, flags.indexOf("u") !== -1) - : validateRegExpPattern(pattern, true) && validateRegExpPattern(pattern, false) - ); - - if (message) { - context.report({ - node, - message: "{{message}}.", - data: { message } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-invalid-this.js b/node_modules/eslint/lib/rules/no-invalid-this.js deleted file mode 100644 index a04673b..0000000 --- a/node_modules/eslint/lib/rules/no-invalid-this.js +++ /dev/null @@ -1,124 +0,0 @@ -/** - * @fileoverview A rule to disallow `this` keywords outside of classes or class-like objects. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `this` keywords outside of classes or class-like objects", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-invalid-this" - }, - - schema: [] - }, - - create(context) { - const stack = [], - sourceCode = context.getSourceCode(); - - /** - * Gets the current checking context. - * - * The return value has a flag that whether or not `this` keyword is valid. - * The flag is initialized when got at the first time. - * - * @returns {{valid: boolean}} - * an object which has a flag that whether or not `this` keyword is valid. - */ - stack.getCurrent = function() { - const current = this[this.length - 1]; - - if (!current.init) { - current.init = true; - current.valid = !astUtils.isDefaultThisBinding( - current.node, - sourceCode - ); - } - return current; - }; - - /** - * Pushs new checking context into the stack. - * - * The checking context is not initialized yet. - * Because most functions don't have `this` keyword. - * When `this` keyword was found, the checking context is initialized. - * - * @param {ASTNode} node - A function node that was entered. - * @returns {void} - */ - function enterFunction(node) { - - // `this` can be invalid only under strict mode. - stack.push({ - init: !context.getScope().isStrict, - node, - valid: true - }); - } - - /** - * Pops the current checking context from the stack. - * @returns {void} - */ - function exitFunction() { - stack.pop(); - } - - return { - - /* - * `this` is invalid only under strict mode. - * Modules is always strict mode. - */ - Program(node) { - const scope = context.getScope(), - features = context.parserOptions.ecmaFeatures || {}; - - stack.push({ - init: true, - node, - valid: !( - scope.isStrict || - node.sourceType === "module" || - (features.globalReturn && scope.childScopes[0].isStrict) - ) - }); - }, - - "Program:exit"() { - stack.pop(); - }, - - FunctionDeclaration: enterFunction, - "FunctionDeclaration:exit": exitFunction, - FunctionExpression: enterFunction, - "FunctionExpression:exit": exitFunction, - - // Reports if `this` of the current context is invalid. - ThisExpression(node) { - const current = stack.getCurrent(); - - if (current && !current.valid) { - context.report({ node, message: "Unexpected 'this'." }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-irregular-whitespace.js b/node_modules/eslint/lib/rules/no-irregular-whitespace.js deleted file mode 100644 index f1840aa..0000000 --- a/node_modules/eslint/lib/rules/no-irregular-whitespace.js +++ /dev/null @@ -1,237 +0,0 @@ -/** - * @fileoverview Rule to disalow whitespace that is not a tab or space, whitespace inside strings and comments are allowed - * @author Jonathan Kingston - * @author Christophe Porteneuve - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Constants -//------------------------------------------------------------------------------ - -const ALL_IRREGULARS = /[\f\v\u0085\ufeff\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u202f\u205f\u3000\u2028\u2029]/; -const IRREGULAR_WHITESPACE = /[\f\v\u0085\ufeff\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u202f\u205f\u3000]+/mg; -const IRREGULAR_LINE_TERMINATORS = /[\u2028\u2029]/mg; -const LINE_BREAK = astUtils.createGlobalLinebreakMatcher(); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow irregular whitespace outside of strings and comments", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-irregular-whitespace" - }, - - schema: [ - { - type: "object", - properties: { - skipComments: { - type: "boolean" - }, - skipStrings: { - type: "boolean" - }, - skipTemplates: { - type: "boolean" - }, - skipRegExps: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - // Module store of errors that we have found - let errors = []; - - // Lookup the `skipComments` option, which defaults to `false`. - const options = context.options[0] || {}; - const skipComments = !!options.skipComments; - const skipStrings = options.skipStrings !== false; - const skipRegExps = !!options.skipRegExps; - const skipTemplates = !!options.skipTemplates; - - const sourceCode = context.getSourceCode(); - const commentNodes = sourceCode.getAllComments(); - - /** - * Removes errors that occur inside a string node - * @param {ASTNode} node to check for matching errors. - * @returns {void} - * @private - */ - function removeWhitespaceError(node) { - const locStart = node.loc.start; - const locEnd = node.loc.end; - - errors = errors.filter(error => { - const errorLoc = error[1]; - - if (errorLoc.line >= locStart.line && errorLoc.line <= locEnd.line) { - if (errorLoc.column >= locStart.column && (errorLoc.column <= locEnd.column || errorLoc.line < locEnd.line)) { - return false; - } - } - return true; - }); - } - - /** - * Checks identifier or literal nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors - * @param {ASTNode} node to check for matching errors. - * @returns {void} - * @private - */ - function removeInvalidNodeErrorsInIdentifierOrLiteral(node) { - const shouldCheckStrings = skipStrings && (typeof node.value === "string"); - const shouldCheckRegExps = skipRegExps && Boolean(node.regex); - - if (shouldCheckStrings || shouldCheckRegExps) { - - // If we have irregular characters remove them from the errors list - if (ALL_IRREGULARS.test(node.raw)) { - removeWhitespaceError(node); - } - } - } - - /** - * Checks template string literal nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors - * @param {ASTNode} node to check for matching errors. - * @returns {void} - * @private - */ - function removeInvalidNodeErrorsInTemplateLiteral(node) { - if (typeof node.value.raw === "string") { - if (ALL_IRREGULARS.test(node.value.raw)) { - removeWhitespaceError(node); - } - } - } - - /** - * Checks comment nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors - * @param {ASTNode} node to check for matching errors. - * @returns {void} - * @private - */ - function removeInvalidNodeErrorsInComment(node) { - if (ALL_IRREGULARS.test(node.value)) { - removeWhitespaceError(node); - } - } - - /** - * Checks the program source for irregular whitespace - * @param {ASTNode} node The program node - * @returns {void} - * @private - */ - function checkForIrregularWhitespace(node) { - const sourceLines = sourceCode.lines; - - sourceLines.forEach((sourceLine, lineIndex) => { - const lineNumber = lineIndex + 1; - let match; - - while ((match = IRREGULAR_WHITESPACE.exec(sourceLine)) !== null) { - const location = { - line: lineNumber, - column: match.index - }; - - errors.push([node, location, "Irregular whitespace not allowed."]); - } - }); - } - - /** - * Checks the program source for irregular line terminators - * @param {ASTNode} node The program node - * @returns {void} - * @private - */ - function checkForIrregularLineTerminators(node) { - const source = sourceCode.getText(), - sourceLines = sourceCode.lines, - linebreaks = source.match(LINE_BREAK); - let lastLineIndex = -1, - match; - - while ((match = IRREGULAR_LINE_TERMINATORS.exec(source)) !== null) { - const lineIndex = linebreaks.indexOf(match[0], lastLineIndex + 1) || 0; - const location = { - line: lineIndex + 1, - column: sourceLines[lineIndex].length - }; - - errors.push([node, location, "Irregular whitespace not allowed."]); - lastLineIndex = lineIndex; - } - } - - /** - * A no-op function to act as placeholder for comment accumulation when the `skipComments` option is `false`. - * @returns {void} - * @private - */ - function noop() {} - - const nodes = {}; - - if (ALL_IRREGULARS.test(sourceCode.getText())) { - nodes.Program = function(node) { - - /* - * As we can easily fire warnings for all white space issues with - * all the source its simpler to fire them here. - * This means we can check all the application code without having - * to worry about issues caused in the parser tokens. - * When writing this code also evaluating per node was missing out - * connecting tokens in some cases. - * We can later filter the errors when they are found to be not an - * issue in nodes we don't care about. - */ - checkForIrregularWhitespace(node); - checkForIrregularLineTerminators(node); - }; - - nodes.Identifier = removeInvalidNodeErrorsInIdentifierOrLiteral; - nodes.Literal = removeInvalidNodeErrorsInIdentifierOrLiteral; - nodes.TemplateElement = skipTemplates ? removeInvalidNodeErrorsInTemplateLiteral : noop; - nodes["Program:exit"] = function() { - if (skipComments) { - - // First strip errors occurring in comment nodes. - commentNodes.forEach(removeInvalidNodeErrorsInComment); - } - - // If we have any errors remaining report on them - errors.forEach(error => { - context.report.apply(context, error); - }); - }; - } else { - nodes.Program = noop; - } - - return nodes; - } -}; diff --git a/node_modules/eslint/lib/rules/no-iterator.js b/node_modules/eslint/lib/rules/no-iterator.js deleted file mode 100644 index ca12fcd..0000000 --- a/node_modules/eslint/lib/rules/no-iterator.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @fileoverview Rule to flag usage of __iterator__ property - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of the `__iterator__` property", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-iterator" - }, - - schema: [] - }, - - create(context) { - - return { - - MemberExpression(node) { - - if (node.property && - (node.property.type === "Identifier" && node.property.name === "__iterator__" && !node.computed) || - (node.property.type === "Literal" && node.property.value === "__iterator__")) { - context.report({ node, message: "Reserved name '__iterator__'." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-label-var.js b/node_modules/eslint/lib/rules/no-label-var.js deleted file mode 100644 index a880abf..0000000 --- a/node_modules/eslint/lib/rules/no-label-var.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @fileoverview Rule to flag labels that are the same as an identifier - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow labels that share a name with a variable", - category: "Variables", - recommended: false, - url: "https://eslint.org/docs/rules/no-label-var" - }, - - schema: [] - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Check if the identifier is present inside current scope - * @param {Object} scope current scope - * @param {string} name To evaluate - * @returns {boolean} True if its present - * @private - */ - function findIdentifier(scope, name) { - return astUtils.getVariableByName(scope, name) !== null; - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - - LabeledStatement(node) { - - // Fetch the innermost scope. - const scope = context.getScope(); - - /* - * Recursively find the identifier walking up the scope, starting - * with the innermost scope. - */ - if (findIdentifier(scope, node.label.name)) { - context.report({ node, message: "Found identifier with same name as label." }); - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-labels.js b/node_modules/eslint/lib/rules/no-labels.js deleted file mode 100644 index e09bb7b..0000000 --- a/node_modules/eslint/lib/rules/no-labels.js +++ /dev/null @@ -1,142 +0,0 @@ -/** - * @fileoverview Disallow Labeled Statements - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow labeled statements", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-labels" - }, - - schema: [ - { - type: "object", - properties: { - allowLoop: { - type: "boolean" - }, - allowSwitch: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const options = context.options[0]; - const allowLoop = Boolean(options && options.allowLoop); - const allowSwitch = Boolean(options && options.allowSwitch); - let scopeInfo = null; - - /** - * Gets the kind of a given node. - * - * @param {ASTNode} node - A node to get. - * @returns {string} The kind of the node. - */ - function getBodyKind(node) { - if (astUtils.isLoop(node)) { - return "loop"; - } - if (node.type === "SwitchStatement") { - return "switch"; - } - return "other"; - } - - /** - * Checks whether the label of a given kind is allowed or not. - * - * @param {string} kind - A kind to check. - * @returns {boolean} `true` if the kind is allowed. - */ - function isAllowed(kind) { - switch (kind) { - case "loop": return allowLoop; - case "switch": return allowSwitch; - default: return false; - } - } - - /** - * Checks whether a given name is a label of a loop or not. - * - * @param {string} label - A name of a label to check. - * @returns {boolean} `true` if the name is a label of a loop. - */ - function getKind(label) { - let info = scopeInfo; - - while (info) { - if (info.label === label) { - return info.kind; - } - info = info.upper; - } - - /* istanbul ignore next: syntax error */ - return "other"; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - LabeledStatement(node) { - scopeInfo = { - label: node.label.name, - kind: getBodyKind(node.body), - upper: scopeInfo - }; - }, - - "LabeledStatement:exit"(node) { - if (!isAllowed(scopeInfo.kind)) { - context.report({ - node, - message: "Unexpected labeled statement." - }); - } - - scopeInfo = scopeInfo.upper; - }, - - BreakStatement(node) { - if (node.label && !isAllowed(getKind(node.label.name))) { - context.report({ - node, - message: "Unexpected label in break statement." - }); - } - }, - - ContinueStatement(node) { - if (node.label && !isAllowed(getKind(node.label.name))) { - context.report({ - node, - message: "Unexpected label in continue statement." - }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-lone-blocks.js b/node_modules/eslint/lib/rules/no-lone-blocks.js deleted file mode 100644 index 5e22aac..0000000 --- a/node_modules/eslint/lib/rules/no-lone-blocks.js +++ /dev/null @@ -1,113 +0,0 @@ -/** - * @fileoverview Rule to flag blocks with no reason to exist - * @author Brandon Mills - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary nested blocks", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-lone-blocks" - }, - - schema: [] - }, - - create(context) { - - // A stack of lone blocks to be checked for block-level bindings - const loneBlocks = []; - let ruleDef; - - /** - * Reports a node as invalid. - * @param {ASTNode} node - The node to be reported. - * @returns {void} - */ - function report(node) { - const message = node.parent.type === "BlockStatement" ? "Nested block is redundant." : "Block is redundant."; - - context.report({ node, message }); - } - - /** - * Checks for any ocurrence of a BlockStatement in a place where lists of statements can appear - * @param {ASTNode} node The node to check - * @returns {boolean} True if the node is a lone block. - */ - function isLoneBlock(node) { - return node.parent.type === "BlockStatement" || - node.parent.type === "Program" || - - // Don't report blocks in switch cases if the block is the only statement of the case. - node.parent.type === "SwitchCase" && !(node.parent.consequent[0] === node && node.parent.consequent.length === 1); - } - - /** - * Checks the enclosing block of the current node for block-level bindings, - * and "marks it" as valid if any. - * @returns {void} - */ - function markLoneBlock() { - if (loneBlocks.length === 0) { - return; - } - - const block = context.getAncestors().pop(); - - if (loneBlocks[loneBlocks.length - 1] === block) { - loneBlocks.pop(); - } - } - - // Default rule definition: report all lone blocks - ruleDef = { - BlockStatement(node) { - if (isLoneBlock(node)) { - report(node); - } - } - }; - - // ES6: report blocks without block-level bindings - if (context.parserOptions.ecmaVersion >= 6) { - ruleDef = { - BlockStatement(node) { - if (isLoneBlock(node)) { - loneBlocks.push(node); - } - }, - "BlockStatement:exit"(node) { - if (loneBlocks.length > 0 && loneBlocks[loneBlocks.length - 1] === node) { - loneBlocks.pop(); - report(node); - } - } - }; - - ruleDef.VariableDeclaration = function(node) { - if (node.kind === "let" || node.kind === "const") { - markLoneBlock(); - } - }; - - ruleDef.FunctionDeclaration = function() { - if (context.getScope().isStrict) { - markLoneBlock(); - } - }; - - ruleDef.ClassDeclaration = markLoneBlock; - } - - return ruleDef; - } -}; diff --git a/node_modules/eslint/lib/rules/no-lonely-if.js b/node_modules/eslint/lib/rules/no-lonely-if.js deleted file mode 100644 index 3ecc41e..0000000 --- a/node_modules/eslint/lib/rules/no-lonely-if.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * @fileoverview Rule to disallow if as the only statmenet in an else block - * @author Brandon Mills - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `if` statements as the only statement in `else` blocks", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-lonely-if" - }, - - schema: [], - - fixable: "code" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - return { - IfStatement(node) { - const ancestors = context.getAncestors(), - parent = ancestors.pop(), - grandparent = ancestors.pop(); - - if (parent && parent.type === "BlockStatement" && - parent.body.length === 1 && grandparent && - grandparent.type === "IfStatement" && - parent === grandparent.alternate) { - context.report({ - node, - message: "Unexpected if as the only statement in an else block.", - fix(fixer) { - const openingElseCurly = sourceCode.getFirstToken(parent); - const closingElseCurly = sourceCode.getLastToken(parent); - const elseKeyword = sourceCode.getTokenBefore(openingElseCurly); - const tokenAfterElseBlock = sourceCode.getTokenAfter(closingElseCurly); - const lastIfToken = sourceCode.getLastToken(node.consequent); - const sourceText = sourceCode.getText(); - - if (sourceText.slice(openingElseCurly.range[1], - node.range[0]).trim() || sourceText.slice(node.range[1], closingElseCurly.range[0]).trim()) { - - // Don't fix if there are any non-whitespace characters interfering (e.g. comments) - return null; - } - - if ( - node.consequent.type !== "BlockStatement" && lastIfToken.value !== ";" && tokenAfterElseBlock && - ( - node.consequent.loc.end.line === tokenAfterElseBlock.loc.start.line || - /^[([/+`-]/.test(tokenAfterElseBlock.value) || - lastIfToken.value === "++" || - lastIfToken.value === "--" - ) - ) { - - /* - * If the `if` statement has no block, and is not followed by a semicolon, make sure that fixing - * the issue would not change semantics due to ASI. If this would happen, don't do a fix. - */ - return null; - } - - return fixer.replaceTextRange( - [openingElseCurly.range[0], closingElseCurly.range[1]], - (elseKeyword.range[1] === openingElseCurly.range[0] ? " " : "") + sourceCode.getText(node) - ); - } - }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-loop-func.js b/node_modules/eslint/lib/rules/no-loop-func.js deleted file mode 100644 index d103cb5..0000000 --- a/node_modules/eslint/lib/rules/no-loop-func.js +++ /dev/null @@ -1,200 +0,0 @@ -/** - * @fileoverview Rule to flag creation of function inside a loop - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Gets the containing loop node of a specified node. - * - * We don't need to check nested functions, so this ignores those. - * `Scope.through` contains references of nested functions. - * - * @param {ASTNode} node - An AST node to get. - * @returns {ASTNode|null} The containing loop node of the specified node, or - * `null`. - */ -function getContainingLoopNode(node) { - for (let currentNode = node; currentNode.parent; currentNode = currentNode.parent) { - const parent = currentNode.parent; - - switch (parent.type) { - case "WhileStatement": - case "DoWhileStatement": - return parent; - - case "ForStatement": - - // `init` is outside of the loop. - if (parent.init !== currentNode) { - return parent; - } - break; - - case "ForInStatement": - case "ForOfStatement": - - // `right` is outside of the loop. - if (parent.right !== currentNode) { - return parent; - } - break; - - case "ArrowFunctionExpression": - case "FunctionExpression": - case "FunctionDeclaration": - - // We don't need to check nested functions. - return null; - - default: - break; - } - } - - return null; -} - -/** - * Gets the containing loop node of a given node. - * If the loop was nested, this returns the most outer loop. - * - * @param {ASTNode} node - A node to get. This is a loop node. - * @param {ASTNode|null} excludedNode - A node that the result node should not - * include. - * @returns {ASTNode} The most outer loop node. - */ -function getTopLoopNode(node, excludedNode) { - const border = excludedNode ? excludedNode.range[1] : 0; - let retv = node; - let containingLoopNode = node; - - while (containingLoopNode && containingLoopNode.range[0] >= border) { - retv = containingLoopNode; - containingLoopNode = getContainingLoopNode(containingLoopNode); - } - - return retv; -} - -/** - * Checks whether a given reference which refers to an upper scope's variable is - * safe or not. - * - * @param {ASTNode} loopNode - A containing loop node. - * @param {eslint-scope.Reference} reference - A reference to check. - * @returns {boolean} `true` if the reference is safe or not. - */ -function isSafe(loopNode, reference) { - const variable = reference.resolved; - const definition = variable && variable.defs[0]; - const declaration = definition && definition.parent; - const kind = (declaration && declaration.type === "VariableDeclaration") - ? declaration.kind - : ""; - - // Variables which are declared by `const` is safe. - if (kind === "const") { - return true; - } - - /* - * Variables which are declared by `let` in the loop is safe. - * It's a different instance from the next loop step's. - */ - if (kind === "let" && - declaration.range[0] > loopNode.range[0] && - declaration.range[1] < loopNode.range[1] - ) { - return true; - } - - /* - * WriteReferences which exist after this border are unsafe because those - * can modify the variable. - */ - const border = getTopLoopNode( - loopNode, - (kind === "let") ? declaration : null - ).range[0]; - - /** - * Checks whether a given reference is safe or not. - * The reference is every reference of the upper scope's variable we are - * looking now. - * - * It's safeafe if the reference matches one of the following condition. - * - is readonly. - * - doesn't exist inside a local function and after the border. - * - * @param {eslint-scope.Reference} upperRef - A reference to check. - * @returns {boolean} `true` if the reference is safe. - */ - function isSafeReference(upperRef) { - const id = upperRef.identifier; - - return ( - !upperRef.isWrite() || - variable.scope.variableScope === upperRef.from.variableScope && - id.range[0] < border - ); - } - - return Boolean(variable) && variable.references.every(isSafeReference); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `function` declarations and expressions inside loop statements", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-loop-func" - }, - - schema: [] - }, - - create(context) { - - /** - * Reports functions which match the following condition: - * - * - has a loop node in ancestors. - * - has any references which refers to an unsafe variable. - * - * @param {ASTNode} node The AST node to check. - * @returns {boolean} Whether or not the node is within a loop. - */ - function checkForLoops(node) { - const loopNode = getContainingLoopNode(node); - - if (!loopNode) { - return; - } - - const references = context.getScope().through; - - if (references.length > 0 && - !references.every(isSafe.bind(null, loopNode)) - ) { - context.report({ node, message: "Don't make functions within a loop." }); - } - } - - return { - ArrowFunctionExpression: checkForLoops, - FunctionExpression: checkForLoops, - FunctionDeclaration: checkForLoops - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-magic-numbers.js b/node_modules/eslint/lib/rules/no-magic-numbers.js deleted file mode 100644 index 2826dbf..0000000 --- a/node_modules/eslint/lib/rules/no-magic-numbers.js +++ /dev/null @@ -1,157 +0,0 @@ -/** - * @fileoverview Rule to flag statements that use magic numbers (adapted from https://github.com/danielstjules/buddy.js) - * @author Vincent Lemeunier - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow magic numbers", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-magic-numbers" - }, - - schema: [{ - type: "object", - properties: { - detectObjects: { - type: "boolean" - }, - enforceConst: { - type: "boolean" - }, - ignore: { - type: "array", - items: { - type: "number" - }, - uniqueItems: true - }, - ignoreArrayIndexes: { - type: "boolean" - } - }, - additionalProperties: false - }] - }, - - create(context) { - const config = context.options[0] || {}, - detectObjects = !!config.detectObjects, - enforceConst = !!config.enforceConst, - ignore = config.ignore || [], - ignoreArrayIndexes = !!config.ignoreArrayIndexes; - - /** - * Returns whether the node is number literal - * @param {Node} node - the node literal being evaluated - * @returns {boolean} true if the node is a number literal - */ - function isNumber(node) { - return typeof node.value === "number"; - } - - /** - * Returns whether the number should be ignored - * @param {number} num - the number - * @returns {boolean} true if the number should be ignored - */ - function shouldIgnoreNumber(num) { - return ignore.indexOf(num) !== -1; - } - - /** - * Returns whether the number should be ignored when used as a radix within parseInt() or Number.parseInt() - * @param {ASTNode} parent - the non-"UnaryExpression" parent - * @param {ASTNode} node - the node literal being evaluated - * @returns {boolean} true if the number should be ignored - */ - function shouldIgnoreParseInt(parent, node) { - return parent.type === "CallExpression" && node === parent.arguments[1] && - (parent.callee.name === "parseInt" || - parent.callee.type === "MemberExpression" && - parent.callee.object.name === "Number" && - parent.callee.property.name === "parseInt"); - } - - /** - * Returns whether the number should be ignored when used to define a JSX prop - * @param {ASTNode} parent - the non-"UnaryExpression" parent - * @returns {boolean} true if the number should be ignored - */ - function shouldIgnoreJSXNumbers(parent) { - return parent.type.indexOf("JSX") === 0; - } - - /** - * Returns whether the number should be ignored when used as an array index with enabled 'ignoreArrayIndexes' option. - * @param {ASTNode} parent - the non-"UnaryExpression" parent. - * @returns {boolean} true if the number should be ignored - */ - function shouldIgnoreArrayIndexes(parent) { - return parent.type === "MemberExpression" && ignoreArrayIndexes; - } - - return { - Literal(node) { - const okTypes = detectObjects ? [] : ["ObjectExpression", "Property", "AssignmentExpression"]; - - if (!isNumber(node)) { - return; - } - - let fullNumberNode; - let parent; - let value; - let raw; - - // For negative magic numbers: update the value and parent node - if (node.parent.type === "UnaryExpression" && node.parent.operator === "-") { - fullNumberNode = node.parent; - parent = fullNumberNode.parent; - value = -node.value; - raw = `-${node.raw}`; - } else { - fullNumberNode = node; - parent = node.parent; - value = node.value; - raw = node.raw; - } - - if (shouldIgnoreNumber(value) || - shouldIgnoreParseInt(parent, fullNumberNode) || - shouldIgnoreArrayIndexes(parent) || - shouldIgnoreJSXNumbers(parent)) { - return; - } - - if (parent.type === "VariableDeclarator") { - if (enforceConst && parent.parent.kind !== "const") { - context.report({ - node: fullNumberNode, - message: "Number constants declarations must use 'const'." - }); - } - } else if ( - okTypes.indexOf(parent.type) === -1 || - (parent.type === "AssignmentExpression" && parent.left.type === "Identifier") - ) { - context.report({ - node: fullNumberNode, - message: "No magic number: {{raw}}.", - data: { - raw - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-mixed-operators.js b/node_modules/eslint/lib/rules/no-mixed-operators.js deleted file mode 100644 index 0df4225..0000000 --- a/node_modules/eslint/lib/rules/no-mixed-operators.js +++ /dev/null @@ -1,210 +0,0 @@ -/** - * @fileoverview Rule to disallow mixed binary operators. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils.js"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const ARITHMETIC_OPERATORS = ["+", "-", "*", "/", "%", "**"]; -const BITWISE_OPERATORS = ["&", "|", "^", "~", "<<", ">>", ">>>"]; -const COMPARISON_OPERATORS = ["==", "!=", "===", "!==", ">", ">=", "<", "<="]; -const LOGICAL_OPERATORS = ["&&", "||"]; -const RELATIONAL_OPERATORS = ["in", "instanceof"]; -const ALL_OPERATORS = [].concat( - ARITHMETIC_OPERATORS, - BITWISE_OPERATORS, - COMPARISON_OPERATORS, - LOGICAL_OPERATORS, - RELATIONAL_OPERATORS -); -const DEFAULT_GROUPS = [ - ARITHMETIC_OPERATORS, - BITWISE_OPERATORS, - COMPARISON_OPERATORS, - LOGICAL_OPERATORS, - RELATIONAL_OPERATORS -]; -const TARGET_NODE_TYPE = /^(?:Binary|Logical)Expression$/; - -/** - * Normalizes options. - * - * @param {Object|undefined} options - A options object to normalize. - * @returns {Object} Normalized option object. - */ -function normalizeOptions(options) { - const hasGroups = (options && options.groups && options.groups.length > 0); - const groups = hasGroups ? options.groups : DEFAULT_GROUPS; - const allowSamePrecedence = (options && options.allowSamePrecedence) !== false; - - return { - groups, - allowSamePrecedence - }; -} - -/** - * Checks whether any group which includes both given operator exists or not. - * - * @param {Array.} groups - A list of groups to check. - * @param {string} left - An operator. - * @param {string} right - Another operator. - * @returns {boolean} `true` if such group existed. - */ -function includesBothInAGroup(groups, left, right) { - return groups.some(group => group.indexOf(left) !== -1 && group.indexOf(right) !== -1); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow mixed binary operators", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-mixed-operators" - }, - schema: [ - { - type: "object", - properties: { - groups: { - type: "array", - items: { - type: "array", - items: { enum: ALL_OPERATORS }, - minItems: 2, - uniqueItems: true - }, - uniqueItems: true - }, - allowSamePrecedence: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const options = normalizeOptions(context.options[0]); - - /** - * Checks whether a given node should be ignored by options or not. - * - * @param {ASTNode} node - A node to check. This is a BinaryExpression - * node or a LogicalExpression node. This parent node is one of - * them, too. - * @returns {boolean} `true` if the node should be ignored. - */ - function shouldIgnore(node) { - const a = node; - const b = node.parent; - - return ( - !includesBothInAGroup(options.groups, a.operator, b.operator) || - ( - options.allowSamePrecedence && - astUtils.getPrecedence(a) === astUtils.getPrecedence(b) - ) - ); - } - - /** - * Checks whether the operator of a given node is mixed with parent - * node's operator or not. - * - * @param {ASTNode} node - A node to check. This is a BinaryExpression - * node or a LogicalExpression node. This parent node is one of - * them, too. - * @returns {boolean} `true` if the node was mixed. - */ - function isMixedWithParent(node) { - return ( - node.operator !== node.parent.operator && - !astUtils.isParenthesised(sourceCode, node) - ); - } - - /** - * Gets the operator token of a given node. - * - * @param {ASTNode} node - A node to check. This is a BinaryExpression - * node or a LogicalExpression node. - * @returns {Token} The operator token of the node. - */ - function getOperatorToken(node) { - return sourceCode.getTokenAfter(node.left, astUtils.isNotClosingParenToken); - } - - /** - * Reports both the operator of a given node and the operator of the - * parent node. - * - * @param {ASTNode} node - A node to check. This is a BinaryExpression - * node or a LogicalExpression node. This parent node is one of - * them, too. - * @returns {void} - */ - function reportBothOperators(node) { - const parent = node.parent; - const left = (parent.left === node) ? node : parent; - const right = (parent.left !== node) ? node : parent; - const message = - "Unexpected mix of '{{leftOperator}}' and '{{rightOperator}}'."; - const data = { - leftOperator: left.operator, - rightOperator: right.operator - }; - - context.report({ - node: left, - loc: getOperatorToken(left).loc.start, - message, - data - }); - context.report({ - node: right, - loc: getOperatorToken(right).loc.start, - message, - data - }); - } - - /** - * Checks between the operator of this node and the operator of the - * parent node. - * - * @param {ASTNode} node - A node to check. - * @returns {void} - */ - function check(node) { - if (TARGET_NODE_TYPE.test(node.parent.type) && - isMixedWithParent(node) && - !shouldIgnore(node) - ) { - reportBothOperators(node); - } - } - - return { - BinaryExpression: check, - LogicalExpression: check - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-mixed-requires.js b/node_modules/eslint/lib/rules/no-mixed-requires.js deleted file mode 100644 index 1058f3a..0000000 --- a/node_modules/eslint/lib/rules/no-mixed-requires.js +++ /dev/null @@ -1,221 +0,0 @@ -/** - * @fileoverview Rule to enforce grouped require statements for Node.JS - * @author Raphael Pigulla - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `require` calls to be mixed with regular variable declarations", - category: "Node.js and CommonJS", - recommended: false, - url: "https://eslint.org/docs/rules/no-mixed-requires" - }, - - schema: [ - { - oneOf: [ - { - type: "boolean" - }, - { - type: "object", - properties: { - grouping: { - type: "boolean" - }, - allowCall: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - - const options = context.options[0]; - let grouping = false, - allowCall = false; - - if (typeof options === "object") { - grouping = options.grouping; - allowCall = options.allowCall; - } else { - grouping = !!options; - } - - /** - * Returns the list of built-in modules. - * - * @returns {string[]} An array of built-in Node.js modules. - */ - function getBuiltinModules() { - - /* - * This list is generated using: - * `require("repl")._builtinLibs.concat('repl').sort()` - * This particular list is as per nodejs v0.12.2 and iojs v0.7.1 - */ - return [ - "assert", "buffer", "child_process", "cluster", "crypto", - "dgram", "dns", "domain", "events", "fs", "http", "https", - "net", "os", "path", "punycode", "querystring", "readline", - "repl", "smalloc", "stream", "string_decoder", "tls", "tty", - "url", "util", "v8", "vm", "zlib" - ]; - } - - const BUILTIN_MODULES = getBuiltinModules(); - - const DECL_REQUIRE = "require", - DECL_UNINITIALIZED = "uninitialized", - DECL_OTHER = "other"; - - const REQ_CORE = "core", - REQ_FILE = "file", - REQ_MODULE = "module", - REQ_COMPUTED = "computed"; - - /** - * Determines the type of a declaration statement. - * @param {ASTNode} initExpression The init node of the VariableDeclarator. - * @returns {string} The type of declaration represented by the expression. - */ - function getDeclarationType(initExpression) { - if (!initExpression) { - - // "var x;" - return DECL_UNINITIALIZED; - } - - if (initExpression.type === "CallExpression" && - initExpression.callee.type === "Identifier" && - initExpression.callee.name === "require" - ) { - - // "var x = require('util');" - return DECL_REQUIRE; - } - if (allowCall && - initExpression.type === "CallExpression" && - initExpression.callee.type === "CallExpression" - ) { - - // "var x = require('diagnose')('sub-module');" - return getDeclarationType(initExpression.callee); - } - if (initExpression.type === "MemberExpression") { - - // "var x = require('glob').Glob;" - return getDeclarationType(initExpression.object); - } - - // "var x = 42;" - return DECL_OTHER; - } - - /** - * Determines the type of module that is loaded via require. - * @param {ASTNode} initExpression The init node of the VariableDeclarator. - * @returns {string} The module type. - */ - function inferModuleType(initExpression) { - if (initExpression.type === "MemberExpression") { - - // "var x = require('glob').Glob;" - return inferModuleType(initExpression.object); - } - if (initExpression.arguments.length === 0) { - - // "var x = require();" - return REQ_COMPUTED; - } - - const arg = initExpression.arguments[0]; - - if (arg.type !== "Literal" || typeof arg.value !== "string") { - - // "var x = require(42);" - return REQ_COMPUTED; - } - - if (BUILTIN_MODULES.indexOf(arg.value) !== -1) { - - // "var fs = require('fs');" - return REQ_CORE; - } - if (/^\.{0,2}\//.test(arg.value)) { - - // "var utils = require('./utils');" - return REQ_FILE; - } - - // "var async = require('async');" - return REQ_MODULE; - - } - - /** - * Check if the list of variable declarations is mixed, i.e. whether it - * contains both require and other declarations. - * @param {ASTNode} declarations The list of VariableDeclarators. - * @returns {boolean} True if the declarations are mixed, false if not. - */ - function isMixed(declarations) { - const contains = {}; - - declarations.forEach(declaration => { - const type = getDeclarationType(declaration.init); - - contains[type] = true; - }); - - return !!( - contains[DECL_REQUIRE] && - (contains[DECL_UNINITIALIZED] || contains[DECL_OTHER]) - ); - } - - /** - * Check if all require declarations in the given list are of the same - * type. - * @param {ASTNode} declarations The list of VariableDeclarators. - * @returns {boolean} True if the declarations are grouped, false if not. - */ - function isGrouped(declarations) { - const found = {}; - - declarations.forEach(declaration => { - if (getDeclarationType(declaration.init) === DECL_REQUIRE) { - found[inferModuleType(declaration.init)] = true; - } - }); - - return Object.keys(found).length <= 1; - } - - - return { - - VariableDeclaration(node) { - - if (isMixed(node.declarations)) { - context.report({ node, message: "Do not mix 'require' and other declarations." }); - } else if (grouping && !isGrouped(node.declarations)) { - context.report({ node, message: "Do not mix core, module, file and computed requires." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js b/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js deleted file mode 100644 index 7cb4b4c..0000000 --- a/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js +++ /dev/null @@ -1,144 +0,0 @@ -/** - * @fileoverview Disallow mixed spaces and tabs for indentation - * @author Jary Niebur - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow mixed spaces and tabs for indentation", - category: "Stylistic Issues", - recommended: true, - url: "https://eslint.org/docs/rules/no-mixed-spaces-and-tabs" - }, - - schema: [ - { - enum: ["smart-tabs", true, false] - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - let smartTabs; - const ignoredLocs = []; - - switch (context.options[0]) { - case true: // Support old syntax, maybe add deprecation warning here - case "smart-tabs": - smartTabs = true; - break; - default: - smartTabs = false; - } - - /** - * Determines if a given line and column are before a location. - * @param {Location} loc The location object from an AST node. - * @param {int} line The line to check. - * @param {int} column The column to check. - * @returns {boolean} True if the line and column are before the location, false if not. - * @private - */ - function beforeLoc(loc, line, column) { - if (line < loc.start.line) { - return true; - } - return line === loc.start.line && column < loc.start.column; - } - - /** - * Determines if a given line and column are after a location. - * @param {Location} loc The location object from an AST node. - * @param {int} line The line to check. - * @param {int} column The column to check. - * @returns {boolean} True if the line and column are after the location, false if not. - * @private - */ - function afterLoc(loc, line, column) { - if (line > loc.end.line) { - return true; - } - return line === loc.end.line && column > loc.end.column; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - - TemplateElement(node) { - ignoredLocs.push(node.loc); - }, - - "Program:exit"(node) { - - /* - * At least one space followed by a tab - * or the reverse before non-tab/-space - * characters begin. - */ - let regex = /^(?=[\t ]*(\t | \t))/; - const lines = sourceCode.lines, - comments = sourceCode.getAllComments(); - - comments.forEach(comment => { - ignoredLocs.push(comment.loc); - }); - - ignoredLocs.sort((first, second) => { - if (beforeLoc(first, second.start.line, second.start.column)) { - return 1; - } - - if (beforeLoc(second, first.start.line, second.start.column)) { - return -1; - } - - return 0; - }); - - if (smartTabs) { - - /* - * At least one space followed by a tab - * before non-tab/-space characters begin. - */ - regex = /^(?=[\t ]* \t)/; - } - - lines.forEach((line, i) => { - const match = regex.exec(line); - - if (match) { - const lineNumber = i + 1, - column = match.index + 1; - - for (let j = 0; j < ignoredLocs.length; j++) { - if (beforeLoc(ignoredLocs[j], lineNumber, column)) { - continue; - } - if (afterLoc(ignoredLocs[j], lineNumber, column)) { - continue; - } - - return; - } - - context.report({ node, loc: { line: lineNumber, column }, message: "Mixed spaces and tabs." }); - } - }); - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-multi-assign.js b/node_modules/eslint/lib/rules/no-multi-assign.js deleted file mode 100644 index ca3f778..0000000 --- a/node_modules/eslint/lib/rules/no-multi-assign.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * @fileoverview Rule to check use of chained assignment expressions - * @author Stewart Rand - */ - -"use strict"; - - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow use of chained assignment expressions", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-multi-assign" - }, - schema: [] - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - AssignmentExpression(node) { - if (["AssignmentExpression", "VariableDeclarator"].indexOf(node.parent.type) !== -1) { - context.report({ - node, - message: "Unexpected chained assignment." - }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-multi-spaces.js b/node_modules/eslint/lib/rules/no-multi-spaces.js deleted file mode 100644 index d0ca097..0000000 --- a/node_modules/eslint/lib/rules/no-multi-spaces.js +++ /dev/null @@ -1,131 +0,0 @@ -/** - * @fileoverview Disallow use of multiple spaces. - * @author Nicholas C. Zakas - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow multiple spaces", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-multi-spaces" - }, - - fixable: "whitespace", - - schema: [ - { - type: "object", - properties: { - exceptions: { - type: "object", - patternProperties: { - "^([A-Z][a-z]*)+$": { - type: "boolean" - } - }, - additionalProperties: false - }, - ignoreEOLComments: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const options = context.options[0] || {}; - const ignoreEOLComments = options.ignoreEOLComments; - const exceptions = Object.assign({ Property: true }, options.exceptions); - const hasExceptions = Object.keys(exceptions).filter(key => exceptions[key]).length > 0; - - /** - * Formats value of given comment token for error message by truncating its length. - * @param {Token} token comment token - * @returns {string} formatted value - * @private - */ - function formatReportedCommentValue(token) { - const valueLines = token.value.split("\n"); - const value = valueLines[0]; - const formattedValue = `${value.slice(0, 12)}...`; - - return valueLines.length === 1 && value.length <= 12 ? value : formattedValue; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - Program() { - sourceCode.tokensAndComments.forEach((leftToken, leftIndex, tokensAndComments) => { - if (leftIndex === tokensAndComments.length - 1) { - return; - } - const rightToken = tokensAndComments[leftIndex + 1]; - - // Ignore tokens that don't have 2 spaces between them or are on different lines - if ( - !sourceCode.text.slice(leftToken.range[1], rightToken.range[0]).includes(" ") || - leftToken.loc.end.line < rightToken.loc.start.line - ) { - return; - } - - // Ignore comments that are the last token on their line if `ignoreEOLComments` is active. - if ( - ignoreEOLComments && - astUtils.isCommentToken(rightToken) && - ( - leftIndex === tokensAndComments.length - 2 || - rightToken.loc.end.line < tokensAndComments[leftIndex + 2].loc.start.line - ) - ) { - return; - } - - // Ignore tokens that are in a node in the "exceptions" object - if (hasExceptions) { - const parentNode = sourceCode.getNodeByRangeIndex(rightToken.range[0] - 1); - - if (parentNode && exceptions[parentNode.type]) { - return; - } - } - - let displayValue; - - if (rightToken.type === "Block") { - displayValue = `/*${formatReportedCommentValue(rightToken)}*/`; - } else if (rightToken.type === "Line") { - displayValue = `//${formatReportedCommentValue(rightToken)}`; - } else { - displayValue = rightToken.value; - } - - context.report({ - node: rightToken, - loc: rightToken.loc.start, - message: "Multiple spaces found before '{{displayValue}}'.", - data: { displayValue }, - fix: fixer => fixer.replaceTextRange([leftToken.range[1], rightToken.range[0]], " ") - }); - }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-multi-str.js b/node_modules/eslint/lib/rules/no-multi-str.js deleted file mode 100644 index 2b97c26..0000000 --- a/node_modules/eslint/lib/rules/no-multi-str.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * @fileoverview Rule to flag when using multiline strings - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow multiline strings", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-multi-str" - }, - - schema: [] - }, - - create(context) { - - /** - * Determines if a given node is part of JSX syntax. - * @param {ASTNode} node The node to check. - * @returns {boolean} True if the node is a JSX node, false if not. - * @private - */ - function isJSXElement(node) { - return node.type.indexOf("JSX") === 0; - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - - Literal(node) { - if (astUtils.LINEBREAK_MATCHER.test(node.raw) && !isJSXElement(node.parent)) { - context.report({ node, message: "Multiline support is limited to browsers supporting ES5 only." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-multiple-empty-lines.js b/node_modules/eslint/lib/rules/no-multiple-empty-lines.js deleted file mode 100644 index a111786..0000000 --- a/node_modules/eslint/lib/rules/no-multiple-empty-lines.js +++ /dev/null @@ -1,137 +0,0 @@ -/** - * @fileoverview Disallows multiple blank lines. - * implementation adapted from the no-trailing-spaces rule. - * @author Greg Cochard - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow multiple empty lines", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-multiple-empty-lines" - }, - - fixable: "whitespace", - - schema: [ - { - type: "object", - properties: { - max: { - type: "integer", - minimum: 0 - }, - maxEOF: { - type: "integer", - minimum: 0 - }, - maxBOF: { - type: "integer", - minimum: 0 - } - }, - required: ["max"], - additionalProperties: false - } - ] - }, - - create(context) { - - // Use options.max or 2 as default - let max = 2, - maxEOF = max, - maxBOF = max; - - if (context.options.length) { - max = context.options[0].max; - maxEOF = typeof context.options[0].maxEOF !== "undefined" ? context.options[0].maxEOF : max; - maxBOF = typeof context.options[0].maxBOF !== "undefined" ? context.options[0].maxBOF : max; - } - - const sourceCode = context.getSourceCode(); - - // Swallow the final newline, as some editors add it automatically and we don't want it to cause an issue - const allLines = sourceCode.lines[sourceCode.lines.length - 1] === "" ? sourceCode.lines.slice(0, -1) : sourceCode.lines; - const templateLiteralLines = new Set(); - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - TemplateLiteral(node) { - node.quasis.forEach(literalPart => { - - // Empty lines have a semantic meaning if they're inside template literals. Don't count these as empty lines. - for (let ignoredLine = literalPart.loc.start.line; ignoredLine < literalPart.loc.end.line; ignoredLine++) { - templateLiteralLines.add(ignoredLine); - } - }); - }, - "Program:exit"(node) { - return allLines - - // Given a list of lines, first get a list of line numbers that are non-empty. - .reduce((nonEmptyLineNumbers, line, index) => { - if (line.trim() || templateLiteralLines.has(index + 1)) { - nonEmptyLineNumbers.push(index + 1); - } - return nonEmptyLineNumbers; - }, []) - - // Add a value at the end to allow trailing empty lines to be checked. - .concat(allLines.length + 1) - - // Given two line numbers of non-empty lines, report the lines between if the difference is too large. - .reduce((lastLineNumber, lineNumber) => { - let message, maxAllowed; - - if (lastLineNumber === 0) { - message = "Too many blank lines at the beginning of file. Max of {{max}} allowed."; - maxAllowed = maxBOF; - } else if (lineNumber === allLines.length + 1) { - message = "Too many blank lines at the end of file. Max of {{max}} allowed."; - maxAllowed = maxEOF; - } else { - message = "More than {{max}} blank {{pluralizedLines}} not allowed."; - maxAllowed = max; - } - - if (lineNumber - lastLineNumber - 1 > maxAllowed) { - context.report({ - node, - loc: { start: { line: lastLineNumber + 1, column: 0 }, end: { line: lineNumber, column: 0 } }, - message, - data: { max: maxAllowed, pluralizedLines: maxAllowed === 1 ? "line" : "lines" }, - fix(fixer) { - const rangeStart = sourceCode.getIndexFromLoc({ line: lastLineNumber + 1, column: 0 }); - - /* - * The end of the removal range is usually the start index of the next line. - * However, at the end of the file there is no next line, so the end of the - * range is just the length of the text. - */ - const lineNumberAfterRemovedLines = lineNumber - maxAllowed; - const rangeEnd = lineNumberAfterRemovedLines <= allLines.length - ? sourceCode.getIndexFromLoc({ line: lineNumberAfterRemovedLines, column: 0 }) - : sourceCode.text.length; - - return fixer.removeRange([rangeStart, rangeEnd]); - } - }); - } - - return lineNumber; - }, 0); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-native-reassign.js b/node_modules/eslint/lib/rules/no-native-reassign.js deleted file mode 100644 index b1064b0..0000000 --- a/node_modules/eslint/lib/rules/no-native-reassign.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * @fileoverview Rule to disallow assignments to native objects or read-only global variables - * @author Ilya Volodin - * @deprecated in ESLint v3.3.0 - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow assignments to native objects or read-only global variables", - category: "Best Practices", - recommended: false, - replacedBy: ["no-global-assign"], - url: "https://eslint.org/docs/rules/no-native-reassign" - }, - - deprecated: true, - - schema: [ - { - type: "object", - properties: { - exceptions: { - type: "array", - items: { type: "string" }, - uniqueItems: true - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const config = context.options[0]; - const exceptions = (config && config.exceptions) || []; - - /** - * Reports write references. - * @param {Reference} reference - A reference to check. - * @param {int} index - The index of the reference in the references. - * @param {Reference[]} references - The array that the reference belongs to. - * @returns {void} - */ - function checkReference(reference, index, references) { - const identifier = reference.identifier; - - if (reference.init === false && - reference.isWrite() && - - /* - * Destructuring assignments can have multiple default value, - * so possibly there are multiple writeable references for the same identifier. - */ - (index === 0 || references[index - 1].identifier !== identifier) - ) { - context.report({ - node: identifier, - message: "Read-only global '{{name}}' should not be modified.", - data: identifier - }); - } - } - - /** - * Reports write references if a given variable is read-only builtin. - * @param {Variable} variable - A variable to check. - * @returns {void} - */ - function checkVariable(variable) { - if (variable.writeable === false && exceptions.indexOf(variable.name) === -1) { - variable.references.forEach(checkReference); - } - } - - return { - Program() { - const globalScope = context.getScope(); - - globalScope.variables.forEach(checkVariable); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-negated-condition.js b/node_modules/eslint/lib/rules/no-negated-condition.js deleted file mode 100644 index 254dcb5..0000000 --- a/node_modules/eslint/lib/rules/no-negated-condition.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @fileoverview Rule to disallow a negated condition - * @author Alberto Rodríguez - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow negated conditions", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-negated-condition" - }, - - schema: [] - }, - - create(context) { - - /** - * Determines if a given node is an if-else without a condition on the else - * @param {ASTNode} node The node to check. - * @returns {boolean} True if the node has an else without an if. - * @private - */ - function hasElseWithoutCondition(node) { - return node.alternate && node.alternate.type !== "IfStatement"; - } - - /** - * Determines if a given node is a negated unary expression - * @param {Object} test The test object to check. - * @returns {boolean} True if the node is a negated unary expression. - * @private - */ - function isNegatedUnaryExpression(test) { - return test.type === "UnaryExpression" && test.operator === "!"; - } - - /** - * Determines if a given node is a negated binary expression - * @param {Test} test The test to check. - * @returns {boolean} True if the node is a negated binary expression. - * @private - */ - function isNegatedBinaryExpression(test) { - return test.type === "BinaryExpression" && - (test.operator === "!=" || test.operator === "!=="); - } - - /** - * Determines if a given node has a negated if expression - * @param {ASTNode} node The node to check. - * @returns {boolean} True if the node has a negated if expression. - * @private - */ - function isNegatedIf(node) { - return isNegatedUnaryExpression(node.test) || isNegatedBinaryExpression(node.test); - } - - return { - IfStatement(node) { - if (!hasElseWithoutCondition(node)) { - return; - } - - if (isNegatedIf(node)) { - context.report({ node, message: "Unexpected negated condition." }); - } - }, - ConditionalExpression(node) { - if (isNegatedIf(node)) { - context.report({ node, message: "Unexpected negated condition." }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-negated-in-lhs.js b/node_modules/eslint/lib/rules/no-negated-in-lhs.js deleted file mode 100644 index 7f08814..0000000 --- a/node_modules/eslint/lib/rules/no-negated-in-lhs.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @fileoverview A rule to disallow negated left operands of the `in` operator - * @author Michael Ficarra - * @deprecated in ESLint v3.3.0 - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow negating the left operand in `in` expressions", - category: "Possible Errors", - recommended: false, - replacedBy: ["no-unsafe-negation"], - url: "https://eslint.org/docs/rules/no-negated-in-lhs" - }, - deprecated: true, - - schema: [] - }, - - create(context) { - - return { - - BinaryExpression(node) { - if (node.operator === "in" && node.left.type === "UnaryExpression" && node.left.operator === "!") { - context.report({ node, message: "The 'in' expression's left operand is negated." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-nested-ternary.js b/node_modules/eslint/lib/rules/no-nested-ternary.js deleted file mode 100644 index 15e72f2..0000000 --- a/node_modules/eslint/lib/rules/no-nested-ternary.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @fileoverview Rule to flag nested ternary expressions - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow nested ternary expressions", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-nested-ternary" - }, - - schema: [] - }, - - create(context) { - - return { - ConditionalExpression(node) { - if (node.alternate.type === "ConditionalExpression" || - node.consequent.type === "ConditionalExpression") { - context.report({ node, message: "Do not nest ternary expressions." }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-new-func.js b/node_modules/eslint/lib/rules/no-new-func.js deleted file mode 100644 index 8ee327b..0000000 --- a/node_modules/eslint/lib/rules/no-new-func.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * @fileoverview Rule to flag when using new Function - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `new` operators with the `Function` object", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-new-func" - }, - - schema: [] - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Reports a node. - * @param {ASTNode} node The node to report - * @returns {void} - * @private - */ - function report(node) { - context.report({ node, message: "The Function constructor is eval." }); - } - - return { - "NewExpression[callee.name = 'Function']": report, - "CallExpression[callee.name = 'Function']": report - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-new-object.js b/node_modules/eslint/lib/rules/no-new-object.js deleted file mode 100644 index 3f68cbc..0000000 --- a/node_modules/eslint/lib/rules/no-new-object.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @fileoverview A rule to disallow calls to the Object constructor - * @author Matt DuVall - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `Object` constructors", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-new-object" - }, - - schema: [] - }, - - create(context) { - - return { - - NewExpression(node) { - if (node.callee.name === "Object") { - context.report({ node, message: "The object literal notation {} is preferrable." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-new-require.js b/node_modules/eslint/lib/rules/no-new-require.js deleted file mode 100644 index f74daa7..0000000 --- a/node_modules/eslint/lib/rules/no-new-require.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @fileoverview Rule to disallow use of new operator with the `require` function - * @author Wil Moore III - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `new` operators with calls to `require`", - category: "Node.js and CommonJS", - recommended: false, - url: "https://eslint.org/docs/rules/no-new-require" - }, - - schema: [] - }, - - create(context) { - - return { - - NewExpression(node) { - if (node.callee.type === "Identifier" && node.callee.name === "require") { - context.report({ node, message: "Unexpected use of new with require." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-new-symbol.js b/node_modules/eslint/lib/rules/no-new-symbol.js deleted file mode 100644 index a537268..0000000 --- a/node_modules/eslint/lib/rules/no-new-symbol.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @fileoverview Rule to disallow use of the new operator with the `Symbol` object - * @author Alberto Rodríguez - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `new` operators with the `Symbol` object", - category: "ECMAScript 6", - recommended: true, - url: "https://eslint.org/docs/rules/no-new-symbol" - }, - - schema: [] - }, - - create(context) { - - return { - "Program:exit"() { - const globalScope = context.getScope(); - const variable = globalScope.set.get("Symbol"); - - if (variable && variable.defs.length === 0) { - variable.references.forEach(ref => { - const node = ref.identifier; - - if (node.parent && node.parent.type === "NewExpression") { - context.report({ node, message: "`Symbol` cannot be called as a constructor." }); - } - }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-new-wrappers.js b/node_modules/eslint/lib/rules/no-new-wrappers.js deleted file mode 100644 index e8d5162..0000000 --- a/node_modules/eslint/lib/rules/no-new-wrappers.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @fileoverview Rule to flag when using constructor for wrapper objects - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `new` operators with the `String`, `Number`, and `Boolean` objects", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-new-wrappers" - }, - - schema: [] - }, - - create(context) { - - return { - - NewExpression(node) { - const wrapperObjects = ["String", "Number", "Boolean", "Math", "JSON"]; - - if (wrapperObjects.indexOf(node.callee.name) > -1) { - context.report({ node, message: "Do not use {{fn}} as a constructor.", data: { fn: node.callee.name } }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-new.js b/node_modules/eslint/lib/rules/no-new.js deleted file mode 100644 index f9121bc..0000000 --- a/node_modules/eslint/lib/rules/no-new.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @fileoverview Rule to flag statements with function invocation preceded by - * "new" and not part of assignment - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `new` operators outside of assignments or comparisons", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-new" - }, - - schema: [] - }, - - create(context) { - - return { - "ExpressionStatement > NewExpression"(node) { - context.report({ node: node.parent, message: "Do not use 'new' for side effects." }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-obj-calls.js b/node_modules/eslint/lib/rules/no-obj-calls.js deleted file mode 100644 index 320343c..0000000 --- a/node_modules/eslint/lib/rules/no-obj-calls.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @fileoverview Rule to flag use of an object property of the global object (Math and JSON) as a function - * @author James Allardice - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow calling global object properties as functions", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-obj-calls" - }, - - schema: [] - }, - - create(context) { - - return { - CallExpression(node) { - - if (node.callee.type === "Identifier") { - const name = node.callee.name; - - if (name === "Math" || name === "JSON" || name === "Reflect") { - context.report({ node, message: "'{{name}}' is not a function.", data: { name } }); - } - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-octal-escape.js b/node_modules/eslint/lib/rules/no-octal-escape.js deleted file mode 100644 index e9509b8..0000000 --- a/node_modules/eslint/lib/rules/no-octal-escape.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @fileoverview Rule to flag octal escape sequences in string literals. - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow octal escape sequences in string literals", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-octal-escape" - }, - - schema: [] - }, - - create(context) { - - return { - - Literal(node) { - if (typeof node.value !== "string") { - return; - } - - const match = node.raw.match(/^([^\\]|\\[^0-7])*\\([0-3][0-7]{1,2}|[4-7][0-7]|[0-7])/); - - if (match) { - const octalDigit = match[2]; - - // \0 is actually not considered an octal - if (match[2] !== "0" || typeof match[3] !== "undefined") { - context.report({ node, message: "Don't use octal: '\\{{octalDigit}}'. Use '\\u....' instead.", data: { octalDigit } }); - } - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-octal.js b/node_modules/eslint/lib/rules/no-octal.js deleted file mode 100644 index d782c23..0000000 --- a/node_modules/eslint/lib/rules/no-octal.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @fileoverview Rule to flag when initializing octal literal - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow octal literals", - category: "Best Practices", - recommended: true, - url: "https://eslint.org/docs/rules/no-octal" - }, - - schema: [] - }, - - create(context) { - - return { - - Literal(node) { - if (typeof node.value === "number" && /^0[0-7]/.test(node.raw)) { - context.report({ node, message: "Octal literals should not be used." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-param-reassign.js b/node_modules/eslint/lib/rules/no-param-reassign.js deleted file mode 100644 index be1a559..0000000 --- a/node_modules/eslint/lib/rules/no-param-reassign.js +++ /dev/null @@ -1,174 +0,0 @@ -/** - * @fileoverview Disallow reassignment of function parameters. - * @author Nat Burns - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const stopNodePattern = /(?:Statement|Declaration|Function(?:Expression)?|Program)$/; - -module.exports = { - meta: { - docs: { - description: "disallow reassigning `function` parameters", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-param-reassign" - }, - - schema: [ - { - oneOf: [ - { - type: "object", - properties: { - props: { - enum: [false] - } - }, - additionalProperties: false - }, - { - type: "object", - properties: { - props: { - enum: [true] - }, - ignorePropertyModificationsFor: { - type: "array", - items: { - type: "string" - }, - uniqueItems: true - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - const props = context.options[0] && Boolean(context.options[0].props); - const ignoredPropertyAssignmentsFor = context.options[0] && context.options[0].ignorePropertyModificationsFor || []; - - /** - * Checks whether or not the reference modifies properties of its variable. - * @param {Reference} reference - A reference to check. - * @returns {boolean} Whether or not the reference modifies properties of its variable. - */ - function isModifyingProp(reference) { - let node = reference.identifier; - let parent = node.parent; - - while (parent && !stopNodePattern.test(parent.type)) { - switch (parent.type) { - - // e.g. foo.a = 0; - case "AssignmentExpression": - return parent.left === node; - - // e.g. ++foo.a; - case "UpdateExpression": - return true; - - // e.g. delete foo.a; - case "UnaryExpression": - if (parent.operator === "delete") { - return true; - } - break; - - // EXCLUDES: e.g. cache.get(foo.a).b = 0; - case "CallExpression": - if (parent.callee !== node) { - return false; - } - break; - - // EXCLUDES: e.g. cache[foo.a] = 0; - case "MemberExpression": - if (parent.property === node) { - return false; - } - break; - - // EXCLUDES: e.g. ({ [foo]: a }) = bar; - case "Property": - if (parent.key === node) { - return false; - } - - break; - - // no default - } - - node = parent; - parent = node.parent; - } - - return false; - } - - /** - * Reports a reference if is non initializer and writable. - * @param {Reference} reference - A reference to check. - * @param {int} index - The index of the reference in the references. - * @param {Reference[]} references - The array that the reference belongs to. - * @returns {void} - */ - function checkReference(reference, index, references) { - const identifier = reference.identifier; - - if (identifier && - !reference.init && - - /* - * Destructuring assignments can have multiple default value, - * so possibly there are multiple writeable references for the same identifier. - */ - (index === 0 || references[index - 1].identifier !== identifier) - ) { - if (reference.isWrite()) { - context.report({ node: identifier, message: "Assignment to function parameter '{{name}}'.", data: { name: identifier.name } }); - } else if (props && isModifyingProp(reference) && ignoredPropertyAssignmentsFor.indexOf(identifier.name) === -1) { - context.report({ node: identifier, message: "Assignment to property of function parameter '{{name}}'.", data: { name: identifier.name } }); - } - } - } - - /** - * Finds and reports references that are non initializer and writable. - * @param {Variable} variable - A variable to check. - * @returns {void} - */ - function checkVariable(variable) { - if (variable.defs[0].type === "Parameter") { - variable.references.forEach(checkReference); - } - } - - /** - * Checks parameters of a given function node. - * @param {ASTNode} node - A function node to check. - * @returns {void} - */ - function checkForFunction(node) { - context.getDeclaredVariables(node).forEach(checkVariable); - } - - return { - - // `:exit` is needed for the `node.parent` property of identifier nodes. - "FunctionDeclaration:exit": checkForFunction, - "FunctionExpression:exit": checkForFunction, - "ArrowFunctionExpression:exit": checkForFunction - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-path-concat.js b/node_modules/eslint/lib/rules/no-path-concat.js deleted file mode 100644 index 1dee7bd..0000000 --- a/node_modules/eslint/lib/rules/no-path-concat.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * @fileoverview Disallow string concatenation when using __dirname and __filename - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow string concatenation with `__dirname` and `__filename`", - category: "Node.js and CommonJS", - recommended: false, - url: "https://eslint.org/docs/rules/no-path-concat" - }, - - schema: [] - }, - - create(context) { - - const MATCHER = /^__(?:dir|file)name$/; - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - - BinaryExpression(node) { - - const left = node.left, - right = node.right; - - if (node.operator === "+" && - ((left.type === "Identifier" && MATCHER.test(left.name)) || - (right.type === "Identifier" && MATCHER.test(right.name))) - ) { - - context.report({ node, message: "Use path.join() or path.resolve() instead of + to create paths." }); - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-plusplus.js b/node_modules/eslint/lib/rules/no-plusplus.js deleted file mode 100644 index f754b36..0000000 --- a/node_modules/eslint/lib/rules/no-plusplus.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * @fileoverview Rule to flag use of unary increment and decrement operators. - * @author Ian Christian Myers - * @author Brody McKee (github.com/mrmckeb) - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the unary operators `++` and `--`", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-plusplus" - }, - - schema: [ - { - type: "object", - properties: { - allowForLoopAfterthoughts: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const config = context.options[0]; - let allowInForAfterthought = false; - - if (typeof config === "object") { - allowInForAfterthought = config.allowForLoopAfterthoughts === true; - } - - return { - - UpdateExpression(node) { - if (allowInForAfterthought && node.parent.type === "ForStatement") { - return; - } - context.report({ - node, - message: "Unary operator '{{operator}}' used.", - data: { - operator: node.operator - } - }); - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-process-env.js b/node_modules/eslint/lib/rules/no-process-env.js deleted file mode 100644 index 71b27ff..0000000 --- a/node_modules/eslint/lib/rules/no-process-env.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @fileoverview Disallow the use of process.env() - * @author Vignesh Anand - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of `process.env`", - category: "Node.js and CommonJS", - recommended: false, - url: "https://eslint.org/docs/rules/no-process-env" - }, - - schema: [] - }, - - create(context) { - - return { - - MemberExpression(node) { - const objectName = node.object.name, - propertyName = node.property.name; - - if (objectName === "process" && !node.computed && propertyName && propertyName === "env") { - context.report({ node, message: "Unexpected use of process.env." }); - } - - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-process-exit.js b/node_modules/eslint/lib/rules/no-process-exit.js deleted file mode 100644 index 2d22d7f..0000000 --- a/node_modules/eslint/lib/rules/no-process-exit.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @fileoverview Disallow the use of process.exit() - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of `process.exit()`", - category: "Node.js and CommonJS", - recommended: false, - url: "https://eslint.org/docs/rules/no-process-exit" - }, - - schema: [] - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - "CallExpression > MemberExpression.callee[object.name = 'process'][property.name = 'exit']"(node) { - context.report({ node: node.parent, message: "Don't use process.exit(); throw an error instead." }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-proto.js b/node_modules/eslint/lib/rules/no-proto.js deleted file mode 100644 index e37c6c2..0000000 --- a/node_modules/eslint/lib/rules/no-proto.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @fileoverview Rule to flag usage of __proto__ property - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of the `__proto__` property", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-proto" - }, - - schema: [] - }, - - create(context) { - - return { - - MemberExpression(node) { - - if (node.property && - (node.property.type === "Identifier" && node.property.name === "__proto__" && !node.computed) || - (node.property.type === "Literal" && node.property.value === "__proto__")) { - context.report({ node, message: "The '__proto__' property is deprecated." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-prototype-builtins.js b/node_modules/eslint/lib/rules/no-prototype-builtins.js deleted file mode 100644 index f52847f..0000000 --- a/node_modules/eslint/lib/rules/no-prototype-builtins.js +++ /dev/null @@ -1,55 +0,0 @@ -/** - * @fileoverview Rule to disallow use of Object.prototype builtins on objects - * @author Andrew Levine - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow calling some `Object.prototype` methods directly on objects", - category: "Possible Errors", - recommended: false, - url: "https://eslint.org/docs/rules/no-prototype-builtins" - }, - - schema: [] - }, - - create(context) { - const DISALLOWED_PROPS = [ - "hasOwnProperty", - "isPrototypeOf", - "propertyIsEnumerable" - ]; - - /** - * Reports if a disallowed property is used in a CallExpression - * @param {ASTNode} node The CallExpression node. - * @returns {void} - */ - function disallowBuiltIns(node) { - if (node.callee.type !== "MemberExpression" || node.callee.computed) { - return; - } - const propName = node.callee.property.name; - - if (DISALLOWED_PROPS.indexOf(propName) > -1) { - context.report({ - message: "Do not access Object.prototype method '{{prop}}' from target object.", - loc: node.callee.property.loc.start, - data: { prop: propName }, - node - }); - } - } - - return { - CallExpression: disallowBuiltIns - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-redeclare.js b/node_modules/eslint/lib/rules/no-redeclare.js deleted file mode 100644 index 79ab211..0000000 --- a/node_modules/eslint/lib/rules/no-redeclare.js +++ /dev/null @@ -1,102 +0,0 @@ -/** - * @fileoverview Rule to flag when the same variable is declared more then once. - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow variable redeclaration", - category: "Best Practices", - recommended: true, - url: "https://eslint.org/docs/rules/no-redeclare" - }, - - schema: [ - { - type: "object", - properties: { - builtinGlobals: { type: "boolean" } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const options = { - builtinGlobals: Boolean(context.options[0] && context.options[0].builtinGlobals) - }; - - /** - * Find variables in a given scope and flag redeclared ones. - * @param {Scope} scope - An eslint-scope scope object. - * @returns {void} - * @private - */ - function findVariablesInScope(scope) { - scope.variables.forEach(variable => { - const hasBuiltin = options.builtinGlobals && "writeable" in variable; - const count = (hasBuiltin ? 1 : 0) + variable.identifiers.length; - - if (count >= 2) { - variable.identifiers.sort((a, b) => a.range[1] - b.range[1]); - - for (let i = (hasBuiltin ? 0 : 1), l = variable.identifiers.length; i < l; i++) { - context.report({ node: variable.identifiers[i], message: "'{{a}}' is already defined.", data: { a: variable.name } }); - } - } - }); - - } - - /** - * Find variables in the current scope. - * @param {ASTNode} node - The Program node. - * @returns {void} - * @private - */ - function checkForGlobal(node) { - const scope = context.getScope(), - parserOptions = context.parserOptions, - ecmaFeatures = parserOptions.ecmaFeatures || {}; - - // Nodejs env or modules has a special scope. - if (ecmaFeatures.globalReturn || node.sourceType === "module") { - findVariablesInScope(scope.childScopes[0]); - } else { - findVariablesInScope(scope); - } - } - - /** - * Find variables in the current scope. - * @returns {void} - * @private - */ - function checkForBlock() { - findVariablesInScope(context.getScope()); - } - - if (context.parserOptions.ecmaVersion >= 6) { - return { - Program: checkForGlobal, - BlockStatement: checkForBlock, - SwitchStatement: checkForBlock - }; - } - return { - Program: checkForGlobal, - FunctionDeclaration: checkForBlock, - FunctionExpression: checkForBlock, - ArrowFunctionExpression: checkForBlock - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-regex-spaces.js b/node_modules/eslint/lib/rules/no-regex-spaces.js deleted file mode 100644 index a50692a..0000000 --- a/node_modules/eslint/lib/rules/no-regex-spaces.js +++ /dev/null @@ -1,115 +0,0 @@ -/** - * @fileoverview Rule to count multiple spaces in regular expressions - * @author Matt DuVall - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow multiple spaces in regular expressions", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-regex-spaces" - }, - - schema: [], - - fixable: "code" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - /** - * Validate regular expressions - * @param {ASTNode} node node to validate - * @param {string} value regular expression to validate - * @param {number} valueStart The start location of the regex/string literal. It will always be the case that - * `sourceCode.getText().slice(valueStart, valueStart + value.length) === value` - * @returns {void} - * @private - */ - function checkRegex(node, value, valueStart) { - const multipleSpacesRegex = /( {2,})( [+*{?]|[^+*{?]|$)/, - regexResults = multipleSpacesRegex.exec(value); - - if (regexResults !== null) { - const count = regexResults[1].length; - - context.report({ - node, - message: "Spaces are hard to count. Use {{{count}}}.", - data: { count }, - fix(fixer) { - return fixer.replaceTextRange( - [valueStart + regexResults.index, valueStart + regexResults.index + count], - ` {${count}}` - ); - } - }); - - /* - * TODO: (platinumazure) Fix message to use rule message - * substitution when api.report is fixed in lib/eslint.js. - */ - } - } - - /** - * Validate regular expression literals - * @param {ASTNode} node node to validate - * @returns {void} - * @private - */ - function checkLiteral(node) { - const token = sourceCode.getFirstToken(node), - nodeType = token.type, - nodeValue = token.value; - - if (nodeType === "RegularExpression") { - checkRegex(node, nodeValue, token.range[0]); - } - } - - /** - * Check if node is a string - * @param {ASTNode} node node to evaluate - * @returns {boolean} True if its a string - * @private - */ - function isString(node) { - return node && node.type === "Literal" && typeof node.value === "string"; - } - - /** - * Validate strings passed to the RegExp constructor - * @param {ASTNode} node node to validate - * @returns {void} - * @private - */ - function checkFunction(node) { - const scope = context.getScope(); - const regExpVar = astUtils.getVariableByName(scope, "RegExp"); - const shadowed = regExpVar && regExpVar.defs.length > 0; - - if (node.callee.type === "Identifier" && node.callee.name === "RegExp" && isString(node.arguments[0]) && !shadowed) { - checkRegex(node, node.arguments[0].value, node.arguments[0].range[0] + 1); - } - } - - return { - Literal: checkLiteral, - CallExpression: checkFunction, - NewExpression: checkFunction - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-restricted-globals.js b/node_modules/eslint/lib/rules/no-restricted-globals.js deleted file mode 100644 index 691e55d..0000000 --- a/node_modules/eslint/lib/rules/no-restricted-globals.js +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @fileoverview Restrict usage of specified globals. - * @author Benoît Zugmeyer - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const DEFAULT_MESSAGE_TEMPLATE = "Unexpected use of '{{name}}'.", - CUSTOM_MESSAGE_TEMPLATE = "Unexpected use of '{{name}}'. {{customMessage}}"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow specified global variables", - category: "Variables", - recommended: false, - url: "https://eslint.org/docs/rules/no-restricted-globals" - }, - - schema: { - type: "array", - items: { - oneOf: [ - { - type: "string" - }, - { - type: "object", - properties: { - name: { type: "string" }, - message: { type: "string" } - }, - required: ["name"], - additionalProperties: false - } - ] - }, - uniqueItems: true, - minItems: 0 - } - }, - - create(context) { - - // If no globals are restricted, we don't need to do anything - if (context.options.length === 0) { - return {}; - } - - const restrictedGlobalMessages = context.options.reduce((memo, option) => { - if (typeof option === "string") { - memo[option] = null; - } else { - memo[option.name] = option.message; - } - - return memo; - }, {}); - - /** - * Report a variable to be used as a restricted global. - * @param {Reference} reference the variable reference - * @returns {void} - * @private - */ - function reportReference(reference) { - const name = reference.identifier.name, - customMessage = restrictedGlobalMessages[name], - message = customMessage - ? CUSTOM_MESSAGE_TEMPLATE - : DEFAULT_MESSAGE_TEMPLATE; - - context.report({ - node: reference.identifier, - message, - data: { - name, - customMessage - } - }); - } - - /** - * Check if the given name is a restricted global name. - * @param {string} name name of a variable - * @returns {boolean} whether the variable is a restricted global or not - * @private - */ - function isRestricted(name) { - return restrictedGlobalMessages.hasOwnProperty(name); - } - - return { - Program() { - const scope = context.getScope(); - - // Report variables declared elsewhere (ex: variables defined as "global" by eslint) - scope.variables.forEach(variable => { - if (!variable.defs.length && isRestricted(variable.name)) { - variable.references.forEach(reportReference); - } - }); - - // Report variables not declared at all - scope.through.forEach(reference => { - if (isRestricted(reference.identifier.name)) { - reportReference(reference); - } - }); - - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-restricted-imports.js b/node_modules/eslint/lib/rules/no-restricted-imports.js deleted file mode 100644 index 11d09d6..0000000 --- a/node_modules/eslint/lib/rules/no-restricted-imports.js +++ /dev/null @@ -1,264 +0,0 @@ -/** - * @fileoverview Restrict usage of specified node imports. - * @author Guy Ellis - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const DEFAULT_MESSAGE_TEMPLATE = "'{{importSource}}' import is restricted from being used."; -const CUSTOM_MESSAGE_TEMPLATE = "'{{importSource}}' import is restricted from being used. {{customMessage}}"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const ignore = require("ignore"); - -const arrayOfStrings = { - type: "array", - items: { type: "string" }, - uniqueItems: true -}; - -const arrayOfStringsOrObjects = { - type: "array", - items: { - anyOf: [ - { type: "string" }, - { - type: "object", - properties: { - name: { type: "string" }, - message: { - type: "string", - minLength: 1 - }, - importNames: { - type: "array", - items: { - type: "string" - } - } - }, - additionalProperties: false, - required: ["name"] - } - ] - }, - uniqueItems: true -}; - -module.exports = { - meta: { - docs: { - description: "disallow specified modules when loaded by `import`", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/no-restricted-imports" - }, - - schema: { - anyOf: [ - arrayOfStringsOrObjects, - { - type: "array", - items: { - type: "object", - properties: { - paths: arrayOfStringsOrObjects, - patterns: arrayOfStrings - }, - additionalProperties: false - }, - additionalItems: false - } - ] - } - }, - - create(context) { - const options = Array.isArray(context.options) ? context.options : []; - const isPathAndPatternsObject = - typeof options[0] === "object" && - (options[0].hasOwnProperty("paths") || options[0].hasOwnProperty("patterns")); - - const restrictedPaths = (isPathAndPatternsObject ? options[0].paths : context.options) || []; - const restrictedPatterns = (isPathAndPatternsObject ? options[0].patterns : []) || []; - - const restrictedPathMessages = restrictedPaths.reduce((memo, importSource) => { - if (typeof importSource === "string") { - memo[importSource] = { message: null }; - } else { - memo[importSource.name] = { - message: importSource.message, - importNames: importSource.importNames - }; - } - return memo; - }, {}); - - // if no imports are restricted we don"t need to check - if (Object.keys(restrictedPaths).length === 0 && restrictedPatterns.length === 0) { - return {}; - } - - const restrictedPatternsMatcher = ignore().add(restrictedPatterns); - - /** - * Checks to see if "*" is being used to import everything. - * @param {Set.} importNames - Set of import names that are being imported - * @returns {boolean} whether everything is imported or not - */ - function isEverythingImported(importNames) { - return importNames.has("*"); - } - - /** - * Report a restricted path. - * @param {node} node representing the restricted path reference - * @returns {void} - * @private - */ - function reportPath(node) { - const importSource = node.source.value.trim(); - const customMessage = restrictedPathMessages[importSource] && restrictedPathMessages[importSource].message; - const message = customMessage - ? CUSTOM_MESSAGE_TEMPLATE - : DEFAULT_MESSAGE_TEMPLATE; - - context.report({ - node, - message, - data: { - importSource, - customMessage - } - }); - } - - /** - * Report a restricted path specifically for patterns. - * @param {node} node - representing the restricted path reference - * @returns {void} - * @private - */ - function reportPathForPatterns(node) { - const importSource = node.source.value.trim(); - - context.report({ - node, - message: "'{{importSource}}' import is restricted from being used by a pattern.", - data: { - importSource - } - }); - } - - /** - * Report a restricted path specifically when using the '*' import. - * @param {string} importSource - path of the import - * @param {node} node - representing the restricted path reference - * @returns {void} - * @private - */ - function reportPathForEverythingImported(importSource, node) { - const importNames = restrictedPathMessages[importSource].importNames; - - context.report({ - node, - message: "* import is invalid because '{{importNames}}' from '{{importSource}}' is restricted.", - data: { - importSource, - importNames - } - }); - } - - /** - * Check if the given importSource is restricted because '*' is being imported. - * @param {string} importSource - path of the import - * @param {Set.} importNames - Set of import names that are being imported - * @returns {boolean} whether the path is restricted - * @private - */ - function isRestrictedForEverythingImported(importSource, importNames) { - return Object.prototype.hasOwnProperty.call(restrictedPathMessages, importSource) && - restrictedPathMessages[importSource].importNames && - isEverythingImported(importNames); - } - - /** - * Check if the given importNames are restricted given a list of restrictedImportNames. - * @param {Set.} importNames - Set of import names that are being imported - * @param {[string]} restrictedImportNames - array of import names that are restricted for this import - * @returns {boolean} whether the objectName is restricted - * @private - */ - function isRestrictedObject(importNames, restrictedImportNames) { - return restrictedImportNames.some(restrictedObjectName => ( - importNames.has(restrictedObjectName) - )); - } - - /** - * Check if the given importSource is a restricted path. - * @param {string} importSource - path of the import - * @param {Set.} importNames - Set of import names that are being imported - * @returns {boolean} whether the variable is a restricted path or not - * @private - */ - function isRestrictedPath(importSource, importNames) { - let isRestricted = false; - - if (Object.prototype.hasOwnProperty.call(restrictedPathMessages, importSource)) { - if (restrictedPathMessages[importSource].importNames) { - isRestricted = isRestrictedObject(importNames, restrictedPathMessages[importSource].importNames); - } else { - isRestricted = true; - } - } - - return isRestricted; - } - - /** - * Check if the given importSource is restricted by a pattern. - * @param {string} importSource - path of the import - * @returns {boolean} whether the variable is a restricted pattern or not - * @private - */ - function isRestrictedPattern(importSource) { - return restrictedPatterns.length > 0 && restrictedPatternsMatcher.ignores(importSource); - } - - return { - ImportDeclaration(node) { - const importSource = node.source.value.trim(); - const importNames = node.specifiers.reduce((set, specifier) => { - if (specifier.type === "ImportDefaultSpecifier") { - set.add("default"); - } else if (specifier.type === "ImportNamespaceSpecifier") { - set.add("*"); - } else { - set.add(specifier.imported.name); - } - return set; - }, new Set()); - - if (isRestrictedForEverythingImported(importSource, importNames)) { - reportPathForEverythingImported(importSource, node); - } - - if (isRestrictedPath(importSource, importNames)) { - reportPath(node); - } - if (isRestrictedPattern(importSource)) { - reportPathForPatterns(node); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-restricted-modules.js b/node_modules/eslint/lib/rules/no-restricted-modules.js deleted file mode 100644 index 5427109..0000000 --- a/node_modules/eslint/lib/rules/no-restricted-modules.js +++ /dev/null @@ -1,178 +0,0 @@ -/** - * @fileoverview Restrict usage of specified node modules. - * @author Christian Schulz - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const DEFAULT_MESSAGE_TEMPLATE = "'{{moduleName}}' module is restricted from being used."; -const CUSTOM_MESSAGE_TEMPLATE = "'{{moduleName}}' module is restricted from being used. {{customMessage}}"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const ignore = require("ignore"); - -const arrayOfStrings = { - type: "array", - items: { type: "string" }, - uniqueItems: true -}; - -const arrayOfStringsOrObjects = { - type: "array", - items: { - anyOf: [ - { type: "string" }, - { - type: "object", - properties: { - name: { type: "string" }, - message: { - type: "string", - minLength: 1 - } - }, - additionalProperties: false, - required: ["name"] - } - ] - }, - uniqueItems: true -}; - -module.exports = { - meta: { - docs: { - description: "disallow specified modules when loaded by `require`", - category: "Node.js and CommonJS", - recommended: false, - url: "https://eslint.org/docs/rules/no-restricted-modules" - }, - - schema: { - anyOf: [ - arrayOfStringsOrObjects, - { - type: "array", - items: { - type: "object", - properties: { - paths: arrayOfStringsOrObjects, - patterns: arrayOfStrings - }, - additionalProperties: false - }, - additionalItems: false - } - ] - } - }, - - create(context) { - const options = Array.isArray(context.options) ? context.options : []; - const isPathAndPatternsObject = - typeof options[0] === "object" && - (options[0].hasOwnProperty("paths") || options[0].hasOwnProperty("patterns")); - - const restrictedPaths = (isPathAndPatternsObject ? options[0].paths : context.options) || []; - const restrictedPatterns = (isPathAndPatternsObject ? options[0].patterns : []) || []; - - const restrictedPathMessages = restrictedPaths.reduce((memo, importName) => { - if (typeof importName === "string") { - memo[importName] = null; - } else { - memo[importName.name] = importName.message; - } - return memo; - }, {}); - - // if no imports are restricted we don"t need to check - if (Object.keys(restrictedPaths).length === 0 && restrictedPatterns.length === 0) { - return {}; - } - - const ig = ignore().add(restrictedPatterns); - - - /** - * Function to check if a node is a string literal. - * @param {ASTNode} node The node to check. - * @returns {boolean} If the node is a string literal. - */ - function isString(node) { - return node && node.type === "Literal" && typeof node.value === "string"; - } - - /** - * Function to check if a node is a require call. - * @param {ASTNode} node The node to check. - * @returns {boolean} If the node is a require call. - */ - function isRequireCall(node) { - return node.callee.type === "Identifier" && node.callee.name === "require"; - } - - /** - * Report a restricted path. - * @param {node} node representing the restricted path reference - * @returns {void} - * @private - */ - function reportPath(node) { - const moduleName = node.arguments[0].value.trim(); - const customMessage = restrictedPathMessages[moduleName]; - const message = customMessage - ? CUSTOM_MESSAGE_TEMPLATE - : DEFAULT_MESSAGE_TEMPLATE; - - context.report({ - node, - message, - data: { - moduleName, - customMessage - } - }); - } - - /** - * Check if the given name is a restricted path name - * @param {string} name name of a variable - * @returns {boolean} whether the variable is a restricted path or not - * @private - */ - function isRestrictedPath(name) { - return Object.prototype.hasOwnProperty.call(restrictedPathMessages, name); - } - - return { - CallExpression(node) { - if (isRequireCall(node)) { - - // node has arguments and first argument is string - if (node.arguments.length && isString(node.arguments[0])) { - const moduleName = node.arguments[0].value.trim(); - - // check if argument value is in restricted modules array - if (isRestrictedPath(moduleName)) { - reportPath(node); - } - - if (restrictedPatterns.length > 0 && ig.ignores(moduleName)) { - context.report({ - node, - message: "'{{moduleName}}' module is restricted from being used by a pattern.", - data: { moduleName } - }); - } - } - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-restricted-properties.js b/node_modules/eslint/lib/rules/no-restricted-properties.js deleted file mode 100644 index 71cc83c..0000000 --- a/node_modules/eslint/lib/rules/no-restricted-properties.js +++ /dev/null @@ -1,174 +0,0 @@ -/** - * @fileoverview Rule to disallow certain object properties - * @author Will Klein & Eli White - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow certain properties on certain objects", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-restricted-properties" - }, - - schema: { - type: "array", - items: { - anyOf: [ // `object` and `property` are both optional, but at least one of them must be provided. - { - type: "object", - properties: { - object: { - type: "string" - }, - property: { - type: "string" - }, - message: { - type: "string" - } - }, - additionalProperties: false, - required: ["object"] - }, - { - type: "object", - properties: { - object: { - type: "string" - }, - property: { - type: "string" - }, - message: { - type: "string" - } - }, - additionalProperties: false, - required: ["property"] - } - ] - }, - uniqueItems: true - } - }, - - create(context) { - const restrictedCalls = context.options; - - if (restrictedCalls.length === 0) { - return {}; - } - - const restrictedProperties = new Map(); - const globallyRestrictedObjects = new Map(); - const globallyRestrictedProperties = new Map(); - - restrictedCalls.forEach(option => { - const objectName = option.object; - const propertyName = option.property; - - if (typeof objectName === "undefined") { - globallyRestrictedProperties.set(propertyName, { message: option.message }); - } else if (typeof propertyName === "undefined") { - globallyRestrictedObjects.set(objectName, { message: option.message }); - } else { - if (!restrictedProperties.has(objectName)) { - restrictedProperties.set(objectName, new Map()); - } - - restrictedProperties.get(objectName).set(propertyName, { - message: option.message - }); - } - }); - - /** - * Checks to see whether a property access is restricted, and reports it if so. - * @param {ASTNode} node The node to report - * @param {string} objectName The name of the object - * @param {string} propertyName The name of the property - * @returns {undefined} - */ - function checkPropertyAccess(node, objectName, propertyName) { - if (propertyName === null) { - return; - } - const matchedObject = restrictedProperties.get(objectName); - const matchedObjectProperty = matchedObject ? matchedObject.get(propertyName) : globallyRestrictedObjects.get(objectName); - const globalMatchedProperty = globallyRestrictedProperties.get(propertyName); - - if (matchedObjectProperty) { - const message = matchedObjectProperty.message ? ` ${matchedObjectProperty.message}` : ""; - - context.report({ - node, - // eslint-disable-next-line eslint-plugin/report-message-format - message: "'{{objectName}}.{{propertyName}}' is restricted from being used.{{message}}", - data: { - objectName, - propertyName, - message - } - }); - } else if (globalMatchedProperty) { - const message = globalMatchedProperty.message ? ` ${globalMatchedProperty.message}` : ""; - - context.report({ - node, - // eslint-disable-next-line eslint-plugin/report-message-format - message: "'{{propertyName}}' is restricted from being used.{{message}}", - data: { - propertyName, - message - } - }); - } - } - - /** - * Checks property accesses in a destructuring assignment expression, e.g. `var foo; ({foo} = bar);` - * @param {ASTNode} node An AssignmentExpression or AssignmentPattern node - * @returns {undefined} - */ - function checkDestructuringAssignment(node) { - if (node.right.type === "Identifier") { - const objectName = node.right.name; - - if (node.left.type === "ObjectPattern") { - node.left.properties.forEach(property => { - checkPropertyAccess(node.left, objectName, astUtils.getStaticPropertyName(property)); - }); - } - } - } - - return { - MemberExpression(node) { - checkPropertyAccess(node, node.object && node.object.name, astUtils.getStaticPropertyName(node)); - }, - VariableDeclarator(node) { - if (node.init && node.init.type === "Identifier") { - const objectName = node.init.name; - - if (node.id.type === "ObjectPattern") { - node.id.properties.forEach(property => { - checkPropertyAccess(node.id, objectName, astUtils.getStaticPropertyName(property)); - }); - } - } - }, - AssignmentExpression: checkDestructuringAssignment, - AssignmentPattern: checkDestructuringAssignment - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-restricted-syntax.js b/node_modules/eslint/lib/rules/no-restricted-syntax.js deleted file mode 100644 index c472d94..0000000 --- a/node_modules/eslint/lib/rules/no-restricted-syntax.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @fileoverview Rule to flag use of certain node types - * @author Burak Yigit Kaya - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow specified syntax", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-restricted-syntax" - }, - - schema: { - type: "array", - items: [{ - oneOf: [ - { - type: "string" - }, - { - type: "object", - properties: { - selector: { type: "string" }, - message: { type: "string" } - }, - required: ["selector"], - additionalProperties: false - } - ] - }], - uniqueItems: true, - minItems: 0 - } - }, - - create(context) { - return context.options.reduce((result, selectorOrObject) => { - const isStringFormat = (typeof selectorOrObject === "string"); - const hasCustomMessage = !isStringFormat && Boolean(selectorOrObject.message); - - const selector = isStringFormat ? selectorOrObject : selectorOrObject.selector; - const message = hasCustomMessage ? selectorOrObject.message : "Using '{{selector}}' is not allowed."; - - return Object.assign(result, { - [selector](node) { - context.report({ - node, - message, - data: hasCustomMessage ? {} : { selector } - }); - } - }); - }, {}); - - } -}; diff --git a/node_modules/eslint/lib/rules/no-return-assign.js b/node_modules/eslint/lib/rules/no-return-assign.js deleted file mode 100644 index ca96da9..0000000 --- a/node_modules/eslint/lib/rules/no-return-assign.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @fileoverview Rule to flag when return statement contains assignment - * @author Ilya Volodin - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const SENTINEL_TYPE = /^(?:[a-zA-Z]+?Statement|ArrowFunctionExpression|FunctionExpression|ClassExpression)$/; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow assignment operators in `return` statements", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-return-assign" - }, - - schema: [ - { - enum: ["except-parens", "always"] - } - ] - }, - - create(context) { - const always = (context.options[0] || "except-parens") !== "except-parens"; - const sourceCode = context.getSourceCode(); - - return { - AssignmentExpression(node) { - if (!always && astUtils.isParenthesised(sourceCode, node)) { - return; - } - - let currentChild = node; - let parent = currentChild.parent; - - // Find ReturnStatement or ArrowFunctionExpression in ancestors. - while (parent && !SENTINEL_TYPE.test(parent.type)) { - currentChild = parent; - parent = parent.parent; - } - - // Reports. - if (parent && parent.type === "ReturnStatement") { - context.report({ - node: parent, - message: "Return statement should not contain assignment." - }); - } else if (parent && parent.type === "ArrowFunctionExpression" && parent.body === currentChild) { - context.report({ - node: parent, - message: "Arrow function should not return assignment." - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-return-await.js b/node_modules/eslint/lib/rules/no-return-await.js deleted file mode 100644 index 490ccae..0000000 --- a/node_modules/eslint/lib/rules/no-return-await.js +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @fileoverview Disallows unnecessary `return await` - * @author Jordan Harband - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const message = "Redundant use of `await` on a return value."; - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary `return await`", - category: "Best Practices", - - // TODO: set to true - recommended: false, - - url: "https://eslint.org/docs/rules/no-return-await" - }, - fixable: null, - schema: [ - ] - }, - - create(context) { - - /** - * Reports a found unnecessary `await` expression. - * @param {ASTNode} node The node representing the `await` expression to report - * @returns {void} - */ - function reportUnnecessaryAwait(node) { - context.report({ - node: context.getSourceCode().getFirstToken(node), - loc: node.loc, - message - }); - } - - /** - * Determines whether a thrown error from this node will be caught/handled within this function rather than immediately halting - * this function. For example, a statement in a `try` block will always have an error handler. A statement in - * a `catch` block will only have an error handler if there is also a `finally` block. - * @param {ASTNode} node A node representing a location where an could be thrown - * @returns {boolean} `true` if a thrown error will be caught/handled in this function - */ - function hasErrorHandler(node) { - let ancestor = node; - - while (!astUtils.isFunction(ancestor) && ancestor.type !== "Program") { - if (ancestor.parent.type === "TryStatement" && (ancestor === ancestor.parent.block || ancestor === ancestor.parent.handler && ancestor.parent.finalizer)) { - return true; - } - ancestor = ancestor.parent; - } - return false; - } - - /** - * Checks if a node is placed in tail call position. Once `return` arguments (or arrow function expressions) can be a complex expression, - * an `await` expression could or could not be unnecessary by the definition of this rule. So we're looking for `await` expressions that are in tail position. - * @param {ASTNode} node A node representing the `await` expression to check - * @returns {boolean} The checking result - */ - function isInTailCallPosition(node) { - if (node.parent.type === "ArrowFunctionExpression") { - return true; - } - if (node.parent.type === "ReturnStatement") { - return !hasErrorHandler(node.parent); - } - if (node.parent.type === "ConditionalExpression" && (node === node.parent.consequent || node === node.parent.alternate)) { - return isInTailCallPosition(node.parent); - } - if (node.parent.type === "LogicalExpression" && node === node.parent.right) { - return isInTailCallPosition(node.parent); - } - if (node.parent.type === "SequenceExpression" && node === node.parent.expressions[node.parent.expressions.length - 1]) { - return isInTailCallPosition(node.parent); - } - return false; - } - - return { - AwaitExpression(node) { - if (isInTailCallPosition(node) && !hasErrorHandler(node)) { - reportUnnecessaryAwait(node); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-script-url.js b/node_modules/eslint/lib/rules/no-script-url.js deleted file mode 100644 index ba74daf..0000000 --- a/node_modules/eslint/lib/rules/no-script-url.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * @fileoverview Rule to flag when using javascript: urls - * @author Ilya Volodin - */ -/* jshint scripturl: true */ -/* eslint no-script-url: 0 */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `javascript:` urls", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-script-url" - }, - - schema: [] - }, - - create(context) { - - return { - - Literal(node) { - if (node.value && typeof node.value === "string") { - const value = node.value.toLowerCase(); - - if (value.indexOf("javascript:") === 0) { - context.report({ node, message: "Script URL is a form of eval." }); - } - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-self-assign.js b/node_modules/eslint/lib/rules/no-self-assign.js deleted file mode 100644 index 8091d7d..0000000 --- a/node_modules/eslint/lib/rules/no-self-assign.js +++ /dev/null @@ -1,217 +0,0 @@ -/** - * @fileoverview Rule to disallow assignments where both sides are exactly the same - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const SPACES = /\s+/g; - -/** - * Checks whether the property of 2 given member expression nodes are the same - * property or not. - * - * @param {ASTNode} left - A member expression node to check. - * @param {ASTNode} right - Another member expression node to check. - * @returns {boolean} `true` if the member expressions have the same property. - */ -function isSameProperty(left, right) { - if (left.property.type === "Identifier" && - left.property.type === right.property.type && - left.property.name === right.property.name && - left.computed === right.computed - ) { - return true; - } - - const lname = astUtils.getStaticPropertyName(left); - const rname = astUtils.getStaticPropertyName(right); - - return lname !== null && lname === rname; -} - -/** - * Checks whether 2 given member expression nodes are the reference to the same - * property or not. - * - * @param {ASTNode} left - A member expression node to check. - * @param {ASTNode} right - Another member expression node to check. - * @returns {boolean} `true` if the member expressions are the reference to the - * same property or not. - */ -function isSameMember(left, right) { - if (!isSameProperty(left, right)) { - return false; - } - - const lobj = left.object; - const robj = right.object; - - if (lobj.type !== robj.type) { - return false; - } - if (lobj.type === "MemberExpression") { - return isSameMember(lobj, robj); - } - return lobj.type === "Identifier" && lobj.name === robj.name; -} - -/** - * Traverses 2 Pattern nodes in parallel, then reports self-assignments. - * - * @param {ASTNode|null} left - A left node to traverse. This is a Pattern or - * a Property. - * @param {ASTNode|null} right - A right node to traverse. This is a Pattern or - * a Property. - * @param {boolean} props - The flag to check member expressions as well. - * @param {Function} report - A callback function to report. - * @returns {void} - */ -function eachSelfAssignment(left, right, props, report) { - if (!left || !right) { - - // do nothing - } else if ( - left.type === "Identifier" && - right.type === "Identifier" && - left.name === right.name - ) { - report(right); - } else if ( - left.type === "ArrayPattern" && - right.type === "ArrayExpression" - ) { - const end = Math.min(left.elements.length, right.elements.length); - - for (let i = 0; i < end; ++i) { - const rightElement = right.elements[i]; - - eachSelfAssignment(left.elements[i], rightElement, props, report); - - // After a spread element, those indices are unknown. - if (rightElement && rightElement.type === "SpreadElement") { - break; - } - } - } else if ( - left.type === "RestElement" && - right.type === "SpreadElement" - ) { - eachSelfAssignment(left.argument, right.argument, props, report); - } else if ( - left.type === "ObjectPattern" && - right.type === "ObjectExpression" && - right.properties.length >= 1 - ) { - - /* - * Gets the index of the last spread property. - * It's possible to overwrite properties followed by it. - */ - let startJ = 0; - - for (let i = right.properties.length - 1; i >= 0; --i) { - const propType = right.properties[i].type; - - if (propType === "SpreadElement" || propType === "ExperimentalSpreadProperty") { - startJ = i + 1; - break; - } - } - - for (let i = 0; i < left.properties.length; ++i) { - for (let j = startJ; j < right.properties.length; ++j) { - eachSelfAssignment( - left.properties[i], - right.properties[j], - props, - report - ); - } - } - } else if ( - left.type === "Property" && - right.type === "Property" && - !left.computed && - !right.computed && - right.kind === "init" && - !right.method && - left.key.name === right.key.name - ) { - eachSelfAssignment(left.value, right.value, props, report); - } else if ( - props && - left.type === "MemberExpression" && - right.type === "MemberExpression" && - isSameMember(left, right) - ) { - report(right); - } -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow assignments where both sides are exactly the same", - category: "Best Practices", - recommended: true, - url: "https://eslint.org/docs/rules/no-self-assign" - }, - - schema: [ - { - type: "object", - properties: { - props: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const options = context.options[0]; - const props = Boolean(options && options.props); - - /** - * Reports a given node as self assignments. - * - * @param {ASTNode} node - A node to report. This is an Identifier node. - * @returns {void} - */ - function report(node) { - context.report({ - node, - message: "'{{name}}' is assigned to itself.", - data: { - name: sourceCode.getText(node).replace(SPACES, "") - } - }); - } - - return { - AssignmentExpression(node) { - if (node.operator === "=") { - eachSelfAssignment(node.left, node.right, props, report); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-self-compare.js b/node_modules/eslint/lib/rules/no-self-compare.js deleted file mode 100644 index 6ebc387..0000000 --- a/node_modules/eslint/lib/rules/no-self-compare.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @fileoverview Rule to flag comparison where left part is the same as the right - * part. - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow comparisons where both sides are exactly the same", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-self-compare" - }, - - schema: [] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - /** - * Determines whether two nodes are composed of the same tokens. - * @param {ASTNode} nodeA The first node - * @param {ASTNode} nodeB The second node - * @returns {boolean} true if the nodes have identical token representations - */ - function hasSameTokens(nodeA, nodeB) { - const tokensA = sourceCode.getTokens(nodeA); - const tokensB = sourceCode.getTokens(nodeB); - - return tokensA.length === tokensB.length && - tokensA.every((token, index) => token.type === tokensB[index].type && token.value === tokensB[index].value); - } - - return { - - BinaryExpression(node) { - const operators = new Set(["===", "==", "!==", "!=", ">", "<", ">=", "<="]); - - if (operators.has(node.operator) && hasSameTokens(node.left, node.right)) { - context.report({ node, message: "Comparing to itself is potentially pointless." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-sequences.js b/node_modules/eslint/lib/rules/no-sequences.js deleted file mode 100644 index 8eaf555..0000000 --- a/node_modules/eslint/lib/rules/no-sequences.js +++ /dev/null @@ -1,113 +0,0 @@ -/** - * @fileoverview Rule to flag use of comma operator - * @author Brandon Mills - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow comma operators", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-sequences" - }, - - schema: [] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - /** - * Parts of the grammar that are required to have parens. - */ - const parenthesized = { - DoWhileStatement: "test", - IfStatement: "test", - SwitchStatement: "discriminant", - WhileStatement: "test", - WithStatement: "object", - ArrowFunctionExpression: "body" - - /* - * Omitting CallExpression - commas are parsed as argument separators - * Omitting NewExpression - commas are parsed as argument separators - * Omitting ForInStatement - parts aren't individually parenthesised - * Omitting ForStatement - parts aren't individually parenthesised - */ - }; - - /** - * Determines whether a node is required by the grammar to be wrapped in - * parens, e.g. the test of an if statement. - * @param {ASTNode} node - The AST node - * @returns {boolean} True if parens around node belong to parent node. - */ - function requiresExtraParens(node) { - return node.parent && parenthesized[node.parent.type] && - node === node.parent[parenthesized[node.parent.type]]; - } - - /** - * Check if a node is wrapped in parens. - * @param {ASTNode} node - The AST node - * @returns {boolean} True if the node has a paren on each side. - */ - function isParenthesised(node) { - return astUtils.isParenthesised(sourceCode, node); - } - - /** - * Check if a node is wrapped in two levels of parens. - * @param {ASTNode} node - The AST node - * @returns {boolean} True if two parens surround the node on each side. - */ - function isParenthesisedTwice(node) { - const previousToken = sourceCode.getTokenBefore(node, 1), - nextToken = sourceCode.getTokenAfter(node, 1); - - return isParenthesised(node) && previousToken && nextToken && - astUtils.isOpeningParenToken(previousToken) && previousToken.range[1] <= node.range[0] && - astUtils.isClosingParenToken(nextToken) && nextToken.range[0] >= node.range[1]; - } - - return { - SequenceExpression(node) { - - // Always allow sequences in for statement update - if (node.parent.type === "ForStatement" && - (node === node.parent.init || node === node.parent.update)) { - return; - } - - // Wrapping a sequence in extra parens indicates intent - if (requiresExtraParens(node)) { - if (isParenthesisedTwice(node)) { - return; - } - } else { - if (isParenthesised(node)) { - return; - } - } - - const child = sourceCode.getTokenAfter(node.expressions[0]); - - context.report({ node, loc: child.loc.start, message: "Unexpected use of comma operator." }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-shadow-restricted-names.js b/node_modules/eslint/lib/rules/no-shadow-restricted-names.js deleted file mode 100644 index 7b92521..0000000 --- a/node_modules/eslint/lib/rules/no-shadow-restricted-names.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @fileoverview Disallow shadowing of NaN, undefined, and Infinity (ES5 section 15.1.1) - * @author Michael Ficarra - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow identifiers from shadowing restricted names", - category: "Variables", - recommended: false, - url: "https://eslint.org/docs/rules/no-shadow-restricted-names" - }, - - schema: [] - }, - - create(context) { - - const RESTRICTED = ["undefined", "NaN", "Infinity", "arguments", "eval"]; - - /** - * Check if the node name is present inside the restricted list - * @param {ASTNode} id id to evaluate - * @returns {void} - * @private - */ - function checkForViolation(id) { - if (RESTRICTED.indexOf(id.name) > -1) { - context.report({ - node: id, - message: "Shadowing of global property '{{idName}}'.", - data: { - idName: id.name - } - }); - } - } - - return { - VariableDeclarator(node) { - checkForViolation(node.id); - }, - ArrowFunctionExpression(node) { - [].map.call(node.params, checkForViolation); - }, - FunctionExpression(node) { - if (node.id) { - checkForViolation(node.id); - } - [].map.call(node.params, checkForViolation); - }, - FunctionDeclaration(node) { - if (node.id) { - checkForViolation(node.id); - [].map.call(node.params, checkForViolation); - } - }, - CatchClause(node) { - checkForViolation(node.param); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-shadow.js b/node_modules/eslint/lib/rules/no-shadow.js deleted file mode 100644 index d01231f..0000000 --- a/node_modules/eslint/lib/rules/no-shadow.js +++ /dev/null @@ -1,189 +0,0 @@ -/** - * @fileoverview Rule to flag on declaring variables already declared in the outer scope - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow variable declarations from shadowing variables declared in the outer scope", - category: "Variables", - recommended: false, - url: "https://eslint.org/docs/rules/no-shadow" - }, - - schema: [ - { - type: "object", - properties: { - builtinGlobals: { type: "boolean" }, - hoist: { enum: ["all", "functions", "never"] }, - allow: { - type: "array", - items: { - type: "string" - } - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const options = { - builtinGlobals: Boolean(context.options[0] && context.options[0].builtinGlobals), - hoist: (context.options[0] && context.options[0].hoist) || "functions", - allow: (context.options[0] && context.options[0].allow) || [] - }; - - /** - * Check if variable name is allowed. - * - * @param {ASTNode} variable The variable to check. - * @returns {boolean} Whether or not the variable name is allowed. - */ - function isAllowed(variable) { - return options.allow.indexOf(variable.name) !== -1; - } - - /** - * Checks if a variable of the class name in the class scope of ClassDeclaration. - * - * ClassDeclaration creates two variables of its name into its outer scope and its class scope. - * So we should ignore the variable in the class scope. - * - * @param {Object} variable The variable to check. - * @returns {boolean} Whether or not the variable of the class name in the class scope of ClassDeclaration. - */ - function isDuplicatedClassNameVariable(variable) { - const block = variable.scope.block; - - return block.type === "ClassDeclaration" && block.id === variable.identifiers[0]; - } - - /** - * Checks if a variable is inside the initializer of scopeVar. - * - * To avoid reporting at declarations such as `var a = function a() {};`. - * But it should report `var a = function(a) {};` or `var a = function() { function a() {} };`. - * - * @param {Object} variable The variable to check. - * @param {Object} scopeVar The scope variable to look for. - * @returns {boolean} Whether or not the variable is inside initializer of scopeVar. - */ - function isOnInitializer(variable, scopeVar) { - const outerScope = scopeVar.scope; - const outerDef = scopeVar.defs[0]; - const outer = outerDef && outerDef.parent && outerDef.parent.range; - const innerScope = variable.scope; - const innerDef = variable.defs[0]; - const inner = innerDef && innerDef.name.range; - - return ( - outer && - inner && - outer[0] < inner[0] && - inner[1] < outer[1] && - ((innerDef.type === "FunctionName" && innerDef.node.type === "FunctionExpression") || innerDef.node.type === "ClassExpression") && - outerScope === innerScope.upper - ); - } - - /** - * Get a range of a variable's identifier node. - * @param {Object} variable The variable to get. - * @returns {Array|undefined} The range of the variable's identifier node. - */ - function getNameRange(variable) { - const def = variable.defs[0]; - - return def && def.name.range; - } - - /** - * Checks if a variable is in TDZ of scopeVar. - * @param {Object} variable The variable to check. - * @param {Object} scopeVar The variable of TDZ. - * @returns {boolean} Whether or not the variable is in TDZ of scopeVar. - */ - function isInTdz(variable, scopeVar) { - const outerDef = scopeVar.defs[0]; - const inner = getNameRange(variable); - const outer = getNameRange(scopeVar); - - return ( - inner && - outer && - inner[1] < outer[0] && - - // Excepts FunctionDeclaration if is {"hoist":"function"}. - (options.hoist !== "functions" || !outerDef || outerDef.node.type !== "FunctionDeclaration") - ); - } - - /** - * Checks the current context for shadowed variables. - * @param {Scope} scope - Fixme - * @returns {void} - */ - function checkForShadows(scope) { - const variables = scope.variables; - - for (let i = 0; i < variables.length; ++i) { - const variable = variables[i]; - - // Skips "arguments" or variables of a class name in the class scope of ClassDeclaration. - if (variable.identifiers.length === 0 || - isDuplicatedClassNameVariable(variable) || - isAllowed(variable) - ) { - continue; - } - - // Gets shadowed variable. - const shadowed = astUtils.getVariableByName(scope.upper, variable.name); - - if (shadowed && - (shadowed.identifiers.length > 0 || (options.builtinGlobals && "writeable" in shadowed)) && - !isOnInitializer(variable, shadowed) && - !(options.hoist !== "all" && isInTdz(variable, shadowed)) - ) { - context.report({ - node: variable.identifiers[0], - message: "'{{name}}' is already declared in the upper scope.", - data: variable - }); - } - } - } - - return { - "Program:exit"() { - const globalScope = context.getScope(); - const stack = globalScope.childScopes.slice(); - - while (stack.length) { - const scope = stack.pop(); - - stack.push.apply(stack, scope.childScopes); - checkForShadows(scope); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-spaced-func.js b/node_modules/eslint/lib/rules/no-spaced-func.js deleted file mode 100644 index 42d1e4b..0000000 --- a/node_modules/eslint/lib/rules/no-spaced-func.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * @fileoverview Rule to check that spaced function application - * @author Matt DuVall - * @deprecated in ESLint v3.3.0 - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow spacing between function identifiers and their applications (deprecated)", - category: "Stylistic Issues", - recommended: false, - replacedBy: ["func-call-spacing"], - url: "https://eslint.org/docs/rules/no-spaced-func" - }, - - deprecated: true, - - fixable: "whitespace", - schema: [] - }, - - create(context) { - - const sourceCode = context.getSourceCode(); - - /** - * Check if open space is present in a function name - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function detectOpenSpaces(node) { - const lastCalleeToken = sourceCode.getLastToken(node.callee); - let prevToken = lastCalleeToken, - parenToken = sourceCode.getTokenAfter(lastCalleeToken); - - // advances to an open parenthesis. - while ( - parenToken && - parenToken.range[1] < node.range[1] && - parenToken.value !== "(" - ) { - prevToken = parenToken; - parenToken = sourceCode.getTokenAfter(parenToken); - } - - // look for a space between the callee and the open paren - if (parenToken && - parenToken.range[1] < node.range[1] && - sourceCode.isSpaceBetweenTokens(prevToken, parenToken) - ) { - context.report({ - node, - loc: lastCalleeToken.loc.start, - message: "Unexpected space between function name and paren.", - fix(fixer) { - return fixer.removeRange([prevToken.range[1], parenToken.range[0]]); - } - }); - } - } - - return { - CallExpression: detectOpenSpaces, - NewExpression: detectOpenSpaces - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-sparse-arrays.js b/node_modules/eslint/lib/rules/no-sparse-arrays.js deleted file mode 100644 index 1cc6f7c..0000000 --- a/node_modules/eslint/lib/rules/no-sparse-arrays.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @fileoverview Disallow sparse arrays - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow sparse arrays", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-sparse-arrays" - }, - - schema: [] - }, - - create(context) { - - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - - ArrayExpression(node) { - - const emptySpot = node.elements.indexOf(null) > -1; - - if (emptySpot) { - context.report({ node, message: "Unexpected comma in middle of array." }); - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-sync.js b/node_modules/eslint/lib/rules/no-sync.js deleted file mode 100644 index eb7b787..0000000 --- a/node_modules/eslint/lib/rules/no-sync.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @fileoverview Rule to check for properties whose identifier ends with the string Sync - * @author Matt DuVall - */ - -/* jshint node:true */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow synchronous methods", - category: "Node.js and CommonJS", - recommended: false, - url: "https://eslint.org/docs/rules/no-sync" - }, - - schema: [ - { - type: "object", - properties: { - allowAtRootLevel: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const selector = context.options[0] && context.options[0].allowAtRootLevel - ? ":function MemberExpression[property.name=/.*Sync$/]" - : "MemberExpression[property.name=/.*Sync$/]"; - - return { - [selector](node) { - context.report({ - node, - message: "Unexpected sync method: '{{propertyName}}'.", - data: { - propertyName: node.property.name - } - }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-tabs.js b/node_modules/eslint/lib/rules/no-tabs.js deleted file mode 100644 index 08a8fa5..0000000 --- a/node_modules/eslint/lib/rules/no-tabs.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @fileoverview Rule to check for tabs inside a file - * @author Gyandeep Singh - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ -const regex = /\t/; - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow all tabs", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-tabs" - }, - schema: [] - }, - - create(context) { - return { - Program(node) { - context.getSourceCode().getLines().forEach((line, index) => { - const match = regex.exec(line); - - if (match) { - context.report({ - node, - loc: { - line: index + 1, - column: match.index + 1 - }, - message: "Unexpected tab character." - }); - } - }); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-template-curly-in-string.js b/node_modules/eslint/lib/rules/no-template-curly-in-string.js deleted file mode 100644 index ed74fcc..0000000 --- a/node_modules/eslint/lib/rules/no-template-curly-in-string.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @fileoverview Warn when using template string syntax in regular strings - * @author Jeroen Engels - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow template literal placeholder syntax in regular strings", - category: "Possible Errors", - recommended: false, - url: "https://eslint.org/docs/rules/no-template-curly-in-string" - }, - - schema: [] - }, - - create(context) { - const regex = /\$\{[^}]+\}/; - - return { - Literal(node) { - if (typeof node.value === "string" && regex.test(node.value)) { - context.report({ - node, - message: "Unexpected template string expression." - }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-ternary.js b/node_modules/eslint/lib/rules/no-ternary.js deleted file mode 100644 index 4dcc8db..0000000 --- a/node_modules/eslint/lib/rules/no-ternary.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @fileoverview Rule to flag use of ternary operators. - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow ternary operators", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-ternary" - }, - - schema: [] - }, - - create(context) { - - return { - - ConditionalExpression(node) { - context.report({ node, message: "Ternary operator used." }); - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-this-before-super.js b/node_modules/eslint/lib/rules/no-this-before-super.js deleted file mode 100644 index 944a323..0000000 --- a/node_modules/eslint/lib/rules/no-this-before-super.js +++ /dev/null @@ -1,300 +0,0 @@ -/** - * @fileoverview A rule to disallow using `this`/`super` before `super()`. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a given node is a constructor. - * @param {ASTNode} node - A node to check. This node type is one of - * `Program`, `FunctionDeclaration`, `FunctionExpression`, and - * `ArrowFunctionExpression`. - * @returns {boolean} `true` if the node is a constructor. - */ -function isConstructorFunction(node) { - return ( - node.type === "FunctionExpression" && - node.parent.type === "MethodDefinition" && - node.parent.kind === "constructor" - ); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `this`/`super` before calling `super()` in constructors", - category: "ECMAScript 6", - recommended: true, - url: "https://eslint.org/docs/rules/no-this-before-super" - }, - - schema: [] - }, - - create(context) { - - /* - * Information for each constructor. - * - upper: Information of the upper constructor. - * - hasExtends: A flag which shows whether the owner class has a valid - * `extends` part. - * - scope: The scope of the owner class. - * - codePath: The code path of this constructor. - */ - let funcInfo = null; - - /* - * Information for each code path segment. - * Each key is the id of a code path segment. - * Each value is an object: - * - superCalled: The flag which shows `super()` called in all code paths. - * - invalidNodes: The array of invalid ThisExpression and Super nodes. - */ - let segInfoMap = Object.create(null); - - /** - * Gets whether or not `super()` is called in a given code path segment. - * @param {CodePathSegment} segment - A code path segment to get. - * @returns {boolean} `true` if `super()` is called. - */ - function isCalled(segment) { - return !segment.reachable || segInfoMap[segment.id].superCalled; - } - - /** - * Checks whether or not this is in a constructor. - * @returns {boolean} `true` if this is in a constructor. - */ - function isInConstructorOfDerivedClass() { - return Boolean(funcInfo && funcInfo.isConstructor && funcInfo.hasExtends); - } - - /** - * Checks whether or not this is before `super()` is called. - * @returns {boolean} `true` if this is before `super()` is called. - */ - function isBeforeCallOfSuper() { - return ( - isInConstructorOfDerivedClass() && - !funcInfo.codePath.currentSegments.every(isCalled) - ); - } - - /** - * Sets a given node as invalid. - * @param {ASTNode} node - A node to set as invalid. This is one of - * a ThisExpression and a Super. - * @returns {void} - */ - function setInvalid(node) { - const segments = funcInfo.codePath.currentSegments; - - for (let i = 0; i < segments.length; ++i) { - const segment = segments[i]; - - if (segment.reachable) { - segInfoMap[segment.id].invalidNodes.push(node); - } - } - } - - /** - * Sets the current segment as `super` was called. - * @returns {void} - */ - function setSuperCalled() { - const segments = funcInfo.codePath.currentSegments; - - for (let i = 0; i < segments.length; ++i) { - const segment = segments[i]; - - if (segment.reachable) { - segInfoMap[segment.id].superCalled = true; - } - } - } - - return { - - /** - * Adds information of a constructor into the stack. - * @param {CodePath} codePath - A code path which was started. - * @param {ASTNode} node - The current node. - * @returns {void} - */ - onCodePathStart(codePath, node) { - if (isConstructorFunction(node)) { - - // Class > ClassBody > MethodDefinition > FunctionExpression - const classNode = node.parent.parent.parent; - - funcInfo = { - upper: funcInfo, - isConstructor: true, - hasExtends: Boolean( - classNode.superClass && - !astUtils.isNullOrUndefined(classNode.superClass) - ), - codePath - }; - } else { - funcInfo = { - upper: funcInfo, - isConstructor: false, - hasExtends: false, - codePath - }; - } - }, - - /** - * Removes the top of stack item. - * - * And this treverses all segments of this code path then reports every - * invalid node. - * - * @param {CodePath} codePath - A code path which was ended. - * @param {ASTNode} node - The current node. - * @returns {void} - */ - onCodePathEnd(codePath) { - const isDerivedClass = funcInfo.hasExtends; - - funcInfo = funcInfo.upper; - if (!isDerivedClass) { - return; - } - - codePath.traverseSegments((segment, controller) => { - const info = segInfoMap[segment.id]; - - for (let i = 0; i < info.invalidNodes.length; ++i) { - const invalidNode = info.invalidNodes[i]; - - context.report({ - message: "'{{kind}}' is not allowed before 'super()'.", - node: invalidNode, - data: { - kind: invalidNode.type === "Super" ? "super" : "this" - } - }); - } - - if (info.superCalled) { - controller.skip(); - } - }); - }, - - /** - * Initialize information of a given code path segment. - * @param {CodePathSegment} segment - A code path segment to initialize. - * @returns {void} - */ - onCodePathSegmentStart(segment) { - if (!isInConstructorOfDerivedClass()) { - return; - } - - // Initialize info. - segInfoMap[segment.id] = { - superCalled: ( - segment.prevSegments.length > 0 && - segment.prevSegments.every(isCalled) - ), - invalidNodes: [] - }; - }, - - /** - * Update information of the code path segment when a code path was - * looped. - * @param {CodePathSegment} fromSegment - The code path segment of the - * end of a loop. - * @param {CodePathSegment} toSegment - A code path segment of the head - * of a loop. - * @returns {void} - */ - onCodePathSegmentLoop(fromSegment, toSegment) { - if (!isInConstructorOfDerivedClass()) { - return; - } - - // Update information inside of the loop. - funcInfo.codePath.traverseSegments( - { first: toSegment, last: fromSegment }, - (segment, controller) => { - const info = segInfoMap[segment.id]; - - if (info.superCalled) { - info.invalidNodes = []; - controller.skip(); - } else if ( - segment.prevSegments.length > 0 && - segment.prevSegments.every(isCalled) - ) { - info.superCalled = true; - info.invalidNodes = []; - } - } - ); - }, - - /** - * Reports if this is before `super()`. - * @param {ASTNode} node - A target node. - * @returns {void} - */ - ThisExpression(node) { - if (isBeforeCallOfSuper()) { - setInvalid(node); - } - }, - - /** - * Reports if this is before `super()`. - * @param {ASTNode} node - A target node. - * @returns {void} - */ - Super(node) { - if (!astUtils.isCallee(node) && isBeforeCallOfSuper()) { - setInvalid(node); - } - }, - - /** - * Marks `super()` called. - * @param {ASTNode} node - A target node. - * @returns {void} - */ - "CallExpression:exit"(node) { - if (node.callee.type === "Super" && isBeforeCallOfSuper()) { - setSuperCalled(); - } - }, - - /** - * Resets state. - * @returns {void} - */ - "Program:exit"() { - segInfoMap = Object.create(null); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-throw-literal.js b/node_modules/eslint/lib/rules/no-throw-literal.js deleted file mode 100644 index b080578..0000000 --- a/node_modules/eslint/lib/rules/no-throw-literal.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @fileoverview Rule to restrict what can be thrown as an exception. - * @author Dieter Oberkofler - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow throwing literals as exceptions", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-throw-literal" - }, - - schema: [] - }, - - create(context) { - - return { - - ThrowStatement(node) { - if (!astUtils.couldBeError(node.argument)) { - context.report({ node, message: "Expected an object to be thrown." }); - } else if (node.argument.type === "Identifier") { - if (node.argument.name === "undefined") { - context.report({ node, message: "Do not throw undefined." }); - } - } - - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-trailing-spaces.js b/node_modules/eslint/lib/rules/no-trailing-spaces.js deleted file mode 100644 index 4d70c3b..0000000 --- a/node_modules/eslint/lib/rules/no-trailing-spaces.js +++ /dev/null @@ -1,170 +0,0 @@ -/** - * @fileoverview Disallow trailing spaces at the end of lines. - * @author Nodeca Team - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow trailing whitespace at the end of lines", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-trailing-spaces" - }, - - fixable: "whitespace", - - schema: [ - { - type: "object", - properties: { - skipBlankLines: { - type: "boolean" - }, - ignoreComments: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - const BLANK_CLASS = "[ \t\u00a0\u2000-\u200b\u3000]", - SKIP_BLANK = `^${BLANK_CLASS}*$`, - NONBLANK = `${BLANK_CLASS}+$`; - - const options = context.options[0] || {}, - skipBlankLines = options.skipBlankLines || false, - ignoreComments = typeof options.ignoreComments === "boolean" && options.ignoreComments; - - /** - * Report the error message - * @param {ASTNode} node node to report - * @param {int[]} location range information - * @param {int[]} fixRange Range based on the whole program - * @returns {void} - */ - function report(node, location, fixRange) { - - /* - * Passing node is a bit dirty, because message data will contain big - * text in `source`. But... who cares :) ? - * One more kludge will not make worse the bloody wizardry of this - * plugin. - */ - context.report({ - node, - loc: location, - message: "Trailing spaces not allowed.", - fix(fixer) { - return fixer.removeRange(fixRange); - } - }); - } - - /** - * Given a list of comment nodes, return the line numbers for those comments. - * @param {Array} comments An array of comment nodes. - * @returns {number[]} An array of line numbers containing comments. - */ - function getCommentLineNumbers(comments) { - const lines = new Set(); - - comments.forEach(comment => { - for (let i = comment.loc.start.line; i <= comment.loc.end.line; i++) { - lines.add(i); - } - }); - - return lines; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - - Program: function checkTrailingSpaces(node) { - - /* - * Let's hack. Since Espree does not return whitespace nodes, - * fetch the source code and do matching via regexps. - */ - - const re = new RegExp(NONBLANK), - skipMatch = new RegExp(SKIP_BLANK), - lines = sourceCode.lines, - linebreaks = sourceCode.getText().match(astUtils.createGlobalLinebreakMatcher()), - comments = sourceCode.getAllComments(), - commentLineNumbers = getCommentLineNumbers(comments); - - let totalLength = 0, - fixRange = []; - - for (let i = 0, ii = lines.length; i < ii; i++) { - const matches = re.exec(lines[i]); - - /* - * Always add linebreak length to line length to accommodate for line break (\n or \r\n) - * Because during the fix time they also reserve one spot in the array. - * Usually linebreak length is 2 for \r\n (CRLF) and 1 for \n (LF) - */ - const linebreakLength = linebreaks && linebreaks[i] ? linebreaks[i].length : 1; - const lineLength = lines[i].length + linebreakLength; - - if (matches) { - const location = { - line: i + 1, - column: matches.index - }; - - const rangeStart = totalLength + location.column; - const rangeEnd = totalLength + lineLength - linebreakLength; - const containingNode = sourceCode.getNodeByRangeIndex(rangeStart); - - if (containingNode && containingNode.type === "TemplateElement" && - rangeStart > containingNode.parent.range[0] && - rangeEnd < containingNode.parent.range[1]) { - totalLength += lineLength; - continue; - } - - /* - * If the line has only whitespace, and skipBlankLines - * is true, don't report it - */ - if (skipBlankLines && skipMatch.test(lines[i])) { - totalLength += lineLength; - continue; - } - - fixRange = [rangeStart, rangeEnd]; - - if (!ignoreComments || !commentLineNumbers.has(location.line)) { - report(node, location, fixRange); - } - } - - totalLength += lineLength; - } - } - - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-undef-init.js b/node_modules/eslint/lib/rules/no-undef-init.js deleted file mode 100644 index 2e0ab24..0000000 --- a/node_modules/eslint/lib/rules/no-undef-init.js +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @fileoverview Rule to flag when initializing to undefined - * @author Ilya Volodin - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow initializing variables to `undefined`", - category: "Variables", - recommended: false, - url: "https://eslint.org/docs/rules/no-undef-init" - }, - - schema: [], - - fixable: "code" - }, - - create(context) { - - const sourceCode = context.getSourceCode(); - - return { - - VariableDeclarator(node) { - const name = sourceCode.getText(node.id), - init = node.init && node.init.name, - scope = context.getScope(), - undefinedVar = astUtils.getVariableByName(scope, "undefined"), - shadowed = undefinedVar && undefinedVar.defs.length > 0; - - if (init === "undefined" && node.parent.kind !== "const" && !shadowed) { - context.report({ - node, - message: "It's not necessary to initialize '{{name}}' to undefined.", - data: { name }, - fix(fixer) { - if (node.parent.kind === "var") { - return null; - } - - if (node.id.type === "ArrayPattern" || node.id.type === "ObjectPattern") { - - // Don't fix destructuring assignment to `undefined`. - return null; - } - return fixer.removeRange([node.id.range[1], node.range[1]]); - } - }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-undef.js b/node_modules/eslint/lib/rules/no-undef.js deleted file mode 100644 index c8347d5..0000000 --- a/node_modules/eslint/lib/rules/no-undef.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @fileoverview Rule to flag references to undeclared variables. - * @author Mark Macdonald - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks if the given node is the argument of a typeof operator. - * @param {ASTNode} node The AST node being checked. - * @returns {boolean} Whether or not the node is the argument of a typeof operator. - */ -function hasTypeOfOperator(node) { - const parent = node.parent; - - return parent.type === "UnaryExpression" && parent.operator === "typeof"; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of undeclared variables unless mentioned in `/*global */` comments", - category: "Variables", - recommended: true, - url: "https://eslint.org/docs/rules/no-undef" - }, - - schema: [ - { - type: "object", - properties: { - typeof: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const options = context.options[0]; - const considerTypeOf = options && options.typeof === true || false; - - return { - "Program:exit"(/* node */) { - const globalScope = context.getScope(); - - globalScope.through.forEach(ref => { - const identifier = ref.identifier; - - if (!considerTypeOf && hasTypeOfOperator(identifier)) { - return; - } - - context.report({ - node: identifier, - message: "'{{name}}' is not defined.", - data: identifier - }); - }); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-undefined.js b/node_modules/eslint/lib/rules/no-undefined.js deleted file mode 100644 index 94b514e..0000000 --- a/node_modules/eslint/lib/rules/no-undefined.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @fileoverview Rule to flag references to the undefined variable. - * @author Michael Ficarra - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of `undefined` as an identifier", - category: "Variables", - recommended: false, - url: "https://eslint.org/docs/rules/no-undefined" - }, - - schema: [] - }, - - create(context) { - - /** - * Report an invalid "undefined" identifier node. - * @param {ASTNode} node The node to report. - * @returns {void} - */ - function report(node) { - context.report({ - node, - message: "Unexpected use of undefined." - }); - } - - /** - * Checks the given scope for references to `undefined` and reports - * all references found. - * @param {eslint-scope.Scope} scope The scope to check. - * @returns {void} - */ - function checkScope(scope) { - const undefinedVar = scope.set.get("undefined"); - - if (!undefinedVar) { - return; - } - - const references = undefinedVar.references; - - const defs = undefinedVar.defs; - - // Report non-initializing references (those are covered in defs below) - references - .filter(ref => !ref.init) - .forEach(ref => report(ref.identifier)); - - defs.forEach(def => report(def.name)); - } - - return { - "Program:exit"() { - const globalScope = context.getScope(); - - const stack = [globalScope]; - - while (stack.length) { - const scope = stack.pop(); - - stack.push.apply(stack, scope.childScopes); - checkScope(scope); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-underscore-dangle.js b/node_modules/eslint/lib/rules/no-underscore-dangle.js deleted file mode 100644 index c76488a..0000000 --- a/node_modules/eslint/lib/rules/no-underscore-dangle.js +++ /dev/null @@ -1,204 +0,0 @@ -/** - * @fileoverview Rule to flag trailing underscores in variable declarations. - * @author Matt DuVall - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow dangling underscores in identifiers", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-underscore-dangle" - }, - - schema: [ - { - type: "object", - properties: { - allow: { - type: "array", - items: { - type: "string" - } - }, - allowAfterThis: { - type: "boolean" - }, - allowAfterSuper: { - type: "boolean" - }, - enforceInMethodNames: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const options = context.options[0] || {}; - const ALLOWED_VARIABLES = options.allow ? options.allow : []; - const allowAfterThis = typeof options.allowAfterThis !== "undefined" ? options.allowAfterThis : false; - const allowAfterSuper = typeof options.allowAfterSuper !== "undefined" ? options.allowAfterSuper : false; - const enforceInMethodNames = typeof options.enforceInMethodNames !== "undefined" ? options.enforceInMethodNames : false; - - //------------------------------------------------------------------------- - // Helpers - //------------------------------------------------------------------------- - - /** - * Check if identifier is present inside the allowed option - * @param {string} identifier name of the node - * @returns {boolean} true if its is present - * @private - */ - function isAllowed(identifier) { - return ALLOWED_VARIABLES.some(ident => ident === identifier); - } - - /** - * Check if identifier has a underscore at the end - * @param {ASTNode} identifier node to evaluate - * @returns {boolean} true if its is present - * @private - */ - function hasTrailingUnderscore(identifier) { - const len = identifier.length; - - return identifier !== "_" && (identifier[0] === "_" || identifier[len - 1] === "_"); - } - - /** - * Check if identifier is a special case member expression - * @param {ASTNode} identifier node to evaluate - * @returns {boolean} true if its is a special case - * @private - */ - function isSpecialCaseIdentifierForMemberExpression(identifier) { - return identifier === "__proto__"; - } - - /** - * Check if identifier is a special case variable expression - * @param {ASTNode} identifier node to evaluate - * @returns {boolean} true if its is a special case - * @private - */ - function isSpecialCaseIdentifierInVariableExpression(identifier) { - - // Checks for the underscore library usage here - return identifier === "_"; - } - - /** - * Check if function has a underscore at the end - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkForTrailingUnderscoreInFunctionDeclaration(node) { - if (node.id) { - const identifier = node.id.name; - - if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier) && !isAllowed(identifier)) { - context.report({ - node, - message: "Unexpected dangling '_' in '{{identifier}}'.", - data: { - identifier - } - }); - } - } - } - - /** - * Check if variable expression has a underscore at the end - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkForTrailingUnderscoreInVariableExpression(node) { - const identifier = node.id.name; - - if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier) && - !isSpecialCaseIdentifierInVariableExpression(identifier) && !isAllowed(identifier)) { - context.report({ - node, - message: "Unexpected dangling '_' in '{{identifier}}'.", - data: { - identifier - } - }); - } - } - - /** - * Check if member expression has a underscore at the end - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkForTrailingUnderscoreInMemberExpression(node) { - const identifier = node.property.name, - isMemberOfThis = node.object.type === "ThisExpression", - isMemberOfSuper = node.object.type === "Super"; - - if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier) && - !(isMemberOfThis && allowAfterThis) && - !(isMemberOfSuper && allowAfterSuper) && - !isSpecialCaseIdentifierForMemberExpression(identifier) && !isAllowed(identifier)) { - context.report({ - node, - message: "Unexpected dangling '_' in '{{identifier}}'.", - data: { - identifier - } - }); - } - } - - /** - * Check if method declaration or method property has a underscore at the end - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkForTrailingUnderscoreInMethod(node) { - const identifier = node.key.name; - const isMethod = node.type === "MethodDefinition" || node.type === "Property" && node.method; - - if (typeof identifier !== "undefined" && enforceInMethodNames && isMethod && hasTrailingUnderscore(identifier)) { - context.report({ - node, - message: "Unexpected dangling '_' in '{{identifier}}'.", - data: { - identifier - } - }); - } - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - FunctionDeclaration: checkForTrailingUnderscoreInFunctionDeclaration, - VariableDeclarator: checkForTrailingUnderscoreInVariableExpression, - MemberExpression: checkForTrailingUnderscoreInMemberExpression, - MethodDefinition: checkForTrailingUnderscoreInMethod, - Property: checkForTrailingUnderscoreInMethod - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-unexpected-multiline.js b/node_modules/eslint/lib/rules/no-unexpected-multiline.js deleted file mode 100644 index 51ba7cf..0000000 --- a/node_modules/eslint/lib/rules/no-unexpected-multiline.js +++ /dev/null @@ -1,99 +0,0 @@ -/** - * @fileoverview Rule to spot scenarios where a newline looks like it is ending a statement, but is not. - * @author Glen Mailer - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow confusing multiline expressions", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-unexpected-multiline" - }, - - schema: [] - }, - - create(context) { - - const FUNCTION_MESSAGE = "Unexpected newline between function and ( of function call."; - const PROPERTY_MESSAGE = "Unexpected newline between object and [ of property access."; - const TAGGED_TEMPLATE_MESSAGE = "Unexpected newline between template tag and template literal."; - const DIVISION_MESSAGE = "Unexpected newline between numerator and division operator."; - - const REGEX_FLAG_MATCHER = /^[gimsuy]+$/; - - const sourceCode = context.getSourceCode(); - - /** - * Check to see if there is a newline between the node and the following open bracket - * line's expression - * @param {ASTNode} node The node to check. - * @param {string} msg The error message to use. - * @returns {void} - * @private - */ - function checkForBreakAfter(node, msg) { - const openParen = sourceCode.getTokenAfter(node, astUtils.isNotClosingParenToken); - const nodeExpressionEnd = sourceCode.getTokenBefore(openParen); - - if (openParen.loc.start.line !== nodeExpressionEnd.loc.end.line) { - context.report({ node, loc: openParen.loc.start, message: msg, data: { char: openParen.value } }); - } - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - - MemberExpression(node) { - if (!node.computed) { - return; - } - checkForBreakAfter(node.object, PROPERTY_MESSAGE); - }, - - TaggedTemplateExpression(node) { - if (node.tag.loc.end.line === node.quasi.loc.start.line) { - return; - } - context.report({ node, loc: node.loc.start, message: TAGGED_TEMPLATE_MESSAGE }); - }, - - CallExpression(node) { - if (node.arguments.length === 0) { - return; - } - checkForBreakAfter(node.callee, FUNCTION_MESSAGE); - }, - - "BinaryExpression[operator='/'] > BinaryExpression[operator='/'].left"(node) { - const secondSlash = sourceCode.getTokenAfter(node, token => token.value === "/"); - const tokenAfterOperator = sourceCode.getTokenAfter(secondSlash); - - if ( - tokenAfterOperator.type === "Identifier" && - REGEX_FLAG_MATCHER.test(tokenAfterOperator.value) && - secondSlash.range[1] === tokenAfterOperator.range[0] - ) { - checkForBreakAfter(node.left, DIVISION_MESSAGE); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-unmodified-loop-condition.js b/node_modules/eslint/lib/rules/no-unmodified-loop-condition.js deleted file mode 100644 index 623144d..0000000 --- a/node_modules/eslint/lib/rules/no-unmodified-loop-condition.js +++ /dev/null @@ -1,368 +0,0 @@ -/** - * @fileoverview Rule to disallow use of unmodified expressions in loop conditions - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const Traverser = require("../util/traverser"), - astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const pushAll = Function.apply.bind(Array.prototype.push); -const SENTINEL_PATTERN = /(?:(?:Call|Class|Function|Member|New|Yield)Expression|Statement|Declaration)$/; -const LOOP_PATTERN = /^(?:DoWhile|For|While)Statement$/; // for-in/of statements don't have `test` property. -const GROUP_PATTERN = /^(?:BinaryExpression|ConditionalExpression)$/; -const SKIP_PATTERN = /^(?:ArrowFunction|Class|Function)Expression$/; -const DYNAMIC_PATTERN = /^(?:Call|Member|New|TaggedTemplate|Yield)Expression$/; - -/** - * @typedef {Object} LoopConditionInfo - * @property {eslint-scope.Reference} reference - The reference. - * @property {ASTNode} group - BinaryExpression or ConditionalExpression nodes - * that the reference is belonging to. - * @property {Function} isInLoop - The predicate which checks a given reference - * is in this loop. - * @property {boolean} modified - The flag that the reference is modified in - * this loop. - */ - -/** - * Checks whether or not a given reference is a write reference. - * - * @param {eslint-scope.Reference} reference - A reference to check. - * @returns {boolean} `true` if the reference is a write reference. - */ -function isWriteReference(reference) { - if (reference.init) { - const def = reference.resolved && reference.resolved.defs[0]; - - if (!def || def.type !== "Variable" || def.parent.kind !== "var") { - return false; - } - } - return reference.isWrite(); -} - -/** - * Checks whether or not a given loop condition info does not have the modified - * flag. - * - * @param {LoopConditionInfo} condition - A loop condition info to check. - * @returns {boolean} `true` if the loop condition info is "unmodified". - */ -function isUnmodified(condition) { - return !condition.modified; -} - -/** - * Checks whether or not a given loop condition info does not have the modified - * flag and does not have the group this condition belongs to. - * - * @param {LoopConditionInfo} condition - A loop condition info to check. - * @returns {boolean} `true` if the loop condition info is "unmodified". - */ -function isUnmodifiedAndNotBelongToGroup(condition) { - return !(condition.modified || condition.group); -} - -/** - * Checks whether or not a given reference is inside of a given node. - * - * @param {ASTNode} node - A node to check. - * @param {eslint-scope.Reference} reference - A reference to check. - * @returns {boolean} `true` if the reference is inside of the node. - */ -function isInRange(node, reference) { - const or = node.range; - const ir = reference.identifier.range; - - return or[0] <= ir[0] && ir[1] <= or[1]; -} - -/** - * Checks whether or not a given reference is inside of a loop node's condition. - * - * @param {ASTNode} node - A node to check. - * @param {eslint-scope.Reference} reference - A reference to check. - * @returns {boolean} `true` if the reference is inside of the loop node's - * condition. - */ -const isInLoop = { - WhileStatement: isInRange, - DoWhileStatement: isInRange, - ForStatement(node, reference) { - return ( - isInRange(node, reference) && - !(node.init && isInRange(node.init, reference)) - ); - } -}; - -/** - * Gets the function which encloses a given reference. - * This supports only FunctionDeclaration. - * - * @param {eslint-scope.Reference} reference - A reference to get. - * @returns {ASTNode|null} The function node or null. - */ -function getEncloseFunctionDeclaration(reference) { - let node = reference.identifier; - - while (node) { - if (node.type === "FunctionDeclaration") { - return node.id ? node : null; - } - - node = node.parent; - } - - return null; -} - -/** - * Updates the "modified" flags of given loop conditions with given modifiers. - * - * @param {LoopConditionInfo[]} conditions - The loop conditions to be updated. - * @param {eslint-scope.Reference[]} modifiers - The references to update. - * @returns {void} - */ -function updateModifiedFlag(conditions, modifiers) { - - for (let i = 0; i < conditions.length; ++i) { - const condition = conditions[i]; - - for (let j = 0; !condition.modified && j < modifiers.length; ++j) { - const modifier = modifiers[j]; - let funcNode, funcVar; - - /* - * Besides checking for the condition being in the loop, we want to - * check the function that this modifier is belonging to is called - * in the loop. - * FIXME: This should probably be extracted to a function. - */ - const inLoop = condition.isInLoop(modifier) || Boolean( - (funcNode = getEncloseFunctionDeclaration(modifier)) && - (funcVar = astUtils.getVariableByName(modifier.from.upper, funcNode.id.name)) && - funcVar.references.some(condition.isInLoop) - ); - - condition.modified = inLoop; - } - } -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unmodified loop conditions", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-unmodified-loop-condition" - }, - - schema: [] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - let groupMap = null; - - /** - * Reports a given condition info. - * - * @param {LoopConditionInfo} condition - A loop condition info to report. - * @returns {void} - */ - function report(condition) { - const node = condition.reference.identifier; - - context.report({ - node, - message: "'{{name}}' is not modified in this loop.", - data: node - }); - } - - /** - * Registers given conditions to the group the condition belongs to. - * - * @param {LoopConditionInfo[]} conditions - A loop condition info to - * register. - * @returns {void} - */ - function registerConditionsToGroup(conditions) { - for (let i = 0; i < conditions.length; ++i) { - const condition = conditions[i]; - - if (condition.group) { - let group = groupMap.get(condition.group); - - if (!group) { - group = []; - groupMap.set(condition.group, group); - } - group.push(condition); - } - } - } - - /** - * Reports references which are inside of unmodified groups. - * - * @param {LoopConditionInfo[]} conditions - A loop condition info to report. - * @returns {void} - */ - function checkConditionsInGroup(conditions) { - if (conditions.every(isUnmodified)) { - conditions.forEach(report); - } - } - - /** - * Checks whether or not a given group node has any dynamic elements. - * - * @param {ASTNode} root - A node to check. - * This node is one of BinaryExpression or ConditionalExpression. - * @returns {boolean} `true` if the node is dynamic. - */ - function hasDynamicExpressions(root) { - let retv = false; - - Traverser.traverse(root, { - visitorKeys: sourceCode.visitorKeys, - enter(node) { - if (DYNAMIC_PATTERN.test(node.type)) { - retv = true; - this.break(); - } else if (SKIP_PATTERN.test(node.type)) { - this.skip(); - } - } - }); - - return retv; - } - - /** - * Creates the loop condition information from a given reference. - * - * @param {eslint-scope.Reference} reference - A reference to create. - * @returns {LoopConditionInfo|null} Created loop condition info, or null. - */ - function toLoopCondition(reference) { - if (reference.init) { - return null; - } - - let group = null; - let child = reference.identifier; - let node = child.parent; - - while (node) { - if (SENTINEL_PATTERN.test(node.type)) { - if (LOOP_PATTERN.test(node.type) && node.test === child) { - - // This reference is inside of a loop condition. - return { - reference, - group, - isInLoop: isInLoop[node.type].bind(null, node), - modified: false - }; - } - - // This reference is outside of a loop condition. - break; - } - - /* - * If it's inside of a group, OK if either operand is modified. - * So stores the group this reference belongs to. - */ - if (GROUP_PATTERN.test(node.type)) { - - // If this expression is dynamic, no need to check. - if (hasDynamicExpressions(node)) { - break; - } else { - group = node; - } - } - - child = node; - node = node.parent; - } - - return null; - } - - /** - * Finds unmodified references which are inside of a loop condition. - * Then reports the references which are outside of groups. - * - * @param {eslint-scope.Variable} variable - A variable to report. - * @returns {void} - */ - function checkReferences(variable) { - - // Gets references that exist in loop conditions. - const conditions = variable - .references - .map(toLoopCondition) - .filter(Boolean); - - if (conditions.length === 0) { - return; - } - - // Registers the conditions to belonging groups. - registerConditionsToGroup(conditions); - - // Check the conditions are modified. - const modifiers = variable.references.filter(isWriteReference); - - if (modifiers.length > 0) { - updateModifiedFlag(conditions, modifiers); - } - - /* - * Reports the conditions which are not belonging to groups. - * Others will be reported after all variables are done. - */ - conditions - .filter(isUnmodifiedAndNotBelongToGroup) - .forEach(report); - } - - return { - "Program:exit"() { - const queue = [context.getScope()]; - - groupMap = new Map(); - - let scope; - - while ((scope = queue.pop())) { - pushAll(queue, scope.childScopes); - scope.variables.forEach(checkReferences); - } - - groupMap.forEach(checkConditionsInGroup); - groupMap = null; - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-unneeded-ternary.js b/node_modules/eslint/lib/rules/no-unneeded-ternary.js deleted file mode 100644 index 7f82c8e..0000000 --- a/node_modules/eslint/lib/rules/no-unneeded-ternary.js +++ /dev/null @@ -1,156 +0,0 @@ -/** - * @fileoverview Rule to flag no-unneeded-ternary - * @author Gyandeep Singh - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -// Operators that always result in a boolean value -const BOOLEAN_OPERATORS = new Set(["==", "===", "!=", "!==", ">", ">=", "<", "<=", "in", "instanceof"]); -const OPERATOR_INVERSES = { - "==": "!=", - "!=": "==", - "===": "!==", - "!==": "===" - - // Operators like < and >= are not true inverses, since both will return false with NaN. -}; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow ternary operators when simpler alternatives exist", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-unneeded-ternary" - }, - - schema: [ - { - type: "object", - properties: { - defaultAssignment: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - fixable: "code" - }, - - create(context) { - const options = context.options[0] || {}; - const defaultAssignment = options.defaultAssignment !== false; - const sourceCode = context.getSourceCode(); - - /** - * Test if the node is a boolean literal - * @param {ASTNode} node - The node to report. - * @returns {boolean} True if the its a boolean literal - * @private - */ - function isBooleanLiteral(node) { - return node.type === "Literal" && typeof node.value === "boolean"; - } - - /** - * Creates an expression that represents the boolean inverse of the expression represented by the original node - * @param {ASTNode} node A node representing an expression - * @returns {string} A string representing an inverted expression - */ - function invertExpression(node) { - if (node.type === "BinaryExpression" && Object.prototype.hasOwnProperty.call(OPERATOR_INVERSES, node.operator)) { - const operatorToken = sourceCode.getFirstTokenBetween( - node.left, - node.right, - token => token.value === node.operator - ); - const text = sourceCode.getText(); - - return text.slice(node.range[0], - operatorToken.range[0]) + OPERATOR_INVERSES[node.operator] + text.slice(operatorToken.range[1], node.range[1]); - } - - if (astUtils.getPrecedence(node) < astUtils.getPrecedence({ type: "UnaryExpression" })) { - return `!(${astUtils.getParenthesisedText(sourceCode, node)})`; - } - return `!${astUtils.getParenthesisedText(sourceCode, node)}`; - } - - /** - * Tests if a given node always evaluates to a boolean value - * @param {ASTNode} node - An expression node - * @returns {boolean} True if it is determined that the node will always evaluate to a boolean value - */ - function isBooleanExpression(node) { - return node.type === "BinaryExpression" && BOOLEAN_OPERATORS.has(node.operator) || - node.type === "UnaryExpression" && node.operator === "!"; - } - - /** - * Test if the node matches the pattern id ? id : expression - * @param {ASTNode} node - The ConditionalExpression to check. - * @returns {boolean} True if the pattern is matched, and false otherwise - * @private - */ - function matchesDefaultAssignment(node) { - return node.test.type === "Identifier" && - node.consequent.type === "Identifier" && - node.test.name === node.consequent.name; - } - - return { - - ConditionalExpression(node) { - if (isBooleanLiteral(node.alternate) && isBooleanLiteral(node.consequent)) { - context.report({ - node, - loc: node.consequent.loc.start, - message: "Unnecessary use of boolean literals in conditional expression.", - fix(fixer) { - if (node.consequent.value === node.alternate.value) { - - // Replace `foo ? true : true` with just `true`, but don't replace `foo() ? true : true` - return node.test.type === "Identifier" ? fixer.replaceText(node, node.consequent.value.toString()) : null; - } - if (node.alternate.value) { - - // Replace `foo() ? false : true` with `!(foo())` - return fixer.replaceText(node, invertExpression(node.test)); - } - - // Replace `foo ? true : false` with `foo` if `foo` is guaranteed to be a boolean, or `!!foo` otherwise. - - return fixer.replaceText(node, isBooleanExpression(node.test) ? astUtils.getParenthesisedText(sourceCode, node.test) : `!${invertExpression(node.test)}`); - } - }); - } else if (!defaultAssignment && matchesDefaultAssignment(node)) { - context.report({ - node, - loc: node.consequent.loc.start, - message: "Unnecessary use of conditional expression for default assignment.", - fix: fixer => { - let nodeAlternate = astUtils.getParenthesisedText(sourceCode, node.alternate); - - if (node.alternate.type === "ConditionalExpression") { - const isAlternateParenthesised = astUtils.isParenthesised(sourceCode, node.alternate); - - nodeAlternate = isAlternateParenthesised ? nodeAlternate : `(${nodeAlternate})`; - } - - return fixer.replaceText(node, `${astUtils.getParenthesisedText(sourceCode, node.test)} || ${nodeAlternate}`); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-unreachable.js b/node_modules/eslint/lib/rules/no-unreachable.js deleted file mode 100644 index 80d2463..0000000 --- a/node_modules/eslint/lib/rules/no-unreachable.js +++ /dev/null @@ -1,213 +0,0 @@ -/** - * @fileoverview Checks for unreachable code due to return, throws, break, and continue. - * @author Joel Feenstra - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a given variable declarator has the initializer. - * @param {ASTNode} node - A VariableDeclarator node to check. - * @returns {boolean} `true` if the node has the initializer. - */ -function isInitialized(node) { - return Boolean(node.init); -} - -/** - * Checks whether or not a given code path segment is unreachable. - * @param {CodePathSegment} segment - A CodePathSegment to check. - * @returns {boolean} `true` if the segment is unreachable. - */ -function isUnreachable(segment) { - return !segment.reachable; -} - -/** - * The class to distinguish consecutive unreachable statements. - */ -class ConsecutiveRange { - constructor(sourceCode) { - this.sourceCode = sourceCode; - this.startNode = null; - this.endNode = null; - } - - /** - * The location object of this range. - * @type {Object} - */ - get location() { - return { - start: this.startNode.loc.start, - end: this.endNode.loc.end - }; - } - - /** - * `true` if this range is empty. - * @type {boolean} - */ - get isEmpty() { - return !(this.startNode && this.endNode); - } - - /** - * Checks whether the given node is inside of this range. - * @param {ASTNode|Token} node - The node to check. - * @returns {boolean} `true` if the node is inside of this range. - */ - contains(node) { - return ( - node.range[0] >= this.startNode.range[0] && - node.range[1] <= this.endNode.range[1] - ); - } - - /** - * Checks whether the given node is consecutive to this range. - * @param {ASTNode} node - The node to check. - * @returns {boolean} `true` if the node is consecutive to this range. - */ - isConsecutive(node) { - return this.contains(this.sourceCode.getTokenBefore(node)); - } - - /** - * Merges the given node to this range. - * @param {ASTNode} node - The node to merge. - * @returns {void} - */ - merge(node) { - this.endNode = node; - } - - /** - * Resets this range by the given node or null. - * @param {ASTNode|null} node - The node to reset, or null. - * @returns {void} - */ - reset(node) { - this.startNode = this.endNode = node; - } -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unreachable code after `return`, `throw`, `continue`, and `break` statements", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-unreachable" - }, - - schema: [] - }, - - create(context) { - let currentCodePath = null; - - const range = new ConsecutiveRange(context.getSourceCode()); - - /** - * Reports a given node if it's unreachable. - * @param {ASTNode} node - A statement node to report. - * @returns {void} - */ - function reportIfUnreachable(node) { - let nextNode = null; - - if (node && currentCodePath.currentSegments.every(isUnreachable)) { - - // Store this statement to distinguish consecutive statements. - if (range.isEmpty) { - range.reset(node); - return; - } - - // Skip if this statement is inside of the current range. - if (range.contains(node)) { - return; - } - - // Merge if this statement is consecutive to the current range. - if (range.isConsecutive(node)) { - range.merge(node); - return; - } - - nextNode = node; - } - - /* - * Report the current range since this statement is reachable or is - * not consecutive to the current range. - */ - if (!range.isEmpty) { - context.report({ - message: "Unreachable code.", - loc: range.location, - node: range.startNode - }); - } - - // Update the current range. - range.reset(nextNode); - } - - return { - - // Manages the current code path. - onCodePathStart(codePath) { - currentCodePath = codePath; - }, - - onCodePathEnd() { - currentCodePath = currentCodePath.upper; - }, - - // Registers for all statement nodes (excludes FunctionDeclaration). - BlockStatement: reportIfUnreachable, - BreakStatement: reportIfUnreachable, - ClassDeclaration: reportIfUnreachable, - ContinueStatement: reportIfUnreachable, - DebuggerStatement: reportIfUnreachable, - DoWhileStatement: reportIfUnreachable, - EmptyStatement: reportIfUnreachable, - ExpressionStatement: reportIfUnreachable, - ForInStatement: reportIfUnreachable, - ForOfStatement: reportIfUnreachable, - ForStatement: reportIfUnreachable, - IfStatement: reportIfUnreachable, - ImportDeclaration: reportIfUnreachable, - LabeledStatement: reportIfUnreachable, - ReturnStatement: reportIfUnreachable, - SwitchStatement: reportIfUnreachable, - ThrowStatement: reportIfUnreachable, - TryStatement: reportIfUnreachable, - - VariableDeclaration(node) { - if (node.kind !== "var" || node.declarations.some(isInitialized)) { - reportIfUnreachable(node); - } - }, - - WhileStatement: reportIfUnreachable, - WithStatement: reportIfUnreachable, - ExportNamedDeclaration: reportIfUnreachable, - ExportDefaultDeclaration: reportIfUnreachable, - ExportAllDeclaration: reportIfUnreachable, - - "Program:exit"() { - reportIfUnreachable(); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-unsafe-finally.js b/node_modules/eslint/lib/rules/no-unsafe-finally.js deleted file mode 100644 index 1ebdd2e..0000000 --- a/node_modules/eslint/lib/rules/no-unsafe-finally.js +++ /dev/null @@ -1,108 +0,0 @@ -/** - * @fileoverview Rule to flag unsafe statements in finally block - * @author Onur Temizkan - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const SENTINEL_NODE_TYPE_RETURN_THROW = /^(?:Program|(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression)$/; -const SENTINEL_NODE_TYPE_BREAK = /^(?:Program|(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|DoWhileStatement|WhileStatement|ForOfStatement|ForInStatement|ForStatement|SwitchStatement)$/; -const SENTINEL_NODE_TYPE_CONTINUE = /^(?:Program|(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|DoWhileStatement|WhileStatement|ForOfStatement|ForInStatement|ForStatement)$/; - - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow control flow statements in `finally` blocks", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-unsafe-finally" - }, - - schema: [] - }, - create(context) { - - /** - * Checks if the node is the finalizer of a TryStatement - * - * @param {ASTNode} node - node to check. - * @returns {boolean} - true if the node is the finalizer of a TryStatement - */ - function isFinallyBlock(node) { - return node.parent.type === "TryStatement" && node.parent.finalizer === node; - } - - /** - * Climbs up the tree if the node is not a sentinel node - * - * @param {ASTNode} node - node to check. - * @param {string} label - label of the break or continue statement - * @returns {boolean} - return whether the node is a finally block or a sentinel node - */ - function isInFinallyBlock(node, label) { - let labelInside = false; - let sentinelNodeType; - - if (node.type === "BreakStatement" && !node.label) { - sentinelNodeType = SENTINEL_NODE_TYPE_BREAK; - } else if (node.type === "ContinueStatement") { - sentinelNodeType = SENTINEL_NODE_TYPE_CONTINUE; - } else { - sentinelNodeType = SENTINEL_NODE_TYPE_RETURN_THROW; - } - - for ( - let currentNode = node; - currentNode && !sentinelNodeType.test(currentNode.type); - currentNode = currentNode.parent - ) { - if (currentNode.parent.label && label && (currentNode.parent.label.name === label.name)) { - labelInside = true; - } - if (isFinallyBlock(currentNode)) { - if (label && labelInside) { - return false; - } - return true; - } - } - return false; - } - - /** - * Checks whether the possibly-unsafe statement is inside a finally block. - * - * @param {ASTNode} node - node to check. - * @returns {void} - */ - function check(node) { - if (isInFinallyBlock(node, node.label)) { - context.report({ - message: "Unsafe usage of {{nodeType}}.", - data: { - nodeType: node.type - }, - node, - line: node.loc.line, - column: node.loc.column - }); - } - } - - return { - ReturnStatement: check, - ThrowStatement: check, - BreakStatement: check, - ContinueStatement: check - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-unsafe-negation.js b/node_modules/eslint/lib/rules/no-unsafe-negation.js deleted file mode 100644 index 5dc39f1..0000000 --- a/node_modules/eslint/lib/rules/no-unsafe-negation.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @fileoverview Rule to disallow negating the left operand of relational operators - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether the given operator is a relational operator or not. - * - * @param {string} op - The operator type to check. - * @returns {boolean} `true` if the operator is a relational operator. - */ -function isRelationalOperator(op) { - return op === "in" || op === "instanceof"; -} - -/** - * Checks whether the given node is a logical negation expression or not. - * - * @param {ASTNode} node - The node to check. - * @returns {boolean} `true` if the node is a logical negation expression. - */ -function isNegation(node) { - return node.type === "UnaryExpression" && node.operator === "!"; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow negating the left operand of relational operators", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/no-unsafe-negation" - }, - schema: [], - fixable: "code" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - return { - BinaryExpression(node) { - if (isRelationalOperator(node.operator) && - isNegation(node.left) && - !astUtils.isParenthesised(sourceCode, node.left) - ) { - context.report({ - node, - loc: node.left.loc, - message: "Unexpected negating the left operand of '{{operator}}' operator.", - data: node, - - fix(fixer) { - const negationToken = sourceCode.getFirstToken(node.left); - const fixRange = [negationToken.range[1], node.range[1]]; - const text = sourceCode.text.slice(fixRange[0], fixRange[1]); - - return fixer.replaceTextRange(fixRange, `(${text})`); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-unused-expressions.js b/node_modules/eslint/lib/rules/no-unused-expressions.js deleted file mode 100644 index fedfac1..0000000 --- a/node_modules/eslint/lib/rules/no-unused-expressions.js +++ /dev/null @@ -1,127 +0,0 @@ -/** - * @fileoverview Flag expressions in statement position that do not side effect - * @author Michael Ficarra - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unused expressions", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-unused-expressions" - }, - - schema: [ - { - type: "object", - properties: { - allowShortCircuit: { - type: "boolean" - }, - allowTernary: { - type: "boolean" - }, - allowTaggedTemplates: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const config = context.options[0] || {}, - allowShortCircuit = config.allowShortCircuit || false, - allowTernary = config.allowTernary || false, - allowTaggedTemplates = config.allowTaggedTemplates || false; - - /** - * @param {ASTNode} node - any node - * @returns {boolean} whether the given node structurally represents a directive - */ - function looksLikeDirective(node) { - return node.type === "ExpressionStatement" && - node.expression.type === "Literal" && typeof node.expression.value === "string"; - } - - /** - * @param {Function} predicate - ([a] -> Boolean) the function used to make the determination - * @param {a[]} list - the input list - * @returns {a[]} the leading sequence of members in the given list that pass the given predicate - */ - function takeWhile(predicate, list) { - for (let i = 0; i < list.length; ++i) { - if (!predicate(list[i])) { - return list.slice(0, i); - } - } - return list.slice(); - } - - /** - * @param {ASTNode} node - a Program or BlockStatement node - * @returns {ASTNode[]} the leading sequence of directive nodes in the given node's body - */ - function directives(node) { - return takeWhile(looksLikeDirective, node.body); - } - - /** - * @param {ASTNode} node - any node - * @param {ASTNode[]} ancestors - the given node's ancestors - * @returns {boolean} whether the given node is considered a directive in its current position - */ - function isDirective(node, ancestors) { - const parent = ancestors[ancestors.length - 1], - grandparent = ancestors[ancestors.length - 2]; - - return (parent.type === "Program" || parent.type === "BlockStatement" && - (/Function/.test(grandparent.type))) && - directives(parent).indexOf(node) >= 0; - } - - /** - * Determines whether or not a given node is a valid expression. Recurses on short circuit eval and ternary nodes if enabled by flags. - * @param {ASTNode} node - any node - * @returns {boolean} whether the given node is a valid expression - */ - function isValidExpression(node) { - if (allowTernary) { - - // Recursive check for ternary and logical expressions - if (node.type === "ConditionalExpression") { - return isValidExpression(node.consequent) && isValidExpression(node.alternate); - } - } - - if (allowShortCircuit) { - if (node.type === "LogicalExpression") { - return isValidExpression(node.right); - } - } - - if (allowTaggedTemplates && node.type === "TaggedTemplateExpression") { - return true; - } - - return /^(?:Assignment|Call|New|Update|Yield|Await)Expression$/.test(node.type) || - (node.type === "UnaryExpression" && ["delete", "void"].indexOf(node.operator) >= 0); - } - - return { - ExpressionStatement(node) { - if (!isValidExpression(node.expression) && !isDirective(node, context.getAncestors())) { - context.report({ node, message: "Expected an assignment or function call and instead saw an expression." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-unused-labels.js b/node_modules/eslint/lib/rules/no-unused-labels.js deleted file mode 100644 index 3e1dcb6..0000000 --- a/node_modules/eslint/lib/rules/no-unused-labels.js +++ /dev/null @@ -1,107 +0,0 @@ -/** - * @fileoverview Rule to disallow unused labels. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unused labels", - category: "Best Practices", - recommended: true, - url: "https://eslint.org/docs/rules/no-unused-labels" - }, - - schema: [], - - fixable: "code" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - let scopeInfo = null; - - /** - * Adds a scope info to the stack. - * - * @param {ASTNode} node - A node to add. This is a LabeledStatement. - * @returns {void} - */ - function enterLabeledScope(node) { - scopeInfo = { - label: node.label.name, - used: false, - upper: scopeInfo - }; - } - - /** - * Removes the top of the stack. - * At the same time, this reports the label if it's never used. - * - * @param {ASTNode} node - A node to report. This is a LabeledStatement. - * @returns {void} - */ - function exitLabeledScope(node) { - if (!scopeInfo.used) { - context.report({ - node: node.label, - message: "'{{name}}:' is defined but never used.", - data: node.label, - fix(fixer) { - - /* - * Only perform a fix if there are no comments between the label and the body. This will be the case - * when there is exactly one token/comment (the ":") between the label and the body. - */ - if (sourceCode.getTokenAfter(node.label, { includeComments: true }) === - sourceCode.getTokenBefore(node.body, { includeComments: true })) { - return fixer.removeRange([node.range[0], node.body.range[0]]); - } - - return null; - } - }); - } - - scopeInfo = scopeInfo.upper; - } - - /** - * Marks the label of a given node as used. - * - * @param {ASTNode} node - A node to mark. This is a BreakStatement or - * ContinueStatement. - * @returns {void} - */ - function markAsUsed(node) { - if (!node.label) { - return; - } - - const label = node.label.name; - let info = scopeInfo; - - while (info) { - if (info.label === label) { - info.used = true; - break; - } - info = info.upper; - } - } - - return { - LabeledStatement: enterLabeledScope, - "LabeledStatement:exit": exitLabeledScope, - BreakStatement: markAsUsed, - ContinueStatement: markAsUsed - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-unused-vars.js b/node_modules/eslint/lib/rules/no-unused-vars.js deleted file mode 100644 index 6ba5734..0000000 --- a/node_modules/eslint/lib/rules/no-unused-vars.js +++ /dev/null @@ -1,643 +0,0 @@ -/** - * @fileoverview Rule to flag declared but unused variables - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unused variables", - category: "Variables", - recommended: true, - url: "https://eslint.org/docs/rules/no-unused-vars" - }, - - schema: [ - { - oneOf: [ - { - enum: ["all", "local"] - }, - { - type: "object", - properties: { - vars: { - enum: ["all", "local"] - }, - varsIgnorePattern: { - type: "string" - }, - args: { - enum: ["all", "after-used", "none"] - }, - ignoreRestSiblings: { - type: "boolean" - }, - argsIgnorePattern: { - type: "string" - }, - caughtErrors: { - enum: ["all", "none"] - }, - caughtErrorsIgnorePattern: { - type: "string" - } - } - } - ] - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - const REST_PROPERTY_TYPE = /^(?:RestElement|(?:Experimental)?RestProperty)$/; - - const config = { - vars: "all", - args: "after-used", - ignoreRestSiblings: false, - caughtErrors: "none" - }; - - const firstOption = context.options[0]; - - if (firstOption) { - if (typeof firstOption === "string") { - config.vars = firstOption; - } else { - config.vars = firstOption.vars || config.vars; - config.args = firstOption.args || config.args; - config.ignoreRestSiblings = firstOption.ignoreRestSiblings || config.ignoreRestSiblings; - config.caughtErrors = firstOption.caughtErrors || config.caughtErrors; - - if (firstOption.varsIgnorePattern) { - config.varsIgnorePattern = new RegExp(firstOption.varsIgnorePattern); - } - - if (firstOption.argsIgnorePattern) { - config.argsIgnorePattern = new RegExp(firstOption.argsIgnorePattern); - } - - if (firstOption.caughtErrorsIgnorePattern) { - config.caughtErrorsIgnorePattern = new RegExp(firstOption.caughtErrorsIgnorePattern); - } - } - } - - /** - * Generate the warning message about the variable being - * defined and unused, including the ignore pattern if configured. - * @param {Variable} unusedVar - eslint-scope variable object. - * @returns {string} The warning message to be used with this unused variable. - */ - function getDefinedMessage(unusedVar) { - const defType = unusedVar.defs && unusedVar.defs[0] && unusedVar.defs[0].type; - let type; - let pattern; - - if (defType === "CatchClause" && config.caughtErrorsIgnorePattern) { - type = "args"; - pattern = config.caughtErrorsIgnorePattern.toString(); - } else if (defType === "Parameter" && config.argsIgnorePattern) { - type = "args"; - pattern = config.argsIgnorePattern.toString(); - } else if (defType !== "Parameter" && config.varsIgnorePattern) { - type = "vars"; - pattern = config.varsIgnorePattern.toString(); - } - - const additional = type ? ` Allowed unused ${type} must match ${pattern}.` : ""; - - return `'{{name}}' is defined but never used.${additional}`; - } - - /** - * Generate the warning message about the variable being - * assigned and unused, including the ignore pattern if configured. - * @returns {string} The warning message to be used with this unused variable. - */ - function getAssignedMessage() { - const additional = config.varsIgnorePattern ? ` Allowed unused vars must match ${config.varsIgnorePattern.toString()}.` : ""; - - return `'{{name}}' is assigned a value but never used.${additional}`; - } - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - const STATEMENT_TYPE = /(?:Statement|Declaration)$/; - - /** - * Determines if a given variable is being exported from a module. - * @param {Variable} variable - eslint-scope variable object. - * @returns {boolean} True if the variable is exported, false if not. - * @private - */ - function isExported(variable) { - - const definition = variable.defs[0]; - - if (definition) { - - let node = definition.node; - - if (node.type === "VariableDeclarator") { - node = node.parent; - } else if (definition.type === "Parameter") { - return false; - } - - return node.parent.type.indexOf("Export") === 0; - } - return false; - - } - - /** - * Determines if a variable has a sibling rest property - * @param {Variable} variable - eslint-scope variable object. - * @returns {boolean} True if the variable is exported, false if not. - * @private - */ - function hasRestSpreadSibling(variable) { - if (config.ignoreRestSiblings) { - return variable.defs.some(def => { - const propertyNode = def.name.parent; - const patternNode = propertyNode.parent; - - return ( - propertyNode.type === "Property" && - patternNode.type === "ObjectPattern" && - REST_PROPERTY_TYPE.test(patternNode.properties[patternNode.properties.length - 1].type) - ); - }); - } - - return false; - } - - /** - * Determines if a reference is a read operation. - * @param {Reference} ref - An eslint-scope Reference - * @returns {boolean} whether the given reference represents a read operation - * @private - */ - function isReadRef(ref) { - return ref.isRead(); - } - - /** - * Determine if an identifier is referencing an enclosing function name. - * @param {Reference} ref - The reference to check. - * @param {ASTNode[]} nodes - The candidate function nodes. - * @returns {boolean} True if it's a self-reference, false if not. - * @private - */ - function isSelfReference(ref, nodes) { - let scope = ref.from; - - while (scope) { - if (nodes.indexOf(scope.block) >= 0) { - return true; - } - - scope = scope.upper; - } - - return false; - } - - /** - * Checks the position of given nodes. - * - * @param {ASTNode} inner - A node which is expected as inside. - * @param {ASTNode} outer - A node which is expected as outside. - * @returns {boolean} `true` if the `inner` node exists in the `outer` node. - * @private - */ - function isInside(inner, outer) { - return ( - inner.range[0] >= outer.range[0] && - inner.range[1] <= outer.range[1] - ); - } - - /** - * If a given reference is left-hand side of an assignment, this gets - * the right-hand side node of the assignment. - * - * In the following cases, this returns null. - * - * - The reference is not the LHS of an assignment expression. - * - The reference is inside of a loop. - * - The reference is inside of a function scope which is different from - * the declaration. - * - * @param {eslint-scope.Reference} ref - A reference to check. - * @param {ASTNode} prevRhsNode - The previous RHS node. - * @returns {ASTNode|null} The RHS node or null. - * @private - */ - function getRhsNode(ref, prevRhsNode) { - const id = ref.identifier; - const parent = id.parent; - const granpa = parent.parent; - const refScope = ref.from.variableScope; - const varScope = ref.resolved.scope.variableScope; - const canBeUsedLater = refScope !== varScope || astUtils.isInLoop(id); - - /* - * Inherits the previous node if this reference is in the node. - * This is for `a = a + a`-like code. - */ - if (prevRhsNode && isInside(id, prevRhsNode)) { - return prevRhsNode; - } - - if (parent.type === "AssignmentExpression" && - granpa.type === "ExpressionStatement" && - id === parent.left && - !canBeUsedLater - ) { - return parent.right; - } - return null; - } - - /** - * Checks whether a given function node is stored to somewhere or not. - * If the function node is stored, the function can be used later. - * - * @param {ASTNode} funcNode - A function node to check. - * @param {ASTNode} rhsNode - The RHS node of the previous assignment. - * @returns {boolean} `true` if under the following conditions: - * - the funcNode is assigned to a variable. - * - the funcNode is bound as an argument of a function call. - * - the function is bound to a property and the object satisfies above conditions. - * @private - */ - function isStorableFunction(funcNode, rhsNode) { - let node = funcNode; - let parent = funcNode.parent; - - while (parent && isInside(parent, rhsNode)) { - switch (parent.type) { - case "SequenceExpression": - if (parent.expressions[parent.expressions.length - 1] !== node) { - return false; - } - break; - - case "CallExpression": - case "NewExpression": - return parent.callee !== node; - - case "AssignmentExpression": - case "TaggedTemplateExpression": - case "YieldExpression": - return true; - - default: - if (STATEMENT_TYPE.test(parent.type)) { - - /* - * If it encountered statements, this is a complex pattern. - * Since analyzeing complex patterns is hard, this returns `true` to avoid false positive. - */ - return true; - } - } - - node = parent; - parent = parent.parent; - } - - return false; - } - - /** - * Checks whether a given Identifier node exists inside of a function node which can be used later. - * - * "can be used later" means: - * - the function is assigned to a variable. - * - the function is bound to a property and the object can be used later. - * - the function is bound as an argument of a function call. - * - * If a reference exists in a function which can be used later, the reference is read when the function is called. - * - * @param {ASTNode} id - An Identifier node to check. - * @param {ASTNode} rhsNode - The RHS node of the previous assignment. - * @returns {boolean} `true` if the `id` node exists inside of a function node which can be used later. - * @private - */ - function isInsideOfStorableFunction(id, rhsNode) { - const funcNode = astUtils.getUpperFunction(id); - - return ( - funcNode && - isInside(funcNode, rhsNode) && - isStorableFunction(funcNode, rhsNode) - ); - } - - /** - * Checks whether a given reference is a read to update itself or not. - * - * @param {eslint-scope.Reference} ref - A reference to check. - * @param {ASTNode} rhsNode - The RHS node of the previous assignment. - * @returns {boolean} The reference is a read to update itself. - * @private - */ - function isReadForItself(ref, rhsNode) { - const id = ref.identifier; - const parent = id.parent; - const granpa = parent.parent; - - return ref.isRead() && ( - - // self update. e.g. `a += 1`, `a++` - ( - parent.type === "AssignmentExpression" && - granpa.type === "ExpressionStatement" && - parent.left === id - ) || - ( - parent.type === "UpdateExpression" && - granpa.type === "ExpressionStatement" - ) || - - // in RHS of an assignment for itself. e.g. `a = a + 1` - ( - rhsNode && - isInside(id, rhsNode) && - !isInsideOfStorableFunction(id, rhsNode) - ) - ); - } - - /** - * Determine if an identifier is used either in for-in loops. - * - * @param {Reference} ref - The reference to check. - * @returns {boolean} whether reference is used in the for-in loops - * @private - */ - function isForInRef(ref) { - let target = ref.identifier.parent; - - - // "for (var ...) { return; }" - if (target.type === "VariableDeclarator") { - target = target.parent.parent; - } - - if (target.type !== "ForInStatement") { - return false; - } - - // "for (...) { return; }" - if (target.body.type === "BlockStatement") { - target = target.body.body[0]; - - // "for (...) return;" - } else { - target = target.body; - } - - // For empty loop body - if (!target) { - return false; - } - - return target.type === "ReturnStatement"; - } - - /** - * Determines if the variable is used. - * @param {Variable} variable - The variable to check. - * @returns {boolean} True if the variable is used - * @private - */ - function isUsedVariable(variable) { - const functionNodes = variable.defs.filter(def => def.type === "FunctionName").map(def => def.node), - isFunctionDefinition = functionNodes.length > 0; - let rhsNode = null; - - return variable.references.some(ref => { - if (isForInRef(ref)) { - return true; - } - - const forItself = isReadForItself(ref, rhsNode); - - rhsNode = getRhsNode(ref, rhsNode); - - return ( - isReadRef(ref) && - !forItself && - !(isFunctionDefinition && isSelfReference(ref, functionNodes)) - ); - }); - } - - /** - * Checks whether the given variable is the last parameter in the non-ignored parameters. - * - * @param {eslint-scope.Variable} variable - The variable to check. - * @returns {boolean} `true` if the variable is the last. - */ - function isLastInNonIgnoredParameters(variable) { - const def = variable.defs[0]; - - // This is the last. - if (def.index === def.node.params.length - 1) { - return true; - } - - // if all parameters preceded by this variable are ignored and unused, this is the last. - if (config.argsIgnorePattern) { - const params = context.getDeclaredVariables(def.node); - const posteriorParams = params.slice(params.indexOf(variable) + 1); - - if (posteriorParams.every(v => v.references.length === 0 && config.argsIgnorePattern.test(v.name))) { - return true; - } - } - - return false; - } - - /** - * Gets an array of variables without read references. - * @param {Scope} scope - an eslint-scope Scope object. - * @param {Variable[]} unusedVars - an array that saving result. - * @returns {Variable[]} unused variables of the scope and descendant scopes. - * @private - */ - function collectUnusedVariables(scope, unusedVars) { - const variables = scope.variables; - const childScopes = scope.childScopes; - let i, l; - - if (scope.type !== "TDZ" && (scope.type !== "global" || config.vars === "all")) { - for (i = 0, l = variables.length; i < l; ++i) { - const variable = variables[i]; - - // skip a variable of class itself name in the class scope - if (scope.type === "class" && scope.block.id === variable.identifiers[0]) { - continue; - } - - // skip function expression names and variables marked with markVariableAsUsed() - if (scope.functionExpressionScope || variable.eslintUsed) { - continue; - } - - // skip implicit "arguments" variable - if (scope.type === "function" && variable.name === "arguments" && variable.identifiers.length === 0) { - continue; - } - - // explicit global variables don't have definitions. - const def = variable.defs[0]; - - if (def) { - const type = def.type; - - // skip catch variables - if (type === "CatchClause") { - if (config.caughtErrors === "none") { - continue; - } - - // skip ignored parameters - if (config.caughtErrorsIgnorePattern && config.caughtErrorsIgnorePattern.test(def.name.name)) { - continue; - } - } - - if (type === "Parameter") { - - // skip any setter argument - if ((def.node.parent.type === "Property" || def.node.parent.type === "MethodDefinition") && def.node.parent.kind === "set") { - continue; - } - - // if "args" option is "none", skip any parameter - if (config.args === "none") { - continue; - } - - // skip ignored parameters - if (config.argsIgnorePattern && config.argsIgnorePattern.test(def.name.name)) { - continue; - } - - // if "args" option is "after-used", skip all but the last parameter - if (config.args === "after-used" && astUtils.isFunction(def.name.parent) && !isLastInNonIgnoredParameters(variable)) { - continue; - } - } else { - - // skip ignored variables - if (config.varsIgnorePattern && config.varsIgnorePattern.test(def.name.name)) { - continue; - } - } - } - - if (!isUsedVariable(variable) && !isExported(variable) && !hasRestSpreadSibling(variable)) { - unusedVars.push(variable); - } - } - } - - for (i = 0, l = childScopes.length; i < l; ++i) { - collectUnusedVariables(childScopes[i], unusedVars); - } - - return unusedVars; - } - - /** - * Gets the index of a given variable name in a given comment. - * @param {eslint-scope.Variable} variable - A variable to get. - * @param {ASTNode} comment - A comment node which includes the variable name. - * @returns {number} The index of the variable name's location. - * @private - */ - function getColumnInComment(variable, comment) { - const namePattern = new RegExp(`[\\s,]${lodash.escapeRegExp(variable.name)}(?:$|[\\s,:])`, "g"); - - // To ignore the first text "global". - namePattern.lastIndex = comment.value.indexOf("global") + 6; - - // Search a given variable name. - const match = namePattern.exec(comment.value); - - return match ? match.index + 1 : 0; - } - - /** - * Creates the correct location of a given variables. - * The location is at its name string in a `/*global` comment. - * - * @param {eslint-scope.Variable} variable - A variable to get its location. - * @returns {{line: number, column: number}} The location object for the variable. - * @private - */ - function getLocation(variable) { - const comment = variable.eslintExplicitGlobalComment; - - return sourceCode.getLocFromIndex(comment.range[0] + 2 + getColumnInComment(variable, comment)); - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - "Program:exit"(programNode) { - const unusedVars = collectUnusedVariables(context.getScope(), []); - - for (let i = 0, l = unusedVars.length; i < l; ++i) { - const unusedVar = unusedVars[i]; - - if (unusedVar.eslintExplicitGlobal) { - context.report({ - node: programNode, - loc: getLocation(unusedVar), - message: getDefinedMessage(unusedVar), - data: unusedVar - }); - } else if (unusedVar.defs.length > 0) { - context.report({ - node: unusedVar.identifiers[0], - message: unusedVar.references.some(ref => ref.isWrite()) - ? getAssignedMessage() - : getDefinedMessage(unusedVar), - data: unusedVar - }); - } - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-use-before-define.js b/node_modules/eslint/lib/rules/no-use-before-define.js deleted file mode 100644 index 37b8e11..0000000 --- a/node_modules/eslint/lib/rules/no-use-before-define.js +++ /dev/null @@ -1,267 +0,0 @@ -/** - * @fileoverview Rule to flag use of variables before they are defined - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const SENTINEL_TYPE = /^(?:(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|CatchClause|ImportDeclaration|ExportNamedDeclaration)$/; -const FOR_IN_OF_TYPE = /^For(?:In|Of)Statement$/; - -/** - * Parses a given value as options. - * - * @param {any} options - A value to parse. - * @returns {Object} The parsed options. - */ -function parseOptions(options) { - let functions = true; - let classes = true; - let variables = true; - - if (typeof options === "string") { - functions = (options !== "nofunc"); - } else if (typeof options === "object" && options !== null) { - functions = options.functions !== false; - classes = options.classes !== false; - variables = options.variables !== false; - } - - return { functions, classes, variables }; -} - -/** - * Checks whether or not a given variable is a function declaration. - * - * @param {eslint-scope.Variable} variable - A variable to check. - * @returns {boolean} `true` if the variable is a function declaration. - */ -function isFunction(variable) { - return variable.defs[0].type === "FunctionName"; -} - -/** - * Checks whether or not a given variable is a class declaration in an upper function scope. - * - * @param {eslint-scope.Variable} variable - A variable to check. - * @param {eslint-scope.Reference} reference - A reference to check. - * @returns {boolean} `true` if the variable is a class declaration. - */ -function isOuterClass(variable, reference) { - return ( - variable.defs[0].type === "ClassName" && - variable.scope.variableScope !== reference.from.variableScope - ); -} - -/** - * Checks whether or not a given variable is a variable declaration in an upper function scope. - * @param {eslint-scope.Variable} variable - A variable to check. - * @param {eslint-scope.Reference} reference - A reference to check. - * @returns {boolean} `true` if the variable is a variable declaration. - */ -function isOuterVariable(variable, reference) { - return ( - variable.defs[0].type === "Variable" && - variable.scope.variableScope !== reference.from.variableScope - ); -} - -/** - * Checks whether or not a given location is inside of the range of a given node. - * - * @param {ASTNode} node - An node to check. - * @param {number} location - A location to check. - * @returns {boolean} `true` if the location is inside of the range of the node. - */ -function isInRange(node, location) { - return node && node.range[0] <= location && location <= node.range[1]; -} - -/** - * Checks whether or not a given reference is inside of the initializers of a given variable. - * - * This returns `true` in the following cases: - * - * var a = a - * var [a = a] = list - * var {a = a} = obj - * for (var a in a) {} - * for (var a of a) {} - * - * @param {Variable} variable - A variable to check. - * @param {Reference} reference - A reference to check. - * @returns {boolean} `true` if the reference is inside of the initializers. - */ -function isInInitializer(variable, reference) { - if (variable.scope !== reference.from) { - return false; - } - - let node = variable.identifiers[0].parent; - const location = reference.identifier.range[1]; - - while (node) { - if (node.type === "VariableDeclarator") { - if (isInRange(node.init, location)) { - return true; - } - if (FOR_IN_OF_TYPE.test(node.parent.parent.type) && - isInRange(node.parent.parent.right, location) - ) { - return true; - } - break; - } else if (node.type === "AssignmentPattern") { - if (isInRange(node.right, location)) { - return true; - } - } else if (SENTINEL_TYPE.test(node.type)) { - break; - } - - node = node.parent; - } - - return false; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow the use of variables before they are defined", - category: "Variables", - recommended: false, - url: "https://eslint.org/docs/rules/no-use-before-define" - }, - - schema: [ - { - oneOf: [ - { - enum: ["nofunc"] - }, - { - type: "object", - properties: { - functions: { type: "boolean" }, - classes: { type: "boolean" }, - variables: { type: "boolean" } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - const options = parseOptions(context.options[0]); - - /** - * Determines whether a given use-before-define case should be reported according to the options. - * @param {eslint-scope.Variable} variable The variable that gets used before being defined - * @param {eslint-scope.Reference} reference The reference to the variable - * @returns {boolean} `true` if the usage should be reported - */ - function isForbidden(variable, reference) { - if (isFunction(variable)) { - return options.functions; - } - if (isOuterClass(variable, reference)) { - return options.classes; - } - if (isOuterVariable(variable, reference)) { - return options.variables; - } - return true; - } - - /** - * Finds and validates all variables in a given scope. - * @param {Scope} scope The scope object. - * @returns {void} - * @private - */ - function findVariablesInScope(scope) { - scope.references.forEach(reference => { - const variable = reference.resolved; - - /* - * Skips when the reference is: - * - initialization's. - * - referring to an undefined variable. - * - referring to a global environment variable (there're no identifiers). - * - located preceded by the variable (except in initializers). - * - allowed by options. - */ - if (reference.init || - !variable || - variable.identifiers.length === 0 || - (variable.identifiers[0].range[1] < reference.identifier.range[1] && !isInInitializer(variable, reference)) || - !isForbidden(variable, reference) - ) { - return; - } - - // Reports. - context.report({ - node: reference.identifier, - message: "'{{name}}' was used before it was defined.", - data: reference.identifier - }); - }); - } - - /** - * Validates variables inside of a node's scope. - * @param {ASTNode} node The node to check. - * @returns {void} - * @private - */ - function findVariables() { - const scope = context.getScope(); - - findVariablesInScope(scope); - } - - const ruleDefinition = { - "Program:exit"(node) { - const scope = context.getScope(), - ecmaFeatures = context.parserOptions.ecmaFeatures || {}; - - findVariablesInScope(scope); - - // both Node.js and Modules have an extra scope - if (ecmaFeatures.globalReturn || node.sourceType === "module") { - findVariablesInScope(scope.childScopes[0]); - } - } - }; - - if (context.parserOptions.ecmaVersion >= 6) { - ruleDefinition["BlockStatement:exit"] = - ruleDefinition["SwitchStatement:exit"] = findVariables; - - ruleDefinition["ArrowFunctionExpression:exit"] = function(node) { - if (node.body.type !== "BlockStatement") { - findVariables(); - } - }; - } else { - ruleDefinition["FunctionExpression:exit"] = - ruleDefinition["FunctionDeclaration:exit"] = - ruleDefinition["ArrowFunctionExpression:exit"] = findVariables; - } - - return ruleDefinition; - } -}; diff --git a/node_modules/eslint/lib/rules/no-useless-call.js b/node_modules/eslint/lib/rules/no-useless-call.js deleted file mode 100644 index 925c9f7..0000000 --- a/node_modules/eslint/lib/rules/no-useless-call.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @fileoverview A rule to disallow unnecessary `.call()` and `.apply()`. - * @author Toru Nagashima - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a node is a `.call()`/`.apply()`. - * @param {ASTNode} node - A CallExpression node to check. - * @returns {boolean} Whether or not the node is a `.call()`/`.apply()`. - */ -function isCallOrNonVariadicApply(node) { - return ( - node.callee.type === "MemberExpression" && - node.callee.property.type === "Identifier" && - node.callee.computed === false && - ( - (node.callee.property.name === "call" && node.arguments.length >= 1) || - (node.callee.property.name === "apply" && node.arguments.length === 2 && node.arguments[1].type === "ArrayExpression") - ) - ); -} - - -/** - * Checks whether or not `thisArg` is not changed by `.call()`/`.apply()`. - * @param {ASTNode|null} expectedThis - The node that is the owner of the applied function. - * @param {ASTNode} thisArg - The node that is given to the first argument of the `.call()`/`.apply()`. - * @param {SourceCode} sourceCode - The ESLint source code object. - * @returns {boolean} Whether or not `thisArg` is not changed by `.call()`/`.apply()`. - */ -function isValidThisArg(expectedThis, thisArg, sourceCode) { - if (!expectedThis) { - return astUtils.isNullOrUndefined(thisArg); - } - return astUtils.equalTokens(expectedThis, thisArg, sourceCode); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary calls to `.call()` and `.apply()`", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-useless-call" - }, - - schema: [] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - return { - CallExpression(node) { - if (!isCallOrNonVariadicApply(node)) { - return; - } - - const applied = node.callee.object; - const expectedThis = (applied.type === "MemberExpression") ? applied.object : null; - const thisArg = node.arguments[0]; - - if (isValidThisArg(expectedThis, thisArg, sourceCode)) { - context.report({ node, message: "unnecessary '.{{name}}()'.", data: { name: node.callee.property.name } }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-useless-computed-key.js b/node_modules/eslint/lib/rules/no-useless-computed-key.js deleted file mode 100644 index 0757307..0000000 --- a/node_modules/eslint/lib/rules/no-useless-computed-key.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * @fileoverview Rule to disallow unnecessary computed property keys in object literals - * @author Burak Yigit Kaya - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const MESSAGE_UNNECESSARY_COMPUTED = "Unnecessarily computed property [{{property}}] found."; - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary computed property keys in object literals", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/no-useless-computed-key" - }, - - schema: [], - - fixable: "code" - }, - create(context) { - const sourceCode = context.getSourceCode(); - - return { - Property(node) { - if (!node.computed) { - return; - } - - const key = node.key, - nodeType = typeof key.value; - - if (key.type === "Literal" && (nodeType === "string" || nodeType === "number") && key.value !== "__proto__") { - context.report({ - node, - message: MESSAGE_UNNECESSARY_COMPUTED, - data: { property: sourceCode.getText(key) }, - fix(fixer) { - const leftSquareBracket = sourceCode.getFirstToken(node, astUtils.isOpeningBracketToken); - const rightSquareBracket = sourceCode.getFirstTokenBetween(node.key, node.value, astUtils.isClosingBracketToken); - const tokensBetween = sourceCode.getTokensBetween(leftSquareBracket, rightSquareBracket, 1); - - if (tokensBetween.slice(0, -1).some((token, index) => - sourceCode.getText().slice(token.range[1], tokensBetween[index + 1].range[0]).trim())) { - - // If there are comments between the brackets and the property name, don't do a fix. - return null; - } - - const tokenBeforeLeftBracket = sourceCode.getTokenBefore(leftSquareBracket); - - // Insert a space before the key to avoid changing identifiers, e.g. ({ get[2]() {} }) to ({ get2() {} }) - const needsSpaceBeforeKey = tokenBeforeLeftBracket.range[1] === leftSquareBracket.range[0] && - !astUtils.canTokensBeAdjacent(tokenBeforeLeftBracket, sourceCode.getFirstToken(key)); - - const replacementKey = (needsSpaceBeforeKey ? " " : "") + key.raw; - - return fixer.replaceTextRange([leftSquareBracket.range[0], rightSquareBracket.range[1]], replacementKey); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-useless-concat.js b/node_modules/eslint/lib/rules/no-useless-concat.js deleted file mode 100644 index a9ac786..0000000 --- a/node_modules/eslint/lib/rules/no-useless-concat.js +++ /dev/null @@ -1,109 +0,0 @@ -/** - * @fileoverview disallow unncessary concatenation of template strings - * @author Henry Zhu - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a given node is a concatenation. - * @param {ASTNode} node - A node to check. - * @returns {boolean} `true` if the node is a concatenation. - */ -function isConcatenation(node) { - return node.type === "BinaryExpression" && node.operator === "+"; -} - -/** - * Checks if the given token is a `+` token or not. - * @param {Token} token - The token to check. - * @returns {boolean} `true` if the token is a `+` token. - */ -function isConcatOperatorToken(token) { - return token.value === "+" && token.type === "Punctuator"; -} - -/** - * Get's the right most node on the left side of a BinaryExpression with + operator. - * @param {ASTNode} node - A BinaryExpression node to check. - * @returns {ASTNode} node - */ -function getLeft(node) { - let left = node.left; - - while (isConcatenation(left)) { - left = left.right; - } - return left; -} - -/** - * Get's the left most node on the right side of a BinaryExpression with + operator. - * @param {ASTNode} node - A BinaryExpression node to check. - * @returns {ASTNode} node - */ -function getRight(node) { - let right = node.right; - - while (isConcatenation(right)) { - right = right.left; - } - return right; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary concatenation of literals or template literals", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-useless-concat" - }, - - schema: [] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - return { - BinaryExpression(node) { - - // check if not concatenation - if (node.operator !== "+") { - return; - } - - // account for the `foo + "a" + "b"` case - const left = getLeft(node); - const right = getRight(node); - - if (astUtils.isStringLiteral(left) && - astUtils.isStringLiteral(right) && - astUtils.isTokenOnSameLine(left, right) - ) { - const operatorToken = sourceCode.getFirstTokenBetween(left, right, isConcatOperatorToken); - - context.report({ - node, - loc: operatorToken.loc.start, - message: "Unexpected string concatenation of literals." - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-useless-constructor.js b/node_modules/eslint/lib/rules/no-useless-constructor.js deleted file mode 100644 index 59e40be..0000000 --- a/node_modules/eslint/lib/rules/no-useless-constructor.js +++ /dev/null @@ -1,183 +0,0 @@ -/** - * @fileoverview Rule to flag the use of redundant constructors in classes. - * @author Alberto Rodríguez - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether a given array of statements is a single call of `super`. - * - * @param {ASTNode[]} body - An array of statements to check. - * @returns {boolean} `true` if the body is a single call of `super`. - */ -function isSingleSuperCall(body) { - return ( - body.length === 1 && - body[0].type === "ExpressionStatement" && - body[0].expression.type === "CallExpression" && - body[0].expression.callee.type === "Super" - ); -} - -/** - * Checks whether a given node is a pattern which doesn't have any side effects. - * Default parameters and Destructuring parameters can have side effects. - * - * @param {ASTNode} node - A pattern node. - * @returns {boolean} `true` if the node doesn't have any side effects. - */ -function isSimple(node) { - return node.type === "Identifier" || node.type === "RestElement"; -} - -/** - * Checks whether a given array of expressions is `...arguments` or not. - * `super(...arguments)` passes all arguments through. - * - * @param {ASTNode[]} superArgs - An array of expressions to check. - * @returns {boolean} `true` if the superArgs is `...arguments`. - */ -function isSpreadArguments(superArgs) { - return ( - superArgs.length === 1 && - superArgs[0].type === "SpreadElement" && - superArgs[0].argument.type === "Identifier" && - superArgs[0].argument.name === "arguments" - ); -} - -/** - * Checks whether given 2 nodes are identifiers which have the same name or not. - * - * @param {ASTNode} ctorParam - A node to check. - * @param {ASTNode} superArg - A node to check. - * @returns {boolean} `true` if the nodes are identifiers which have the same - * name. - */ -function isValidIdentifierPair(ctorParam, superArg) { - return ( - ctorParam.type === "Identifier" && - superArg.type === "Identifier" && - ctorParam.name === superArg.name - ); -} - -/** - * Checks whether given 2 nodes are a rest/spread pair which has the same values. - * - * @param {ASTNode} ctorParam - A node to check. - * @param {ASTNode} superArg - A node to check. - * @returns {boolean} `true` if the nodes are a rest/spread pair which has the - * same values. - */ -function isValidRestSpreadPair(ctorParam, superArg) { - return ( - ctorParam.type === "RestElement" && - superArg.type === "SpreadElement" && - isValidIdentifierPair(ctorParam.argument, superArg.argument) - ); -} - -/** - * Checks whether given 2 nodes have the same value or not. - * - * @param {ASTNode} ctorParam - A node to check. - * @param {ASTNode} superArg - A node to check. - * @returns {boolean} `true` if the nodes have the same value or not. - */ -function isValidPair(ctorParam, superArg) { - return ( - isValidIdentifierPair(ctorParam, superArg) || - isValidRestSpreadPair(ctorParam, superArg) - ); -} - -/** - * Checks whether the parameters of a constructor and the arguments of `super()` - * have the same values or not. - * - * @param {ASTNode} ctorParams - The parameters of a constructor to check. - * @param {ASTNode} superArgs - The arguments of `super()` to check. - * @returns {boolean} `true` if those have the same values. - */ -function isPassingThrough(ctorParams, superArgs) { - if (ctorParams.length !== superArgs.length) { - return false; - } - - for (let i = 0; i < ctorParams.length; ++i) { - if (!isValidPair(ctorParams[i], superArgs[i])) { - return false; - } - } - - return true; -} - -/** - * Checks whether the constructor body is a redundant super call. - * - * @param {Array} body - constructor body content. - * @param {Array} ctorParams - The params to check against super call. - * @returns {boolean} true if the construtor body is redundant - */ -function isRedundantSuperCall(body, ctorParams) { - return ( - isSingleSuperCall(body) && - ctorParams.every(isSimple) && - ( - isSpreadArguments(body[0].expression.arguments) || - isPassingThrough(ctorParams, body[0].expression.arguments) - ) - ); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary constructors", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/no-useless-constructor" - }, - - schema: [] - }, - - create(context) { - - /** - * Checks whether a node is a redundant constructor - * @param {ASTNode} node - node to check - * @returns {void} - */ - function checkForConstructor(node) { - if (node.kind !== "constructor") { - return; - } - - const body = node.value.body.body; - const ctorParams = node.value.params; - const superClass = node.parent.parent.superClass; - - if (superClass ? isRedundantSuperCall(body, ctorParams) : (body.length === 0)) { - context.report({ - node, - message: "Useless constructor." - }); - } - } - - return { - MethodDefinition: checkForConstructor - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-useless-escape.js b/node_modules/eslint/lib/rules/no-useless-escape.js deleted file mode 100644 index efc9706..0000000 --- a/node_modules/eslint/lib/rules/no-useless-escape.js +++ /dev/null @@ -1,224 +0,0 @@ -/** - * @fileoverview Look for useless escapes in strings and regexes - * @author Onur Temizkan - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -/** - * Returns the union of two sets. - * @param {Set} setA The first set - * @param {Set} setB The second set - * @returns {Set} The union of the two sets - */ -function union(setA, setB) { - return new Set(function *() { - yield* setA; - yield* setB; - }()); -} - -const VALID_STRING_ESCAPES = union(new Set("\\nrvtbfux"), astUtils.LINEBREAKS); -const REGEX_GENERAL_ESCAPES = new Set("\\bcdDfnpPrsStvwWxu0123456789]"); -const REGEX_NON_CHARCLASS_ESCAPES = union(REGEX_GENERAL_ESCAPES, new Set("^/.$*+?[{}|()Bk")); - -/** - * Parses a regular expression into a list of characters with character class info. - * @param {string} regExpText The raw text used to create the regular expression - * @returns {Object[]} A list of characters, each with info on escaping and whether they're in a character class. - * @example - * - * parseRegExp('a\\b[cd-]') - * - * returns: - * [ - * {text: 'a', index: 0, escaped: false, inCharClass: false, startsCharClass: false, endsCharClass: false}, - * {text: 'b', index: 2, escaped: true, inCharClass: false, startsCharClass: false, endsCharClass: false}, - * {text: 'c', index: 4, escaped: false, inCharClass: true, startsCharClass: true, endsCharClass: false}, - * {text: 'd', index: 5, escaped: false, inCharClass: true, startsCharClass: false, endsCharClass: false}, - * {text: '-', index: 6, escaped: false, inCharClass: true, startsCharClass: false, endsCharClass: false} - * ] - */ -function parseRegExp(regExpText) { - const charList = []; - - regExpText.split("").reduce((state, char, index) => { - if (!state.escapeNextChar) { - if (char === "\\") { - return Object.assign(state, { escapeNextChar: true }); - } - if (char === "[" && !state.inCharClass) { - return Object.assign(state, { inCharClass: true, startingCharClass: true }); - } - if (char === "]" && state.inCharClass) { - if (charList.length && charList[charList.length - 1].inCharClass) { - charList[charList.length - 1].endsCharClass = true; - } - return Object.assign(state, { inCharClass: false, startingCharClass: false }); - } - } - charList.push({ - text: char, - index, - escaped: state.escapeNextChar, - inCharClass: state.inCharClass, - startsCharClass: state.startingCharClass, - endsCharClass: false - }); - return Object.assign(state, { escapeNextChar: false, startingCharClass: false }); - }, { escapeNextChar: false, inCharClass: false, startingCharClass: false }); - - return charList; -} - -module.exports = { - meta: { - docs: { - description: "disallow unnecessary escape characters", - category: "Best Practices", - recommended: true, - url: "https://eslint.org/docs/rules/no-useless-escape" - }, - - schema: [] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - /** - * Reports a node - * @param {ASTNode} node The node to report - * @param {number} startOffset The backslash's offset from the start of the node - * @param {string} character The uselessly escaped character (not including the backslash) - * @returns {void} - */ - function report(node, startOffset, character) { - context.report({ - node, - loc: sourceCode.getLocFromIndex(sourceCode.getIndexFromLoc(node.loc.start) + startOffset), - message: "Unnecessary escape character: \\{{character}}.", - data: { character } - }); - } - - /** - * Checks if the escape character in given string slice is unnecessary. - * - * @private - * @param {ASTNode} node - node to validate. - * @param {string} match - string slice to validate. - * @returns {void} - */ - function validateString(node, match) { - const isTemplateElement = node.type === "TemplateElement"; - const escapedChar = match[0][1]; - let isUnnecessaryEscape = !VALID_STRING_ESCAPES.has(escapedChar); - let isQuoteEscape; - - if (isTemplateElement) { - isQuoteEscape = escapedChar === "`"; - - if (escapedChar === "$") { - - // Warn if `\$` is not followed by `{` - isUnnecessaryEscape = match.input[match.index + 2] !== "{"; - } else if (escapedChar === "{") { - - /* - * Warn if `\{` is not preceded by `$`. If preceded by `$`, escaping - * is necessary and the rule should not warn. If preceded by `/$`, the rule - * will warn for the `/$` instead, as it is the first unnecessarily escaped character. - */ - isUnnecessaryEscape = match.input[match.index - 1] !== "$"; - } - } else { - isQuoteEscape = escapedChar === node.raw[0]; - } - - if (isUnnecessaryEscape && !isQuoteEscape) { - report(node, match.index + 1, match[0].slice(1)); - } - } - - /** - * Checks if a node has an escape. - * - * @param {ASTNode} node - node to check. - * @returns {void} - */ - function check(node) { - const isTemplateElement = node.type === "TemplateElement"; - - if ( - isTemplateElement && - node.parent && - node.parent.parent && - node.parent.parent.type === "TaggedTemplateExpression" && - node.parent === node.parent.parent.quasi - ) { - - // Don't report tagged template literals, because the backslash character is accessible to the tag function. - return; - } - - if (typeof node.value === "string" || isTemplateElement) { - - /* - * JSXAttribute doesn't have any escape sequence: https://facebook.github.io/jsx/. - * In addition, backticks are not supported by JSX yet: https://github.com/facebook/jsx/issues/25. - */ - if (node.parent.type === "JSXAttribute" || node.parent.type === "JSXElement") { - return; - } - - const value = isTemplateElement ? node.value.raw : node.raw.slice(1, -1); - const pattern = /\\[^\d]/g; - let match; - - while ((match = pattern.exec(value))) { - validateString(node, match); - } - } else if (node.regex) { - parseRegExp(node.regex.pattern) - - /* - * The '-' character is a special case, because it's only valid to escape it if it's in a character - * class, and is not at either edge of the character class. To account for this, don't consider '-' - * characters to be valid in general, and filter out '-' characters that appear in the middle of a - * character class. - */ - .filter(charInfo => !(charInfo.text === "-" && charInfo.inCharClass && !charInfo.startsCharClass && !charInfo.endsCharClass)) - - /* - * The '^' character is also a special case; it must always be escaped outside of character classes, but - * it only needs to be escaped in character classes if it's at the beginning of the character class. To - * account for this, consider it to be a valid escape character outside of character classes, and filter - * out '^' characters that appear at the start of a character class. - */ - .filter(charInfo => !(charInfo.text === "^" && charInfo.startsCharClass)) - - // Filter out characters that aren't escaped. - .filter(charInfo => charInfo.escaped) - - // Filter out characters that are valid to escape, based on their position in the regular expression. - .filter(charInfo => !(charInfo.inCharClass ? REGEX_GENERAL_ESCAPES : REGEX_NON_CHARCLASS_ESCAPES).has(charInfo.text)) - - // Report all the remaining characters. - .forEach(charInfo => report(node, charInfo.index, charInfo.text)); - } - - } - - return { - Literal: check, - TemplateElement: check - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-useless-rename.js b/node_modules/eslint/lib/rules/no-useless-rename.js deleted file mode 100644 index 83a03de..0000000 --- a/node_modules/eslint/lib/rules/no-useless-rename.js +++ /dev/null @@ -1,148 +0,0 @@ -/** - * @fileoverview Disallow renaming import, export, and destructured assignments to the same name. - * @author Kai Cataldo - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow renaming import, export, and destructured assignments to the same name", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/no-useless-rename" - }, - fixable: "code", - schema: [ - { - type: "object", - properties: { - ignoreDestructuring: { type: "boolean" }, - ignoreImport: { type: "boolean" }, - ignoreExport: { type: "boolean" } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const options = context.options[0] || {}, - ignoreDestructuring = options.ignoreDestructuring === true, - ignoreImport = options.ignoreImport === true, - ignoreExport = options.ignoreExport === true; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Reports error for unnecessarily renamed assignments - * @param {ASTNode} node - node to report - * @param {ASTNode} initial - node with initial name value - * @param {ASTNode} result - node with new name value - * @param {string} type - the type of the offending node - * @returns {void} - */ - function reportError(node, initial, result, type) { - const name = initial.type === "Identifier" ? initial.name : initial.value; - - return context.report({ - node, - message: "{{type}} {{name}} unnecessarily renamed.", - data: { - name, - type - }, - fix(fixer) { - return fixer.replaceTextRange([ - initial.range[0], - result.range[1] - ], name); - } - }); - } - - /** - * Checks whether a destructured assignment is unnecessarily renamed - * @param {ASTNode} node - node to check - * @returns {void} - */ - function checkDestructured(node) { - if (ignoreDestructuring) { - return; - } - - const properties = node.properties; - - for (let i = 0; i < properties.length; i++) { - if (properties[i].shorthand) { - continue; - } - - /** - * If an ObjectPattern property is computed, we have no idea - * if a rename is useless or not. If an ObjectPattern property - * lacks a key, it is likely an ExperimentalRestProperty and - * so there is no "renaming" occurring here. - */ - if (properties[i].computed || !properties[i].key) { - continue; - } - - if (properties[i].key.type === "Identifier" && properties[i].key.name === properties[i].value.name || - properties[i].key.type === "Literal" && properties[i].key.value === properties[i].value.name) { - reportError(properties[i], properties[i].key, properties[i].value, "Destructuring assignment"); - } - } - } - - /** - * Checks whether an import is unnecessarily renamed - * @param {ASTNode} node - node to check - * @returns {void} - */ - function checkImport(node) { - if (ignoreImport) { - return; - } - - if (node.imported.name === node.local.name && - node.imported.range[0] !== node.local.range[0]) { - reportError(node, node.imported, node.local, "Import"); - } - } - - /** - * Checks whether an export is unnecessarily renamed - * @param {ASTNode} node - node to check - * @returns {void} - */ - function checkExport(node) { - if (ignoreExport) { - return; - } - - if (node.local.name === node.exported.name && - node.local.range[0] !== node.exported.range[0]) { - reportError(node, node.local, node.exported, "Export"); - } - - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - ObjectPattern: checkDestructured, - ImportSpecifier: checkImport, - ExportSpecifier: checkExport - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-useless-return.js b/node_modules/eslint/lib/rules/no-useless-return.js deleted file mode 100644 index d801c0e..0000000 --- a/node_modules/eslint/lib/rules/no-useless-return.js +++ /dev/null @@ -1,306 +0,0 @@ -/** - * @fileoverview Disallow redundant return statements - * @author Teddy Katz - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"), - FixTracker = require("../util/fix-tracker"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Adds all elements of 2nd argument into 1st argument. - * - * @param {Array} array - The destination array to add. - * @param {Array} elements - The source array to add. - * @returns {void} - */ -const pushAll = Function.apply.bind(Array.prototype.push); - -/** - * Removes the given element from the array. - * - * @param {Array} array - The source array to remove. - * @param {any} element - The target item to remove. - * @returns {void} - */ -function remove(array, element) { - const index = array.indexOf(element); - - if (index !== -1) { - array.splice(index, 1); - } -} - -/** - * Checks whether it can remove the given return statement or not. - * - * @param {ASTNode} node - The return statement node to check. - * @returns {boolean} `true` if the node is removeable. - */ -function isRemovable(node) { - return astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type); -} - -/** - * Checks whether the given return statement is in a `finally` block or not. - * - * @param {ASTNode} node - The return statement node to check. - * @returns {boolean} `true` if the node is in a `finally` block. - */ -function isInFinally(node) { - for ( - let currentNode = node; - currentNode && currentNode.parent && !astUtils.isFunction(currentNode); - currentNode = currentNode.parent - ) { - if (currentNode.parent.type === "TryStatement" && currentNode.parent.finalizer === currentNode) { - return true; - } - } - - return false; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow redundant return statements", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-useless-return" - }, - fixable: "code", - schema: [] - }, - - create(context) { - const segmentInfoMap = new WeakMap(); - const usedUnreachableSegments = new WeakSet(); - let scopeInfo = null; - - /** - * Checks whether the given segment is terminated by a return statement or not. - * - * @param {CodePathSegment} segment - The segment to check. - * @returns {boolean} `true` if the segment is terminated by a return statement, or if it's still a part of unreachable. - */ - function isReturned(segment) { - const info = segmentInfoMap.get(segment); - - return !info || info.returned; - } - - /** - * Collects useless return statements from the given previous segments. - * - * A previous segment may be an unreachable segment. - * In that case, the information object of the unreachable segment is not - * initialized because `onCodePathSegmentStart` event is not notified for - * unreachable segments. - * This goes to the previous segments of the unreachable segment recursively - * if the unreachable segment was generated by a return statement. Otherwise, - * this ignores the unreachable segment. - * - * This behavior would simulate code paths for the case that the return - * statement does not exist. - * - * @param {ASTNode[]} uselessReturns - The collected return statements. - * @param {CodePathSegment[]} prevSegments - The previous segments to traverse. - * @param {WeakSet} [providedTraversedSegments] A set of segments that have already been traversed in this call - * @returns {ASTNode[]} `uselessReturns`. - */ - function getUselessReturns(uselessReturns, prevSegments, providedTraversedSegments) { - const traversedSegments = providedTraversedSegments || new WeakSet(); - - for (const segment of prevSegments) { - if (!segment.reachable) { - if (!traversedSegments.has(segment)) { - traversedSegments.add(segment); - getUselessReturns( - uselessReturns, - segment.allPrevSegments.filter(isReturned), - traversedSegments - ); - } - continue; - } - - pushAll(uselessReturns, segmentInfoMap.get(segment).uselessReturns); - } - - return uselessReturns; - } - - /** - * Removes the return statements on the given segment from the useless return - * statement list. - * - * This segment may be an unreachable segment. - * In that case, the information object of the unreachable segment is not - * initialized because `onCodePathSegmentStart` event is not notified for - * unreachable segments. - * This goes to the previous segments of the unreachable segment recursively - * if the unreachable segment was generated by a return statement. Otherwise, - * this ignores the unreachable segment. - * - * This behavior would simulate code paths for the case that the return - * statement does not exist. - * - * @param {CodePathSegment} segment - The segment to get return statements. - * @returns {void} - */ - function markReturnStatementsOnSegmentAsUsed(segment) { - if (!segment.reachable) { - usedUnreachableSegments.add(segment); - segment.allPrevSegments - .filter(isReturned) - .filter(prevSegment => !usedUnreachableSegments.has(prevSegment)) - .forEach(markReturnStatementsOnSegmentAsUsed); - return; - } - - const info = segmentInfoMap.get(segment); - - for (const node of info.uselessReturns) { - remove(scopeInfo.uselessReturns, node); - } - info.uselessReturns = []; - } - - /** - * Removes the return statements on the current segments from the useless - * return statement list. - * - * This function will be called at every statement except FunctionDeclaration, - * BlockStatement, and BreakStatement. - * - * - FunctionDeclarations are always executed whether it's returned or not. - * - BlockStatements do nothing. - * - BreakStatements go the next merely. - * - * @returns {void} - */ - function markReturnStatementsOnCurrentSegmentsAsUsed() { - scopeInfo - .codePath - .currentSegments - .forEach(markReturnStatementsOnSegmentAsUsed); - } - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- - - return { - - // Makes and pushs a new scope information. - onCodePathStart(codePath) { - scopeInfo = { - upper: scopeInfo, - uselessReturns: [], - codePath - }; - }, - - // Reports useless return statements if exist. - onCodePathEnd() { - for (const node of scopeInfo.uselessReturns) { - context.report({ - node, - loc: node.loc, - message: "Unnecessary return statement.", - fix(fixer) { - if (isRemovable(node)) { - - /* - * Extend the replacement range to include the - * entire function to avoid conflicting with - * no-else-return. - * https://github.com/eslint/eslint/issues/8026 - */ - return new FixTracker(fixer, context.getSourceCode()) - .retainEnclosingFunction(node) - .remove(node); - } - return null; - } - }); - } - - scopeInfo = scopeInfo.upper; - }, - - /* - * Initializes segments. - * NOTE: This event is notified for only reachable segments. - */ - onCodePathSegmentStart(segment) { - const info = { - uselessReturns: getUselessReturns([], segment.allPrevSegments), - returned: false - }; - - // Stores the info. - segmentInfoMap.set(segment, info); - }, - - // Adds ReturnStatement node to check whether it's useless or not. - ReturnStatement(node) { - if (node.argument) { - markReturnStatementsOnCurrentSegmentsAsUsed(); - } - if (node.argument || astUtils.isInLoop(node) || isInFinally(node)) { - return; - } - - for (const segment of scopeInfo.codePath.currentSegments) { - const info = segmentInfoMap.get(segment); - - if (info) { - info.uselessReturns.push(node); - info.returned = true; - } - } - scopeInfo.uselessReturns.push(node); - }, - - /* - * Registers for all statement nodes except FunctionDeclaration, BlockStatement, BreakStatement. - * Removes return statements of the current segments from the useless return statement list. - */ - ClassDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed, - ContinueStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - DebuggerStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - DoWhileStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - EmptyStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - ExpressionStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - ForInStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - ForOfStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - ForStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - IfStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - ImportDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed, - LabeledStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - SwitchStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - ThrowStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - TryStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - VariableDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed, - WhileStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - WithStatement: markReturnStatementsOnCurrentSegmentsAsUsed, - ExportNamedDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed, - ExportDefaultDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed, - ExportAllDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-var.js b/node_modules/eslint/lib/rules/no-var.js deleted file mode 100644 index 5ca868e..0000000 --- a/node_modules/eslint/lib/rules/no-var.js +++ /dev/null @@ -1,329 +0,0 @@ -/** - * @fileoverview Rule to check for the usage of var. - * @author Jamund Ferguson - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Check whether a given variable is a global variable or not. - * @param {eslint-scope.Variable} variable The variable to check. - * @returns {boolean} `true` if the variable is a global variable. - */ -function isGlobal(variable) { - return Boolean(variable.scope) && variable.scope.type === "global"; -} - -/** - * Finds the nearest function scope or global scope walking up the scope - * hierarchy. - * - * @param {eslint-scope.Scope} scope - The scope to traverse. - * @returns {eslint-scope.Scope} a function scope or global scope containing the given - * scope. - */ -function getEnclosingFunctionScope(scope) { - let currentScope = scope; - - while (currentScope.type !== "function" && currentScope.type !== "global") { - currentScope = currentScope.upper; - } - return currentScope; -} - -/** - * Checks whether the given variable has any references from a more specific - * function expression (i.e. a closure). - * - * @param {eslint-scope.Variable} variable - A variable to check. - * @returns {boolean} `true` if the variable is used from a closure. - */ -function isReferencedInClosure(variable) { - const enclosingFunctionScope = getEnclosingFunctionScope(variable.scope); - - return variable.references.some(reference => - getEnclosingFunctionScope(reference.from) !== enclosingFunctionScope); -} - -/** - * Checks whether the given node is the assignee of a loop. - * - * @param {ASTNode} node - A VariableDeclaration node to check. - * @returns {boolean} `true` if the declaration is assigned as part of loop - * iteration. - */ -function isLoopAssignee(node) { - return (node.parent.type === "ForOfStatement" || node.parent.type === "ForInStatement") && - node === node.parent.left; -} - -/** - * Checks whether the given variable declaration is immediately initialized. - * - * @param {ASTNode} node - A VariableDeclaration node to check. - * @returns {boolean} `true` if the declaration has an initializer. - */ -function isDeclarationInitialized(node) { - return node.declarations.every(declarator => declarator.init !== null); -} - -const SCOPE_NODE_TYPE = /^(?:Program|BlockStatement|SwitchStatement|ForStatement|ForInStatement|ForOfStatement)$/; - -/** - * Gets the scope node which directly contains a given node. - * - * @param {ASTNode} node - A node to get. This is a `VariableDeclaration` or - * an `Identifier`. - * @returns {ASTNode} A scope node. This is one of `Program`, `BlockStatement`, - * `SwitchStatement`, `ForStatement`, `ForInStatement`, and - * `ForOfStatement`. - */ -function getScopeNode(node) { - for (let currentNode = node; currentNode; currentNode = currentNode.parent) { - if (SCOPE_NODE_TYPE.test(currentNode.type)) { - return currentNode; - } - } - - /* istanbul ignore next : unreachable */ - return null; -} - -/** - * Checks whether a given variable is redeclared or not. - * - * @param {eslint-scope.Variable} variable - A variable to check. - * @returns {boolean} `true` if the variable is redeclared. - */ -function isRedeclared(variable) { - return variable.defs.length >= 2; -} - -/** - * Checks whether a given variable is used from outside of the specified scope. - * - * @param {ASTNode} scopeNode - A scope node to check. - * @returns {Function} The predicate function which checks whether a given - * variable is used from outside of the specified scope. - */ -function isUsedFromOutsideOf(scopeNode) { - - /** - * Checks whether a given reference is inside of the specified scope or not. - * - * @param {eslint-scope.Reference} reference - A reference to check. - * @returns {boolean} `true` if the reference is inside of the specified - * scope. - */ - function isOutsideOfScope(reference) { - const scope = scopeNode.range; - const id = reference.identifier.range; - - return id[0] < scope[0] || id[1] > scope[1]; - } - - return function(variable) { - return variable.references.some(isOutsideOfScope); - }; -} - -/** - * Creates the predicate function which checks whether a variable has their references in TDZ. - * - * The predicate function would return `true`: - * - * - if a reference is before the declarator. E.g. (var a = b, b = 1;)(var {a = b, b} = {};) - * - if a reference is in the expression of their default value. E.g. (var {a = a} = {};) - * - if a reference is in the expression of their initializer. E.g. (var a = a;) - * - * @param {ASTNode} node - The initializer node of VariableDeclarator. - * @returns {Function} The predicate function. - * @private - */ -function hasReferenceInTDZ(node) { - const initStart = node.range[0]; - const initEnd = node.range[1]; - - return variable => { - const id = variable.defs[0].name; - const idStart = id.range[0]; - const defaultValue = (id.parent.type === "AssignmentPattern" ? id.parent.right : null); - const defaultStart = defaultValue && defaultValue.range[0]; - const defaultEnd = defaultValue && defaultValue.range[1]; - - return variable.references.some(reference => { - const start = reference.identifier.range[0]; - const end = reference.identifier.range[1]; - - return !reference.init && ( - start < idStart || - (defaultValue !== null && start >= defaultStart && end <= defaultEnd) || - (start >= initStart && end <= initEnd) - ); - }); - }; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require `let` or `const` instead of `var`", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/no-var" - }, - - schema: [], - fixable: "code" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - /** - * Checks whether the variables which are defined by the given declarator node have their references in TDZ. - * - * @param {ASTNode} declarator - The VariableDeclarator node to check. - * @returns {boolean} `true` if one of the variables which are defined by the given declarator node have their references in TDZ. - */ - function hasSelfReferenceInTDZ(declarator) { - if (!declarator.init) { - return false; - } - const variables = context.getDeclaredVariables(declarator); - - return variables.some(hasReferenceInTDZ(declarator.init)); - } - - /** - * Checks whether it can fix a given variable declaration or not. - * It cannot fix if the following cases: - * - * - A variable is a global variable. - * - A variable is declared on a SwitchCase node. - * - A variable is redeclared. - * - A variable is used from outside the scope. - * - A variable is used from a closure within a loop. - * - A variable might be used before it is assigned within a loop. - * - A variable might be used in TDZ. - * - A variable is declared in statement position (e.g. a single-line `IfStatement`) - * - * ## A variable is declared on a SwitchCase node. - * - * If this rule modifies 'var' declarations on a SwitchCase node, it - * would generate the warnings of 'no-case-declarations' rule. And the - * 'eslint:recommended' preset includes 'no-case-declarations' rule, so - * this rule doesn't modify those declarations. - * - * ## A variable is redeclared. - * - * The language spec disallows redeclarations of `let` declarations. - * Those variables would cause syntax errors. - * - * ## A variable is used from outside the scope. - * - * The language spec disallows accesses from outside of the scope for - * `let` declarations. Those variables would cause reference errors. - * - * ## A variable is used from a closure within a loop. - * - * A `var` declaration within a loop shares the same variable instance - * across all loop iterations, while a `let` declaration creates a new - * instance for each iteration. This means if a variable in a loop is - * referenced by any closure, changing it from `var` to `let` would - * change the behavior in a way that is generally unsafe. - * - * ## A variable might be used before it is assigned within a loop. - * - * Within a loop, a `let` declaration without an initializer will be - * initialized to null, while a `var` declaration will retain its value - * from the previous iteration, so it is only safe to change `var` to - * `let` if we can statically determine that the variable is always - * assigned a value before its first access in the loop body. To keep - * the implementation simple, we only convert `var` to `let` within - * loops when the variable is a loop assignee or the declaration has an - * initializer. - * - * @param {ASTNode} node - A variable declaration node to check. - * @returns {boolean} `true` if it can fix the node. - */ - function canFix(node) { - const variables = context.getDeclaredVariables(node); - const scopeNode = getScopeNode(node); - - if (node.parent.type === "SwitchCase" || - node.declarations.some(hasSelfReferenceInTDZ) || - variables.some(isGlobal) || - variables.some(isRedeclared) || - variables.some(isUsedFromOutsideOf(scopeNode)) - ) { - return false; - } - - if (astUtils.isInLoop(node)) { - if (variables.some(isReferencedInClosure)) { - return false; - } - if (!isLoopAssignee(node) && !isDeclarationInitialized(node)) { - return false; - } - } - - if ( - !isLoopAssignee(node) && - !(node.parent.type === "ForStatement" && node.parent.init === node) && - !astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type) - ) { - - // If the declaration is not in a block, e.g. `if (foo) var bar = 1;`, then it can't be fixed. - return false; - } - - return true; - } - - /** - * Reports a given variable declaration node. - * - * @param {ASTNode} node - A variable declaration node to report. - * @returns {void} - */ - function report(node) { - const varToken = sourceCode.getFirstToken(node); - - context.report({ - node, - message: "Unexpected var, use let or const instead.", - - fix(fixer) { - if (canFix(node)) { - return fixer.replaceText(varToken, "let"); - } - return null; - } - }); - } - - return { - "VariableDeclaration:exit"(node) { - if (node.kind === "var") { - report(node); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-void.js b/node_modules/eslint/lib/rules/no-void.js deleted file mode 100644 index 1d3d887..0000000 --- a/node_modules/eslint/lib/rules/no-void.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @fileoverview Rule to disallow use of void operator. - * @author Mike Sidorov - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `void` operators", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-void" - }, - - schema: [] - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - UnaryExpression(node) { - if (node.operator === "void") { - context.report({ node, message: "Expected 'undefined' and instead saw 'void'." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/no-warning-comments.js b/node_modules/eslint/lib/rules/no-warning-comments.js deleted file mode 100644 index ce58f9a..0000000 --- a/node_modules/eslint/lib/rules/no-warning-comments.js +++ /dev/null @@ -1,140 +0,0 @@ -/** - * @fileoverview Rule that warns about used warning comments - * @author Alexander Schmidt - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow specified warning terms in comments", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-warning-comments" - }, - - schema: [ - { - type: "object", - properties: { - terms: { - type: "array", - items: { - type: "string" - } - }, - location: { - enum: ["start", "anywhere"] - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const sourceCode = context.getSourceCode(), - configuration = context.options[0] || {}, - warningTerms = configuration.terms || ["todo", "fixme", "xxx"], - location = configuration.location || "start", - selfConfigRegEx = /\bno-warning-comments\b/; - - /** - * Convert a warning term into a RegExp which will match a comment containing that whole word in the specified - * location ("start" or "anywhere"). If the term starts or ends with non word characters, then the match will not - * require word boundaries on that side. - * - * @param {string} term A term to convert to a RegExp - * @returns {RegExp} The term converted to a RegExp - */ - function convertToRegExp(term) { - const escaped = term.replace(/[-/\\$^*+?.()|[\]{}]/g, "\\$&"); - let prefix; - - /* - * If the term ends in a word character (a-z0-9_), ensure a word - * boundary at the end, so that substrings do not get falsely - * matched. eg "todo" in a string such as "mastodon". - * If the term ends in a non-word character, then \b won't match on - * the boundary to the next non-word character, which would likely - * be a space. For example `/\bFIX!\b/.test('FIX! blah') === false`. - * In these cases, use no bounding match. Same applies for the - * prefix, handled below. - */ - const suffix = /\w$/.test(term) ? "\\b" : ""; - - if (location === "start") { - - /* - * When matching at the start, ignore leading whitespace, and - * there's no need to worry about word boundaries. - */ - prefix = "^\\s*"; - } else if (/^\w/.test(term)) { - prefix = "\\b"; - } else { - prefix = ""; - } - - return new RegExp(prefix + escaped + suffix, "i"); - } - - const warningRegExps = warningTerms.map(convertToRegExp); - - /** - * Checks the specified comment for matches of the configured warning terms and returns the matches. - * @param {string} comment The comment which is checked. - * @returns {Array} All matched warning terms for this comment. - */ - function commentContainsWarningTerm(comment) { - const matches = []; - - warningRegExps.forEach((regex, index) => { - if (regex.test(comment)) { - matches.push(warningTerms[index]); - } - }); - - return matches; - } - - /** - * Checks the specified node for matching warning comments and reports them. - * @param {ASTNode} node The AST node being checked. - * @returns {void} undefined. - */ - function checkComment(node) { - if (astUtils.isDirectiveComment(node) && selfConfigRegEx.test(node.value)) { - return; - } - - const matches = commentContainsWarningTerm(node.value); - - matches.forEach(matchedTerm => { - context.report({ - node, - message: "Unexpected '{{matchedTerm}}' comment.", - data: { - matchedTerm - } - }); - }); - } - - return { - Program() { - const comments = sourceCode.getAllComments(); - - comments.filter(token => token.type !== "Shebang").forEach(checkComment); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-whitespace-before-property.js b/node_modules/eslint/lib/rules/no-whitespace-before-property.js deleted file mode 100644 index fc4c25f..0000000 --- a/node_modules/eslint/lib/rules/no-whitespace-before-property.js +++ /dev/null @@ -1,95 +0,0 @@ -/** - * @fileoverview Rule to disallow whitespace before properties - * @author Kai Cataldo - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow whitespace before properties", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/no-whitespace-before-property" - }, - - fixable: "whitespace", - schema: [] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Reports whitespace before property token - * @param {ASTNode} node - the node to report in the event of an error - * @param {Token} leftToken - the left token - * @param {Token} rightToken - the right token - * @returns {void} - * @private - */ - function reportError(node, leftToken, rightToken) { - const replacementText = node.computed ? "" : "."; - - context.report({ - node, - message: "Unexpected whitespace before property {{propName}}.", - data: { - propName: sourceCode.getText(node.property) - }, - fix(fixer) { - if (!node.computed && astUtils.isDecimalInteger(node.object)) { - - /* - * If the object is a number literal, fixing it to something like 5.toString() would cause a SyntaxError. - * Don't fix this case. - */ - return null; - } - return fixer.replaceTextRange([leftToken.range[1], rightToken.range[0]], replacementText); - } - }); - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - MemberExpression(node) { - let rightToken; - let leftToken; - - if (!astUtils.isTokenOnSameLine(node.object, node.property)) { - return; - } - - if (node.computed) { - rightToken = sourceCode.getTokenBefore(node.property, astUtils.isOpeningBracketToken); - leftToken = sourceCode.getTokenBefore(rightToken); - } else { - rightToken = sourceCode.getFirstToken(node.property); - leftToken = sourceCode.getTokenBefore(rightToken, 1); - } - - if (sourceCode.isSpaceBetweenTokens(leftToken, rightToken)) { - reportError(node, leftToken, rightToken); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/no-with.js b/node_modules/eslint/lib/rules/no-with.js deleted file mode 100644 index d72dcdf..0000000 --- a/node_modules/eslint/lib/rules/no-with.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @fileoverview Rule to flag use of with statement - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `with` statements", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/no-with" - }, - - schema: [] - }, - - create(context) { - - return { - WithStatement(node) { - context.report({ node, message: "Unexpected use of 'with' statement." }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/nonblock-statement-body-position.js b/node_modules/eslint/lib/rules/nonblock-statement-body-position.js deleted file mode 100644 index e447ef8..0000000 --- a/node_modules/eslint/lib/rules/nonblock-statement-body-position.js +++ /dev/null @@ -1,115 +0,0 @@ -/** - * @fileoverview enforce the location of single-line statements - * @author Teddy Katz - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const POSITION_SCHEMA = { enum: ["beside", "below", "any"] }; - -module.exports = { - meta: { - docs: { - description: "enforce the location of single-line statements", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/nonblock-statement-body-position" - }, - fixable: "whitespace", - schema: [ - POSITION_SCHEMA, - { - properties: { - overrides: { - properties: { - if: POSITION_SCHEMA, - else: POSITION_SCHEMA, - while: POSITION_SCHEMA, - do: POSITION_SCHEMA, - for: POSITION_SCHEMA - }, - additionalProperties: false - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - //---------------------------------------------------------------------- - // Helpers - //---------------------------------------------------------------------- - - /** - * Gets the applicable preference for a particular keyword - * @param {string} keywordName The name of a keyword, e.g. 'if' - * @returns {string} The applicable option for the keyword, e.g. 'beside' - */ - function getOption(keywordName) { - return context.options[1] && context.options[1].overrides && context.options[1].overrides[keywordName] || - context.options[0] || - "beside"; - } - - /** - * Validates the location of a single-line statement - * @param {ASTNode} node The single-line statement - * @param {string} keywordName The applicable keyword name for the single-line statement - * @returns {void} - */ - function validateStatement(node, keywordName) { - const option = getOption(keywordName); - - if (node.type === "BlockStatement" || option === "any") { - return; - } - - const tokenBefore = sourceCode.getTokenBefore(node); - - if (tokenBefore.loc.end.line === node.loc.start.line && option === "below") { - context.report({ - node, - message: "Expected a linebreak before this statement.", - fix: fixer => fixer.insertTextBefore(node, "\n") - }); - } else if (tokenBefore.loc.end.line !== node.loc.start.line && option === "beside") { - context.report({ - node, - message: "Expected no linebreak before this statement.", - fix(fixer) { - if (sourceCode.getText().slice(tokenBefore.range[1], node.range[0]).trim()) { - return null; - } - return fixer.replaceTextRange([tokenBefore.range[1], node.range[0]], " "); - } - }); - } - } - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- - - return { - IfStatement(node) { - validateStatement(node.consequent, "if"); - - // Check the `else` node, but don't check 'else if' statements. - if (node.alternate && node.alternate.type !== "IfStatement") { - validateStatement(node.alternate, "else"); - } - }, - WhileStatement: node => validateStatement(node.body, "while"), - DoWhileStatement: node => validateStatement(node.body, "do"), - ForStatement: node => validateStatement(node.body, "for"), - ForInStatement: node => validateStatement(node.body, "for"), - ForOfStatement: node => validateStatement(node.body, "for") - }; - } -}; diff --git a/node_modules/eslint/lib/rules/object-curly-newline.js b/node_modules/eslint/lib/rules/object-curly-newline.js deleted file mode 100644 index 39043a8..0000000 --- a/node_modules/eslint/lib/rules/object-curly-newline.js +++ /dev/null @@ -1,299 +0,0 @@ -/** - * @fileoverview Rule to require or disallow line breaks inside braces. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); -const lodash = require("lodash"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -// Schema objects. -const OPTION_VALUE = { - oneOf: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - multiline: { - type: "boolean" - }, - minProperties: { - type: "integer", - minimum: 0 - }, - consistent: { - type: "boolean" - } - }, - additionalProperties: false, - minProperties: 1 - } - ] -}; - -/** - * Normalizes a given option value. - * - * @param {string|Object|undefined} value - An option value to parse. - * @returns {{multiline: boolean, minProperties: number, consistent: boolean}} Normalized option object. - */ -function normalizeOptionValue(value) { - let multiline = false; - let minProperties = Number.POSITIVE_INFINITY; - let consistent = false; - - if (value) { - if (value === "always") { - minProperties = 0; - } else if (value === "never") { - minProperties = Number.POSITIVE_INFINITY; - } else { - multiline = Boolean(value.multiline); - minProperties = value.minProperties || Number.POSITIVE_INFINITY; - consistent = Boolean(value.consistent); - } - } else { - multiline = true; - } - - return { multiline, minProperties, consistent }; -} - -/** - * Normalizes a given option value. - * - * @param {string|Object|undefined} options - An option value to parse. - * @returns {{ - * ObjectExpression: {multiline: boolean, minProperties: number, consistent: boolean}, - * ObjectPattern: {multiline: boolean, minProperties: number, consistent: boolean}, - * ImportDeclaration: {multiline: boolean, minProperties: number, consistent: boolean}, - * ExportNamedDeclaration : {multiline: boolean, minProperties: number, consistent: boolean} - * }} Normalized option object. - */ -function normalizeOptions(options) { - const isNodeSpecificOption = lodash.overSome([lodash.isPlainObject, lodash.isString]); - - if (lodash.isPlainObject(options) && lodash.some(options, isNodeSpecificOption)) { - return { - ObjectExpression: normalizeOptionValue(options.ObjectExpression), - ObjectPattern: normalizeOptionValue(options.ObjectPattern), - ImportDeclaration: normalizeOptionValue(options.ImportDeclaration), - ExportNamedDeclaration: normalizeOptionValue(options.ExportDeclaration) - }; - } - - const value = normalizeOptionValue(options); - - return { ObjectExpression: value, ObjectPattern: value, ImportDeclaration: value, ExportNamedDeclaration: value }; -} - -/** - * Determines if ObjectExpression, ObjectPattern, ImportDeclaration or ExportNamedDeclaration - * node needs to be checked for missing line breaks - * - * @param {ASTNode} node - Node under inspection - * @param {Object} options - option specific to node type - * @param {Token} first - First object property - * @param {Token} last - Last object property - * @returns {boolean} `true` if node needs to be checked for missing line breaks - */ -function areLineBreaksRequired(node, options, first, last) { - let objectProperties; - - if (node.type === "ObjectExpression" || node.type === "ObjectPattern") { - objectProperties = node.properties; - } else { - - // is ImportDeclaration or ExportNamedDeclaration - objectProperties = node.specifiers - .filter(s => s.type === "ImportSpecifier" || s.type === "ExportSpecifier"); - } - - return objectProperties.length >= options.minProperties || - ( - options.multiline && - objectProperties.length > 0 && - first.loc.start.line !== last.loc.end.line - ); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent line breaks inside braces", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/object-curly-newline" - }, - fixable: "whitespace", - schema: [ - { - oneOf: [ - OPTION_VALUE, - { - type: "object", - properties: { - ObjectExpression: OPTION_VALUE, - ObjectPattern: OPTION_VALUE, - ImportDeclaration: OPTION_VALUE, - ExportDeclaration: OPTION_VALUE - }, - additionalProperties: false, - minProperties: 1 - } - ] - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const normalizedOptions = normalizeOptions(context.options[0]); - - /** - * Reports a given node if it violated this rule. - * @param {ASTNode} node - A node to check. This is an ObjectExpression, ObjectPattern, ImportDeclaration or ExportNamedDeclaration node. - * @param {{multiline: boolean, minProperties: number, consistent: boolean}} options - An option object. - * @returns {void} - */ - function check(node) { - const options = normalizedOptions[node.type]; - - if ( - (node.type === "ImportDeclaration" && - !node.specifiers.some(specifier => specifier.type === "ImportSpecifier")) || - (node.type === "ExportNamedDeclaration" && - !node.specifiers.some(specifier => specifier.type === "ExportSpecifier")) - ) { - return; - } - - const openBrace = sourceCode.getFirstToken(node, token => token.value === "{"); - - let closeBrace; - - if (node.typeAnnotation) { - closeBrace = sourceCode.getTokenBefore(node.typeAnnotation); - } else { - closeBrace = sourceCode.getLastToken(node, token => token.value === "}"); - } - - let first = sourceCode.getTokenAfter(openBrace, { includeComments: true }); - let last = sourceCode.getTokenBefore(closeBrace, { includeComments: true }); - - const needsLineBreaks = areLineBreaksRequired(node, options, first, last); - - const hasCommentsFirstToken = astUtils.isCommentToken(first); - const hasCommentsLastToken = astUtils.isCommentToken(last); - - /* - * Use tokens or comments to check multiline or not. - * But use only tokens to check whether line breaks are needed. - * This allows: - * var obj = { // eslint-disable-line foo - * a: 1 - * } - */ - first = sourceCode.getTokenAfter(openBrace); - last = sourceCode.getTokenBefore(closeBrace); - - if (needsLineBreaks) { - if (astUtils.isTokenOnSameLine(openBrace, first)) { - context.report({ - message: "Expected a line break after this opening brace.", - node, - loc: openBrace.loc.start, - fix(fixer) { - if (hasCommentsFirstToken) { - return null; - } - - return fixer.insertTextAfter(openBrace, "\n"); - } - }); - } - if (astUtils.isTokenOnSameLine(last, closeBrace)) { - context.report({ - message: "Expected a line break before this closing brace.", - node, - loc: closeBrace.loc.start, - fix(fixer) { - if (hasCommentsLastToken) { - return null; - } - - return fixer.insertTextBefore(closeBrace, "\n"); - } - }); - } - } else { - const consistent = options.consistent; - const hasLineBreakBetweenOpenBraceAndFirst = !astUtils.isTokenOnSameLine(openBrace, first); - const hasLineBreakBetweenCloseBraceAndLast = !astUtils.isTokenOnSameLine(last, closeBrace); - - if ( - (!consistent && hasLineBreakBetweenOpenBraceAndFirst) || - (consistent && hasLineBreakBetweenOpenBraceAndFirst && !hasLineBreakBetweenCloseBraceAndLast) - ) { - context.report({ - message: "Unexpected line break after this opening brace.", - node, - loc: openBrace.loc.start, - fix(fixer) { - if (hasCommentsFirstToken) { - return null; - } - - return fixer.removeRange([ - openBrace.range[1], - first.range[0] - ]); - } - }); - } - if ( - (!consistent && hasLineBreakBetweenCloseBraceAndLast) || - (consistent && !hasLineBreakBetweenOpenBraceAndFirst && hasLineBreakBetweenCloseBraceAndLast) - ) { - context.report({ - message: "Unexpected line break before this closing brace.", - node, - loc: closeBrace.loc.start, - fix(fixer) { - if (hasCommentsLastToken) { - return null; - } - - return fixer.removeRange([ - last.range[1], - closeBrace.range[0] - ]); - } - }); - } - } - } - - return { - ObjectExpression: check, - ObjectPattern: check, - ImportDeclaration: check, - ExportNamedDeclaration: check - }; - } -}; diff --git a/node_modules/eslint/lib/rules/object-curly-spacing.js b/node_modules/eslint/lib/rules/object-curly-spacing.js deleted file mode 100644 index b37d6fd..0000000 --- a/node_modules/eslint/lib/rules/object-curly-spacing.js +++ /dev/null @@ -1,300 +0,0 @@ -/** - * @fileoverview Disallows or enforces spaces inside of object literals. - * @author Jamund Ferguson - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing inside braces", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/object-curly-spacing" - }, - - fixable: "whitespace", - - schema: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - arraysInObjects: { - type: "boolean" - }, - objectsInObjects: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const spaced = context.options[0] === "always", - sourceCode = context.getSourceCode(); - - /** - * Determines whether an option is set, relative to the spacing option. - * If spaced is "always", then check whether option is set to false. - * If spaced is "never", then check whether option is set to true. - * @param {Object} option - The option to exclude. - * @returns {boolean} Whether or not the property is excluded. - */ - function isOptionSet(option) { - return context.options[1] ? context.options[1][option] === !spaced : false; - } - - const options = { - spaced, - arraysInObjectsException: isOptionSet("arraysInObjects"), - objectsInObjectsException: isOptionSet("objectsInObjects") - }; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Reports that there shouldn't be a space after the first token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportNoBeginningSpace(node, token) { - context.report({ - node, - loc: token.loc.start, - message: "There should be no space after '{{token}}'.", - data: { - token: token.value - }, - fix(fixer) { - const nextToken = context.getSourceCode().getTokenAfter(token); - - return fixer.removeRange([token.range[1], nextToken.range[0]]); - } - }); - } - - /** - * Reports that there shouldn't be a space before the last token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportNoEndingSpace(node, token) { - context.report({ - node, - loc: token.loc.start, - message: "There should be no space before '{{token}}'.", - data: { - token: token.value - }, - fix(fixer) { - const previousToken = context.getSourceCode().getTokenBefore(token); - - return fixer.removeRange([previousToken.range[1], token.range[0]]); - } - }); - } - - /** - * Reports that there should be a space after the first token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportRequiredBeginningSpace(node, token) { - context.report({ - node, - loc: token.loc.start, - message: "A space is required after '{{token}}'.", - data: { - token: token.value - }, - fix(fixer) { - return fixer.insertTextAfter(token, " "); - } - }); - } - - /** - * Reports that there should be a space before the last token - * @param {ASTNode} node - The node to report in the event of an error. - * @param {Token} token - The token to use for the report. - * @returns {void} - */ - function reportRequiredEndingSpace(node, token) { - context.report({ - node, - loc: token.loc.start, - message: "A space is required before '{{token}}'.", - data: { - token: token.value - }, - fix(fixer) { - return fixer.insertTextBefore(token, " "); - } - }); - } - - /** - * Determines if spacing in curly braces is valid. - * @param {ASTNode} node The AST node to check. - * @param {Token} first The first token to check (should be the opening brace) - * @param {Token} second The second token to check (should be first after the opening brace) - * @param {Token} penultimate The penultimate token to check (should be last before closing brace) - * @param {Token} last The last token to check (should be closing brace) - * @returns {void} - */ - function validateBraceSpacing(node, first, second, penultimate, last) { - if (astUtils.isTokenOnSameLine(first, second)) { - const firstSpaced = sourceCode.isSpaceBetweenTokens(first, second); - - if (options.spaced && !firstSpaced) { - reportRequiredBeginningSpace(node, first); - } - if (!options.spaced && firstSpaced) { - reportNoBeginningSpace(node, first); - } - } - - if (astUtils.isTokenOnSameLine(penultimate, last)) { - const shouldCheckPenultimate = ( - options.arraysInObjectsException && astUtils.isClosingBracketToken(penultimate) || - options.objectsInObjectsException && astUtils.isClosingBraceToken(penultimate) - ); - const penultimateType = shouldCheckPenultimate && sourceCode.getNodeByRangeIndex(penultimate.range[0]).type; - - const closingCurlyBraceMustBeSpaced = ( - options.arraysInObjectsException && penultimateType === "ArrayExpression" || - options.objectsInObjectsException && (penultimateType === "ObjectExpression" || penultimateType === "ObjectPattern") - ) ? !options.spaced : options.spaced; - - const lastSpaced = sourceCode.isSpaceBetweenTokens(penultimate, last); - - if (closingCurlyBraceMustBeSpaced && !lastSpaced) { - reportRequiredEndingSpace(node, last); - } - if (!closingCurlyBraceMustBeSpaced && lastSpaced) { - reportNoEndingSpace(node, last); - } - } - } - - /** - * Gets '}' token of an object node. - * - * Because the last token of object patterns might be a type annotation, - * this traverses tokens preceded by the last property, then returns the - * first '}' token. - * - * @param {ASTNode} node - The node to get. This node is an - * ObjectExpression or an ObjectPattern. And this node has one or - * more properties. - * @returns {Token} '}' token. - */ - function getClosingBraceOfObject(node) { - const lastProperty = node.properties[node.properties.length - 1]; - - return sourceCode.getTokenAfter(lastProperty, astUtils.isClosingBraceToken); - } - - /** - * Reports a given object node if spacing in curly braces is invalid. - * @param {ASTNode} node - An ObjectExpression or ObjectPattern node to check. - * @returns {void} - */ - function checkForObject(node) { - if (node.properties.length === 0) { - return; - } - - const first = sourceCode.getFirstToken(node), - last = getClosingBraceOfObject(node), - second = sourceCode.getTokenAfter(first), - penultimate = sourceCode.getTokenBefore(last); - - validateBraceSpacing(node, first, second, penultimate, last); - } - - /** - * Reports a given import node if spacing in curly braces is invalid. - * @param {ASTNode} node - An ImportDeclaration node to check. - * @returns {void} - */ - function checkForImport(node) { - if (node.specifiers.length === 0) { - return; - } - - let firstSpecifier = node.specifiers[0]; - const lastSpecifier = node.specifiers[node.specifiers.length - 1]; - - if (lastSpecifier.type !== "ImportSpecifier") { - return; - } - if (firstSpecifier.type !== "ImportSpecifier") { - firstSpecifier = node.specifiers[1]; - } - - const first = sourceCode.getTokenBefore(firstSpecifier), - last = sourceCode.getTokenAfter(lastSpecifier, astUtils.isNotCommaToken), - second = sourceCode.getTokenAfter(first), - penultimate = sourceCode.getTokenBefore(last); - - validateBraceSpacing(node, first, second, penultimate, last); - } - - /** - * Reports a given export node if spacing in curly braces is invalid. - * @param {ASTNode} node - An ExportNamedDeclaration node to check. - * @returns {void} - */ - function checkForExport(node) { - if (node.specifiers.length === 0) { - return; - } - - const firstSpecifier = node.specifiers[0], - lastSpecifier = node.specifiers[node.specifiers.length - 1], - first = sourceCode.getTokenBefore(firstSpecifier), - last = sourceCode.getTokenAfter(lastSpecifier, astUtils.isNotCommaToken), - second = sourceCode.getTokenAfter(first), - penultimate = sourceCode.getTokenBefore(last); - - validateBraceSpacing(node, first, second, penultimate, last); - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - - // var {x} = y; - ObjectPattern: checkForObject, - - // var y = {x: 'y'} - ObjectExpression: checkForObject, - - // import {y} from 'x'; - ImportDeclaration: checkForImport, - - // export {name} from 'yo'; - ExportNamedDeclaration: checkForExport - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/object-property-newline.js b/node_modules/eslint/lib/rules/object-property-newline.js deleted file mode 100644 index 65baf0a..0000000 --- a/node_modules/eslint/lib/rules/object-property-newline.js +++ /dev/null @@ -1,91 +0,0 @@ -/** - * @fileoverview Rule to enforce placing object properties on separate lines. - * @author Vitor Balocco - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce placing object properties on separate lines", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/object-property-newline" - }, - - schema: [ - { - type: "object", - properties: { - allowAllPropertiesOnSameLine: { - type: "boolean" - }, - allowMultiplePropertiesPerLine: { // Deprecated - type: "boolean" - } - }, - additionalProperties: false - } - ], - - fixable: "whitespace" - }, - - create(context) { - const allowSameLine = context.options[0] && ( - Boolean(context.options[0].allowAllPropertiesOnSameLine) || - Boolean(context.options[0].allowMultiplePropertiesPerLine) // Deprecated - ); - const errorMessage = allowSameLine - ? "Object properties must go on a new line if they aren't all on the same line." - : "Object properties must go on a new line."; - - const sourceCode = context.getSourceCode(); - - return { - ObjectExpression(node) { - if (allowSameLine) { - if (node.properties.length > 1) { - const firstTokenOfFirstProperty = sourceCode.getFirstToken(node.properties[0]); - const lastTokenOfLastProperty = sourceCode.getLastToken(node.properties[node.properties.length - 1]); - - if (firstTokenOfFirstProperty.loc.end.line === lastTokenOfLastProperty.loc.start.line) { - - // All keys and values are on the same line - return; - } - } - } - - for (let i = 1; i < node.properties.length; i++) { - const lastTokenOfPreviousProperty = sourceCode.getLastToken(node.properties[i - 1]); - const firstTokenOfCurrentProperty = sourceCode.getFirstToken(node.properties[i]); - - if (lastTokenOfPreviousProperty.loc.end.line === firstTokenOfCurrentProperty.loc.start.line) { - context.report({ - node, - loc: firstTokenOfCurrentProperty.loc.start, - message: errorMessage, - fix(fixer) { - const comma = sourceCode.getTokenBefore(firstTokenOfCurrentProperty); - const rangeAfterComma = [comma.range[1], firstTokenOfCurrentProperty.range[0]]; - - // Don't perform a fix if there are any comments between the comma and the next property. - if (sourceCode.text.slice(rangeAfterComma[0], rangeAfterComma[1]).trim()) { - return null; - } - - return fixer.replaceTextRange(rangeAfterComma, "\n"); - } - }); - } - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/object-shorthand.js b/node_modules/eslint/lib/rules/object-shorthand.js deleted file mode 100644 index c5239a7..0000000 --- a/node_modules/eslint/lib/rules/object-shorthand.js +++ /dev/null @@ -1,457 +0,0 @@ -/** - * @fileoverview Rule to enforce concise object methods and properties. - * @author Jamund Ferguson - */ - -"use strict"; - -const OPTIONS = { - always: "always", - never: "never", - methods: "methods", - properties: "properties", - consistent: "consistent", - consistentAsNeeded: "consistent-as-needed" -}; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ -module.exports = { - meta: { - docs: { - description: "require or disallow method and property shorthand syntax for object literals", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/object-shorthand" - }, - - fixable: "code", - - schema: { - anyOf: [ - { - type: "array", - items: [ - { - enum: ["always", "methods", "properties", "never", "consistent", "consistent-as-needed"] - } - ], - minItems: 0, - maxItems: 1 - }, - { - type: "array", - items: [ - { - enum: ["always", "methods", "properties"] - }, - { - type: "object", - properties: { - avoidQuotes: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - minItems: 0, - maxItems: 2 - }, - { - type: "array", - items: [ - { - enum: ["always", "methods"] - }, - { - type: "object", - properties: { - ignoreConstructors: { - type: "boolean" - }, - avoidQuotes: { - type: "boolean" - }, - avoidExplicitReturnArrows: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - minItems: 0, - maxItems: 2 - } - ] - } - }, - - create(context) { - const APPLY = context.options[0] || OPTIONS.always; - const APPLY_TO_METHODS = APPLY === OPTIONS.methods || APPLY === OPTIONS.always; - const APPLY_TO_PROPS = APPLY === OPTIONS.properties || APPLY === OPTIONS.always; - const APPLY_NEVER = APPLY === OPTIONS.never; - const APPLY_CONSISTENT = APPLY === OPTIONS.consistent; - const APPLY_CONSISTENT_AS_NEEDED = APPLY === OPTIONS.consistentAsNeeded; - - const PARAMS = context.options[1] || {}; - const IGNORE_CONSTRUCTORS = PARAMS.ignoreConstructors; - const AVOID_QUOTES = PARAMS.avoidQuotes; - const AVOID_EXPLICIT_RETURN_ARROWS = !!PARAMS.avoidExplicitReturnArrows; - const sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Determines if the first character of the name is a capital letter. - * @param {string} name The name of the node to evaluate. - * @returns {boolean} True if the first character of the property name is a capital letter, false if not. - * @private - */ - function isConstructor(name) { - const firstChar = name.charAt(0); - - return firstChar === firstChar.toUpperCase(); - } - - /** - * Determines if the property can have a shorthand form. - * @param {ASTNode} property Property AST node - * @returns {boolean} True if the property can have a shorthand form - * @private - * - */ - function canHaveShorthand(property) { - return (property.kind !== "set" && property.kind !== "get" && property.type !== "SpreadElement" && property.type !== "SpreadProperty" && property.type !== "ExperimentalSpreadProperty"); - } - - /** - * Checks whether a node is a string literal. - * @param {ASTNode} node - Any AST node. - * @returns {boolean} `true` if it is a string literal. - */ - function isStringLiteral(node) { - return node.type === "Literal" && typeof node.value === "string"; - } - - /** - * Determines if the property is a shorthand or not. - * @param {ASTNode} property Property AST node - * @returns {boolean} True if the property is considered shorthand, false if not. - * @private - * - */ - function isShorthand(property) { - - // property.method is true when `{a(){}}`. - return (property.shorthand || property.method); - } - - /** - * Determines if the property's key and method or value are named equally. - * @param {ASTNode} property Property AST node - * @returns {boolean} True if the key and value are named equally, false if not. - * @private - * - */ - function isRedundant(property) { - const value = property.value; - - if (value.type === "FunctionExpression") { - return !value.id; // Only anonymous should be shorthand method. - } - if (value.type === "Identifier") { - return astUtils.getStaticPropertyName(property) === value.name; - } - - return false; - } - - /** - * Ensures that an object's properties are consistently shorthand, or not shorthand at all. - * @param {ASTNode} node Property AST node - * @param {boolean} checkRedundancy Whether to check longform redundancy - * @returns {void} - * - */ - function checkConsistency(node, checkRedundancy) { - - // We are excluding getters/setters and spread properties as they are considered neither longform nor shorthand. - const properties = node.properties.filter(canHaveShorthand); - - // Do we still have properties left after filtering the getters and setters? - if (properties.length > 0) { - const shorthandProperties = properties.filter(isShorthand); - - /* - * If we do not have an equal number of longform properties as - * shorthand properties, we are using the annotations inconsistently - */ - if (shorthandProperties.length !== properties.length) { - - // We have at least 1 shorthand property - if (shorthandProperties.length > 0) { - context.report({ node, message: "Unexpected mix of shorthand and non-shorthand properties." }); - } else if (checkRedundancy) { - - /* - * If all properties of the object contain a method or value with a name matching it's key, - * all the keys are redundant. - */ - const canAlwaysUseShorthand = properties.every(isRedundant); - - if (canAlwaysUseShorthand) { - context.report({ node, message: "Expected shorthand for all properties." }); - } - } - } - } - } - - /** - * Fixes a FunctionExpression node by making it into a shorthand property. - * @param {SourceCodeFixer} fixer The fixer object - * @param {ASTNode} node A `Property` node that has a `FunctionExpression` or `ArrowFunctionExpression` as its value - * @returns {Object} A fix for this node - */ - function makeFunctionShorthand(fixer, node) { - const firstKeyToken = node.computed - ? sourceCode.getFirstToken(node, astUtils.isOpeningBracketToken) - : sourceCode.getFirstToken(node.key); - const lastKeyToken = node.computed - ? sourceCode.getFirstTokenBetween(node.key, node.value, astUtils.isClosingBracketToken) - : sourceCode.getLastToken(node.key); - const keyText = sourceCode.text.slice(firstKeyToken.range[0], lastKeyToken.range[1]); - let keyPrefix = ""; - - if (node.value.async) { - keyPrefix += "async "; - } - if (node.value.generator) { - keyPrefix += "*"; - } - - if (node.value.type === "FunctionExpression") { - const functionToken = sourceCode.getTokens(node.value).find(token => token.type === "Keyword" && token.value === "function"); - const tokenBeforeParams = node.value.generator ? sourceCode.getTokenAfter(functionToken) : functionToken; - - return fixer.replaceTextRange( - [firstKeyToken.range[0], node.range[1]], - keyPrefix + keyText + sourceCode.text.slice(tokenBeforeParams.range[1], node.value.range[1]) - ); - } - const arrowToken = sourceCode.getTokens(node.value).find(token => token.value === "=>"); - const tokenBeforeArrow = sourceCode.getTokenBefore(arrowToken); - const hasParensAroundParameters = tokenBeforeArrow.type === "Punctuator" && tokenBeforeArrow.value === ")"; - const oldParamText = sourceCode.text.slice(sourceCode.getFirstToken(node.value, node.value.async ? 1 : 0).range[0], tokenBeforeArrow.range[1]); - const newParamText = hasParensAroundParameters ? oldParamText : `(${oldParamText})`; - - return fixer.replaceTextRange( - [firstKeyToken.range[0], node.range[1]], - keyPrefix + keyText + newParamText + sourceCode.text.slice(arrowToken.range[1], node.value.range[1]) - ); - - } - - /** - * Fixes a FunctionExpression node by making it into a longform property. - * @param {SourceCodeFixer} fixer The fixer object - * @param {ASTNode} node A `Property` node that has a `FunctionExpression` as its value - * @returns {Object} A fix for this node - */ - function makeFunctionLongform(fixer, node) { - const firstKeyToken = node.computed ? sourceCode.getTokens(node).find(token => token.value === "[") : sourceCode.getFirstToken(node.key); - const lastKeyToken = node.computed ? sourceCode.getTokensBetween(node.key, node.value).find(token => token.value === "]") : sourceCode.getLastToken(node.key); - const keyText = sourceCode.text.slice(firstKeyToken.range[0], lastKeyToken.range[1]); - let functionHeader = "function"; - - if (node.value.async) { - functionHeader = `async ${functionHeader}`; - } - if (node.value.generator) { - functionHeader = `${functionHeader}*`; - } - - return fixer.replaceTextRange([node.range[0], lastKeyToken.range[1]], `${keyText}: ${functionHeader}`); - } - - /* - * To determine whether a given arrow function has a lexical identifier (`this`, `arguments`, `super`, or `new.target`), - * create a stack of functions that define these identifiers (i.e. all functions except arrow functions) as the AST is - * traversed. Whenever a new function is encountered, create a new entry on the stack (corresponding to a different lexical - * scope of `this`), and whenever a function is exited, pop that entry off the stack. When an arrow function is entered, - * keep a reference to it on the current stack entry, and remove that reference when the arrow function is exited. - * When a lexical identifier is encountered, mark all the arrow functions on the current stack entry by adding them - * to an `arrowsWithLexicalIdentifiers` set. Any arrow function in that set will not be reported by this rule, - * because converting it into a method would change the value of one of the lexical identifiers. - */ - const lexicalScopeStack = []; - const arrowsWithLexicalIdentifiers = new WeakSet(); - const argumentsIdentifiers = new WeakSet(); - - /** - * Enters a function. This creates a new lexical identifier scope, so a new Set of arrow functions is pushed onto the stack. - * Also, this marks all `arguments` identifiers so that they can be detected later. - * @returns {void} - */ - function enterFunction() { - lexicalScopeStack.unshift(new Set()); - context.getScope().variables.filter(variable => variable.name === "arguments").forEach(variable => { - variable.references.map(ref => ref.identifier).forEach(identifier => argumentsIdentifiers.add(identifier)); - }); - } - - /** - * Exits a function. This pops the current set of arrow functions off the lexical scope stack. - * @returns {void} - */ - function exitFunction() { - lexicalScopeStack.shift(); - } - - /** - * Marks the current function as having a lexical keyword. This implies that all arrow functions - * in the current lexical scope contain a reference to this lexical keyword. - * @returns {void} - */ - function reportLexicalIdentifier() { - lexicalScopeStack[0].forEach(arrowFunction => arrowsWithLexicalIdentifiers.add(arrowFunction)); - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - Program: enterFunction, - FunctionDeclaration: enterFunction, - FunctionExpression: enterFunction, - "Program:exit": exitFunction, - "FunctionDeclaration:exit": exitFunction, - "FunctionExpression:exit": exitFunction, - - ArrowFunctionExpression(node) { - lexicalScopeStack[0].add(node); - }, - "ArrowFunctionExpression:exit"(node) { - lexicalScopeStack[0].delete(node); - }, - - ThisExpression: reportLexicalIdentifier, - Super: reportLexicalIdentifier, - MetaProperty(node) { - if (node.meta.name === "new" && node.property.name === "target") { - reportLexicalIdentifier(); - } - }, - Identifier(node) { - if (argumentsIdentifiers.has(node)) { - reportLexicalIdentifier(); - } - }, - - ObjectExpression(node) { - if (APPLY_CONSISTENT) { - checkConsistency(node, false); - } else if (APPLY_CONSISTENT_AS_NEEDED) { - checkConsistency(node, true); - } - }, - - "Property:exit"(node) { - const isConciseProperty = node.method || node.shorthand; - - // Ignore destructuring assignment - if (node.parent.type === "ObjectPattern") { - return; - } - - // getters and setters are ignored - if (node.kind === "get" || node.kind === "set") { - return; - } - - // only computed methods can fail the following checks - if (node.computed && node.value.type !== "FunctionExpression" && node.value.type !== "ArrowFunctionExpression") { - return; - } - - //-------------------------------------------------------------- - // Checks for property/method shorthand. - if (isConciseProperty) { - if (node.method && (APPLY_NEVER || AVOID_QUOTES && isStringLiteral(node.key))) { - const message = APPLY_NEVER ? "Expected longform method syntax." : "Expected longform method syntax for string literal keys."; - - // { x() {} } should be written as { x: function() {} } - context.report({ - node, - message, - fix: fixer => makeFunctionLongform(fixer, node) - }); - } else if (APPLY_NEVER) { - - // { x } should be written as { x: x } - context.report({ - node, - message: "Expected longform property syntax.", - fix: fixer => fixer.insertTextAfter(node.key, `: ${node.key.name}`) - }); - } - } else if (APPLY_TO_METHODS && !node.value.id && (node.value.type === "FunctionExpression" || node.value.type === "ArrowFunctionExpression")) { - if (IGNORE_CONSTRUCTORS && node.key.type === "Identifier" && isConstructor(node.key.name)) { - return; - } - if (AVOID_QUOTES && isStringLiteral(node.key)) { - return; - } - - // {[x]: function(){}} should be written as {[x]() {}} - if (node.value.type === "FunctionExpression" || - node.value.type === "ArrowFunctionExpression" && - node.value.body.type === "BlockStatement" && - AVOID_EXPLICIT_RETURN_ARROWS && - !arrowsWithLexicalIdentifiers.has(node.value) - ) { - context.report({ - node, - message: "Expected method shorthand.", - fix: fixer => makeFunctionShorthand(fixer, node) - }); - } - } else if (node.value.type === "Identifier" && node.key.name === node.value.name && APPLY_TO_PROPS) { - - // {x: x} should be written as {x} - context.report({ - node, - message: "Expected property shorthand.", - fix(fixer) { - return fixer.replaceText(node, node.value.name); - } - }); - } else if (node.value.type === "Identifier" && node.key.type === "Literal" && node.key.value === node.value.name && APPLY_TO_PROPS) { - if (AVOID_QUOTES) { - return; - } - - // {"x": x} should be written as {x} - context.report({ - node, - message: "Expected property shorthand.", - fix(fixer) { - return fixer.replaceText(node, node.value.name); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/one-var-declaration-per-line.js b/node_modules/eslint/lib/rules/one-var-declaration-per-line.js deleted file mode 100644 index e17529b..0000000 --- a/node_modules/eslint/lib/rules/one-var-declaration-per-line.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * @fileoverview Rule to check multiple var declarations per line - * @author Alberto Rodríguez - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow newlines around variable declarations", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/one-var-declaration-per-line" - }, - - schema: [ - { - enum: ["always", "initializations"] - } - ], - - fixable: "whitespace" - }, - - create(context) { - - const ERROR_MESSAGE = "Expected variable declaration to be on a new line."; - const always = context.options[0] === "always"; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - - /** - * Determine if provided keyword is a variant of for specifiers - * @private - * @param {string} keyword - keyword to test - * @returns {boolean} True if `keyword` is a variant of for specifier - */ - function isForTypeSpecifier(keyword) { - return keyword === "ForStatement" || keyword === "ForInStatement" || keyword === "ForOfStatement"; - } - - /** - * Checks newlines around variable declarations. - * @private - * @param {ASTNode} node - `VariableDeclaration` node to test - * @returns {void} - */ - function checkForNewLine(node) { - if (isForTypeSpecifier(node.parent.type)) { - return; - } - - const declarations = node.declarations; - let prev; - - declarations.forEach(current => { - if (prev && prev.loc.end.line === current.loc.start.line) { - if (always || prev.init || current.init) { - context.report({ - node, - message: ERROR_MESSAGE, - loc: current.loc.start, - fix: fixer => fixer.insertTextBefore(current, "\n") - }); - } - } - prev = current; - }); - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - VariableDeclaration: checkForNewLine - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/one-var.js b/node_modules/eslint/lib/rules/one-var.js deleted file mode 100644 index 40b5f0f..0000000 --- a/node_modules/eslint/lib/rules/one-var.js +++ /dev/null @@ -1,444 +0,0 @@ -/** - * @fileoverview A rule to control the use of single variable declarations. - * @author Ian Christian Myers - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce variables to be declared either together or separately in functions", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/one-var" - }, - - schema: [ - { - oneOf: [ - { - enum: ["always", "never", "consecutive"] - }, - { - type: "object", - properties: { - separateRequires: { - type: "boolean" - }, - var: { - enum: ["always", "never", "consecutive"] - }, - let: { - enum: ["always", "never", "consecutive"] - }, - const: { - enum: ["always", "never", "consecutive"] - } - }, - additionalProperties: false - }, - { - type: "object", - properties: { - initialized: { - enum: ["always", "never", "consecutive"] - }, - uninitialized: { - enum: ["always", "never", "consecutive"] - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - const MODE_ALWAYS = "always"; - const MODE_NEVER = "never"; - const MODE_CONSECUTIVE = "consecutive"; - const mode = context.options[0] || MODE_ALWAYS; - - const options = {}; - - if (typeof mode === "string") { // simple options configuration with just a string - options.var = { uninitialized: mode, initialized: mode }; - options.let = { uninitialized: mode, initialized: mode }; - options.const = { uninitialized: mode, initialized: mode }; - } else if (typeof mode === "object") { // options configuration is an object - if (mode.hasOwnProperty("separateRequires")) { - options.separateRequires = !!mode.separateRequires; - } - if (mode.hasOwnProperty("var")) { - options.var = { uninitialized: mode.var, initialized: mode.var }; - } - if (mode.hasOwnProperty("let")) { - options.let = { uninitialized: mode.let, initialized: mode.let }; - } - if (mode.hasOwnProperty("const")) { - options.const = { uninitialized: mode.const, initialized: mode.const }; - } - if (mode.hasOwnProperty("uninitialized")) { - if (!options.var) { - options.var = {}; - } - if (!options.let) { - options.let = {}; - } - if (!options.const) { - options.const = {}; - } - options.var.uninitialized = mode.uninitialized; - options.let.uninitialized = mode.uninitialized; - options.const.uninitialized = mode.uninitialized; - } - if (mode.hasOwnProperty("initialized")) { - if (!options.var) { - options.var = {}; - } - if (!options.let) { - options.let = {}; - } - if (!options.const) { - options.const = {}; - } - options.var.initialized = mode.initialized; - options.let.initialized = mode.initialized; - options.const.initialized = mode.initialized; - } - } - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - const functionStack = []; - const blockStack = []; - - /** - * Increments the blockStack counter. - * @returns {void} - * @private - */ - function startBlock() { - blockStack.push({ - let: { initialized: false, uninitialized: false }, - const: { initialized: false, uninitialized: false } - }); - } - - /** - * Increments the functionStack counter. - * @returns {void} - * @private - */ - function startFunction() { - functionStack.push({ initialized: false, uninitialized: false }); - startBlock(); - } - - /** - * Decrements the blockStack counter. - * @returns {void} - * @private - */ - function endBlock() { - blockStack.pop(); - } - - /** - * Decrements the functionStack counter. - * @returns {void} - * @private - */ - function endFunction() { - functionStack.pop(); - endBlock(); - } - - /** - * Check if a variable declaration is a require. - * @param {ASTNode} decl variable declaration Node - * @returns {bool} if decl is a require, return true; else return false. - * @private - */ - function isRequire(decl) { - return decl.init && decl.init.type === "CallExpression" && decl.init.callee.name === "require"; - } - - /** - * Records whether initialized/uninitialized/required variables are defined in current scope. - * @param {string} statementType node.kind, one of: "var", "let", or "const" - * @param {ASTNode[]} declarations List of declarations - * @param {Object} currentScope The scope being investigated - * @returns {void} - * @private - */ - function recordTypes(statementType, declarations, currentScope) { - for (let i = 0; i < declarations.length; i++) { - if (declarations[i].init === null) { - if (options[statementType] && options[statementType].uninitialized === MODE_ALWAYS) { - currentScope.uninitialized = true; - } - } else { - if (options[statementType] && options[statementType].initialized === MODE_ALWAYS) { - if (options.separateRequires && isRequire(declarations[i])) { - currentScope.required = true; - } else { - currentScope.initialized = true; - } - } - } - } - } - - /** - * Determines the current scope (function or block) - * @param {string} statementType node.kind, one of: "var", "let", or "const" - * @returns {Object} The scope associated with statementType - */ - function getCurrentScope(statementType) { - let currentScope; - - if (statementType === "var") { - currentScope = functionStack[functionStack.length - 1]; - } else if (statementType === "let") { - currentScope = blockStack[blockStack.length - 1].let; - } else if (statementType === "const") { - currentScope = blockStack[blockStack.length - 1].const; - } - return currentScope; - } - - /** - * Counts the number of initialized and uninitialized declarations in a list of declarations - * @param {ASTNode[]} declarations List of declarations - * @returns {Object} Counts of 'uninitialized' and 'initialized' declarations - * @private - */ - function countDeclarations(declarations) { - const counts = { uninitialized: 0, initialized: 0 }; - - for (let i = 0; i < declarations.length; i++) { - if (declarations[i].init === null) { - counts.uninitialized++; - } else { - counts.initialized++; - } - } - return counts; - } - - /** - * Determines if there is more than one var statement in the current scope. - * @param {string} statementType node.kind, one of: "var", "let", or "const" - * @param {ASTNode[]} declarations List of declarations - * @returns {boolean} Returns true if it is the first var declaration, false if not. - * @private - */ - function hasOnlyOneStatement(statementType, declarations) { - - const declarationCounts = countDeclarations(declarations); - const currentOptions = options[statementType] || {}; - const currentScope = getCurrentScope(statementType); - const hasRequires = declarations.some(isRequire); - - if (currentOptions.uninitialized === MODE_ALWAYS && currentOptions.initialized === MODE_ALWAYS) { - if (currentScope.uninitialized || currentScope.initialized) { - return false; - } - } - - if (declarationCounts.uninitialized > 0) { - if (currentOptions.uninitialized === MODE_ALWAYS && currentScope.uninitialized) { - return false; - } - } - if (declarationCounts.initialized > 0) { - if (currentOptions.initialized === MODE_ALWAYS && currentScope.initialized) { - return false; - } - } - if (currentScope.required && hasRequires) { - return false; - } - recordTypes(statementType, declarations, currentScope); - return true; - } - - /** - * Checks a given VariableDeclaration node for errors. - * @param {ASTNode} node The VariableDeclaration node to check - * @returns {void} - * @private - */ - function checkVariableDeclaration(node) { - const parent = node.parent; - const type = node.kind; - - if (!options[type]) { - return; - } - - const declarations = node.declarations; - const declarationCounts = countDeclarations(declarations); - const mixedRequires = declarations.some(isRequire) && !declarations.every(isRequire); - - if (options[type].initialized === MODE_ALWAYS) { - if (options.separateRequires && mixedRequires) { - context.report({ - node, - message: "Split requires to be separated into a single block." - }); - } - } - - // consecutive - const nodeIndex = (parent.body && parent.body.length > 0 && parent.body.indexOf(node)) || 0; - - if (nodeIndex > 0) { - const previousNode = parent.body[nodeIndex - 1]; - const isPreviousNodeDeclaration = previousNode.type === "VariableDeclaration"; - - if (isPreviousNodeDeclaration && previousNode.kind === type) { - const previousDeclCounts = countDeclarations(previousNode.declarations); - - if (options[type].initialized === MODE_CONSECUTIVE && options[type].uninitialized === MODE_CONSECUTIVE) { - context.report({ - node, - message: "Combine this with the previous '{{type}}' statement.", - data: { - type - } - }); - } else if (options[type].initialized === MODE_CONSECUTIVE && declarationCounts.initialized > 0 && previousDeclCounts.initialized > 0) { - context.report({ - node, - message: "Combine this with the previous '{{type}}' statement with initialized variables.", - data: { - type - } - }); - } else if (options[type].uninitialized === MODE_CONSECUTIVE && - declarationCounts.uninitialized > 0 && - previousDeclCounts.uninitialized > 0) { - context.report({ - node, - message: "Combine this with the previous '{{type}}' statement with uninitialized variables.", - data: { - type - } - }); - } - } - } - - // always - if (!hasOnlyOneStatement(type, declarations)) { - if (options[type].initialized === MODE_ALWAYS && options[type].uninitialized === MODE_ALWAYS) { - context.report({ - node, - message: "Combine this with the previous '{{type}}' statement.", - data: { - type - } - }); - } else { - if (options[type].initialized === MODE_ALWAYS && declarationCounts.initialized > 0) { - context.report({ - node, - message: "Combine this with the previous '{{type}}' statement with initialized variables.", - data: { - type - } - }); - } - if (options[type].uninitialized === MODE_ALWAYS && declarationCounts.uninitialized > 0) { - if (node.parent.left === node && (node.parent.type === "ForInStatement" || node.parent.type === "ForOfStatement")) { - return; - } - context.report({ - node, - message: "Combine this with the previous '{{type}}' statement with uninitialized variables.", - data: { - type - } - }); - } - } - } - - // never - if (parent.type !== "ForStatement" || parent.init !== node) { - const totalDeclarations = declarationCounts.uninitialized + declarationCounts.initialized; - - if (totalDeclarations > 1) { - if (options[type].initialized === MODE_NEVER && options[type].uninitialized === MODE_NEVER) { - - // both initialized and uninitialized - context.report({ - node, - message: "Split '{{type}}' declarations into multiple statements.", - data: { - type - } - }); - } else if (options[type].initialized === MODE_NEVER && declarationCounts.initialized > 0) { - - // initialized - context.report({ - node, - message: "Split initialized '{{type}}' declarations into multiple statements.", - data: { - type - } - }); - } else if (options[type].uninitialized === MODE_NEVER && declarationCounts.uninitialized > 0) { - - // uninitialized - context.report({ - node, - message: "Split uninitialized '{{type}}' declarations into multiple statements.", - data: { - type - } - }); - } - } - } - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - Program: startFunction, - FunctionDeclaration: startFunction, - FunctionExpression: startFunction, - ArrowFunctionExpression: startFunction, - BlockStatement: startBlock, - ForStatement: startBlock, - ForInStatement: startBlock, - ForOfStatement: startBlock, - SwitchStatement: startBlock, - VariableDeclaration: checkVariableDeclaration, - "ForStatement:exit": endBlock, - "ForOfStatement:exit": endBlock, - "ForInStatement:exit": endBlock, - "SwitchStatement:exit": endBlock, - "BlockStatement:exit": endBlock, - "Program:exit": endFunction, - "FunctionDeclaration:exit": endFunction, - "FunctionExpression:exit": endFunction, - "ArrowFunctionExpression:exit": endFunction - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/operator-assignment.js b/node_modules/eslint/lib/rules/operator-assignment.js deleted file mode 100644 index ad516bb..0000000 --- a/node_modules/eslint/lib/rules/operator-assignment.js +++ /dev/null @@ -1,207 +0,0 @@ -/** - * @fileoverview Rule to replace assignment expressions with operator assignment - * @author Brandon Mills - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether an operator is commutative and has an operator assignment - * shorthand form. - * @param {string} operator Operator to check. - * @returns {boolean} True if the operator is commutative and has a - * shorthand form. - */ -function isCommutativeOperatorWithShorthand(operator) { - return ["*", "&", "^", "|"].indexOf(operator) >= 0; -} - -/** - * Checks whether an operator is not commuatative and has an operator assignment - * shorthand form. - * @param {string} operator Operator to check. - * @returns {boolean} True if the operator is not commuatative and has - * a shorthand form. - */ -function isNonCommutativeOperatorWithShorthand(operator) { - return ["+", "-", "/", "%", "<<", ">>", ">>>", "**"].indexOf(operator) >= 0; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -/** - * Checks whether two expressions reference the same value. For example: - * a = a - * a.b = a.b - * a[0] = a[0] - * a['b'] = a['b'] - * @param {ASTNode} a Left side of the comparison. - * @param {ASTNode} b Right side of the comparison. - * @returns {boolean} True if both sides match and reference the same value. - */ -function same(a, b) { - if (a.type !== b.type) { - return false; - } - - switch (a.type) { - case "Identifier": - return a.name === b.name; - - case "Literal": - return a.value === b.value; - - case "MemberExpression": - - /* - * x[0] = x[0] - * x[y] = x[y] - * x.y = x.y - */ - return same(a.object, b.object) && same(a.property, b.property); - - default: - return false; - } -} - -/** - * Determines if the left side of a node can be safely fixed (i.e. if it activates the same getters/setters and) - * toString calls regardless of whether assignment shorthand is used) - * @param {ASTNode} node The node on the left side of the expression - * @returns {boolean} `true` if the node can be fixed - */ -function canBeFixed(node) { - return node.type === "Identifier" || - node.type === "MemberExpression" && node.object.type === "Identifier" && (!node.computed || node.property.type === "Literal"); -} - -module.exports = { - meta: { - docs: { - description: "require or disallow assignment operator shorthand where possible", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/operator-assignment" - }, - - schema: [ - { - enum: ["always", "never"] - } - ], - - fixable: "code" - }, - - create(context) { - - const sourceCode = context.getSourceCode(); - - /** - * Returns the operator token of an AssignmentExpression or BinaryExpression - * @param {ASTNode} node An AssignmentExpression or BinaryExpression node - * @returns {Token} The operator token in the node - */ - function getOperatorToken(node) { - return sourceCode.getFirstTokenBetween(node.left, node.right, token => token.value === node.operator); - } - - /** - * Ensures that an assignment uses the shorthand form where possible. - * @param {ASTNode} node An AssignmentExpression node. - * @returns {void} - */ - function verify(node) { - if (node.operator !== "=" || node.right.type !== "BinaryExpression") { - return; - } - - const left = node.left; - const expr = node.right; - const operator = expr.operator; - - if (isCommutativeOperatorWithShorthand(operator) || isNonCommutativeOperatorWithShorthand(operator)) { - if (same(left, expr.left)) { - context.report({ - node, - message: "Assignment can be replaced with operator assignment.", - fix(fixer) { - if (canBeFixed(left)) { - const equalsToken = getOperatorToken(node); - const operatorToken = getOperatorToken(expr); - const leftText = sourceCode.getText().slice(node.range[0], equalsToken.range[0]); - const rightText = sourceCode.getText().slice(operatorToken.range[1], node.right.range[1]); - - return fixer.replaceText(node, `${leftText}${expr.operator}=${rightText}`); - } - return null; - } - }); - } else if (same(left, expr.right) && isCommutativeOperatorWithShorthand(operator)) { - - /* - * This case can't be fixed safely. - * If `a` and `b` both have custom valueOf() behavior, then fixing `a = b * a` to `a *= b` would - * change the execution order of the valueOf() functions. - */ - context.report({ - node, - message: "Assignment can be replaced with operator assignment." - }); - } - } - } - - /** - * Warns if an assignment expression uses operator assignment shorthand. - * @param {ASTNode} node An AssignmentExpression node. - * @returns {void} - */ - function prohibit(node) { - if (node.operator !== "=") { - context.report({ - node, - message: "Unexpected operator assignment shorthand.", - fix(fixer) { - if (canBeFixed(node.left)) { - const operatorToken = getOperatorToken(node); - const leftText = sourceCode.getText().slice(node.range[0], operatorToken.range[0]); - const newOperator = node.operator.slice(0, -1); - let rightText; - - // If this change would modify precedence (e.g. `foo *= bar + 1` => `foo = foo * (bar + 1)`), parenthesize the right side. - if ( - astUtils.getPrecedence(node.right) <= astUtils.getPrecedence({ type: "BinaryExpression", operator: newOperator }) && - !astUtils.isParenthesised(sourceCode, node.right) - ) { - rightText = `${sourceCode.text.slice(operatorToken.range[1], node.right.range[0])}(${sourceCode.getText(node.right)})`; - } else { - rightText = sourceCode.text.slice(operatorToken.range[1], node.range[1]); - } - - return fixer.replaceText(node, `${leftText}= ${leftText}${newOperator}${rightText}`); - } - return null; - } - }); - } - } - - return { - AssignmentExpression: context.options[0] !== "never" ? verify : prohibit - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/operator-linebreak.js b/node_modules/eslint/lib/rules/operator-linebreak.js deleted file mode 100644 index 558258b..0000000 --- a/node_modules/eslint/lib/rules/operator-linebreak.js +++ /dev/null @@ -1,253 +0,0 @@ -/** - * @fileoverview Operator linebreak - enforces operator linebreak style of two types: after and before - * @author Benoît Zugmeyer - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent linebreak style for operators", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/operator-linebreak" - }, - - schema: [ - { - enum: ["after", "before", "none", null] - }, - { - type: "object", - properties: { - overrides: { - type: "object", - properties: { - anyOf: { - type: "string", - enum: ["after", "before", "none", "ignore"] - } - } - } - }, - additionalProperties: false - } - ], - - fixable: "code" - }, - - create(context) { - - const usedDefaultGlobal = !context.options[0]; - const globalStyle = context.options[0] || "after"; - const options = context.options[1] || {}; - const styleOverrides = options.overrides ? Object.assign({}, options.overrides) : {}; - - if (usedDefaultGlobal && !styleOverrides["?"]) { - styleOverrides["?"] = "before"; - } - - if (usedDefaultGlobal && !styleOverrides[":"]) { - styleOverrides[":"] = "before"; - } - - const sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Gets a fixer function to fix rule issues - * @param {Token} operatorToken The operator token of an expression - * @param {string} desiredStyle The style for the rule. One of 'before', 'after', 'none' - * @returns {Function} A fixer function - */ - function getFixer(operatorToken, desiredStyle) { - return fixer => { - const tokenBefore = sourceCode.getTokenBefore(operatorToken); - const tokenAfter = sourceCode.getTokenAfter(operatorToken); - const textBefore = sourceCode.text.slice(tokenBefore.range[1], operatorToken.range[0]); - const textAfter = sourceCode.text.slice(operatorToken.range[1], tokenAfter.range[0]); - const hasLinebreakBefore = !astUtils.isTokenOnSameLine(tokenBefore, operatorToken); - const hasLinebreakAfter = !astUtils.isTokenOnSameLine(operatorToken, tokenAfter); - let newTextBefore, newTextAfter; - - if (hasLinebreakBefore !== hasLinebreakAfter && desiredStyle !== "none") { - - // If there is a comment before and after the operator, don't do a fix. - if (sourceCode.getTokenBefore(operatorToken, { includeComments: true }) !== tokenBefore && - sourceCode.getTokenAfter(operatorToken, { includeComments: true }) !== tokenAfter) { - - return null; - } - - /* - * If there is only one linebreak and it's on the wrong side of the operator, swap the text before and after the operator. - * foo && - * bar - * would get fixed to - * foo - * && bar - */ - newTextBefore = textAfter; - newTextAfter = textBefore; - } else { - const LINEBREAK_REGEX = astUtils.createGlobalLinebreakMatcher(); - - // Otherwise, if no linebreak is desired and no comments interfere, replace the linebreaks with empty strings. - newTextBefore = desiredStyle === "before" || textBefore.trim() ? textBefore : textBefore.replace(LINEBREAK_REGEX, ""); - newTextAfter = desiredStyle === "after" || textAfter.trim() ? textAfter : textAfter.replace(LINEBREAK_REGEX, ""); - - // If there was no change (due to interfering comments), don't output a fix. - if (newTextBefore === textBefore && newTextAfter === textAfter) { - return null; - } - } - - if (newTextAfter === "" && tokenAfter.type === "Punctuator" && "+-".includes(operatorToken.value) && tokenAfter.value === operatorToken.value) { - - // To avoid accidentally creating a ++ or -- operator, insert a space if the operator is a +/- and the following token is a unary +/-. - newTextAfter += " "; - } - - return fixer.replaceTextRange([tokenBefore.range[1], tokenAfter.range[0]], newTextBefore + operatorToken.value + newTextAfter); - }; - } - - /** - * Checks the operator placement - * @param {ASTNode} node The node to check - * @param {ASTNode} leftSide The node that comes before the operator in `node` - * @private - * @returns {void} - */ - function validateNode(node, leftSide) { - - /* - * When the left part of a binary expression is a single expression wrapped in - * parentheses (ex: `(a) + b`), leftToken will be the last token of the expression - * and operatorToken will be the closing parenthesis. - * The leftToken should be the last closing parenthesis, and the operatorToken - * should be the token right after that. - */ - const operatorToken = sourceCode.getTokenAfter(leftSide, astUtils.isNotClosingParenToken); - const leftToken = sourceCode.getTokenBefore(operatorToken); - const rightToken = sourceCode.getTokenAfter(operatorToken); - const operator = operatorToken.value; - const operatorStyleOverride = styleOverrides[operator]; - const style = operatorStyleOverride || globalStyle; - const fix = getFixer(operatorToken, style); - - // if single line - if (astUtils.isTokenOnSameLine(leftToken, operatorToken) && - astUtils.isTokenOnSameLine(operatorToken, rightToken)) { - - // do nothing. - - } else if (operatorStyleOverride !== "ignore" && !astUtils.isTokenOnSameLine(leftToken, operatorToken) && - !astUtils.isTokenOnSameLine(operatorToken, rightToken)) { - - // lone operator - context.report({ - node, - loc: { - line: operatorToken.loc.end.line, - column: operatorToken.loc.end.column - }, - message: "Bad line breaking before and after '{{operator}}'.", - data: { - operator - }, - fix - }); - - } else if (style === "before" && astUtils.isTokenOnSameLine(leftToken, operatorToken)) { - - context.report({ - node, - loc: { - line: operatorToken.loc.end.line, - column: operatorToken.loc.end.column - }, - message: "'{{operator}}' should be placed at the beginning of the line.", - data: { - operator - }, - fix - }); - - } else if (style === "after" && astUtils.isTokenOnSameLine(operatorToken, rightToken)) { - - context.report({ - node, - loc: { - line: operatorToken.loc.end.line, - column: operatorToken.loc.end.column - }, - message: "'{{operator}}' should be placed at the end of the line.", - data: { - operator - }, - fix - }); - - } else if (style === "none") { - - context.report({ - node, - loc: { - line: operatorToken.loc.end.line, - column: operatorToken.loc.end.column - }, - message: "There should be no line break before or after '{{operator}}'.", - data: { - operator - }, - fix - }); - - } - } - - /** - * Validates a binary expression using `validateNode` - * @param {BinaryExpression|LogicalExpression|AssignmentExpression} node node to be validated - * @returns {void} - */ - function validateBinaryExpression(node) { - validateNode(node, node.left); - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - BinaryExpression: validateBinaryExpression, - LogicalExpression: validateBinaryExpression, - AssignmentExpression: validateBinaryExpression, - VariableDeclarator(node) { - if (node.init) { - validateNode(node, node.id); - } - }, - ConditionalExpression(node) { - validateNode(node, node.test); - validateNode(node, node.consequent); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/padded-blocks.js b/node_modules/eslint/lib/rules/padded-blocks.js deleted file mode 100644 index 2fbb267..0000000 --- a/node_modules/eslint/lib/rules/padded-blocks.js +++ /dev/null @@ -1,257 +0,0 @@ -/** - * @fileoverview A rule to ensure blank lines within blocks. - * @author Mathias Schreck - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow padding within blocks", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/padded-blocks" - }, - - fixable: "whitespace", - - schema: [ - { - oneOf: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - blocks: { - enum: ["always", "never"] - }, - switches: { - enum: ["always", "never"] - }, - classes: { - enum: ["always", "never"] - } - }, - additionalProperties: false, - minProperties: 1 - } - ] - } - ] - }, - - create(context) { - const options = {}; - const config = context.options[0] || "always"; - - if (typeof config === "string") { - const shouldHavePadding = config === "always"; - - options.blocks = shouldHavePadding; - options.switches = shouldHavePadding; - options.classes = shouldHavePadding; - } else { - if (config.hasOwnProperty("blocks")) { - options.blocks = config.blocks === "always"; - } - if (config.hasOwnProperty("switches")) { - options.switches = config.switches === "always"; - } - if (config.hasOwnProperty("classes")) { - options.classes = config.classes === "always"; - } - } - - const ALWAYS_MESSAGE = "Block must be padded by blank lines.", - NEVER_MESSAGE = "Block must not be padded by blank lines."; - - const sourceCode = context.getSourceCode(); - - /** - * Gets the open brace token from a given node. - * @param {ASTNode} node - A BlockStatement or SwitchStatement node from which to get the open brace. - * @returns {Token} The token of the open brace. - */ - function getOpenBrace(node) { - if (node.type === "SwitchStatement") { - return sourceCode.getTokenBefore(node.cases[0]); - } - return sourceCode.getFirstToken(node); - } - - /** - * Checks if the given parameter is a comment node - * @param {ASTNode|Token} node An AST node or token - * @returns {boolean} True if node is a comment - */ - function isComment(node) { - return node.type === "Line" || node.type === "Block"; - } - - /** - * Checks if there is padding between two tokens - * @param {Token} first The first token - * @param {Token} second The second token - * @returns {boolean} True if there is at least a line between the tokens - */ - function isPaddingBetweenTokens(first, second) { - return second.loc.start.line - first.loc.end.line >= 2; - } - - - /** - * Checks if the given token has a blank line after it. - * @param {Token} token The token to check. - * @returns {boolean} Whether or not the token is followed by a blank line. - */ - function getFirstBlockToken(token) { - let prev, - first = token; - - do { - prev = first; - first = sourceCode.getTokenAfter(first, { includeComments: true }); - } while (isComment(first) && first.loc.start.line === prev.loc.end.line); - - return first; - } - - /** - * Checks if the given token is preceeded by a blank line. - * @param {Token} token The token to check - * @returns {boolean} Whether or not the token is preceeded by a blank line - */ - function getLastBlockToken(token) { - let last = token, - next; - - do { - next = last; - last = sourceCode.getTokenBefore(last, { includeComments: true }); - } while (isComment(last) && last.loc.end.line === next.loc.start.line); - - return last; - } - - /** - * Checks if a node should be padded, according to the rule config. - * @param {ASTNode} node The AST node to check. - * @returns {boolean} True if the node should be padded, false otherwise. - */ - function requirePaddingFor(node) { - switch (node.type) { - case "BlockStatement": - return options.blocks; - case "SwitchStatement": - return options.switches; - case "ClassBody": - return options.classes; - - /* istanbul ignore next */ - default: - throw new Error("unreachable"); - } - } - - /** - * Checks the given BlockStatement node to be padded if the block is not empty. - * @param {ASTNode} node The AST node of a BlockStatement. - * @returns {void} undefined. - */ - function checkPadding(node) { - const openBrace = getOpenBrace(node), - firstBlockToken = getFirstBlockToken(openBrace), - tokenBeforeFirst = sourceCode.getTokenBefore(firstBlockToken, { includeComments: true }), - closeBrace = sourceCode.getLastToken(node), - lastBlockToken = getLastBlockToken(closeBrace), - tokenAfterLast = sourceCode.getTokenAfter(lastBlockToken, { includeComments: true }), - blockHasTopPadding = isPaddingBetweenTokens(tokenBeforeFirst, firstBlockToken), - blockHasBottomPadding = isPaddingBetweenTokens(lastBlockToken, tokenAfterLast); - - if (requirePaddingFor(node)) { - if (!blockHasTopPadding) { - context.report({ - node, - loc: { line: tokenBeforeFirst.loc.start.line, column: tokenBeforeFirst.loc.start.column }, - fix(fixer) { - return fixer.insertTextAfter(tokenBeforeFirst, "\n"); - }, - message: ALWAYS_MESSAGE - }); - } - if (!blockHasBottomPadding) { - context.report({ - node, - loc: { line: tokenAfterLast.loc.end.line, column: tokenAfterLast.loc.end.column - 1 }, - fix(fixer) { - return fixer.insertTextBefore(tokenAfterLast, "\n"); - }, - message: ALWAYS_MESSAGE - }); - } - } else { - if (blockHasTopPadding) { - - context.report({ - node, - loc: { line: tokenBeforeFirst.loc.start.line, column: tokenBeforeFirst.loc.start.column }, - fix(fixer) { - return fixer.replaceTextRange([tokenBeforeFirst.range[1], firstBlockToken.range[0] - firstBlockToken.loc.start.column], "\n"); - }, - message: NEVER_MESSAGE - }); - } - - if (blockHasBottomPadding) { - - context.report({ - node, - loc: { line: tokenAfterLast.loc.end.line, column: tokenAfterLast.loc.end.column - 1 }, - message: NEVER_MESSAGE, - fix(fixer) { - return fixer.replaceTextRange([lastBlockToken.range[1], tokenAfterLast.range[0] - tokenAfterLast.loc.start.column], "\n"); - } - }); - } - } - } - - const rule = {}; - - if (options.hasOwnProperty("switches")) { - rule.SwitchStatement = function(node) { - if (node.cases.length === 0) { - return; - } - checkPadding(node); - }; - } - - if (options.hasOwnProperty("blocks")) { - rule.BlockStatement = function(node) { - if (node.body.length === 0) { - return; - } - checkPadding(node); - }; - } - - if (options.hasOwnProperty("classes")) { - rule.ClassBody = function(node) { - if (node.body.length === 0) { - return; - } - checkPadding(node); - }; - } - - return rule; - } -}; diff --git a/node_modules/eslint/lib/rules/padding-line-between-statements.js b/node_modules/eslint/lib/rules/padding-line-between-statements.js deleted file mode 100644 index d2254fa..0000000 --- a/node_modules/eslint/lib/rules/padding-line-between-statements.js +++ /dev/null @@ -1,598 +0,0 @@ -/** - * @fileoverview Rule to require or disallow newlines between statements - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const LT = `[${Array.from(astUtils.LINEBREAKS).join("")}]`; -const PADDING_LINE_SEQUENCE = new RegExp( - String.raw`^(\s*?${LT})\s*${LT}(\s*;?)$` -); -const CJS_EXPORT = /^(?:module\s*\.\s*)?exports(?:\s*\.|\s*\[|$)/; -const CJS_IMPORT = /^require\(/; - -/** - * Creates tester which check if a node starts with specific keyword. - * - * @param {string} keyword The keyword to test. - * @returns {Object} the created tester. - * @private - */ -function newKeywordTester(keyword) { - return { - test: (node, sourceCode) => - sourceCode.getFirstToken(node).value === keyword - }; -} - -/** - * Creates tester which check if a node is specific type. - * - * @param {string} type The node type to test. - * @returns {Object} the created tester. - * @private - */ -function newNodeTypeTester(type) { - return { - test: node => - node.type === type - }; -} - -/** - * Checks the given node is an expression statement of IIFE. - * - * @param {ASTNode} node The node to check. - * @returns {boolean} `true` if the node is an expression statement of IIFE. - * @private - */ -function isIIFEStatement(node) { - if (node.type === "ExpressionStatement") { - let call = node.expression; - - if (call.type === "UnaryExpression") { - call = call.argument; - } - return call.type === "CallExpression" && astUtils.isFunction(call.callee); - } - return false; -} - -/** - * Checks whether the given node is a block-like statement. - * This checks the last token of the node is the closing brace of a block. - * - * @param {SourceCode} sourceCode The source code to get tokens. - * @param {ASTNode} node The node to check. - * @returns {boolean} `true` if the node is a block-like statement. - * @private - */ -function isBlockLikeStatement(sourceCode, node) { - - // do-while with a block is a block-like statement. - if (node.type === "DoWhileStatement" && node.body.type === "BlockStatement") { - return true; - } - - /* - * IIFE is a block-like statement specially from - * JSCS#disallowPaddingNewLinesAfterBlocks. - */ - if (isIIFEStatement(node)) { - return true; - } - - // Checks the last token is a closing brace of blocks. - const lastToken = sourceCode.getLastToken(node, astUtils.isNotSemicolonToken); - const belongingNode = lastToken && astUtils.isClosingBraceToken(lastToken) - ? sourceCode.getNodeByRangeIndex(lastToken.range[0]) - : null; - - return Boolean(belongingNode) && ( - belongingNode.type === "BlockStatement" || - belongingNode.type === "SwitchStatement" - ); -} - -/** - * Check whether the given node is a directive or not. - * @param {ASTNode} node The node to check. - * @param {SourceCode} sourceCode The source code object to get tokens. - * @returns {boolean} `true` if the node is a directive. - */ -function isDirective(node, sourceCode) { - return ( - node.type === "ExpressionStatement" && - ( - node.parent.type === "Program" || - ( - node.parent.type === "BlockStatement" && - astUtils.isFunction(node.parent.parent) - ) - ) && - node.expression.type === "Literal" && - typeof node.expression.value === "string" && - !astUtils.isParenthesised(sourceCode, node.expression) - ); -} - -/** - * Check whether the given node is a part of directive prologue or not. - * @param {ASTNode} node The node to check. - * @param {SourceCode} sourceCode The source code object to get tokens. - * @returns {boolean} `true` if the node is a part of directive prologue. - */ -function isDirectivePrologue(node, sourceCode) { - if (isDirective(node, sourceCode)) { - for (const sibling of node.parent.body) { - if (sibling === node) { - break; - } - if (!isDirective(sibling, sourceCode)) { - return false; - } - } - return true; - } - return false; -} - -/** - * Gets the actual last token. - * - * If a semicolon is semicolon-less style's semicolon, this ignores it. - * For example: - * - * foo() - * ;[1, 2, 3].forEach(bar) - * - * @param {SourceCode} sourceCode The source code to get tokens. - * @param {ASTNode} node The node to get. - * @returns {Token} The actual last token. - * @private - */ -function getActualLastToken(sourceCode, node) { - const semiToken = sourceCode.getLastToken(node); - const prevToken = sourceCode.getTokenBefore(semiToken); - const nextToken = sourceCode.getTokenAfter(semiToken); - const isSemicolonLessStyle = Boolean( - prevToken && - nextToken && - prevToken.range[0] >= node.range[0] && - astUtils.isSemicolonToken(semiToken) && - semiToken.loc.start.line !== prevToken.loc.end.line && - semiToken.loc.end.line === nextToken.loc.start.line - ); - - return isSemicolonLessStyle ? prevToken : semiToken; -} - -/** - * This returns the concatenation of the first 2 captured strings. - * @param {string} _ Unused. Whole matched string. - * @param {string} trailingSpaces The trailing spaces of the first line. - * @param {string} indentSpaces The indentation spaces of the last line. - * @returns {string} The concatenation of trailingSpaces and indentSpaces. - * @private - */ -function replacerToRemovePaddingLines(_, trailingSpaces, indentSpaces) { - return trailingSpaces + indentSpaces; -} - -/** - * Check and report statements for `any` configuration. - * It does nothing. - * - * @returns {void} - * @private - */ -function verifyForAny() { -} - -/** - * Check and report statements for `never` configuration. - * This autofix removes blank lines between the given 2 statements. - * However, if comments exist between 2 blank lines, it does not remove those - * blank lines automatically. - * - * @param {RuleContext} context The rule context to report. - * @param {ASTNode} _ Unused. The previous node to check. - * @param {ASTNode} nextNode The next node to check. - * @param {Array} paddingLines The array of token pairs that blank - * lines exist between the pair. - * @returns {void} - * @private - */ -function verifyForNever(context, _, nextNode, paddingLines) { - if (paddingLines.length === 0) { - return; - } - - context.report({ - node: nextNode, - message: "Unexpected blank line before this statement.", - fix(fixer) { - if (paddingLines.length >= 2) { - return null; - } - - const prevToken = paddingLines[0][0]; - const nextToken = paddingLines[0][1]; - const start = prevToken.range[1]; - const end = nextToken.range[0]; - const text = context.getSourceCode().text - .slice(start, end) - .replace(PADDING_LINE_SEQUENCE, replacerToRemovePaddingLines); - - return fixer.replaceTextRange([start, end], text); - } - }); -} - -/** - * Check and report statements for `always` configuration. - * This autofix inserts a blank line between the given 2 statements. - * If the `prevNode` has trailing comments, it inserts a blank line after the - * trailing comments. - * - * @param {RuleContext} context The rule context to report. - * @param {ASTNode} prevNode The previous node to check. - * @param {ASTNode} nextNode The next node to check. - * @param {Array} paddingLines The array of token pairs that blank - * lines exist between the pair. - * @returns {void} - * @private - */ -function verifyForAlways(context, prevNode, nextNode, paddingLines) { - if (paddingLines.length > 0) { - return; - } - - context.report({ - node: nextNode, - message: "Expected blank line before this statement.", - fix(fixer) { - const sourceCode = context.getSourceCode(); - let prevToken = getActualLastToken(sourceCode, prevNode); - const nextToken = sourceCode.getFirstTokenBetween( - prevToken, - nextNode, - { - includeComments: true, - - /** - * Skip the trailing comments of the previous node. - * This inserts a blank line after the last trailing comment. - * - * For example: - * - * foo(); // trailing comment. - * // comment. - * bar(); - * - * Get fixed to: - * - * foo(); // trailing comment. - * - * // comment. - * bar(); - * - * @param {Token} token The token to check. - * @returns {boolean} `true` if the token is not a trailing comment. - * @private - */ - filter(token) { - if (astUtils.isTokenOnSameLine(prevToken, token)) { - prevToken = token; - return false; - } - return true; - } - } - ) || nextNode; - const insertText = astUtils.isTokenOnSameLine(prevToken, nextToken) - ? "\n\n" - : "\n"; - - return fixer.insertTextAfter(prevToken, insertText); - } - }); -} - -/** - * Types of blank lines. - * `any`, `never`, and `always` are defined. - * Those have `verify` method to check and report statements. - * @private - */ -const PaddingTypes = { - any: { verify: verifyForAny }, - never: { verify: verifyForNever }, - always: { verify: verifyForAlways } -}; - -/** - * Types of statements. - * Those have `test` method to check it matches to the given statement. - * @private - */ -const StatementTypes = { - "*": { test: () => true }, - "block-like": { - test: (node, sourceCode) => isBlockLikeStatement(sourceCode, node) - }, - "cjs-export": { - test: (node, sourceCode) => - node.type === "ExpressionStatement" && - node.expression.type === "AssignmentExpression" && - CJS_EXPORT.test(sourceCode.getText(node.expression.left)) - }, - "cjs-import": { - test: (node, sourceCode) => - node.type === "VariableDeclaration" && - node.declarations.length > 0 && - Boolean(node.declarations[0].init) && - CJS_IMPORT.test(sourceCode.getText(node.declarations[0].init)) - }, - directive: { - test: isDirectivePrologue - }, - expression: { - test: (node, sourceCode) => - node.type === "ExpressionStatement" && - !isDirectivePrologue(node, sourceCode) - }, - "multiline-block-like": { - test: (node, sourceCode) => - node.loc.start.line !== node.loc.end.line && - isBlockLikeStatement(sourceCode, node) - }, - "multiline-expression": { - test: (node, sourceCode) => - node.loc.start.line !== node.loc.end.line && - node.type === "ExpressionStatement" && - !isDirectivePrologue(node, sourceCode) - }, - - block: newNodeTypeTester("BlockStatement"), - empty: newNodeTypeTester("EmptyStatement"), - - break: newKeywordTester("break"), - case: newKeywordTester("case"), - class: newKeywordTester("class"), - const: newKeywordTester("const"), - continue: newKeywordTester("continue"), - debugger: newKeywordTester("debugger"), - default: newKeywordTester("default"), - do: newKeywordTester("do"), - export: newKeywordTester("export"), - for: newKeywordTester("for"), - function: newKeywordTester("function"), - if: newKeywordTester("if"), - import: newKeywordTester("import"), - let: newKeywordTester("let"), - return: newKeywordTester("return"), - switch: newKeywordTester("switch"), - throw: newKeywordTester("throw"), - try: newKeywordTester("try"), - var: newKeywordTester("var"), - while: newKeywordTester("while"), - with: newKeywordTester("with") -}; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow padding lines between statements", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/padding-line-between-statements" - }, - fixable: "whitespace", - schema: { - definitions: { - paddingType: { - enum: Object.keys(PaddingTypes) - }, - statementType: { - anyOf: [ - { enum: Object.keys(StatementTypes) }, - { - type: "array", - items: { enum: Object.keys(StatementTypes) }, - minItems: 1, - uniqueItems: true, - additionalItems: false - } - ] - } - }, - type: "array", - items: { - type: "object", - properties: { - blankLine: { $ref: "#/definitions/paddingType" }, - prev: { $ref: "#/definitions/statementType" }, - next: { $ref: "#/definitions/statementType" } - }, - additionalProperties: false, - required: ["blankLine", "prev", "next"] - }, - additionalItems: false - } - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const configureList = context.options || []; - let scopeInfo = null; - - /** - * Processes to enter to new scope. - * This manages the current previous statement. - * @returns {void} - * @private - */ - function enterScope() { - scopeInfo = { - upper: scopeInfo, - prevNode: null - }; - } - - /** - * Processes to exit from the current scope. - * @returns {void} - * @private - */ - function exitScope() { - scopeInfo = scopeInfo.upper; - } - - /** - * Checks whether the given node matches the given type. - * - * @param {ASTNode} node The statement node to check. - * @param {string|string[]} type The statement type to check. - * @returns {boolean} `true` if the statement node matched the type. - * @private - */ - function match(node, type) { - let innerStatementNode = node; - - while (innerStatementNode.type === "LabeledStatement") { - innerStatementNode = innerStatementNode.body; - } - if (Array.isArray(type)) { - return type.some(match.bind(null, innerStatementNode)); - } - return StatementTypes[type].test(innerStatementNode, sourceCode); - } - - /** - * Finds the last matched configure from configureList. - * - * @param {ASTNode} prevNode The previous statement to match. - * @param {ASTNode} nextNode The current statement to match. - * @returns {Object} The tester of the last matched configure. - * @private - */ - function getPaddingType(prevNode, nextNode) { - for (let i = configureList.length - 1; i >= 0; --i) { - const configure = configureList[i]; - const matched = - match(prevNode, configure.prev) && - match(nextNode, configure.next); - - if (matched) { - return PaddingTypes[configure.blankLine]; - } - } - return PaddingTypes.any; - } - - /** - * Gets padding line sequences between the given 2 statements. - * Comments are separators of the padding line sequences. - * - * @param {ASTNode} prevNode The previous statement to count. - * @param {ASTNode} nextNode The current statement to count. - * @returns {Array} The array of token pairs. - * @private - */ - function getPaddingLineSequences(prevNode, nextNode) { - const pairs = []; - let prevToken = getActualLastToken(sourceCode, prevNode); - - if (nextNode.loc.start.line - prevToken.loc.end.line >= 2) { - do { - const token = sourceCode.getTokenAfter( - prevToken, - { includeComments: true } - ); - - if (token.loc.start.line - prevToken.loc.end.line >= 2) { - pairs.push([prevToken, token]); - } - prevToken = token; - - } while (prevToken.range[0] < nextNode.range[0]); - } - - return pairs; - } - - /** - * Verify padding lines between the given node and the previous node. - * - * @param {ASTNode} node The node to verify. - * @returns {void} - * @private - */ - function verify(node) { - const parentType = node.parent.type; - const validParent = - astUtils.STATEMENT_LIST_PARENTS.has(parentType) || - parentType === "SwitchStatement"; - - if (!validParent) { - return; - } - - // Save this node as the current previous statement. - const prevNode = scopeInfo.prevNode; - - // Verify. - if (prevNode) { - const type = getPaddingType(prevNode, node); - const paddingLines = getPaddingLineSequences(prevNode, node); - - type.verify(context, prevNode, node, paddingLines); - } - - scopeInfo.prevNode = node; - } - - /** - * Verify padding lines between the given node and the previous node. - * Then process to enter to new scope. - * - * @param {ASTNode} node The node to verify. - * @returns {void} - * @private - */ - function verifyThenEnterScope(node) { - verify(node); - enterScope(); - } - - return { - Program: enterScope, - BlockStatement: enterScope, - SwitchStatement: enterScope, - "Program:exit": exitScope, - "BlockStatement:exit": exitScope, - "SwitchStatement:exit": exitScope, - - ":statement": verify, - - SwitchCase: verifyThenEnterScope, - "SwitchCase:exit": exitScope - }; - } -}; diff --git a/node_modules/eslint/lib/rules/prefer-arrow-callback.js b/node_modules/eslint/lib/rules/prefer-arrow-callback.js deleted file mode 100644 index 1bc140b..0000000 --- a/node_modules/eslint/lib/rules/prefer-arrow-callback.js +++ /dev/null @@ -1,306 +0,0 @@ -/** - * @fileoverview A rule to suggest using arrow functions as callbacks. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a given variable is a function name. - * @param {eslint-scope.Variable} variable - A variable to check. - * @returns {boolean} `true` if the variable is a function name. - */ -function isFunctionName(variable) { - return variable && variable.defs[0].type === "FunctionName"; -} - -/** - * Checks whether or not a given MetaProperty node equals to a given value. - * @param {ASTNode} node - A MetaProperty node to check. - * @param {string} metaName - The name of `MetaProperty.meta`. - * @param {string} propertyName - The name of `MetaProperty.property`. - * @returns {boolean} `true` if the node is the specific value. - */ -function checkMetaProperty(node, metaName, propertyName) { - return node.meta.name === metaName && node.property.name === propertyName; -} - -/** - * Gets the variable object of `arguments` which is defined implicitly. - * @param {eslint-scope.Scope} scope - A scope to get. - * @returns {eslint-scope.Variable} The found variable object. - */ -function getVariableOfArguments(scope) { - const variables = scope.variables; - - for (let i = 0; i < variables.length; ++i) { - const variable = variables[i]; - - if (variable.name === "arguments") { - - /* - * If there was a parameter which is named "arguments", the - * implicit "arguments" is not defined. - * So does fast return with null. - */ - return (variable.identifiers.length === 0) ? variable : null; - } - } - - /* istanbul ignore next */ - return null; -} - -/** - * Checkes whether or not a given node is a callback. - * @param {ASTNode} node - A node to check. - * @returns {Object} - * {boolean} retv.isCallback - `true` if the node is a callback. - * {boolean} retv.isLexicalThis - `true` if the node is with `.bind(this)`. - */ -function getCallbackInfo(node) { - const retv = { isCallback: false, isLexicalThis: false }; - let currentNode = node; - let parent = node.parent; - - while (currentNode) { - switch (parent.type) { - - // Checks parents recursively. - - case "LogicalExpression": - case "ConditionalExpression": - break; - - // Checks whether the parent node is `.bind(this)` call. - case "MemberExpression": - if (parent.object === currentNode && - !parent.property.computed && - parent.property.type === "Identifier" && - parent.property.name === "bind" && - parent.parent.type === "CallExpression" && - parent.parent.callee === parent - ) { - retv.isLexicalThis = ( - parent.parent.arguments.length === 1 && - parent.parent.arguments[0].type === "ThisExpression" - ); - parent = parent.parent; - } else { - return retv; - } - break; - - // Checks whether the node is a callback. - case "CallExpression": - case "NewExpression": - if (parent.callee !== currentNode) { - retv.isCallback = true; - } - return retv; - - default: - return retv; - } - - currentNode = parent; - parent = parent.parent; - } - - /* istanbul ignore next */ - throw new Error("unreachable"); -} - -/** - * Checks whether a simple list of parameters contains any duplicates. This does not handle complex - * parameter lists (e.g. with destructuring), since complex parameter lists are a SyntaxError with duplicate - * parameter names anyway. Instead, it always returns `false` for complex parameter lists. - * @param {ASTNode[]} paramsList The list of parameters for a function - * @returns {boolean} `true` if the list of parameters contains any duplicates - */ -function hasDuplicateParams(paramsList) { - return paramsList.every(param => param.type === "Identifier") && paramsList.length !== new Set(paramsList.map(param => param.name)).size; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require using arrow functions for callbacks", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/prefer-arrow-callback" - }, - - schema: [ - { - type: "object", - properties: { - allowNamedFunctions: { - type: "boolean" - }, - allowUnboundThis: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - fixable: "code" - }, - - create(context) { - const options = context.options[0] || {}; - - const allowUnboundThis = options.allowUnboundThis !== false; // default to true - const allowNamedFunctions = options.allowNamedFunctions; - const sourceCode = context.getSourceCode(); - - /* - * {Array<{this: boolean, super: boolean, meta: boolean}>} - * - this - A flag which shows there are one or more ThisExpression. - * - super - A flag which shows there are one or more Super. - * - meta - A flag which shows there are one or more MethProperty. - */ - let stack = []; - - /** - * Pushes new function scope with all `false` flags. - * @returns {void} - */ - function enterScope() { - stack.push({ this: false, super: false, meta: false }); - } - - /** - * Pops a function scope from the stack. - * @returns {{this: boolean, super: boolean, meta: boolean}} The information of the last scope. - */ - function exitScope() { - return stack.pop(); - } - - return { - - // Reset internal state. - Program() { - stack = []; - }, - - // If there are below, it cannot replace with arrow functions merely. - ThisExpression() { - const info = stack[stack.length - 1]; - - if (info) { - info.this = true; - } - }, - - Super() { - const info = stack[stack.length - 1]; - - if (info) { - info.super = true; - } - }, - - MetaProperty(node) { - const info = stack[stack.length - 1]; - - if (info && checkMetaProperty(node, "new", "target")) { - info.meta = true; - } - }, - - // To skip nested scopes. - FunctionDeclaration: enterScope, - "FunctionDeclaration:exit": exitScope, - - // Main. - FunctionExpression: enterScope, - "FunctionExpression:exit"(node) { - const scopeInfo = exitScope(); - - // Skip named function expressions - if (allowNamedFunctions && node.id && node.id.name) { - return; - } - - // Skip generators. - if (node.generator) { - return; - } - - // Skip recursive functions. - const nameVar = context.getDeclaredVariables(node)[0]; - - if (isFunctionName(nameVar) && nameVar.references.length > 0) { - return; - } - - // Skip if it's using arguments. - const variable = getVariableOfArguments(context.getScope()); - - if (variable && variable.references.length > 0) { - return; - } - - // Reports if it's a callback which can replace with arrows. - const callbackInfo = getCallbackInfo(node); - - if (callbackInfo.isCallback && - (!allowUnboundThis || !scopeInfo.this || callbackInfo.isLexicalThis) && - !scopeInfo.super && - !scopeInfo.meta - ) { - context.report({ - node, - message: "Unexpected function expression.", - fix(fixer) { - if ((!callbackInfo.isLexicalThis && scopeInfo.this) || hasDuplicateParams(node.params)) { - - /* - * If the callback function does not have .bind(this) and contains a reference to `this`, there - * is no way to determine what `this` should be, so don't perform any fixes. - * If the callback function has duplicates in its list of parameters (possible in sloppy mode), - * don't replace it with an arrow function, because this is a SyntaxError with arrow functions. - */ - return null; - } - - const paramsLeftParen = node.params.length ? sourceCode.getTokenBefore(node.params[0]) : sourceCode.getTokenBefore(node.body, 1); - const paramsRightParen = sourceCode.getTokenBefore(node.body); - const asyncKeyword = node.async ? "async " : ""; - const paramsFullText = sourceCode.text.slice(paramsLeftParen.range[0], paramsRightParen.range[1]); - const arrowFunctionText = `${asyncKeyword}${paramsFullText} => ${sourceCode.getText(node.body)}`; - - /* - * If the callback function has `.bind(this)`, replace it with an arrow function and remove the binding. - * Otherwise, just replace the arrow function itself. - */ - const replacedNode = callbackInfo.isLexicalThis ? node.parent.parent : node; - - /* - * If the replaced node is part of a BinaryExpression, LogicalExpression, or MemberExpression, then - * the arrow function needs to be parenthesized, because `foo || () => {}` is invalid syntax even - * though `foo || function() {}` is valid. - */ - const needsParens = replacedNode.parent.type !== "CallExpression" && replacedNode.parent.type !== "ConditionalExpression"; - const replacementText = needsParens ? `(${arrowFunctionText})` : arrowFunctionText; - - return fixer.replaceText(replacedNode, replacementText); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/prefer-const.js b/node_modules/eslint/lib/rules/prefer-const.js deleted file mode 100644 index a24a002..0000000 --- a/node_modules/eslint/lib/rules/prefer-const.js +++ /dev/null @@ -1,322 +0,0 @@ -/** - * @fileoverview A rule to suggest using of const declaration for variables that are never reassigned after declared. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const PATTERN_TYPE = /^(?:.+?Pattern|RestElement|SpreadProperty|ExperimentalRestProperty|Property)$/; -const DECLARATION_HOST_TYPE = /^(?:Program|BlockStatement|SwitchCase)$/; -const DESTRUCTURING_HOST_TYPE = /^(?:VariableDeclarator|AssignmentExpression)$/; - -/** - * Adds multiple items to the tail of an array. - * - * @param {any[]} array - A destination to add. - * @param {any[]} values - Items to be added. - * @returns {void} - */ -const pushAll = Function.apply.bind(Array.prototype.push); - -/** - * Checks whether a given node is located at `ForStatement.init` or not. - * - * @param {ASTNode} node - A node to check. - * @returns {boolean} `true` if the node is located at `ForStatement.init`. - */ -function isInitOfForStatement(node) { - return node.parent.type === "ForStatement" && node.parent.init === node; -} - -/** - * Checks whether a given Identifier node becomes a VariableDeclaration or not. - * - * @param {ASTNode} identifier - An Identifier node to check. - * @returns {boolean} `true` if the node can become a VariableDeclaration. - */ -function canBecomeVariableDeclaration(identifier) { - let node = identifier.parent; - - while (PATTERN_TYPE.test(node.type)) { - node = node.parent; - } - - return ( - node.type === "VariableDeclarator" || - ( - node.type === "AssignmentExpression" && - node.parent.type === "ExpressionStatement" && - DECLARATION_HOST_TYPE.test(node.parent.parent.type) - ) - ); -} - -/** - * Gets an identifier node of a given variable. - * - * If the initialization exists or one or more reading references exist before - * the first assignment, the identifier node is the node of the declaration. - * Otherwise, the identifier node is the node of the first assignment. - * - * If the variable should not change to const, this function returns null. - * - If the variable is reassigned. - * - If the variable is never initialized nor assigned. - * - If the variable is initialized in a different scope from the declaration. - * - If the unique assignment of the variable cannot change to a declaration. - * e.g. `if (a) b = 1` / `return (b = 1)` - * - If the variable is declared in the global scope and `eslintUsed` is `true`. - * `/*exported foo` directive comment makes such variables. This rule does not - * warn such variables because this rule cannot distinguish whether the - * exported variables are reassigned or not. - * - * @param {eslint-scope.Variable} variable - A variable to get. - * @param {boolean} ignoreReadBeforeAssign - - * The value of `ignoreReadBeforeAssign` option. - * @returns {ASTNode|null} - * An Identifier node if the variable should change to const. - * Otherwise, null. - */ -function getIdentifierIfShouldBeConst(variable, ignoreReadBeforeAssign) { - if (variable.eslintUsed && variable.scope.type === "global") { - return null; - } - - // Finds the unique WriteReference. - let writer = null; - let isReadBeforeInit = false; - const references = variable.references; - - for (let i = 0; i < references.length; ++i) { - const reference = references[i]; - - if (reference.isWrite()) { - const isReassigned = ( - writer !== null && - writer.identifier !== reference.identifier - ); - - if (isReassigned) { - return null; - } - writer = reference; - - } else if (reference.isRead() && writer === null) { - if (ignoreReadBeforeAssign) { - return null; - } - isReadBeforeInit = true; - } - } - - /* - * If the assignment is from a different scope, ignore it. - * If the assignment cannot change to a declaration, ignore it. - */ - const shouldBeConst = ( - writer !== null && - writer.from === variable.scope && - canBecomeVariableDeclaration(writer.identifier) - ); - - if (!shouldBeConst) { - return null; - } - if (isReadBeforeInit) { - return variable.defs[0].name; - } - return writer.identifier; -} - -/** - * Gets the VariableDeclarator/AssignmentExpression node that a given reference - * belongs to. - * This is used to detect a mix of reassigned and never reassigned in a - * destructuring. - * - * @param {eslint-scope.Reference} reference - A reference to get. - * @returns {ASTNode|null} A VariableDeclarator/AssignmentExpression node or - * null. - */ -function getDestructuringHost(reference) { - if (!reference.isWrite()) { - return null; - } - let node = reference.identifier.parent; - - while (PATTERN_TYPE.test(node.type)) { - node = node.parent; - } - - if (!DESTRUCTURING_HOST_TYPE.test(node.type)) { - return null; - } - return node; -} - -/** - * Groups by the VariableDeclarator/AssignmentExpression node that each - * reference of given variables belongs to. - * This is used to detect a mix of reassigned and never reassigned in a - * destructuring. - * - * @param {eslint-scope.Variable[]} variables - Variables to group by destructuring. - * @param {boolean} ignoreReadBeforeAssign - - * The value of `ignoreReadBeforeAssign` option. - * @returns {Map} Grouped identifier nodes. - */ -function groupByDestructuring(variables, ignoreReadBeforeAssign) { - const identifierMap = new Map(); - - for (let i = 0; i < variables.length; ++i) { - const variable = variables[i]; - const references = variable.references; - const identifier = getIdentifierIfShouldBeConst(variable, ignoreReadBeforeAssign); - let prevId = null; - - for (let j = 0; j < references.length; ++j) { - const reference = references[j]; - const id = reference.identifier; - - /* - * Avoid counting a reference twice or more for default values of - * destructuring. - */ - if (id === prevId) { - continue; - } - prevId = id; - - // Add the identifier node into the destructuring group. - const group = getDestructuringHost(reference); - - if (group) { - if (identifierMap.has(group)) { - identifierMap.get(group).push(identifier); - } else { - identifierMap.set(group, [identifier]); - } - } - } - } - - return identifierMap; -} - -/** - * Finds the nearest parent of node with a given type. - * - * @param {ASTNode} node – The node to search from. - * @param {string} type – The type field of the parent node. - * @param {Function} shouldStop – a predicate that returns true if the traversal should stop, and false otherwise. - * @returns {ASTNode} The closest ancestor with the specified type; null if no such ancestor exists. - */ -function findUp(node, type, shouldStop) { - if (!node || shouldStop(node)) { - return null; - } - if (node.type === type) { - return node; - } - return findUp(node.parent, type, shouldStop); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require `const` declarations for variables that are never reassigned after declared", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/prefer-const" - }, - - fixable: "code", - - schema: [ - { - type: "object", - properties: { - destructuring: { enum: ["any", "all"] }, - ignoreReadBeforeAssign: { type: "boolean" } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const options = context.options[0] || {}; - const sourceCode = context.getSourceCode(); - const checkingMixedDestructuring = options.destructuring !== "all"; - const ignoreReadBeforeAssign = options.ignoreReadBeforeAssign === true; - const variables = []; - - /** - * Reports given identifier nodes if all of the nodes should be declared - * as const. - * - * The argument 'nodes' is an array of Identifier nodes. - * This node is the result of 'getIdentifierIfShouldBeConst()', so it's - * nullable. In simple declaration or assignment cases, the length of - * the array is 1. In destructuring cases, the length of the array can - * be 2 or more. - * - * @param {(eslint-scope.Reference|null)[]} nodes - - * References which are grouped by destructuring to report. - * @returns {void} - */ - function checkGroup(nodes) { - const nodesToReport = nodes.filter(Boolean); - - if (nodes.length && (checkingMixedDestructuring || nodesToReport.length === nodes.length)) { - const varDeclParent = findUp(nodes[0], "VariableDeclaration", parentNode => parentNode.type.endsWith("Statement")); - const shouldFix = varDeclParent && - - /* - * If there are multiple variable declarations, like {let a = 1, b = 2}, then - * do not attempt to fix if one of the declarations should be `const`. It's - * too hard to know how the developer would want to automatically resolve the issue. - */ - varDeclParent.declarations.length === 1 && - - // Don't do a fix unless the variable is initialized (or it's in a for-in or for-of loop) - (varDeclParent.parent.type === "ForInStatement" || varDeclParent.parent.type === "ForOfStatement" || varDeclParent.declarations[0].init) && - - /* - * If options.destucturing is "all", then this warning will not occur unless - * every assignment in the destructuring should be const. In that case, it's safe - * to apply the fix. - */ - nodesToReport.length === nodes.length; - - nodesToReport.forEach(node => { - context.report({ - node, - message: "'{{name}}' is never reassigned. Use 'const' instead.", - data: node, - fix: shouldFix ? fixer => fixer.replaceText(sourceCode.getFirstToken(varDeclParent), "const") : null - }); - }); - } - } - - return { - "Program:exit"() { - groupByDestructuring(variables, ignoreReadBeforeAssign).forEach(checkGroup); - }, - - VariableDeclaration(node) { - if (node.kind === "let" && !isInitOfForStatement(node)) { - pushAll(variables, context.getDeclaredVariables(node)); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/prefer-destructuring.js b/node_modules/eslint/lib/rules/prefer-destructuring.js deleted file mode 100644 index 112ea64..0000000 --- a/node_modules/eslint/lib/rules/prefer-destructuring.js +++ /dev/null @@ -1,220 +0,0 @@ -/** - * @fileoverview Prefer destructuring from arrays and objects - * @author Alex LaFroscia - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require destructuring from arrays and/or objects", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/prefer-destructuring" - }, - schema: [ - { - - /* - * old support {array: Boolean, object: Boolean} - * new support {VariableDeclarator: {}, AssignmentExpression: {}} - */ - oneOf: [ - { - type: "object", - properties: { - VariableDeclarator: { - type: "object", - properties: { - array: { - type: "boolean" - }, - object: { - type: "boolean" - } - }, - additionalProperties: false - }, - AssignmentExpression: { - type: "object", - properties: { - array: { - type: "boolean" - }, - object: { - type: "boolean" - } - }, - additionalProperties: false - } - }, - additionalProperties: false - }, - { - type: "object", - properties: { - array: { - type: "boolean" - }, - object: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - { - type: "object", - properties: { - enforceForRenamedProperties: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - create(context) { - - const enabledTypes = context.options[0]; - const enforceForRenamedProperties = context.options[1] && context.options[1].enforceForRenamedProperties; - let normalizedOptions = { - VariableDeclarator: { array: true, object: true }, - AssignmentExpression: { array: true, object: true } - }; - - if (enabledTypes) { - normalizedOptions = typeof enabledTypes.array !== "undefined" || typeof enabledTypes.object !== "undefined" - ? { VariableDeclarator: enabledTypes, AssignmentExpression: enabledTypes } - : enabledTypes; - } - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * @param {string} nodeType "AssignmentExpression" or "VariableDeclarator" - * @param {string} destructuringType "array" or "object" - * @returns {boolean} `true` if the destructuring type should be checked for the given node - */ - function shouldCheck(nodeType, destructuringType) { - return normalizedOptions && - normalizedOptions[nodeType] && - normalizedOptions[nodeType][destructuringType]; - } - - /** - * Determines if the given node is accessing an array index - * - * This is used to differentiate array index access from object property - * access. - * - * @param {ASTNode} node the node to evaluate - * @returns {boolean} whether or not the node is an integer - */ - function isArrayIndexAccess(node) { - return Number.isInteger(node.property.value); - } - - /** - * Report that the given node should use destructuring - * - * @param {ASTNode} reportNode the node to report - * @param {string} type the type of destructuring that should have been done - * @returns {void} - */ - function report(reportNode, type) { - context.report({ node: reportNode, message: "Use {{type}} destructuring.", data: { type } }); - } - - /** - * Check that the `prefer-destructuring` rules are followed based on the - * given left- and right-hand side of the assignment. - * - * Pulled out into a separate method so that VariableDeclarators and - * AssignmentExpressions can share the same verification logic. - * - * @param {ASTNode} leftNode the left-hand side of the assignment - * @param {ASTNode} rightNode the right-hand side of the assignment - * @param {ASTNode} reportNode the node to report the error on - * @returns {void} - */ - function performCheck(leftNode, rightNode, reportNode) { - if (rightNode.type !== "MemberExpression" || rightNode.object.type === "Super") { - return; - } - - if (isArrayIndexAccess(rightNode)) { - if (shouldCheck(reportNode.type, "array")) { - report(reportNode, "array"); - } - return; - } - - if (shouldCheck(reportNode.type, "object") && enforceForRenamedProperties) { - report(reportNode, "object"); - return; - } - - if (shouldCheck(reportNode.type, "object")) { - const property = rightNode.property; - - if ( - (property.type === "Literal" && leftNode.name === property.value) || - (property.type === "Identifier" && leftNode.name === property.name && !rightNode.computed) - ) { - report(reportNode, "object"); - } - } - } - - /** - * Check if a given variable declarator is coming from an property access - * that should be using destructuring instead - * - * @param {ASTNode} node the variable declarator to check - * @returns {void} - */ - function checkVariableDeclarator(node) { - - // Skip if variable is declared without assignment - if (!node.init) { - return; - } - - // We only care about member expressions past this point - if (node.init.type !== "MemberExpression") { - return; - } - - performCheck(node.id, node.init, node); - } - - /** - * Run the `prefer-destructuring` check on an AssignmentExpression - * - * @param {ASTNode} node the AssignmentExpression node - * @returns {void} - */ - function checkAssigmentExpression(node) { - if (node.operator === "=") { - performCheck(node.left, node.right, node); - } - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - VariableDeclarator: checkVariableDeclarator, - AssignmentExpression: checkAssigmentExpression - }; - } -}; diff --git a/node_modules/eslint/lib/rules/prefer-numeric-literals.js b/node_modules/eslint/lib/rules/prefer-numeric-literals.js deleted file mode 100644 index 051a91c..0000000 --- a/node_modules/eslint/lib/rules/prefer-numeric-literals.js +++ /dev/null @@ -1,113 +0,0 @@ -/** - * @fileoverview Rule to disallow `parseInt()` in favor of binary, octal, and hexadecimal literals - * @author Annie Zhang, Henry Zhu - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks to see if a CallExpression's callee node is `parseInt` or - * `Number.parseInt`. - * @param {ASTNode} calleeNode The callee node to evaluate. - * @returns {boolean} True if the callee is `parseInt` or `Number.parseInt`, - * false otherwise. - */ -function isParseInt(calleeNode) { - switch (calleeNode.type) { - case "Identifier": - return calleeNode.name === "parseInt"; - case "MemberExpression": - return calleeNode.object.type === "Identifier" && - calleeNode.object.name === "Number" && - calleeNode.property.type === "Identifier" && - calleeNode.property.name === "parseInt"; - - // no default - } - - return false; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow `parseInt()` and `Number.parseInt()` in favor of binary, octal, and hexadecimal literals", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/prefer-numeric-literals" - }, - - schema: [], - - fixable: "code" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - const radixMap = { - 2: "binary", - 8: "octal", - 16: "hexadecimal" - }; - - const prefixMap = { - 2: "0b", - 8: "0o", - 16: "0x" - }; - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- - - return { - - CallExpression(node) { - - // doesn't check parseInt() if it doesn't have a radix argument - if (node.arguments.length !== 2) { - return; - } - - // only error if the radix is 2, 8, or 16 - const radixName = radixMap[node.arguments[1].value]; - - if (isParseInt(node.callee) && - radixName && - node.arguments[0].type === "Literal" - ) { - context.report({ - node, - message: "Use {{radixName}} literals instead of {{functionName}}().", - data: { - radixName, - functionName: sourceCode.getText(node.callee) - }, - fix(fixer) { - const newPrefix = prefixMap[node.arguments[1].value]; - - if (+(newPrefix + node.arguments[0].value) !== parseInt(node.arguments[0].value, node.arguments[1].value)) { - - /* - * If the newly-produced literal would be invalid, (e.g. 0b1234), - * or it would yield an incorrect parseInt result for some other reason, don't make a fix. - */ - return null; - } - return fixer.replaceText(node, prefixMap[node.arguments[1].value] + node.arguments[0].value); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/prefer-promise-reject-errors.js b/node_modules/eslint/lib/rules/prefer-promise-reject-errors.js deleted file mode 100644 index f92bd58..0000000 --- a/node_modules/eslint/lib/rules/prefer-promise-reject-errors.js +++ /dev/null @@ -1,125 +0,0 @@ -/** - * @fileoverview restrict values that can be used as Promise rejection reasons - * @author Teddy Katz - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require using Error objects as Promise rejection reasons", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/prefer-promise-reject-errors" - }, - fixable: null, - schema: [ - { - type: "object", - properties: { - allowEmptyReject: { type: "boolean" } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const ALLOW_EMPTY_REJECT = context.options.length && context.options[0].allowEmptyReject; - - //---------------------------------------------------------------------- - // Helpers - //---------------------------------------------------------------------- - - /** - * Checks the argument of a reject() or Promise.reject() CallExpression, and reports it if it can't be an Error - * @param {ASTNode} callExpression A CallExpression node which is used to reject a Promise - * @returns {void} - */ - function checkRejectCall(callExpression) { - if (!callExpression.arguments.length && ALLOW_EMPTY_REJECT) { - return; - } - if ( - !callExpression.arguments.length || - !astUtils.couldBeError(callExpression.arguments[0]) || - callExpression.arguments[0].type === "Identifier" && callExpression.arguments[0].name === "undefined" - ) { - context.report({ - node: callExpression, - message: "Expected the Promise rejection reason to be an Error." - }); - } - } - - /** - * Determines whether a function call is a Promise.reject() call - * @param {ASTNode} node A CallExpression node - * @returns {boolean} `true` if the call is a Promise.reject() call - */ - function isPromiseRejectCall(node) { - return node.callee.type === "MemberExpression" && - node.callee.object.type === "Identifier" && node.callee.object.name === "Promise" && - node.callee.property.type === "Identifier" && node.callee.property.name === "reject"; - } - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- - - return { - - // Check `Promise.reject(value)` calls. - CallExpression(node) { - if (isPromiseRejectCall(node)) { - checkRejectCall(node); - } - }, - - /* - * Check for `new Promise((resolve, reject) => {})`, and check for reject() calls. - * This function is run on "NewExpression:exit" instead of "NewExpression" to ensure that - * the nodes in the expression already have the `parent` property. - */ - "NewExpression:exit"(node) { - if ( - node.callee.type === "Identifier" && node.callee.name === "Promise" && - node.arguments.length && astUtils.isFunction(node.arguments[0]) && - node.arguments[0].params.length > 1 && node.arguments[0].params[1].type === "Identifier" - ) { - context.getDeclaredVariables(node.arguments[0]) - - /* - * Find the first variable that matches the second parameter's name. - * If the first parameter has the same name as the second parameter, then the variable will actually - * be "declared" when the first parameter is evaluated, but then it will be immediately overwritten - * by the second parameter. It's not possible for an expression with the variable to be evaluated before - * the variable is overwritten, because functions with duplicate parameters cannot have destructuring or - * default assignments in their parameter lists. Therefore, it's not necessary to explicitly account for - * this case. - */ - .find(variable => variable.name === node.arguments[0].params[1].name) - - // Get the references to that variable. - .references - - // Only check the references that read the parameter's value. - .filter(ref => ref.isRead()) - - // Only check the references that are used as the callee in a function call, e.g. `reject(foo)`. - .filter(ref => ref.identifier.parent.type === "CallExpression" && ref.identifier === ref.identifier.parent.callee) - - // Check the argument of the function call to determine whether it's an Error. - .forEach(ref => checkRejectCall(ref.identifier.parent)); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/prefer-reflect.js b/node_modules/eslint/lib/rules/prefer-reflect.js deleted file mode 100644 index 56e841f..0000000 --- a/node_modules/eslint/lib/rules/prefer-reflect.js +++ /dev/null @@ -1,120 +0,0 @@ -/** - * @fileoverview Rule to suggest using "Reflect" api over Function/Object methods - * @author Keith Cirkel - * @deprecated in ESLint v3.9.0 - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require `Reflect` methods where applicable", - category: "ECMAScript 6", - recommended: false, - replacedBy: [], - url: "https://eslint.org/docs/rules/prefer-reflect" - }, - - deprecated: true, - - schema: [ - { - type: "object", - properties: { - exceptions: { - type: "array", - items: { - enum: [ - "apply", - "call", - "delete", - "defineProperty", - "getOwnPropertyDescriptor", - "getPrototypeOf", - "setPrototypeOf", - "isExtensible", - "getOwnPropertyNames", - "preventExtensions" - ] - }, - uniqueItems: true - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const existingNames = { - apply: "Function.prototype.apply", - call: "Function.prototype.call", - defineProperty: "Object.defineProperty", - getOwnPropertyDescriptor: "Object.getOwnPropertyDescriptor", - getPrototypeOf: "Object.getPrototypeOf", - setPrototypeOf: "Object.setPrototypeOf", - isExtensible: "Object.isExtensible", - getOwnPropertyNames: "Object.getOwnPropertyNames", - preventExtensions: "Object.preventExtensions" - }; - - const reflectSubsitutes = { - apply: "Reflect.apply", - call: "Reflect.apply", - defineProperty: "Reflect.defineProperty", - getOwnPropertyDescriptor: "Reflect.getOwnPropertyDescriptor", - getPrototypeOf: "Reflect.getPrototypeOf", - setPrototypeOf: "Reflect.setPrototypeOf", - isExtensible: "Reflect.isExtensible", - getOwnPropertyNames: "Reflect.getOwnPropertyNames", - preventExtensions: "Reflect.preventExtensions" - }; - - const exceptions = (context.options[0] || {}).exceptions || []; - - /** - * Reports the Reflect violation based on the `existing` and `substitute` - * @param {Object} node The node that violates the rule. - * @param {string} existing The existing method name that has been used. - * @param {string} substitute The Reflect substitute that should be used. - * @returns {void} - */ - function report(node, existing, substitute) { - context.report({ - node, - message: "Avoid using {{existing}}, instead use {{substitute}}.", - data: { - existing, - substitute - } - }); - } - - return { - CallExpression(node) { - const methodName = (node.callee.property || {}).name; - const isReflectCall = (node.callee.object || {}).name === "Reflect"; - const hasReflectSubsitute = reflectSubsitutes.hasOwnProperty(methodName); - const userConfiguredException = exceptions.indexOf(methodName) !== -1; - - if (hasReflectSubsitute && !isReflectCall && !userConfiguredException) { - report(node, existingNames[methodName], reflectSubsitutes[methodName]); - } - }, - UnaryExpression(node) { - const isDeleteOperator = node.operator === "delete"; - const targetsIdentifier = node.argument.type === "Identifier"; - const userConfiguredException = exceptions.indexOf("delete") !== -1; - - if (isDeleteOperator && !targetsIdentifier && !userConfiguredException) { - report(node, "the delete keyword", "Reflect.deleteProperty"); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/prefer-rest-params.js b/node_modules/eslint/lib/rules/prefer-rest-params.js deleted file mode 100644 index 133456e..0000000 --- a/node_modules/eslint/lib/rules/prefer-rest-params.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * @fileoverview Rule to - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Gets the variable object of `arguments` which is defined implicitly. - * @param {eslint-scope.Scope} scope - A scope to get. - * @returns {eslint-scope.Variable} The found variable object. - */ -function getVariableOfArguments(scope) { - const variables = scope.variables; - - for (let i = 0; i < variables.length; ++i) { - const variable = variables[i]; - - if (variable.name === "arguments") { - - /* - * If there was a parameter which is named "arguments", the implicit "arguments" is not defined. - * So does fast return with null. - */ - return (variable.identifiers.length === 0) ? variable : null; - } - } - - /* istanbul ignore next : unreachable */ - return null; -} - -/** - * Checks if the given reference is not normal member access. - * - * - arguments .... true // not member access - * - arguments[i] .... true // computed member access - * - arguments[0] .... true // computed member access - * - arguments.length .... false // normal member access - * - * @param {eslint-scope.Reference} reference - The reference to check. - * @returns {boolean} `true` if the reference is not normal member access. - */ -function isNotNormalMemberAccess(reference) { - const id = reference.identifier; - const parent = id.parent; - - return !( - parent.type === "MemberExpression" && - parent.object === id && - !parent.computed - ); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require rest parameters instead of `arguments`", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/prefer-rest-params" - }, - - schema: [] - }, - - create(context) { - - /** - * Reports a given reference. - * - * @param {eslint-scope.Reference} reference - A reference to report. - * @returns {void} - */ - function report(reference) { - context.report({ - node: reference.identifier, - loc: reference.identifier.loc, - message: "Use the rest parameters instead of 'arguments'." - }); - } - - /** - * Reports references of the implicit `arguments` variable if exist. - * - * @returns {void} - */ - function checkForArguments() { - const argumentsVar = getVariableOfArguments(context.getScope()); - - if (argumentsVar) { - argumentsVar - .references - .filter(isNotNormalMemberAccess) - .forEach(report); - } - } - - return { - "FunctionDeclaration:exit": checkForArguments, - "FunctionExpression:exit": checkForArguments - }; - } -}; diff --git a/node_modules/eslint/lib/rules/prefer-spread.js b/node_modules/eslint/lib/rules/prefer-spread.js deleted file mode 100644 index 62cfb28..0000000 --- a/node_modules/eslint/lib/rules/prefer-spread.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @fileoverview A rule to suggest using of the spread operator instead of `.apply()`. - * @author Toru Nagashima - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a node is a `.apply()` for variadic. - * @param {ASTNode} node - A CallExpression node to check. - * @returns {boolean} Whether or not the node is a `.apply()` for variadic. - */ -function isVariadicApplyCalling(node) { - return ( - node.callee.type === "MemberExpression" && - node.callee.property.type === "Identifier" && - node.callee.property.name === "apply" && - node.callee.computed === false && - node.arguments.length === 2 && - node.arguments[1].type !== "ArrayExpression" && - node.arguments[1].type !== "SpreadElement" - ); -} - - -/** - * Checks whether or not `thisArg` is not changed by `.apply()`. - * @param {ASTNode|null} expectedThis - The node that is the owner of the applied function. - * @param {ASTNode} thisArg - The node that is given to the first argument of the `.apply()`. - * @param {RuleContext} context - The ESLint rule context object. - * @returns {boolean} Whether or not `thisArg` is not changed by `.apply()`. - */ -function isValidThisArg(expectedThis, thisArg, context) { - if (!expectedThis) { - return astUtils.isNullOrUndefined(thisArg); - } - return astUtils.equalTokens(expectedThis, thisArg, context); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require spread operators instead of `.apply()`", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/prefer-spread" - }, - - schema: [], - - fixable: "code" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - return { - CallExpression(node) { - if (!isVariadicApplyCalling(node)) { - return; - } - - const applied = node.callee.object; - const expectedThis = (applied.type === "MemberExpression") ? applied.object : null; - const thisArg = node.arguments[0]; - - if (isValidThisArg(expectedThis, thisArg, sourceCode)) { - context.report({ - node, - message: "Use the spread operator instead of '.apply()'.", - fix(fixer) { - if (expectedThis && expectedThis.type !== "Identifier") { - - // Don't fix cases where the `this` value could be a computed expression. - return null; - } - - const propertyDot = sourceCode.getFirstTokenBetween(applied, node.callee.property, token => token.value === "."); - - return fixer.replaceTextRange([propertyDot.range[0], node.range[1]], `(...${sourceCode.getText(node.arguments[1])})`); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/prefer-template.js b/node_modules/eslint/lib/rules/prefer-template.js deleted file mode 100644 index 2b893fd..0000000 --- a/node_modules/eslint/lib/rules/prefer-template.js +++ /dev/null @@ -1,235 +0,0 @@ -/** - * @fileoverview A rule to suggest using template literals instead of string concatenation. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks whether or not a given node is a concatenation. - * @param {ASTNode} node - A node to check. - * @returns {boolean} `true` if the node is a concatenation. - */ -function isConcatenation(node) { - return node.type === "BinaryExpression" && node.operator === "+"; -} - -/** - * Gets the top binary expression node for concatenation in parents of a given node. - * @param {ASTNode} node - A node to get. - * @returns {ASTNode} the top binary expression node in parents of a given node. - */ -function getTopConcatBinaryExpression(node) { - let currentNode = node; - - while (isConcatenation(currentNode.parent)) { - currentNode = currentNode.parent; - } - return currentNode; -} - -/** - * Checks whether or not a given binary expression has string literals. - * @param {ASTNode} node - A node to check. - * @returns {boolean} `true` if the node has string literals. - */ -function hasStringLiteral(node) { - if (isConcatenation(node)) { - - // `left` is deeper than `right` normally. - return hasStringLiteral(node.right) || hasStringLiteral(node.left); - } - return astUtils.isStringLiteral(node); -} - -/** - * Checks whether or not a given binary expression has non string literals. - * @param {ASTNode} node - A node to check. - * @returns {boolean} `true` if the node has non string literals. - */ -function hasNonStringLiteral(node) { - if (isConcatenation(node)) { - - // `left` is deeper than `right` normally. - return hasNonStringLiteral(node.right) || hasNonStringLiteral(node.left); - } - return !astUtils.isStringLiteral(node); -} - -/** - * Determines whether a given node will start with a template curly expression (`${}`) when being converted to a template literal. - * @param {ASTNode} node The node that will be fixed to a template literal - * @returns {boolean} `true` if the node will start with a template curly. - */ -function startsWithTemplateCurly(node) { - if (node.type === "BinaryExpression") { - return startsWithTemplateCurly(node.left); - } - if (node.type === "TemplateLiteral") { - return node.expressions.length && node.quasis.length && node.quasis[0].range[0] === node.quasis[0].range[1]; - } - return node.type !== "Literal" || typeof node.value !== "string"; -} - -/** - * Determines whether a given node end with a template curly expression (`${}`) when being converted to a template literal. - * @param {ASTNode} node The node that will be fixed to a template literal - * @returns {boolean} `true` if the node will end with a template curly. - */ -function endsWithTemplateCurly(node) { - if (node.type === "BinaryExpression") { - return startsWithTemplateCurly(node.right); - } - if (node.type === "TemplateLiteral") { - return node.expressions.length && node.quasis.length && node.quasis[node.quasis.length - 1].range[0] === node.quasis[node.quasis.length - 1].range[1]; - } - return node.type !== "Literal" || typeof node.value !== "string"; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require template literals instead of string concatenation", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/prefer-template" - }, - - schema: [], - - fixable: "code" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - let done = Object.create(null); - - /** - * Gets the non-token text between two nodes, ignoring any other tokens that appear between the two tokens. - * @param {ASTNode} node1 The first node - * @param {ASTNode} node2 The second node - * @returns {string} The text between the nodes, excluding other tokens - */ - function getTextBetween(node1, node2) { - const allTokens = [node1].concat(sourceCode.getTokensBetween(node1, node2)).concat(node2); - const sourceText = sourceCode.getText(); - - return allTokens.slice(0, -1).reduce((accumulator, token, index) => accumulator + sourceText.slice(token.range[1], allTokens[index + 1].range[0]), ""); - } - - /** - * Returns a template literal form of the given node. - * @param {ASTNode} currentNode A node that should be converted to a template literal - * @param {string} textBeforeNode Text that should appear before the node - * @param {string} textAfterNode Text that should appear after the node - * @returns {string} A string form of this node, represented as a template literal - */ - function getTemplateLiteral(currentNode, textBeforeNode, textAfterNode) { - if (currentNode.type === "Literal" && typeof currentNode.value === "string") { - - /* - * If the current node is a string literal, escape any instances of ${ or ` to prevent them from being interpreted - * as a template placeholder. However, if the code already contains a backslash before the ${ or ` - * for some reason, don't add another backslash, because that would change the meaning of the code (it would cause - * an actual backslash character to appear before the dollar sign). - */ - return `\`${currentNode.raw.slice(1, -1).replace(/\\*(\${|`)/g, matched => { - if (matched.lastIndexOf("\\") % 2) { - return `\\${matched}`; - } - return matched; - - // Unescape any quotes that appear in the original Literal that no longer need to be escaped. - }).replace(new RegExp(`\\\\${currentNode.raw[0]}`, "g"), currentNode.raw[0])}\``; - } - - if (currentNode.type === "TemplateLiteral") { - return sourceCode.getText(currentNode); - } - - if (isConcatenation(currentNode) && hasStringLiteral(currentNode) && hasNonStringLiteral(currentNode)) { - const plusSign = sourceCode.getFirstTokenBetween(currentNode.left, currentNode.right, token => token.value === "+"); - const textBeforePlus = getTextBetween(currentNode.left, plusSign); - const textAfterPlus = getTextBetween(plusSign, currentNode.right); - const leftEndsWithCurly = endsWithTemplateCurly(currentNode.left); - const rightStartsWithCurly = startsWithTemplateCurly(currentNode.right); - - if (leftEndsWithCurly) { - - // If the left side of the expression ends with a template curly, add the extra text to the end of the curly bracket. - // `foo${bar}` /* comment */ + 'baz' --> `foo${bar /* comment */ }${baz}` - return getTemplateLiteral(currentNode.left, textBeforeNode, textBeforePlus + textAfterPlus).slice(0, -1) + - getTemplateLiteral(currentNode.right, null, textAfterNode).slice(1); - } - if (rightStartsWithCurly) { - - // Otherwise, if the right side of the expression starts with a template curly, add the text there. - // 'foo' /* comment */ + `${bar}baz` --> `foo${ /* comment */ bar}baz` - return getTemplateLiteral(currentNode.left, textBeforeNode, null).slice(0, -1) + - getTemplateLiteral(currentNode.right, textBeforePlus + textAfterPlus, textAfterNode).slice(1); - } - - /* - * Otherwise, these nodes should not be combined into a template curly, since there is nowhere to put - * the text between them. - */ - return `${getTemplateLiteral(currentNode.left, textBeforeNode, null)}${textBeforePlus}+${textAfterPlus}${getTemplateLiteral(currentNode.right, textAfterNode, null)}`; - } - - return `\`\${${textBeforeNode || ""}${sourceCode.getText(currentNode)}${textAfterNode || ""}}\``; - } - - /** - * Reports if a given node is string concatenation with non string literals. - * - * @param {ASTNode} node - A node to check. - * @returns {void} - */ - function checkForStringConcat(node) { - if (!astUtils.isStringLiteral(node) || !isConcatenation(node.parent)) { - return; - } - - const topBinaryExpr = getTopConcatBinaryExpression(node.parent); - - // Checks whether or not this node had been checked already. - if (done[topBinaryExpr.range[0]]) { - return; - } - done[topBinaryExpr.range[0]] = true; - - if (hasNonStringLiteral(topBinaryExpr)) { - context.report({ - node: topBinaryExpr, - message: "Unexpected string concatenation.", - fix(fixer) { - return fixer.replaceText(topBinaryExpr, getTemplateLiteral(topBinaryExpr, null, null)); - } - }); - } - } - - return { - Program() { - done = Object.create(null); - }, - - Literal: checkForStringConcat, - TemplateLiteral: checkForStringConcat - }; - } -}; diff --git a/node_modules/eslint/lib/rules/quote-props.js b/node_modules/eslint/lib/rules/quote-props.js deleted file mode 100644 index 3673949..0000000 --- a/node_modules/eslint/lib/rules/quote-props.js +++ /dev/null @@ -1,299 +0,0 @@ -/** - * @fileoverview Rule to flag non-quoted property names in object literals. - * @author Mathias Bynens - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const espree = require("espree"), - keywords = require("../util/keywords"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require quotes around object literal property names", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/quote-props" - }, - - schema: { - anyOf: [ - { - type: "array", - items: [ - { - enum: ["always", "as-needed", "consistent", "consistent-as-needed"] - } - ], - minItems: 0, - maxItems: 1 - }, - { - type: "array", - items: [ - { - enum: ["always", "as-needed", "consistent", "consistent-as-needed"] - }, - { - type: "object", - properties: { - keywords: { - type: "boolean" - }, - unnecessary: { - type: "boolean" - }, - numbers: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - minItems: 0, - maxItems: 2 - } - ] - }, - - fixable: "code" - }, - - create(context) { - - const MODE = context.options[0], - KEYWORDS = context.options[1] && context.options[1].keywords, - CHECK_UNNECESSARY = !context.options[1] || context.options[1].unnecessary !== false, - NUMBERS = context.options[1] && context.options[1].numbers, - - MESSAGE_UNNECESSARY = "Unnecessarily quoted property '{{property}}' found.", - MESSAGE_UNQUOTED = "Unquoted property '{{property}}' found.", - MESSAGE_NUMERIC = "Unquoted number literal '{{property}}' used as key.", - MESSAGE_RESERVED = "Unquoted reserved word '{{property}}' used as key.", - sourceCode = context.getSourceCode(); - - - /** - * Checks whether a certain string constitutes an ES3 token - * @param {string} tokenStr - The string to be checked. - * @returns {boolean} `true` if it is an ES3 token. - */ - function isKeyword(tokenStr) { - return keywords.indexOf(tokenStr) >= 0; - } - - /** - * Checks if an espree-tokenized key has redundant quotes (i.e. whether quotes are unnecessary) - * @param {string} rawKey The raw key value from the source - * @param {espreeTokens} tokens The espree-tokenized node key - * @param {boolean} [skipNumberLiterals=false] Indicates whether number literals should be checked - * @returns {boolean} Whether or not a key has redundant quotes. - * @private - */ - function areQuotesRedundant(rawKey, tokens, skipNumberLiterals) { - return tokens.length === 1 && tokens[0].start === 0 && tokens[0].end === rawKey.length && - (["Identifier", "Keyword", "Null", "Boolean"].indexOf(tokens[0].type) >= 0 || - (tokens[0].type === "Numeric" && !skipNumberLiterals && String(+tokens[0].value) === tokens[0].value)); - } - - /** - * Returns a string representation of a property node with quotes removed - * @param {ASTNode} key Key AST Node, which may or may not be quoted - * @returns {string} A replacement string for this property - */ - function getUnquotedKey(key) { - return key.type === "Identifier" ? key.name : key.value; - } - - /** - * Returns a string representation of a property node with quotes added - * @param {ASTNode} key Key AST Node, which may or may not be quoted - * @returns {string} A replacement string for this property - */ - function getQuotedKey(key) { - if (key.type === "Literal" && typeof key.value === "string") { - - // If the key is already a string literal, don't replace the quotes with double quotes. - return sourceCode.getText(key); - } - - // Otherwise, the key is either an identifier or a number literal. - return `"${key.type === "Identifier" ? key.name : key.value}"`; - } - - /** - * Ensures that a property's key is quoted only when necessary - * @param {ASTNode} node Property AST node - * @returns {void} - */ - function checkUnnecessaryQuotes(node) { - const key = node.key; - - if (node.method || node.computed || node.shorthand) { - return; - } - - if (key.type === "Literal" && typeof key.value === "string") { - let tokens; - - try { - tokens = espree.tokenize(key.value); - } catch (e) { - return; - } - - if (tokens.length !== 1) { - return; - } - - const isKeywordToken = isKeyword(tokens[0].value); - - if (isKeywordToken && KEYWORDS) { - return; - } - - if (CHECK_UNNECESSARY && areQuotesRedundant(key.value, tokens, NUMBERS)) { - context.report({ - node, - message: MESSAGE_UNNECESSARY, - data: { property: key.value }, - fix: fixer => fixer.replaceText(key, getUnquotedKey(key)) - }); - } - } else if (KEYWORDS && key.type === "Identifier" && isKeyword(key.name)) { - context.report({ - node, - message: MESSAGE_RESERVED, - data: { property: key.name }, - fix: fixer => fixer.replaceText(key, getQuotedKey(key)) - }); - } else if (NUMBERS && key.type === "Literal" && typeof key.value === "number") { - context.report({ - node, - message: MESSAGE_NUMERIC, - data: { property: key.value }, - fix: fixer => fixer.replaceText(key, getQuotedKey(key)) - }); - } - } - - /** - * Ensures that a property's key is quoted - * @param {ASTNode} node Property AST node - * @returns {void} - */ - function checkOmittedQuotes(node) { - const key = node.key; - - if (!node.method && !node.computed && !node.shorthand && !(key.type === "Literal" && typeof key.value === "string")) { - context.report({ - node, - message: MESSAGE_UNQUOTED, - data: { property: key.name || key.value }, - fix: fixer => fixer.replaceText(key, getQuotedKey(key)) - }); - } - } - - /** - * Ensures that an object's keys are consistently quoted, optionally checks for redundancy of quotes - * @param {ASTNode} node Property AST node - * @param {boolean} checkQuotesRedundancy Whether to check quotes' redundancy - * @returns {void} - */ - function checkConsistency(node, checkQuotesRedundancy) { - const quotedProps = [], - unquotedProps = []; - let keywordKeyName = null, - necessaryQuotes = false; - - node.properties.forEach(property => { - const key = property.key; - - if (!key || property.method || property.computed || property.shorthand) { - return; - } - - if (key.type === "Literal" && typeof key.value === "string") { - - quotedProps.push(property); - - if (checkQuotesRedundancy) { - let tokens; - - try { - tokens = espree.tokenize(key.value); - } catch (e) { - necessaryQuotes = true; - return; - } - - necessaryQuotes = necessaryQuotes || !areQuotesRedundant(key.value, tokens) || KEYWORDS && isKeyword(tokens[0].value); - } - } else if (KEYWORDS && checkQuotesRedundancy && key.type === "Identifier" && isKeyword(key.name)) { - unquotedProps.push(property); - necessaryQuotes = true; - keywordKeyName = key.name; - } else { - unquotedProps.push(property); - } - }); - - if (checkQuotesRedundancy && quotedProps.length && !necessaryQuotes) { - quotedProps.forEach(property => { - context.report({ - node: property, - message: "Properties shouldn't be quoted as all quotes are redundant.", - fix: fixer => fixer.replaceText(property.key, getUnquotedKey(property.key)) - }); - }); - } else if (unquotedProps.length && keywordKeyName) { - unquotedProps.forEach(property => { - context.report({ - node: property, - message: "Properties should be quoted as '{{property}}' is a reserved word.", - data: { property: keywordKeyName }, - fix: fixer => fixer.replaceText(property.key, getQuotedKey(property.key)) - }); - }); - } else if (quotedProps.length && unquotedProps.length) { - unquotedProps.forEach(property => { - context.report({ - node: property, - message: "Inconsistently quoted property '{{key}}' found.", - data: { key: property.key.name || property.key.value }, - fix: fixer => fixer.replaceText(property.key, getQuotedKey(property.key)) - }); - }); - } - } - - return { - Property(node) { - if (MODE === "always" || !MODE) { - checkOmittedQuotes(node); - } - if (MODE === "as-needed") { - checkUnnecessaryQuotes(node); - } - }, - ObjectExpression(node) { - if (MODE === "consistent") { - checkConsistency(node, false); - } - if (MODE === "consistent-as-needed") { - checkConsistency(node, true); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/quotes.js b/node_modules/eslint/lib/rules/quotes.js deleted file mode 100644 index fa8bbae..0000000 --- a/node_modules/eslint/lib/rules/quotes.js +++ /dev/null @@ -1,297 +0,0 @@ -/** - * @fileoverview A rule to choose between single and double quote marks - * @author Matt DuVall , Brandon Payton - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Constants -//------------------------------------------------------------------------------ - -const QUOTE_SETTINGS = { - double: { - quote: "\"", - alternateQuote: "'", - description: "doublequote" - }, - single: { - quote: "'", - alternateQuote: "\"", - description: "singlequote" - }, - backtick: { - quote: "`", - alternateQuote: "\"", - description: "backtick" - } -}; - -// An unescaped newline is a newline preceded by an even number of backslashes. -const UNESCAPED_LINEBREAK_PATTERN = new RegExp(String.raw`(^|[^\\])(\\\\)*[${Array.from(astUtils.LINEBREAKS).join("")}]`); - -/** - * Switches quoting of javascript string between ' " and ` - * escaping and unescaping as necessary. - * Only escaping of the minimal set of characters is changed. - * Note: escaping of newlines when switching from backtick to other quotes is not handled. - * @param {string} str - A string to convert. - * @returns {string} The string with changed quotes. - * @private - */ -QUOTE_SETTINGS.double.convert = -QUOTE_SETTINGS.single.convert = -QUOTE_SETTINGS.backtick.convert = function(str) { - const newQuote = this.quote; - const oldQuote = str[0]; - - if (newQuote === oldQuote) { - return str; - } - return newQuote + str.slice(1, -1).replace(/\\(\${|\r\n?|\n|.)|["'`]|\${|(\r\n?|\n)/g, (match, escaped, newline) => { - if (escaped === oldQuote || oldQuote === "`" && escaped === "${") { - return escaped; // unescape - } - if (match === newQuote || newQuote === "`" && match === "${") { - return `\\${match}`; // escape - } - if (newline && oldQuote === "`") { - return "\\n"; // escape newlines - } - return match; - }) + newQuote; -}; - -const AVOID_ESCAPE = "avoid-escape"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce the consistent use of either backticks, double, or single quotes", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/quotes" - }, - - fixable: "code", - - schema: [ - { - enum: ["single", "double", "backtick"] - }, - { - anyOf: [ - { - enum: ["avoid-escape"] - }, - { - type: "object", - properties: { - avoidEscape: { - type: "boolean" - }, - allowTemplateLiterals: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - - const quoteOption = context.options[0], - settings = QUOTE_SETTINGS[quoteOption || "double"], - options = context.options[1], - allowTemplateLiterals = options && options.allowTemplateLiterals === true, - sourceCode = context.getSourceCode(); - let avoidEscape = options && options.avoidEscape === true; - - // deprecated - if (options === AVOID_ESCAPE) { - avoidEscape = true; - } - - /** - * Determines if a given node is part of JSX syntax. - * - * This function returns `true` in the following cases: - * - * - `
` ... If the literal is an attribute value, the parent of the literal is `JSXAttribute`. - * - `
foo
` ... If the literal is a text content, the parent of the literal is `JSXElement`. - * - * In particular, this function returns `false` in the following cases: - * - * - `
` - * - `
{"foo"}
` - * - * In both cases, inside of the braces is handled as normal JavaScript. - * The braces are `JSXExpressionContainer` nodes. - * - * @param {ASTNode} node The Literal node to check. - * @returns {boolean} True if the node is a part of JSX, false if not. - * @private - */ - function isJSXLiteral(node) { - return node.parent.type === "JSXAttribute" || node.parent.type === "JSXElement"; - } - - /** - * Checks whether or not a given node is a directive. - * The directive is a `ExpressionStatement` which has only a string literal. - * @param {ASTNode} node - A node to check. - * @returns {boolean} Whether or not the node is a directive. - * @private - */ - function isDirective(node) { - return ( - node.type === "ExpressionStatement" && - node.expression.type === "Literal" && - typeof node.expression.value === "string" - ); - } - - /** - * Checks whether or not a given node is a part of directive prologues. - * See also: http://www.ecma-international.org/ecma-262/6.0/#sec-directive-prologues-and-the-use-strict-directive - * @param {ASTNode} node - A node to check. - * @returns {boolean} Whether or not the node is a part of directive prologues. - * @private - */ - function isPartOfDirectivePrologue(node) { - const block = node.parent.parent; - - if (block.type !== "Program" && (block.type !== "BlockStatement" || !astUtils.isFunction(block.parent))) { - return false; - } - - // Check the node is at a prologue. - for (let i = 0; i < block.body.length; ++i) { - const statement = block.body[i]; - - if (statement === node.parent) { - return true; - } - if (!isDirective(statement)) { - break; - } - } - - return false; - } - - /** - * Checks whether or not a given node is allowed as non backtick. - * @param {ASTNode} node - A node to check. - * @returns {boolean} Whether or not the node is allowed as non backtick. - * @private - */ - function isAllowedAsNonBacktick(node) { - const parent = node.parent; - - switch (parent.type) { - - // Directive Prologues. - case "ExpressionStatement": - return isPartOfDirectivePrologue(node); - - // LiteralPropertyName. - case "Property": - case "MethodDefinition": - return parent.key === node && !parent.computed; - - // ModuleSpecifier. - case "ImportDeclaration": - case "ExportNamedDeclaration": - case "ExportAllDeclaration": - return parent.source === node; - - // Others don't allow. - default: - return false; - } - } - - return { - - Literal(node) { - const val = node.value, - rawVal = node.raw; - - if (settings && typeof val === "string") { - let isValid = (quoteOption === "backtick" && isAllowedAsNonBacktick(node)) || - isJSXLiteral(node) || - astUtils.isSurroundedBy(rawVal, settings.quote); - - if (!isValid && avoidEscape) { - isValid = astUtils.isSurroundedBy(rawVal, settings.alternateQuote) && rawVal.indexOf(settings.quote) >= 0; - } - - if (!isValid) { - context.report({ - node, - message: "Strings must use {{description}}.", - data: { - description: settings.description - }, - fix(fixer) { - return fixer.replaceText(node, settings.convert(node.raw)); - } - }); - } - } - }, - - TemplateLiteral(node) { - - // If backticks are expected or it's a tagged template, then this shouldn't throw an errors - if ( - allowTemplateLiterals || - quoteOption === "backtick" || - node.parent.type === "TaggedTemplateExpression" && node === node.parent.quasi - ) { - return; - } - - // A warning should be produced if the template literal only has one TemplateElement, and has no unescaped newlines. - const shouldWarn = node.quasis.length === 1 && !UNESCAPED_LINEBREAK_PATTERN.test(node.quasis[0].value.raw); - - if (shouldWarn) { - context.report({ - node, - message: "Strings must use {{description}}.", - data: { - description: settings.description - }, - fix(fixer) { - if (isPartOfDirectivePrologue(node)) { - - /* - * TemplateLiterals in a directive prologue aren't actually directives, but if they're - * in the directive prologue, then fixing them might turn them into directives and change - * the behavior of the code. - */ - return null; - } - return fixer.replaceText(node, settings.convert(sourceCode.getText(node))); - } - }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/radix.js b/node_modules/eslint/lib/rules/radix.js deleted file mode 100644 index 7e116a6..0000000 --- a/node_modules/eslint/lib/rules/radix.js +++ /dev/null @@ -1,172 +0,0 @@ -/** - * @fileoverview Rule to flag use of parseInt without a radix argument - * @author James Allardice - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const MODE_ALWAYS = "always", - MODE_AS_NEEDED = "as-needed"; - -/** - * Checks whether a given variable is shadowed or not. - * - * @param {eslint-scope.Variable} variable - A variable to check. - * @returns {boolean} `true` if the variable is shadowed. - */ -function isShadowed(variable) { - return variable.defs.length >= 1; -} - -/** - * Checks whether a given node is a MemberExpression of `parseInt` method or not. - * - * @param {ASTNode} node - A node to check. - * @returns {boolean} `true` if the node is a MemberExpression of `parseInt` - * method. - */ -function isParseIntMethod(node) { - return ( - node.type === "MemberExpression" && - !node.computed && - node.property.type === "Identifier" && - node.property.name === "parseInt" - ); -} - -/** - * Checks whether a given node is a valid value of radix or not. - * - * The following values are invalid. - * - * - A literal except numbers. - * - undefined. - * - * @param {ASTNode} radix - A node of radix to check. - * @returns {boolean} `true` if the node is valid. - */ -function isValidRadix(radix) { - return !( - (radix.type === "Literal" && typeof radix.value !== "number") || - (radix.type === "Identifier" && radix.name === "undefined") - ); -} - -/** - * Checks whether a given node is a default value of radix or not. - * - * @param {ASTNode} radix - A node of radix to check. - * @returns {boolean} `true` if the node is the literal node of `10`. - */ -function isDefaultRadix(radix) { - return radix.type === "Literal" && radix.value === 10; -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce the consistent use of the radix argument when using `parseInt()`", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/radix" - }, - - schema: [ - { - enum: ["always", "as-needed"] - } - ] - }, - - create(context) { - const mode = context.options[0] || MODE_ALWAYS; - - /** - * Checks the arguments of a given CallExpression node and reports it if it - * offends this rule. - * - * @param {ASTNode} node - A CallExpression node to check. - * @returns {void} - */ - function checkArguments(node) { - const args = node.arguments; - - switch (args.length) { - case 0: - context.report({ - node, - message: "Missing parameters." - }); - break; - - case 1: - if (mode === MODE_ALWAYS) { - context.report({ - node, - message: "Missing radix parameter." - }); - } - break; - - default: - if (mode === MODE_AS_NEEDED && isDefaultRadix(args[1])) { - context.report({ - node, - message: "Redundant radix parameter." - }); - } else if (!isValidRadix(args[1])) { - context.report({ - node, - message: "Invalid radix parameter." - }); - } - break; - } - } - - return { - "Program:exit"() { - const scope = context.getScope(); - let variable; - - // Check `parseInt()` - variable = astUtils.getVariableByName(scope, "parseInt"); - if (!isShadowed(variable)) { - variable.references.forEach(reference => { - const node = reference.identifier; - - if (astUtils.isCallee(node)) { - checkArguments(node.parent); - } - }); - } - - // Check `Number.parseInt()` - variable = astUtils.getVariableByName(scope, "Number"); - if (!isShadowed(variable)) { - variable.references.forEach(reference => { - const node = reference.identifier.parent; - - if (isParseIntMethod(node) && astUtils.isCallee(node)) { - checkArguments(node.parent); - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/require-await.js b/node_modules/eslint/lib/rules/require-await.js deleted file mode 100644 index 5517cf8..0000000 --- a/node_modules/eslint/lib/rules/require-await.js +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @fileoverview Rule to disallow async functions which have no `await` expression. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Capitalize the 1st letter of the given text. - * - * @param {string} text - The text to capitalize. - * @returns {string} The text that the 1st letter was capitalized. - */ -function capitalizeFirstLetter(text) { - return text[0].toUpperCase() + text.slice(1); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "disallow async functions which have no `await` expression", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/require-await" - }, - schema: [] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - let scopeInfo = null; - - /** - * Push the scope info object to the stack. - * - * @returns {void} - */ - function enterFunction() { - scopeInfo = { - upper: scopeInfo, - hasAwait: false - }; - } - - /** - * Pop the top scope info object from the stack. - * Also, it reports the function if needed. - * - * @param {ASTNode} node - The node to report. - * @returns {void} - */ - function exitFunction(node) { - if (node.async && !scopeInfo.hasAwait && !astUtils.isEmptyFunction(node)) { - context.report({ - node, - loc: astUtils.getFunctionHeadLoc(node, sourceCode), - message: "{{name}} has no 'await' expression.", - data: { - name: capitalizeFirstLetter( - astUtils.getFunctionNameWithKind(node) - ) - } - }); - } - - scopeInfo = scopeInfo.upper; - } - - return { - FunctionDeclaration: enterFunction, - FunctionExpression: enterFunction, - ArrowFunctionExpression: enterFunction, - "FunctionDeclaration:exit": exitFunction, - "FunctionExpression:exit": exitFunction, - "ArrowFunctionExpression:exit": exitFunction, - - AwaitExpression() { - scopeInfo.hasAwait = true; - }, - ForOfStatement(node) { - if (node.await) { - scopeInfo.hasAwait = true; - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/require-jsdoc.js b/node_modules/eslint/lib/rules/require-jsdoc.js deleted file mode 100644 index 91b90b7..0000000 --- a/node_modules/eslint/lib/rules/require-jsdoc.js +++ /dev/null @@ -1,106 +0,0 @@ -/** - * @fileoverview Rule to check for jsdoc presence. - * @author Gyandeep Singh - */ -"use strict"; - -module.exports = { - meta: { - docs: { - description: "require JSDoc comments", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/require-jsdoc" - }, - - schema: [ - { - type: "object", - properties: { - require: { - type: "object", - properties: { - ClassDeclaration: { - type: "boolean" - }, - MethodDefinition: { - type: "boolean" - }, - FunctionDeclaration: { - type: "boolean" - }, - ArrowFunctionExpression: { - type: "boolean" - }, - FunctionExpression: { - type: "boolean" - } - }, - additionalProperties: false - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const source = context.getSourceCode(); - const DEFAULT_OPTIONS = { - FunctionDeclaration: true, - MethodDefinition: false, - ClassDeclaration: false, - ArrowFunctionExpression: false, - FunctionExpression: false - }; - const options = Object.assign(DEFAULT_OPTIONS, context.options[0] && context.options[0].require || {}); - - /** - * Report the error message - * @param {ASTNode} node node to report - * @returns {void} - */ - function report(node) { - context.report({ node, message: "Missing JSDoc comment." }); - } - - /** - * Check if the jsdoc comment is present or not. - * @param {ASTNode} node node to examine - * @returns {void} - */ - function checkJsDoc(node) { - const jsdocComment = source.getJSDocComment(node); - - if (!jsdocComment) { - report(node); - } - } - - return { - FunctionDeclaration(node) { - if (options.FunctionDeclaration) { - checkJsDoc(node); - } - }, - FunctionExpression(node) { - if ( - (options.MethodDefinition && node.parent.type === "MethodDefinition") || - (options.FunctionExpression && (node.parent.type === "VariableDeclarator" || (node.parent.type === "Property" && node === node.parent.value))) - ) { - checkJsDoc(node); - } - }, - ClassDeclaration(node) { - if (options.ClassDeclaration) { - checkJsDoc(node); - } - }, - ArrowFunctionExpression(node) { - if (options.ArrowFunctionExpression && node.parent.type === "VariableDeclarator") { - checkJsDoc(node); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/require-yield.js b/node_modules/eslint/lib/rules/require-yield.js deleted file mode 100644 index 83a2987..0000000 --- a/node_modules/eslint/lib/rules/require-yield.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @fileoverview Rule to flag the generator functions that does not have yield. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require generator functions to contain `yield`", - category: "ECMAScript 6", - recommended: true, - url: "https://eslint.org/docs/rules/require-yield" - }, - - schema: [] - }, - - create(context) { - const stack = []; - - /** - * If the node is a generator function, start counting `yield` keywords. - * @param {Node} node - A function node to check. - * @returns {void} - */ - function beginChecking(node) { - if (node.generator) { - stack.push(0); - } - } - - /** - * If the node is a generator function, end counting `yield` keywords, then - * reports result. - * @param {Node} node - A function node to check. - * @returns {void} - */ - function endChecking(node) { - if (!node.generator) { - return; - } - - const countYield = stack.pop(); - - if (countYield === 0 && node.body.body.length > 0) { - context.report({ node, message: "This generator function does not have 'yield'." }); - } - } - - return { - FunctionDeclaration: beginChecking, - "FunctionDeclaration:exit": endChecking, - FunctionExpression: beginChecking, - "FunctionExpression:exit": endChecking, - - // Increases the count of `yield` keyword. - YieldExpression() { - - /* istanbul ignore else */ - if (stack.length > 0) { - stack[stack.length - 1] += 1; - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/rest-spread-spacing.js b/node_modules/eslint/lib/rules/rest-spread-spacing.js deleted file mode 100644 index e87d881..0000000 --- a/node_modules/eslint/lib/rules/rest-spread-spacing.js +++ /dev/null @@ -1,114 +0,0 @@ -/** - * @fileoverview Enforce spacing between rest and spread operators and their expressions. - * @author Kai Cataldo - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce spacing between rest and spread operators and their expressions", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/rest-spread-spacing" - }, - fixable: "whitespace", - schema: [ - { - enum: ["always", "never"] - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(), - alwaysSpace = context.options[0] === "always"; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Checks whitespace between rest/spread operators and their expressions - * @param {ASTNode} node - The node to check - * @returns {void} - */ - function checkWhiteSpace(node) { - const operator = sourceCode.getFirstToken(node), - nextToken = sourceCode.getTokenAfter(operator), - hasWhitespace = sourceCode.isSpaceBetweenTokens(operator, nextToken); - let type; - - switch (node.type) { - case "SpreadElement": - type = "spread"; - if (node.parent.type === "ObjectExpression") { - type += " property"; - } - break; - case "RestElement": - type = "rest"; - if (node.parent.type === "ObjectPattern") { - type += " property"; - } - break; - case "ExperimentalSpreadProperty": - type = "spread property"; - break; - case "ExperimentalRestProperty": - type = "rest property"; - break; - default: - return; - } - - if (alwaysSpace && !hasWhitespace) { - context.report({ - node, - loc: { - line: operator.loc.end.line, - column: operator.loc.end.column - }, - message: "Expected whitespace after {{type}} operator.", - data: { - type - }, - fix(fixer) { - return fixer.replaceTextRange([operator.range[1], nextToken.range[0]], " "); - } - }); - } else if (!alwaysSpace && hasWhitespace) { - context.report({ - node, - loc: { - line: operator.loc.end.line, - column: operator.loc.end.column - }, - message: "Unexpected whitespace after {{type}} operator.", - data: { - type - }, - fix(fixer) { - return fixer.removeRange([operator.range[1], nextToken.range[0]]); - } - }); - } - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - SpreadElement: checkWhiteSpace, - RestElement: checkWhiteSpace, - ExperimentalSpreadProperty: checkWhiteSpace, - ExperimentalRestProperty: checkWhiteSpace - }; - } -}; diff --git a/node_modules/eslint/lib/rules/semi-spacing.js b/node_modules/eslint/lib/rules/semi-spacing.js deleted file mode 100644 index 07af993..0000000 --- a/node_modules/eslint/lib/rules/semi-spacing.js +++ /dev/null @@ -1,212 +0,0 @@ -/** - * @fileoverview Validates spacing before and after semicolon - * @author Mathias Schreck - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing before and after semicolons", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/semi-spacing" - }, - - fixable: "whitespace", - - schema: [ - { - type: "object", - properties: { - before: { - type: "boolean" - }, - after: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const config = context.options[0], - sourceCode = context.getSourceCode(); - let requireSpaceBefore = false, - requireSpaceAfter = true; - - if (typeof config === "object") { - if (config.hasOwnProperty("before")) { - requireSpaceBefore = config.before; - } - if (config.hasOwnProperty("after")) { - requireSpaceAfter = config.after; - } - } - - /** - * Checks if a given token has leading whitespace. - * @param {Object} token The token to check. - * @returns {boolean} True if the given token has leading space, false if not. - */ - function hasLeadingSpace(token) { - const tokenBefore = sourceCode.getTokenBefore(token); - - return tokenBefore && astUtils.isTokenOnSameLine(tokenBefore, token) && sourceCode.isSpaceBetweenTokens(tokenBefore, token); - } - - /** - * Checks if a given token has trailing whitespace. - * @param {Object} token The token to check. - * @returns {boolean} True if the given token has trailing space, false if not. - */ - function hasTrailingSpace(token) { - const tokenAfter = sourceCode.getTokenAfter(token); - - return tokenAfter && astUtils.isTokenOnSameLine(token, tokenAfter) && sourceCode.isSpaceBetweenTokens(token, tokenAfter); - } - - /** - * Checks if the given token is the last token in its line. - * @param {Token} token The token to check. - * @returns {boolean} Whether or not the token is the last in its line. - */ - function isLastTokenInCurrentLine(token) { - const tokenAfter = sourceCode.getTokenAfter(token); - - return !(tokenAfter && astUtils.isTokenOnSameLine(token, tokenAfter)); - } - - /** - * Checks if the given token is the first token in its line - * @param {Token} token The token to check. - * @returns {boolean} Whether or not the token is the first in its line. - */ - function isFirstTokenInCurrentLine(token) { - const tokenBefore = sourceCode.getTokenBefore(token); - - return !(tokenBefore && astUtils.isTokenOnSameLine(token, tokenBefore)); - } - - /** - * Checks if the next token of a given token is a closing parenthesis. - * @param {Token} token The token to check. - * @returns {boolean} Whether or not the next token of a given token is a closing parenthesis. - */ - function isBeforeClosingParen(token) { - const nextToken = sourceCode.getTokenAfter(token); - - return (nextToken && astUtils.isClosingBraceToken(nextToken) || astUtils.isClosingParenToken(nextToken)); - } - - /** - * Reports if the given token has invalid spacing. - * @param {Token} token The semicolon token to check. - * @param {ASTNode} node The corresponding node of the token. - * @returns {void} - */ - function checkSemicolonSpacing(token, node) { - if (astUtils.isSemicolonToken(token)) { - const location = token.loc.start; - - if (hasLeadingSpace(token)) { - if (!requireSpaceBefore) { - context.report({ - node, - loc: location, - message: "Unexpected whitespace before semicolon.", - fix(fixer) { - const tokenBefore = sourceCode.getTokenBefore(token); - - return fixer.removeRange([tokenBefore.range[1], token.range[0]]); - } - }); - } - } else { - if (requireSpaceBefore) { - context.report({ - node, - loc: location, - message: "Missing whitespace before semicolon.", - fix(fixer) { - return fixer.insertTextBefore(token, " "); - } - }); - } - } - - if (!isFirstTokenInCurrentLine(token) && !isLastTokenInCurrentLine(token) && !isBeforeClosingParen(token)) { - if (hasTrailingSpace(token)) { - if (!requireSpaceAfter) { - context.report({ - node, - loc: location, - message: "Unexpected whitespace after semicolon.", - fix(fixer) { - const tokenAfter = sourceCode.getTokenAfter(token); - - return fixer.removeRange([token.range[1], tokenAfter.range[0]]); - } - }); - } - } else { - if (requireSpaceAfter) { - context.report({ - node, - loc: location, - message: "Missing whitespace after semicolon.", - fix(fixer) { - return fixer.insertTextAfter(token, " "); - } - }); - } - } - } - } - } - - /** - * Checks the spacing of the semicolon with the assumption that the last token is the semicolon. - * @param {ASTNode} node The node to check. - * @returns {void} - */ - function checkNode(node) { - const token = sourceCode.getLastToken(node); - - checkSemicolonSpacing(token, node); - } - - return { - VariableDeclaration: checkNode, - ExpressionStatement: checkNode, - BreakStatement: checkNode, - ContinueStatement: checkNode, - DebuggerStatement: checkNode, - ReturnStatement: checkNode, - ThrowStatement: checkNode, - ImportDeclaration: checkNode, - ExportNamedDeclaration: checkNode, - ExportAllDeclaration: checkNode, - ExportDefaultDeclaration: checkNode, - ForStatement(node) { - if (node.init) { - checkSemicolonSpacing(sourceCode.getTokenAfter(node.init), node); - } - - if (node.test) { - checkSemicolonSpacing(sourceCode.getTokenAfter(node.test), node); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/semi-style.js b/node_modules/eslint/lib/rules/semi-style.js deleted file mode 100644 index de65928..0000000 --- a/node_modules/eslint/lib/rules/semi-style.js +++ /dev/null @@ -1,144 +0,0 @@ -/** - * @fileoverview Rule to enforce location of semicolons. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -const SELECTOR = `:matches(${ - [ - "BreakStatement", "ContinueStatement", "DebuggerStatement", - "DoWhileStatement", "ExportAllDeclaration", - "ExportDefaultDeclaration", "ExportNamedDeclaration", - "ExpressionStatement", "ImportDeclaration", "ReturnStatement", - "ThrowStatement", "VariableDeclaration" - ].join(",") -})`; - -/** - * Get the child node list of a given node. - * This returns `Program#body`, `BlockStatement#body`, or `SwitchCase#consequent`. - * This is used to check whether a node is the first/last child. - * @param {Node} node A node to get child node list. - * @returns {Node[]|null} The child node list. - */ -function getChildren(node) { - const t = node.type; - - if (t === "BlockStatement" || t === "Program") { - return node.body; - } - if (t === "SwitchCase") { - return node.consequent; - } - return null; -} - -/** - * Check whether a given node is the last statement in the parent block. - * @param {Node} node A node to check. - * @returns {boolean} `true` if the node is the last statement in the parent block. - */ -function isLastChild(node) { - const t = node.parent.type; - - if (t === "IfStatement" && node.parent.consequent === node && node.parent.alternate) { // before `else` keyword. - return true; - } - if (t === "DoWhileStatement") { // before `while` keyword. - return true; - } - const nodeList = getChildren(node.parent); - - return nodeList !== null && nodeList[nodeList.length - 1] === node; // before `}` or etc. -} - -module.exports = { - meta: { - docs: { - description: "enforce location of semicolons", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/semi-style" - }, - schema: [{ enum: ["last", "first"] }], - fixable: "whitespace" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const option = context.options[0] || "last"; - - /** - * Check the given semicolon token. - * @param {Token} semiToken The semicolon token to check. - * @param {"first"|"last"} expected The expected location to check. - * @returns {void} - */ - function check(semiToken, expected) { - const prevToken = sourceCode.getTokenBefore(semiToken); - const nextToken = sourceCode.getTokenAfter(semiToken); - const prevIsSameLine = !prevToken || astUtils.isTokenOnSameLine(prevToken, semiToken); - const nextIsSameLine = !nextToken || astUtils.isTokenOnSameLine(semiToken, nextToken); - - if ((expected === "last" && !prevIsSameLine) || (expected === "first" && !nextIsSameLine)) { - context.report({ - loc: semiToken.loc, - message: "Expected this semicolon to be at {{pos}}.", - data: { - pos: (expected === "last") - ? "the end of the previous line" - : "the beginning of the next line" - }, - fix(fixer) { - if (prevToken && nextToken && sourceCode.commentsExistBetween(prevToken, nextToken)) { - return null; - } - - const start = prevToken ? prevToken.range[1] : semiToken.range[0]; - const end = nextToken ? nextToken.range[0] : semiToken.range[1]; - const text = (expected === "last") ? ";\n" : "\n;"; - - return fixer.replaceTextRange([start, end], text); - } - }); - } - } - - return { - [SELECTOR](node) { - if (option === "first" && isLastChild(node)) { - return; - } - - const lastToken = sourceCode.getLastToken(node); - - if (astUtils.isSemicolonToken(lastToken)) { - check(lastToken, option); - } - }, - - ForStatement(node) { - const firstSemi = node.init && sourceCode.getTokenAfter(node.init, astUtils.isSemicolonToken); - const secondSemi = node.test && sourceCode.getTokenAfter(node.test, astUtils.isSemicolonToken); - - if (firstSemi) { - check(firstSemi, "last"); - } - if (secondSemi) { - check(secondSemi, "last"); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/semi.js b/node_modules/eslint/lib/rules/semi.js deleted file mode 100644 index 33a214d..0000000 --- a/node_modules/eslint/lib/rules/semi.js +++ /dev/null @@ -1,326 +0,0 @@ -/** - * @fileoverview Rule to flag missing semicolons. - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const FixTracker = require("../util/fix-tracker"); -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow semicolons instead of ASI", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/semi" - }, - - fixable: "code", - - schema: { - anyOf: [ - { - type: "array", - items: [ - { - enum: ["never"] - }, - { - type: "object", - properties: { - beforeStatementContinuationChars: { - enum: ["always", "any", "never"] - } - }, - additionalProperties: false - } - ], - minItems: 0, - maxItems: 2 - }, - { - type: "array", - items: [ - { - enum: ["always"] - }, - { - type: "object", - properties: { - omitLastInOneLineBlock: { type: "boolean" } - }, - additionalProperties: false - } - ], - minItems: 0, - maxItems: 2 - } - ] - } - }, - - create(context) { - - const OPT_OUT_PATTERN = /^[-[(/+`]/; // One of [(/+-` - const options = context.options[1]; - const never = context.options[0] === "never"; - const exceptOneLine = Boolean(options && options.omitLastInOneLineBlock); - const beforeStatementContinuationChars = (options && options.beforeStatementContinuationChars) || "any"; - const sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Reports a semicolon error with appropriate location and message. - * @param {ASTNode} node The node with an extra or missing semicolon. - * @param {boolean} missing True if the semicolon is missing. - * @returns {void} - */ - function report(node, missing) { - const lastToken = sourceCode.getLastToken(node); - let message, - fix, - loc = lastToken.loc; - - if (!missing) { - message = "Missing semicolon."; - loc = loc.end; - fix = function(fixer) { - return fixer.insertTextAfter(lastToken, ";"); - }; - } else { - message = "Extra semicolon."; - loc = loc.start; - fix = function(fixer) { - - /* - * Expand the replacement range to include the surrounding - * tokens to avoid conflicting with no-extra-semi. - * https://github.com/eslint/eslint/issues/7928 - */ - return new FixTracker(fixer, sourceCode) - .retainSurroundingTokens(lastToken) - .remove(lastToken); - }; - } - - context.report({ - node, - loc, - message, - fix - }); - - } - - /** - * Check whether a given semicolon token is redandant. - * @param {Token} semiToken A semicolon token to check. - * @returns {boolean} `true` if the next token is `;` or `}`. - */ - function isRedundantSemi(semiToken) { - const nextToken = sourceCode.getTokenAfter(semiToken); - - return ( - !nextToken || - astUtils.isClosingBraceToken(nextToken) || - astUtils.isSemicolonToken(nextToken) - ); - } - - /** - * Check whether a given token is the closing brace of an arrow function. - * @param {Token} lastToken A token to check. - * @returns {boolean} `true` if the token is the closing brace of an arrow function. - */ - function isEndOfArrowBlock(lastToken) { - if (!astUtils.isClosingBraceToken(lastToken)) { - return false; - } - const node = sourceCode.getNodeByRangeIndex(lastToken.range[0]); - - return ( - node.type === "BlockStatement" && - node.parent.type === "ArrowFunctionExpression" - ); - } - - /** - * Check whether a given node is on the same line with the next token. - * @param {Node} node A statement node to check. - * @returns {boolean} `true` if the node is on the same line with the next token. - */ - function isOnSameLineWithNextToken(node) { - const prevToken = sourceCode.getLastToken(node, 1); - const nextToken = sourceCode.getTokenAfter(node); - - return !!nextToken && astUtils.isTokenOnSameLine(prevToken, nextToken); - } - - /** - * Check whether a given node can connect the next line if the next line is unreliable. - * @param {Node} node A statement node to check. - * @returns {boolean} `true` if the node can connect the next line. - */ - function maybeAsiHazardAfter(node) { - const t = node.type; - - if (t === "DoWhileStatement" || - t === "BreakStatement" || - t === "ContinueStatement" || - t === "DebuggerStatement" || - t === "ImportDeclaration" || - t === "ExportAllDeclaration" - ) { - return false; - } - if (t === "ReturnStatement") { - return Boolean(node.argument); - } - if (t === "ExportNamedDeclaration") { - return Boolean(node.declaration); - } - if (isEndOfArrowBlock(sourceCode.getLastToken(node, 1))) { - return false; - } - - return true; - } - - /** - * Check whether a given token can connect the previous statement. - * @param {Token} token A token to check. - * @returns {boolean} `true` if the token is one of `[`, `(`, `/`, `+`, `-`, ```, `++`, and `--`. - */ - function maybeAsiHazardBefore(token) { - return ( - Boolean(token) && - OPT_OUT_PATTERN.test(token.value) && - token.value !== "++" && - token.value !== "--" - ); - } - - /** - * Check if the semicolon of a given node is unnecessary, only true if: - * - next token is a valid statement divider (`;` or `}`). - * - next token is on a new line and the node is not connectable to the new line. - * @param {Node} node A statement node to check. - * @returns {boolean} whether the semicolon is unnecessary. - */ - function canRemoveSemicolon(node) { - if (isRedundantSemi(sourceCode.getLastToken(node))) { - return true; // `;;` or `;}` - } - if (isOnSameLineWithNextToken(node)) { - return false; // One liner. - } - if (beforeStatementContinuationChars === "never" && !maybeAsiHazardAfter(node)) { - return true; // ASI works. This statement doesn't connect to the next. - } - if (!maybeAsiHazardBefore(sourceCode.getTokenAfter(node))) { - return true; // ASI works. The next token doesn't connect to this statement. - } - - return false; - } - - /** - * Checks a node to see if it's in a one-liner block statement. - * @param {ASTNode} node The node to check. - * @returns {boolean} whether the node is in a one-liner block statement. - */ - function isOneLinerBlock(node) { - const parent = node.parent; - const nextToken = sourceCode.getTokenAfter(node); - - if (!nextToken || nextToken.value !== "}") { - return false; - } - return ( - !!parent && - parent.type === "BlockStatement" && - parent.loc.start.line === parent.loc.end.line - ); - } - - /** - * Checks a node to see if it's followed by a semicolon. - * @param {ASTNode} node The node to check. - * @returns {void} - */ - function checkForSemicolon(node) { - const isSemi = astUtils.isSemicolonToken(sourceCode.getLastToken(node)); - - if (never) { - if (isSemi && canRemoveSemicolon(node)) { - report(node, true); - } else if (!isSemi && beforeStatementContinuationChars === "always" && maybeAsiHazardBefore(sourceCode.getTokenAfter(node))) { - report(node); - } - } else { - const oneLinerBlock = (exceptOneLine && isOneLinerBlock(node)); - - if (isSemi && oneLinerBlock) { - report(node, true); - } else if (!isSemi && !oneLinerBlock) { - report(node); - } - } - } - - /** - * Checks to see if there's a semicolon after a variable declaration. - * @param {ASTNode} node The node to check. - * @returns {void} - */ - function checkForSemicolonForVariableDeclaration(node) { - const parent = node.parent; - - if ((parent.type !== "ForStatement" || parent.init !== node) && - (!/^For(?:In|Of)Statement/.test(parent.type) || parent.left !== node) - ) { - checkForSemicolon(node); - } - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - VariableDeclaration: checkForSemicolonForVariableDeclaration, - ExpressionStatement: checkForSemicolon, - ReturnStatement: checkForSemicolon, - ThrowStatement: checkForSemicolon, - DoWhileStatement: checkForSemicolon, - DebuggerStatement: checkForSemicolon, - BreakStatement: checkForSemicolon, - ContinueStatement: checkForSemicolon, - ImportDeclaration: checkForSemicolon, - ExportAllDeclaration: checkForSemicolon, - ExportNamedDeclaration(node) { - if (!node.declaration) { - checkForSemicolon(node); - } - }, - ExportDefaultDeclaration(node) { - if (!/(?:Class|Function)Declaration/.test(node.declaration.type)) { - checkForSemicolon(node); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/sort-imports.js b/node_modules/eslint/lib/rules/sort-imports.js deleted file mode 100644 index 8735be5..0000000 --- a/node_modules/eslint/lib/rules/sort-imports.js +++ /dev/null @@ -1,197 +0,0 @@ -/** - * @fileoverview Rule to require sorting of import declarations - * @author Christian Schuller - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce sorted import declarations within modules", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/sort-imports" - }, - - schema: [ - { - type: "object", - properties: { - ignoreCase: { - type: "boolean" - }, - memberSyntaxSortOrder: { - type: "array", - items: { - enum: ["none", "all", "multiple", "single"] - }, - uniqueItems: true, - minItems: 4, - maxItems: 4 - }, - ignoreMemberSort: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - fixable: "code" - }, - - create(context) { - - const configuration = context.options[0] || {}, - ignoreCase = configuration.ignoreCase || false, - ignoreMemberSort = configuration.ignoreMemberSort || false, - memberSyntaxSortOrder = configuration.memberSyntaxSortOrder || ["none", "all", "multiple", "single"], - sourceCode = context.getSourceCode(); - let previousDeclaration = null; - - /** - * Gets the used member syntax style. - * - * import "my-module.js" --> none - * import * as myModule from "my-module.js" --> all - * import {myMember} from "my-module.js" --> single - * import {foo, bar} from "my-module.js" --> multiple - * - * @param {ASTNode} node - the ImportDeclaration node. - * @returns {string} used member parameter style, ["all", "multiple", "single"] - */ - function usedMemberSyntax(node) { - if (node.specifiers.length === 0) { - return "none"; - } - if (node.specifiers[0].type === "ImportNamespaceSpecifier") { - return "all"; - } - if (node.specifiers.length === 1) { - return "single"; - } - return "multiple"; - - } - - /** - * Gets the group by member parameter index for given declaration. - * @param {ASTNode} node - the ImportDeclaration node. - * @returns {number} the declaration group by member index. - */ - function getMemberParameterGroupIndex(node) { - return memberSyntaxSortOrder.indexOf(usedMemberSyntax(node)); - } - - /** - * Gets the local name of the first imported module. - * @param {ASTNode} node - the ImportDeclaration node. - * @returns {?string} the local name of the first imported module. - */ - function getFirstLocalMemberName(node) { - if (node.specifiers[0]) { - return node.specifiers[0].local.name; - } - return null; - - } - - return { - ImportDeclaration(node) { - if (previousDeclaration) { - const currentMemberSyntaxGroupIndex = getMemberParameterGroupIndex(node), - previousMemberSyntaxGroupIndex = getMemberParameterGroupIndex(previousDeclaration); - let currentLocalMemberName = getFirstLocalMemberName(node), - previousLocalMemberName = getFirstLocalMemberName(previousDeclaration); - - if (ignoreCase) { - previousLocalMemberName = previousLocalMemberName && previousLocalMemberName.toLowerCase(); - currentLocalMemberName = currentLocalMemberName && currentLocalMemberName.toLowerCase(); - } - - /* - * When the current declaration uses a different member syntax, - * then check if the ordering is correct. - * Otherwise, make a default string compare (like rule sort-vars to be consistent) of the first used local member name. - */ - if (currentMemberSyntaxGroupIndex !== previousMemberSyntaxGroupIndex) { - if (currentMemberSyntaxGroupIndex < previousMemberSyntaxGroupIndex) { - context.report({ - node, - message: "Expected '{{syntaxA}}' syntax before '{{syntaxB}}' syntax.", - data: { - syntaxA: memberSyntaxSortOrder[currentMemberSyntaxGroupIndex], - syntaxB: memberSyntaxSortOrder[previousMemberSyntaxGroupIndex] - } - }); - } - } else { - if (previousLocalMemberName && - currentLocalMemberName && - currentLocalMemberName < previousLocalMemberName - ) { - context.report({ - node, - message: "Imports should be sorted alphabetically." - }); - } - } - } - - if (!ignoreMemberSort) { - const importSpecifiers = node.specifiers.filter(specifier => specifier.type === "ImportSpecifier"); - const getSortableName = ignoreCase ? specifier => specifier.local.name.toLowerCase() : specifier => specifier.local.name; - const firstUnsortedIndex = importSpecifiers.map(getSortableName).findIndex((name, index, array) => array[index - 1] > name); - - if (firstUnsortedIndex !== -1) { - context.report({ - node: importSpecifiers[firstUnsortedIndex], - message: "Member '{{memberName}}' of the import declaration should be sorted alphabetically.", - data: { memberName: importSpecifiers[firstUnsortedIndex].local.name }, - fix(fixer) { - if (importSpecifiers.some(specifier => - sourceCode.getCommentsBefore(specifier).length || sourceCode.getCommentsAfter(specifier).length)) { - - // If there are comments in the ImportSpecifier list, don't rearrange the specifiers. - return null; - } - - return fixer.replaceTextRange( - [importSpecifiers[0].range[0], importSpecifiers[importSpecifiers.length - 1].range[1]], - importSpecifiers - - // Clone the importSpecifiers array to avoid mutating it - .slice() - - // Sort the array into the desired order - .sort((specifierA, specifierB) => { - const aName = getSortableName(specifierA); - const bName = getSortableName(specifierB); - - return aName > bName ? 1 : -1; - }) - - // Build a string out of the sorted list of import specifiers and the text between the originals - .reduce((sourceText, specifier, index) => { - const textAfterSpecifier = index === importSpecifiers.length - 1 - ? "" - : sourceCode.getText().slice(importSpecifiers[index].range[1], importSpecifiers[index + 1].range[0]); - - return sourceText + sourceCode.getText(specifier) + textAfterSpecifier; - }, "") - ); - } - }); - } - } - - previousDeclaration = node; - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/sort-keys.js b/node_modules/eslint/lib/rules/sort-keys.js deleted file mode 100644 index 9318e2f..0000000 --- a/node_modules/eslint/lib/rules/sort-keys.js +++ /dev/null @@ -1,158 +0,0 @@ -/** - * @fileoverview Rule to require object keys to be sorted - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"), - naturalCompare = require("natural-compare"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Gets the property name of the given `Property` node. - * - * - If the property's key is an `Identifier` node, this returns the key's name - * whether it's a computed property or not. - * - If the property has a static name, this returns the static name. - * - Otherwise, this returns null. - * - * @param {ASTNode} node - The `Property` node to get. - * @returns {string|null} The property name or null. - * @private - */ -function getPropertyName(node) { - return astUtils.getStaticPropertyName(node) || node.key.name || null; -} - -/** - * Functions which check that the given 2 names are in specific order. - * - * Postfix `I` is meant insensitive. - * Postfix `N` is meant natual. - * - * @private - */ -const isValidOrders = { - asc(a, b) { - return a <= b; - }, - ascI(a, b) { - return a.toLowerCase() <= b.toLowerCase(); - }, - ascN(a, b) { - return naturalCompare(a, b) <= 0; - }, - ascIN(a, b) { - return naturalCompare(a.toLowerCase(), b.toLowerCase()) <= 0; - }, - desc(a, b) { - return isValidOrders.asc(b, a); - }, - descI(a, b) { - return isValidOrders.ascI(b, a); - }, - descN(a, b) { - return isValidOrders.ascN(b, a); - }, - descIN(a, b) { - return isValidOrders.ascIN(b, a); - } -}; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require object keys to be sorted", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/sort-keys" - }, - schema: [ - { - enum: ["asc", "desc"] - }, - { - type: "object", - properties: { - caseSensitive: { - type: "boolean" - }, - natural: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - // Parse options. - const order = context.options[0] || "asc"; - const options = context.options[1]; - const insensitive = (options && options.caseSensitive) === false; - const natual = Boolean(options && options.natural); - const isValidOrder = isValidOrders[ - order + (insensitive ? "I" : "") + (natual ? "N" : "") - ]; - - // The stack to save the previous property's name for each object literals. - let stack = null; - - return { - ObjectExpression() { - stack = { - upper: stack, - prevName: null - }; - }, - - "ObjectExpression:exit"() { - stack = stack.upper; - }, - - Property(node) { - if (node.parent.type === "ObjectPattern") { - return; - } - - const prevName = stack.prevName; - const thisName = getPropertyName(node); - - stack.prevName = thisName || prevName; - - if (!prevName || !thisName) { - return; - } - - if (!isValidOrder(prevName, thisName)) { - context.report({ - node, - loc: node.key.loc, - message: "Expected object keys to be in {{natual}}{{insensitive}}{{order}}ending order. '{{thisName}}' should be before '{{prevName}}'.", - data: { - thisName, - prevName, - order, - insensitive: insensitive ? "insensitive " : "", - natual: natual ? "natural " : "" - } - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/sort-vars.js b/node_modules/eslint/lib/rules/sort-vars.js deleted file mode 100644 index 334deb0..0000000 --- a/node_modules/eslint/lib/rules/sort-vars.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @fileoverview Rule to require sorting of variables within a single Variable Declaration block - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require variables within the same declaration block to be sorted", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/sort-vars" - }, - - schema: [ - { - type: "object", - properties: { - ignoreCase: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - fixable: "code" - }, - - create(context) { - - const configuration = context.options[0] || {}, - ignoreCase = configuration.ignoreCase || false, - sourceCode = context.getSourceCode(); - - return { - VariableDeclaration(node) { - const idDeclarations = node.declarations.filter(decl => decl.id.type === "Identifier"); - const getSortableName = ignoreCase ? decl => decl.id.name.toLowerCase() : decl => decl.id.name; - const unfixable = idDeclarations.some(decl => decl.init !== null && decl.init.type !== "Literal"); - let fixed = false; - - idDeclarations.slice(1).reduce((memo, decl) => { - const lastVariableName = getSortableName(memo), - currentVariableName = getSortableName(decl); - - if (currentVariableName < lastVariableName) { - context.report({ - node: decl, - message: "Variables within the same declaration block should be sorted alphabetically.", - fix(fixer) { - if (unfixable || fixed) { - return null; - } - return fixer.replaceTextRange( - [idDeclarations[0].range[0], idDeclarations[idDeclarations.length - 1].range[1]], - idDeclarations - - // Clone the idDeclarations array to avoid mutating it - .slice() - - // Sort the array into the desired order - .sort((declA, declB) => { - const aName = getSortableName(declA); - const bName = getSortableName(declB); - - return aName > bName ? 1 : -1; - }) - - // Build a string out of the sorted list of identifier declarations and the text between the originals - .reduce((sourceText, identifier, index) => { - const textAfterIdentifier = index === idDeclarations.length - 1 - ? "" - : sourceCode.getText().slice(idDeclarations[index].range[1], idDeclarations[index + 1].range[0]); - - return sourceText + sourceCode.getText(identifier) + textAfterIdentifier; - }, "") - - ); - } - }); - fixed = true; - return memo; - } - return decl; - - }, idDeclarations[0]); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/space-before-blocks.js b/node_modules/eslint/lib/rules/space-before-blocks.js deleted file mode 100644 index 2b82066..0000000 --- a/node_modules/eslint/lib/rules/space-before-blocks.js +++ /dev/null @@ -1,149 +0,0 @@ -/** - * @fileoverview A rule to ensure whitespace before blocks. - * @author Mathias Schreck - */ - -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing before blocks", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/space-before-blocks" - }, - - fixable: "whitespace", - - schema: [ - { - oneOf: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - keywords: { - enum: ["always", "never"] - }, - functions: { - enum: ["always", "never"] - }, - classes: { - enum: ["always", "never"] - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - const config = context.options[0], - sourceCode = context.getSourceCode(); - let checkFunctions = true, - checkKeywords = true, - checkClasses = true; - - if (typeof config === "object") { - checkFunctions = config.functions !== "never"; - checkKeywords = config.keywords !== "never"; - checkClasses = config.classes !== "never"; - } else if (config === "never") { - checkFunctions = false; - checkKeywords = false; - checkClasses = false; - } - - /** - * Checks whether or not a given token is an arrow operator (=>) or a keyword - * in order to avoid to conflict with `arrow-spacing` and `keyword-spacing`. - * - * @param {Token} token - A token to check. - * @returns {boolean} `true` if the token is an arrow operator. - */ - function isConflicted(token) { - return (token.type === "Punctuator" && token.value === "=>") || token.type === "Keyword"; - } - - /** - * Checks the given BlockStatement node has a preceding space if it doesn’t start on a new line. - * @param {ASTNode|Token} node The AST node of a BlockStatement. - * @returns {void} undefined. - */ - function checkPrecedingSpace(node) { - const precedingToken = sourceCode.getTokenBefore(node); - - if (precedingToken && !isConflicted(precedingToken) && astUtils.isTokenOnSameLine(precedingToken, node)) { - const hasSpace = sourceCode.isSpaceBetweenTokens(precedingToken, node); - const parent = context.getAncestors().pop(); - let requireSpace; - - if (parent.type === "FunctionExpression" || parent.type === "FunctionDeclaration") { - requireSpace = checkFunctions; - } else if (node.type === "ClassBody") { - requireSpace = checkClasses; - } else { - requireSpace = checkKeywords; - } - - if (requireSpace) { - if (!hasSpace) { - context.report({ - node, - message: "Missing space before opening brace.", - fix(fixer) { - return fixer.insertTextBefore(node, " "); - } - }); - } - } else { - if (hasSpace) { - context.report({ - node, - message: "Unexpected space before opening brace.", - fix(fixer) { - return fixer.removeRange([precedingToken.range[1], node.range[0]]); - } - }); - } - } - } - } - - /** - * Checks if the CaseBlock of an given SwitchStatement node has a preceding space. - * @param {ASTNode} node The node of a SwitchStatement. - * @returns {void} undefined. - */ - function checkSpaceBeforeCaseBlock(node) { - const cases = node.cases; - let openingBrace; - - if (cases.length > 0) { - openingBrace = sourceCode.getTokenBefore(cases[0]); - } else { - openingBrace = sourceCode.getLastToken(node, 1); - } - - checkPrecedingSpace(openingBrace); - } - - return { - BlockStatement: checkPrecedingSpace, - ClassBody: checkPrecedingSpace, - SwitchStatement: checkSpaceBeforeCaseBlock - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/space-before-function-paren.js b/node_modules/eslint/lib/rules/space-before-function-paren.js deleted file mode 100644 index 51f6cc4..0000000 --- a/node_modules/eslint/lib/rules/space-before-function-paren.js +++ /dev/null @@ -1,143 +0,0 @@ -/** - * @fileoverview Rule to validate spacing before function paren. - * @author Mathias Schreck - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing before `function` definition opening parenthesis", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/space-before-function-paren" - }, - - fixable: "whitespace", - - schema: [ - { - oneOf: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - anonymous: { - enum: ["always", "never", "ignore"] - }, - named: { - enum: ["always", "never", "ignore"] - }, - asyncArrow: { - enum: ["always", "never", "ignore"] - } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const baseConfig = typeof context.options[0] === "string" ? context.options[0] : "always"; - const overrideConfig = typeof context.options[0] === "object" ? context.options[0] : {}; - - /** - * Determines whether a function has a name. - * @param {ASTNode} node The function node. - * @returns {boolean} Whether the function has a name. - */ - function isNamedFunction(node) { - if (node.id) { - return true; - } - - const parent = node.parent; - - return parent.type === "MethodDefinition" || - (parent.type === "Property" && - ( - parent.kind === "get" || - parent.kind === "set" || - parent.method - ) - ); - } - - /** - * Gets the config for a given function - * @param {ASTNode} node The function node - * @returns {string} "always", "never", or "ignore" - */ - function getConfigForFunction(node) { - if (node.type === "ArrowFunctionExpression") { - - // Always ignore non-async functions and arrow functions without parens, e.g. async foo => bar - if (node.async && astUtils.isOpeningParenToken(sourceCode.getFirstToken(node, { skip: 1 }))) { - return overrideConfig.asyncArrow || baseConfig; - } - } else if (isNamedFunction(node)) { - return overrideConfig.named || baseConfig; - - // `generator-star-spacing` should warn anonymous generators. E.g. `function* () {}` - } else if (!node.generator) { - return overrideConfig.anonymous || baseConfig; - } - - return "ignore"; - } - - /** - * Checks the parens of a function node - * @param {ASTNode} node A function node - * @returns {void} - */ - function checkFunction(node) { - const functionConfig = getConfigForFunction(node); - - if (functionConfig === "ignore") { - return; - } - - const rightToken = sourceCode.getFirstToken(node, astUtils.isOpeningParenToken); - const leftToken = sourceCode.getTokenBefore(rightToken); - const hasSpacing = sourceCode.isSpaceBetweenTokens(leftToken, rightToken); - - if (hasSpacing && functionConfig === "never") { - context.report({ - node, - loc: leftToken.loc.end, - message: "Unexpected space before function parentheses.", - fix: fixer => fixer.removeRange([leftToken.range[1], rightToken.range[0]]) - }); - } else if (!hasSpacing && functionConfig === "always") { - context.report({ - node, - loc: leftToken.loc.end, - message: "Missing space before function parentheses.", - fix: fixer => fixer.insertTextAfter(leftToken, " ") - }); - } - } - - return { - ArrowFunctionExpression: checkFunction, - FunctionDeclaration: checkFunction, - FunctionExpression: checkFunction - }; - } -}; diff --git a/node_modules/eslint/lib/rules/space-in-parens.js b/node_modules/eslint/lib/rules/space-in-parens.js deleted file mode 100644 index 7e315c4..0000000 --- a/node_modules/eslint/lib/rules/space-in-parens.js +++ /dev/null @@ -1,275 +0,0 @@ -/** - * @fileoverview Disallows or enforces spaces inside of parentheses. - * @author Jonathan Rajavuori - */ -"use strict"; - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing inside parentheses", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/space-in-parens" - }, - - fixable: "whitespace", - - schema: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - exceptions: { - type: "array", - items: { - enum: ["{}", "[]", "()", "empty"] - }, - uniqueItems: true - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const MISSING_SPACE_MESSAGE = "There must be a space inside this paren.", - REJECTED_SPACE_MESSAGE = "There should be no spaces inside this paren.", - ALWAYS = context.options[0] === "always", - exceptionsArrayOptions = (context.options[1] && context.options[1].exceptions) || [], - options = {}; - let exceptions; - - if (exceptionsArrayOptions.length) { - options.braceException = exceptionsArrayOptions.indexOf("{}") !== -1; - options.bracketException = exceptionsArrayOptions.indexOf("[]") !== -1; - options.parenException = exceptionsArrayOptions.indexOf("()") !== -1; - options.empty = exceptionsArrayOptions.indexOf("empty") !== -1; - } - - /** - * Produces an object with the opener and closer exception values - * @param {Object} opts The exception options - * @returns {Object} `openers` and `closers` exception values - * @private - */ - function getExceptions() { - const openers = [], - closers = []; - - if (options.braceException) { - openers.push("{"); - closers.push("}"); - } - - if (options.bracketException) { - openers.push("["); - closers.push("]"); - } - - if (options.parenException) { - openers.push("("); - closers.push(")"); - } - - if (options.empty) { - openers.push(")"); - closers.push("("); - } - - return { - openers, - closers - }; - } - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - const sourceCode = context.getSourceCode(); - - /** - * Determines if a token is one of the exceptions for the opener paren - * @param {Object} token The token to check - * @returns {boolean} True if the token is one of the exceptions for the opener paren - */ - function isOpenerException(token) { - return token.type === "Punctuator" && exceptions.openers.indexOf(token.value) >= 0; - } - - /** - * Determines if a token is one of the exceptions for the closer paren - * @param {Object} token The token to check - * @returns {boolean} True if the token is one of the exceptions for the closer paren - */ - function isCloserException(token) { - return token.type === "Punctuator" && exceptions.closers.indexOf(token.value) >= 0; - } - - /** - * Determines if an opener paren should have a missing space after it - * @param {Object} left The paren token - * @param {Object} right The token after it - * @returns {boolean} True if the paren should have a space - */ - function shouldOpenerHaveSpace(left, right) { - if (sourceCode.isSpaceBetweenTokens(left, right)) { - return false; - } - - if (ALWAYS) { - if (astUtils.isClosingParenToken(right)) { - return false; - } - return !isOpenerException(right); - } - return isOpenerException(right); - - } - - /** - * Determines if an closer paren should have a missing space after it - * @param {Object} left The token before the paren - * @param {Object} right The paren token - * @returns {boolean} True if the paren should have a space - */ - function shouldCloserHaveSpace(left, right) { - if (astUtils.isOpeningParenToken(left)) { - return false; - } - - if (sourceCode.isSpaceBetweenTokens(left, right)) { - return false; - } - - if (ALWAYS) { - return !isCloserException(left); - } - return isCloserException(left); - - } - - /** - * Determines if an opener paren should not have an existing space after it - * @param {Object} left The paren token - * @param {Object} right The token after it - * @returns {boolean} True if the paren should reject the space - */ - function shouldOpenerRejectSpace(left, right) { - if (right.type === "Line") { - return false; - } - - if (!astUtils.isTokenOnSameLine(left, right)) { - return false; - } - - if (!sourceCode.isSpaceBetweenTokens(left, right)) { - return false; - } - - if (ALWAYS) { - return isOpenerException(right); - } - return !isOpenerException(right); - - } - - /** - * Determines if an closer paren should not have an existing space after it - * @param {Object} left The token before the paren - * @param {Object} right The paren token - * @returns {boolean} True if the paren should reject the space - */ - function shouldCloserRejectSpace(left, right) { - if (astUtils.isOpeningParenToken(left)) { - return false; - } - - if (!astUtils.isTokenOnSameLine(left, right)) { - return false; - } - - if (!sourceCode.isSpaceBetweenTokens(left, right)) { - return false; - } - - if (ALWAYS) { - return isCloserException(left); - } - return !isCloserException(left); - - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - Program: function checkParenSpaces(node) { - exceptions = getExceptions(); - const tokens = sourceCode.tokensAndComments; - - tokens.forEach((token, i) => { - const prevToken = tokens[i - 1]; - const nextToken = tokens[i + 1]; - - if (!astUtils.isOpeningParenToken(token) && !astUtils.isClosingParenToken(token)) { - return; - } - - if (token.value === "(" && shouldOpenerHaveSpace(token, nextToken)) { - context.report({ - node, - loc: token.loc.start, - message: MISSING_SPACE_MESSAGE, - fix(fixer) { - return fixer.insertTextAfter(token, " "); - } - }); - } else if (token.value === "(" && shouldOpenerRejectSpace(token, nextToken)) { - context.report({ - node, - loc: token.loc.start, - message: REJECTED_SPACE_MESSAGE, - fix(fixer) { - return fixer.removeRange([token.range[1], nextToken.range[0]]); - } - }); - } else if (token.value === ")" && shouldCloserHaveSpace(prevToken, token)) { - - // context.report(node, token.loc.start, MISSING_SPACE_MESSAGE); - context.report({ - node, - loc: token.loc.start, - message: MISSING_SPACE_MESSAGE, - fix(fixer) { - return fixer.insertTextBefore(token, " "); - } - }); - } else if (token.value === ")" && shouldCloserRejectSpace(prevToken, token)) { - context.report({ - node, - loc: token.loc.start, - message: REJECTED_SPACE_MESSAGE, - fix(fixer) { - return fixer.removeRange([prevToken.range[1], token.range[0]]); - } - }); - } - }); - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/space-infix-ops.js b/node_modules/eslint/lib/rules/space-infix-ops.js deleted file mode 100644 index 49b6465..0000000 --- a/node_modules/eslint/lib/rules/space-infix-ops.js +++ /dev/null @@ -1,168 +0,0 @@ -/** - * @fileoverview Require spaces around infix operators - * @author Michael Ficarra - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require spacing around infix operators", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/space-infix-ops" - }, - - fixable: "whitespace", - - schema: [ - { - type: "object", - properties: { - int32Hint: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const int32Hint = context.options[0] ? context.options[0].int32Hint === true : false; - - const OPERATORS = [ - "*", "/", "%", "+", "-", "<<", ">>", ">>>", "<", "<=", ">", ">=", "in", - "instanceof", "==", "!=", "===", "!==", "&", "^", "|", "&&", "||", "=", - "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "&=", "^=", "|=", - "?", ":", ",", "**" - ]; - - const sourceCode = context.getSourceCode(); - - /** - * Returns the first token which violates the rule - * @param {ASTNode} left - The left node of the main node - * @param {ASTNode} right - The right node of the main node - * @returns {Object} The violator token or null - * @private - */ - function getFirstNonSpacedToken(left, right) { - const tokens = sourceCode.getTokensBetween(left, right, 1); - - for (let i = 1, l = tokens.length - 1; i < l; ++i) { - const op = tokens[i]; - - if ( - (op.type === "Punctuator" || op.type === "Keyword") && - OPERATORS.indexOf(op.value) >= 0 && - (tokens[i - 1].range[1] >= op.range[0] || op.range[1] >= tokens[i + 1].range[0]) - ) { - return op; - } - } - return null; - } - - /** - * Reports an AST node as a rule violation - * @param {ASTNode} mainNode - The node to report - * @param {Object} culpritToken - The token which has a problem - * @returns {void} - * @private - */ - function report(mainNode, culpritToken) { - context.report({ - node: mainNode, - loc: culpritToken.loc.start, - message: "Infix operators must be spaced.", - fix(fixer) { - const previousToken = sourceCode.getTokenBefore(culpritToken); - const afterToken = sourceCode.getTokenAfter(culpritToken); - let fixString = ""; - - if (culpritToken.range[0] - previousToken.range[1] === 0) { - fixString = " "; - } - - fixString += culpritToken.value; - - if (afterToken.range[0] - culpritToken.range[1] === 0) { - fixString += " "; - } - - return fixer.replaceText(culpritToken, fixString); - } - }); - } - - /** - * Check if the node is binary then report - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkBinary(node) { - const leftNode = (node.left.typeAnnotation) ? node.left.typeAnnotation : node.left; - const rightNode = node.right; - - const nonSpacedNode = getFirstNonSpacedToken(leftNode, rightNode); - - if (nonSpacedNode) { - if (!(int32Hint && sourceCode.getText(node).endsWith("|0"))) { - report(node, nonSpacedNode); - } - } - } - - /** - * Check if the node is conditional - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkConditional(node) { - const nonSpacedConsequesntNode = getFirstNonSpacedToken(node.test, node.consequent); - const nonSpacedAlternateNode = getFirstNonSpacedToken(node.consequent, node.alternate); - - if (nonSpacedConsequesntNode) { - report(node, nonSpacedConsequesntNode); - } else if (nonSpacedAlternateNode) { - report(node, nonSpacedAlternateNode); - } - } - - /** - * Check if the node is a variable - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkVar(node) { - const leftNode = (node.id.typeAnnotation) ? node.id.typeAnnotation : node.id; - const rightNode = node.init; - - if (rightNode) { - const nonSpacedNode = getFirstNonSpacedToken(leftNode, rightNode); - - if (nonSpacedNode) { - report(node, nonSpacedNode); - } - } - } - - return { - AssignmentExpression: checkBinary, - AssignmentPattern: checkBinary, - BinaryExpression: checkBinary, - LogicalExpression: checkBinary, - ConditionalExpression: checkConditional, - VariableDeclarator: checkVar - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/space-unary-ops.js b/node_modules/eslint/lib/rules/space-unary-ops.js deleted file mode 100644 index 6fbcc15..0000000 --- a/node_modules/eslint/lib/rules/space-unary-ops.js +++ /dev/null @@ -1,309 +0,0 @@ -/** - * @fileoverview This rule shoud require or disallow spaces before or after unary operations. - * @author Marcin Kumorek - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing before or after unary operators", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/space-unary-ops" - }, - - fixable: "whitespace", - - schema: [ - { - type: "object", - properties: { - words: { - type: "boolean" - }, - nonwords: { - type: "boolean" - }, - overrides: { - type: "object", - additionalProperties: { - type: "boolean" - } - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - const options = context.options && Array.isArray(context.options) && context.options[0] || { words: true, nonwords: false }; - - const sourceCode = context.getSourceCode(); - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * Check if the node is the first "!" in a "!!" convert to Boolean expression - * @param {ASTnode} node AST node - * @returns {boolean} Whether or not the node is first "!" in "!!" - */ - function isFirstBangInBangBangExpression(node) { - return node && node.type === "UnaryExpression" && node.argument.operator === "!" && - node.argument && node.argument.type === "UnaryExpression" && node.argument.operator === "!"; - } - - /** - * Checks if an override exists for a given operator. - * @param {string} operator Operator - * @returns {boolean} Whether or not an override has been provided for the operator - */ - function overrideExistsForOperator(operator) { - return options.overrides && options.overrides.hasOwnProperty(operator); - } - - /** - * Gets the value that the override was set to for this operator - * @param {string} operator Operator - * @returns {boolean} Whether or not an override enforces a space with this operator - */ - function overrideEnforcesSpaces(operator) { - return options.overrides[operator]; - } - - /** - * Verify Unary Word Operator has spaces after the word operator - * @param {ASTnode} node AST node - * @param {Object} firstToken first token from the AST node - * @param {Object} secondToken second token from the AST node - * @param {string} word The word to be used for reporting - * @returns {void} - */ - function verifyWordHasSpaces(node, firstToken, secondToken, word) { - if (secondToken.range[0] === firstToken.range[1]) { - context.report({ - node, - message: "Unary word operator '{{word}}' must be followed by whitespace.", - data: { - word - }, - fix(fixer) { - return fixer.insertTextAfter(firstToken, " "); - } - }); - } - } - - /** - * Verify Unary Word Operator doesn't have spaces after the word operator - * @param {ASTnode} node AST node - * @param {Object} firstToken first token from the AST node - * @param {Object} secondToken second token from the AST node - * @param {string} word The word to be used for reporting - * @returns {void} - */ - function verifyWordDoesntHaveSpaces(node, firstToken, secondToken, word) { - if (astUtils.canTokensBeAdjacent(firstToken, secondToken)) { - if (secondToken.range[0] > firstToken.range[1]) { - context.report({ - node, - message: "Unexpected space after unary word operator '{{word}}'.", - data: { - word - }, - fix(fixer) { - return fixer.removeRange([firstToken.range[1], secondToken.range[0]]); - } - }); - } - } - } - - /** - * Check Unary Word Operators for spaces after the word operator - * @param {ASTnode} node AST node - * @param {Object} firstToken first token from the AST node - * @param {Object} secondToken second token from the AST node - * @param {string} word The word to be used for reporting - * @returns {void} - */ - function checkUnaryWordOperatorForSpaces(node, firstToken, secondToken, word) { - if (overrideExistsForOperator(word)) { - if (overrideEnforcesSpaces(word)) { - verifyWordHasSpaces(node, firstToken, secondToken, word); - } else { - verifyWordDoesntHaveSpaces(node, firstToken, secondToken, word); - } - } else if (options.words) { - verifyWordHasSpaces(node, firstToken, secondToken, word); - } else { - verifyWordDoesntHaveSpaces(node, firstToken, secondToken, word); - } - } - - /** - * Verifies YieldExpressions satisfy spacing requirements - * @param {ASTnode} node AST node - * @returns {void} - */ - function checkForSpacesAfterYield(node) { - const tokens = sourceCode.getFirstTokens(node, 3), - word = "yield"; - - if (!node.argument || node.delegate) { - return; - } - - checkUnaryWordOperatorForSpaces(node, tokens[0], tokens[1], word); - } - - /** - * Verifies AwaitExpressions satisfy spacing requirements - * @param {ASTNode} node AwaitExpression AST node - * @returns {void} - */ - function checkForSpacesAfterAwait(node) { - const tokens = sourceCode.getFirstTokens(node, 3); - - checkUnaryWordOperatorForSpaces(node, tokens[0], tokens[1], "await"); - } - - /** - * Verifies UnaryExpression, UpdateExpression and NewExpression have spaces before or after the operator - * @param {ASTnode} node AST node - * @param {Object} firstToken First token in the expression - * @param {Object} secondToken Second token in the expression - * @returns {void} - */ - function verifyNonWordsHaveSpaces(node, firstToken, secondToken) { - if (node.prefix) { - if (isFirstBangInBangBangExpression(node)) { - return; - } - if (firstToken.range[1] === secondToken.range[0]) { - context.report({ - node, - message: "Unary operator '{{operator}}' must be followed by whitespace.", - data: { - operator: firstToken.value - }, - fix(fixer) { - return fixer.insertTextAfter(firstToken, " "); - } - }); - } - } else { - if (firstToken.range[1] === secondToken.range[0]) { - context.report({ - node, - message: "Space is required before unary expressions '{{token}}'.", - data: { - token: secondToken.value - }, - fix(fixer) { - return fixer.insertTextBefore(secondToken, " "); - } - }); - } - } - } - - /** - * Verifies UnaryExpression, UpdateExpression and NewExpression don't have spaces before or after the operator - * @param {ASTnode} node AST node - * @param {Object} firstToken First token in the expression - * @param {Object} secondToken Second token in the expression - * @returns {void} - */ - function verifyNonWordsDontHaveSpaces(node, firstToken, secondToken) { - if (node.prefix) { - if (secondToken.range[0] > firstToken.range[1]) { - context.report({ - node, - message: "Unexpected space after unary operator '{{operator}}'.", - data: { - operator: firstToken.value - }, - fix(fixer) { - if (astUtils.canTokensBeAdjacent(firstToken, secondToken)) { - return fixer.removeRange([firstToken.range[1], secondToken.range[0]]); - } - return null; - } - }); - } - } else { - if (secondToken.range[0] > firstToken.range[1]) { - context.report({ - node, - message: "Unexpected space before unary operator '{{operator}}'.", - data: { - operator: secondToken.value - }, - fix(fixer) { - return fixer.removeRange([firstToken.range[1], secondToken.range[0]]); - } - }); - } - } - } - - /** - * Verifies UnaryExpression, UpdateExpression and NewExpression satisfy spacing requirements - * @param {ASTnode} node AST node - * @returns {void} - */ - function checkForSpaces(node) { - const tokens = node.type === "UpdateExpression" && !node.prefix - ? sourceCode.getLastTokens(node, 2) - : sourceCode.getFirstTokens(node, 2); - const firstToken = tokens[0]; - const secondToken = tokens[1]; - - if ((node.type === "NewExpression" || node.prefix) && firstToken.type === "Keyword") { - checkUnaryWordOperatorForSpaces(node, firstToken, secondToken, firstToken.value); - return; - } - - const operator = node.prefix ? tokens[0].value : tokens[1].value; - - if (overrideExistsForOperator(operator)) { - if (overrideEnforcesSpaces(operator)) { - verifyNonWordsHaveSpaces(node, firstToken, secondToken); - } else { - verifyNonWordsDontHaveSpaces(node, firstToken, secondToken); - } - } else if (options.nonwords) { - verifyNonWordsHaveSpaces(node, firstToken, secondToken); - } else { - verifyNonWordsDontHaveSpaces(node, firstToken, secondToken); - } - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - UnaryExpression: checkForSpaces, - UpdateExpression: checkForSpaces, - NewExpression: checkForSpaces, - YieldExpression: checkForSpacesAfterYield, - AwaitExpression: checkForSpacesAfterAwait - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/spaced-comment.js b/node_modules/eslint/lib/rules/spaced-comment.js deleted file mode 100644 index 3a76c0c..0000000 --- a/node_modules/eslint/lib/rules/spaced-comment.js +++ /dev/null @@ -1,372 +0,0 @@ -/** - * @fileoverview Source code for spaced-comments rule - * @author Gyandeep Singh - */ -"use strict"; - -const lodash = require("lodash"); -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Escapes the control characters of a given string. - * @param {string} s - A string to escape. - * @returns {string} An escaped string. - */ -function escape(s) { - return `(?:${lodash.escapeRegExp(s)})`; -} - -/** - * Escapes the control characters of a given string. - * And adds a repeat flag. - * @param {string} s - A string to escape. - * @returns {string} An escaped string. - */ -function escapeAndRepeat(s) { - return `${escape(s)}+`; -} - -/** - * Parses `markers` option. - * If markers don't include `"*"`, this adds `"*"` to allow JSDoc comments. - * @param {string[]} [markers] - A marker list. - * @returns {string[]} A marker list. - */ -function parseMarkersOption(markers) { - - // `*` is a marker for JSDoc comments. - if (markers.indexOf("*") === -1) { - return markers.concat("*"); - } - - return markers; -} - -/** - * Creates string pattern for exceptions. - * Generated pattern: - * - * 1. A space or an exception pattern sequence. - * - * @param {string[]} exceptions - An exception pattern list. - * @returns {string} A regular expression string for exceptions. - */ -function createExceptionsPattern(exceptions) { - let pattern = ""; - - /* - * A space or an exception pattern sequence. - * [] ==> "\s" - * ["-"] ==> "(?:\s|\-+$)" - * ["-", "="] ==> "(?:\s|(?:\-+|=+)$)" - * ["-", "=", "--=="] ==> "(?:\s|(?:\-+|=+|(?:\-\-==)+)$)" ==> https://jex.im/regulex/#!embed=false&flags=&re=(%3F%3A%5Cs%7C(%3F%3A%5C-%2B%7C%3D%2B%7C(%3F%3A%5C-%5C-%3D%3D)%2B)%24) - */ - if (exceptions.length === 0) { - - // a space. - pattern += "\\s"; - } else { - - // a space or... - pattern += "(?:\\s|"; - - if (exceptions.length === 1) { - - // a sequence of the exception pattern. - pattern += escapeAndRepeat(exceptions[0]); - } else { - - // a sequence of one of the exception patterns. - pattern += "(?:"; - pattern += exceptions.map(escapeAndRepeat).join("|"); - pattern += ")"; - } - pattern += `(?:$|[${Array.from(astUtils.LINEBREAKS).join("")}]))`; - } - - return pattern; -} - -/** - * Creates RegExp object for `always` mode. - * Generated pattern for beginning of comment: - * - * 1. First, a marker or nothing. - * 2. Next, a space or an exception pattern sequence. - * - * @param {string[]} markers - A marker list. - * @param {string[]} exceptions - An exception pattern list. - * @returns {RegExp} A RegExp object for the beginning of a comment in `always` mode. - */ -function createAlwaysStylePattern(markers, exceptions) { - let pattern = "^"; - - /* - * A marker or nothing. - * ["*"] ==> "\*?" - * ["*", "!"] ==> "(?:\*|!)?" - * ["*", "/", "!<"] ==> "(?:\*|\/|(?:!<))?" ==> https://jex.im/regulex/#!embed=false&flags=&re=(%3F%3A%5C*%7C%5C%2F%7C(%3F%3A!%3C))%3F - */ - if (markers.length === 1) { - - // the marker. - pattern += escape(markers[0]); - } else { - - // one of markers. - pattern += "(?:"; - pattern += markers.map(escape).join("|"); - pattern += ")"; - } - - pattern += "?"; // or nothing. - pattern += createExceptionsPattern(exceptions); - - return new RegExp(pattern); -} - -/** - * Creates RegExp object for `never` mode. - * Generated pattern for beginning of comment: - * - * 1. First, a marker or nothing (captured). - * 2. Next, a space or a tab. - * - * @param {string[]} markers - A marker list. - * @returns {RegExp} A RegExp object for `never` mode. - */ -function createNeverStylePattern(markers) { - const pattern = `^(${markers.map(escape).join("|")})?[ \t]+`; - - return new RegExp(pattern); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce consistent spacing after the `//` or `/*` in a comment", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/spaced-comment" - }, - - fixable: "whitespace", - - schema: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - exceptions: { - type: "array", - items: { - type: "string" - } - }, - markers: { - type: "array", - items: { - type: "string" - } - }, - line: { - type: "object", - properties: { - exceptions: { - type: "array", - items: { - type: "string" - } - }, - markers: { - type: "array", - items: { - type: "string" - } - } - }, - additionalProperties: false - }, - block: { - type: "object", - properties: { - exceptions: { - type: "array", - items: { - type: "string" - } - }, - markers: { - type: "array", - items: { - type: "string" - } - }, - balanced: { - type: "boolean" - } - }, - additionalProperties: false - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const sourceCode = context.getSourceCode(); - - // Unless the first option is never, require a space - const requireSpace = context.options[0] !== "never"; - - /* - * Parse the second options. - * If markers don't include `"*"`, it's added automatically for JSDoc - * comments. - */ - const config = context.options[1] || {}; - const balanced = config.block && config.block.balanced; - - const styleRules = ["block", "line"].reduce((rule, type) => { - const markers = parseMarkersOption(config[type] && config[type].markers || config.markers || []); - const exceptions = config[type] && config[type].exceptions || config.exceptions || []; - const endNeverPattern = "[ \t]+$"; - - // Create RegExp object for valid patterns. - rule[type] = { - beginRegex: requireSpace ? createAlwaysStylePattern(markers, exceptions) : createNeverStylePattern(markers), - endRegex: balanced && requireSpace ? new RegExp(`${createExceptionsPattern(exceptions)}$`) : new RegExp(endNeverPattern), - hasExceptions: exceptions.length > 0, - markers: new RegExp(`^(${markers.map(escape).join("|")})`) - }; - - return rule; - }, {}); - - /** - * Reports a beginning spacing error with an appropriate message. - * @param {ASTNode} node - A comment node to check. - * @param {string} message - An error message to report. - * @param {Array} match - An array of match results for markers. - * @param {string} refChar - Character used for reference in the error message. - * @returns {void} - */ - function reportBegin(node, message, match, refChar) { - const type = node.type.toLowerCase(), - commentIdentifier = type === "block" ? "/*" : "//"; - - context.report({ - node, - fix(fixer) { - const start = node.range[0]; - let end = start + 2; - - if (requireSpace) { - if (match) { - end += match[0].length; - } - return fixer.insertTextAfterRange([start, end], " "); - } - end += match[0].length; - return fixer.replaceTextRange([start, end], commentIdentifier + (match[1] ? match[1] : "")); - - }, - message, - data: { refChar } - }); - } - - /** - * Reports an ending spacing error with an appropriate message. - * @param {ASTNode} node - A comment node to check. - * @param {string} message - An error message to report. - * @param {string} match - An array of the matched whitespace characters. - * @returns {void} - */ - function reportEnd(node, message, match) { - context.report({ - node, - fix(fixer) { - if (requireSpace) { - return fixer.insertTextAfterRange([node.range[0], node.range[1] - 2], " "); - } - const end = node.range[1] - 2, - start = end - match[0].length; - - return fixer.replaceTextRange([start, end], ""); - - }, - message - }); - } - - /** - * Reports a given comment if it's invalid. - * @param {ASTNode} node - a comment node to check. - * @returns {void} - */ - function checkCommentForSpace(node) { - const type = node.type.toLowerCase(), - rule = styleRules[type], - commentIdentifier = type === "block" ? "/*" : "//"; - - // Ignores empty comments. - if (node.value.length === 0) { - return; - } - - const beginMatch = rule.beginRegex.exec(node.value); - const endMatch = rule.endRegex.exec(node.value); - - // Checks. - if (requireSpace) { - if (!beginMatch) { - const hasMarker = rule.markers.exec(node.value); - const marker = hasMarker ? commentIdentifier + hasMarker[0] : commentIdentifier; - - if (rule.hasExceptions) { - reportBegin(node, "Expected exception block, space or tab after '{{refChar}}' in comment.", hasMarker, marker); - } else { - reportBegin(node, "Expected space or tab after '{{refChar}}' in comment.", hasMarker, marker); - } - } - - if (balanced && type === "block" && !endMatch) { - reportEnd(node, "Expected space or tab before '*/' in comment."); - } - } else { - if (beginMatch) { - if (!beginMatch[1]) { - reportBegin(node, "Unexpected space or tab after '{{refChar}}' in comment.", beginMatch, commentIdentifier); - } else { - reportBegin(node, "Unexpected space or tab after marker ({{refChar}}) in comment.", beginMatch, beginMatch[1]); - } - } - - if (balanced && type === "block" && endMatch) { - reportEnd(node, "Unexpected space or tab before '*/' in comment.", endMatch); - } - } - } - - return { - Program() { - const comments = sourceCode.getAllComments(); - - comments.filter(token => token.type !== "Shebang").forEach(checkCommentForSpace); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/strict.js b/node_modules/eslint/lib/rules/strict.js deleted file mode 100644 index 633a8b3..0000000 --- a/node_modules/eslint/lib/rules/strict.js +++ /dev/null @@ -1,278 +0,0 @@ -/** - * @fileoverview Rule to control usage of strict mode directives. - * @author Brandon Mills - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const messages = { - function: "Use the function form of 'use strict'.", - global: "Use the global form of 'use strict'.", - multiple: "Multiple 'use strict' directives.", - never: "Strict mode is not permitted.", - unnecessary: "Unnecessary 'use strict' directive.", - module: "'use strict' is unnecessary inside of modules.", - implied: "'use strict' is unnecessary when implied strict mode is enabled.", - unnecessaryInClasses: "'use strict' is unnecessary inside of classes.", - nonSimpleParameterList: "'use strict' directive inside a function with non-simple parameter list throws a syntax error since ES2016.", - wrap: "Wrap {{name}} in a function with 'use strict' directive." -}; - -/** - * Gets all of the Use Strict Directives in the Directive Prologue of a group of - * statements. - * @param {ASTNode[]} statements Statements in the program or function body. - * @returns {ASTNode[]} All of the Use Strict Directives. - */ -function getUseStrictDirectives(statements) { - const directives = []; - - for (let i = 0; i < statements.length; i++) { - const statement = statements[i]; - - if ( - statement.type === "ExpressionStatement" && - statement.expression.type === "Literal" && - statement.expression.value === "use strict" - ) { - directives[i] = statement; - } else { - break; - } - } - - return directives; -} - -/** - * Checks whether a given parameter is a simple parameter. - * - * @param {ASTNode} node - A pattern node to check. - * @returns {boolean} `true` if the node is an Identifier node. - */ -function isSimpleParameter(node) { - return node.type === "Identifier"; -} - -/** - * Checks whether a given parameter list is a simple parameter list. - * - * @param {ASTNode[]} params - A parameter list to check. - * @returns {boolean} `true` if the every parameter is an Identifier node. - */ -function isSimpleParameterList(params) { - return params.every(isSimpleParameter); -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow strict mode directives", - category: "Strict Mode", - recommended: false, - url: "https://eslint.org/docs/rules/strict" - }, - - schema: [ - { - enum: ["never", "global", "function", "safe"] - } - ], - - fixable: "code" - }, - - create(context) { - - const ecmaFeatures = context.parserOptions.ecmaFeatures || {}, - scopes = [], - classScopes = []; - let mode = context.options[0] || "safe"; - - if (ecmaFeatures.impliedStrict) { - mode = "implied"; - } else if (mode === "safe") { - mode = ecmaFeatures.globalReturn ? "global" : "function"; - } - - /** - * Determines whether a reported error should be fixed, depending on the error type. - * @param {string} errorType The type of error - * @returns {boolean} `true` if the reported error should be fixed - */ - function shouldFix(errorType) { - return errorType === "multiple" || errorType === "unnecessary" || errorType === "module" || errorType === "implied" || errorType === "unnecessaryInClasses"; - } - - /** - * Gets a fixer function to remove a given 'use strict' directive. - * @param {ASTNode} node The directive that should be removed - * @returns {Function} A fixer function - */ - function getFixFunction(node) { - return fixer => fixer.remove(node); - } - - /** - * Report a slice of an array of nodes with a given message. - * @param {ASTNode[]} nodes Nodes. - * @param {string} start Index to start from. - * @param {string} end Index to end before. - * @param {string} message Message to display. - * @param {boolean} fix `true` if the directive should be fixed (i.e. removed) - * @returns {void} - */ - function reportSlice(nodes, start, end, message, fix) { - nodes.slice(start, end).forEach(node => { - context.report({ node, message, fix: fix ? getFixFunction(node) : null }); - }); - } - - /** - * Report all nodes in an array with a given message. - * @param {ASTNode[]} nodes Nodes. - * @param {string} message Message to display. - * @param {boolean} fix `true` if the directive should be fixed (i.e. removed) - * @returns {void} - */ - function reportAll(nodes, message, fix) { - reportSlice(nodes, 0, nodes.length, message, fix); - } - - /** - * Report all nodes in an array, except the first, with a given message. - * @param {ASTNode[]} nodes Nodes. - * @param {string} message Message to display. - * @param {boolean} fix `true` if the directive should be fixed (i.e. removed) - * @returns {void} - */ - function reportAllExceptFirst(nodes, message, fix) { - reportSlice(nodes, 1, nodes.length, message, fix); - } - - /** - * Entering a function in 'function' mode pushes a new nested scope onto the - * stack. The new scope is true if the nested function is strict mode code. - * @param {ASTNode} node The function declaration or expression. - * @param {ASTNode[]} useStrictDirectives The Use Strict Directives of the node. - * @returns {void} - */ - function enterFunctionInFunctionMode(node, useStrictDirectives) { - const isInClass = classScopes.length > 0, - isParentGlobal = scopes.length === 0 && classScopes.length === 0, - isParentStrict = scopes.length > 0 && scopes[scopes.length - 1], - isStrict = useStrictDirectives.length > 0; - - if (isStrict) { - if (!isSimpleParameterList(node.params)) { - context.report({ node: useStrictDirectives[0], message: messages.nonSimpleParameterList }); - } else if (isParentStrict) { - context.report({ node: useStrictDirectives[0], message: messages.unnecessary, fix: getFixFunction(useStrictDirectives[0]) }); - } else if (isInClass) { - context.report({ node: useStrictDirectives[0], message: messages.unnecessaryInClasses, fix: getFixFunction(useStrictDirectives[0]) }); - } - - reportAllExceptFirst(useStrictDirectives, messages.multiple, true); - } else if (isParentGlobal) { - if (isSimpleParameterList(node.params)) { - context.report({ node, message: messages.function }); - } else { - context.report({ - node, - message: messages.wrap, - data: { name: astUtils.getFunctionNameWithKind(node) } - }); - } - } - - scopes.push(isParentStrict || isStrict); - } - - /** - * Exiting a function in 'function' mode pops its scope off the stack. - * @returns {void} - */ - function exitFunctionInFunctionMode() { - scopes.pop(); - } - - /** - * Enter a function and either: - * - Push a new nested scope onto the stack (in 'function' mode). - * - Report all the Use Strict Directives (in the other modes). - * @param {ASTNode} node The function declaration or expression. - * @returns {void} - */ - function enterFunction(node) { - const isBlock = node.body.type === "BlockStatement", - useStrictDirectives = isBlock - ? getUseStrictDirectives(node.body.body) : []; - - if (mode === "function") { - enterFunctionInFunctionMode(node, useStrictDirectives); - } else if (useStrictDirectives.length > 0) { - if (isSimpleParameterList(node.params)) { - reportAll(useStrictDirectives, messages[mode], shouldFix(mode)); - } else { - context.report({ node: useStrictDirectives[0], message: messages.nonSimpleParameterList }); - reportAllExceptFirst(useStrictDirectives, messages.multiple, true); - } - } - } - - const rule = { - Program(node) { - const useStrictDirectives = getUseStrictDirectives(node.body); - - if (node.sourceType === "module") { - mode = "module"; - } - - if (mode === "global") { - if (node.body.length > 0 && useStrictDirectives.length === 0) { - context.report({ node, message: messages.global }); - } - reportAllExceptFirst(useStrictDirectives, messages.multiple, true); - } else { - reportAll(useStrictDirectives, messages[mode], shouldFix(mode)); - } - }, - FunctionDeclaration: enterFunction, - FunctionExpression: enterFunction, - ArrowFunctionExpression: enterFunction - }; - - if (mode === "function") { - Object.assign(rule, { - - // Inside of class bodies are always strict mode. - ClassBody() { - classScopes.push(true); - }, - "ClassBody:exit"() { - classScopes.pop(); - }, - - "FunctionDeclaration:exit": exitFunctionInFunctionMode, - "FunctionExpression:exit": exitFunctionInFunctionMode, - "ArrowFunctionExpression:exit": exitFunctionInFunctionMode - }); - } - - return rule; - } -}; diff --git a/node_modules/eslint/lib/rules/switch-colon-spacing.js b/node_modules/eslint/lib/rules/switch-colon-spacing.js deleted file mode 100644 index cf19df6..0000000 --- a/node_modules/eslint/lib/rules/switch-colon-spacing.js +++ /dev/null @@ -1,134 +0,0 @@ -/** - * @fileoverview Rule to enforce spacing around colons of switch statements. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce spacing around colons of switch statements", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/switch-colon-spacing" - }, - schema: [ - { - type: "object", - properties: { - before: { type: "boolean" }, - after: { type: "boolean" } - }, - additionalProperties: false - } - ], - fixable: "whitespace" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const options = context.options[0] || {}; - const beforeSpacing = options.before === true; // false by default - const afterSpacing = options.after !== false; // true by default - - /** - * Get the colon token of the given SwitchCase node. - * @param {ASTNode} node The SwitchCase node to get. - * @returns {Token} The colon token of the node. - */ - function getColonToken(node) { - if (node.test) { - return sourceCode.getTokenAfter(node.test, astUtils.isColonToken); - } - return sourceCode.getFirstToken(node, 1); - } - - /** - * Check whether the spacing between the given 2 tokens is valid or not. - * @param {Token} left The left token to check. - * @param {Token} right The right token to check. - * @param {boolean} expected The expected spacing to check. `true` if there should be a space. - * @returns {boolean} `true` if the spacing between the tokens is valid. - */ - function isValidSpacing(left, right, expected) { - return ( - astUtils.isClosingBraceToken(right) || - !astUtils.isTokenOnSameLine(left, right) || - sourceCode.isSpaceBetweenTokens(left, right) === expected - ); - } - - /** - * Check whether comments exist between the given 2 tokens. - * @param {Token} left The left token to check. - * @param {Token} right The right token to check. - * @returns {boolean} `true` if comments exist between the given 2 tokens. - */ - function commentsExistBetween(left, right) { - return sourceCode.getFirstTokenBetween( - left, - right, - { - includeComments: true, - filter: astUtils.isCommentToken - } - ) !== null; - } - - /** - * Fix the spacing between the given 2 tokens. - * @param {RuleFixer} fixer The fixer to fix. - * @param {Token} left The left token of fix range. - * @param {Token} right The right token of fix range. - * @param {boolean} spacing The spacing style. `true` if there should be a space. - * @returns {Fix|null} The fix object. - */ - function fix(fixer, left, right, spacing) { - if (commentsExistBetween(left, right)) { - return null; - } - if (spacing) { - return fixer.insertTextAfter(left, " "); - } - return fixer.removeRange([left.range[1], right.range[0]]); - } - - return { - SwitchCase(node) { - const colonToken = getColonToken(node); - const beforeToken = sourceCode.getTokenBefore(colonToken); - const afterToken = sourceCode.getTokenAfter(colonToken); - - if (!isValidSpacing(beforeToken, colonToken, beforeSpacing)) { - context.report({ - node, - loc: colonToken.loc, - message: "{{verb}} space(s) before this colon.", - data: { verb: beforeSpacing ? "Expected" : "Unexpected" }, - fix: fixer => fix(fixer, beforeToken, colonToken, beforeSpacing) - }); - } - if (!isValidSpacing(colonToken, afterToken, afterSpacing)) { - context.report({ - node, - loc: colonToken.loc, - message: "{{verb}} space(s) after this colon.", - data: { verb: afterSpacing ? "Expected" : "Unexpected" }, - fix: fixer => fix(fixer, colonToken, afterToken, afterSpacing) - }); - } - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/symbol-description.js b/node_modules/eslint/lib/rules/symbol-description.js deleted file mode 100644 index 95c1a1d..0000000 --- a/node_modules/eslint/lib/rules/symbol-description.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * @fileoverview Rule to enforce description with the `Symbol` object - * @author Jarek Rencz - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - - -module.exports = { - meta: { - docs: { - description: "require symbol descriptions", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/symbol-description" - }, - - schema: [] - }, - - create(context) { - - /** - * Reports if node does not conform the rule in case rule is set to - * report missing description - * - * @param {ASTNode} node - A CallExpression node to check. - * @returns {void} - */ - function checkArgument(node) { - if (node.arguments.length === 0) { - context.report({ - node, - message: "Expected Symbol to have a description." - }); - } - } - - return { - "Program:exit"() { - const scope = context.getScope(); - const variable = astUtils.getVariableByName(scope, "Symbol"); - - if (variable && variable.defs.length === 0) { - variable.references.forEach(reference => { - const node = reference.identifier; - - if (astUtils.isCallee(node)) { - checkArgument(node.parent); - } - }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/template-curly-spacing.js b/node_modules/eslint/lib/rules/template-curly-spacing.js deleted file mode 100644 index 707ea76..0000000 --- a/node_modules/eslint/lib/rules/template-curly-spacing.js +++ /dev/null @@ -1,122 +0,0 @@ -/** - * @fileoverview Rule to enforce spacing around embedded expressions of template strings - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const OPEN_PAREN = /\$\{$/; -const CLOSE_PAREN = /^\}/; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow spacing around embedded expressions of template strings", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/template-curly-spacing" - }, - - fixable: "whitespace", - - schema: [ - { enum: ["always", "never"] } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - const always = context.options[0] === "always"; - const prefix = always ? "Expected" : "Unexpected"; - - /** - * Checks spacing before `}` of a given token. - * @param {Token} token - A token to check. This is a Template token. - * @returns {void} - */ - function checkSpacingBefore(token) { - const prevToken = sourceCode.getTokenBefore(token); - - if (prevToken && - CLOSE_PAREN.test(token.value) && - astUtils.isTokenOnSameLine(prevToken, token) && - sourceCode.isSpaceBetweenTokens(prevToken, token) !== always - ) { - context.report({ - loc: token.loc.start, - message: "{{prefix}} space(s) before '}'.", - data: { - prefix - }, - fix(fixer) { - if (always) { - return fixer.insertTextBefore(token, " "); - } - return fixer.removeRange([ - prevToken.range[1], - token.range[0] - ]); - } - }); - } - } - - /** - * Checks spacing after `${` of a given token. - * @param {Token} token - A token to check. This is a Template token. - * @returns {void} - */ - function checkSpacingAfter(token) { - const nextToken = sourceCode.getTokenAfter(token); - - if (nextToken && - OPEN_PAREN.test(token.value) && - astUtils.isTokenOnSameLine(token, nextToken) && - sourceCode.isSpaceBetweenTokens(token, nextToken) !== always - ) { - context.report({ - loc: { - line: token.loc.end.line, - column: token.loc.end.column - 2 - }, - message: "{{prefix}} space(s) after '${'.", - data: { - prefix - }, - fix(fixer) { - if (always) { - return fixer.insertTextAfter(token, " "); - } - return fixer.removeRange([ - token.range[1], - nextToken.range[0] - ]); - } - }); - } - } - - return { - TemplateElement(node) { - const token = sourceCode.getFirstToken(node); - - checkSpacingBefore(token); - checkSpacingAfter(token); - } - }; - } -}; diff --git a/node_modules/eslint/lib/rules/template-tag-spacing.js b/node_modules/eslint/lib/rules/template-tag-spacing.js deleted file mode 100644 index aee7ac1..0000000 --- a/node_modules/eslint/lib/rules/template-tag-spacing.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @fileoverview Rule to check spacing between template tags and their literals - * @author Jonathan Wilsson - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow spacing between template tags and their literals", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/template-tag-spacing" - }, - - fixable: "whitespace", - - schema: [ - { enum: ["always", "never"] } - ] - }, - - create(context) { - const never = context.options[0] !== "always"; - const sourceCode = context.getSourceCode(); - - /** - * Check if a space is present between a template tag and its literal - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function checkSpacing(node) { - const tagToken = sourceCode.getTokenBefore(node.quasi); - const literalToken = sourceCode.getFirstToken(node.quasi); - const hasWhitespace = sourceCode.isSpaceBetweenTokens(tagToken, literalToken); - - if (never && hasWhitespace) { - context.report({ - node, - loc: tagToken.loc.start, - message: "Unexpected space between template tag and template literal.", - fix(fixer) { - const comments = sourceCode.getCommentsBefore(node.quasi); - - // Don't fix anything if there's a single line comment after the template tag - if (comments.some(comment => comment.type === "Line")) { - return null; - } - - return fixer.replaceTextRange( - [tagToken.range[1], literalToken.range[0]], - comments.reduce((text, comment) => text + sourceCode.getText(comment), "") - ); - } - }); - } else if (!never && !hasWhitespace) { - context.report({ - node, - loc: tagToken.loc.start, - message: "Missing space between template tag and template literal.", - fix(fixer) { - return fixer.insertTextAfter(tagToken, " "); - } - }); - } - } - - return { - TaggedTemplateExpression: checkSpacing - }; - } -}; diff --git a/node_modules/eslint/lib/rules/unicode-bom.js b/node_modules/eslint/lib/rules/unicode-bom.js deleted file mode 100644 index 03b2d5a..0000000 --- a/node_modules/eslint/lib/rules/unicode-bom.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * @fileoverview Require or disallow Unicode BOM - * @author Andrew Johnston - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow Unicode byte order mark (BOM)", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/unicode-bom" - }, - - fixable: "whitespace", - - schema: [ - { - enum: ["always", "never"] - } - ] - }, - - create(context) { - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - - Program: function checkUnicodeBOM(node) { - - const sourceCode = context.getSourceCode(), - location = { column: 0, line: 1 }, - requireBOM = context.options[0] || "never"; - - if (!sourceCode.hasBOM && (requireBOM === "always")) { - context.report({ - node, - loc: location, - message: "Expected Unicode BOM (Byte Order Mark).", - fix(fixer) { - return fixer.insertTextBeforeRange([0, 1], "\uFEFF"); - } - }); - } else if (sourceCode.hasBOM && (requireBOM === "never")) { - context.report({ - node, - loc: location, - message: "Unexpected Unicode BOM (Byte Order Mark).", - fix(fixer) { - return fixer.removeRange([-1, 0]); - } - }); - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/use-isnan.js b/node_modules/eslint/lib/rules/use-isnan.js deleted file mode 100644 index 5bad5b3..0000000 --- a/node_modules/eslint/lib/rules/use-isnan.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @fileoverview Rule to flag comparisons to the value NaN - * @author James Allardice - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require calls to `isNaN()` when checking for `NaN`", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/use-isnan" - }, - - schema: [] - }, - - create(context) { - - return { - BinaryExpression(node) { - if (/^(?:[<>]|[!=]=)=?$/.test(node.operator) && (node.left.name === "NaN" || node.right.name === "NaN")) { - context.report({ node, message: "Use the isNaN function to compare with NaN." }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/valid-jsdoc.js b/node_modules/eslint/lib/rules/valid-jsdoc.js deleted file mode 100644 index 4038f70..0000000 --- a/node_modules/eslint/lib/rules/valid-jsdoc.js +++ /dev/null @@ -1,485 +0,0 @@ -/** - * @fileoverview Validates JSDoc comments are syntactically correct - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const doctrine = require("doctrine"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce valid JSDoc comments", - category: "Possible Errors", - recommended: false, - url: "https://eslint.org/docs/rules/valid-jsdoc" - }, - - schema: [ - { - type: "object", - properties: { - prefer: { - type: "object", - additionalProperties: { - type: "string" - } - }, - preferType: { - type: "object", - additionalProperties: { - type: "string" - } - }, - requireReturn: { - type: "boolean" - }, - requireParamDescription: { - type: "boolean" - }, - requireReturnDescription: { - type: "boolean" - }, - matchDescription: { - type: "string" - }, - requireReturnType: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - fixable: "code" - }, - - create(context) { - - const options = context.options[0] || {}, - prefer = options.prefer || {}, - sourceCode = context.getSourceCode(), - - // these both default to true, so you have to explicitly make them false - requireReturn = options.requireReturn !== false, - requireParamDescription = options.requireParamDescription !== false, - requireReturnDescription = options.requireReturnDescription !== false, - requireReturnType = options.requireReturnType !== false, - preferType = options.preferType || {}, - checkPreferType = Object.keys(preferType).length !== 0; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - // Using a stack to store if a function returns or not (handling nested functions) - const fns = []; - - /** - * Check if node type is a Class - * @param {ASTNode} node node to check. - * @returns {boolean} True is its a class - * @private - */ - function isTypeClass(node) { - return node.type === "ClassExpression" || node.type === "ClassDeclaration"; - } - - /** - * When parsing a new function, store it in our function stack. - * @param {ASTNode} node A function node to check. - * @returns {void} - * @private - */ - function startFunction(node) { - fns.push({ - returnPresent: (node.type === "ArrowFunctionExpression" && node.body.type !== "BlockStatement") || - isTypeClass(node) - }); - } - - /** - * Indicate that return has been found in the current function. - * @param {ASTNode} node The return node. - * @returns {void} - * @private - */ - function addReturn(node) { - const functionState = fns[fns.length - 1]; - - if (functionState && node.argument !== null) { - functionState.returnPresent = true; - } - } - - /** - * Check if return tag type is void or undefined - * @param {Object} tag JSDoc tag - * @returns {boolean} True if its of type void or undefined - * @private - */ - function isValidReturnType(tag) { - return tag.type === null || tag.type.name === "void" || tag.type.type === "UndefinedLiteral"; - } - - /** - * Check if type should be validated based on some exceptions - * @param {Object} type JSDoc tag - * @returns {boolean} True if it can be validated - * @private - */ - function canTypeBeValidated(type) { - return type !== "UndefinedLiteral" && // {undefined} as there is no name property available. - type !== "NullLiteral" && // {null} - type !== "NullableLiteral" && // {?} - type !== "FunctionType" && // {function(a)} - type !== "AllLiteral"; // {*} - } - - /** - * Extract the current and expected type based on the input type object - * @param {Object} type JSDoc tag - * @returns {{currentType: Doctrine.Type, expectedTypeName: string}} The current type annotation and - * the expected name of the annotation - * @private - */ - function getCurrentExpectedTypes(type) { - let currentType; - - if (type.name) { - currentType = type; - } else if (type.expression) { - currentType = type.expression; - } - - return { - currentType, - expectedTypeName: currentType && preferType[currentType.name] - }; - } - - /** - * Gets the location of a JSDoc node in a file - * @param {Token} jsdocComment The comment that this node is parsed from - * @param {{range: number[]}} parsedJsdocNode A tag or other node which was parsed from this comment - * @returns {{start: SourceLocation, end: SourceLocation}} The 0-based source location for the tag - */ - function getAbsoluteRange(jsdocComment, parsedJsdocNode) { - return { - start: sourceCode.getLocFromIndex(jsdocComment.range[0] + 2 + parsedJsdocNode.range[0]), - end: sourceCode.getLocFromIndex(jsdocComment.range[0] + 2 + parsedJsdocNode.range[1]) - }; - } - - /** - * Validate type for a given JSDoc node - * @param {Object} jsdocNode JSDoc node - * @param {Object} type JSDoc tag - * @returns {void} - * @private - */ - function validateType(jsdocNode, type) { - if (!type || !canTypeBeValidated(type.type)) { - return; - } - - const typesToCheck = []; - let elements = []; - - switch (type.type) { - case "TypeApplication": // {Array.} - elements = type.applications[0].type === "UnionType" ? type.applications[0].elements : type.applications; - typesToCheck.push(getCurrentExpectedTypes(type)); - break; - case "RecordType": // {{20:String}} - elements = type.fields; - break; - case "UnionType": // {String|number|Test} - case "ArrayType": // {[String, number, Test]} - elements = type.elements; - break; - case "FieldType": // Array.<{count: number, votes: number}> - if (type.value) { - typesToCheck.push(getCurrentExpectedTypes(type.value)); - } - break; - default: - typesToCheck.push(getCurrentExpectedTypes(type)); - } - - elements.forEach(validateType.bind(null, jsdocNode)); - - typesToCheck.forEach(typeToCheck => { - if (typeToCheck.expectedTypeName && - typeToCheck.expectedTypeName !== typeToCheck.currentType.name) { - context.report({ - node: jsdocNode, - message: "Use '{{expectedTypeName}}' instead of '{{currentTypeName}}'.", - loc: getAbsoluteRange(jsdocNode, typeToCheck.currentType), - data: { - currentTypeName: typeToCheck.currentType.name, - expectedTypeName: typeToCheck.expectedTypeName - }, - fix(fixer) { - return fixer.replaceTextRange( - typeToCheck.currentType.range.map(indexInComment => jsdocNode.range[0] + 2 + indexInComment), - typeToCheck.expectedTypeName - ); - } - }); - } - }); - } - - /** - * Validate the JSDoc node and output warnings if anything is wrong. - * @param {ASTNode} node The AST node to check. - * @returns {void} - * @private - */ - function checkJSDoc(node) { - const jsdocNode = sourceCode.getJSDocComment(node), - functionData = fns.pop(), - paramTagsByName = Object.create(null), - paramTags = []; - let hasReturns = false, - returnsTag, - hasConstructor = false, - isInterface = false, - isOverride = false, - isAbstract = false; - - // make sure only to validate JSDoc comments - if (jsdocNode) { - let jsdoc; - - try { - jsdoc = doctrine.parse(jsdocNode.value, { - strict: true, - unwrap: true, - sloppy: true, - range: true - }); - } catch (ex) { - - if (/braces/i.test(ex.message)) { - context.report({ node: jsdocNode, message: "JSDoc type missing brace." }); - } else { - context.report({ node: jsdocNode, message: "JSDoc syntax error." }); - } - - return; - } - - jsdoc.tags.forEach(tag => { - - switch (tag.title.toLowerCase()) { - - case "param": - case "arg": - case "argument": - paramTags.push(tag); - break; - - case "return": - case "returns": - hasReturns = true; - returnsTag = tag; - break; - - case "constructor": - case "class": - hasConstructor = true; - break; - - case "override": - case "inheritdoc": - isOverride = true; - break; - - case "abstract": - case "virtual": - isAbstract = true; - break; - - case "interface": - isInterface = true; - break; - - // no default - } - - // check tag preferences - if (prefer.hasOwnProperty(tag.title) && tag.title !== prefer[tag.title]) { - const entireTagRange = getAbsoluteRange(jsdocNode, tag); - - context.report({ - node: jsdocNode, - message: "Use @{{name}} instead.", - loc: { - start: entireTagRange.start, - end: { - line: entireTagRange.start.line, - column: entireTagRange.start.column + `@${tag.title}`.length - } - }, - data: { name: prefer[tag.title] }, - fix(fixer) { - return fixer.replaceTextRange( - [ - jsdocNode.range[0] + tag.range[0] + 3, - jsdocNode.range[0] + tag.range[0] + tag.title.length + 3 - ], - prefer[tag.title] - ); - } - }); - } - - // validate the types - if (checkPreferType && tag.type) { - validateType(jsdocNode, tag.type); - } - }); - - paramTags.forEach(param => { - if (!param.type) { - context.report({ - node: jsdocNode, - message: "Missing JSDoc parameter type for '{{name}}'.", - loc: getAbsoluteRange(jsdocNode, param), - data: { name: param.name } - }); - } - if (!param.description && requireParamDescription) { - context.report({ - node: jsdocNode, - message: "Missing JSDoc parameter description for '{{name}}'.", - loc: getAbsoluteRange(jsdocNode, param), - data: { name: param.name } - }); - } - if (paramTagsByName[param.name]) { - context.report({ - node: jsdocNode, - message: "Duplicate JSDoc parameter '{{name}}'.", - loc: getAbsoluteRange(jsdocNode, param), - data: { name: param.name } - }); - } else if (param.name.indexOf(".") === -1) { - paramTagsByName[param.name] = param; - } - }); - - if (hasReturns) { - if (!requireReturn && !functionData.returnPresent && (returnsTag.type === null || !isValidReturnType(returnsTag)) && !isAbstract) { - context.report({ - node: jsdocNode, - message: "Unexpected @{{title}} tag; function has no return statement.", - loc: getAbsoluteRange(jsdocNode, returnsTag), - data: { - title: returnsTag.title - } - }); - } else { - if (requireReturnType && !returnsTag.type) { - context.report({ node: jsdocNode, message: "Missing JSDoc return type." }); - } - - if (!isValidReturnType(returnsTag) && !returnsTag.description && requireReturnDescription) { - context.report({ node: jsdocNode, message: "Missing JSDoc return description." }); - } - } - } - - // check for functions missing @returns - if (!isOverride && !hasReturns && !hasConstructor && !isInterface && - node.parent.kind !== "get" && node.parent.kind !== "constructor" && - node.parent.kind !== "set" && !isTypeClass(node)) { - if (requireReturn || functionData.returnPresent) { - context.report({ - node: jsdocNode, - message: "Missing JSDoc @{{returns}} for function.", - data: { - returns: prefer.returns || "returns" - } - }); - } - } - - // check the parameters - const jsdocParamNames = Object.keys(paramTagsByName); - - if (node.params) { - node.params.forEach((param, paramsIndex) => { - const bindingParam = param.type === "AssignmentPattern" - ? param.left - : param; - - // TODO(nzakas): Figure out logical things to do with destructured, default, rest params - if (bindingParam.type === "Identifier") { - const name = bindingParam.name; - - if (jsdocParamNames[paramsIndex] && (name !== jsdocParamNames[paramsIndex])) { - context.report({ - node: jsdocNode, - message: "Expected JSDoc for '{{name}}' but found '{{jsdocName}}'.", - loc: getAbsoluteRange(jsdocNode, paramTagsByName[jsdocParamNames[paramsIndex]]), - data: { - name, - jsdocName: jsdocParamNames[paramsIndex] - } - }); - } else if (!paramTagsByName[name] && !isOverride) { - context.report({ - node: jsdocNode, - message: "Missing JSDoc for parameter '{{name}}'.", - data: { - name - } - }); - } - } - }); - } - - if (options.matchDescription) { - const regex = new RegExp(options.matchDescription); - - if (!regex.test(jsdoc.description)) { - context.report({ node: jsdocNode, message: "JSDoc description does not satisfy the regex pattern." }); - } - } - - } - - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - ArrowFunctionExpression: startFunction, - FunctionExpression: startFunction, - FunctionDeclaration: startFunction, - ClassExpression: startFunction, - ClassDeclaration: startFunction, - "ArrowFunctionExpression:exit": checkJSDoc, - "FunctionExpression:exit": checkJSDoc, - "FunctionDeclaration:exit": checkJSDoc, - "ClassExpression:exit": checkJSDoc, - "ClassDeclaration:exit": checkJSDoc, - ReturnStatement: addReturn - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/valid-typeof.js b/node_modules/eslint/lib/rules/valid-typeof.js deleted file mode 100644 index ac4e74f..0000000 --- a/node_modules/eslint/lib/rules/valid-typeof.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @fileoverview Ensures that the results of typeof are compared against a valid string - * @author Ian Christian Myers - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "enforce comparing `typeof` expressions against valid strings", - category: "Possible Errors", - recommended: true, - url: "https://eslint.org/docs/rules/valid-typeof" - }, - - schema: [ - { - type: "object", - properties: { - requireStringLiterals: { - type: "boolean" - } - }, - additionalProperties: false - } - ] - }, - - create(context) { - - const VALID_TYPES = ["symbol", "undefined", "object", "boolean", "number", "string", "function"], - OPERATORS = ["==", "===", "!=", "!=="]; - - const requireStringLiterals = context.options[0] && context.options[0].requireStringLiterals; - - /** - * Determines whether a node is a typeof expression. - * @param {ASTNode} node The node - * @returns {boolean} `true` if the node is a typeof expression - */ - function isTypeofExpression(node) { - return node.type === "UnaryExpression" && node.operator === "typeof"; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - - UnaryExpression(node) { - if (isTypeofExpression(node)) { - const parent = context.getAncestors().pop(); - - if (parent.type === "BinaryExpression" && OPERATORS.indexOf(parent.operator) !== -1) { - const sibling = parent.left === node ? parent.right : parent.left; - - if (sibling.type === "Literal" || sibling.type === "TemplateLiteral" && !sibling.expressions.length) { - const value = sibling.type === "Literal" ? sibling.value : sibling.quasis[0].value.cooked; - - if (VALID_TYPES.indexOf(value) === -1) { - context.report({ node: sibling, message: "Invalid typeof comparison value." }); - } - } else if (requireStringLiterals && !isTypeofExpression(sibling)) { - context.report({ node: sibling, message: "Typeof comparisons should be to string literals." }); - } - } - } - } - - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/vars-on-top.js b/node_modules/eslint/lib/rules/vars-on-top.js deleted file mode 100644 index 0489aa6..0000000 --- a/node_modules/eslint/lib/rules/vars-on-top.js +++ /dev/null @@ -1,140 +0,0 @@ -/** - * @fileoverview Rule to enforce var declarations are only at the top of a function. - * @author Danny Fritz - * @author Gyandeep Singh - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require `var` declarations be placed at the top of their containing scope", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/vars-on-top" - }, - - schema: [] - }, - - create(context) { - const errorMessage = "All 'var' declarations must be at the top of the function scope."; - - //-------------------------------------------------------------------------- - // Helpers - //-------------------------------------------------------------------------- - - /** - * @param {ASTNode} node - any node - * @returns {boolean} whether the given node structurally represents a directive - */ - function looksLikeDirective(node) { - return node.type === "ExpressionStatement" && - node.expression.type === "Literal" && typeof node.expression.value === "string"; - } - - /** - * Check to see if its a ES6 import declaration - * @param {ASTNode} node - any node - * @returns {boolean} whether the given node represents a import declaration - */ - function looksLikeImport(node) { - return node.type === "ImportDeclaration" || node.type === "ImportSpecifier" || - node.type === "ImportDefaultSpecifier" || node.type === "ImportNamespaceSpecifier"; - } - - /** - * Checks whether a given node is a variable declaration or not. - * - * @param {ASTNode} node - any node - * @returns {boolean} `true` if the node is a variable declaration. - */ - function isVariableDeclaration(node) { - return ( - node.type === "VariableDeclaration" || - ( - node.type === "ExportNamedDeclaration" && - node.declaration && - node.declaration.type === "VariableDeclaration" - ) - ); - } - - /** - * Checks whether this variable is on top of the block body - * @param {ASTNode} node - The node to check - * @param {ASTNode[]} statements - collection of ASTNodes for the parent node block - * @returns {boolean} True if var is on top otherwise false - */ - function isVarOnTop(node, statements) { - const l = statements.length; - let i = 0; - - // skip over directives - for (; i < l; ++i) { - if (!looksLikeDirective(statements[i]) && !looksLikeImport(statements[i])) { - break; - } - } - - for (; i < l; ++i) { - if (!isVariableDeclaration(statements[i])) { - return false; - } - if (statements[i] === node) { - return true; - } - } - - return false; - } - - /** - * Checks whether variable is on top at the global level - * @param {ASTNode} node - The node to check - * @param {ASTNode} parent - Parent of the node - * @returns {void} - */ - function globalVarCheck(node, parent) { - if (!isVarOnTop(node, parent.body)) { - context.report({ node, message: errorMessage }); - } - } - - /** - * Checks whether variable is on top at functional block scope level - * @param {ASTNode} node - The node to check - * @param {ASTNode} parent - Parent of the node - * @param {ASTNode} grandParent - Parent of the node's parent - * @returns {void} - */ - function blockScopeVarCheck(node, parent, grandParent) { - if (!(/Function/.test(grandParent.type) && - parent.type === "BlockStatement" && - isVarOnTop(node, parent.body))) { - context.report({ node, message: errorMessage }); - } - } - - //-------------------------------------------------------------------------- - // Public API - //-------------------------------------------------------------------------- - - return { - "VariableDeclaration[kind='var']"(node) { - if (node.parent.type === "ExportNamedDeclaration") { - globalVarCheck(node.parent, node.parent.parent); - } else if (node.parent.type === "Program") { - globalVarCheck(node, node.parent); - } else { - blockScopeVarCheck(node, node.parent, node.parent.parent); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/wrap-iife.js b/node_modules/eslint/lib/rules/wrap-iife.js deleted file mode 100644 index a21bf21..0000000 --- a/node_modules/eslint/lib/rules/wrap-iife.js +++ /dev/null @@ -1,152 +0,0 @@ -/** - * @fileoverview Rule to flag when IIFE is not wrapped in parens - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require parentheses around immediate `function` invocations", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/wrap-iife" - }, - - schema: [ - { - enum: ["outside", "inside", "any"] - }, - { - type: "object", - properties: { - functionPrototypeMethods: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - fixable: "code" - }, - - create(context) { - - const style = context.options[0] || "outside"; - const includeFunctionPrototypeMethods = (context.options[1] && context.options[1].functionPrototypeMethods) || false; - - const sourceCode = context.getSourceCode(); - - /** - * Check if the node is wrapped in () - * @param {ASTNode} node node to evaluate - * @returns {boolean} True if it is wrapped - * @private - */ - function wrapped(node) { - return astUtils.isParenthesised(sourceCode, node); - } - - /** - * Get the function node from an IIFE - * @param {ASTNode} node node to evaluate - * @returns {ASTNode} node that is the function expression of the given IIFE, or null if none exist - */ - function getFunctionNodeFromIIFE(node) { - const callee = node.callee; - - if (callee.type === "FunctionExpression") { - return callee; - } - - if (includeFunctionPrototypeMethods && - callee.type === "MemberExpression" && - callee.object.type === "FunctionExpression" && - (astUtils.getStaticPropertyName(callee) === "call" || astUtils.getStaticPropertyName(callee) === "apply") - ) { - return callee.object; - } - - return null; - } - - - return { - CallExpression(node) { - const innerNode = getFunctionNodeFromIIFE(node); - - if (!innerNode) { - return; - } - - const callExpressionWrapped = wrapped(node), - functionExpressionWrapped = wrapped(innerNode); - - if (!callExpressionWrapped && !functionExpressionWrapped) { - context.report({ - node, - message: "Wrap an immediate function invocation in parentheses.", - fix(fixer) { - const nodeToSurround = style === "inside" ? innerNode : node; - - return fixer.replaceText(nodeToSurround, `(${sourceCode.getText(nodeToSurround)})`); - } - }); - } else if (style === "inside" && !functionExpressionWrapped) { - context.report({ - node, - message: "Wrap only the function expression in parens.", - fix(fixer) { - - /* - * The outer call expression will always be wrapped at this point. - * Replace the range between the end of the function expression and the end of the call expression. - * for example, in `(function(foo) {}(bar))`, the range `(bar))` should get replaced with `)(bar)`. - * Replace the parens from the outer expression, and parenthesize the function expression. - */ - const parenAfter = sourceCode.getTokenAfter(node); - - return fixer.replaceTextRange( - [innerNode.range[1], parenAfter.range[1]], - `)${sourceCode.getText().slice(innerNode.range[1], parenAfter.range[0])}` - ); - } - }); - } else if (style === "outside" && !callExpressionWrapped) { - context.report({ - node, - message: "Move the invocation into the parens that contain the function.", - fix(fixer) { - - /* - * The inner function expression will always be wrapped at this point. - * It's only necessary to replace the range between the end of the function expression - * and the call expression. For example, in `(function(foo) {})(bar)`, the range `)(bar)` - * should get replaced with `(bar))`. - */ - const parenAfter = sourceCode.getTokenAfter(innerNode); - - return fixer.replaceTextRange( - [parenAfter.range[0], node.range[1]], - `${sourceCode.getText().slice(parenAfter.range[1], node.range[1])})` - ); - } - }); - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/wrap-regex.js b/node_modules/eslint/lib/rules/wrap-regex.js deleted file mode 100644 index e58a4fe..0000000 --- a/node_modules/eslint/lib/rules/wrap-regex.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * @fileoverview Rule to flag when regex literals are not wrapped in parens - * @author Matt DuVall - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require parenthesis around regex literals", - category: "Stylistic Issues", - recommended: false, - url: "https://eslint.org/docs/rules/wrap-regex" - }, - - schema: [], - - fixable: "code" - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - return { - - Literal(node) { - const token = sourceCode.getFirstToken(node), - nodeType = token.type; - - if (nodeType === "RegularExpression") { - const source = sourceCode.getTokenBefore(node); - const ancestors = context.getAncestors(); - const grandparent = ancestors[ancestors.length - 1]; - - if (grandparent.type === "MemberExpression" && grandparent.object === node && - (!source || source.value !== "(")) { - context.report({ - node, - message: "Wrap the regexp literal in parens to disambiguate the slash.", - fix: fixer => fixer.replaceText(node, `(${sourceCode.getText(node)})`) - }); - } - } - } - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/yield-star-spacing.js b/node_modules/eslint/lib/rules/yield-star-spacing.js deleted file mode 100644 index 33a37f0..0000000 --- a/node_modules/eslint/lib/rules/yield-star-spacing.js +++ /dev/null @@ -1,118 +0,0 @@ -/** - * @fileoverview Rule to check the spacing around the * in yield* expressions. - * @author Bryan Smith - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow spacing around the `*` in `yield*` expressions", - category: "ECMAScript 6", - recommended: false, - url: "https://eslint.org/docs/rules/yield-star-spacing" - }, - - fixable: "whitespace", - - schema: [ - { - oneOf: [ - { - enum: ["before", "after", "both", "neither"] - }, - { - type: "object", - properties: { - before: { type: "boolean" }, - after: { type: "boolean" } - }, - additionalProperties: false - } - ] - } - ] - }, - - create(context) { - const sourceCode = context.getSourceCode(); - - const mode = (function(option) { - if (!option || typeof option === "string") { - return { - before: { before: true, after: false }, - after: { before: false, after: true }, - both: { before: true, after: true }, - neither: { before: false, after: false } - }[option || "after"]; - } - return option; - }(context.options[0])); - - /** - * Checks the spacing between two tokens before or after the star token. - * @param {string} side Either "before" or "after". - * @param {Token} leftToken `function` keyword token if side is "before", or - * star token if side is "after". - * @param {Token} rightToken Star token if side is "before", or identifier - * token if side is "after". - * @returns {void} - */ - function checkSpacing(side, leftToken, rightToken) { - if (sourceCode.isSpaceBetweenTokens(leftToken, rightToken) !== mode[side]) { - const after = leftToken.value === "*"; - const spaceRequired = mode[side]; - const node = after ? leftToken : rightToken; - const type = spaceRequired ? "Missing" : "Unexpected"; - const message = "{{type}} space {{side}} *."; - - context.report({ - node, - message, - data: { - type, - side - }, - fix(fixer) { - if (spaceRequired) { - if (after) { - return fixer.insertTextAfter(node, " "); - } - return fixer.insertTextBefore(node, " "); - } - return fixer.removeRange([leftToken.range[1], rightToken.range[0]]); - } - }); - } - } - - /** - * Enforces the spacing around the star if node is a yield* expression. - * @param {ASTNode} node A yield expression node. - * @returns {void} - */ - function checkExpression(node) { - if (!node.delegate) { - return; - } - - const tokens = sourceCode.getFirstTokens(node, 3); - const yieldToken = tokens[0]; - const starToken = tokens[1]; - const nextToken = tokens[2]; - - checkSpacing("before", yieldToken, starToken); - checkSpacing("after", starToken, nextToken); - } - - return { - YieldExpression: checkExpression - }; - - } -}; diff --git a/node_modules/eslint/lib/rules/yoda.js b/node_modules/eslint/lib/rules/yoda.js deleted file mode 100644 index 7f3bc61..0000000 --- a/node_modules/eslint/lib/rules/yoda.js +++ /dev/null @@ -1,311 +0,0 @@ -/** - * @fileoverview Rule to require or disallow yoda comparisons - * @author Nicholas C. Zakas - */ -"use strict"; - -//-------------------------------------------------------------------------- -// Requirements -//-------------------------------------------------------------------------- - -const astUtils = require("../ast-utils"); - -//-------------------------------------------------------------------------- -// Helpers -//-------------------------------------------------------------------------- - -/** - * Determines whether an operator is a comparison operator. - * @param {string} operator The operator to check. - * @returns {boolean} Whether or not it is a comparison operator. - */ -function isComparisonOperator(operator) { - return (/^(==|===|!=|!==|<|>|<=|>=)$/).test(operator); -} - -/** - * Determines whether an operator is an equality operator. - * @param {string} operator The operator to check. - * @returns {boolean} Whether or not it is an equality operator. - */ -function isEqualityOperator(operator) { - return (/^(==|===)$/).test(operator); -} - -/** - * Determines whether an operator is one used in a range test. - * Allowed operators are `<` and `<=`. - * @param {string} operator The operator to check. - * @returns {boolean} Whether the operator is used in range tests. - */ -function isRangeTestOperator(operator) { - return ["<", "<="].indexOf(operator) >= 0; -} - -/** - * Determines whether a non-Literal node is a negative number that should be - * treated as if it were a single Literal node. - * @param {ASTNode} node Node to test. - * @returns {boolean} True if the node is a negative number that looks like a - * real literal and should be treated as such. - */ -function looksLikeLiteral(node) { - return (node.type === "UnaryExpression" && - node.operator === "-" && - node.prefix && - node.argument.type === "Literal" && - typeof node.argument.value === "number"); -} - -/** - * Attempts to derive a Literal node from nodes that are treated like literals. - * @param {ASTNode} node Node to normalize. - * @param {number} [defaultValue] The default value to be returned if the node - * is not a Literal. - * @returns {ASTNode} One of the following options. - * 1. The original node if the node is already a Literal - * 2. A normalized Literal node with the negative number as the value if the - * node represents a negative number literal. - * 3. The Literal node which has the `defaultValue` argument if it exists. - * 4. Otherwise `null`. - */ -function getNormalizedLiteral(node, defaultValue) { - if (node.type === "Literal") { - return node; - } - - if (looksLikeLiteral(node)) { - return { - type: "Literal", - value: -node.argument.value, - raw: `-${node.argument.value}` - }; - } - - if (defaultValue) { - return { - type: "Literal", - value: defaultValue, - raw: String(defaultValue) - }; - } - - return null; -} - -/** - * Checks whether two expressions reference the same value. For example: - * a = a - * a.b = a.b - * a[0] = a[0] - * a['b'] = a['b'] - * @param {ASTNode} a Left side of the comparison. - * @param {ASTNode} b Right side of the comparison. - * @returns {boolean} True if both sides match and reference the same value. - */ -function same(a, b) { - if (a.type !== b.type) { - return false; - } - - switch (a.type) { - case "Identifier": - return a.name === b.name; - - case "Literal": - return a.value === b.value; - - case "MemberExpression": { - const nameA = astUtils.getStaticPropertyName(a); - - // x.y = x["y"] - if (nameA) { - return ( - same(a.object, b.object) && - nameA === astUtils.getStaticPropertyName(b) - ); - } - - /* - * x[0] = x[0] - * x[y] = x[y] - * x.y = x.y - */ - return ( - a.computed === b.computed && - same(a.object, b.object) && - same(a.property, b.property) - ); - } - - case "ThisExpression": - return true; - - default: - return false; - } -} - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: "require or disallow \"Yoda\" conditions", - category: "Best Practices", - recommended: false, - url: "https://eslint.org/docs/rules/yoda" - }, - - schema: [ - { - enum: ["always", "never"] - }, - { - type: "object", - properties: { - exceptRange: { - type: "boolean" - }, - onlyEquality: { - type: "boolean" - } - }, - additionalProperties: false - } - ], - - fixable: "code" - }, - - create(context) { - - // Default to "never" (!always) if no option - const always = (context.options[0] === "always"); - const exceptRange = (context.options[1] && context.options[1].exceptRange); - const onlyEquality = (context.options[1] && context.options[1].onlyEquality); - - const sourceCode = context.getSourceCode(); - - /** - * Determines whether node represents a range test. - * A range test is a "between" test like `(0 <= x && x < 1)` or an "outside" - * test like `(x < 0 || 1 <= x)`. It must be wrapped in parentheses, and - * both operators must be `<` or `<=`. Finally, the literal on the left side - * must be less than or equal to the literal on the right side so that the - * test makes any sense. - * @param {ASTNode} node LogicalExpression node to test. - * @returns {boolean} Whether node is a range test. - */ - function isRangeTest(node) { - const left = node.left, - right = node.right; - - /** - * Determines whether node is of the form `0 <= x && x < 1`. - * @returns {boolean} Whether node is a "between" range test. - */ - function isBetweenTest() { - let leftLiteral, rightLiteral; - - return (node.operator === "&&" && - (leftLiteral = getNormalizedLiteral(left.left)) && - (rightLiteral = getNormalizedLiteral(right.right, Number.POSITIVE_INFINITY)) && - leftLiteral.value <= rightLiteral.value && - same(left.right, right.left)); - } - - /** - * Determines whether node is of the form `x < 0 || 1 <= x`. - * @returns {boolean} Whether node is an "outside" range test. - */ - function isOutsideTest() { - let leftLiteral, rightLiteral; - - return (node.operator === "||" && - (leftLiteral = getNormalizedLiteral(left.right, Number.NEGATIVE_INFINITY)) && - (rightLiteral = getNormalizedLiteral(right.left)) && - leftLiteral.value <= rightLiteral.value && - same(left.left, right.right)); - } - - /** - * Determines whether node is wrapped in parentheses. - * @returns {boolean} Whether node is preceded immediately by an open - * paren token and followed immediately by a close - * paren token. - */ - function isParenWrapped() { - return astUtils.isParenthesised(sourceCode, node); - } - - return (node.type === "LogicalExpression" && - left.type === "BinaryExpression" && - right.type === "BinaryExpression" && - isRangeTestOperator(left.operator) && - isRangeTestOperator(right.operator) && - (isBetweenTest() || isOutsideTest()) && - isParenWrapped()); - } - - const OPERATOR_FLIP_MAP = { - "===": "===", - "!==": "!==", - "==": "==", - "!=": "!=", - "<": ">", - ">": "<", - "<=": ">=", - ">=": "<=" - }; - - /** - * Returns a string representation of a BinaryExpression node with its sides/operator flipped around. - * @param {ASTNode} node The BinaryExpression node - * @returns {string} A string representation of the node with the sides and operator flipped - */ - function getFlippedString(node) { - const operatorToken = sourceCode.getFirstTokenBetween(node.left, node.right, token => token.value === node.operator); - const textBeforeOperator = sourceCode.getText().slice(sourceCode.getTokenBefore(operatorToken).range[1], operatorToken.range[0]); - const textAfterOperator = sourceCode.getText().slice(operatorToken.range[1], sourceCode.getTokenAfter(operatorToken).range[0]); - const leftText = sourceCode.getText().slice(node.range[0], sourceCode.getTokenBefore(operatorToken).range[1]); - const rightText = sourceCode.getText().slice(sourceCode.getTokenAfter(operatorToken).range[0], node.range[1]); - - return rightText + textBeforeOperator + OPERATOR_FLIP_MAP[operatorToken.value] + textAfterOperator + leftText; - } - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - return { - BinaryExpression(node) { - const expectedLiteral = always ? node.left : node.right; - const expectedNonLiteral = always ? node.right : node.left; - - // If `expectedLiteral` is not a literal, and `expectedNonLiteral` is a literal, raise an error. - if ( - (expectedNonLiteral.type === "Literal" || looksLikeLiteral(expectedNonLiteral)) && - !(expectedLiteral.type === "Literal" || looksLikeLiteral(expectedLiteral)) && - !(!isEqualityOperator(node.operator) && onlyEquality) && - isComparisonOperator(node.operator) && - !(exceptRange && isRangeTest(context.getAncestors().pop())) - ) { - context.report({ - node, - message: "Expected literal to be on the {{expectedSide}} side of {{operator}}.", - data: { - operator: node.operator, - expectedSide: always ? "left" : "right" - }, - fix: fixer => fixer.replaceText(node, getFlippedString(node)) - }); - } - - } - }; - - } -}; diff --git a/node_modules/eslint/lib/testers/rule-tester.js b/node_modules/eslint/lib/testers/rule-tester.js deleted file mode 100644 index de218a8..0000000 --- a/node_modules/eslint/lib/testers/rule-tester.js +++ /dev/null @@ -1,591 +0,0 @@ -/** - * @fileoverview Mocha test wrapper - * @author Ilya Volodin - */ -"use strict"; - -/* global describe, it */ - -/* - * This is a wrapper around mocha to allow for DRY unittests for eslint - * Format: - * RuleTester.run("{ruleName}", { - * valid: [ - * "{code}", - * { code: "{code}", options: {options}, globals: {globals}, parser: "{parser}", settings: {settings} } - * ], - * invalid: [ - * { code: "{code}", errors: {numErrors} }, - * { code: "{code}", errors: ["{errorMessage}"] }, - * { code: "{code}", options: {options}, globals: {globals}, parser: "{parser}", settings: {settings}, errors: [{ message: "{errorMessage}", type: "{errorNodeType}"}] } - * ] - * }); - * - * Variables: - * {code} - String that represents the code to be tested - * {options} - Arguments that are passed to the configurable rules. - * {globals} - An object representing a list of variables that are - * registered as globals - * {parser} - String representing the parser to use - * {settings} - An object representing global settings for all rules - * {numErrors} - If failing case doesn't need to check error message, - * this integer will specify how many errors should be - * received - * {errorMessage} - Message that is returned by the rule on failure - * {errorNodeType} - AST node type that is returned by they rule as - * a cause of the failure. - */ - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"), - assert = require("assert"), - util = require("util"), - validator = require("../config/config-validator"), - ajv = require("../util/ajv"), - Linter = require("../linter"), - Environments = require("../config/environments"), - SourceCodeFixer = require("../util/source-code-fixer"), - interpolate = require("../util/interpolate"); - -//------------------------------------------------------------------------------ -// Private Members -//------------------------------------------------------------------------------ - -/* - * testerDefaultConfig must not be modified as it allows to reset the tester to - * the initial default configuration - */ -const testerDefaultConfig = { rules: {} }; -let defaultConfig = { rules: {} }; - -/* - * List every parameters possible on a test case that are not related to eslint - * configuration - */ -const RuleTesterParameters = [ - "code", - "filename", - "options", - "errors", - "output" -]; - -const hasOwnProperty = Function.call.bind(Object.hasOwnProperty); - -/** - * Clones a given value deeply. - * Note: This ignores `parent` property. - * - * @param {any} x - A value to clone. - * @returns {any} A cloned value. - */ -function cloneDeeplyExcludesParent(x) { - if (typeof x === "object" && x !== null) { - if (Array.isArray(x)) { - return x.map(cloneDeeplyExcludesParent); - } - - const retv = {}; - - for (const key in x) { - if (key !== "parent" && hasOwnProperty(x, key)) { - retv[key] = cloneDeeplyExcludesParent(x[key]); - } - } - - return retv; - } - - return x; -} - -/** - * Freezes a given value deeply. - * - * @param {any} x - A value to freeze. - * @returns {void} - */ -function freezeDeeply(x) { - if (typeof x === "object" && x !== null) { - if (Array.isArray(x)) { - x.forEach(freezeDeeply); - } else { - for (const key in x) { - if (key !== "parent" && hasOwnProperty(x, key)) { - freezeDeeply(x[key]); - } - } - } - Object.freeze(x); - } -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -// default separators for testing -const DESCRIBE = Symbol("describe"); -const IT = Symbol("it"); - -/** - * This is `it` default handler if `it` don't exist. - * @this {Mocha} - * @param {string} text - The description of the test case. - * @param {Function} method - The logic of the test case. - * @returns {any} Returned value of `method`. - */ -function itDefaultHandler(text, method) { - try { - return method.apply(this); - } catch (err) { - if (err instanceof assert.AssertionError) { - err.message += ` (${util.inspect(err.actual)} ${err.operator} ${util.inspect(err.expected)})`; - } - throw err; - } -} - -/** - * This is `describe` default handler if `describe` don't exist. - * @this {Mocha} - * @param {string} text - The description of the test case. - * @param {Function} method - The logic of the test case. - * @returns {any} Returned value of `method`. - */ -function describeDefaultHandler(text, method) { - return method.apply(this); -} - -class RuleTester { - - /** - * Creates a new instance of RuleTester. - * @param {Object} [testerConfig] Optional, extra configuration for the tester - * @constructor - */ - constructor(testerConfig) { - - /** - * The configuration to use for this tester. Combination of the tester - * configuration and the default configuration. - * @type {Object} - */ - this.testerConfig = lodash.merge( - - // we have to clone because merge uses the first argument for recipient - lodash.cloneDeep(defaultConfig), - testerConfig, - { rules: { "rule-tester/validate-ast": "error" } } - ); - - /** - * Rule definitions to define before tests. - * @type {Object} - */ - this.rules = {}; - this.linter = new Linter(); - } - - /** - * Set the configuration to use for all future tests - * @param {Object} config the configuration to use. - * @returns {void} - */ - static setDefaultConfig(config) { - if (typeof config !== "object") { - throw new TypeError("RuleTester.setDefaultConfig: config must be an object"); - } - defaultConfig = config; - - // Make sure the rules object exists since it is assumed to exist later - defaultConfig.rules = defaultConfig.rules || {}; - } - - /** - * Get the current configuration used for all tests - * @returns {Object} the current configuration - */ - static getDefaultConfig() { - return defaultConfig; - } - - /** - * Reset the configuration to the initial configuration of the tester removing - * any changes made until now. - * @returns {void} - */ - static resetDefaultConfig() { - defaultConfig = lodash.cloneDeep(testerDefaultConfig); - } - - - /* - * If people use `mocha test.js --watch` command, `describe` and `it` function - * instances are different for each execution. So `describe` and `it` should get fresh instance - * always. - */ - static get describe() { - return ( - this[DESCRIBE] || - (typeof describe === "function" ? describe : describeDefaultHandler) - ); - } - - static set describe(value) { - this[DESCRIBE] = value; - } - - static get it() { - return ( - this[IT] || - (typeof it === "function" ? it : itDefaultHandler) - ); - } - - static set it(value) { - this[IT] = value; - } - - /** - * Define a rule for one particular run of tests. - * @param {string} name The name of the rule to define. - * @param {Function} rule The rule definition. - * @returns {void} - */ - defineRule(name, rule) { - this.rules[name] = rule; - } - - /** - * Adds a new rule test to execute. - * @param {string} ruleName The name of the rule to run. - * @param {Function} rule The rule to test. - * @param {Object} test The collection of tests to run. - * @returns {void} - */ - run(ruleName, rule, test) { - - const testerConfig = this.testerConfig, - requiredScenarios = ["valid", "invalid"], - scenarioErrors = [], - linter = this.linter; - - if (lodash.isNil(test) || typeof test !== "object") { - throw new TypeError(`Test Scenarios for rule ${ruleName} : Could not find test scenario object`); - } - - requiredScenarios.forEach(scenarioType => { - if (lodash.isNil(test[scenarioType])) { - scenarioErrors.push(`Could not find any ${scenarioType} test scenarios`); - } - }); - - if (scenarioErrors.length > 0) { - throw new Error([ - `Test Scenarios for rule ${ruleName} is invalid:` - ].concat(scenarioErrors).join("\n")); - } - - - linter.defineRule(ruleName, Object.assign({}, rule, { - - // Create a wrapper rule that freezes the `context` properties. - create(context) { - freezeDeeply(context.options); - freezeDeeply(context.settings); - freezeDeeply(context.parserOptions); - - return (typeof rule === "function" ? rule : rule.create)(context); - } - })); - - linter.defineRules(this.rules); - - const ruleMap = linter.getRules(); - - /** - * Run the rule for the given item - * @param {string|Object} item Item to run the rule against - * @returns {Object} Eslint run result - * @private - */ - function runRuleForItem(item) { - let config = lodash.cloneDeep(testerConfig), - code, filename, beforeAST, afterAST; - - if (typeof item === "string") { - code = item; - } else { - code = item.code; - - /* - * Assumes everything on the item is a config except for the - * parameters used by this tester - */ - const itemConfig = lodash.omit(item, RuleTesterParameters); - - /* - * Create the config object from the tester config and this item - * specific configurations. - */ - config = lodash.merge( - config, - itemConfig - ); - } - - if (item.filename) { - filename = item.filename; - } - - if (Object.prototype.hasOwnProperty.call(item, "options")) { - assert(Array.isArray(item.options), "options must be an array"); - config.rules[ruleName] = [1].concat(item.options); - } else { - config.rules[ruleName] = 1; - } - - const schema = validator.getRuleOptionsSchema(rule); - - /* - * Setup AST getters. - * The goal is to check whether or not AST was modified when - * running the rule under test. - */ - linter.defineRule("rule-tester/validate-ast", () => ({ - Program(node) { - beforeAST = cloneDeeplyExcludesParent(node); - }, - "Program:exit"(node) { - afterAST = node; - } - })); - - if (schema) { - ajv.validateSchema(schema); - - if (ajv.errors) { - const errors = ajv.errors.map(error => { - const field = error.dataPath[0] === "." ? error.dataPath.slice(1) : error.dataPath; - - return `\t${field}: ${error.message}`; - }).join("\n"); - - throw new Error([`Schema for rule ${ruleName} is invalid:`, errors]); - } - } - - validator.validate(config, "rule-tester", ruleMap.get.bind(ruleMap), new Environments()); - - return { - messages: linter.verify(code, config, filename, true), - beforeAST, - afterAST: cloneDeeplyExcludesParent(afterAST) - }; - } - - /** - * Check if the AST was changed - * @param {ASTNode} beforeAST AST node before running - * @param {ASTNode} afterAST AST node after running - * @returns {void} - * @private - */ - function assertASTDidntChange(beforeAST, afterAST) { - if (!lodash.isEqual(beforeAST, afterAST)) { - - // Not using directly to avoid performance problem in node 6.1.0. See #6111 - // eslint-disable-next-line no-restricted-properties - assert.deepEqual(beforeAST, afterAST, "Rule should not modify AST."); - } - } - - /** - * Check if the template is valid or not - * all valid cases go through this - * @param {string|Object} item Item to run the rule against - * @returns {void} - * @private - */ - function testValidTemplate(item) { - const result = runRuleForItem(item); - const messages = result.messages; - - assert.strictEqual(messages.length, 0, util.format("Should have no errors but had %d: %s", - messages.length, util.inspect(messages))); - - assertASTDidntChange(result.beforeAST, result.afterAST); - } - - /** - * Asserts that the message matches its expected value. If the expected - * value is a regular expression, it is checked against the actual - * value. - * @param {string} actual Actual value - * @param {string|RegExp} expected Expected value - * @returns {void} - * @private - */ - function assertMessageMatches(actual, expected) { - if (expected instanceof RegExp) { - - // assert.js doesn't have a built-in RegExp match function - assert.ok( - expected.test(actual), - `Expected '${actual}' to match ${expected}` - ); - } else { - assert.strictEqual(actual, expected); - } - } - - /** - * Check if the template is invalid or not - * all invalid cases go through this. - * @param {string|Object} item Item to run the rule against - * @returns {void} - * @private - */ - function testInvalidTemplate(item) { - assert.ok(item.errors || item.errors === 0, - `Did not specify errors for an invalid test of ${ruleName}`); - - const result = runRuleForItem(item); - const messages = result.messages; - - - if (typeof item.errors === "number") { - assert.strictEqual(messages.length, item.errors, util.format("Should have %d error%s but had %d: %s", - item.errors, item.errors === 1 ? "" : "s", messages.length, util.inspect(messages))); - } else { - assert.strictEqual( - messages.length, item.errors.length, - util.format( - "Should have %d error%s but had %d: %s", - item.errors.length, item.errors.length === 1 ? "" : "s", messages.length, util.inspect(messages) - ) - ); - - const hasMessageOfThisRule = messages.some(m => m.ruleId === ruleName); - - for (let i = 0, l = item.errors.length; i < l; i++) { - const error = item.errors[i]; - const message = messages[i]; - - assert(!message.fatal, `A fatal parsing error occurred: ${message.message}`); - assert(hasMessageOfThisRule, "Error rule name should be the same as the name of the rule being tested"); - - if (typeof error === "string" || error instanceof RegExp) { - - // Just an error message. - assertMessageMatches(message.message, error); - } else if (typeof error === "object") { - - /* - * Error object. - * This may have a message, node type, line, and/or - * column. - */ - if (error.message) { - assertMessageMatches(message.message, error.message); - } - - if (error.messageId) { - const hOP = Object.hasOwnProperty.call.bind(Object.hasOwnProperty); - - // verify that `error.message` is `undefined` - assert.strictEqual(error.message, void 0, "Error should not specify both a message and a messageId."); - if (!hOP(rule, "meta") || !hOP(rule.meta, "messages")) { - assert.fail("Rule must specify a messages hash in `meta`"); - } - if (!hOP(rule.meta.messages, error.messageId)) { - const friendlyIDList = `[${Object.keys(rule.meta.messages).map(key => `'${key}'`).join(", ")}]`; - - assert.fail(`Invalid messageId '${error.messageId}'. Expected one of ${friendlyIDList}.`); - } - - let expectedMessage = rule.meta.messages[error.messageId]; - - if (error.data) { - expectedMessage = interpolate(expectedMessage, error.data); - } - - assertMessageMatches(message.message, expectedMessage); - } - - if (error.type) { - assert.strictEqual(message.nodeType, error.type, `Error type should be ${error.type}, found ${message.nodeType}`); - } - - if (error.hasOwnProperty("line")) { - assert.strictEqual(message.line, error.line, `Error line should be ${error.line}`); - } - - if (error.hasOwnProperty("column")) { - assert.strictEqual(message.column, error.column, `Error column should be ${error.column}`); - } - - if (error.hasOwnProperty("endLine")) { - assert.strictEqual(message.endLine, error.endLine, `Error endLine should be ${error.endLine}`); - } - - if (error.hasOwnProperty("endColumn")) { - assert.strictEqual(message.endColumn, error.endColumn, `Error endColumn should be ${error.endColumn}`); - } - } else { - - // Message was an unexpected type - assert.fail(message, null, "Error should be a string, object, or RegExp."); - } - } - } - - if (item.hasOwnProperty("output")) { - if (item.output === null) { - assert.strictEqual( - messages.filter(message => message.fix).length, - 0, - "Expected no autofixes to be suggested" - ); - } else { - const fixResult = SourceCodeFixer.applyFixes(item.code, messages); - - // eslint-disable-next-line no-restricted-properties - assert.equal(fixResult.output, item.output, "Output is incorrect."); - } - } - - assertASTDidntChange(result.beforeAST, result.afterAST); - } - - /* - * This creates a mocha test suite and pipes all supplied info through - * one of the templates above. - */ - RuleTester.describe(ruleName, () => { - RuleTester.describe("valid", () => { - test.valid.forEach(valid => { - RuleTester.it(typeof valid === "object" ? valid.code : valid, () => { - testValidTemplate(valid); - }); - }); - }); - - RuleTester.describe("invalid", () => { - test.invalid.forEach(invalid => { - RuleTester.it(invalid.code, () => { - testInvalidTemplate(invalid); - }); - }); - }); - }); - } -} - -RuleTester[DESCRIBE] = RuleTester[IT] = null; - -module.exports = RuleTester; diff --git a/node_modules/eslint/lib/timing.js b/node_modules/eslint/lib/timing.js deleted file mode 100644 index 9452e41..0000000 --- a/node_modules/eslint/lib/timing.js +++ /dev/null @@ -1,139 +0,0 @@ -/** - * @fileoverview Tracks performance of individual rules. - * @author Brandon Mills - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/* istanbul ignore next */ -/** - * Align the string to left - * @param {string} str string to evaluate - * @param {int} len length of the string - * @param {string} ch delimiter character - * @returns {string} modified string - * @private - */ -function alignLeft(str, len, ch) { - return str + new Array(len - str.length + 1).join(ch || " "); -} - -/* istanbul ignore next */ -/** - * Align the string to right - * @param {string} str string to evaluate - * @param {int} len length of the string - * @param {string} ch delimiter character - * @returns {string} modified string - * @private - */ -function alignRight(str, len, ch) { - return new Array(len - str.length + 1).join(ch || " ") + str; -} - -//------------------------------------------------------------------------------ -// Module definition -//------------------------------------------------------------------------------ - -const enabled = !!process.env.TIMING; - -const HEADERS = ["Rule", "Time (ms)", "Relative"]; -const ALIGN = [alignLeft, alignRight, alignRight]; - -/* istanbul ignore next */ -/** - * display the data - * @param {Object} data Data object to be displayed - * @returns {string} modified string - * @private - */ -function display(data) { - let total = 0; - const rows = Object.keys(data) - .map(key => { - const time = data[key]; - - total += time; - return [key, time]; - }) - .sort((a, b) => b[1] - a[1]) - .slice(0, 10); - - rows.forEach(row => { - row.push(`${(row[1] * 100 / total).toFixed(1)}%`); - row[1] = row[1].toFixed(3); - }); - - rows.unshift(HEADERS); - - const widths = []; - - rows.forEach(row => { - const len = row.length; - - for (let i = 0; i < len; i++) { - const n = row[i].length; - - if (!widths[i] || n > widths[i]) { - widths[i] = n; - } - } - }); - - const table = rows.map(row => ( - row - .map((cell, index) => ALIGN[index](cell, widths[index])) - .join(" | ") - )); - - table.splice(1, 0, widths.map((width, index) => { - const extraAlignment = index !== 0 && index !== widths.length - 1 ? 2 : 1; - - return ALIGN[index](":", width + extraAlignment, "-"); - }).join("|")); - - console.log(table.join("\n")); // eslint-disable-line no-console -} - -/* istanbul ignore next */ -module.exports = (function() { - - const data = Object.create(null); - - /** - * Time the run - * @param {*} key key from the data object - * @param {Function} fn function to be called - * @returns {Function} function to be executed - * @private - */ - function time(key, fn) { - if (typeof data[key] === "undefined") { - data[key] = 0; - } - - return function() { - let t = process.hrtime(); - - fn.apply(null, Array.prototype.slice.call(arguments)); - t = process.hrtime(t); - data[key] += t[0] * 1e3 + t[1] / 1e6; - }; - } - - if (enabled) { - process.on("exit", () => { - display(data); - }); - } - - return { - time, - enabled - }; - -}()); diff --git a/node_modules/eslint/lib/token-store/backward-token-comment-cursor.js b/node_modules/eslint/lib/token-store/backward-token-comment-cursor.js deleted file mode 100644 index 7c2137a..0000000 --- a/node_modules/eslint/lib/token-store/backward-token-comment-cursor.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @fileoverview Define the cursor which iterates tokens and comments in reverse. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const Cursor = require("./cursor"); -const utils = require("./utils"); - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * The cursor which iterates tokens and comments in reverse. - */ -module.exports = class BackwardTokenCommentCursor extends Cursor { - - /** - * Initializes this cursor. - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @param {Object} indexMap - The map from locations to indices in `tokens`. - * @param {number} startLoc - The start location of the iteration range. - * @param {number} endLoc - The end location of the iteration range. - */ - constructor(tokens, comments, indexMap, startLoc, endLoc) { - super(); - this.tokens = tokens; - this.comments = comments; - this.tokenIndex = utils.getLastIndex(tokens, indexMap, endLoc); - this.commentIndex = utils.search(comments, endLoc) - 1; - this.border = startLoc; - } - - /** @inheritdoc */ - moveNext() { - const token = (this.tokenIndex >= 0) ? this.tokens[this.tokenIndex] : null; - const comment = (this.commentIndex >= 0) ? this.comments[this.commentIndex] : null; - - if (token && (!comment || token.range[1] > comment.range[1])) { - this.current = token; - this.tokenIndex -= 1; - } else if (comment) { - this.current = comment; - this.commentIndex -= 1; - } else { - this.current = null; - } - - return Boolean(this.current) && (this.border === -1 || this.current.range[0] >= this.border); - } -}; diff --git a/node_modules/eslint/lib/token-store/backward-token-cursor.js b/node_modules/eslint/lib/token-store/backward-token-cursor.js deleted file mode 100644 index 93973bc..0000000 --- a/node_modules/eslint/lib/token-store/backward-token-cursor.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @fileoverview Define the cursor which iterates tokens only in reverse. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const Cursor = require("./cursor"); -const utils = require("./utils"); - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * The cursor which iterates tokens only in reverse. - */ -module.exports = class BackwardTokenCursor extends Cursor { - - /** - * Initializes this cursor. - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @param {Object} indexMap - The map from locations to indices in `tokens`. - * @param {number} startLoc - The start location of the iteration range. - * @param {number} endLoc - The end location of the iteration range. - */ - constructor(tokens, comments, indexMap, startLoc, endLoc) { - super(); - this.tokens = tokens; - this.index = utils.getLastIndex(tokens, indexMap, endLoc); - this.indexEnd = utils.getFirstIndex(tokens, indexMap, startLoc); - } - - /** @inheritdoc */ - moveNext() { - if (this.index >= this.indexEnd) { - this.current = this.tokens[this.index]; - this.index -= 1; - return true; - } - return false; - } - - /* - * - * Shorthand for performance. - * - */ - - /** @inheritdoc */ - getOneToken() { - return (this.index >= this.indexEnd) ? this.tokens[this.index] : null; - } -}; diff --git a/node_modules/eslint/lib/token-store/cursor.js b/node_modules/eslint/lib/token-store/cursor.js deleted file mode 100644 index 4e1595c..0000000 --- a/node_modules/eslint/lib/token-store/cursor.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * @fileoverview Define the abstract class about cursors which iterate tokens. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * The abstract class about cursors which iterate tokens. - * - * This class has 2 abstract methods. - * - * - `current: Token | Comment | null` ... The current token. - * - `moveNext(): boolean` ... Moves this cursor to the next token. If the next token didn't exist, it returns `false`. - * - * This is similar to ES2015 Iterators. - * However, Iterators were slow (at 2017-01), so I created this class as similar to C# IEnumerable. - * - * There are the following known sub classes. - * - * - ForwardTokenCursor .......... The cursor which iterates tokens only. - * - BackwardTokenCursor ......... The cursor which iterates tokens only in reverse. - * - ForwardTokenCommentCursor ... The cursor which iterates tokens and comments. - * - BackwardTokenCommentCursor .. The cursor which iterates tokens and comments in reverse. - * - DecorativeCursor - * - FilterCursor ............ The cursor which ignores the specified tokens. - * - SkipCursor .............. The cursor which ignores the first few tokens. - * - LimitCursor ............. The cursor which limits the count of tokens. - * - */ -module.exports = class Cursor { - - /** - * Initializes this cursor. - */ - constructor() { - this.current = null; - } - - /** - * Gets the first token. - * This consumes this cursor. - * @returns {Token|Comment} The first token or null. - */ - getOneToken() { - return this.moveNext() ? this.current : null; - } - - /** - * Gets the first tokens. - * This consumes this cursor. - * @returns {(Token|Comment)[]} All tokens. - */ - getAllTokens() { - const tokens = []; - - while (this.moveNext()) { - tokens.push(this.current); - } - - return tokens; - } - - /** - * Moves this cursor to the next token. - * @returns {boolean} `true` if the next token exists. - * @abstract - */ - /* istanbul ignore next */ - moveNext() { // eslint-disable-line class-methods-use-this - throw new Error("Not implemented."); - } -}; diff --git a/node_modules/eslint/lib/token-store/cursors.js b/node_modules/eslint/lib/token-store/cursors.js deleted file mode 100644 index b315c7e..0000000 --- a/node_modules/eslint/lib/token-store/cursors.js +++ /dev/null @@ -1,92 +0,0 @@ -/** - * @fileoverview Define 2 token factories; forward and backward. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const BackwardTokenCommentCursor = require("./backward-token-comment-cursor"); -const BackwardTokenCursor = require("./backward-token-cursor"); -const FilterCursor = require("./filter-cursor"); -const ForwardTokenCommentCursor = require("./forward-token-comment-cursor"); -const ForwardTokenCursor = require("./forward-token-cursor"); -const LimitCursor = require("./limit-cursor"); -const SkipCursor = require("./skip-cursor"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * The cursor factory. - * @private - */ -class CursorFactory { - - /** - * Initializes this cursor. - * @param {Function} TokenCursor - The class of the cursor which iterates tokens only. - * @param {Function} TokenCommentCursor - The class of the cursor which iterates the mix of tokens and comments. - */ - constructor(TokenCursor, TokenCommentCursor) { - this.TokenCursor = TokenCursor; - this.TokenCommentCursor = TokenCommentCursor; - } - - /** - * Creates a base cursor instance that can be decorated by createCursor. - * - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @param {Object} indexMap - The map from locations to indices in `tokens`. - * @param {number} startLoc - The start location of the iteration range. - * @param {number} endLoc - The end location of the iteration range. - * @param {boolean} includeComments - The flag to iterate comments as well. - * @returns {Cursor} The created base cursor. - */ - createBaseCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments) { - const Cursor = includeComments ? this.TokenCommentCursor : this.TokenCursor; - - return new Cursor(tokens, comments, indexMap, startLoc, endLoc); - } - - /** - * Creates a cursor that iterates tokens with normalized options. - * - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @param {Object} indexMap - The map from locations to indices in `tokens`. - * @param {number} startLoc - The start location of the iteration range. - * @param {number} endLoc - The end location of the iteration range. - * @param {boolean} includeComments - The flag to iterate comments as well. - * @param {Function|null} filter - The predicate function to choose tokens. - * @param {number} skip - The count of tokens the cursor skips. - * @param {number} count - The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility. - * @returns {Cursor} The created cursor. - */ - createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, skip, count) { - let cursor = this.createBaseCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments); - - if (filter) { - cursor = new FilterCursor(cursor, filter); - } - if (skip >= 1) { - cursor = new SkipCursor(cursor, skip); - } - if (count >= 0) { - cursor = new LimitCursor(cursor, count); - } - - return cursor; - } -} - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -exports.forward = new CursorFactory(ForwardTokenCursor, ForwardTokenCommentCursor); -exports.backward = new CursorFactory(BackwardTokenCursor, BackwardTokenCommentCursor); diff --git a/node_modules/eslint/lib/token-store/decorative-cursor.js b/node_modules/eslint/lib/token-store/decorative-cursor.js deleted file mode 100644 index f0bff9c..0000000 --- a/node_modules/eslint/lib/token-store/decorative-cursor.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @fileoverview Define the abstract class about cursors which manipulate another cursor. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const Cursor = require("./cursor"); - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * The abstract class about cursors which manipulate another cursor. - */ -module.exports = class DecorativeCursor extends Cursor { - - /** - * Initializes this cursor. - * @param {Cursor} cursor - The cursor to be decorated. - */ - constructor(cursor) { - super(); - this.cursor = cursor; - } - - /** @inheritdoc */ - moveNext() { - const retv = this.cursor.moveNext(); - - this.current = this.cursor.current; - - return retv; - } -}; diff --git a/node_modules/eslint/lib/token-store/filter-cursor.js b/node_modules/eslint/lib/token-store/filter-cursor.js deleted file mode 100644 index 7133627..0000000 --- a/node_modules/eslint/lib/token-store/filter-cursor.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @fileoverview Define the cursor which ignores specified tokens. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const DecorativeCursor = require("./decorative-cursor"); - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * The decorative cursor which ignores specified tokens. - */ -module.exports = class FilterCursor extends DecorativeCursor { - - /** - * Initializes this cursor. - * @param {Cursor} cursor - The cursor to be decorated. - * @param {Function} predicate - The predicate function to decide tokens this cursor iterates. - */ - constructor(cursor, predicate) { - super(cursor); - this.predicate = predicate; - } - - /** @inheritdoc */ - moveNext() { - const predicate = this.predicate; - - while (super.moveNext()) { - if (predicate(this.current)) { - return true; - } - } - return false; - } -}; diff --git a/node_modules/eslint/lib/token-store/forward-token-comment-cursor.js b/node_modules/eslint/lib/token-store/forward-token-comment-cursor.js deleted file mode 100644 index be08552..0000000 --- a/node_modules/eslint/lib/token-store/forward-token-comment-cursor.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @fileoverview Define the cursor which iterates tokens and comments. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const Cursor = require("./cursor"); -const utils = require("./utils"); - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * The cursor which iterates tokens and comments. - */ -module.exports = class ForwardTokenCommentCursor extends Cursor { - - /** - * Initializes this cursor. - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @param {Object} indexMap - The map from locations to indices in `tokens`. - * @param {number} startLoc - The start location of the iteration range. - * @param {number} endLoc - The end location of the iteration range. - */ - constructor(tokens, comments, indexMap, startLoc, endLoc) { - super(); - this.tokens = tokens; - this.comments = comments; - this.tokenIndex = utils.getFirstIndex(tokens, indexMap, startLoc); - this.commentIndex = utils.search(comments, startLoc); - this.border = endLoc; - } - - /** @inheritdoc */ - moveNext() { - const token = (this.tokenIndex < this.tokens.length) ? this.tokens[this.tokenIndex] : null; - const comment = (this.commentIndex < this.comments.length) ? this.comments[this.commentIndex] : null; - - if (token && (!comment || token.range[0] < comment.range[0])) { - this.current = token; - this.tokenIndex += 1; - } else if (comment) { - this.current = comment; - this.commentIndex += 1; - } else { - this.current = null; - } - - return Boolean(this.current) && (this.border === -1 || this.current.range[1] <= this.border); - } -}; diff --git a/node_modules/eslint/lib/token-store/forward-token-cursor.js b/node_modules/eslint/lib/token-store/forward-token-cursor.js deleted file mode 100644 index 523ed39..0000000 --- a/node_modules/eslint/lib/token-store/forward-token-cursor.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @fileoverview Define the cursor which iterates tokens only. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const Cursor = require("./cursor"); -const utils = require("./utils"); - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * The cursor which iterates tokens only. - */ -module.exports = class ForwardTokenCursor extends Cursor { - - /** - * Initializes this cursor. - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @param {Object} indexMap - The map from locations to indices in `tokens`. - * @param {number} startLoc - The start location of the iteration range. - * @param {number} endLoc - The end location of the iteration range. - */ - constructor(tokens, comments, indexMap, startLoc, endLoc) { - super(); - this.tokens = tokens; - this.index = utils.getFirstIndex(tokens, indexMap, startLoc); - this.indexEnd = utils.getLastIndex(tokens, indexMap, endLoc); - } - - /** @inheritdoc */ - moveNext() { - if (this.index <= this.indexEnd) { - this.current = this.tokens[this.index]; - this.index += 1; - return true; - } - return false; - } - - /* - * - * Shorthand for performance. - * - */ - - /** @inheritdoc */ - getOneToken() { - return (this.index <= this.indexEnd) ? this.tokens[this.index] : null; - } - - /** @inheritdoc */ - getAllTokens() { - return this.tokens.slice(this.index, this.indexEnd + 1); - } -}; diff --git a/node_modules/eslint/lib/token-store/index.js b/node_modules/eslint/lib/token-store/index.js deleted file mode 100644 index 1446b9f..0000000 --- a/node_modules/eslint/lib/token-store/index.js +++ /dev/null @@ -1,633 +0,0 @@ -/** - * @fileoverview Object to handle access and retrieval of tokens. - * @author Brandon Mills - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const assert = require("assert"); -const cursors = require("./cursors"); -const ForwardTokenCursor = require("./forward-token-cursor"); -const PaddedTokenCursor = require("./padded-token-cursor"); -const utils = require("./utils"); -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const TOKENS = Symbol("tokens"); -const COMMENTS = Symbol("comments"); -const INDEX_MAP = Symbol("indexMap"); - -/** - * Creates the map from locations to indices in `tokens`. - * - * The first/last location of tokens is mapped to the index of the token. - * The first/last location of comments is mapped to the index of the next token of each comment. - * - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @returns {Object} The map from locations to indices in `tokens`. - * @private - */ -function createIndexMap(tokens, comments) { - const map = Object.create(null); - let tokenIndex = 0; - let commentIndex = 0; - let nextStart = 0; - let range = null; - - while (tokenIndex < tokens.length || commentIndex < comments.length) { - nextStart = (commentIndex < comments.length) ? comments[commentIndex].range[0] : Number.MAX_SAFE_INTEGER; - while (tokenIndex < tokens.length && (range = tokens[tokenIndex].range)[0] < nextStart) { - map[range[0]] = tokenIndex; - map[range[1] - 1] = tokenIndex; - tokenIndex += 1; - } - - nextStart = (tokenIndex < tokens.length) ? tokens[tokenIndex].range[0] : Number.MAX_SAFE_INTEGER; - while (commentIndex < comments.length && (range = comments[commentIndex].range)[0] < nextStart) { - map[range[0]] = tokenIndex; - map[range[1] - 1] = tokenIndex; - commentIndex += 1; - } - } - - return map; -} - -/** - * Creates the cursor iterates tokens with options. - * - * @param {CursorFactory} factory - The cursor factory to initialize cursor. - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @param {Object} indexMap - The map from locations to indices in `tokens`. - * @param {number} startLoc - The start location of the iteration range. - * @param {number} endLoc - The end location of the iteration range. - * @param {number|Function|Object} [opts=0] - The option object. If this is a number then it's `opts.skip`. If this is a function then it's `opts.filter`. - * @param {boolean} [opts.includeComments=false] - The flag to iterate comments as well. - * @param {Function|null} [opts.filter=null] - The predicate function to choose tokens. - * @param {number} [opts.skip=0] - The count of tokens the cursor skips. - * @returns {Cursor} The created cursor. - * @private - */ -function createCursorWithSkip(factory, tokens, comments, indexMap, startLoc, endLoc, opts) { - let includeComments = false; - let skip = 0; - let filter = null; - - if (typeof opts === "number") { - skip = opts | 0; - } else if (typeof opts === "function") { - filter = opts; - } else if (opts) { - includeComments = !!opts.includeComments; - skip = opts.skip | 0; - filter = opts.filter || null; - } - assert(skip >= 0, "options.skip should be zero or a positive integer."); - assert(!filter || typeof filter === "function", "options.filter should be a function."); - - return factory.createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, skip, -1); -} - -/** - * Creates the cursor iterates tokens with options. - * - * @param {CursorFactory} factory - The cursor factory to initialize cursor. - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @param {Object} indexMap - The map from locations to indices in `tokens`. - * @param {number} startLoc - The start location of the iteration range. - * @param {number} endLoc - The end location of the iteration range. - * @param {number|Function|Object} [opts=0] - The option object. If this is a number then it's `opts.count`. If this is a function then it's `opts.filter`. - * @param {boolean} [opts.includeComments] - The flag to iterate comments as well. - * @param {Function|null} [opts.filter=null] - The predicate function to choose tokens. - * @param {number} [opts.count=0] - The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility. - * @returns {Cursor} The created cursor. - * @private - */ -function createCursorWithCount(factory, tokens, comments, indexMap, startLoc, endLoc, opts) { - let includeComments = false; - let count = 0; - let countExists = false; - let filter = null; - - if (typeof opts === "number") { - count = opts | 0; - countExists = true; - } else if (typeof opts === "function") { - filter = opts; - } else if (opts) { - includeComments = !!opts.includeComments; - count = opts.count | 0; - countExists = typeof opts.count === "number"; - filter = opts.filter || null; - } - assert(count >= 0, "options.count should be zero or a positive integer."); - assert(!filter || typeof filter === "function", "options.filter should be a function."); - - return factory.createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, 0, countExists ? count : -1); -} - -/** - * Creates the cursor iterates tokens with options. - * This is overload function of the below. - * - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @param {Object} indexMap - The map from locations to indices in `tokens`. - * @param {number} startLoc - The start location of the iteration range. - * @param {number} endLoc - The end location of the iteration range. - * @param {Function|Object} opts - The option object. If this is a function then it's `opts.filter`. - * @param {boolean} [opts.includeComments] - The flag to iterate comments as well. - * @param {Function|null} [opts.filter=null] - The predicate function to choose tokens. - * @param {number} [opts.count=0] - The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility. - * @returns {Cursor} The created cursor. - * @private - */ -/** - * Creates the cursor iterates tokens with options. - * - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @param {Object} indexMap - The map from locations to indices in `tokens`. - * @param {number} startLoc - The start location of the iteration range. - * @param {number} endLoc - The end location of the iteration range. - * @param {number} [beforeCount=0] - The number of tokens before the node to retrieve. - * @param {boolean} [afterCount=0] - The number of tokens after the node to retrieve. - * @returns {Cursor} The created cursor. - * @private - */ -function createCursorWithPadding(tokens, comments, indexMap, startLoc, endLoc, beforeCount, afterCount) { - if (typeof beforeCount === "undefined" && typeof afterCount === "undefined") { - return new ForwardTokenCursor(tokens, comments, indexMap, startLoc, endLoc); - } - if (typeof beforeCount === "number" || typeof beforeCount === "undefined") { - return new PaddedTokenCursor(tokens, comments, indexMap, startLoc, endLoc, beforeCount | 0, afterCount | 0); - } - return createCursorWithCount(cursors.forward, tokens, comments, indexMap, startLoc, endLoc, beforeCount); -} - -/** - * Gets comment tokens that are adjacent to the current cursor position. - * @param {Cursor} cursor - A cursor instance. - * @returns {Array} An array of comment tokens adjacent to the current cursor position. - * @private - */ -function getAdjacentCommentTokensFromCursor(cursor) { - const tokens = []; - let currentToken = cursor.getOneToken(); - - while (currentToken && astUtils.isCommentToken(currentToken)) { - tokens.push(currentToken); - currentToken = cursor.getOneToken(); - } - - return tokens; -} - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * The token store. - * - * This class provides methods to get tokens by locations as fast as possible. - * The methods are a part of public API, so we should be careful if it changes this class. - * - * People can get tokens in O(1) by the hash map which is mapping from the location of tokens/comments to tokens. - * Also people can get a mix of tokens and comments in O(log k), the k is the number of comments. - * Assuming that comments to be much fewer than tokens, this does not make hash map from token's locations to comments to reduce memory cost. - * This uses binary-searching instead for comments. - */ -module.exports = class TokenStore { - - /** - * Initializes this token store. - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - */ - constructor(tokens, comments) { - this[TOKENS] = tokens; - this[COMMENTS] = comments; - this[INDEX_MAP] = createIndexMap(tokens, comments); - } - - //-------------------------------------------------------------------------- - // Gets single token. - //-------------------------------------------------------------------------- - - /** - * Gets the token starting at the specified index. - * @param {number} offset - Index of the start of the token's range. - * @param {Object} [options=0] - The option object. - * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well. - * @returns {Token|null} The token starting at index, or null if no such token. - */ - getTokenByRangeStart(offset, options) { - const includeComments = options && options.includeComments; - const token = cursors.forward.createBaseCursor( - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - offset, - -1, - includeComments - ).getOneToken(); - - if (token && token.range[0] === offset) { - return token; - } - return null; - } - - /** - * Gets the first token of the given node. - * @param {ASTNode} node - The AST node. - * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`. - * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well. - * @param {Function|null} [options.filter=null] - The predicate function to choose tokens. - * @param {number} [options.skip=0] - The count of tokens the cursor skips. - * @returns {Token|null} An object representing the token. - */ - getFirstToken(node, options) { - return createCursorWithSkip( - cursors.forward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - node.range[0], - node.range[1], - options - ).getOneToken(); - } - - /** - * Gets the last token of the given node. - * @param {ASTNode} node - The AST node. - * @param {number|Function|Object} [options=0] - The option object. Same options as getFirstToken() - * @returns {Token|null} An object representing the token. - */ - getLastToken(node, options) { - return createCursorWithSkip( - cursors.backward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - node.range[0], - node.range[1], - options - ).getOneToken(); - } - - /** - * Gets the token that precedes a given node or token. - * @param {ASTNode|Token|Comment} node - The AST node or token. - * @param {number|Function|Object} [options=0] - The option object. Same options as getFirstToken() - * @returns {Token|null} An object representing the token. - */ - getTokenBefore(node, options) { - return createCursorWithSkip( - cursors.backward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - -1, - node.range[0], - options - ).getOneToken(); - } - - /** - * Gets the token that follows a given node or token. - * @param {ASTNode|Token|Comment} node - The AST node or token. - * @param {number|Function|Object} [options=0] - The option object. Same options as getFirstToken() - * @returns {Token|null} An object representing the token. - */ - getTokenAfter(node, options) { - return createCursorWithSkip( - cursors.forward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - node.range[1], - -1, - options - ).getOneToken(); - } - - /** - * Gets the first token between two non-overlapping nodes. - * @param {ASTNode|Token|Comment} left - Node before the desired token range. - * @param {ASTNode|Token|Comment} right - Node after the desired token range. - * @param {number|Function|Object} [options=0] - The option object. Same options as getFirstToken() - * @returns {Token|null} An object representing the token. - */ - getFirstTokenBetween(left, right, options) { - return createCursorWithSkip( - cursors.forward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - left.range[1], - right.range[0], - options - ).getOneToken(); - } - - /** - * Gets the last token between two non-overlapping nodes. - * @param {ASTNode|Token|Comment} left Node before the desired token range. - * @param {ASTNode|Token|Comment} right Node after the desired token range. - * @param {number|Function|Object} [options=0] - The option object. Same options as getFirstToken() - * @returns {Token|null} An object representing the token. - */ - getLastTokenBetween(left, right, options) { - return createCursorWithSkip( - cursors.backward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - left.range[1], - right.range[0], - options - ).getOneToken(); - } - - /** - * Gets the token that precedes a given node or token in the token stream. - * This is defined for backward compatibility. Use `includeComments` option instead. - * TODO: We have a plan to remove this in a future major version. - * @param {ASTNode|Token|Comment} node The AST node or token. - * @param {number} [skip=0] A number of tokens to skip. - * @returns {Token|null} An object representing the token. - * @deprecated - */ - getTokenOrCommentBefore(node, skip) { - return this.getTokenBefore(node, { includeComments: true, skip }); - } - - /** - * Gets the token that follows a given node or token in the token stream. - * This is defined for backward compatibility. Use `includeComments` option instead. - * TODO: We have a plan to remove this in a future major version. - * @param {ASTNode|Token|Comment} node The AST node or token. - * @param {number} [skip=0] A number of tokens to skip. - * @returns {Token|null} An object representing the token. - * @deprecated - */ - getTokenOrCommentAfter(node, skip) { - return this.getTokenAfter(node, { includeComments: true, skip }); - } - - //-------------------------------------------------------------------------- - // Gets multiple tokens. - //-------------------------------------------------------------------------- - - /** - * Gets the first `count` tokens of the given node. - * @param {ASTNode} node - The AST node. - * @param {number|Function|Object} [options=0] - The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`. - * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well. - * @param {Function|null} [options.filter=null] - The predicate function to choose tokens. - * @param {number} [options.count=0] - The maximum count of tokens the cursor iterates. - * @returns {Token[]} Tokens. - */ - getFirstTokens(node, options) { - return createCursorWithCount( - cursors.forward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - node.range[0], - node.range[1], - options - ).getAllTokens(); - } - - /** - * Gets the last `count` tokens of the given node. - * @param {ASTNode} node - The AST node. - * @param {number|Function|Object} [options=0] - The option object. Same options as getFirstTokens() - * @returns {Token[]} Tokens. - */ - getLastTokens(node, options) { - return createCursorWithCount( - cursors.backward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - node.range[0], - node.range[1], - options - ).getAllTokens().reverse(); - } - - /** - * Gets the `count` tokens that precedes a given node or token. - * @param {ASTNode|Token|Comment} node - The AST node or token. - * @param {number|Function|Object} [options=0] - The option object. Same options as getFirstTokens() - * @returns {Token[]} Tokens. - */ - getTokensBefore(node, options) { - return createCursorWithCount( - cursors.backward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - -1, - node.range[0], - options - ).getAllTokens().reverse(); - } - - /** - * Gets the `count` tokens that follows a given node or token. - * @param {ASTNode|Token|Comment} node - The AST node or token. - * @param {number|Function|Object} [options=0] - The option object. Same options as getFirstTokens() - * @returns {Token[]} Tokens. - */ - getTokensAfter(node, options) { - return createCursorWithCount( - cursors.forward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - node.range[1], - -1, - options - ).getAllTokens(); - } - - /** - * Gets the first `count` tokens between two non-overlapping nodes. - * @param {ASTNode|Token|Comment} left - Node before the desired token range. - * @param {ASTNode|Token|Comment} right - Node after the desired token range. - * @param {number|Function|Object} [options=0] - The option object. Same options as getFirstTokens() - * @returns {Token[]} Tokens between left and right. - */ - getFirstTokensBetween(left, right, options) { - return createCursorWithCount( - cursors.forward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - left.range[1], - right.range[0], - options - ).getAllTokens(); - } - - /** - * Gets the last `count` tokens between two non-overlapping nodes. - * @param {ASTNode|Token|Comment} left Node before the desired token range. - * @param {ASTNode|Token|Comment} right Node after the desired token range. - * @param {number|Function|Object} [options=0] - The option object. Same options as getFirstTokens() - * @returns {Token[]} Tokens between left and right. - */ - getLastTokensBetween(left, right, options) { - return createCursorWithCount( - cursors.backward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - left.range[1], - right.range[0], - options - ).getAllTokens().reverse(); - } - - /** - * Gets all tokens that are related to the given node. - * @param {ASTNode} node - The AST node. - * @param {Function|Object} options The option object. If this is a function then it's `options.filter`. - * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well. - * @param {Function|null} [options.filter=null] - The predicate function to choose tokens. - * @param {number} [options.count=0] - The maximum count of tokens the cursor iterates. - * @returns {Token[]} Array of objects representing tokens. - */ - /** - * Gets all tokens that are related to the given node. - * @param {ASTNode} node - The AST node. - * @param {int} [beforeCount=0] - The number of tokens before the node to retrieve. - * @param {int} [afterCount=0] - The number of tokens after the node to retrieve. - * @returns {Token[]} Array of objects representing tokens. - */ - getTokens(node, beforeCount, afterCount) { - return createCursorWithPadding( - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - node.range[0], - node.range[1], - beforeCount, - afterCount - ).getAllTokens(); - } - - /** - * Gets all of the tokens between two non-overlapping nodes. - * @param {ASTNode|Token|Comment} left Node before the desired token range. - * @param {ASTNode|Token|Comment} right Node after the desired token range. - * @param {Function|Object} options The option object. If this is a function then it's `options.filter`. - * @param {boolean} [options.includeComments=false] - The flag to iterate comments as well. - * @param {Function|null} [options.filter=null] - The predicate function to choose tokens. - * @param {number} [options.count=0] - The maximum count of tokens the cursor iterates. - * @returns {Token[]} Tokens between left and right. - */ - /** - * Gets all of the tokens between two non-overlapping nodes. - * @param {ASTNode|Token|Comment} left Node before the desired token range. - * @param {ASTNode|Token|Comment} right Node after the desired token range. - * @param {int} [padding=0] Number of extra tokens on either side of center. - * @returns {Token[]} Tokens between left and right. - */ - getTokensBetween(left, right, padding) { - return createCursorWithPadding( - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - left.range[1], - right.range[0], - padding, - padding - ).getAllTokens(); - } - - //-------------------------------------------------------------------------- - // Others. - //-------------------------------------------------------------------------- - - /** - * Checks whether any comments exist or not between the given 2 nodes. - * - * @param {ASTNode} left - The node to check. - * @param {ASTNode} right - The node to check. - * @returns {boolean} `true` if one or more comments exist. - */ - commentsExistBetween(left, right) { - const index = utils.search(this[COMMENTS], left.range[1]); - - return ( - index < this[COMMENTS].length && - this[COMMENTS][index].range[1] <= right.range[0] - ); - } - - /** - * Gets all comment tokens directly before the given node or token. - * @param {ASTNode|token} nodeOrToken The AST node or token to check for adjacent comment tokens. - * @returns {Array} An array of comments in occurrence order. - */ - getCommentsBefore(nodeOrToken) { - const cursor = createCursorWithCount( - cursors.backward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - -1, - nodeOrToken.range[0], - { includeComments: true } - ); - - return getAdjacentCommentTokensFromCursor(cursor).reverse(); - } - - /** - * Gets all comment tokens directly after the given node or token. - * @param {ASTNode|token} nodeOrToken The AST node or token to check for adjacent comment tokens. - * @returns {Array} An array of comments in occurrence order. - */ - getCommentsAfter(nodeOrToken) { - const cursor = createCursorWithCount( - cursors.forward, - this[TOKENS], - this[COMMENTS], - this[INDEX_MAP], - nodeOrToken.range[1], - -1, - { includeComments: true } - ); - - return getAdjacentCommentTokensFromCursor(cursor); - } - - /** - * Gets all comment tokens inside the given node. - * @param {ASTNode} node The AST node to get the comments for. - * @returns {Array} An array of comments in occurrence order. - */ - getCommentsInside(node) { - return this.getTokens(node, { - includeComments: true, - filter: astUtils.isCommentToken - }); - } -}; diff --git a/node_modules/eslint/lib/token-store/limit-cursor.js b/node_modules/eslint/lib/token-store/limit-cursor.js deleted file mode 100644 index efb46cf..0000000 --- a/node_modules/eslint/lib/token-store/limit-cursor.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @fileoverview Define the cursor which limits the number of tokens. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const DecorativeCursor = require("./decorative-cursor"); - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * The decorative cursor which limits the number of tokens. - */ -module.exports = class LimitCursor extends DecorativeCursor { - - /** - * Initializes this cursor. - * @param {Cursor} cursor - The cursor to be decorated. - * @param {number} count - The count of tokens this cursor iterates. - */ - constructor(cursor, count) { - super(cursor); - this.count = count; - } - - /** @inheritdoc */ - moveNext() { - if (this.count > 0) { - this.count -= 1; - return super.moveNext(); - } - return false; - } -}; diff --git a/node_modules/eslint/lib/token-store/padded-token-cursor.js b/node_modules/eslint/lib/token-store/padded-token-cursor.js deleted file mode 100644 index c083aed..0000000 --- a/node_modules/eslint/lib/token-store/padded-token-cursor.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @fileoverview Define the cursor which iterates tokens only, with inflated range. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const ForwardTokenCursor = require("./forward-token-cursor"); - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * The cursor which iterates tokens only, with inflated range. - * This is for the backward compatibility of padding options. - */ -module.exports = class PaddedTokenCursor extends ForwardTokenCursor { - - /** - * Initializes this cursor. - * @param {Token[]} tokens - The array of tokens. - * @param {Comment[]} comments - The array of comments. - * @param {Object} indexMap - The map from locations to indices in `tokens`. - * @param {number} startLoc - The start location of the iteration range. - * @param {number} endLoc - The end location of the iteration range. - * @param {number} beforeCount - The number of tokens this cursor iterates before start. - * @param {number} afterCount - The number of tokens this cursor iterates after end. - */ - constructor(tokens, comments, indexMap, startLoc, endLoc, beforeCount, afterCount) { - super(tokens, comments, indexMap, startLoc, endLoc); - this.index = Math.max(0, this.index - beforeCount); - this.indexEnd = Math.min(tokens.length - 1, this.indexEnd + afterCount); - } -}; diff --git a/node_modules/eslint/lib/token-store/skip-cursor.js b/node_modules/eslint/lib/token-store/skip-cursor.js deleted file mode 100644 index ab34dfa..0000000 --- a/node_modules/eslint/lib/token-store/skip-cursor.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * @fileoverview Define the cursor which ignores the first few tokens. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const DecorativeCursor = require("./decorative-cursor"); - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * The decorative cursor which ignores the first few tokens. - */ -module.exports = class SkipCursor extends DecorativeCursor { - - /** - * Initializes this cursor. - * @param {Cursor} cursor - The cursor to be decorated. - * @param {number} count - The count of tokens this cursor skips. - */ - constructor(cursor, count) { - super(cursor); - this.count = count; - } - - /** @inheritdoc */ - moveNext() { - while (this.count > 0) { - this.count -= 1; - if (!super.moveNext()) { - return false; - } - } - return super.moveNext(); - } -}; diff --git a/node_modules/eslint/lib/token-store/utils.js b/node_modules/eslint/lib/token-store/utils.js deleted file mode 100644 index 34b0a9a..0000000 --- a/node_modules/eslint/lib/token-store/utils.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * @fileoverview Define utilify functions for token store. - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Gets `token.range[0]` from the given token. - * - * @param {Node|Token|Comment} token - The token to get. - * @returns {number} The start location. - * @private - */ -function getStartLocation(token) { - return token.range[0]; -} - -//------------------------------------------------------------------------------ -// Exports -//------------------------------------------------------------------------------ - -/** - * Binary-searches the index of the first token which is after the given location. - * If it was not found, this returns `tokens.length`. - * - * @param {(Token|Comment)[]} tokens - It searches the token in this list. - * @param {number} location - The location to search. - * @returns {number} The found index or `tokens.length`. - */ -exports.search = function search(tokens, location) { - return lodash.sortedIndexBy( - tokens, - { range: [location] }, - getStartLocation - ); -}; - -/** - * Gets the index of the `startLoc` in `tokens`. - * `startLoc` can be the value of `node.range[1]`, so this checks about `startLoc - 1` as well. - * - * @param {(Token|Comment)[]} tokens - The tokens to find an index. - * @param {Object} indexMap - The map from locations to indices. - * @param {number} startLoc - The location to get an index. - * @returns {number} The index. - */ -exports.getFirstIndex = function getFirstIndex(tokens, indexMap, startLoc) { - if (startLoc in indexMap) { - return indexMap[startLoc]; - } - if ((startLoc - 1) in indexMap) { - const index = indexMap[startLoc - 1]; - const token = (index >= 0 && index < tokens.length) ? tokens[index] : null; - - /* - * For the map of "comment's location -> token's index", it points the next token of a comment. - * In that case, +1 is unnecessary. - */ - if (token && token.range[0] >= startLoc) { - return index; - } - return index + 1; - } - return 0; -}; - -/** - * Gets the index of the `endLoc` in `tokens`. - * The information of end locations are recorded at `endLoc - 1` in `indexMap`, so this checks about `endLoc - 1` as well. - * - * @param {(Token|Comment)[]} tokens - The tokens to find an index. - * @param {Object} indexMap - The map from locations to indices. - * @param {number} endLoc - The location to get an index. - * @returns {number} The index. - */ -exports.getLastIndex = function getLastIndex(tokens, indexMap, endLoc) { - if (endLoc in indexMap) { - return indexMap[endLoc] - 1; - } - if ((endLoc - 1) in indexMap) { - const index = indexMap[endLoc - 1]; - const token = (index >= 0 && index < tokens.length) ? tokens[index] : null; - - /* - * For the map of "comment's location -> token's index", it points the next token of a comment. - * In that case, -1 is necessary. - */ - if (token && token.range[1] > endLoc) { - return index - 1; - } - return index; - } - return tokens.length - 1; -}; diff --git a/node_modules/eslint/lib/util/ajv.js b/node_modules/eslint/lib/util/ajv.js deleted file mode 100644 index f9e8b98..0000000 --- a/node_modules/eslint/lib/util/ajv.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @fileoverview The instance of Ajv validator. - * @author Evgeny Poberezkin - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const Ajv = require("ajv"), - metaSchema = require("ajv/lib/refs/json-schema-draft-04.json"); - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -const ajv = new Ajv({ - meta: false, - validateSchema: false, - missingRefs: "ignore", - verbose: true -}); - -ajv.addMetaSchema(metaSchema); -// eslint-disable-next-line no-underscore-dangle -ajv._opts.defaultMeta = metaSchema.id; - -module.exports = ajv; diff --git a/node_modules/eslint/lib/util/apply-disable-directives.js b/node_modules/eslint/lib/util/apply-disable-directives.js deleted file mode 100644 index 8153942..0000000 --- a/node_modules/eslint/lib/util/apply-disable-directives.js +++ /dev/null @@ -1,160 +0,0 @@ -/** - * @fileoverview A module that filters reported problems based on `eslint-disable` and `eslint-enable` comments - * @author Teddy Katz - */ - -"use strict"; - -const lodash = require("lodash"); - -/** - * Compares the locations of two objects in a source file - * @param {{line: number, column: number}} itemA The first object - * @param {{line: number, column: number}} itemB The second object - * @returns {number} A value less than 1 if itemA appears before itemB in the source file, greater than 1 if - * itemA appears after itemB in the source file, or 0 if itemA and itemB have the same location. - */ -function compareLocations(itemA, itemB) { - return itemA.line - itemB.line || itemA.column - itemB.column; -} - -/** - * This is the same as the exported function, except that it - * doesn't handle disable-line and disable-next-line directives, and it always reports unused - * disable directives. - * @param {Object} options options for applying directives. This is the same as the options - * for the exported function, except that `reportUnusedDisableDirectives` is not supported - * (this function always reports unused disable directives). - * @returns {{problems: Problem[], unusedDisableDirectives: Problem[]}} An object with a list - * of filtered problems and unused eslint-disable directives - */ -function applyDirectives(options) { - const problems = []; - let nextDirectiveIndex = 0; - let currentGlobalDisableDirective = null; - const disabledRuleMap = new Map(); - - // enabledRules is only used when there is a current global disable directive. - const enabledRules = new Set(); - const usedDisableDirectives = new Set(); - - for (const problem of options.problems) { - while ( - nextDirectiveIndex < options.directives.length && - compareLocations(options.directives[nextDirectiveIndex], problem) <= 0 - ) { - const directive = options.directives[nextDirectiveIndex++]; - - switch (directive.type) { - case "disable": - if (directive.ruleId === null) { - currentGlobalDisableDirective = directive; - disabledRuleMap.clear(); - enabledRules.clear(); - } else if (currentGlobalDisableDirective) { - enabledRules.delete(directive.ruleId); - disabledRuleMap.set(directive.ruleId, directive); - } else { - disabledRuleMap.set(directive.ruleId, directive); - } - break; - - case "enable": - if (directive.ruleId === null) { - currentGlobalDisableDirective = null; - disabledRuleMap.clear(); - } else if (currentGlobalDisableDirective) { - enabledRules.add(directive.ruleId); - disabledRuleMap.delete(directive.ruleId); - } else { - disabledRuleMap.delete(directive.ruleId); - } - break; - - // no default - } - } - - if (disabledRuleMap.has(problem.ruleId)) { - usedDisableDirectives.add(disabledRuleMap.get(problem.ruleId)); - } else if (currentGlobalDisableDirective && !enabledRules.has(problem.ruleId)) { - usedDisableDirectives.add(currentGlobalDisableDirective); - } else { - problems.push(problem); - } - } - - const unusedDisableDirectives = options.directives - .filter(directive => directive.type === "disable" && !usedDisableDirectives.has(directive)) - .map(directive => ({ - ruleId: null, - message: directive.ruleId - ? `Unused eslint-disable directive (no problems were reported from '${directive.ruleId}').` - : "Unused eslint-disable directive (no problems were reported).", - line: directive.unprocessedDirective.line, - column: directive.unprocessedDirective.column, - severity: 2, - source: null, - nodeType: null - })); - - return { problems, unusedDisableDirectives }; -} - -/** - * Given a list of directive comments (i.e. metadata about eslint-disable and eslint-enable comments) and a list - * of reported problems, determines which problems should be reported. - * @param {Object} options Information about directives and problems - * @param {{ - * type: ("disable"|"enable"|"disable-line"|"disable-next-line"), - * ruleId: (string|null), - * line: number, - * column: number - * }} options.directives Directive comments found in the file, with one-based columns. - * Two directive comments can only have the same location if they also have the same type (e.g. a single eslint-disable - * comment for two different rules is represented as two directives). - * @param {{ruleId: (string|null), line: number, column: number}[]} options.problems - * A list of problems reported by rules, sorted by increasing location in the file, with one-based columns. - * @param {boolean} options.reportUnusedDisableDirectives If `true`, adds additional problems for unused directives - * @returns {{ruleId: (string|null), line: number, column: number}[]} - * A list of reported problems that were not disabled by the directive comments. - */ -module.exports = options => { - const blockDirectives = options.directives - .filter(directive => directive.type === "disable" || directive.type === "enable") - .map(directive => Object.assign({}, directive, { unprocessedDirective: directive })) - .sort(compareLocations); - - const lineDirectives = lodash.flatMap(options.directives, directive => { - switch (directive.type) { - case "disable": - case "enable": - return []; - - case "disable-line": - return [ - { type: "disable", line: directive.line, column: 1, ruleId: directive.ruleId, unprocessedDirective: directive }, - { type: "enable", line: directive.line + 1, column: 0, ruleId: directive.ruleId, unprocessedDirective: directive } - ]; - - case "disable-next-line": - return [ - { type: "disable", line: directive.line + 1, column: 1, ruleId: directive.ruleId, unprocessedDirective: directive }, - { type: "enable", line: directive.line + 2, column: 0, ruleId: directive.ruleId, unprocessedDirective: directive } - ]; - - default: - throw new TypeError(`Unrecognized directive type '${directive.type}'`); - } - }).sort(compareLocations); - - const blockDirectivesResult = applyDirectives({ problems: options.problems, directives: blockDirectives }); - const lineDirectivesResult = applyDirectives({ problems: blockDirectivesResult.problems, directives: lineDirectives }); - - return options.reportUnusedDisableDirectives - ? lineDirectivesResult.problems - .concat(blockDirectivesResult.unusedDisableDirectives) - .concat(lineDirectivesResult.unusedDisableDirectives) - .sort(compareLocations) - : lineDirectivesResult.problems; -}; diff --git a/node_modules/eslint/lib/util/fix-tracker.js b/node_modules/eslint/lib/util/fix-tracker.js deleted file mode 100644 index 067070d..0000000 --- a/node_modules/eslint/lib/util/fix-tracker.js +++ /dev/null @@ -1,120 +0,0 @@ -/** - * @fileoverview Helper class to aid in constructing fix commands. - * @author Alan Pierce - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const astUtils = require("../ast-utils"); - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -/** - * A helper class to combine fix options into a fix command. Currently, it - * exposes some "retain" methods that extend the range of the text being - * replaced so that other fixes won't touch that region in the same pass. - */ -class FixTracker { - - /** - * Create a new FixTracker. - * - * @param {ruleFixer} fixer A ruleFixer instance. - * @param {SourceCode} sourceCode A SourceCode object for the current code. - */ - constructor(fixer, sourceCode) { - this.fixer = fixer; - this.sourceCode = sourceCode; - this.retainedRange = null; - } - - /** - * Mark the given range as "retained", meaning that other fixes may not - * may not modify this region in the same pass. - * - * @param {int[]} range The range to retain. - * @returns {FixTracker} The same RuleFixer, for chained calls. - */ - retainRange(range) { - this.retainedRange = range; - return this; - } - - /** - * Given a node, find the function containing it (or the entire program) and - * mark it as retained, meaning that other fixes may not modify it in this - * pass. This is useful for avoiding conflicts in fixes that modify control - * flow. - * - * @param {ASTNode} node The node to use as a starting point. - * @returns {FixTracker} The same RuleFixer, for chained calls. - */ - retainEnclosingFunction(node) { - const functionNode = astUtils.getUpperFunction(node); - - return this.retainRange(functionNode ? functionNode.range : this.sourceCode.ast.range); - } - - /** - * Given a node or token, find the token before and afterward, and mark that - * range as retained, meaning that other fixes may not modify it in this - * pass. This is useful for avoiding conflicts in fixes that make a small - * change to the code where the AST should not be changed. - * - * @param {ASTNode|Token} nodeOrToken The node or token to use as a starting - * point. The token to the left and right are use in the range. - * @returns {FixTracker} The same RuleFixer, for chained calls. - */ - retainSurroundingTokens(nodeOrToken) { - const tokenBefore = this.sourceCode.getTokenBefore(nodeOrToken) || nodeOrToken; - const tokenAfter = this.sourceCode.getTokenAfter(nodeOrToken) || nodeOrToken; - - return this.retainRange([tokenBefore.range[0], tokenAfter.range[1]]); - } - - /** - * Create a fix command that replaces the given range with the given text, - * accounting for any retained ranges. - * - * @param {int[]} range The range to remove in the fix. - * @param {string} text The text to insert in place of the range. - * @returns {Object} The fix command. - */ - replaceTextRange(range, text) { - let actualRange; - - if (this.retainedRange) { - actualRange = [ - Math.min(this.retainedRange[0], range[0]), - Math.max(this.retainedRange[1], range[1]) - ]; - } else { - actualRange = range; - } - - return this.fixer.replaceTextRange( - actualRange, - this.sourceCode.text.slice(actualRange[0], range[0]) + - text + - this.sourceCode.text.slice(range[1], actualRange[1]) - ); - } - - /** - * Create a fix command that removes the given node or token, accounting for - * any retained ranges. - * - * @param {ASTNode|Token} nodeOrToken The node or token to remove. - * @returns {Object} The fix command. - */ - remove(nodeOrToken) { - return this.replaceTextRange(nodeOrToken.range, ""); - } -} - -module.exports = FixTracker; diff --git a/node_modules/eslint/lib/util/glob-util.js b/node_modules/eslint/lib/util/glob-util.js deleted file mode 100644 index d687aa7..0000000 --- a/node_modules/eslint/lib/util/glob-util.js +++ /dev/null @@ -1,195 +0,0 @@ -/** - * @fileoverview Utilities for working with globs and the filesystem. - * @author Ian VanSchooten - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const lodash = require("lodash"), - fs = require("fs"), - path = require("path"), - GlobSync = require("./glob"), - - pathUtil = require("./path-util"), - IgnoredPaths = require("../ignored-paths"); - -const debug = require("debug")("eslint:glob-util"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Checks if a provided path is a directory and returns a glob string matching - * all files under that directory if so, the path itself otherwise. - * - * Reason for this is that `glob` needs `/**` to collect all the files under a - * directory where as our previous implementation without `glob` simply walked - * a directory that is passed. So this is to maintain backwards compatibility. - * - * Also makes sure all path separators are POSIX style for `glob` compatibility. - * - * @param {Object} [options] An options object - * @param {string[]} [options.extensions=[".js"]] An array of accepted extensions - * @param {string} [options.cwd=process.cwd()] The cwd to use to resolve relative pathnames - * @returns {Function} A function that takes a pathname and returns a glob that - * matches all files with the provided extensions if - * pathname is a directory. - */ -function processPath(options) { - const cwd = (options && options.cwd) || process.cwd(); - let extensions = (options && options.extensions) || [".js"]; - - extensions = extensions.map(ext => ext.replace(/^\./, "")); - - let suffix = "/**"; - - if (extensions.length === 1) { - suffix += `/*.${extensions[0]}`; - } else { - suffix += `/*.{${extensions.join(",")}}`; - } - - /** - * A function that converts a directory name to a glob pattern - * - * @param {string} pathname The directory path to be modified - * @returns {string} The glob path or the file path itself - * @private - */ - return function(pathname) { - let newPath = pathname; - const resolvedPath = path.resolve(cwd, pathname); - - if (fs.existsSync(resolvedPath) && fs.statSync(resolvedPath).isDirectory()) { - newPath = pathname.replace(/[/\\]$/, "") + suffix; - } - - return pathUtil.convertPathToPosix(newPath); - }; -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -/** - * Resolves any directory patterns into glob-based patterns for easier handling. - * @param {string[]} patterns File patterns (such as passed on the command line). - * @param {Object} options An options object. - * @returns {string[]} The equivalent glob patterns and filepath strings. - */ -function resolveFileGlobPatterns(patterns, options) { - - const processPathExtensions = processPath(options); - - return patterns.filter(p => p.length).map(processPathExtensions); -} - -const dotfilesPattern = /(?:(?:^\.)|(?:[/\\]\.))[^/\\.].*/; - -/** - * Build a list of absolute filesnames on which ESLint will act. - * Ignored files are excluded from the results, as are duplicates. - * - * @param {string[]} globPatterns Glob patterns. - * @param {Object} [providedOptions] An options object. - * @param {string} [providedOptions.cwd] CWD (considered for relative filenames) - * @param {boolean} [providedOptions.ignore] False disables use of .eslintignore. - * @param {string} [providedOptions.ignorePath] The ignore file to use instead of .eslintignore. - * @param {string} [providedOptions.ignorePattern] A pattern of files to ignore. - * @returns {string[]} Resolved absolute filenames. - */ -function listFilesToProcess(globPatterns, providedOptions) { - const options = providedOptions || { ignore: true }; - const files = []; - const added = {}; - - const cwd = options.cwd || process.cwd(); - - const getIgnorePaths = lodash.memoize( - optionsObj => - new IgnoredPaths(optionsObj) - ); - - /** - * Executes the linter on a file defined by the `filename`. Skips - * unsupported file extensions and any files that are already linted. - * @param {string} filename The file to be processed - * @param {boolean} shouldWarnIgnored Whether or not a report should be made if - * the file is ignored - * @param {IgnoredPaths} ignoredPaths An instance of IgnoredPaths - * @returns {void} - */ - function addFile(filename, shouldWarnIgnored, ignoredPaths) { - let ignored = false; - let isSilentlyIgnored; - - if (ignoredPaths.contains(filename, "default")) { - ignored = (options.ignore !== false) && shouldWarnIgnored; - isSilentlyIgnored = !shouldWarnIgnored; - } - - if (options.ignore !== false) { - if (ignoredPaths.contains(filename, "custom")) { - if (shouldWarnIgnored) { - ignored = true; - } else { - isSilentlyIgnored = true; - } - } - } - - if (isSilentlyIgnored && !ignored) { - return; - } - - if (added[filename]) { - return; - } - files.push({ filename, ignored }); - added[filename] = true; - } - - debug("Creating list of files to process."); - globPatterns.forEach(pattern => { - const file = path.resolve(cwd, pattern); - - if (fs.existsSync(file) && fs.statSync(file).isFile()) { - const ignoredPaths = getIgnorePaths(options); - - addFile(fs.realpathSync(file), true, ignoredPaths); - } else { - - // regex to find .hidden or /.hidden patterns, but not ./relative or ../relative - const globIncludesDotfiles = dotfilesPattern.test(pattern); - let newOptions = options; - - if (!options.dotfiles) { - newOptions = Object.assign({}, options, { dotfiles: globIncludesDotfiles }); - } - - const ignoredPaths = getIgnorePaths(newOptions); - const shouldIgnore = ignoredPaths.getIgnoredFoldersGlobChecker(); - const globOptions = { - nodir: true, - dot: true, - cwd - }; - - new GlobSync(pattern, globOptions, shouldIgnore).found.forEach(globMatch => { - addFile(path.resolve(cwd, globMatch), false, ignoredPaths); - }); - } - }); - - return files; -} - -module.exports = { - resolveFileGlobPatterns, - listFilesToProcess -}; diff --git a/node_modules/eslint/lib/util/glob.js b/node_modules/eslint/lib/util/glob.js deleted file mode 100644 index f352dae..0000000 --- a/node_modules/eslint/lib/util/glob.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @fileoverview An inherited `glob.GlobSync` to support .gitignore patterns. - * @author Kael Zhang - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const Sync = require("glob").GlobSync, - util = require("util"); - -//------------------------------------------------------------------------------ -// Private -//------------------------------------------------------------------------------ - -const IGNORE = Symbol("ignore"); - -/** - * Subclass of `glob.GlobSync` - * @param {string} pattern Pattern to be matched. - * @param {Object} options `options` for `glob` - * @param {function()} shouldIgnore Method to check whether a directory should be ignored. - * @constructor - */ -function GlobSync(pattern, options, shouldIgnore) { - - /** - * We don't put this thing to argument `options` to avoid - * further problems, such as `options` validation. - * - * Use `Symbol` as much as possible to avoid confliction. - */ - this[IGNORE] = shouldIgnore; - - Sync.call(this, pattern, options); -} - -util.inherits(GlobSync, Sync); - -/* eslint no-underscore-dangle: ["error", { "allow": ["_readdir", "_mark"] }] */ - -GlobSync.prototype._readdir = function(abs, inGlobStar) { - - /** - * `options.nodir` makes `options.mark` as `true`. - * Mark `abs` first - * to make sure `"node_modules"` will be ignored immediately with ignore pattern `"node_modules/"`. - * - * There is a built-in cache about marked `File.Stat` in `glob`, so that we could not worry about the extra invocation of `this._mark()` - */ - const marked = this._mark(abs); - - if (this[IGNORE](marked)) { - return null; - } - - return Sync.prototype._readdir.call(this, abs, inGlobStar); -}; - - -module.exports = GlobSync; diff --git a/node_modules/eslint/lib/util/hash.js b/node_modules/eslint/lib/util/hash.js deleted file mode 100644 index 6d7ef8b..0000000 --- a/node_modules/eslint/lib/util/hash.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @fileoverview Defining the hashing function in one place. - * @author Michael Ficarra - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const murmur = require("imurmurhash"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -//------------------------------------------------------------------------------ -// Private -//------------------------------------------------------------------------------ - -/** - * hash the given string - * @param {string} str the string to hash - * @returns {string} the hash - */ -function hash(str) { - return murmur(str).result().toString(36); -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = hash; diff --git a/node_modules/eslint/lib/util/interpolate.js b/node_modules/eslint/lib/util/interpolate.js deleted file mode 100644 index cefdcca..0000000 --- a/node_modules/eslint/lib/util/interpolate.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * @fileoverview Interpolate keys from an object into a string with {{ }} markers. - * @author Jed Fox - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = (text, data) => { - if (!data) { - return text; - } - - // Substitution content for any {{ }} markers. - return text.replace(/\{\{([^{}]+?)\}\}/g, (fullMatch, termWithWhitespace) => { - const term = termWithWhitespace.trim(); - - if (term in data) { - return data[term]; - } - - // Preserve old behavior: If parameter name not provided, don't replace it. - return fullMatch; - }); -}; diff --git a/node_modules/eslint/lib/util/keywords.js b/node_modules/eslint/lib/util/keywords.js deleted file mode 100644 index 3fbb777..0000000 --- a/node_modules/eslint/lib/util/keywords.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * @fileoverview A shared list of ES3 keywords. - * @author Josh Perez - */ -"use strict"; - -module.exports = [ - "abstract", - "boolean", - "break", - "byte", - "case", - "catch", - "char", - "class", - "const", - "continue", - "debugger", - "default", - "delete", - "do", - "double", - "else", - "enum", - "export", - "extends", - "false", - "final", - "finally", - "float", - "for", - "function", - "goto", - "if", - "implements", - "import", - "in", - "instanceof", - "int", - "interface", - "long", - "native", - "new", - "null", - "package", - "private", - "protected", - "public", - "return", - "short", - "static", - "super", - "switch", - "synchronized", - "this", - "throw", - "throws", - "transient", - "true", - "try", - "typeof", - "var", - "void", - "volatile", - "while", - "with" -]; diff --git a/node_modules/eslint/lib/util/module-resolver.js b/node_modules/eslint/lib/util/module-resolver.js deleted file mode 100644 index 470a54f..0000000 --- a/node_modules/eslint/lib/util/module-resolver.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * @fileoverview Implements the Node.js require.resolve algorithm - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const Module = require("module"); - -//------------------------------------------------------------------------------ -// Private -//------------------------------------------------------------------------------ - -const DEFAULT_OPTIONS = { - - /* - * module.paths is an array of paths to search for resolving things relative - * to this file. Module.globalPaths contains all of the special Node.js - * directories that can also be searched for modules. - * - * Need to check for existence of module.paths because Jest seems not to - * include it. See https://github.com/eslint/eslint/issues/5791. - */ - lookupPaths: module.paths ? module.paths.concat(Module.globalPaths) : Module.globalPaths.concat() -}; - -/** - * Resolves modules based on a set of options. - */ -class ModuleResolver { - - /** - * Resolves modules based on a set of options. - * @param {Object} options The options for resolving modules. - * @param {string[]} options.lookupPaths An array of paths to include in the - * lookup with the highest priority paths coming first. - */ - constructor(options) { - this.options = Object.assign({}, DEFAULT_OPTIONS, options || {}); - } - - /** - * Resolves the file location of a given module relative to the configured - * lookup paths. - * @param {string} name The module name to resolve. - * @param {string} extraLookupPath An extra path to look into for the module. - * This path is used with the highest priority. - * @returns {string} The resolved file path for the module. - * @throws {Error} If the module cannot be resolved. - */ - resolve(name, extraLookupPath) { - - /* - * First, clone the lookup paths so we're not messing things up for - * subsequent calls to this function. Then, move the extraLookupPath to the - * top of the lookup paths list so it will be searched first. - */ - const lookupPaths = this.options.lookupPaths.concat(); - - lookupPaths.unshift(extraLookupPath); - - /** - * Module._findPath is an internal method to Node.js, then one they use to - * lookup file paths when require() is called. So, we are hooking into the - * exact same logic that Node.js uses. - */ - const result = Module._findPath(name, lookupPaths); // eslint-disable-line no-underscore-dangle - - if (!result) { - throw new Error(`Cannot find module '${name}'`); - } - - return result; - } -} - -//------------------------------------------------------------------------------ -// Public API -//------------------------------------------------------------------------------ - -module.exports = ModuleResolver; diff --git a/node_modules/eslint/lib/util/naming.js b/node_modules/eslint/lib/util/naming.js deleted file mode 100644 index c5ff429..0000000 --- a/node_modules/eslint/lib/util/naming.js +++ /dev/null @@ -1,113 +0,0 @@ -/** - * @fileoverview Common helpers for naming of plugins, formatters and configs - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const pathUtil = require("../util/path-util"); - -//------------------------------------------------------------------------------ -// Private -//------------------------------------------------------------------------------ - -const NAMESPACE_REGEX = /^@.*\//i; - -/** - * Brings package name to correct format based on prefix - * @param {string} name The name of the package. - * @param {string} prefix Can be either "eslint-plugin", "eslint-config" or "eslint-formatter" - * @returns {string} Normalized name of the package - * @private - */ -function normalizePackageName(name, prefix) { - let normalizedName = name; - - /** - * On Windows, name can come in with Windows slashes instead of Unix slashes. - * Normalize to Unix first to avoid errors later on. - * https://github.com/eslint/eslint/issues/5644 - */ - if (normalizedName.indexOf("\\") > -1) { - normalizedName = pathUtil.convertPathToPosix(normalizedName); - } - - if (normalizedName.charAt(0) === "@") { - - /** - * it's a scoped package - * package name is the prefix, or just a username - */ - const scopedPackageShortcutRegex = new RegExp(`^(@[^/]+)(?:/(?:${prefix})?)?$`), - scopedPackageNameRegex = new RegExp(`^${prefix}(-|$)`); - - if (scopedPackageShortcutRegex.test(normalizedName)) { - normalizedName = normalizedName.replace(scopedPackageShortcutRegex, `$1/${prefix}`); - } else if (!scopedPackageNameRegex.test(normalizedName.split("/")[1])) { - - /** - * for scoped packages, insert the prefix after the first / unless - * the path is already @scope/eslint or @scope/eslint-xxx-yyy - */ - normalizedName = normalizedName.replace(/^@([^/]+)\/(.*)$/, `@$1/${prefix}-$2`); - } - } else if (normalizedName.indexOf(`${prefix}-`) !== 0) { - normalizedName = `${prefix}-${normalizedName}`; - } - - return normalizedName; -} - -/** - * Removes the prefix from a term. - * @param {string} prefix The prefix to remove. - * @param {string} term The term which may have the prefix. - * @returns {string} The term without prefix. - */ -function removePrefixFromTerm(prefix, term) { - return term.startsWith(prefix) ? term.slice(prefix.length) : term; -} - -/** - * Adds a prefix to a term. - * @param {string} prefix The prefix to add. - * @param {string} term The term which may not have the prefix. - * @returns {string} The term with prefix. - */ -function addPrefixToTerm(prefix, term) { - return term.startsWith(prefix) ? term : `${prefix}${term}`; -} - -/** - * Gets the scope (namespace) of a term. - * @param {string} term The term which may have the namespace. - * @returns {string} The namepace of the term if it has one. - */ -function getNamespaceFromTerm(term) { - const match = term.match(NAMESPACE_REGEX); - - return match ? match[0] : ""; -} - -/** - * Removes the namespace from a term. - * @param {string} term The term which may have the namespace. - * @returns {string} The name of the plugin without the namespace. - */ -function removeNamespaceFromTerm(term) { - return term.replace(NAMESPACE_REGEX, ""); -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = { - normalizePackageName, - removePrefixFromTerm, - addPrefixToTerm, - getNamespaceFromTerm, - removeNamespaceFromTerm -}; diff --git a/node_modules/eslint/lib/util/node-event-generator.js b/node_modules/eslint/lib/util/node-event-generator.js deleted file mode 100644 index 9d477bb..0000000 --- a/node_modules/eslint/lib/util/node-event-generator.js +++ /dev/null @@ -1,308 +0,0 @@ -/** - * @fileoverview The event generator for AST nodes. - * @author Toru Nagashima - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const esquery = require("esquery"); -const lodash = require("lodash"); - -//------------------------------------------------------------------------------ -// Typedefs -//------------------------------------------------------------------------------ - -/** - * An object describing an AST selector - * @typedef {Object} ASTSelector - * @property {string} rawSelector The string that was parsed into this selector - * @property {boolean} isExit `true` if this should be emitted when exiting the node rather than when entering - * @property {Object} parsedSelector An object (from esquery) describing the matching behavior of the selector - * @property {string[]|null} listenerTypes A list of node types that could possibly cause the selector to match, - * or `null` if all node types could cause a match - * @property {number} attributeCount The total number of classes, pseudo-classes, and attribute queries in this selector - * @property {number} identifierCount The total number of identifier queries in this selector - */ - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Gets the possible types of a selector - * @param {Object} parsedSelector An object (from esquery) describing the matching behavior of the selector - * @returns {string[]|null} The node types that could possibly trigger this selector, or `null` if all node types could trigger it - */ -function getPossibleTypes(parsedSelector) { - switch (parsedSelector.type) { - case "identifier": - return [parsedSelector.value]; - - case "matches": { - const typesForComponents = parsedSelector.selectors.map(getPossibleTypes); - - if (typesForComponents.every(typesForComponent => typesForComponent)) { - return lodash.union.apply(null, typesForComponents); - } - return null; - } - - case "compound": { - const typesForComponents = parsedSelector.selectors.map(getPossibleTypes).filter(typesForComponent => typesForComponent); - - // If all of the components could match any type, then the compound could also match any type. - if (!typesForComponents.length) { - return null; - } - - /* - * If at least one of the components could only match a particular type, the compound could only match - * the intersection of those types. - */ - return lodash.intersection.apply(null, typesForComponents); - } - - case "child": - case "descendant": - case "sibling": - case "adjacent": - return getPossibleTypes(parsedSelector.right); - - default: - return null; - - } -} - -/** - * Counts the number of class, pseudo-class, and attribute queries in this selector - * @param {Object} parsedSelector An object (from esquery) describing the selector's matching behavior - * @returns {number} The number of class, pseudo-class, and attribute queries in this selector - */ -function countClassAttributes(parsedSelector) { - switch (parsedSelector.type) { - case "child": - case "descendant": - case "sibling": - case "adjacent": - return countClassAttributes(parsedSelector.left) + countClassAttributes(parsedSelector.right); - - case "compound": - case "not": - case "matches": - return parsedSelector.selectors.reduce((sum, childSelector) => sum + countClassAttributes(childSelector), 0); - - case "attribute": - case "field": - case "nth-child": - case "nth-last-child": - return 1; - - default: - return 0; - } -} - -/** - * Counts the number of identifier queries in this selector - * @param {Object} parsedSelector An object (from esquery) describing the selector's matching behavior - * @returns {number} The number of identifier queries - */ -function countIdentifiers(parsedSelector) { - switch (parsedSelector.type) { - case "child": - case "descendant": - case "sibling": - case "adjacent": - return countIdentifiers(parsedSelector.left) + countIdentifiers(parsedSelector.right); - - case "compound": - case "not": - case "matches": - return parsedSelector.selectors.reduce((sum, childSelector) => sum + countIdentifiers(childSelector), 0); - - case "identifier": - return 1; - - default: - return 0; - } -} - -/** - * Compares the specificity of two selector objects, with CSS-like rules. - * @param {ASTSelector} selectorA An AST selector descriptor - * @param {ASTSelector} selectorB Another AST selector descriptor - * @returns {number} - * a value less than 0 if selectorA is less specific than selectorB - * a value greater than 0 if selectorA is more specific than selectorB - * a value less than 0 if selectorA and selectorB have the same specificity, and selectorA <= selectorB alphabetically - * a value greater than 0 if selectorA and selectorB have the same specificity, and selectorA > selectorB alphabetically - */ -function compareSpecificity(selectorA, selectorB) { - return selectorA.attributeCount - selectorB.attributeCount || - selectorA.identifierCount - selectorB.identifierCount || - (selectorA.rawSelector <= selectorB.rawSelector ? -1 : 1); -} - -/** - * Parses a raw selector string, and throws a useful error if parsing fails. - * @param {string} rawSelector A raw AST selector - * @returns {Object} An object (from esquery) describing the matching behavior of this selector - * @throws {Error} An error if the selector is invalid - */ -function tryParseSelector(rawSelector) { - try { - return esquery.parse(rawSelector.replace(/:exit$/, "")); - } catch (err) { - if (typeof err.offset === "number") { - throw new SyntaxError(`Syntax error in selector "${rawSelector}" at position ${err.offset}: ${err.message}`); - } - throw err; - } -} - -/** - * Parses a raw selector string, and returns the parsed selector along with specificity and type information. - * @param {string} rawSelector A raw AST selector - * @returns {ASTSelector} A selector descriptor - */ -const parseSelector = lodash.memoize(rawSelector => { - const parsedSelector = tryParseSelector(rawSelector); - - return { - rawSelector, - isExit: rawSelector.endsWith(":exit"), - parsedSelector, - listenerTypes: getPossibleTypes(parsedSelector), - attributeCount: countClassAttributes(parsedSelector), - identifierCount: countIdentifiers(parsedSelector) - }; -}); - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -/** - * The event generator for AST nodes. - * This implements below interface. - * - * ```ts - * interface EventGenerator { - * emitter: SafeEmitter; - * enterNode(node: ASTNode): void; - * leaveNode(node: ASTNode): void; - * } - * ``` - */ -class NodeEventGenerator { - - /** - * @param {SafeEmitter} emitter - * An SafeEmitter which is the destination of events. This emitter must already - * have registered listeners for all of the events that it needs to listen for. - * (See lib/util/safe-emitter.js for more details on `SafeEmitter`.) - * @returns {NodeEventGenerator} new instance - */ - constructor(emitter) { - this.emitter = emitter; - this.currentAncestry = []; - this.enterSelectorsByNodeType = new Map(); - this.exitSelectorsByNodeType = new Map(); - this.anyTypeEnterSelectors = []; - this.anyTypeExitSelectors = []; - - emitter.eventNames().forEach(rawSelector => { - const selector = parseSelector(rawSelector); - - if (selector.listenerTypes) { - selector.listenerTypes.forEach(nodeType => { - const typeMap = selector.isExit ? this.exitSelectorsByNodeType : this.enterSelectorsByNodeType; - - if (!typeMap.has(nodeType)) { - typeMap.set(nodeType, []); - } - typeMap.get(nodeType).push(selector); - }); - } else { - (selector.isExit ? this.anyTypeExitSelectors : this.anyTypeEnterSelectors).push(selector); - } - }); - - this.anyTypeEnterSelectors.sort(compareSpecificity); - this.anyTypeExitSelectors.sort(compareSpecificity); - this.enterSelectorsByNodeType.forEach(selectorList => selectorList.sort(compareSpecificity)); - this.exitSelectorsByNodeType.forEach(selectorList => selectorList.sort(compareSpecificity)); - } - - /** - * Checks a selector against a node, and emits it if it matches - * @param {ASTNode} node The node to check - * @param {ASTSelector} selector An AST selector descriptor - * @returns {void} - */ - applySelector(node, selector) { - if (esquery.matches(node, selector.parsedSelector, this.currentAncestry)) { - this.emitter.emit(selector.rawSelector, node); - } - } - - /** - * Applies all appropriate selectors to a node, in specificity order - * @param {ASTNode} node The node to check - * @param {boolean} isExit `false` if the node is currently being entered, `true` if it's currently being exited - * @returns {void} - */ - applySelectors(node, isExit) { - const selectorsByNodeType = (isExit ? this.exitSelectorsByNodeType : this.enterSelectorsByNodeType).get(node.type) || []; - const anyTypeSelectors = isExit ? this.anyTypeExitSelectors : this.anyTypeEnterSelectors; - - /* - * selectorsByNodeType and anyTypeSelectors were already sorted by specificity in the constructor. - * Iterate through each of them, applying selectors in the right order. - */ - let selectorsByTypeIndex = 0; - let anyTypeSelectorsIndex = 0; - - while (selectorsByTypeIndex < selectorsByNodeType.length || anyTypeSelectorsIndex < anyTypeSelectors.length) { - if ( - selectorsByTypeIndex >= selectorsByNodeType.length || - anyTypeSelectorsIndex < anyTypeSelectors.length && - compareSpecificity(anyTypeSelectors[anyTypeSelectorsIndex], selectorsByNodeType[selectorsByTypeIndex]) < 0 - ) { - this.applySelector(node, anyTypeSelectors[anyTypeSelectorsIndex++]); - } else { - this.applySelector(node, selectorsByNodeType[selectorsByTypeIndex++]); - } - } - } - - /** - * Emits an event of entering AST node. - * @param {ASTNode} node - A node which was entered. - * @returns {void} - */ - enterNode(node) { - if (node.parent) { - this.currentAncestry.unshift(node.parent); - } - this.applySelectors(node, false); - } - - /** - * Emits an event of leaving AST node. - * @param {ASTNode} node - A node which was left. - * @returns {void} - */ - leaveNode(node) { - this.applySelectors(node, true); - this.currentAncestry.shift(); - } -} - -module.exports = NodeEventGenerator; diff --git a/node_modules/eslint/lib/util/npm-util.js b/node_modules/eslint/lib/util/npm-util.js deleted file mode 100644 index 0b21f62..0000000 --- a/node_modules/eslint/lib/util/npm-util.js +++ /dev/null @@ -1,177 +0,0 @@ -/** - * @fileoverview Utility for executing npm commands. - * @author Ian VanSchooten - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const fs = require("fs"), - spawn = require("cross-spawn"), - path = require("path"), - log = require("../logging"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Find the closest package.json file, starting at process.cwd (by default), - * and working up to root. - * - * @param {string} [startDir=process.cwd()] Starting directory - * @returns {string} Absolute path to closest package.json file - */ -function findPackageJson(startDir) { - let dir = path.resolve(startDir || process.cwd()); - - do { - const pkgFile = path.join(dir, "package.json"); - - if (!fs.existsSync(pkgFile) || !fs.statSync(pkgFile).isFile()) { - dir = path.join(dir, ".."); - continue; - } - return pkgFile; - } while (dir !== path.resolve(dir, "..")); - return null; -} - -//------------------------------------------------------------------------------ -// Private -//------------------------------------------------------------------------------ - -/** - * Install node modules synchronously and save to devDependencies in package.json - * @param {string|string[]} packages Node module or modules to install - * @returns {void} - */ -function installSyncSaveDev(packages) { - const packageList = Array.isArray(packages) ? packages : [packages]; - const npmProcess = spawn.sync("npm", ["i", "--save-dev"].concat(packageList), - { stdio: "inherit" }); - const error = npmProcess.error; - - if (error && error.code === "ENOENT") { - const pluralS = packageList.length > 1 ? "s" : ""; - - log.error(`Could not execute npm. Please install the following package${pluralS} with a package manager of your choice: ${packageList.join(", ")}`); - } -} - -/** - * Fetch `peerDependencies` of the given package by `npm show` command. - * @param {string} packageName The package name to fetch peerDependencies. - * @returns {Object} Gotten peerDependencies. Returns null if npm was not found. - */ -function fetchPeerDependencies(packageName) { - const npmProcess = spawn.sync( - "npm", - ["show", "--json", packageName, "peerDependencies"], - { encoding: "utf8" } - ); - - const error = npmProcess.error; - - if (error && error.code === "ENOENT") { - return null; - } - const fetchedText = npmProcess.stdout.trim(); - - return JSON.parse(fetchedText || "{}"); - - -} - -/** - * Check whether node modules are include in a project's package.json. - * - * @param {string[]} packages Array of node module names - * @param {Object} opt Options Object - * @param {boolean} opt.dependencies Set to true to check for direct dependencies - * @param {boolean} opt.devDependencies Set to true to check for development dependencies - * @param {boolean} opt.startdir Directory to begin searching from - * @returns {Object} An object whose keys are the module names - * and values are booleans indicating installation. - */ -function check(packages, opt) { - let deps = []; - const pkgJson = (opt) ? findPackageJson(opt.startDir) : findPackageJson(); - let fileJson; - - if (!pkgJson) { - throw new Error("Could not find a package.json file. Run 'npm init' to create one."); - } - - try { - fileJson = JSON.parse(fs.readFileSync(pkgJson, "utf8")); - } catch (e) { - log.info("Could not read package.json file. Please check that the file contains valid JSON."); - throw new Error(e); - } - - if (opt.devDependencies && typeof fileJson.devDependencies === "object") { - deps = deps.concat(Object.keys(fileJson.devDependencies)); - } - if (opt.dependencies && typeof fileJson.dependencies === "object") { - deps = deps.concat(Object.keys(fileJson.dependencies)); - } - return packages.reduce((status, pkg) => { - status[pkg] = deps.indexOf(pkg) !== -1; - return status; - }, {}); -} - -/** - * Check whether node modules are included in the dependencies of a project's - * package.json. - * - * Convienience wrapper around check(). - * - * @param {string[]} packages Array of node modules to check. - * @param {string} rootDir The directory contianing a package.json - * @returns {Object} An object whose keys are the module names - * and values are booleans indicating installation. - */ -function checkDeps(packages, rootDir) { - return check(packages, { dependencies: true, startDir: rootDir }); -} - -/** - * Check whether node modules are included in the devDependencies of a project's - * package.json. - * - * Convienience wrapper around check(). - * - * @param {string[]} packages Array of node modules to check. - * @returns {Object} An object whose keys are the module names - * and values are booleans indicating installation. - */ -function checkDevDeps(packages) { - return check(packages, { devDependencies: true }); -} - -/** - * Check whether package.json is found in current path. - * - * @param {string=} startDir Starting directory - * @returns {boolean} Whether a package.json is found in current path. - */ -function checkPackageJson(startDir) { - return !!findPackageJson(startDir); -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = { - installSyncSaveDev, - fetchPeerDependencies, - checkDeps, - checkDevDeps, - checkPackageJson -}; diff --git a/node_modules/eslint/lib/util/path-util.js b/node_modules/eslint/lib/util/path-util.js deleted file mode 100644 index 54460ff..0000000 --- a/node_modules/eslint/lib/util/path-util.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @fileoverview Common helpers for operations on filenames and paths - * @author Ian VanSchooten - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const path = require("path"); - -//------------------------------------------------------------------------------ -// Private -//------------------------------------------------------------------------------ - -/** - * Replace Windows with posix style paths - * - * @param {string} filepath Path to convert - * @returns {string} Converted filepath - */ -function convertPathToPosix(filepath) { - const normalizedFilepath = path.normalize(filepath); - const posixFilepath = normalizedFilepath.replace(/\\/g, "/"); - - return posixFilepath; -} - -/** - * Converts an absolute filepath to a relative path from a given base path - * - * For example, if the filepath is `/my/awesome/project/foo.bar`, - * and the base directory is `/my/awesome/project/`, - * then this function should return `foo.bar`. - * - * path.relative() does something similar, but it requires a baseDir (`from` argument). - * This function makes it optional and just removes a leading slash if the baseDir is not given. - * - * It does not take into account symlinks (for now). - * - * @param {string} filepath Path to convert to relative path. If already relative, - * it will be assumed to be relative to process.cwd(), - * converted to absolute, and then processed. - * @param {string} [baseDir] Absolute base directory to resolve the filepath from. - * If not provided, all this function will do is remove - * a leading slash. - * @returns {string} Relative filepath - */ -function getRelativePath(filepath, baseDir) { - const absolutePath = path.isAbsolute(filepath) - ? filepath - : path.resolve(filepath); - - if (baseDir) { - if (!path.isAbsolute(baseDir)) { - throw new Error("baseDir should be an absolute path"); - } - return path.relative(baseDir, absolutePath); - } - return absolutePath.replace(/^\//, ""); - -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = { - convertPathToPosix, - getRelativePath -}; diff --git a/node_modules/eslint/lib/util/patterns/letters.js b/node_modules/eslint/lib/util/patterns/letters.js deleted file mode 100644 index eb255d8..0000000 --- a/node_modules/eslint/lib/util/patterns/letters.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @fileoverview Pattern for detecting any letter (even letters outside of ASCII). - * NOTE: This file was generated using this script in JSCS based on the Unicode 7.0.0 standard: https://github.com/jscs-dev/node-jscs/blob/f5ed14427deb7e7aac84f3056a5aab2d9f3e563e/publish/helpers/generate-patterns.js - * Do not edit this file by hand-- please use https://github.com/mathiasbynens/regenerate to regenerate the regular expression exported from this file. - * @author Kevin Partington - * @license MIT License (from JSCS). See below. - */ - -/* - * The MIT License (MIT) - * - * Copyright 2013-2016 Dulin Marat and other contributors - * - * 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. - */ - -"use strict"; - -module.exports = /[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDE00-\uDE11\uDE13-\uDE2B\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDE00-\uDE2F\uDE44\uDE80-\uDEAA]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]/; diff --git a/node_modules/eslint/lib/util/rule-fixer.js b/node_modules/eslint/lib/util/rule-fixer.js deleted file mode 100644 index bdd80d1..0000000 --- a/node_modules/eslint/lib/util/rule-fixer.js +++ /dev/null @@ -1,140 +0,0 @@ -/** - * @fileoverview An object that creates fix commands for rules. - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -// none! - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Creates a fix command that inserts text at the specified index in the source text. - * @param {int} index The 0-based index at which to insert the new text. - * @param {string} text The text to insert. - * @returns {Object} The fix command. - * @private - */ -function insertTextAt(index, text) { - return { - range: [index, index], - text - }; -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -/** - * Creates code fixing commands for rules. - */ - -const ruleFixer = Object.freeze({ - - /** - * Creates a fix command that inserts text after the given node or token. - * The fix is not applied until applyFixes() is called. - * @param {ASTNode|Token} nodeOrToken The node or token to insert after. - * @param {string} text The text to insert. - * @returns {Object} The fix command. - */ - insertTextAfter(nodeOrToken, text) { - return this.insertTextAfterRange(nodeOrToken.range, text); - }, - - /** - * Creates a fix command that inserts text after the specified range in the source text. - * The fix is not applied until applyFixes() is called. - * @param {int[]} range The range to replace, first item is start of range, second - * is end of range. - * @param {string} text The text to insert. - * @returns {Object} The fix command. - */ - insertTextAfterRange(range, text) { - return insertTextAt(range[1], text); - }, - - /** - * Creates a fix command that inserts text before the given node or token. - * The fix is not applied until applyFixes() is called. - * @param {ASTNode|Token} nodeOrToken The node or token to insert before. - * @param {string} text The text to insert. - * @returns {Object} The fix command. - */ - insertTextBefore(nodeOrToken, text) { - return this.insertTextBeforeRange(nodeOrToken.range, text); - }, - - /** - * Creates a fix command that inserts text before the specified range in the source text. - * The fix is not applied until applyFixes() is called. - * @param {int[]} range The range to replace, first item is start of range, second - * is end of range. - * @param {string} text The text to insert. - * @returns {Object} The fix command. - */ - insertTextBeforeRange(range, text) { - return insertTextAt(range[0], text); - }, - - /** - * Creates a fix command that replaces text at the node or token. - * The fix is not applied until applyFixes() is called. - * @param {ASTNode|Token} nodeOrToken The node or token to remove. - * @param {string} text The text to insert. - * @returns {Object} The fix command. - */ - replaceText(nodeOrToken, text) { - return this.replaceTextRange(nodeOrToken.range, text); - }, - - /** - * Creates a fix command that replaces text at the specified range in the source text. - * The fix is not applied until applyFixes() is called. - * @param {int[]} range The range to replace, first item is start of range, second - * is end of range. - * @param {string} text The text to insert. - * @returns {Object} The fix command. - */ - replaceTextRange(range, text) { - return { - range, - text - }; - }, - - /** - * Creates a fix command that removes the node or token from the source. - * The fix is not applied until applyFixes() is called. - * @param {ASTNode|Token} nodeOrToken The node or token to remove. - * @returns {Object} The fix command. - */ - remove(nodeOrToken) { - return this.removeRange(nodeOrToken.range); - }, - - /** - * Creates a fix command that removes the specified range of text from the source. - * The fix is not applied until applyFixes() is called. - * @param {int[]} range The range to remove, first item is start of range, second - * is end of range. - * @returns {Object} The fix command. - */ - removeRange(range) { - return { - range, - text: "" - }; - } - -}); - - -module.exports = ruleFixer; diff --git a/node_modules/eslint/lib/util/safe-emitter.js b/node_modules/eslint/lib/util/safe-emitter.js deleted file mode 100644 index 2fa373c..0000000 --- a/node_modules/eslint/lib/util/safe-emitter.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @fileoverview A variant of EventEmitter which does not give listeners information about each other - * @author Teddy Katz - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Typedefs -//------------------------------------------------------------------------------ - -/** - * An event emitter - * @typedef {Object} SafeEmitter - * @property {function(eventName: string, listenerFunc: Function): void} on Adds a listener for a given event name - * @property {function(eventName: string, arg1?: any, arg2?: any, arg3?: any)} emit Emits an event with a given name. - * This calls all the listeners that were listening for that name, with `arg1`, `arg2`, and `arg3` as arguments. - * @property {function(): string[]} eventNames Gets the list of event names that have registered listeners. - */ - -/** - * Creates an object which can listen for and emit events. - * This is similar to the EventEmitter API in Node's standard library, but it has a few differences. - * The goal is to allow multiple modules to attach arbitrary listeners to the same emitter, without - * letting the modules know about each other at all. - * 1. It has no special keys like `error` and `newListener`, which would allow modules to detect when - * another module throws an error or registers a listener. - * 2. It calls listener functions without any `this` value. (`EventEmitter` calls listeners with a - * `this` value of the emitter instance, which would give listeners access to other listeners.) - * 3. Events can be emitted with at most 3 arguments. (For example: when using `emitter.emit('foo', a, b, c)`, - * the arguments `a`, `b`, and `c` will be passed to the listener functions.) - * @returns {SafeEmitter} An emitter - */ -module.exports = () => { - const listeners = Object.create(null); - - return Object.freeze({ - on(eventName, listener) { - if (eventName in listeners) { - listeners[eventName].push(listener); - } else { - listeners[eventName] = [listener]; - } - }, - emit(eventName, a, b, c) { - if (eventName in listeners) { - listeners[eventName].forEach(listener => listener(a, b, c)); - } - }, - eventNames() { - return Object.keys(listeners); - } - }); -}; diff --git a/node_modules/eslint/lib/util/source-code-fixer.js b/node_modules/eslint/lib/util/source-code-fixer.js deleted file mode 100644 index b5bfc74..0000000 --- a/node_modules/eslint/lib/util/source-code-fixer.js +++ /dev/null @@ -1,152 +0,0 @@ -/** - * @fileoverview An object that caches and applies source code fixes. - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const debug = require("debug")("eslint:text-fixer"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -const BOM = "\uFEFF"; - -/** - * Compares items in a messages array by range. - * @param {Message} a The first message. - * @param {Message} b The second message. - * @returns {int} -1 if a comes before b, 1 if a comes after b, 0 if equal. - * @private - */ -function compareMessagesByFixRange(a, b) { - return a.fix.range[0] - b.fix.range[0] || a.fix.range[1] - b.fix.range[1]; -} - -/** - * Compares items in a messages array by line and column. - * @param {Message} a The first message. - * @param {Message} b The second message. - * @returns {int} -1 if a comes before b, 1 if a comes after b, 0 if equal. - * @private - */ -function compareMessagesByLocation(a, b) { - return a.line - b.line || a.column - b.column; -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -/** - * Utility for apply fixes to source code. - * @constructor - */ -function SourceCodeFixer() { - Object.freeze(this); -} - -/** - * Applies the fixes specified by the messages to the given text. Tries to be - * smart about the fixes and won't apply fixes over the same area in the text. - * @param {string} sourceText The text to apply the changes to. - * @param {Message[]} messages The array of messages reported by ESLint. - * @param {boolean|Function} [shouldFix=true] Determines whether each message should be fixed - * @returns {Object} An object containing the fixed text and any unfixed messages. - */ -SourceCodeFixer.applyFixes = function(sourceText, messages, shouldFix) { - debug("Applying fixes"); - - if (shouldFix === false) { - debug("shouldFix parameter was false, not attempting fixes"); - return { - fixed: false, - messages, - output: sourceText - }; - } - - // clone the array - const remainingMessages = [], - fixes = [], - bom = sourceText.startsWith(BOM) ? BOM : "", - text = bom ? sourceText.slice(1) : sourceText; - let lastPos = Number.NEGATIVE_INFINITY, - output = bom; - - /** - * Try to use the 'fix' from a problem. - * @param {Message} problem The message object to apply fixes from - * @returns {boolean} Whether fix was successfully applied - */ - function attemptFix(problem) { - const fix = problem.fix; - const start = fix.range[0]; - const end = fix.range[1]; - - // Remain it as a problem if it's overlapped or it's a negative range - if (lastPos >= start || start > end) { - remainingMessages.push(problem); - return false; - } - - // Remove BOM. - if ((start < 0 && end >= 0) || (start === 0 && fix.text.startsWith(BOM))) { - output = ""; - } - - // Make output to this fix. - output += text.slice(Math.max(0, lastPos), Math.max(0, start)); - output += fix.text; - lastPos = end; - return true; - } - - messages.forEach(problem => { - if (problem.hasOwnProperty("fix")) { - fixes.push(problem); - } else { - remainingMessages.push(problem); - } - }); - - if (fixes.length) { - debug("Found fixes to apply"); - let fixesWereApplied = false; - - for (const problem of fixes.sort(compareMessagesByFixRange)) { - if (typeof shouldFix !== "function" || shouldFix(problem)) { - attemptFix(problem); - - /* - * The only time attemptFix will fail is if a previous fix was - * applied which conflicts with it. So we can mark this as true. - */ - fixesWereApplied = true; - } else { - remainingMessages.push(problem); - } - } - output += text.slice(Math.max(0, lastPos)); - - return { - fixed: fixesWereApplied, - messages: remainingMessages.sort(compareMessagesByLocation), - output - }; - } - - debug("No fixes to apply"); - return { - fixed: false, - messages, - output: bom + text - }; - -}; - -module.exports = SourceCodeFixer; diff --git a/node_modules/eslint/lib/util/source-code-util.js b/node_modules/eslint/lib/util/source-code-util.js deleted file mode 100644 index 815fad9..0000000 --- a/node_modules/eslint/lib/util/source-code-util.js +++ /dev/null @@ -1,106 +0,0 @@ -/** - * @fileoverview Tools for obtaining SourceCode objects. - * @author Ian VanSchooten - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const CLIEngine = require("../cli-engine"), - globUtil = require("./glob-util"), - baseDefaultOptions = require("../../conf/default-cli-options"); - -const debug = require("debug")("eslint:source-code-util"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Get the SourceCode object for a single file - * @param {string} filename The fully resolved filename to get SourceCode from. - * @param {Object} options A CLIEngine options object. - * @returns {Array} Array of the SourceCode object representing the file - * and fatal error message. - */ -function getSourceCodeOfFile(filename, options) { - debug("getting sourceCode of", filename); - const opts = Object.assign({}, options, { rules: {} }); - const cli = new CLIEngine(opts); - const results = cli.executeOnFiles([filename]); - - if (results && results.results[0] && results.results[0].messages[0] && results.results[0].messages[0].fatal) { - const msg = results.results[0].messages[0]; - - throw new Error(`(${filename}:${msg.line}:${msg.column}) ${msg.message}`); - } - const sourceCode = cli.linter.getSourceCode(); - - return sourceCode; -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - - -/** - * This callback is used to measure execution status in a progress bar - * @callback progressCallback - * @param {number} The total number of times the callback will be called. - */ - -/** - * Gets the SourceCode of a single file, or set of files. - * @param {string[]|string} patterns A filename, directory name, or glob, or an array of them - * @param {Object} [providedOptions] A CLIEngine options object. If not provided, the default cli options will be used. - * @param {progressCallback} [providedCallback] Callback for reporting execution status - * @returns {Object} The SourceCode of all processed files. - */ -function getSourceCodeOfFiles(patterns, providedOptions, providedCallback) { - const sourceCodes = {}; - const globPatternsList = typeof patterns === "string" ? [patterns] : patterns; - let options, callback; - - const defaultOptions = Object.assign({}, baseDefaultOptions, { cwd: process.cwd() }); - - if (typeof providedOptions === "undefined") { - options = defaultOptions; - callback = null; - } else if (typeof providedOptions === "function") { - callback = providedOptions; - options = defaultOptions; - } else if (typeof providedOptions === "object") { - options = Object.assign({}, defaultOptions, providedOptions); - callback = providedCallback; - } - debug("constructed options:", options); - const resolvedPatterns = globUtil.resolveFileGlobPatterns(globPatternsList, options); - - const filenames = globUtil.listFilesToProcess(resolvedPatterns, options) - .filter(fileInfo => !fileInfo.ignored) - .reduce((files, fileInfo) => files.concat(fileInfo.filename), []); - - if (filenames.length === 0) { - debug(`Did not find any files matching pattern(s): ${resolvedPatterns}`); - } - filenames.forEach(filename => { - const sourceCode = getSourceCodeOfFile(filename, options); - - if (sourceCode) { - debug("got sourceCode of", filename); - sourceCodes[filename] = sourceCode; - } - if (callback) { - callback(filenames.length); // eslint-disable-line callback-return - } - }); - return sourceCodes; -} - -module.exports = { - getSourceCodeOfFiles -}; diff --git a/node_modules/eslint/lib/util/source-code.js b/node_modules/eslint/lib/util/source-code.js deleted file mode 100644 index 3375f44..0000000 --- a/node_modules/eslint/lib/util/source-code.js +++ /dev/null @@ -1,508 +0,0 @@ -/** - * @fileoverview Abstraction of JavaScript source code. - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const TokenStore = require("../token-store"), - Traverser = require("./traverser"), - astUtils = require("../ast-utils"), - lodash = require("lodash"); - -//------------------------------------------------------------------------------ -// Private -//------------------------------------------------------------------------------ - -/** - * Validates that the given AST has the required information. - * @param {ASTNode} ast The Program node of the AST to check. - * @throws {Error} If the AST doesn't contain the correct information. - * @returns {void} - * @private - */ -function validate(ast) { - if (!ast.tokens) { - throw new Error("AST is missing the tokens array."); - } - - if (!ast.comments) { - throw new Error("AST is missing the comments array."); - } - - if (!ast.loc) { - throw new Error("AST is missing location information."); - } - - if (!ast.range) { - throw new Error("AST is missing range information"); - } -} - -/** - * Check to see if its a ES6 export declaration. - * @param {ASTNode} astNode An AST node. - * @returns {boolean} whether the given node represents an export declaration. - * @private - */ -function looksLikeExport(astNode) { - return astNode.type === "ExportDefaultDeclaration" || astNode.type === "ExportNamedDeclaration" || - astNode.type === "ExportAllDeclaration" || astNode.type === "ExportSpecifier"; -} - -/** - * Merges two sorted lists into a larger sorted list in O(n) time. - * @param {Token[]} tokens The list of tokens. - * @param {Token[]} comments The list of comments. - * @returns {Token[]} A sorted list of tokens and comments. - * @private - */ -function sortedMerge(tokens, comments) { - const result = []; - let tokenIndex = 0; - let commentIndex = 0; - - while (tokenIndex < tokens.length || commentIndex < comments.length) { - if (commentIndex >= comments.length || tokenIndex < tokens.length && tokens[tokenIndex].range[0] < comments[commentIndex].range[0]) { - result.push(tokens[tokenIndex++]); - } else { - result.push(comments[commentIndex++]); - } - } - - return result; -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -class SourceCode extends TokenStore { - - /** - * Represents parsed source code. - * @param {string|Object} textOrConfig - The source code text or config object. - * @param {string} textOrConfig.text - The source code text. - * @param {ASTNode} textOrConfig.ast - The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped. - * @param {Object|null} textOrConfig.parserServices - The parser srevices. - * @param {ScopeManager|null} textOrConfig.scopeManager - The scope of this source code. - * @param {Object|null} textOrConfig.visitorKeys - The visitor keys to traverse AST. - * @param {ASTNode} [astIfNoConfig] - The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped. - * @constructor - */ - constructor(textOrConfig, astIfNoConfig) { - let text, ast, parserServices, scopeManager, visitorKeys; - - // Process overloading. - if (typeof textOrConfig === "string") { - text = textOrConfig; - ast = astIfNoConfig; - } else if (typeof textOrConfig === "object" && textOrConfig !== null) { - text = textOrConfig.text; - ast = textOrConfig.ast; - parserServices = textOrConfig.parserServices; - scopeManager = textOrConfig.scopeManager; - visitorKeys = textOrConfig.visitorKeys; - } - - validate(ast); - super(ast.tokens, ast.comments); - - /** - * The flag to indicate that the source code has Unicode BOM. - * @type boolean - */ - this.hasBOM = (text.charCodeAt(0) === 0xFEFF); - - /** - * The original text source code. - * BOM was stripped from this text. - * @type string - */ - this.text = (this.hasBOM ? text.slice(1) : text); - - /** - * The parsed AST for the source code. - * @type ASTNode - */ - this.ast = ast; - - /** - * The parser services of this source code. - * @type {Object} - */ - this.parserServices = parserServices || {}; - - /** - * The scope of this source code. - * @type {ScopeManager|null} - */ - this.scopeManager = scopeManager || null; - - /** - * The visitor keys to traverse AST. - * @type {Object} - */ - this.visitorKeys = visitorKeys || Traverser.DEFAULT_VISITOR_KEYS; - - // Check the source text for the presence of a shebang since it is parsed as a standard line comment. - const shebangMatched = this.text.match(astUtils.SHEBANG_MATCHER); - const hasShebang = shebangMatched && ast.comments.length && ast.comments[0].value === shebangMatched[1]; - - if (hasShebang) { - ast.comments[0].type = "Shebang"; - } - - this.tokensAndComments = sortedMerge(ast.tokens, ast.comments); - - /** - * The source code split into lines according to ECMA-262 specification. - * This is done to avoid each rule needing to do so separately. - * @type string[] - */ - this.lines = []; - this.lineStartIndices = [0]; - - const lineEndingPattern = astUtils.createGlobalLinebreakMatcher(); - let match; - - /* - * Previously, this was implemented using a regex that - * matched a sequence of non-linebreak characters followed by a - * linebreak, then adding the lengths of the matches. However, - * this caused a catastrophic backtracking issue when the end - * of a file contained a large number of non-newline characters. - * To avoid this, the current implementation just matches newlines - * and uses match.index to get the correct line start indices. - */ - while ((match = lineEndingPattern.exec(this.text))) { - this.lines.push(this.text.slice(this.lineStartIndices[this.lineStartIndices.length - 1], match.index)); - this.lineStartIndices.push(match.index + match[0].length); - } - this.lines.push(this.text.slice(this.lineStartIndices[this.lineStartIndices.length - 1])); - - // Cache for comments found using getComments(). - this._commentCache = new WeakMap(); - - // don't allow modification of this object - Object.freeze(this); - Object.freeze(this.lines); - } - - /** - * Split the source code into multiple lines based on the line delimiters. - * @param {string} text Source code as a string. - * @returns {string[]} Array of source code lines. - * @public - */ - static splitLines(text) { - return text.split(astUtils.createGlobalLinebreakMatcher()); - } - - /** - * Gets the source code for the given node. - * @param {ASTNode=} node The AST node to get the text for. - * @param {int=} beforeCount The number of characters before the node to retrieve. - * @param {int=} afterCount The number of characters after the node to retrieve. - * @returns {string} The text representing the AST node. - * @public - */ - getText(node, beforeCount, afterCount) { - if (node) { - return this.text.slice(Math.max(node.range[0] - (beforeCount || 0), 0), - node.range[1] + (afterCount || 0)); - } - return this.text; - } - - /** - * Gets the entire source text split into an array of lines. - * @returns {Array} The source text as an array of lines. - * @public - */ - getLines() { - return this.lines; - } - - /** - * Retrieves an array containing all comments in the source code. - * @returns {ASTNode[]} An array of comment nodes. - * @public - */ - getAllComments() { - return this.ast.comments; - } - - /** - * Gets all comments for the given node. - * @param {ASTNode} node The AST node to get the comments for. - * @returns {Object} An object containing a leading and trailing array - * of comments indexed by their position. - * @public - */ - getComments(node) { - if (this._commentCache.has(node)) { - return this._commentCache.get(node); - } - - const comments = { - leading: [], - trailing: [] - }; - - /* - * Return all comments as leading comments of the Program node when - * there is no executable code. - */ - if (node.type === "Program") { - if (node.body.length === 0) { - comments.leading = node.comments; - } - } else { - - /* - * Return comments as trailing comments of nodes that only contain - * comments (to mimic the comment attachment behavior present in Espree). - */ - if ((node.type === "BlockStatement" || node.type === "ClassBody") && node.body.length === 0 || - node.type === "ObjectExpression" && node.properties.length === 0 || - node.type === "ArrayExpression" && node.elements.length === 0 || - node.type === "SwitchStatement" && node.cases.length === 0 - ) { - comments.trailing = this.getTokens(node, { - includeComments: true, - filter: astUtils.isCommentToken - }); - } - - /* - * Iterate over tokens before and after node and collect comment tokens. - * Do not include comments that exist outside of the parent node - * to avoid duplication. - */ - let currentToken = this.getTokenBefore(node, { includeComments: true }); - - while (currentToken && astUtils.isCommentToken(currentToken)) { - if (node.parent && (currentToken.start < node.parent.start)) { - break; - } - comments.leading.push(currentToken); - currentToken = this.getTokenBefore(currentToken, { includeComments: true }); - } - - comments.leading.reverse(); - - currentToken = this.getTokenAfter(node, { includeComments: true }); - - while (currentToken && astUtils.isCommentToken(currentToken)) { - if (node.parent && (currentToken.end > node.parent.end)) { - break; - } - comments.trailing.push(currentToken); - currentToken = this.getTokenAfter(currentToken, { includeComments: true }); - } - } - - this._commentCache.set(node, comments); - return comments; - } - - /** - * Retrieves the JSDoc comment for a given node. - * @param {ASTNode} node The AST node to get the comment for. - * @returns {Token|null} The Block comment token containing the JSDoc comment - * for the given node or null if not found. - * @public - */ - getJSDocComment(node) { - - /** - * Checks for the presence of a JSDoc comment for the given node and returns it. - * @param {ASTNode} astNode The AST node to get the comment for. - * @returns {Token|null} The Block comment token containing the JSDoc comment - * for the given node or null if not found. - * @private - */ - const findJSDocComment = astNode => { - const tokenBefore = this.getTokenBefore(astNode, { includeComments: true }); - - if ( - tokenBefore && - astUtils.isCommentToken(tokenBefore) && - tokenBefore.type === "Block" && - tokenBefore.value.charAt(0) === "*" && - astNode.loc.start.line - tokenBefore.loc.end.line <= 1 - ) { - return tokenBefore; - } - - return null; - }; - let parent = node.parent; - - switch (node.type) { - case "ClassDeclaration": - case "FunctionDeclaration": - return findJSDocComment(looksLikeExport(parent) ? parent : node); - - case "ClassExpression": - return findJSDocComment(parent.parent); - - case "ArrowFunctionExpression": - case "FunctionExpression": - if (parent.type !== "CallExpression" && parent.type !== "NewExpression") { - while ( - !this.getCommentsBefore(parent).length && - !/Function/.test(parent.type) && - parent.type !== "MethodDefinition" && - parent.type !== "Property" - ) { - parent = parent.parent; - - if (!parent) { - break; - } - } - - if (parent && parent.type !== "FunctionDeclaration" && parent.type !== "Program") { - return findJSDocComment(parent); - } - } - - return findJSDocComment(node); - - // falls through - default: - return null; - } - } - - /** - * Gets the deepest node containing a range index. - * @param {int} index Range index of the desired node. - * @returns {ASTNode} The node if found or null if not found. - * @public - */ - getNodeByRangeIndex(index) { - let result = null, - resultParent = null; - - Traverser.traverse(this.ast, { - visitorKeys: this.visitorKeys, - enter(node, parent) { - if (node.range[0] <= index && index < node.range[1]) { - result = node; - resultParent = parent; - } else { - this.skip(); - } - }, - leave(node) { - if (node === result) { - this.break(); - } - } - }); - - return result ? Object.assign({ parent: resultParent }, result) : null; - } - - /** - * Determines if two tokens have at least one whitespace character - * between them. This completely disregards comments in making the - * determination, so comments count as zero-length substrings. - * @param {Token} first The token to check after. - * @param {Token} second The token to check before. - * @returns {boolean} True if there is only space between tokens, false - * if there is anything other than whitespace between tokens. - * @public - */ - isSpaceBetweenTokens(first, second) { - const text = this.text.slice(first.range[1], second.range[0]); - - return /\s/.test(text.replace(/\/\*.*?\*\//g, "")); - } - - /** - * Converts a source text index into a (line, column) pair. - * @param {number} index The index of a character in a file - * @returns {Object} A {line, column} location object with a 0-indexed column - * @public - */ - getLocFromIndex(index) { - if (typeof index !== "number") { - throw new TypeError("Expected `index` to be a number."); - } - - if (index < 0 || index > this.text.length) { - throw new RangeError(`Index out of range (requested index ${index}, but source text has length ${this.text.length}).`); - } - - /* - * For an argument of this.text.length, return the location one "spot" past the last character - * of the file. If the last character is a linebreak, the location will be column 0 of the next - * line; otherwise, the location will be in the next column on the same line. - * - * See getIndexFromLoc for the motivation for this special case. - */ - if (index === this.text.length) { - return { line: this.lines.length, column: this.lines[this.lines.length - 1].length }; - } - - /* - * To figure out which line rangeIndex is on, determine the last index at which rangeIndex could - * be inserted into lineIndices to keep the list sorted. - */ - const lineNumber = lodash.sortedLastIndex(this.lineStartIndices, index); - - return { line: lineNumber, column: index - this.lineStartIndices[lineNumber - 1] }; - } - - /** - * Converts a (line, column) pair into a range index. - * @param {Object} loc A line/column location - * @param {number} loc.line The line number of the location (1-indexed) - * @param {number} loc.column The column number of the location (0-indexed) - * @returns {number} The range index of the location in the file. - * @public - */ - getIndexFromLoc(loc) { - if (typeof loc !== "object" || typeof loc.line !== "number" || typeof loc.column !== "number") { - throw new TypeError("Expected `loc` to be an object with numeric `line` and `column` properties."); - } - - if (loc.line <= 0) { - throw new RangeError(`Line number out of range (line ${loc.line} requested). Line numbers should be 1-based.`); - } - - if (loc.line > this.lineStartIndices.length) { - throw new RangeError(`Line number out of range (line ${loc.line} requested, but only ${this.lineStartIndices.length} lines present).`); - } - - const lineStartIndex = this.lineStartIndices[loc.line - 1]; - const lineEndIndex = loc.line === this.lineStartIndices.length ? this.text.length : this.lineStartIndices[loc.line]; - const positionIndex = lineStartIndex + loc.column; - - /* - * By design, getIndexFromLoc({ line: lineNum, column: 0 }) should return the start index of - * the given line, provided that the line number is valid element of this.lines. Since the - * last element of this.lines is an empty string for files with trailing newlines, add a - * special case where getting the index for the first location after the end of the file - * will return the length of the file, rather than throwing an error. This allows rules to - * use getIndexFromLoc consistently without worrying about edge cases at the end of a file. - */ - if ( - loc.line === this.lineStartIndices.length && positionIndex > lineEndIndex || - loc.line < this.lineStartIndices.length && positionIndex >= lineEndIndex - ) { - throw new RangeError(`Column number out of range (column ${loc.column} requested, but the length of line ${loc.line} is ${lineEndIndex - lineStartIndex}).`); - } - - return positionIndex; - } -} - -module.exports = SourceCode; diff --git a/node_modules/eslint/lib/util/traverser.js b/node_modules/eslint/lib/util/traverser.js deleted file mode 100644 index 79fb32f..0000000 --- a/node_modules/eslint/lib/util/traverser.js +++ /dev/null @@ -1,193 +0,0 @@ -/** - * @fileoverview Traverser to traverse AST trees. - * @author Nicholas C. Zakas - * @author Toru Nagashima - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const vk = require("eslint-visitor-keys"); -const debug = require("debug")("eslint:traverser"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Do nothing. - * @returns {void} - */ -function noop() { - - // do nothing. -} - -/** - * Check whether the given value is an ASTNode or not. - * @param {any} x The value to check. - * @returns {boolean} `true` if the value is an ASTNode. - */ -function isNode(x) { - return x !== null && typeof x === "object" && typeof x.type === "string"; -} - -/** - * Get the visitor keys of a given node. - * @param {Object} visitorKeys The map of visitor keys. - * @param {ASTNode} node The node to get their visitor keys. - * @returns {string[]} The visitor keys of the node. - */ -function getVisitorKeys(visitorKeys, node) { - let keys = visitorKeys[node.type]; - - if (!keys) { - keys = vk.getKeys(node); - debug("Unknown node type \"%s\": Estimated visitor keys %j", node.type, keys); - } - - return keys; -} - -/** - * The traverser class to traverse AST trees. - */ -class Traverser { - constructor() { - this._current = null; - this._parents = []; - this._skipped = false; - this._broken = false; - this._visitorKeys = null; - this._enter = null; - this._leave = null; - } - - /** - * @returns {ASTNode} The current node. - */ - current() { - return this._current; - } - - /** - * @returns {ASTNode[]} The ancestor nodes. - */ - parents() { - return this._parents.slice(0); - } - - /** - * Break the current traversal. - * @returns {void} - */ - break() { - this._broken = true; - } - - /** - * Skip child nodes for the current traversal. - * @returns {void} - */ - skip() { - this._skipped = true; - } - - /** - * Traverse the given AST tree. - * @param {ASTNode} node The root node to traverse. - * @param {Object} options The option object. - * @param {Object} [options.visitorKeys=DEFAULT_VISITOR_KEYS] The keys of each node types to traverse child nodes. Default is `./default-visitor-keys.json`. - * @param {Function} [options.enter=noop] The callback function which is called on entering each node. - * @param {Function} [options.leave=noop] The callback function which is called on leaving each node. - * @returns {void} - */ - traverse(node, options) { - this._current = null; - this._parents = []; - this._skipped = false; - this._broken = false; - this._visitorKeys = options.visitorKeys || vk.KEYS; - this._enter = options.enter || noop; - this._leave = options.leave || noop; - this._traverse(node, null); - } - - /** - * Traverse the given AST tree recursively. - * @param {ASTNode} node The current node. - * @param {ASTNode|null} parent The parent node. - * @returns {void} - * @private - */ - _traverse(node, parent) { - if (!isNode(node)) { - return; - } - - this._current = node; - this._skipped = false; - this._enter(node, parent); - - if (!this._skipped && !this._broken) { - const keys = getVisitorKeys(this._visitorKeys, node); - - if (keys.length >= 1) { - this._parents.push(node); - for (let i = 0; i < keys.length && !this._broken; ++i) { - const child = node[keys[i]]; - - if (Array.isArray(child)) { - for (let j = 0; j < child.length && !this._broken; ++j) { - this._traverse(child[j], node); - } - } else { - this._traverse(child, node); - } - } - this._parents.pop(); - } - } - - if (!this._broken) { - this._leave(node, parent); - } - - this._current = parent; - } - - /** - * Calculates the keys to use for traversal. - * @param {ASTNode} node The node to read keys from. - * @returns {string[]} An array of keys to visit on the node. - * @private - */ - static getKeys(node) { - return vk.getKeys(node); - } - - /** - * Traverse the given AST tree. - * @param {ASTNode} node The root node to traverse. - * @param {Object} options The option object. - * @param {Object} [options.visitorKeys=DEFAULT_VISITOR_KEYS] The keys of each node types to traverse child nodes. Default is `./default-visitor-keys.json`. - * @param {Function} [options.enter=noop] The callback function which is called on entering each node. - * @param {Function} [options.leave=noop] The callback function which is called on leaving each node. - * @returns {void} - */ - static traverse(node, options) { - new Traverser().traverse(node, options); - } - - /** - * The default visitor keys. - * @type {Object} - */ - static get DEFAULT_VISITOR_KEYS() { - return vk.KEYS; - } -} - -module.exports = Traverser; diff --git a/node_modules/eslint/lib/util/xml-escape.js b/node_modules/eslint/lib/util/xml-escape.js deleted file mode 100644 index 9f43c99..0000000 --- a/node_modules/eslint/lib/util/xml-escape.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @fileoverview XML character escaper - * @author George Chung - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -/** - * Returns the escaped value for a character - * @param {string} s string to examine - * @returns {string} severity level - * @private - */ -module.exports = function(s) { - return (`${s}`).replace(/[<>&"'\x00-\x1F\x7F\u0080-\uFFFF]/g, c => { // eslint-disable-line no-control-regex - switch (c) { - case "<": - return "<"; - case ">": - return ">"; - case "&": - return "&"; - case "\"": - return """; - case "'": - return "'"; - default: - return `&#${c.charCodeAt(0)};`; - } - }); -}; diff --git a/node_modules/eslint/messages/extend-config-missing.txt b/node_modules/eslint/messages/extend-config-missing.txt deleted file mode 100644 index 38e6458..0000000 --- a/node_modules/eslint/messages/extend-config-missing.txt +++ /dev/null @@ -1,3 +0,0 @@ -ESLint couldn't find the config "<%- configName %>" to extend from. Please check that the name of the config is correct. - -If you still have problems, please stop by https://gitter.im/eslint/eslint to chat with the team. diff --git a/node_modules/eslint/messages/no-config-found.txt b/node_modules/eslint/messages/no-config-found.txt deleted file mode 100644 index 2f95c41..0000000 --- a/node_modules/eslint/messages/no-config-found.txt +++ /dev/null @@ -1,7 +0,0 @@ -ESLint couldn't find a configuration file. To set up a configuration file for this project, please run: - - eslint --init - -ESLint looked for configuration files in <%= directory %> and its ancestors. If it found none, it then looked in your home directory. - -If you think you already have a configuration file or if you need more help, please stop by the ESLint chat room: https://gitter.im/eslint/eslint diff --git a/node_modules/eslint/messages/plugin-missing.txt b/node_modules/eslint/messages/plugin-missing.txt deleted file mode 100644 index 00c7fe7..0000000 --- a/node_modules/eslint/messages/plugin-missing.txt +++ /dev/null @@ -1,9 +0,0 @@ -ESLint couldn't find the plugin "<%- pluginName %>". This can happen for a couple different reasons: - -1. If ESLint is installed globally, then make sure <%- pluginName %> is also installed globally. A globally-installed ESLint cannot find a locally-installed plugin. - -2. If ESLint is installed locally, then it's likely that the plugin isn't installed correctly. Try reinstalling by running the following: - - npm i <%- pluginName %>@latest --save-dev - -If you still can't figure out the problem, please stop by https://gitter.im/eslint/eslint to chat with the team. diff --git a/node_modules/eslint/messages/whitespace-found.txt b/node_modules/eslint/messages/whitespace-found.txt deleted file mode 100644 index eea4efc..0000000 --- a/node_modules/eslint/messages/whitespace-found.txt +++ /dev/null @@ -1,3 +0,0 @@ -ESLint couldn't find the plugin "<%- pluginName %>". because there is whitespace in the name. Please check your configuration and remove all whitespace from the plugin name. - -If you still can't figure out the problem, please stop by https://gitter.im/eslint/eslint to chat with the team. diff --git a/node_modules/eslint/node_modules/ansi-regex/index.js b/node_modules/eslint/node_modules/ansi-regex/index.js deleted file mode 100644 index 93f162c..0000000 --- a/node_modules/eslint/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = () => { - const pattern = [ - '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[a-zA-Z\\d]*)*)?\\u0007)', - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PRZcf-ntqry=><~]))' - ].join('|'); - - return new RegExp(pattern, 'g'); -}; diff --git a/node_modules/eslint/node_modules/ansi-regex/license b/node_modules/eslint/node_modules/ansi-regex/license deleted file mode 100644 index e7af2f7..0000000 --- a/node_modules/eslint/node_modules/ansi-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/eslint/node_modules/ansi-regex/package.json b/node_modules/eslint/node_modules/ansi-regex/package.json deleted file mode 100644 index 0548619..0000000 --- a/node_modules/eslint/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "ansi-regex", - "version": "3.0.1", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": "chalk/ansi-regex", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=4" - }, - "scripts": { - "test": "xo && ava", - "view-supported": "node fixtures/view-codes.js" - }, - "files": [ - "index.js" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "ava": "*", - "xo": "*" - } -} diff --git a/node_modules/eslint/node_modules/ansi-regex/readme.md b/node_modules/eslint/node_modules/ansi-regex/readme.md deleted file mode 100644 index 22db1c3..0000000 --- a/node_modules/eslint/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex) - -> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install ansi-regex -``` - - -## Usage - -```js -const ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] -``` - - -## FAQ - -### Why do you test for codes not in the ECMA 48 standard? - -Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. - -On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - -## License - -MIT diff --git a/node_modules/eslint/node_modules/ansi-styles/index.js b/node_modules/eslint/node_modules/ansi-styles/index.js deleted file mode 100644 index 90a871c..0000000 --- a/node_modules/eslint/node_modules/ansi-styles/index.js +++ /dev/null @@ -1,165 +0,0 @@ -'use strict'; -const colorConvert = require('color-convert'); - -const wrapAnsi16 = (fn, offset) => function () { - const code = fn.apply(colorConvert, arguments); - return `\u001B[${code + offset}m`; -}; - -const wrapAnsi256 = (fn, offset) => function () { - const code = fn.apply(colorConvert, arguments); - return `\u001B[${38 + offset};5;${code}m`; -}; - -const wrapAnsi16m = (fn, offset) => function () { - const rgb = fn.apply(colorConvert, arguments); - return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; -}; - -function assembleStyles() { - const codes = new Map(); - const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - gray: [90, 39], - - // Bright color - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39] - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], - - // Bright color - bgBlackBright: [100, 49], - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49] - } - }; - - // Fix humans - styles.color.grey = styles.color.gray; - - for (const groupName of Object.keys(styles)) { - const group = styles[groupName]; - - for (const styleName of Object.keys(group)) { - const style = group[styleName]; - - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m` - }; - - group[styleName] = styles[styleName]; - - codes.set(style[0], style[1]); - } - - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); - - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false - }); - } - - const ansi2ansi = n => n; - const rgb2rgb = (r, g, b) => [r, g, b]; - - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; - - styles.color.ansi = { - ansi: wrapAnsi16(ansi2ansi, 0) - }; - styles.color.ansi256 = { - ansi256: wrapAnsi256(ansi2ansi, 0) - }; - styles.color.ansi16m = { - rgb: wrapAnsi16m(rgb2rgb, 0) - }; - - styles.bgColor.ansi = { - ansi: wrapAnsi16(ansi2ansi, 10) - }; - styles.bgColor.ansi256 = { - ansi256: wrapAnsi256(ansi2ansi, 10) - }; - styles.bgColor.ansi16m = { - rgb: wrapAnsi16m(rgb2rgb, 10) - }; - - for (let key of Object.keys(colorConvert)) { - if (typeof colorConvert[key] !== 'object') { - continue; - } - - const suite = colorConvert[key]; - - if (key === 'ansi16') { - key = 'ansi'; - } - - if ('ansi16' in suite) { - styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); - styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); - } - - if ('ansi256' in suite) { - styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); - styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); - } - - if ('rgb' in suite) { - styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); - styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); - } - } - - return styles; -} - -// Make the export immutable -Object.defineProperty(module, 'exports', { - enumerable: true, - get: assembleStyles -}); diff --git a/node_modules/eslint/node_modules/ansi-styles/license b/node_modules/eslint/node_modules/ansi-styles/license deleted file mode 100644 index e7af2f7..0000000 --- a/node_modules/eslint/node_modules/ansi-styles/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/eslint/node_modules/ansi-styles/package.json b/node_modules/eslint/node_modules/ansi-styles/package.json deleted file mode 100644 index 65edb48..0000000 --- a/node_modules/eslint/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "ansi-styles", - "version": "3.2.1", - "description": "ANSI escape codes for styling strings in the terminal", - "license": "MIT", - "repository": "chalk/ansi-styles", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=4" - }, - "scripts": { - "test": "xo && ava", - "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" - }, - "files": [ - "index.js" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "color-convert": "^1.9.0" - }, - "devDependencies": { - "ava": "*", - "babel-polyfill": "^6.23.0", - "svg-term-cli": "^2.1.1", - "xo": "*" - }, - "ava": { - "require": "babel-polyfill" - } -} diff --git a/node_modules/eslint/node_modules/ansi-styles/readme.md b/node_modules/eslint/node_modules/ansi-styles/readme.md deleted file mode 100644 index 3158e2d..0000000 --- a/node_modules/eslint/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,147 +0,0 @@ -# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles) - -> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal - -You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. - - - - -## Install - -``` -$ npm install ansi-styles -``` - - -## Usage - -```js -const style = require('ansi-styles'); - -console.log(`${style.green.open}Hello world!${style.green.close}`); - - -// Color conversion between 16/256/truecolor -// NOTE: If conversion goes to 16 colors or 256 colors, the original color -// may be degraded to fit that color palette. This means terminals -// that do not support 16 million colors will best-match the -// original color. -console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close); -console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close); -console.log(style.color.ansi16m.hex('#ABCDEF') + 'Hello world!' + style.color.close); -``` - -## API - -Each style has an `open` and `close` property. - - -## Styles - -### Modifiers - -- `reset` -- `bold` -- `dim` -- `italic` *(Not widely supported)* -- `underline` -- `inverse` -- `hidden` -- `strikethrough` *(Not widely supported)* - -### Colors - -- `black` -- `red` -- `green` -- `yellow` -- `blue` -- `magenta` -- `cyan` -- `white` -- `gray` ("bright black") -- `redBright` -- `greenBright` -- `yellowBright` -- `blueBright` -- `magentaBright` -- `cyanBright` -- `whiteBright` - -### Background colors - -- `bgBlack` -- `bgRed` -- `bgGreen` -- `bgYellow` -- `bgBlue` -- `bgMagenta` -- `bgCyan` -- `bgWhite` -- `bgBlackBright` -- `bgRedBright` -- `bgGreenBright` -- `bgYellowBright` -- `bgBlueBright` -- `bgMagentaBright` -- `bgCyanBright` -- `bgWhiteBright` - - -## Advanced usage - -By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. - -- `style.modifier` -- `style.color` -- `style.bgColor` - -###### Example - -```js -console.log(style.color.green.open); -``` - -Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values. - -###### Example - -```js -console.log(style.codes.get(36)); -//=> 39 -``` - - -## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728) - -`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors. - -To use these, call the associated conversion function with the intended output, for example: - -```js -style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code -style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code - -style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code -style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code - -style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code -style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code -``` - - -## Related - -- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - -## License - -MIT diff --git a/node_modules/eslint/node_modules/chalk/index.js b/node_modules/eslint/node_modules/chalk/index.js deleted file mode 100644 index 1cc5fa8..0000000 --- a/node_modules/eslint/node_modules/chalk/index.js +++ /dev/null @@ -1,228 +0,0 @@ -'use strict'; -const escapeStringRegexp = require('escape-string-regexp'); -const ansiStyles = require('ansi-styles'); -const stdoutColor = require('supports-color').stdout; - -const template = require('./templates.js'); - -const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); - -// `supportsColor.level` → `ansiStyles.color[name]` mapping -const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m']; - -// `color-convert` models to exclude from the Chalk API due to conflicts and such -const skipModels = new Set(['gray']); - -const styles = Object.create(null); - -function applyOptions(obj, options) { - options = options || {}; - - // Detect level if not set manually - const scLevel = stdoutColor ? stdoutColor.level : 0; - obj.level = options.level === undefined ? scLevel : options.level; - obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0; -} - -function Chalk(options) { - // We check for this.template here since calling `chalk.constructor()` - // by itself will have a `this` of a previously constructed chalk object - if (!this || !(this instanceof Chalk) || this.template) { - const chalk = {}; - applyOptions(chalk, options); - - chalk.template = function () { - const args = [].slice.call(arguments); - return chalkTag.apply(null, [chalk.template].concat(args)); - }; - - Object.setPrototypeOf(chalk, Chalk.prototype); - Object.setPrototypeOf(chalk.template, chalk); - - chalk.template.constructor = Chalk; - - return chalk.template; - } - - applyOptions(this, options); -} - -// Use bright blue on Windows as the normal blue color is illegible -if (isSimpleWindowsTerm) { - ansiStyles.blue.open = '\u001B[94m'; -} - -for (const key of Object.keys(ansiStyles)) { - ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); - - styles[key] = { - get() { - const codes = ansiStyles[key]; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key); - } - }; -} - -styles.visible = { - get() { - return build.call(this, this._styles || [], true, 'visible'); - } -}; - -ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g'); -for (const model of Object.keys(ansiStyles.color.ansi)) { - if (skipModels.has(model)) { - continue; - } - - styles[model] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments); - const codes = { - open, - close: ansiStyles.color.close, - closeRe: ansiStyles.color.closeRe - }; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); - }; - } - }; -} - -ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g'); -for (const model of Object.keys(ansiStyles.bgColor.ansi)) { - if (skipModels.has(model)) { - continue; - } - - const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); - styles[bgModel] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments); - const codes = { - open, - close: ansiStyles.bgColor.close, - closeRe: ansiStyles.bgColor.closeRe - }; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); - }; - } - }; -} - -const proto = Object.defineProperties(() => {}, styles); - -function build(_styles, _empty, key) { - const builder = function () { - return applyStyle.apply(builder, arguments); - }; - - builder._styles = _styles; - builder._empty = _empty; - - const self = this; - - Object.defineProperty(builder, 'level', { - enumerable: true, - get() { - return self.level; - }, - set(level) { - self.level = level; - } - }); - - Object.defineProperty(builder, 'enabled', { - enumerable: true, - get() { - return self.enabled; - }, - set(enabled) { - self.enabled = enabled; - } - }); - - // See below for fix regarding invisible grey/dim combination on Windows - builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey'; - - // `__proto__` is used because we must return a function, but there is - // no way to create a function with a different prototype - builder.__proto__ = proto; // eslint-disable-line no-proto - - return builder; -} - -function applyStyle() { - // Support varags, but simply cast to string in case there's only one arg - const args = arguments; - const argsLen = args.length; - let str = String(arguments[0]); - - if (argsLen === 0) { - return ''; - } - - if (argsLen > 1) { - // Don't slice `arguments`, it prevents V8 optimizations - for (let a = 1; a < argsLen; a++) { - str += ' ' + args[a]; - } - } - - if (!this.enabled || this.level <= 0 || !str) { - return this._empty ? '' : str; - } - - // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, - // see https://github.com/chalk/chalk/issues/58 - // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. - const originalDim = ansiStyles.dim.open; - if (isSimpleWindowsTerm && this.hasGrey) { - ansiStyles.dim.open = ''; - } - - for (const code of this._styles.slice().reverse()) { - // Replace any instances already present with a re-opening code - // otherwise only the part of the string until said closing code - // will be colored, and the rest will simply be 'plain'. - str = code.open + str.replace(code.closeRe, code.open) + code.close; - - // Close the styling before a linebreak and reopen - // after next line to fix a bleed issue on macOS - // https://github.com/chalk/chalk/pull/92 - str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`); - } - - // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue - ansiStyles.dim.open = originalDim; - - return str; -} - -function chalkTag(chalk, strings) { - if (!Array.isArray(strings)) { - // If chalk() was called by itself or with a string, - // return the string itself as a string. - return [].slice.call(arguments, 1).join(' '); - } - - const args = [].slice.call(arguments, 2); - const parts = [strings.raw[0]]; - - for (let i = 1; i < strings.length; i++) { - parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&')); - parts.push(String(strings.raw[i])); - } - - return template(chalk, parts.join('')); -} - -Object.defineProperties(Chalk.prototype, styles); - -module.exports = Chalk(); // eslint-disable-line new-cap -module.exports.supportsColor = stdoutColor; -module.exports.default = module.exports; // For TypeScript diff --git a/node_modules/eslint/node_modules/chalk/index.js.flow b/node_modules/eslint/node_modules/chalk/index.js.flow deleted file mode 100644 index 622caaa..0000000 --- a/node_modules/eslint/node_modules/chalk/index.js.flow +++ /dev/null @@ -1,93 +0,0 @@ -// @flow strict - -type TemplateStringsArray = $ReadOnlyArray; - -export type Level = $Values<{ - None: 0, - Basic: 1, - Ansi256: 2, - TrueColor: 3 -}>; - -export type ChalkOptions = {| - enabled?: boolean, - level?: Level -|}; - -export type ColorSupport = {| - level: Level, - hasBasic: boolean, - has256: boolean, - has16m: boolean -|}; - -export interface Chalk { - (...text: string[]): string, - (text: TemplateStringsArray, ...placeholders: string[]): string, - constructor(options?: ChalkOptions): Chalk, - enabled: boolean, - level: Level, - rgb(r: number, g: number, b: number): Chalk, - hsl(h: number, s: number, l: number): Chalk, - hsv(h: number, s: number, v: number): Chalk, - hwb(h: number, w: number, b: number): Chalk, - bgHex(color: string): Chalk, - bgKeyword(color: string): Chalk, - bgRgb(r: number, g: number, b: number): Chalk, - bgHsl(h: number, s: number, l: number): Chalk, - bgHsv(h: number, s: number, v: number): Chalk, - bgHwb(h: number, w: number, b: number): Chalk, - hex(color: string): Chalk, - keyword(color: string): Chalk, - - +reset: Chalk, - +bold: Chalk, - +dim: Chalk, - +italic: Chalk, - +underline: Chalk, - +inverse: Chalk, - +hidden: Chalk, - +strikethrough: Chalk, - - +visible: Chalk, - - +black: Chalk, - +red: Chalk, - +green: Chalk, - +yellow: Chalk, - +blue: Chalk, - +magenta: Chalk, - +cyan: Chalk, - +white: Chalk, - +gray: Chalk, - +grey: Chalk, - +blackBright: Chalk, - +redBright: Chalk, - +greenBright: Chalk, - +yellowBright: Chalk, - +blueBright: Chalk, - +magentaBright: Chalk, - +cyanBright: Chalk, - +whiteBright: Chalk, - - +bgBlack: Chalk, - +bgRed: Chalk, - +bgGreen: Chalk, - +bgYellow: Chalk, - +bgBlue: Chalk, - +bgMagenta: Chalk, - +bgCyan: Chalk, - +bgWhite: Chalk, - +bgBlackBright: Chalk, - +bgRedBright: Chalk, - +bgGreenBright: Chalk, - +bgYellowBright: Chalk, - +bgBlueBright: Chalk, - +bgMagentaBright: Chalk, - +bgCyanBright: Chalk, - +bgWhiteBrigh: Chalk, - - supportsColor: ColorSupport -}; - -declare module.exports: Chalk; diff --git a/node_modules/eslint/node_modules/chalk/license b/node_modules/eslint/node_modules/chalk/license deleted file mode 100644 index e7af2f7..0000000 --- a/node_modules/eslint/node_modules/chalk/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/eslint/node_modules/chalk/package.json b/node_modules/eslint/node_modules/chalk/package.json deleted file mode 100644 index bc32468..0000000 --- a/node_modules/eslint/node_modules/chalk/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "chalk", - "version": "2.4.2", - "description": "Terminal string styling done right", - "license": "MIT", - "repository": "chalk/chalk", - "engines": { - "node": ">=4" - }, - "scripts": { - "test": "xo && tsc --project types && flow --max-warnings=0 && nyc ava", - "bench": "matcha benchmark.js", - "coveralls": "nyc report --reporter=text-lcov | coveralls" - }, - "files": [ - "index.js", - "templates.js", - "types/index.d.ts", - "index.js.flow" - ], - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "str", - "ansi", - "style", - "styles", - "tty", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "devDependencies": { - "ava": "*", - "coveralls": "^3.0.0", - "execa": "^0.9.0", - "flow-bin": "^0.68.0", - "import-fresh": "^2.0.0", - "matcha": "^0.7.0", - "nyc": "^11.0.2", - "resolve-from": "^4.0.0", - "typescript": "^2.5.3", - "xo": "*" - }, - "types": "types/index.d.ts", - "xo": { - "envs": [ - "node", - "mocha" - ], - "ignores": [ - "test/_flow.js" - ] - } -} diff --git a/node_modules/eslint/node_modules/chalk/readme.md b/node_modules/eslint/node_modules/chalk/readme.md deleted file mode 100644 index d298e2c..0000000 --- a/node_modules/eslint/node_modules/chalk/readme.md +++ /dev/null @@ -1,314 +0,0 @@ -

-
-
- Chalk -
-
-
-

- -> Terminal string styling done right - -[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk) [![Coverage Status](https://coveralls.io/repos/github/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/github/chalk/chalk?branch=master) [![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/xojs/xo) [![Mentioned in Awesome Node.js](https://awesome.re/mentioned-badge.svg)](https://github.com/sindresorhus/awesome-nodejs) - -### [See what's new in Chalk 2](https://github.com/chalk/chalk/releases/tag/v2.0.0) - - - - -## Highlights - -- Expressive API -- Highly performant -- Ability to nest styles -- [256/Truecolor color support](#256-and-truecolor-color-support) -- Auto-detects color support -- Doesn't extend `String.prototype` -- Clean and focused -- Actively maintained -- [Used by ~23,000 packages](https://www.npmjs.com/browse/depended/chalk) as of December 31, 2017 - - -## Install - -```console -$ npm install chalk -``` - - - - - - -## Usage - -```js -const chalk = require('chalk'); - -console.log(chalk.blue('Hello world!')); -``` - -Chalk comes with an easy to use composable API where you just chain and nest the styles you want. - -```js -const chalk = require('chalk'); -const log = console.log; - -// Combine styled and normal strings -log(chalk.blue('Hello') + ' World' + chalk.red('!')); - -// Compose multiple styles using the chainable API -log(chalk.blue.bgRed.bold('Hello world!')); - -// Pass in multiple arguments -log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz')); - -// Nest styles -log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!')); - -// Nest styles of the same type even (color, underline, background) -log(chalk.green( - 'I am a green line ' + - chalk.blue.underline.bold('with a blue substring') + - ' that becomes green again!' -)); - -// ES2015 template literal -log(` -CPU: ${chalk.red('90%')} -RAM: ${chalk.green('40%')} -DISK: ${chalk.yellow('70%')} -`); - -// ES2015 tagged template literal -log(chalk` -CPU: {red ${cpu.totalPercent}%} -RAM: {green ${ram.used / ram.total * 100}%} -DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%} -`); - -// Use RGB colors in terminal emulators that support it. -log(chalk.keyword('orange')('Yay for orange colored text!')); -log(chalk.rgb(123, 45, 67).underline('Underlined reddish color')); -log(chalk.hex('#DEADED').bold('Bold gray!')); -``` - -Easily define your own themes: - -```js -const chalk = require('chalk'); - -const error = chalk.bold.red; -const warning = chalk.keyword('orange'); - -console.log(error('Error!')); -console.log(warning('Warning!')); -``` - -Take advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args): - -```js -const name = 'Sindre'; -console.log(chalk.green('Hello %s'), name); -//=> 'Hello Sindre' -``` - - -## API - -### chalk.`'); - return output; -}; - -Formatter.prototype._line = function (indentation, content) { - if (!content || content === '') { - return this.__eol; - } - return this._indent(indentation, content + this.__eol); -}; - -Formatter.prototype._indent = function (count, content) { - if (this.__tab === '') { - return content; - } - - var output = ''; - while (count > 0) { - output += this.__tab; - count -= 1; - } - output += content; - return output; -}; - -/** - * Exports - */ -exports.Formatter = Formatter; diff --git a/node_modules/lint/lib/lint/formatter/vim.js b/node_modules/lint/lib/lint/formatter/vim.js deleted file mode 100644 index cd346eb..0000000 --- a/node_modules/lint/lib/lint/formatter/vim.js +++ /dev/null @@ -1,47 +0,0 @@ -/*jslint nodejs: true, indent:4 */ -/** - * Import - */ -var util = require(process.binding('natives').util ? 'util' : 'sys'); -var formatter = require('../formatter'); - -/** - * Formatter constructor - * - * @constructor - * @extends lint.formatter.Base - * @param {Object} options - */ -function Formatter(options) { - formatter.Base.call(this, options); -} -util.inherits(Formatter, formatter.Base); - -/** - * @return {string} - */ -Formatter.prototype._formatNormal = function (report) { - var error_regexp, output, thisFormatter; - - thisFormatter = this; - error_regexp = /^\s*(\S*(\s+\S+)*)\s*$/; - - output = ''; - report.forEach(function (fileReport) { - fileReport.errors.forEach(function (error) { - output += fileReport.file; - output += ' line ' + error.line; - output += ' column ' + error.character; - output += ' Error: ' + error.reason + ' ' + (error.evidence || '').replace(error_regexp, "$1"); - }); - output += thisFormatter.eol; - }); - - - return output; -}; - -/** - * Exports - */ -exports.Formatter = Formatter; \ No newline at end of file diff --git a/node_modules/lint/lib/lint/formatter/xml.js b/node_modules/lint/lib/lint/formatter/xml.js deleted file mode 100644 index 62907d8..0000000 --- a/node_modules/lint/lib/lint/formatter/xml.js +++ /dev/null @@ -1,114 +0,0 @@ -/*jslint nodejs: true, indent:4 */ -/** - * Import - */ -var util = require(process.binding('natives').util ? 'util' : 'sys'); -var path = require('path'); -var formatter = require('../formatter'); - -/** - * Formatter constructor - * - * @constructor - * @extends lint.formatter.Base - * @param {Object} options - */ -function Formatter(options) { - options = options || {}; - - formatter.Base.call(this, options); - this.pretty = false; - - this.configure(options); -} -util.inherits(Formatter, formatter.Base); - -/** - * Configure the Formatter - * - * @param {Object} options - * @return this - */ -Formatter.prototype.configure = function (options) { - if (options) { - Formatter.super_.prototype.configure.call(this, options); - - if (options.pretty !== undefined) { - this.pretty = options.pretty; - } - - this.__tab = (this.pretty) ? this.tab : ''; - this.__eol = (this.pretty) ? this.eol : ''; - } - return this; -}; - -/** - * - * @return {string} - */ -Formatter.prototype._formatNormal = function (report) { - var output, thisFormatter; - - thisFormatter = this; - output = ''; - output += thisFormatter._line(0, ''); - output += thisFormatter._line(0, ''); - report.forEach(function (fileReport) { - var errors, file; - - file = fileReport.file; - errors = fileReport.errors; - - output += thisFormatter._line(1, ''); - - errors.forEach(function (error) { - output += thisFormatter._line(2, '' - ); - }); - - output += thisFormatter._line(1, ''); - - }); - output += thisFormatter._line(0, ''); - return output; -}; - -Formatter.prototype._line = function (indentation, content) { - if (!content || content === '') { - return this.__eol; - } - return this._indent(indentation, content + this.__eol); -}; - -Formatter.prototype._indent = function (count, content) { - if (this.__tab === '') { - return content; - } - - var output = ''; - while (count > 0) { - output += this.__tab; - count -= 1; - } - output += content; - return output; -}; - -Formatter.prototype._attribute = function (name, value) { - return name + '="' + this._escape(value || '') + '"'; -}; - -Formatter.prototype._escape = function (string) { - return (string) ? ('' + string).replace(//g, '>').replace(/"/g, '"') : ''; -}; - -/** - * Exports - */ -exports.Formatter = Formatter; \ No newline at end of file diff --git a/node_modules/lint/lib/lint/index.js b/node_modules/lint/lib/lint/index.js deleted file mode 100644 index 40f2c53..0000000 --- a/node_modules/lint/lib/lint/index.js +++ /dev/null @@ -1,18 +0,0 @@ -/*jslint nodejs: true, indent:4 */ -/** - * Imports - */ -var formatter = require('./formatter'); -var parser = require('./parser'); -var launcher = require('./launcher'); - -//Apply assert patch -require('../assert/extension'); - -/** - * Exports - */ -exports.vows = require('./vows'); -exports.Formatter = formatter.Formatter; -exports.Launcher = launcher.Launcher; -exports.Parser = parser.Parser; diff --git a/node_modules/lint/lib/lint/jslint.js b/node_modules/lint/lib/lint/jslint.js deleted file mode 100644 index f5b0e0d..0000000 --- a/node_modules/lint/lib/lint/jslint.js +++ /dev/null @@ -1,5724 +0,0 @@ -// jslint.js -// 2010-09-16 - -/* -Copyright (c) 2002 Douglas Crockford (www.JSLint.com) - -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 shall be used for Good, not Evil. - -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. -*/ - -/* - JSLINT is a global function. It takes two parameters. - - var myResult = JSLINT(source, option); - - The first parameter is either a string or an array of strings. If it is a - string, it will be split on '\n' or '\r'. If it is an array of strings, it - is assumed that each string represents one line. The source can be a - JavaScript text, or HTML text, or a Konfabulator text. - - The second parameter is an optional object of options which control the - operation of JSLINT. Most of the options are booleans: They are all are - optional and have a default value of false. - - If it checks out, JSLINT returns true. Otherwise, it returns false. - - If false, you can inspect JSLINT.errors to find out the problems. - JSLINT.errors is an array of objects containing these members: - - { - line : The line (relative to 0) at which the lint was found - character : The character (relative to 0) at which the lint was found - reason : The problem - evidence : The text line in which the problem occurred - raw : The raw message before the details were inserted - a : The first detail - b : The second detail - c : The third detail - d : The fourth detail - } - - If a fatal error was found, a null will be the last element of the - JSLINT.errors array. - - You can request a Function Report, which shows all of the functions - and the parameters and vars that they use. This can be used to find - implied global variables and other problems. The report is in HTML and - can be inserted in an HTML . - - var myReport = JSLINT.report(limited); - - If limited is true, then the report will be limited to only errors. - - You can request a data structure which contains JSLint's results. - - var myData = JSLINT.data(); - - It returns a structure with this form: - - { - errors: [ - { - line: NUMBER, - character: NUMBER, - reason: STRING, - evidence: STRING - } - ], - functions: [ - name: STRING, - line: NUMBER, - last: NUMBER, - param: [ - STRING - ], - closure: [ - STRING - ], - var: [ - STRING - ], - exception: [ - STRING - ], - outer: [ - STRING - ], - unused: [ - STRING - ], - global: [ - STRING - ], - label: [ - STRING - ] - ], - globals: [ - STRING - ], - member: { - STRING: NUMBER - }, - unuseds: [ - { - name: STRING, - line: NUMBER - } - ], - implieds: [ - { - name: STRING, - line: NUMBER - } - ], - urls: [ - STRING - ], - json: BOOLEAN - } - - Empty arrays will not be included. - -*/ - -/*jslint - evil: true, nomen: false, onevar: false, regexp: false, strict: true, indent:4 -*/ - -/*members "\b", "\t", "\n", "\f", "\r", "!=", "!==", "\"", "%", - "(begin)", "(breakage)", "(context)", "(error)", "(global)", - "(identifier)", "(last)", "(line)", "(loopage)", "(name)", "(onevar)", - "(params)", "(scope)", "(statement)", "(verb)", "*", "+", "++", "-", - "--", "\/", "<", "<=", "==", "===", ">", ">=", ADSAFE, ActiveXObject, - Array, Boolean, COM, CScript, Canvas, CustomAnimation, Date, Debug, E, - Enumerator, Error, EvalError, FadeAnimation, Flash, FormField, Frame, - Function, HotKey, Image, JSON, LN10, LN2, LOG10E, LOG2E, MAX_VALUE, - MIN_VALUE, Math, MenuItem, MoveAnimation, NEGATIVE_INFINITY, Number, - Object, Option, PI, POSITIVE_INFINITY, Point, RangeError, Rectangle, - ReferenceError, RegExp, ResizeAnimation, RotateAnimation, SQRT1_2, - SQRT2, ScrollBar, String, Style, SyntaxError, System, Text, TextArea, - Timer, TypeError, URIError, URL, VBArray, WScript, Web, Window, XMLDOM, - XMLHttpRequest, "\\", a, abbr, acronym, addEventListener, address, - adsafe, alert, aliceblue, animator, antiquewhite, appleScript, applet, - apply, approved, aqua, aquamarine, area, arguments, arity, article, - aside, audio, autocomplete, azure, b, background, - "background-attachment", "background-color", "background-image", - "background-position", "background-repeat", base, bdo, beep, beige, big, - bisque, bitwise, black, blanchedalmond, block, blockquote, blue, - blueviolet, blur, body, border, "border-bottom", "border-bottom-color", - "border-bottom-style", "border-bottom-width", "border-collapse", - "border-color", "border-left", "border-left-color", "border-left-style", - "border-left-width", "border-right", "border-right-color", - "border-right-style", "border-right-width", "border-spacing", - "border-style", "border-top", "border-top-color", "border-top-style", - "border-top-width", "border-width", bottom, br, brown, browser, - burlywood, button, bytesToUIString, c, cadetblue, call, callee, caller, - canvas, cap, caption, "caption-side", cases, center, charAt, charCodeAt, - character, chartreuse, chocolate, chooseColor, chooseFile, chooseFolder, - cite, clear, clearInterval, clearTimeout, clip, close, closeWidget, - closed, closure, cm, code, col, colgroup, color, command, comment, - condition, confirm, console, constructor, content, convertPathToHFS, - convertPathToPlatform, coral, cornflowerblue, cornsilk, - "counter-increment", "counter-reset", create, crimson, css, cursor, - cyan, d, darkblue, darkcyan, darkgoldenrod, darkgray, darkgreen, - darkkhaki, darkmagenta, darkolivegreen, darkorange, darkorchid, darkred, - darksalmon, darkseagreen, darkslateblue, darkslategray, darkturquoise, - darkviolet, data, datalist, dd, debug, decodeURI, decodeURIComponent, - deeppink, deepskyblue, defaultStatus, defineClass, del, deserialize, - details, devel, dfn, dialog, dimension, dimgray, dir, direction, - display, div, dl, document, dodgerblue, dt, edition, else, em, embed, - empty, "empty-cells", encodeURI, encodeURIComponent, eqeqeq, - errors, es5, escape, eval, event, evidence, evil, ex, exception, exec, exps, - fieldset, figure, filesystem, firebrick, first, float, floor, - floralwhite, focus, focusWidget, font, "font-face", "font-family", - "font-size", "font-size-adjust", "font-stretch", "font-style", - "font-variant", "font-weight", footer, forestgreen, forin, form, - fragment, frame, frames, frameset, from, fromCharCode, fuchsia, fud, - funct, function, functions, g, gainsboro, gc, getComputedStyle, - ghostwhite, global, globals, gold, goldenrod, gray, green, greenyellow, - h1, h2, h3, h4, h5, h6, hasOwnProperty, head, header, height, help, - hgroup, history, honeydew, hotpink, hr, 'hta:application', html, - i, iTunes, id, identifier, - iframe, img, immed, implieds, in, include, indent, indexOf, indianred, - indigo, init, input, ins, isApplicationRunning, - isFinite, isNaN, ivory, join, jslint, json, kbd, keygen, khaki, - konfabulatorVersion, label, labelled, lang, last, lavender, - lavenderblush, lawngreen, laxbreak, lbp, led, left, legend, - lemonchiffon, length, "letter-spacing", li, lib, lightblue, lightcoral, - lightcyan, lightgoldenrodyellow, lightgreen, lightpink, lightsalmon, - lightseagreen, lightskyblue, lightslategray, lightsteelblue, - lightyellow, lime, limegreen, line, "line-height", linen, link, - "list-style", "list-style-image", "list-style-position", - "list-style-type", load, loadClass, location, log, m, magenta, map, - margin, "margin-bottom", "margin-left", "margin-right", "margin-top", - mark, "marker-offset", maroon, match, "max-height", "max-width", maxerr, - maxlen, md5, media, mediumaquamarine, mediumblue, mediumorchid, - mediumpurple, mediumseagreen, mediumslateblue, mediumspringgreen, - mediumturquoise, mediumvioletred, member, menu, message, meta, meter, - midnightblue, "min-height", "min-width", mintcream, mistyrose, mm, - moccasin, moveBy, moveTo, name, nav, navajowhite, navigator, navy, new, - newcap, noframes, nomen, noscript, nud, object, ol, oldlace, olive, - olivedrab, on, onbeforeunload, onblur, onerror, onevar, onfocus, onload, - onresize, onunload, opacity, open, openURL, opener, opera, optgroup, - option, orange, orangered, orchid, outer, outline, "outline-color", - "outline-style", "outline-width", output, overflow, "overflow-x", - "overflow-y", p, padding, "padding-bottom", "padding-left", - "padding-right", "padding-top", page, "page-break-after", - "page-break-before", palegoldenrod, palegreen, paleturquoise, - palevioletred, papayawhip, param, parent, parseFloat, parseInt, - passfail, pc, peachpuff, peru, pink, play, plum, plusplus, pop, - popupMenu, position, powderblue, pre, predef, preferenceGroups, - preferences, print, progress, prompt, prototype, pt, purple, push, px, - q, quit, quotes, random, range, raw, reach, readFile, readUrl, reason, - red, regexp, reloadWidget, removeEventListener, replace, report, - reserved, resizeBy, resizeTo, resolvePath, resumeUpdates, rhino, nodejs, right, - rosybrown, royalblue, rp, rt, ruby, runCommand, runCommandInBg, - saddlebrown, safe, salmon, samp, sandybrown, saveAs, savePreferences, - screen, script, scroll, scrollBy, scrollTo, seagreen, seal, search, - seashell, section, select, serialize, setInterval, setTimeout, shift, - showWidgetPreferences, sienna, silver, skyblue, slateblue, slategray, - sleep, slice, small, snow, sort, source, span, spawn, speak, split, - springgreen, src, stack, statement, status, steelblue, strict, strong, - style, styleproperty, sub, substr, sup, suppressUpdates, sync, - system, table, "table-layout", tan, tbody, td, teal, tellWidget, test, - "text-align", "text-decoration", "text-indent", "text-shadow", - "text-transform", textarea, tfoot, th, thead, thistle, time, title, - toLowerCase, toString, toUpperCase, toint32, token, tomato, top, tr, tt, - turquoise, type, u, ul, undef, unescape, "unicode-bidi", unused, - unwatch, updateNow, urls, value, valueOf, var, version, - "vertical-align", video, violet, visibility, watch, wheat, white, - "white-space", whitesmoke, widget, width, windows, "word-spacing", - "word-wrap", yahooCheckLogin, yahooLogin, yahooLogout, yellow, - yellowgreen, "z-index", - exports, module, require, process, __filename, __dirname, console, Buffer -*/ - -// We build the application inside a function so that we produce only a single -// global variable. The function will be invoked, its return value is the JSLINT -// application itself. - -"use strict"; - -var JSLINT = (function () { - var adsafe_id, // The widget's ADsafe id. - adsafe_may, // The widget may load approved scripts. - adsafe_went, // ADSAFE.go has been called. - anonname, // The guessed name for anonymous functions. - approved, // ADsafe approved urls. - - atrule = { - media : true, - 'font-face': true, - page : true - }, - -// These are operators that should not be used with the ! operator. - - bang = { - '<': true, - '<=': true, - '==': true, - '===': true, - '!==': true, - '!=': true, - '>': true, - '>=': true, - '+': true, - '-': true, - '*': true, - '/': true, - '%': true - }, - -// These are members that should not be permitted in the safe subset. - - banned = { // the member names that ADsafe prohibits. - 'arguments' : true, - callee : true, - caller : true, - constructor : true, - 'eval' : true, - prototype : true, - stack : true, - unwatch : true, - valueOf : true, - watch : true - }, - - -// These are the JSLint boolean options. - - boolOptions = { - adsafe : true, // if ADsafe should be enforced - bitwise : true, // if bitwise operators should not be allowed - browser : true, // if the standard browser globals should be predefined - cap : true, // if upper case HTML should be allowed - css : true, // if CSS workarounds should be tolerated - debug : true, // if debugger statements should be allowed - devel : true, // if logging should be allowed (console, alert, etc.) - eqeqeq : true, // if === should be required - es5 : true, // if ES5 syntax should be allowed - evil : true, // if eval should be allowed - forin : true, // if for in statements must filter - fragment : true, // if HTML fragments should be allowed - immed : true, // if immediate invocations must be wrapped in parens - laxbreak : true, // if line breaks should not be checked - newcap : true, // if constructor names must be capitalized - nomen : true, // if names should be checked - on : true, // if HTML event handlers should be allowed - onevar : true, // if only one var statement per function should be allowed - passfail : true, // if the scan should stop on first error - plusplus : true, // if increment/decrement should not be allowed - regexp : true, // if the . should not be allowed in regexp literals - rhino : true, // if the Rhino environment globals should be predefined - nodejs : true, // if the nodejs environment globals should be predefined - undef : true, // if variables should be declared before used - safe : true, // if use of some browser features should be restricted - windows : true, // if MS Windows-specigic globals should be predefined - strict : true, // require the "use strict"; pragma - sub : true, // if all forms of subscript notation are tolerated - white : true, // if strict whitespace rules apply - widget : true // if the Yahoo Widgets globals should be predefined - }, - -// browser contains a set of global names which are commonly provided by a -// web browser environment. - - browser = { - addEventListener: false, - blur : false, - clearInterval : false, - clearTimeout : false, - close : false, - closed : false, - defaultStatus : false, - document : false, - event : false, - focus : false, - frames : false, - getComputedStyle: false, - history : false, - Image : false, - length : false, - location : false, - moveBy : false, - moveTo : false, - name : false, - navigator : false, - onbeforeunload : true, - onblur : true, - onerror : true, - onfocus : true, - onload : true, - onresize : true, - onunload : true, - open : false, - opener : false, - Option : false, - parent : false, - print : false, - removeEventListener: false, - resizeBy : false, - resizeTo : false, - screen : false, - scroll : false, - scrollBy : false, - scrollTo : false, - setInterval : false, - setTimeout : false, - status : false, - top : false, - XMLHttpRequest : false - }, - - cssAttributeData, - cssAny, - - cssColorData = { - "aliceblue" : true, - "antiquewhite" : true, - "aqua" : true, - "aquamarine" : true, - "azure" : true, - "beige" : true, - "bisque" : true, - "black" : true, - "blanchedalmond" : true, - "blue" : true, - "blueviolet" : true, - "brown" : true, - "burlywood" : true, - "cadetblue" : true, - "chartreuse" : true, - "chocolate" : true, - "coral" : true, - "cornflowerblue" : true, - "cornsilk" : true, - "crimson" : true, - "cyan" : true, - "darkblue" : true, - "darkcyan" : true, - "darkgoldenrod" : true, - "darkgray" : true, - "darkgreen" : true, - "darkkhaki" : true, - "darkmagenta" : true, - "darkolivegreen" : true, - "darkorange" : true, - "darkorchid" : true, - "darkred" : true, - "darksalmon" : true, - "darkseagreen" : true, - "darkslateblue" : true, - "darkslategray" : true, - "darkturquoise" : true, - "darkviolet" : true, - "deeppink" : true, - "deepskyblue" : true, - "dimgray" : true, - "dodgerblue" : true, - "firebrick" : true, - "floralwhite" : true, - "forestgreen" : true, - "fuchsia" : true, - "gainsboro" : true, - "ghostwhite" : true, - "gold" : true, - "goldenrod" : true, - "gray" : true, - "green" : true, - "greenyellow" : true, - "honeydew" : true, - "hotpink" : true, - "indianred" : true, - "indigo" : true, - "ivory" : true, - "khaki" : true, - "lavender" : true, - "lavenderblush" : true, - "lawngreen" : true, - "lemonchiffon" : true, - "lightblue" : true, - "lightcoral" : true, - "lightcyan" : true, - "lightgoldenrodyellow" : true, - "lightgreen" : true, - "lightpink" : true, - "lightsalmon" : true, - "lightseagreen" : true, - "lightskyblue" : true, - "lightslategray" : true, - "lightsteelblue" : true, - "lightyellow" : true, - "lime" : true, - "limegreen" : true, - "linen" : true, - "magenta" : true, - "maroon" : true, - "mediumaquamarine" : true, - "mediumblue" : true, - "mediumorchid" : true, - "mediumpurple" : true, - "mediumseagreen" : true, - "mediumslateblue" : true, - "mediumspringgreen" : true, - "mediumturquoise" : true, - "mediumvioletred" : true, - "midnightblue" : true, - "mintcream" : true, - "mistyrose" : true, - "moccasin" : true, - "navajowhite" : true, - "navy" : true, - "oldlace" : true, - "olive" : true, - "olivedrab" : true, - "orange" : true, - "orangered" : true, - "orchid" : true, - "palegoldenrod" : true, - "palegreen" : true, - "paleturquoise" : true, - "palevioletred" : true, - "papayawhip" : true, - "peachpuff" : true, - "peru" : true, - "pink" : true, - "plum" : true, - "powderblue" : true, - "purple" : true, - "red" : true, - "rosybrown" : true, - "royalblue" : true, - "saddlebrown" : true, - "salmon" : true, - "sandybrown" : true, - "seagreen" : true, - "seashell" : true, - "sienna" : true, - "silver" : true, - "skyblue" : true, - "slateblue" : true, - "slategray" : true, - "snow" : true, - "springgreen" : true, - "steelblue" : true, - "tan" : true, - "teal" : true, - "thistle" : true, - "tomato" : true, - "turquoise" : true, - "violet" : true, - "wheat" : true, - "white" : true, - "whitesmoke" : true, - "yellow" : true, - "yellowgreen" : true - }, - - cssBorderStyle, - cssBreak, - - cssLengthData = { - '%': true, - 'cm': true, - 'em': true, - 'ex': true, - 'in': true, - 'mm': true, - 'pc': true, - 'pt': true, - 'px': true - }, - - cssOverflow, - - devel = { - alert : false, - confirm : false, - console : false, - Debug : false, - opera : false, - prompt : false - }, - - escapes = { - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '/' : '\\/', - '\\': '\\\\' - }, - - funct, // The current function - - functionicity = [ - 'closure', 'exception', 'global', 'label', - 'outer', 'unused', 'var' - ], - - functions, // All of the functions - - global, // The global scope - htmltag = { - a: {}, - abbr: {}, - acronym: {}, - address: {}, - applet: {}, - area: {empty: true, parent: ' map '}, - article: {}, - aside: {}, - audio: {}, - b: {}, - base: {empty: true, parent: ' head '}, - bdo: {}, - big: {}, - blockquote: {}, - body: {parent: ' html noframes '}, - br: {empty: true}, - button: {}, - canvas: {parent: ' body p div th td '}, - caption: {parent: ' table '}, - center: {}, - cite: {}, - code: {}, - col: {empty: true, parent: ' table colgroup '}, - colgroup: {parent: ' table '}, - command: {parent: ' menu '}, - datalist: {}, - dd: {parent: ' dl '}, - del: {}, - details: {}, - dialog: {}, - dfn: {}, - dir: {}, - div: {}, - dl: {}, - dt: {parent: ' dl '}, - em: {}, - embed: {}, - fieldset: {}, - figure: {}, - font: {}, - footer: {}, - form: {}, - frame: {empty: true, parent: ' frameset '}, - frameset: {parent: ' html frameset '}, - h1: {}, - h2: {}, - h3: {}, - h4: {}, - h5: {}, - h6: {}, - head: {parent: ' html '}, - header: {}, - hgroup: {}, - hr: {empty: true}, - 'hta:application': - {empty: true, parent: ' head '}, - html: {parent: '*'}, - i: {}, - iframe: {}, - img: {empty: true}, - input: {empty: true}, - ins: {}, - kbd: {}, - keygen: {}, - label: {}, - legend: {parent: ' details fieldset figure '}, - li: {parent: ' dir menu ol ul '}, - link: {empty: true, parent: ' head '}, - map: {}, - mark: {}, - menu: {}, - meta: {empty: true, parent: ' head noframes noscript '}, - meter: {}, - nav: {}, - noframes: {parent: ' html body '}, - noscript: {parent: ' body head noframes '}, - object: {}, - ol: {}, - optgroup: {parent: ' select '}, - option: {parent: ' optgroup select '}, - output: {}, - p: {}, - param: {empty: true, parent: ' applet object '}, - pre: {}, - progress: {}, - q: {}, - rp: {}, - rt: {}, - ruby: {}, - samp: {}, - script: {empty: true, parent: ' body div frame head iframe p pre span '}, - section: {}, - select: {}, - small: {}, - span: {}, - source: {}, - strong: {}, - style: {parent: ' head ', empty: true}, - sub: {}, - sup: {}, - table: {}, - tbody: {parent: ' table '}, - td: {parent: ' tr '}, - textarea: {}, - tfoot: {parent: ' table '}, - th: {parent: ' tr '}, - thead: {parent: ' table '}, - time: {}, - title: {parent: ' head '}, - tr: {parent: ' table tbody thead tfoot '}, - tt: {}, - u: {}, - ul: {}, - 'var': {}, - video: {} - }, - - ids, // HTML ids - implied, // Implied globals - inblock, - indent, - jsonmode, - lines, - lookahead, - member, - membersOnly, - nexttoken, - noreach, - option, - predefined, // Global variables defined by option - prereg, - prevtoken, - - rhino = { - defineClass : false, - deserialize : false, - gc : false, - help : false, - load : false, - loadClass : false, - print : false, - quit : false, - readFile : false, - readUrl : false, - runCommand : false, - seal : false, - serialize : false, - spawn : false, - sync : false, - toint32 : false, - version : false - }, - - nodejs = { - exports: true, - module: true, - require: true, - process: true, - __filename: true, - __dirname: true, - global: true, - console: true, - setInterval: true, - setTimeout: true, - clearInterval: true, - clearTimeout: true, - Buffer: true - }, - - scope, // The current scope - - windows = { - ActiveXObject: false, - CScript : false, - Debug : false, - Enumerator : false, - System : false, - VBArray : false, - WScript : false - }, - - src, - stack, - -// standard contains the global names that are provided by the -// ECMAScript standard. - - standard = { - Array : false, - Boolean : false, - Date : false, - decodeURI : false, - decodeURIComponent : false, - encodeURI : false, - encodeURIComponent : false, - Error : false, - 'eval' : false, - EvalError : false, - Function : false, - hasOwnProperty : false, - isFinite : false, - isNaN : false, - JSON : false, - Math : false, - Number : false, - Object : false, - parseInt : false, - parseFloat : false, - RangeError : false, - ReferenceError : false, - RegExp : false, - String : false, - SyntaxError : false, - TypeError : false, - URIError : false - }, - - standard_member = { - E : true, - LN2 : true, - LN10 : true, - LOG2E : true, - LOG10E : true, - PI : true, - SQRT1_2 : true, - SQRT2 : true, - MAX_VALUE : true, - MIN_VALUE : true, - NEGATIVE_INFINITY : true, - POSITIVE_INFINITY : true - }, - - strict_mode, - syntax = {}, - tab, - token, - urls, - warnings, - -// widget contains the global names which are provided to a Yahoo -// (fna Konfabulator) widget. - - widget = { - alert : true, - animator : true, - appleScript : true, - beep : true, - bytesToUIString : true, - Canvas : true, - chooseColor : true, - chooseFile : true, - chooseFolder : true, - closeWidget : true, - COM : true, - convertPathToHFS : true, - convertPathToPlatform : true, - CustomAnimation : true, - escape : true, - FadeAnimation : true, - filesystem : true, - Flash : true, - focusWidget : true, - form : true, - FormField : true, - Frame : true, - HotKey : true, - Image : true, - include : true, - isApplicationRunning : true, - iTunes : true, - konfabulatorVersion : true, - log : true, - md5 : true, - MenuItem : true, - MoveAnimation : true, - openURL : true, - play : true, - Point : true, - popupMenu : true, - preferenceGroups : true, - preferences : true, - print : true, - prompt : true, - random : true, - Rectangle : true, - reloadWidget : true, - ResizeAnimation : true, - resolvePath : true, - resumeUpdates : true, - RotateAnimation : true, - runCommand : true, - runCommandInBg : true, - saveAs : true, - savePreferences : true, - screen : true, - ScrollBar : true, - showWidgetPreferences : true, - sleep : true, - speak : true, - Style : true, - suppressUpdates : true, - system : true, - tellWidget : true, - Text : true, - TextArea : true, - Timer : true, - unescape : true, - updateNow : true, - URL : true, - Web : true, - widget : true, - Window : true, - XMLDOM : true, - XMLHttpRequest : true, - yahooCheckLogin : true, - yahooLogin : true, - yahooLogout : true - }, - -// xmode is used to adapt to the exceptions in html parsing. -// It can have these states: -// false .js script file -// html -// outer -// script -// style -// scriptstring -// styleproperty - - xmode, - xquote, - -// unsafe comment or string - ax = /@cc|<\/?|script|\]*s\]|<\s*!|</i, -// unsafe characters that are silently deleted by one or more browsers - cx = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/, -// token - tx = /^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/(\*(jslint|members?|global)?|=|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/, -// html token - hx = /^\s*(['"=>\/&#]|<(?:\/|\!(?:--)?)?|[a-zA-Z][a-zA-Z0-9_\-:]*|[0-9]+|--)/, -// characters in strings that need escapement - nx = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/, - nxg = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, -// outer html token - ox = /[>&]|<[\/!]?|--/, -// star slash - lx = /\*\/|\/\*/, -// identifier - ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/, -// javascript url - jx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i, -// url badness - ux = /&|\+|\u00AD|\.\.|\/\*|%[^;]|base64|url|expression|data|mailto/i, -// style - sx = /^\s*([{:#%.=,>+\[\]@()"';]|\*=?|\$=|\|=|\^=|~=|[a-zA-Z_][a-zA-Z0-9_\-]*|[0-9]+|<\/|\/\*)/, - ssx = /^\s*([@#!"'};:\-%.=,+\[\]()*_]|[a-zA-Z][a-zA-Z0-9._\-]*|\/\*?|\d+(?:\.\d+)?|<\/)/, -// attributes characters - qx = /[^a-zA-Z0-9+\-_\/ ]/, -// query characters for ids - dx = /[\[\]\/\\"'*<>.&:(){}+=#]/, - - rx = { - outer: hx, - html: hx, - style: sx, - styleproperty: ssx - }; - - function F() {} - - if (typeof Object.create !== 'function') { - Object.create = function (o) { - F.prototype = o; - return new F(); - }; - } - - - function is_own(object, name) { - return Object.prototype.hasOwnProperty.call(object, name); - } - - - function combine(t, o) { - var n; - for (n in o) { - if (is_own(o, n)) { - t[n] = o[n]; - } - } - } - - function entityify(str) { - return str - .replace(/&/g, '&') - .replace(//g, '>'); - } - - function isAlpha(str) { - return (str >= 'a' && str <= 'z\uffff') || - (str >= 'A' && str <= 'Z\uffff'); - } - - - function isDigit(str) { - return (str >= '0' && str <= '9'); - } - - - function supplant(str, o) { - return str.replace(/\{([^{}]*)\}/g, function (a, b) { - var r = o[b]; - return typeof r === 'string' || typeof r === 'number' ? r : a; - }); - } - - String.prototype.name = function () { - -// If the string looks like an identifier, then we can return it as is. -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can simply slap some quotes around it. -// Otherwise we must also replace the offending characters with safe -// sequences. - - if (ix.test(this)) { - return this; - } - if (nx.test(this)) { - return '"' + this.replace(nxg, function (a) { - var c = escapes[a]; - if (c) { - return c; - } - return '\\u' + ('0000' + a.charCodeAt().toString(16)).slice(-4); - }) + '"'; - } - return '"' + this + '"'; - }; - - - function assume() { - - if (!option.safe) { - if (option.rhino) { - combine(predefined, rhino); - } - if (option.nodejs) { - option.devel = false; - option.es5 = true; - combine(predefined, nodejs); - } - if (option.devel) { - combine(predefined, devel); - } - if (option.browser) { - combine(predefined, browser); - } - if (option.windows) { - combine(predefined, windows); - } - if (option.widget) { - combine(predefined, widget); - } - } - } - - -// Produce an error warning. - - function quit(m, l, ch) { - throw { - name: 'JSLintError', - line: l, - character: ch, - message: m + " (" + Math.floor((l / lines.length) * 100) + - "% scanned)." - }; - } - - function warning(m, t, a, b, c, d) { - var ch, l, w; - t = t || nexttoken; - if (t.id === '(end)') { // `~ - t = token; - } - l = t.line || 0; - ch = t.from || 0; - w = { - id: '(error)', - raw: m, - evidence: lines[l - 1] || '', - line: l, - character: ch, - a: a, - b: b, - c: c, - d: d - }; - w.reason = supplant(m, w); - JSLINT.errors.push(w); - if (option.passfail) { - quit('Stopping. ', l, ch); - } - warnings += 1; - if (warnings >= option.maxerr) { - quit("Too many errors.", l, ch); - } - return w; - } - - function warningAt(m, l, ch, a, b, c, d) { - return warning(m, { - line: l, - from: ch - }, a, b, c, d); - } - - function error(m, t, a, b, c, d) { - var w = warning(m, t, a, b, c, d); - quit("Stopping, unable to continue.", w.line, w.character); - } - - function errorAt(m, l, ch, a, b, c, d) { - return error(m, { - line: l, - from: ch - }, a, b, c, d); - } - - - -// lexical analysis - - var lex = (function lex() { - var character, from, line, s; - -// Private lex methods - - function nextLine() { - var at; - if (line >= lines.length) { - return false; - } - character = 1; - s = lines[line]; - line += 1; - at = s.search(/ \t/); - if (at >= 0) { - warningAt("Mixed spaces and tabs.", line, at + 1); - } - s = s.replace(/\t/g, tab); - at = s.search(cx); - if (at >= 0) { - warningAt("Unsafe character.", line, at); - } - if (option.maxlen && option.maxlen < s.length) { - warningAt("Line too long.", line, s.length); - } - return true; - } - -// Produce a token object. The token inherits from a syntax symbol. - - function it(type, value) { - var i, t; - if (type === '(color)') { - t = {type: type}; - } else if (type === '(punctuator)' || - (type === '(identifier)' && is_own(syntax, value))) { - t = syntax[value] || syntax['(error)']; - } else { - t = syntax[type]; - } - t = Object.create(t); - if (type === '(string)' || type === '(range)') { - if (jx.test(value)) { - warningAt("Script URL.", line, from); - } - } - if (type === '(identifier)') { - t.identifier = true; - if (value === '__iterator__' || value === '__proto__') { - errorAt("Reserved name '{a}'.", - line, from, value); - } else if (option.nomen && - (value.charAt(0) === '_' || - value.charAt(value.length - 1) === '_')) { - warningAt("Unexpected {a} in '{b}'.", line, from, - "dangling '_'", value); - } - } - t.value = value; - t.line = line; - t.character = character; - t.from = from; - i = t.id; - if (i !== '(endline)') { - prereg = i && - (('(,=:[!&|?{};'.indexOf(i.charAt(i.length - 1)) >= 0) || - i === 'return'); - } - return t; - } - -// Public lex methods - - return { - init: function (source) { - if (typeof source === 'string') { - lines = source - .replace(/\r\n/g, '\n') - .replace(/\r/g, '\n') - .split('\n'); - } else { - lines = source; - } - line = 0; - nextLine(); - from = 1; - }, - - range: function (begin, end) { - var c, value = ''; - from = character; - if (s.charAt(0) !== begin) { - errorAt("Expected '{a}' and instead saw '{b}'.", - line, character, begin, s.charAt(0)); - } - for (;;) { - s = s.slice(1); - character += 1; - c = s.charAt(0); - switch (c) { - case '': - errorAt("Missing '{a}'.", line, character, c); - break; - case end: - s = s.slice(1); - character += 1; - return it('(range)', value); - case xquote: - case '\\': - warningAt("Unexpected '{a}'.", line, character, c); - } - value += c; - } - - }, - -// token -- this is called by advance to get the next token. - - token: function () { - var b, c, captures, d, depth, high, i, l, low, q, t; - - function match(x) { - var r = x.exec(s), r1; - if (r) { - l = r[0].length; - r1 = r[1]; - c = r1.charAt(0); - s = s.substr(l); - from = character + l - r1.length; - character += l; - return r1; - } - } - - function string(x) { - var c, j, r = ''; - - if (jsonmode && x !== '"') { - warningAt("Strings must use doublequote.", - line, character); - } - - if (xquote === x || (xmode === 'scriptstring' && !xquote)) { - return it('(punctuator)', x); - } - - function esc(n) { - var i = parseInt(s.substr(j + 1, n), 16); - j += n; - if (i >= 32 && i <= 126 && - i !== 34 && i !== 92 && i !== 39) { - warningAt("Unnecessary escapement.", line, character); - } - character += n; - c = String.fromCharCode(i); - } - j = 0; - for (;;) { - while (j >= s.length) { - j = 0; - if (xmode !== 'html' || !nextLine()) { - errorAt("Unclosed string.", line, from); - } - } - c = s.charAt(j); - if (c === x) { - character += 1; - s = s.substr(j + 1); - return it('(string)', r, x); - } - if (c < ' ') { - if (c === '\n' || c === '\r') { - break; - } - warningAt("Control character in string: {a}.", - line, character + j, s.slice(0, j)); - } else if (c === xquote) { - warningAt("Bad HTML string", line, character + j); - } else if (c === '<') { - if (option.safe && xmode === 'html') { - warningAt("ADsafe string violation.", - line, character + j); - } else if (s.charAt(j + 1) === '/' && (xmode || option.safe)) { - warningAt("Expected '<\\/' and instead saw ' 0) { - character += 1; - s = s.slice(i); - break; - } else { - if (!nextLine()) { - return it('(end)', ''); - } - } - } -// t = match(rx[xmode] || tx); -// if (!t) { -// if (xmode === 'html') { -// return it('(error)', s.charAt(0)); -// } else { -// t = ''; -// c = ''; -// while (s && s < '!') { -// s = s.substr(1); -// } -// if (s) { -// errorAt("Unexpected '{a}'.", -// line, character, s.substr(0, 1)); -// } -// } - t = match(rx[xmode] || tx); - if (!t) { - t = ''; - c = ''; - while (s && s < '!') { - s = s.substr(1); - } - if (s) { - if (xmode === 'html') { - return it('(error)', s.charAt(0)); - } else { - errorAt("Unexpected '{a}'.", - line, character, s.substr(0, 1)); - } - } - } else { - - // identifier - - if (isAlpha(c) || c === '_' || c === '$') { - return it('(identifier)', t); - } - - // number - - if (isDigit(c)) { - if (xmode !== 'style' && !isFinite(Number(t))) { - warningAt("Bad number '{a}'.", - line, character, t); - } - if (xmode !== 'style' && - xmode !== 'styleproperty' && - isAlpha(s.substr(0, 1))) { - warningAt("Missing space after '{a}'.", - line, character, t); - } - if (c === '0') { - d = t.substr(1, 1); - if (isDigit(d)) { - if (token.id !== '.' && xmode !== 'styleproperty') { - warningAt("Don't use extra leading zeros '{a}'.", - line, character, t); - } - } else if (jsonmode && (d === 'x' || d === 'X')) { - warningAt("Avoid 0x-. '{a}'.", - line, character, t); - } - } - if (t.substr(t.length - 1) === '.') { - warningAt( - "A trailing decimal point can be confused with a dot '{a}'.", - line, character, t); - } - return it('(number)', t); - } - switch (t) { - - // string - - case '"': - case "'": - return string(t); - - // // comment - - case '//': - if (src || (xmode && xmode !== 'script')) { - warningAt("Unexpected comment.", line, character); - } else if (xmode === 'script' && /<\s*\//i.test(s)) { - warningAt("Unexpected <\/ in comment.", line, character); - } else if ((option.safe || xmode === 'script') && ax.test(s)) { - warningAt("Dangerous comment.", line, character); - } - s = ''; - token.comment = true; - break; - - // /* comment - - case '/*': - if (src || (xmode && xmode !== 'script' && xmode !== 'style' && xmode !== 'styleproperty')) { - warningAt("Unexpected comment.", line, character); - } - if (option.safe && ax.test(s)) { - warningAt("ADsafe comment violation.", line, character); - } - for (;;) { - i = s.search(lx); - if (i >= 0) { - break; - } - if (!nextLine()) { - errorAt("Unclosed comment.", line, character); - } else { - if (option.safe && ax.test(s)) { - warningAt("ADsafe comment violation.", - line, character); - } - } - } - character += i + 2; - if (s.substr(i, 1) === '/') { - errorAt("Nested comment.", line, character); - } - s = s.substr(i + 2); - token.comment = true; - break; - - // /*members /*jslint /*global - - case '/*members': - case '/*member': - case '/*jslint': - case '/*global': - case '*/': - return { - value: t, - type: 'special', - line: line, - character: character, - from: from - }; - - case '': - break; - // / - case '/': - if (token.id === '/=') { - errorAt( -"A regular expression literal can be confused with '/='.", line, from); - } - if (prereg) { - depth = 0; - captures = 0; - l = 0; - for (;;) { - b = true; - c = s.charAt(l); - l += 1; - switch (c) { - case '': - errorAt("Unclosed regular expression.", - line, from); - return; - case '/': - if (depth > 0) { - warningAt("Unescaped '{a}'.", - line, from + l, '/'); - } - c = s.substr(0, l - 1); - q = { - g: true, - i: true, - m: true - }; - while (q[s.charAt(l)] === true) { - q[s.charAt(l)] = false; - l += 1; - } - character += l; - s = s.substr(l); - q = s.charAt(0); - if (q === '/' || q === '*') { - errorAt("Confusing regular expression.", - line, from); - } - return it('(regexp)', c); - case '\\': - c = s.charAt(l); - if (c < ' ') { - warningAt( -"Unexpected control character in regular expression.", line, from + l); - } else if (c === '<') { - warningAt( -"Unexpected escaped character '{a}' in regular expression.", line, from + l, c); - } - l += 1; - break; - case '(': - depth += 1; - b = false; - if (s.charAt(l) === '?') { - l += 1; - switch (s.charAt(l)) { - case ':': - case '=': - case '!': - l += 1; - break; - default: - warningAt( -"Expected '{a}' and instead saw '{b}'.", line, from + l, ':', s.charAt(l)); - } - } else { - captures += 1; - } - break; - case '|': - b = false; - break; - case ')': - if (depth === 0) { - warningAt("Unescaped '{a}'.", - line, from + l, ')'); - } else { - depth -= 1; - } - break; - case ' ': - q = 1; - while (s.charAt(l) === ' ') { - l += 1; - q += 1; - } - if (q > 1) { - warningAt( -"Spaces are hard to count. Use {{a}}.", line, from + l, q); - } - break; - case '[': - c = s.charAt(l); - if (c === '^') { - l += 1; - if (option.regexp) { - warningAt("Insecure '{a}'.", - line, from + l, c); - } - } - q = false; - if (c === ']') { - warningAt("Empty class.", line, - from + l - 1); - q = true; - } -klass: do { - c = s.charAt(l); - l += 1; - switch (c) { - case '[': - case '^': - warningAt("Unescaped '{a}'.", - line, from + l, c); - q = true; - break; - case '-': - if (q) { - q = false; - } else { - warningAt("Unescaped '{a}'.", - line, from + l, '-'); - q = true; - } - break; - case ']': - if (!q) { - warningAt("Unescaped '{a}'.", - line, from + l - 1, '-'); - } - break klass; - case '\\': - c = s.charAt(l); - if (c < ' ') { - warningAt( -"Unexpected control character in regular expression.", line, from + l); - } else if (c === '<') { - warningAt( -"Unexpected escaped character '{a}' in regular expression.", line, from + l, c); - } - l += 1; - q = true; - break; - case '/': - warningAt("Unescaped '{a}'.", - line, from + l - 1, '/'); - q = true; - break; - case '<': - if (xmode === 'script') { - c = s.charAt(l); - if (c === '!' || c === '/') { - warningAt( -"HTML confusion in regular expression '<{a}'.", line, from + l, c); - } - } - q = true; - break; - default: - q = true; - } - } while (c); - break; - case '.': - if (option.regexp) { - warningAt("Insecure '{a}'.", line, - from + l, c); - } - break; - case ']': - case '?': - case '{': - case '}': - case '+': - case '*': - warningAt("Unescaped '{a}'.", line, - from + l, c); - break; - case '<': - if (xmode === 'script') { - c = s.charAt(l); - if (c === '!' || c === '/') { - warningAt( -"HTML confusion in regular expression '<{a}'.", line, from + l, c); - } - } - } - if (b) { - switch (s.charAt(l)) { - case '?': - case '+': - case '*': - l += 1; - if (s.charAt(l) === '?') { - l += 1; - } - break; - case '{': - l += 1; - c = s.charAt(l); - if (c < '0' || c > '9') { - warningAt( -"Expected a number and instead saw '{a}'.", line, from + l, c); - } - l += 1; - low = +c; - for (;;) { - c = s.charAt(l); - if (c < '0' || c > '9') { - break; - } - l += 1; - low = +c + (low * 10); - } - high = low; - if (c === ',') { - l += 1; - high = Infinity; - c = s.charAt(l); - if (c >= '0' && c <= '9') { - l += 1; - high = +c; - for (;;) { - c = s.charAt(l); - if (c < '0' || c > '9') { - break; - } - l += 1; - high = +c + (high * 10); - } - } - } - if (s.charAt(l) !== '}') { - warningAt( -"Expected '{a}' and instead saw '{b}'.", line, from + l, '}', c); - } else { - l += 1; - } - if (s.charAt(l) === '?') { - l += 1; - } - if (low > high) { - warningAt( -"'{a}' should not be greater than '{b}'.", line, from + l, low, high); - } - } - } - } - c = s.substr(0, l - 1); - character += l; - s = s.substr(l); - return it('(regexp)', c); - } - return it('(punctuator)', t); - - // punctuator - - case '.", line, character); - } - character += 3; - s = s.slice(i + 3); - break; - case '#': - if (xmode === 'html' || xmode === 'styleproperty') { - for (;;) { - c = s.charAt(0); - if ((c < '0' || c > '9') && - (c < 'a' || c > 'f') && - (c < 'A' || c > 'F')) { - break; - } - character += 1; - s = s.substr(1); - t += c; - } - if (t.length !== 4 && t.length !== 7) { - warningAt("Bad hex color '{a}'.", line, - from + l, t); - } - return it('(color)', t); - } - return it('(punctuator)', t); - default: - if (xmode === 'outer' && c === '&') { - character += 1; - s = s.substr(1); - for (;;) { - c = s.charAt(0); - character += 1; - s = s.substr(1); - if (c === ';') { - break; - } - if (!((c >= '0' && c <= '9') || - (c >= 'a' && c <= 'z') || - c === '#')) { - errorAt("Bad entity", line, from + l, - character); - } - } - break; - } - return it('(punctuator)', t); - } - } - } - } - }; - }()); - - - function addlabel(t, type) { - - if (option.safe && funct['(global)'] && - typeof predefined[t] !== 'boolean') { - warning('ADsafe global: ' + t + '.', token); - } else if (t === 'hasOwnProperty') { - warning("'hasOwnProperty' is a really bad name."); - } - -// Define t in the current function in the current scope. - - if (is_own(funct, t) && !funct['(global)']) { - warning(funct[t] === true ? - "'{a}' was used before it was defined." : - "'{a}' is already defined.", - nexttoken, t); - } - funct[t] = type; - if (funct['(global)']) { - global[t] = funct; - if (is_own(implied, t)) { - warning("'{a}' was used before it was defined.", nexttoken, t); - delete implied[t]; - } - } else { - scope[t] = funct; - } - } - - - function doOption() { - var b, obj, filter, o = nexttoken.value, t, v; - switch (o) { - case '*/': - error("Unbegun comment."); - break; - case '/*members': - case '/*member': - o = '/*members'; - if (!membersOnly) { - membersOnly = {}; - } - obj = membersOnly; - break; - case '/*jslint': - if (option.safe) { - warning("ADsafe restriction."); - } - obj = option; - filter = boolOptions; - break; - case '/*global': - if (option.safe) { - warning("ADsafe restriction."); - } - obj = predefined; - break; - default: - } - t = lex.token(); -loop: for (;;) { - for (;;) { - if (t.type === 'special' && t.value === '*/') { - break loop; - } - if (t.id !== '(endline)' && t.id !== ',') { - break; - } - t = lex.token(); - } - if (t.type !== '(string)' && t.type !== '(identifier)' && - o !== '/*members') { - error("Bad option.", t); - } - v = lex.token(); - if (v.id === ':') { - v = lex.token(); - if (obj === membersOnly) { - error("Expected '{a}' and instead saw '{b}'.", - t, '*/', ':'); - } - if (t.value === 'indent' && o === '/*jslint') { - b = +v.value; - if (typeof b !== 'number' || !isFinite(b) || b <= 0 || - Math.floor(b) !== b) { - error("Expected a small integer and instead saw '{a}'.", - v, v.value); - } - obj.white = true; - obj.indent = b; - } else if (t.value === 'maxerr' && o === '/*jslint') { - b = +v.value; - if (typeof b !== 'number' || !isFinite(b) || b <= 0 || - Math.floor(b) !== b) { - error("Expected a small integer and instead saw '{a}'.", - v, v.value); - } - obj.maxerr = b; - } else if (t.value === 'maxlen' && o === '/*jslint') { - b = +v.value; - if (typeof b !== 'number' || !isFinite(b) || b <= 0 || - Math.floor(b) !== b) { - error("Expected a small integer and instead saw '{a}'.", - v, v.value); - } - obj.maxlen = b; - } else if (v.value === 'true') { - obj[t.value] = true; - } else if (v.value === 'false') { - obj[t.value] = false; - } else { - error("Bad option value.", v); - } - t = lex.token(); - } else { - if (o === '/*jslint') { - error("Missing option value.", t); - } - obj[t.value] = false; - t = v; - } - } - if (filter) { - assume(); - } - } - - -// We need a peek function. If it has an argument, it peeks that much farther -// ahead. It is used to distinguish -// for ( var i in ... -// from -// for ( var i = ... - - function peek(p) { - var i = p || 0, j = 0, t; - - while (j <= i) { - t = lookahead[j]; - if (!t) { - t = lookahead[j] = lex.token(); - } - j += 1; - } - return t; - } - - - -// Produce the next token. It looks for programming errors. - - function advance(id, t) { - switch (token.id) { - case '(number)': - if (nexttoken.id === '.') { - warning( -"A dot following a number can be confused with a decimal point.", token); - } - break; - case '-': - if (nexttoken.id === '-' || nexttoken.id === '--') { - warning("Confusing minusses."); - } - break; - case '+': - if (nexttoken.id === '+' || nexttoken.id === '++') { - warning("Confusing plusses."); - } - break; - } - if (token.type === '(string)' || token.identifier) { - anonname = token.value; - } - - if (id && nexttoken.id !== id) { - if (t) { - if (nexttoken.id === '(end)') { - warning("Unmatched '{a}'.", t, t.id); - } else { - warning( -"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.", - nexttoken, id, t.id, t.line, nexttoken.value); - } - } else if (nexttoken.type !== '(identifier)' || - nexttoken.value !== id) { - warning("Expected '{a}' and instead saw '{b}'.", - nexttoken, id, nexttoken.value); - } - } - prevtoken = token; - token = nexttoken; - for (;;) { - nexttoken = lookahead.shift() || lex.token(); - if (nexttoken.id === '(end)' || nexttoken.id === '(error)') { - return; - } - if (nexttoken.type === 'special') { - doOption(); - } else { - if (nexttoken.id !== '(endline)') { - break; - } - } - } - } - - -// This is the heart of JSLINT, the Pratt parser. In addition to parsing, it -// is looking for ad hoc lint patterns. We add to Pratt's model .fud, which is -// like nud except that it is only used on the first token of a statement. -// Having .fud makes it much easier to define JavaScript. I retained Pratt's -// nomenclature. - -// .nud Null denotation -// .fud First null denotation -// .led Left denotation -// lbp Left binding power -// rbp Right binding power - -// They are key to the parsing method called Top Down Operator Precedence. - - function parse(rbp, initial) { - var left; - if (nexttoken.id === '(end)') { - error("Unexpected early end of program.", token); - } - advance(); - if (option.safe && typeof predefined[token.value] === 'boolean' && - (nexttoken.id !== '(' && nexttoken.id !== '.')) { - warning('ADsafe violation.', token); - } - if (initial) { - anonname = 'anonymous'; - funct['(verb)'] = token.value; - } - if (initial === true && token.fud) { - left = token.fud(); - } else { - if (token.nud) { - left = token.nud(); - } else { - if (nexttoken.type === '(number)' && token.id === '.') { - warning( -"A leading decimal point can be confused with a dot: '.{a}'.", - token, nexttoken.value); - advance(); - return token; - } else { - error("Expected an identifier and instead saw '{a}'.", - token, token.id); - } - } - while (rbp < nexttoken.lbp) { - advance(); - if (token.led) { - left = token.led(left); - } else { - error("Expected an operator and instead saw '{a}'.", - token, token.id); - } - } - } - return left; - } - - -// Functions for conformance of style. - - function adjacent(left, right) { - left = left || token; - right = right || nexttoken; - if (option.white || xmode === 'styleproperty' || xmode === 'style') { - if (left.character !== right.from && left.line === right.line) { - warning("Unexpected space after '{a}'.", right, left.value); - } - } - } - - function nobreak(left, right) { - left = left || token; - right = right || nexttoken; - if (left.character !== right.from || left.line !== right.line) { - warning("Unexpected space before '{a}'.", right, right.value); - } - } - - function nospace(left, right) { - left = left || token; - right = right || nexttoken; - if (option.white && !left.comment) { - if (left.line === right.line) { - adjacent(left, right); - } - } - } - - - function nonadjacent(left, right) { - if (option.white) { - left = left || token; - right = right || nexttoken; - if (left.line === right.line && left.character === right.from) { - warning("Missing space after '{a}'.", - nexttoken, left.value); - } - } - } - - function nobreaknonadjacent(left, right) { - left = left || token; - right = right || nexttoken; - if (!option.laxbreak && left.line !== right.line) { - warning("Bad line breaking before '{a}'.", right, right.id); - } else if (option.white) { - left = left || token; - right = right || nexttoken; - if (left.character === right.from) { - warning("Missing space after '{a}'.", - nexttoken, left.value); - } - } - } - - function indentation(bias) { - var i; - if (option.white && nexttoken.id !== '(end)') { - i = indent + (bias || 0); - if (nexttoken.from !== i) { - warning( -"Expected '{a}' to have an indentation at {b} instead at {c}.", - nexttoken, nexttoken.value, i, nexttoken.from); - } - } - } - - function nolinebreak(t) { - t = t || token; - if (t.line !== nexttoken.line) { - warning("Line breaking error '{a}'.", t, t.value); - } - } - - - function comma() { - if (token.line !== nexttoken.line) { - if (!option.laxbreak) { - warning("Bad line breaking before '{a}'.", token, nexttoken.id); - } - } else if (token.character !== nexttoken.from && option.white) { - warning("Unexpected space after '{a}'.", nexttoken, token.value); - } - advance(','); - nonadjacent(token, nexttoken); - } - - -// Functional constructors for making the symbols that will be inherited by -// tokens. - - function symbol(s, p) { - var x = syntax[s]; - if (!x || typeof x !== 'object') { - syntax[s] = x = { - id: s, - lbp: p, - value: s - }; - } - return x; - } - - - function delim(s) { - return symbol(s, 0); - } - - - function stmt(s, f) { - var x = delim(s); - x.identifier = x.reserved = true; - x.fud = f; - return x; - } - - - function blockstmt(s, f) { - var x = stmt(s, f); - x.block = true; - return x; - } - - - function reserveName(x) { - var c = x.id.charAt(0); - if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { - x.identifier = x.reserved = true; - } - return x; - } - - - function prefix(s, f) { - var x = symbol(s, 150); - reserveName(x); - x.nud = (typeof f === 'function') ? f : function () { - this.right = parse(150); - this.arity = 'unary'; - if (this.id === '++' || this.id === '--') { - if (option.plusplus) { - warning("Unexpected use of '{a}'.", this, this.id); - } else if ((!this.right.identifier || this.right.reserved) && - this.right.id !== '.' && this.right.id !== '[') { - warning("Bad operand.", this); - } - } - return this; - }; - return x; - } - - - function type(s, f) { - var x = delim(s); - x.type = s; - x.nud = f; - return x; - } - - - function reserve(s, f) { - var x = type(s, f); - x.identifier = x.reserved = true; - return x; - } - - - function reservevar(s, v) { - return reserve(s, function () { - if (typeof v === 'function') { - v(this); - } - return this; - }); - } - - - function infix(s, f, p, w) { - var x = symbol(s, p); - reserveName(x); - x.led = function (left) { - if (!w) { - nobreaknonadjacent(prevtoken, token); - nonadjacent(token, nexttoken); - } - if (typeof f === 'function') { - return f(left, this); - } else { - this.left = left; - this.right = parse(p); - return this; - } - }; - return x; - } - - - function relation(s, f) { - var x = symbol(s, 100); - x.led = function (left) { - nobreaknonadjacent(prevtoken, token); - nonadjacent(token, nexttoken); - var right = parse(100); - if ((left && left.id === 'NaN') || (right && right.id === 'NaN')) { - warning("Use the isNaN function to compare with NaN.", this); - } else if (f) { - f.apply(this, [left, right]); - } - if (left.id === '!') { - warning("Confusing use of '{a}'.", left, '!'); - } - if (right.id === '!') { - warning("Confusing use of '{a}'.", left, '!'); - } - this.left = left; - this.right = right; - return this; - }; - return x; - } - - - function isPoorRelation(node) { - return node && - ((node.type === '(number)' && +node.value === 0) || - (node.type === '(string)' && node.value === '') || - node.type === 'true' || - node.type === 'false' || - node.type === 'undefined' || - node.type === 'null'); - } - - - function assignop(s, f) { - symbol(s, 20).exps = true; - return infix(s, function (left, that) { - var l; - that.left = left; - if (predefined[left.value] === false && - scope[left.value]['(global)'] === true) { - warning("Read only.", left); - } else if (left['function']) { - warning("'{a}' is a function.", left, left.value); - } - if (option.safe) { - l = left; - do { - if (typeof predefined[l.value] === 'boolean') { - warning('ADsafe violation.', l); - } - l = l.left; - } while (l); - } - if (left) { - if (left.id === '.' || left.id === '[') { - if (!left.left || left.left.value === 'arguments') { - warning('Bad assignment.', that); - } - that.right = parse(19); - return that; - } else if (left.identifier && !left.reserved) { - if (funct[left.value] === 'exception') { - warning("Do not assign to the exception parameter.", left); - } - that.right = parse(19); - return that; - } - if (left === syntax['function']) { - warning( -"Expected an identifier in an assignment and instead saw a function invocation.", - token); - } - } - error("Bad assignment.", that); - }, 20); - } - - function bitwise(s, f, p) { - var x = symbol(s, p); - reserveName(x); - x.led = (typeof f === 'function') ? f : function (left) { - if (option.bitwise) { - warning("Unexpected use of '{a}'.", this, this.id); - } - this.left = left; - this.right = parse(p); - return this; - }; - return x; - } - - function bitwiseassignop(s) { - symbol(s, 20).exps = true; - return infix(s, function (left, that) { - if (option.bitwise) { - warning("Unexpected use of '{a}'.", that, that.id); - } - nonadjacent(prevtoken, token); - nonadjacent(token, nexttoken); - if (left) { - if (left.id === '.' || left.id === '[' || - (left.identifier && !left.reserved)) { - parse(19); - return that; - } - if (left === syntax['function']) { - warning( -"Expected an identifier in an assignment, and instead saw a function invocation.", - token); - } - return that; - } - error("Bad assignment.", that); - }, 20); - } - - - function suffix(s, f) { - var x = symbol(s, 150); - x.led = function (left) { - if (option.plusplus) { - warning("Unexpected use of '{a}'.", this, this.id); - } else if ((!left.identifier || left.reserved) && - left.id !== '.' && left.id !== '[') { - warning("Bad operand.", this); - } - this.left = left; - return this; - }; - return x; - } - - - function optionalidentifier() { - if (nexttoken.identifier) { - advance(); - if (option.safe && banned[token.value]) { - warning("ADsafe violation: '{a}'.", token, token.value); - } else if (token.reserved && !option.es5) { - warning("Expected an identifier and instead saw '{a}' (a reserved word).", - token, token.id); - } - return token.value; - } - } - - - function identifier() { - var i = optionalidentifier(); - if (i) { - return i; - } - if (token.id === 'function' && nexttoken.id === '(') { - warning("Missing name in function statement."); - } else { - error("Expected an identifier and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - } - - function reachable(s) { - var i = 0, t; - if (nexttoken.id !== ';' || noreach) { - return; - } - for (;;) { - t = peek(i); - if (t.reach) { - return; - } - if (t.id !== '(endline)') { - if (t.id === 'function') { - warning( -"Inner functions should be listed at the top of the outer function.", t); - break; - } - warning("Unreachable '{a}' after '{b}'.", t, t.value, s); - break; - } - i += 1; - } - } - - - function statement(noindent) { - var i = indent, r, s = scope, t = nexttoken; - -// We don't like the empty statement. - - if (t.id === ';') { - warning("Unnecessary semicolon.", t); - advance(';'); - return; - } - -// Is this a labelled statement? - - if (t.identifier && !t.reserved && peek().id === ':') { - advance(); - advance(':'); - scope = Object.create(s); - addlabel(t.value, 'label'); - if (!nexttoken.labelled) { - warning("Label '{a}' on {b} statement.", - nexttoken, t.value, nexttoken.value); - } - if (jx.test(t.value + ':')) { - warning("Label '{a}' looks like a javascript url.", - t, t.value); - } - nexttoken.label = t.value; - t = nexttoken; - } - -// Parse the statement. - - if (!noindent) { - indentation(); - } - r = parse(0, true); - -// Look for the final semicolon. - - if (!t.block) { - if (!r || !r.exps) { - warning( -"Expected an assignment or function call and instead saw an expression.", - token); - } else if (r.id === '(' && r.left.id === 'new') { - warning("Do not use 'new' for side effects."); - } - if (nexttoken.id !== ';') { - warningAt("Missing semicolon.", token.line, - token.from + token.value.length); - } else { - adjacent(token, nexttoken); - advance(';'); - nonadjacent(token, nexttoken); - } - } - -// Restore the indentation. - - indent = i; - scope = s; - return r; - } - - - function use_strict() { - if (nexttoken.value === 'use strict') { - advance(); - advance(';'); - strict_mode = true; - option.newcap = true; - option.undef = true; - return true; - } else { - return false; - } - } - - - function statements(begin) { - var a = [], f, p; - if (begin && !use_strict() && option.strict) { - warning('Missing "use strict" statement.', nexttoken); - } - if (option.adsafe) { - switch (begin) { - case 'script': - if (!adsafe_may) { - if (nexttoken.value !== 'ADSAFE' || - peek(0).id !== '.' || - (peek(1).value !== 'id' && - peek(1).value !== 'go')) { - error('ADsafe violation: Missing ADSAFE.id or ADSAFE.go.', - nexttoken); - } - } - if (nexttoken.value === 'ADSAFE' && - peek(0).id === '.' && - peek(1).value === 'id') { - if (adsafe_may) { - error('ADsafe violation.', nexttoken); - } - advance('ADSAFE'); - advance('.'); - advance('id'); - advance('('); - if (nexttoken.value !== adsafe_id) { - error('ADsafe violation: id does not match.', nexttoken); - } - advance('(string)'); - advance(')'); - advance(';'); - adsafe_may = true; - } - break; - case 'lib': - if (nexttoken.value === 'ADSAFE') { - advance('ADSAFE'); - advance('.'); - advance('lib'); - advance('('); - advance('(string)'); - comma(); - f = parse(0); - if (f.id !== 'function') { - error('The second argument to lib must be a function.', f); - } - p = f.funct['(params)']; - p = p && p.join(', '); - if (p && p !== 'lib') { - error("Expected '{a}' and instead saw '{b}'.", - f, '(lib)', '(' + p + ')'); - } - advance(')'); - advance(';'); - return a; - } else { - error("ADsafe lib violation."); - } - } - } - while (!nexttoken.reach && nexttoken.id !== '(end)') { - if (nexttoken.id === ';') { - warning("Unnecessary semicolon."); - advance(';'); - } else { - a.push(statement()); - } - } - return a; - } - - - function block(f) { - var a, b = inblock, old_indent = indent, s = scope, t; - inblock = f; - scope = Object.create(scope); - nonadjacent(token, nexttoken); - t = nexttoken; - if (nexttoken.id === '{') { - advance('{'); - if (nexttoken.id !== '}' || token.line !== nexttoken.line) { - indent += option.indent; - while (!f && nexttoken.from > indent) { - indent += option.indent; - } - if (!f) { - use_strict(); - } - a = statements(); - indent -= option.indent; - indentation(); - } - advance('}', t); - indent = old_indent; - } else { - warning("Expected '{a}' and instead saw '{b}'.", - nexttoken, '{', nexttoken.value); - noreach = true; - a = [statement()]; - noreach = false; - } - funct['(verb)'] = null; - scope = s; - inblock = b; - return a; - } - - - function countMember(m) { - if (membersOnly && typeof membersOnly[m] !== 'boolean') { - warning("Unexpected /*member '{a}'.", token, m); - } - if (typeof member[m] === 'number') { - member[m] += 1; - } else { - member[m] = 1; - } - } - - - function note_implied(token) { - var name = token.value, line = token.line, a = implied[name]; - if (typeof a === 'function') { - a = false; - } - if (!a) { - a = [line]; - implied[name] = a; - } else if (a[a.length - 1] !== line) { - a.push(line); - } - } - -// CSS parsing. - - - function cssName() { - if (nexttoken.identifier) { - advance(); - return true; - } - } - - function cssNumber() { - if (nexttoken.id === '-') { - advance('-'); - adjacent(); - nolinebreak(); - } - if (nexttoken.type === '(number)') { - advance('(number)'); - return true; - } - } - - function cssString() { - if (nexttoken.type === '(string)') { - advance(); - return true; - } - } - - function cssColor() { - var i, number, value; - if (nexttoken.identifier) { - value = nexttoken.value; - if (value === 'rgb' || value === 'rgba') { - advance(); - advance('('); - for (i = 0; i < 3; i += 1) { - if (i) { - advance(','); - } - number = nexttoken.value; - if (nexttoken.type !== '(number)' || number < 0) { - warning("Expected a positive number and instead saw '{a}'", - nexttoken, number); - advance(); - } else { - advance(); - if (nexttoken.id === '%') { - advance('%'); - if (number > 100) { - warning("Expected a percentage and instead saw '{a}'", - token, number); - } - } else { - if (number > 255) { - warning("Expected a small number and instead saw '{a}'", - token, number); - } - } - } - } - if (value === 'rgba') { - advance(','); - number = +nexttoken.value; - if (nexttoken.type !== '(number)' || number < 0 || number > 1) { - warning("Expected a number between 0 and 1 and instead saw '{a}'", - nexttoken, number); - } - advance(); - if (nexttoken.id === '%') { - warning("Unexpected '%'."); - advance('%'); - } - } - advance(')'); - return true; - } else if (cssColorData[nexttoken.value] === true) { - advance(); - return true; - } - } else if (nexttoken.type === '(color)') { - advance(); - return true; - } - return false; - } - - function cssLength() { - if (nexttoken.id === '-') { - advance('-'); - adjacent(); - nolinebreak(); - } - if (nexttoken.type === '(number)') { - advance(); - if (nexttoken.type !== '(string)' && - cssLengthData[nexttoken.value] === true) { - adjacent(); - advance(); - } else if (+token.value !== 0) { - warning("Expected a linear unit and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - return true; - } - return false; - } - - function cssLineHeight() { - if (nexttoken.id === '-') { - advance('-'); - adjacent(); - } - if (nexttoken.type === '(number)') { - advance(); - if (nexttoken.type !== '(string)' && - cssLengthData[nexttoken.value] === true) { - adjacent(); - advance(); - } - return true; - } - return false; - } - - function cssWidth() { - if (nexttoken.identifier) { - switch (nexttoken.value) { - case 'thin': - case 'medium': - case 'thick': - advance(); - return true; - } - } else { - return cssLength(); - } - } - - function cssMargin() { - if (nexttoken.identifier) { - if (nexttoken.value === 'auto') { - advance(); - return true; - } - } else { - return cssLength(); - } - } - - function cssAttr() { - if (nexttoken.identifier && nexttoken.value === 'attr') { - advance(); - advance('('); - if (!nexttoken.identifier) { - warning("Expected a name and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - advance(); - advance(')'); - return true; - } - return false; - } - - function cssCommaList() { - while (nexttoken.id !== ';') { - if (!cssName() && !cssString()) { - warning("Expected a name and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - if (nexttoken.id !== ',') { - return true; - } - comma(); - } - } - - function cssCounter() { - if (nexttoken.identifier && nexttoken.value === 'counter') { - advance(); - advance('('); - if (!nexttoken.identifier) { - } - advance(); - if (nexttoken.id === ',') { - comma(); - if (nexttoken.type !== '(string)') { - warning("Expected a string and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - advance(); - } - advance(')'); - return true; - } - if (nexttoken.identifier && nexttoken.value === 'counters') { - advance(); - advance('('); - if (!nexttoken.identifier) { - warning("Expected a name and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - advance(); - if (nexttoken.id === ',') { - comma(); - if (nexttoken.type !== '(string)') { - warning("Expected a string and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - advance(); - } - if (nexttoken.id === ',') { - comma(); - if (nexttoken.type !== '(string)') { - warning("Expected a string and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - advance(); - } - advance(')'); - return true; - } - return false; - } - - - function cssShape() { - var i; - if (nexttoken.identifier && nexttoken.value === 'rect') { - advance(); - advance('('); - for (i = 0; i < 4; i += 1) { - if (!cssLength()) { - warning("Expected a number and instead saw '{a}'.", - nexttoken, nexttoken.value); - break; - } - } - advance(')'); - return true; - } - return false; - } - - function cssUrl() { - var c, url; - if (nexttoken.identifier && nexttoken.value === 'url') { - nexttoken = lex.range('(', ')'); - url = nexttoken.value; - c = url.charAt(0); - if (c === '"' || c === '\'') { - if (url.slice(-1) !== c) { - warning("Bad url string."); - } else { - url = url.slice(1, -1); - if (url.indexOf(c) >= 0) { - warning("Bad url string."); - } - } - } - if (!url) { - warning("Missing url."); - } - advance(); - if (option.safe && ux.test(url)) { - error("ADsafe URL violation."); - } - urls.push(url); - return true; - } - return false; - } - - cssAny = [cssUrl, function () { - for (;;) { - if (nexttoken.identifier) { - switch (nexttoken.value.toLowerCase()) { - case 'url': - cssUrl(); - break; - case 'expression': - warning("Unexpected expression '{a}'.", - nexttoken, nexttoken.value); - advance(); - break; - default: - advance(); - } - } else { - if (nexttoken.id === ';' || nexttoken.id === '!' || - nexttoken.id === '(end)' || nexttoken.id === '}') { - return true; - } - advance(); - } - } - }]; - - cssBorderStyle = [ - 'none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'ridge', - 'inset', 'outset' - ]; - - cssBreak = [ - 'auto', 'always', 'avoid', 'left', 'right' - ]; - - cssOverflow = [ - 'auto', 'hidden', 'scroll', 'visible' - ]; - - cssAttributeData = { - background: [ - true, 'background-attachment', 'background-color', - 'background-image', 'background-position', 'background-repeat' - ], - 'background-attachment': ['scroll', 'fixed'], - 'background-color': ['transparent', cssColor], - 'background-image': ['none', cssUrl], - 'background-position': [ - 2, [cssLength, 'top', 'bottom', 'left', 'right', 'center'] - ], - 'background-repeat': [ - 'repeat', 'repeat-x', 'repeat-y', 'no-repeat' - ], - 'border': [true, 'border-color', 'border-style', 'border-width'], - 'border-bottom': [ - true, 'border-bottom-color', 'border-bottom-style', - 'border-bottom-width' - ], - 'border-bottom-color': cssColor, - 'border-bottom-style': cssBorderStyle, - 'border-bottom-width': cssWidth, - 'border-collapse': ['collapse', 'separate'], - 'border-color': ['transparent', 4, cssColor], - 'border-left': [ - true, 'border-left-color', 'border-left-style', 'border-left-width' - ], - 'border-left-color': cssColor, - 'border-left-style': cssBorderStyle, - 'border-left-width': cssWidth, - 'border-right': [ - true, 'border-right-color', 'border-right-style', - 'border-right-width' - ], - 'border-right-color': cssColor, - 'border-right-style': cssBorderStyle, - 'border-right-width': cssWidth, - 'border-spacing': [2, cssLength], - 'border-style': [4, cssBorderStyle], - 'border-top': [ - true, 'border-top-color', 'border-top-style', 'border-top-width' - ], - 'border-top-color': cssColor, - 'border-top-style': cssBorderStyle, - 'border-top-width': cssWidth, - 'border-width': [4, cssWidth], - bottom: [cssLength, 'auto'], - 'caption-side' : ['bottom', 'left', 'right', 'top'], - clear: ['both', 'left', 'none', 'right'], - clip: [cssShape, 'auto'], - color: cssColor, - content: [ - 'open-quote', 'close-quote', 'no-open-quote', 'no-close-quote', - cssString, cssUrl, cssCounter, cssAttr - ], - 'counter-increment': [ - cssName, 'none' - ], - 'counter-reset': [ - cssName, 'none' - ], - cursor: [ - cssUrl, 'auto', 'crosshair', 'default', 'e-resize', 'help', 'move', - 'n-resize', 'ne-resize', 'nw-resize', 'pointer', 's-resize', - 'se-resize', 'sw-resize', 'w-resize', 'text', 'wait' - ], - direction: ['ltr', 'rtl'], - display: [ - 'block', 'compact', 'inline', 'inline-block', 'inline-table', - 'list-item', 'marker', 'none', 'run-in', 'table', 'table-caption', - 'table-cell', 'table-column', 'table-column-group', - 'table-footer-group', 'table-header-group', 'table-row', - 'table-row-group' - ], - 'empty-cells': ['show', 'hide'], - 'float': ['left', 'none', 'right'], - font: [ - 'caption', 'icon', 'menu', 'message-box', 'small-caption', - 'status-bar', true, 'font-size', 'font-style', 'font-weight', - 'font-family' - ], - 'font-family': cssCommaList, - 'font-size': [ - 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', - 'xx-large', 'larger', 'smaller', cssLength - ], - 'font-size-adjust': ['none', cssNumber], - 'font-stretch': [ - 'normal', 'wider', 'narrower', 'ultra-condensed', - 'extra-condensed', 'condensed', 'semi-condensed', - 'semi-expanded', 'expanded', 'extra-expanded' - ], - 'font-style': [ - 'normal', 'italic', 'oblique' - ], - 'font-variant': [ - 'normal', 'small-caps' - ], - 'font-weight': [ - 'normal', 'bold', 'bolder', 'lighter', cssNumber - ], - height: [cssLength, 'auto'], - left: [cssLength, 'auto'], - 'letter-spacing': ['normal', cssLength], - 'line-height': ['normal', cssLineHeight], - 'list-style': [ - true, 'list-style-image', 'list-style-position', 'list-style-type' - ], - 'list-style-image': ['none', cssUrl], - 'list-style-position': ['inside', 'outside'], - 'list-style-type': [ - 'circle', 'disc', 'square', 'decimal', 'decimal-leading-zero', - 'lower-roman', 'upper-roman', 'lower-greek', 'lower-alpha', - 'lower-latin', 'upper-alpha', 'upper-latin', 'hebrew', 'katakana', - 'hiragana-iroha', 'katakana-oroha', 'none' - ], - margin: [4, cssMargin], - 'margin-bottom': cssMargin, - 'margin-left': cssMargin, - 'margin-right': cssMargin, - 'margin-top': cssMargin, - 'marker-offset': [cssLength, 'auto'], - 'max-height': [cssLength, 'none'], - 'max-width': [cssLength, 'none'], - 'min-height': cssLength, - 'min-width': cssLength, - opacity: cssNumber, - outline: [true, 'outline-color', 'outline-style', 'outline-width'], - 'outline-color': ['invert', cssColor], - 'outline-style': [ - 'dashed', 'dotted', 'double', 'groove', 'inset', 'none', - 'outset', 'ridge', 'solid' - ], - 'outline-width': cssWidth, - overflow: cssOverflow, - 'overflow-x': cssOverflow, - 'overflow-y': cssOverflow, - padding: [4, cssLength], - 'padding-bottom': cssLength, - 'padding-left': cssLength, - 'padding-right': cssLength, - 'padding-top': cssLength, - 'page-break-after': cssBreak, - 'page-break-before': cssBreak, - position: ['absolute', 'fixed', 'relative', 'static'], - quotes: [8, cssString], - right: [cssLength, 'auto'], - 'table-layout': ['auto', 'fixed'], - 'text-align': ['center', 'justify', 'left', 'right'], - 'text-decoration': [ - 'none', 'underline', 'overline', 'line-through', 'blink' - ], - 'text-indent': cssLength, - 'text-shadow': ['none', 4, [cssColor, cssLength]], - 'text-transform': ['capitalize', 'uppercase', 'lowercase', 'none'], - top: [cssLength, 'auto'], - 'unicode-bidi': ['normal', 'embed', 'bidi-override'], - 'vertical-align': [ - 'baseline', 'bottom', 'sub', 'super', 'top', 'text-top', 'middle', - 'text-bottom', cssLength - ], - visibility: ['visible', 'hidden', 'collapse'], - 'white-space': [ - 'normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'inherit' - ], - width: [cssLength, 'auto'], - 'word-spacing': ['normal', cssLength], - 'word-wrap': ['break-word', 'normal'], - 'z-index': ['auto', cssNumber] - }; - - function styleAttribute() { - var v; - while (nexttoken.id === '*' || nexttoken.id === '#' || - nexttoken.value === '_') { - if (!option.css) { - warning("Unexpected '{a}'.", nexttoken, nexttoken.value); - } - advance(); - } - if (nexttoken.id === '-') { - if (!option.css) { - warning("Unexpected '{a}'.", nexttoken, nexttoken.value); - } - advance('-'); - if (!nexttoken.identifier) { - warning( -"Expected a non-standard style attribute and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - advance(); - return cssAny; - } else { - if (!nexttoken.identifier) { - warning("Excepted a style attribute, and instead saw '{a}'.", - nexttoken, nexttoken.value); - } else { - if (is_own(cssAttributeData, nexttoken.value)) { - v = cssAttributeData[nexttoken.value]; - } else { - v = cssAny; - if (!option.css) { - warning("Unrecognized style attribute '{a}'.", - nexttoken, nexttoken.value); - } - } - } - advance(); - return v; - } - } - - function styleValue(v) { - var i = 0, - n, - once, - match, - round, - start = 0, - vi; - switch (typeof v) { - case 'function': - return v(); - case 'string': - if (nexttoken.identifier && nexttoken.value === v) { - advance(); - return true; - } - return false; - } - for (;;) { - if (i >= v.length) { - return false; - } - vi = v[i]; - i += 1; - if (vi === true) { - break; - } else if (typeof vi === 'number') { - n = vi; - vi = v[i]; - i += 1; - } else { - n = 1; - } - match = false; - while (n > 0) { - if (styleValue(vi)) { - match = true; - n -= 1; - } else { - break; - } - } - if (match) { - return true; - } - } - start = i; - once = []; - for (;;) { - round = false; - for (i = start; i < v.length; i += 1) { - if (!once[i]) { - if (styleValue(cssAttributeData[v[i]])) { - match = true; - round = true; - once[i] = true; - break; - } - } - } - if (!round) { - return match; - } - } - } - - function styleChild() { - if (nexttoken.id === '(number)') { - advance(); - if (nexttoken.value === 'n' && nexttoken.identifier) { - adjacent(); - advance(); - if (nexttoken.id === '+') { - adjacent(); - advance('+'); - adjacent(); - advance('(number)'); - } - } - return; - } else { - switch (nexttoken.value) { - case 'odd': - case 'even': - if (nexttoken.identifier) { - advance(); - return; - } - } - } - warning("Unexpected token '{a}'.", nexttoken, nexttoken.value); - } - - function substyle() { - var v; - for (;;) { - if (nexttoken.id === '}' || nexttoken.id === '(end)' || - xquote && nexttoken.id === xquote) { - return; - } - while (nexttoken.id === ';') { - warning("Misplaced ';'."); - advance(';'); - } - v = styleAttribute(); - advance(':'); - if (nexttoken.identifier && nexttoken.value === 'inherit') { - advance(); - } else { - if (!styleValue(v)) { - warning("Unexpected token '{a}'.", nexttoken, - nexttoken.value); - advance(); - } - } - if (nexttoken.id === '!') { - advance('!'); - adjacent(); - if (nexttoken.identifier && nexttoken.value === 'important') { - advance(); - } else { - warning("Expected '{a}' and instead saw '{b}'.", - nexttoken, 'important', nexttoken.value); - } - } - if (nexttoken.id === '}' || nexttoken.id === xquote) { - warning("Missing '{a}'.", nexttoken, ';'); - } else { - advance(';'); - } - } - } - - function styleSelector() { - if (nexttoken.identifier) { - if (!is_own(htmltag, nexttoken.value)) { - warning("Expected a tagName, and instead saw {a}.", - nexttoken, nexttoken.value); - } - advance(); - } else { - switch (nexttoken.id) { - case '>': - case '+': - advance(); - styleSelector(); - break; - case ':': - advance(':'); - switch (nexttoken.value) { - case 'active': - case 'after': - case 'before': - case 'checked': - case 'disabled': - case 'empty': - case 'enabled': - case 'first-child': - case 'first-letter': - case 'first-line': - case 'first-of-type': - case 'focus': - case 'hover': - case 'last-of-type': - case 'link': - case 'only-of-type': - case 'root': - case 'target': - case 'visited': - advance(); - break; - case 'lang': - advance(); - advance('('); - if (!nexttoken.identifier) { - warning("Expected a lang code, and instead saw :{a}.", - nexttoken, nexttoken.value); - } - advance(')'); - break; - case 'nth-child': - case 'nth-last-child': - case 'nth-last-of-type': - case 'nth-of-type': - advance(); - advance('('); - styleChild(); - advance(')'); - break; - case 'not': - advance(); - advance('('); - if (nexttoken.id === ':' && peek(0).value === 'not') { - warning("Nested not."); - } - styleSelector(); - advance(')'); - break; - default: - warning("Expected a pseudo, and instead saw :{a}.", - nexttoken, nexttoken.value); - } - break; - case '#': - advance('#'); - if (!nexttoken.identifier) { - warning("Expected an id, and instead saw #{a}.", - nexttoken, nexttoken.value); - } - advance(); - break; - case '*': - advance('*'); - break; - case '.': - advance('.'); - if (!nexttoken.identifier) { - warning("Expected a class, and instead saw #.{a}.", - nexttoken, nexttoken.value); - } - advance(); - break; - case '[': - advance('['); - if (!nexttoken.identifier) { - warning("Expected an attribute, and instead saw [{a}].", - nexttoken, nexttoken.value); - } - advance(); - if (nexttoken.id === '=' || nexttoken.value === '~=' || - nexttoken.value === '$=' || - nexttoken.value === '|=' || - nexttoken.id === '*=' || - nexttoken.id === '^=') { - advance(); - if (nexttoken.type !== '(string)') { - warning("Expected a string, and instead saw {a}.", - nexttoken, nexttoken.value); - } - advance(); - } - advance(']'); - break; - default: - error("Expected a CSS selector, and instead saw {a}.", - nexttoken, nexttoken.value); - } - } - } - - function stylePattern() { - var name; - if (nexttoken.id === '{') { - warning("Expected a style pattern, and instead saw '{a}'.", nexttoken, - nexttoken.id); - } else if (nexttoken.id === '@') { - advance('@'); - name = nexttoken.value; - if (nexttoken.identifier && atrule[name] === true) { - advance(); - return name; - } - warning("Expected an at-rule, and instead saw @{a}.", nexttoken, name); - } - for (;;) { - styleSelector(); - if (nexttoken.id === ' fragments and .js files.", token); - } - if (option.fragment) { - if (n !== 'div') { - error("ADsafe violation: Wrap the widget in a div.", token); - } - } else { - error("Use the fragment option.", token); - } - } - option.browser = true; - assume(); - } - - function doAttribute(n, a, v) { - var u, x; - if (a === 'id') { - u = typeof v === 'string' ? v.toUpperCase() : ''; - if (ids[u] === true) { - warning("Duplicate id='{a}'.", nexttoken, v); - } - if (!/^[A-Za-z][A-Za-z0-9._:\-]*$/.test(v)) { - warning("Bad id: '{a}'.", nexttoken, v); - } else if (option.adsafe) { - if (adsafe_id) { - if (v.slice(0, adsafe_id.length) !== adsafe_id) { - warning("ADsafe violation: An id must have a '{a}' prefix", - nexttoken, adsafe_id); - } else if (!/^[A-Z]+_[A-Z]+$/.test(v)) { - warning("ADSAFE violation: bad id."); - } - } else { - adsafe_id = v; - if (!/^[A-Z]+_$/.test(v)) { - warning("ADSAFE violation: bad id."); - } - } - } - x = v.search(dx); - if (x >= 0) { - warning("Unexpected character '{a}' in {b}.", token, v.charAt(x), a); - } - ids[u] = true; - } else if (a === 'class' || a === 'type' || a === 'name') { - x = v.search(qx); - if (x >= 0) { - warning("Unexpected character '{a}' in {b}.", token, v.charAt(x), a); - } - ids[u] = true; - } else if (a === 'href' || a === 'background' || - a === 'content' || a === 'data' || - a.indexOf('src') >= 0 || a.indexOf('url') >= 0) { - if (option.safe && ux.test(v)) { - error("ADsafe URL violation."); - } - urls.push(v); - } else if (a === 'for') { - if (option.adsafe) { - if (adsafe_id) { - if (v.slice(0, adsafe_id.length) !== adsafe_id) { - warning("ADsafe violation: An id must have a '{a}' prefix", - nexttoken, adsafe_id); - } else if (!/^[A-Z]+_[A-Z]+$/.test(v)) { - warning("ADSAFE violation: bad id."); - } - } else { - warning("ADSAFE violation: bad id."); - } - } - } else if (a === 'name') { - if (option.adsafe && v.indexOf('_') >= 0) { - warning("ADsafe name violation."); - } - } - } - - function doTag(n, a) { - var i, t = htmltag[n], x; - src = false; - if (!t) { - error("Unrecognized tag '<{a}>'.", - nexttoken, - n === n.toLowerCase() ? n : - n + ' (capitalization error)'); - } - if (stack.length > 0) { - if (n === 'html') { - error("Too many tags.", token); - } - x = t.parent; - if (x) { - if (x.indexOf(' ' + stack[stack.length - 1].name + ' ') < 0) { - error("A '<{a}>' must be within '<{b}>'.", - token, n, x); - } - } else if (!option.adsafe && !option.fragment) { - i = stack.length; - do { - if (i <= 0) { - error("A '<{a}>' must be within '<{b}>'.", - token, n, 'body'); - } - i -= 1; - } while (stack[i].name !== 'body'); - } - } - switch (n) { - case 'div': - if (option.adsafe && stack.length === 1 && !adsafe_id) { - warning("ADSAFE violation: missing ID_."); - } - break; - case 'script': - xmode = 'script'; - advance('>'); - indent = nexttoken.from; - if (a.lang) { - warning("lang is deprecated.", token); - } - if (option.adsafe && stack.length !== 1) { - warning("ADsafe script placement violation.", token); - } - if (a.src) { - if (option.adsafe && (!adsafe_may || !approved[a.src])) { - warning("ADsafe unapproved script source.", token); - } - if (a.type) { - warning("type is unnecessary.", token); - } - } else { - if (adsafe_went) { - error("ADsafe script violation.", token); - } - statements('script'); - } - xmode = 'html'; - advance(''); - styles(); - xmode = 'html'; - advance(''; - } - - function html() { - var a, attributes, e, n, q, t, v, w = option.white, wmode; - xmode = 'html'; - xquote = ''; - stack = null; - for (;;) { - switch (nexttoken.value) { - case '<': - xmode = 'html'; - advance('<'); - attributes = {}; - t = nexttoken; - if (!t.identifier) { - warning("Bad identifier {a}.", t, t.value); - } - n = t.value; - if (option.cap) { - n = n.toLowerCase(); - } - t.name = n; - advance(); - if (!stack) { - stack = []; - doBegin(n); - } - v = htmltag[n]; - if (typeof v !== 'object') { - error("Unrecognized tag '<{a}>'.", t, n); - } - e = v.empty; - t.type = n; - for (;;) { - if (nexttoken.id === '/') { - advance('/'); - if (nexttoken.id !== '>') { - warning("Expected '{a}' and instead saw '{b}'.", - nexttoken, '>', nexttoken.value); - } - break; - } - if (nexttoken.id && nexttoken.id.substr(0, 1) === '>') { - break; - } - if (!nexttoken.identifier) { - if (nexttoken.id === '(end)' || nexttoken.id === '(error)') { - error("Missing '>'.", nexttoken); - } - warning("Bad identifier."); - } - option.white = true; - nonadjacent(token, nexttoken); - a = nexttoken.value; - option.white = w; - advance(); - if (!option.cap && a !== a.toLowerCase()) { - warning("Attribute '{a}' not all lower case.", nexttoken, a); - } - a = a.toLowerCase(); - xquote = ''; - if (is_own(attributes, a)) { - warning("Attribute '{a}' repeated.", nexttoken, a); - } - if (a.slice(0, 2) === 'on') { - if (!option.on) { - warning("Avoid HTML event handlers."); - } - xmode = 'scriptstring'; - advance('='); - q = nexttoken.id; - if (q !== '"' && q !== "'") { - error("Missing quote."); - } - xquote = q; - wmode = option.white; - option.white = false; - advance(q); - statements('on'); - option.white = wmode; - if (nexttoken.id !== q) { - error("Missing close quote on script attribute."); - } - xmode = 'html'; - xquote = ''; - advance(q); - v = false; - } else if (a === 'style') { - xmode = 'scriptstring'; - advance('='); - q = nexttoken.id; - if (q !== '"' && q !== "'") { - error("Missing quote."); - } - xmode = 'styleproperty'; - xquote = q; - advance(q); - substyle(); - xmode = 'html'; - xquote = ''; - advance(q); - v = false; - } else { - if (nexttoken.id === '=') { - advance('='); - v = nexttoken.value; - if (!nexttoken.identifier && - nexttoken.id !== '"' && - nexttoken.id !== '\'' && - nexttoken.type !== '(string)' && - nexttoken.type !== '(number)' && - nexttoken.type !== '(color)') { - warning("Expected an attribute value and instead saw '{a}'.", token, a); - } - advance(); - } else { - v = true; - } - } - attributes[a] = v; - doAttribute(n, a, v); - } - doTag(n, attributes); - if (!e) { - stack.push(t); - } - xmode = 'outer'; - advance('>'); - break; - case '') { - error("Missing '{a}'.", nexttoken, '>'); - } - xmode = 'outer'; - advance('>'); - break; - case '' || nexttoken.id === '(end)') { - break; - } - if (nexttoken.value.indexOf('--') >= 0) { - error("Unexpected --."); - } - if (nexttoken.value.indexOf('<') >= 0) { - error("Unexpected <."); - } - if (nexttoken.value.indexOf('>') >= 0) { - error("Unexpected >."); - } - } - xmode = 'outer'; - advance('>'); - break; - case '(end)': - return; - default: - if (nexttoken.id === '(end)') { - error("Missing '{a}'.", nexttoken, - ''); - } else { - advance(); - } - } - if (stack && stack.length === 0 && (option.adsafe || - !option.fragment || nexttoken.id === '(end)')) { - break; - } - } - if (nexttoken.id !== '(end)') { - error("Unexpected material after the end."); - } - } - - -// Build the syntax table by declaring the syntactic elements of the language. - - type('(number)', function () { - return this; - }); - type('(string)', function () { - return this; - }); - - syntax['(identifier)'] = { - type: '(identifier)', - lbp: 0, - identifier: true, - nud: function () { - var v = this.value, - s = scope[v], - f; - if (typeof s === 'function') { - -// Protection against accidental inheritance. - - s = undefined; - } else if (typeof s === 'boolean') { - f = funct; - funct = functions[0]; - addlabel(v, 'var'); - s = funct; - funct = f; - } - -// The name is in scope and defined in the current function. - - if (funct === s) { - -// Change 'unused' to 'var', and reject labels. - - switch (funct[v]) { - case 'unused': - funct[v] = 'var'; - break; - case 'unction': - funct[v] = 'function'; - this['function'] = true; - break; - case 'function': - this['function'] = true; - break; - case 'label': - warning("'{a}' is a statement label.", token, v); - break; - } - -// The name is not defined in the function. If we are in the global scope, -// then we have an undefined variable. - - } else if (funct['(global)']) { - if (option.undef && predefined[v] !== 'boolean') { - warning("'{a}' is not defined.", token, v); - } - note_implied(token); - -// If the name is already defined in the current -// function, but not as outer, then there is a scope error. - - } else { - switch (funct[v]) { - case 'closure': - case 'function': - case 'var': - case 'unused': - warning("'{a}' used out of scope.", token, v); - break; - case 'label': - warning("'{a}' is a statement label.", token, v); - break; - case 'outer': - case 'global': - break; - default: - -// If the name is defined in an outer function, make an outer entry, and if -// it was unused, make it var. - - if (s === true) { - funct[v] = true; - } else if (s === null) { - warning("'{a}' is not allowed.", token, v); - note_implied(token); - } else if (typeof s !== 'object') { - if (option.undef) { - warning("'{a}' is not defined.", token, v); - } else { - funct[v] = true; - } - note_implied(token); - } else { - switch (s[v]) { - case 'function': - case 'unction': - this['function'] = true; - s[v] = 'closure'; - funct[v] = s['(global)'] ? 'global' : 'outer'; - break; - case 'var': - case 'unused': - s[v] = 'closure'; - funct[v] = s['(global)'] ? 'global' : 'outer'; - break; - case 'closure': - case 'parameter': - funct[v] = s['(global)'] ? 'global' : 'outer'; - break; - case 'label': - warning("'{a}' is a statement label.", token, v); - } - } - } - } - return this; - }, - led: function () { - error("Expected an operator and instead saw '{a}'.", - nexttoken, nexttoken.value); - } - }; - - type('(regexp)', function () { - return this; - }); - - -// ECMAScript parser - - delim('(endline)'); - delim('(begin)'); - delim('(end)').reach = true; - delim(''); - delim('(error)').reach = true; - delim('}').reach = true; - delim(')'); - delim(']'); - delim('"').reach = true; - delim("'").reach = true; - delim(';'); - delim(':').reach = true; - delim(','); - delim('#'); - delim('@'); - reserve('else'); - reserve('case').reach = true; - reserve('catch'); - reserve('default').reach = true; - reserve('finally'); - reservevar('arguments', function (x) { - if (strict_mode && funct['(global)']) { - warning("Strict violation.", x); - } else if (option.safe) { - warning("ADsafe violation.", x); - } - }); - reservevar('eval', function (x) { - if (option.safe) { - warning("ADsafe violation.", x); - } - }); - reservevar('false'); - reservevar('Infinity'); - reservevar('NaN'); - reservevar('null'); - reservevar('this', function (x) { - if (strict_mode && ((funct['(statement)'] && - funct['(name)'].charAt(0) > 'Z') || funct['(global)'])) { - warning("Strict violation.", x); - } else if (option.safe) { - warning("ADsafe violation.", x); - } - }); - reservevar('true'); - reservevar('undefined'); - assignop('=', 'assign', 20); - assignop('+=', 'assignadd', 20); - assignop('-=', 'assignsub', 20); - assignop('*=', 'assignmult', 20); - assignop('/=', 'assigndiv', 20).nud = function () { - error("A regular expression literal can be confused with '/='."); - }; - assignop('%=', 'assignmod', 20); - bitwiseassignop('&=', 'assignbitand', 20); - bitwiseassignop('|=', 'assignbitor', 20); - bitwiseassignop('^=', 'assignbitxor', 20); - bitwiseassignop('<<=', 'assignshiftleft', 20); - bitwiseassignop('>>=', 'assignshiftright', 20); - bitwiseassignop('>>>=', 'assignshiftrightunsigned', 20); - infix('?', function (left, that) { - that.left = left; - that.right = parse(10); - advance(':'); - that['else'] = parse(10); - return that; - }, 30); - - infix('||', 'or', 40); - infix('&&', 'and', 50); - bitwise('|', 'bitor', 70); - bitwise('^', 'bitxor', 80); - bitwise('&', 'bitand', 90); - relation('==', function (left, right) { - if (option.eqeqeq) { - warning("Expected '{a}' and instead saw '{b}'.", - this, '===', '=='); - } else if (isPoorRelation(left)) { - warning("Use '{a}' to compare with '{b}'.", - this, '===', left.value); - } else if (isPoorRelation(right)) { - warning("Use '{a}' to compare with '{b}'.", - this, '===', right.value); - } - return this; - }); - relation('==='); - relation('!=', function (left, right) { - if (option.eqeqeq) { - warning("Expected '{a}' and instead saw '{b}'.", - this, '!==', '!='); - } else if (isPoorRelation(left)) { - warning("Use '{a}' to compare with '{b}'.", - this, '!==', left.value); - } else if (isPoorRelation(right)) { - warning("Use '{a}' to compare with '{b}'.", - this, '!==', right.value); - } - return this; - }); - relation('!=='); - relation('<'); - relation('>'); - relation('<='); - relation('>='); - bitwise('<<', 'shiftleft', 120); - bitwise('>>', 'shiftright', 120); - bitwise('>>>', 'shiftrightunsigned', 120); - infix('in', 'in', 120); - infix('instanceof', 'instanceof', 120); - infix('+', function (left, that) { - var right = parse(130); - if (left && right && left.id === '(string)' && right.id === '(string)') { - left.value += right.value; - left.character = right.character; - if (jx.test(left.value)) { - warning("JavaScript URL.", left); - } - return left; - } - that.left = left; - that.right = right; - return that; - }, 130); - prefix('+', 'num'); - prefix('+++', function () { - warning("Confusing pluses."); - this.right = parse(150); - this.arity = 'unary'; - return this; - }); - infix('+++', function (left) { - warning("Confusing pluses."); - this.left = left; - this.right = parse(130); - return this; - }, 130); - infix('-', 'sub', 130); - prefix('-', 'neg'); - prefix('---', function () { - warning("Confusing minuses."); - this.right = parse(150); - this.arity = 'unary'; - return this; - }); - infix('---', function (left) { - warning("Confusing minuses."); - this.left = left; - this.right = parse(130); - return this; - }, 130); - infix('*', 'mult', 140); - infix('/', 'div', 140); - infix('%', 'mod', 140); - - suffix('++', 'postinc'); - prefix('++', 'preinc'); - syntax['++'].exps = true; - - suffix('--', 'postdec'); - prefix('--', 'predec'); - syntax['--'].exps = true; - prefix('delete', function () { - var p = parse(0); - if (!p || (p.id !== '.' && p.id !== '[')) { - warning("Variables should not be deleted."); - } - this.first = p; - return this; - }).exps = true; - - - prefix('~', function () { - if (option.bitwise) { - warning("Unexpected '{a}'.", this, '~'); - } - parse(150); - return this; - }); - prefix('!', function () { - this.right = parse(150); - this.arity = 'unary'; - if (bang[this.right.id] === true) { - warning("Confusing use of '{a}'.", this, '!'); - } - return this; - }); - prefix('typeof', 'typeof'); - prefix('new', function () { - var c = parse(155), i; - if (c && c.id !== 'function') { - if (c.identifier) { - c['new'] = true; - switch (c.value) { - case 'Object': - warning("Use the object literal notation {}.", token); - break; - case 'Array': - if (nexttoken.id !== '(') { - warning("Use the array literal notation [].", token); - } else { - advance('('); - if (nexttoken.id === ')') { - warning("Use the array literal notation [].", token); - } else { - i = parse(0); - c.dimension = i; - if ((i.id === '(number)' && /[.+\-Ee]/.test(i.value)) || - (i.id === '-' && !i.right) || - i.id === '(string)' || i.id === '[' || - i.id === '{' || i.id === 'true' || - i.id === 'false' || - i.id === 'null' || i.id === 'undefined' || - i.id === 'Infinity') { - warning("Use the array literal notation [].", token); - } - if (nexttoken.id !== ')') { - error("Use the array literal notation [].", token); - } - } - advance(')'); - } - this.first = c; - return this; - case 'Number': - case 'String': - case 'Boolean': - case 'Math': - case 'JSON': - warning("Do not use {a} as a constructor.", token, c.value); - break; - case 'Function': - if (!option.evil) { - warning("The Function constructor is eval."); - } - break; - case 'Date': - case 'RegExp': - break; - default: - if (c.id !== 'function') { - i = c.value.substr(0, 1); - if (option.newcap && (i < 'A' || i > 'Z')) { - warning( - "A constructor name should start with an uppercase letter.", - token); - } - } - } - } else { - if (c.id !== '.' && c.id !== '[' && c.id !== '(') { - warning("Bad constructor.", token); - } - } - } else { - warning("Weird construction. Delete 'new'.", this); - } - adjacent(token, nexttoken); - if (nexttoken.id !== '(') { - warning("Missing '()' invoking a constructor."); - } - this.first = c; - return this; - }); - syntax['new'].exps = true; - - infix('.', function (left, that) { - adjacent(prevtoken, token); - nobreak(); - var m = identifier(); - if (typeof m === 'string') { - countMember(m); - } - that.left = left; - that.right = m; - if (left && left.value === 'arguments' && - (m === 'callee' || m === 'caller')) { - warning("Avoid arguments.{a}.", left, m); - } else if (!option.evil && left && left.value === 'document' && - (m === 'write' || m === 'writeln')) { - warning("document.write can be a form of eval.", left); - } else if (option.adsafe) { - if (left && left.value === 'ADSAFE') { - if (m === 'id' || m === 'lib') { - warning("ADsafe violation.", that); - } else if (m === 'go') { - if (xmode !== 'script') { - warning("ADsafe violation.", that); - } else if (adsafe_went || nexttoken.id !== '(' || - peek(0).id !== '(string)' || - peek(0).value !== adsafe_id || - peek(1).id !== ',') { - error("ADsafe violation: go.", that); - } - adsafe_went = true; - adsafe_may = false; - } - } - } - if (!option.evil && (m === 'eval' || m === 'execScript')) { - warning('eval is evil.'); - } else if (option.safe) { - for (;;) { - if (banned[m] === true) { - warning("ADsafe restricted word '{a}'.", token, m); - } - if (typeof predefined[left.value] !== 'boolean' || - nexttoken.id === '(') { - break; - } - if (standard_member[m] === true) { - if (nexttoken.id === '.') { - warning("ADsafe violation.", that); - } - break; - } - if (nexttoken.id !== '.') { - warning("ADsafe violation.", that); - break; - } - advance('.'); - token.left = that; - token.right = m; - that = token; - m = identifier(); - if (typeof m === 'string') { - countMember(m); - } - } - } - return that; - }, 160, true); - - infix('(', function (left, that) { - adjacent(prevtoken, token); - nospace(); - if (option.immed && !left.immed && left.id === 'function') { - warning("Wrap an immediate function invocation in parentheses " + - "to assist the reader in understanding that the expression " + - "is the result of a function, and not the function itself."); - } - var n = 0, - p = []; - if (left) { - if (left.type === '(identifier)') { - if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) { - if (left.value !== 'Number' && left.value !== 'String' && - left.value !== 'Boolean' && - left.value !== 'Date') { - if (left.value === 'Math') { - warning("Math is not a function.", left); - } else if (option.newcap) { - warning( -"Missing 'new' prefix when invoking a constructor.", left); - } - } - } - } else if (left.id === '.') { - if (option.safe && left.left.value === 'Math' && - left.right === 'random') { - warning("ADsafe violation.", left); - } - } - } - if (nexttoken.id !== ')') { - for (;;) { - p[p.length] = parse(10); - n += 1; - if (nexttoken.id !== ',') { - break; - } - comma(); - } - } - advance(')'); - nospace(prevtoken, token); - if (typeof left === 'object') { - if (left.value === 'parseInt' && n === 1) { - warning("Missing radix parameter.", left); - } - if (!option.evil) { - if (left.value === 'eval' || left.value === 'Function' || - left.value === 'execScript') { - warning("eval is evil.", left); - } else if (p[0] && p[0].id === '(string)' && - (left.value === 'setTimeout' || - left.value === 'setInterval')) { - warning( - "Implied eval is evil. Pass a function instead of a string.", left); - } - } - if (!left.identifier && left.id !== '.' && left.id !== '[' && - left.id !== '(' && left.id !== '&&' && left.id !== '||' && - left.id !== '?') { - warning("Bad invocation.", left); - } - } - that.left = left; - return that; - }, 155, true).exps = true; - - prefix('(', function () { - nospace(); - if (nexttoken.id === 'function') { - nexttoken.immed = true; - } - var v = parse(0); - advance(')', this); - nospace(prevtoken, token); - if (option.immed && v.id === 'function') { - if (nexttoken.id === '(') { - warning( -"Move the invocation into the parens that contain the function.", nexttoken); - } else { - warning( -"Do not wrap function literals in parens unless they are to be immediately invoked.", - this); - } - } - return v; - }); - - infix('[', function (left, that) { - nospace(); - var e = parse(0), s; - if (e && e.type === '(string)') { - if (option.safe && banned[e.value] === true) { - warning("ADsafe restricted word '{a}'.", that, e.value); - } else if (!option.evil && - (e.value === 'eval' || e.value === 'execScript')) { - warning("eval is evil.", that); - } else if (option.safe && - (e.value.charAt(0) === '_' || e.value.charAt(0) === '-')) { - warning("ADsafe restricted subscript '{a}'.", that, e.value); - } - countMember(e.value); - if (!option.sub && ix.test(e.value)) { - s = syntax[e.value]; - if (!s || !s.reserved) { - warning("['{a}'] is better written in dot notation.", - e, e.value); - } - } - } else if (!e || e.type !== '(number)' || e.value < 0) { - if (option.safe) { - warning('ADsafe subscripting.'); - } - } - advance(']', that); - nospace(prevtoken, token); - that.left = left; - that.right = e; - return that; - }, 160, true); - - prefix('[', function () { - var b = token.line !== nexttoken.line; - this.first = []; - if (b) { - indent += option.indent; - if (nexttoken.from === indent + option.indent) { - indent += option.indent; - } - } - while (nexttoken.id !== '(end)') { - while (nexttoken.id === ',') { - warning("Extra comma."); - advance(','); - } - if (nexttoken.id === ']') { - break; - } - if (b && token.line !== nexttoken.line) { - indentation(); - } - this.first.push(parse(10)); - if (nexttoken.id === ',') { - comma(); - if (nexttoken.id === ']' && !option.es5) { - warning("Extra comma.", token); - break; - } - } else { - break; - } - } - if (b) { - indent -= option.indent; - indentation(); - } - advance(']', this); - return this; - }, 160); - - - function property_name() { - var id = optionalidentifier(true); - if (!id) { - if (nexttoken.id === '(string)') { - id = nexttoken.value; - if (option.adsafe && - (id.charAt(0) === '_' || - id.charAt(id.length - 1) === '_')) { - warning("Unexpected {a} in '{b}'.", token, - "dangling '_'", id); - } - advance(); - } else if (nexttoken.id === '(number)') { - id = nexttoken.value.toString(); - advance(); - } - } - return id; - } - - - function functionparams() { - var i, t = nexttoken, p = []; - advance('('); - nospace(); - if (nexttoken.id === ')') { - advance(')'); - nospace(prevtoken, token); - return; - } - for (;;) { - i = identifier(); - p.push(i); - addlabel(i, 'parameter'); - if (nexttoken.id === ',') { - comma(); - } else { - advance(')', t); - nospace(prevtoken, token); - return p; - } - } - } - - - function doFunction(i, statement) { - var f, s = scope; - scope = Object.create(s); - funct = { - '(name)' : i || '"' + anonname + '"', - '(line)' : nexttoken.line, - '(context)' : funct, - '(breakage)' : 0, - '(loopage)' : 0, - '(scope)' : scope, - '(statement)': statement - }; - f = funct; - token.funct = funct; - functions.push(funct); - if (i) { - addlabel(i, 'function'); - } - funct['(params)'] = functionparams(); - - block(false); - scope = s; - funct['(last)'] = token.line; - funct = funct['(context)']; - return f; - } - - - (function (x) { - x.nud = function () { - var b, f, i, j, p, seen = {}, t; - b = token.line !== nexttoken.line; - if (b) { - indent += option.indent; - if (nexttoken.from === indent + option.indent) { - indent += option.indent; - } - } - for (;;) { - if (nexttoken.id === '}') { - break; - } - if (b) { - indentation(); - } - if (nexttoken.value === 'get' && peek().id !== ':') { - advance('get'); - if (!option.es5) { - error("get/set are ES5 features."); - } - i = property_name(); - if (!i) { - error("Missing property name."); - } - t = nexttoken; - adjacent(token, nexttoken); - f = doFunction(i); - if (funct['(loopage)']) { - warning("Don't make functions within a loop.", t); - } - p = f['(params)']; - if (p) { - warning("Unexpected parameter '{a}' in get {b} function.", t, p[0], i); - } - adjacent(token, nexttoken); - advance(','); - indentation(); - advance('set'); - j = property_name(); - if (i !== j) { - error("Expected {a} and instead saw {b}.", token, i, j); - } - t = nexttoken; - adjacent(token, nexttoken); - f = doFunction(i); - p = f['(params)']; - if (!p || p.length !== 1 || p[0] !== 'value') { - warning("Expected (value) in set {a} function.", t, i); - } - } else { - i = property_name(); - if (typeof i !== 'string') { - break; - } - advance(':'); - nonadjacent(token, nexttoken); - parse(10); - } - if (seen[i] === true) { - warning("Duplicate member '{a}'.", nexttoken, i); - } - seen[i] = true; - countMember(i); - if (nexttoken.id === ',') { - comma(); - if (nexttoken.id === ',') { - warning("Extra comma.", token); - } else if (nexttoken.id === '}' && !option.es5) { - warning("Extra comma.", token); - } - } else { - break; - } - } - if (b) { - indent -= option.indent; - indentation(); - } - advance('}', this); - return this; - }; - x.fud = function () { - error("Expected to see a statement and instead saw a block.", token); - }; - }(delim('{'))); - - - var varstatement = function varstatement(prefix) { - -// JavaScript does not have block scope. It only has function scope. So, -// declaring a variable in a block can have unexpected consequences. - - var id, name, value; - - if (funct['(onevar)'] && option.onevar) { - warning("Too many var statements."); - } else if (!funct['(global)']) { - funct['(onevar)'] = true; - } - this.first = []; - for (;;) { - nonadjacent(token, nexttoken); - id = identifier(); - if (funct['(global)'] && predefined[id] === false) { - warning("Redefinition of '{a}'.", token, id); - } - addlabel(id, 'unused'); - if (prefix) { - break; - } - name = token; - this.first.push(token); - if (nexttoken.id === '=') { - nonadjacent(token, nexttoken); - advance('='); - nonadjacent(token, nexttoken); - if (nexttoken.id === 'undefined') { - warning("It is not necessary to initialize '{a}' to 'undefined'.", token, id); - } - if (peek(0).id === '=' && nexttoken.identifier) { - error("Variable {a} was not declared correctly.", - nexttoken, nexttoken.value); - } - value = parse(0); - name.first = value; - } - if (nexttoken.id !== ',') { - break; - } - comma(); - } - return this; - }; - - - stmt('var', varstatement).exps = true; - - - blockstmt('function', function () { - if (inblock) { - warning( -"Function statements cannot be placed in blocks. Use a function expression or move the statement to the top of the outer function.", token); - - } - var i = identifier(); - adjacent(token, nexttoken); - addlabel(i, 'unction'); - doFunction(i, true); - if (nexttoken.id === '(' && nexttoken.line === token.line) { - error( -"Function statements are not invocable. Wrap the whole function invocation in parens."); - } - return this; - }); - - prefix('function', function () { - var i = optionalidentifier(); - if (i) { - adjacent(token, nexttoken); - } else { - nonadjacent(token, nexttoken); - } - doFunction(i); - if (funct['(loopage)']) { - warning("Don't make functions within a loop."); - } - return this; - }); - - blockstmt('if', function () { - var t = nexttoken; - advance('('); - nonadjacent(this, t); - nospace(); - parse(20); - if (nexttoken.id === '=') { - warning("Expected a conditional expression and instead saw an assignment."); - advance('='); - parse(20); - } - advance(')', t); - nospace(prevtoken, token); - block(true); - if (nexttoken.id === 'else') { - nonadjacent(token, nexttoken); - advance('else'); - if (nexttoken.id === 'if' || nexttoken.id === 'switch') { - statement(true); - } else { - block(true); - } - } - return this; - }); - - blockstmt('try', function () { - var b, e, s; - if (option.adsafe) { - warning("ADsafe try violation.", this); - } - block(false); - if (nexttoken.id === 'catch') { - advance('catch'); - nonadjacent(token, nexttoken); - advance('('); - s = scope; - scope = Object.create(s); - e = nexttoken.value; - if (nexttoken.type !== '(identifier)') { - warning("Expected an identifier and instead saw '{a}'.", - nexttoken, e); - } else { - addlabel(e, 'exception'); - } - advance(); - advance(')'); - block(false); - b = true; - scope = s; - } - if (nexttoken.id === 'finally') { - advance('finally'); - block(false); - return; - } else if (!b) { - error("Expected '{a}' and instead saw '{b}'.", - nexttoken, 'catch', nexttoken.value); - } - return this; - }); - - blockstmt('while', function () { - var t = nexttoken; - funct['(breakage)'] += 1; - funct['(loopage)'] += 1; - advance('('); - nonadjacent(this, t); - nospace(); - parse(20); - if (nexttoken.id === '=') { - warning("Expected a conditional expression and instead saw an assignment."); - advance('='); - parse(20); - } - advance(')', t); - nospace(prevtoken, token); - block(true); - funct['(breakage)'] -= 1; - funct['(loopage)'] -= 1; - return this; - }).labelled = true; - - reserve('with'); - - blockstmt('switch', function () { - var t = nexttoken, - g = false; - funct['(breakage)'] += 1; - advance('('); - nonadjacent(this, t); - nospace(); - this.condition = parse(20); - advance(')', t); - nospace(prevtoken, token); - nonadjacent(token, nexttoken); - t = nexttoken; - advance('{'); - nonadjacent(token, nexttoken); - indent += option.indent; - this.cases = []; - for (;;) { - switch (nexttoken.id) { - case 'case': - switch (funct['(verb)']) { - case 'break': - case 'case': - case 'continue': - case 'return': - case 'switch': - case 'throw': - break; - default: - warning( - "Expected a 'break' statement before 'case'.", - token); - } - indentation(-option.indent); - advance('case'); - this.cases.push(parse(20)); - g = true; - advance(':'); - funct['(verb)'] = 'case'; - break; - case 'default': - switch (funct['(verb)']) { - case 'break': - case 'continue': - case 'return': - case 'throw': - break; - default: - warning( - "Expected a 'break' statement before 'default'.", - token); - } - indentation(-option.indent); - advance('default'); - g = true; - advance(':'); - break; - case '}': - indent -= option.indent; - indentation(); - advance('}', t); - if (this.cases.length === 1 || this.condition.id === 'true' || - this.condition.id === 'false') { - warning("This 'switch' should be an 'if'.", this); - } - funct['(breakage)'] -= 1; - funct['(verb)'] = undefined; - return; - case '(end)': - error("Missing '{a}'.", nexttoken, '}'); - return; - default: - if (g) { - switch (token.id) { - case ',': - error("Each value should have its own case label."); - return; - case ':': - statements(); - break; - default: - error("Missing ':' on a case clause.", token); - } - } else { - error("Expected '{a}' and instead saw '{b}'.", - nexttoken, 'case', nexttoken.value); - } - } - } - }).labelled = true; - - stmt('debugger', function () { - if (!option.debug) { - warning("All 'debugger' statements should be removed."); - } - return this; - }).exps = true; - - (function () { - var x = stmt('do', function () { - funct['(breakage)'] += 1; - funct['(loopage)'] += 1; - this.first = block(true); - advance('while'); - var t = nexttoken; - nonadjacent(token, t); - advance('('); - nospace(); - parse(20); - if (nexttoken.id === '=') { - warning("Expected a conditional expression and instead saw an assignment."); - advance('='); - parse(20); - } - advance(')', t); - nospace(prevtoken, token); - funct['(breakage)'] -= 1; - funct['(loopage)'] -= 1; - return this; - }); - x.labelled = true; - x.exps = true; - }()); - - blockstmt('for', function () { - var f = option.forin, s, t = nexttoken; - funct['(breakage)'] += 1; - funct['(loopage)'] += 1; - advance('('); - nonadjacent(this, t); - nospace(); - if (peek(nexttoken.id === 'var' ? 1 : 0).id === 'in') { - if (nexttoken.id === 'var') { - advance('var'); - varstatement(true); - } else { - switch (funct[nexttoken.value]) { - case 'unused': - funct[nexttoken.value] = 'var'; - break; - case 'var': - break; - default: - warning("Bad for in variable '{a}'.", - nexttoken, nexttoken.value); - } - advance(); - } - advance('in'); - parse(20); - advance(')', t); - s = block(true); - if (!f && (s.length > 1 || typeof s[0] !== 'object' || - s[0].value !== 'if')) { - warning("The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.", this); - } - funct['(breakage)'] -= 1; - funct['(loopage)'] -= 1; - return this; - } else { - if (nexttoken.id !== ';') { - if (nexttoken.id === 'var') { - advance('var'); - varstatement(); - } else { - for (;;) { - parse(0, 'for'); - if (nexttoken.id !== ',') { - break; - } - comma(); - } - } - } - nolinebreak(token); - advance(';'); - if (nexttoken.id !== ';') { - parse(20); - if (nexttoken.id === '=') { - warning("Expected a conditional expression and instead saw an assignment."); - advance('='); - parse(20); - } - } - nolinebreak(token); - advance(';'); - if (nexttoken.id === ';') { - error("Expected '{a}' and instead saw '{b}'.", - nexttoken, ')', ';'); - } - if (nexttoken.id !== ')') { - for (;;) { - parse(0, 'for'); - if (nexttoken.id !== ',') { - break; - } - comma(); - } - } - advance(')', t); - nospace(prevtoken, token); - block(true); - funct['(breakage)'] -= 1; - funct['(loopage)'] -= 1; - return this; - } - }).labelled = true; - - - stmt('break', function () { - var v = nexttoken.value; - if (funct['(breakage)'] === 0) { - warning("Unexpected '{a}'.", nexttoken, this.value); - } - nolinebreak(this); - if (nexttoken.id !== ';') { - if (token.line === nexttoken.line) { - if (funct[v] !== 'label') { - warning("'{a}' is not a statement label.", nexttoken, v); - } else if (scope[v] !== funct) { - warning("'{a}' is out of scope.", nexttoken, v); - } - this.first = nexttoken; - advance(); - } - } - reachable('break'); - return this; - }).exps = true; - - - stmt('continue', function () { - var v = nexttoken.value; - if (funct['(breakage)'] === 0) { - warning("Unexpected '{a}'.", nexttoken, this.value); - } - nolinebreak(this); - if (nexttoken.id !== ';') { - if (token.line === nexttoken.line) { - if (funct[v] !== 'label') { - warning("'{a}' is not a statement label.", nexttoken, v); - } else if (scope[v] !== funct) { - warning("'{a}' is out of scope.", nexttoken, v); - } - this.first = nexttoken; - advance(); - } - } else if (!funct['(loopage)']) { - warning("Unexpected '{a}'.", nexttoken, this.value); - } - reachable('continue'); - return this; - }).exps = true; - - - stmt('return', function () { - nolinebreak(this); - if (nexttoken.id === '(regexp)') { - warning("Wrap the /regexp/ literal in parens to disambiguate the slash operator."); - } - if (nexttoken.id !== ';' && !nexttoken.reach) { - nonadjacent(token, nexttoken); - this.first = parse(20); - } - reachable('return'); - return this; - }).exps = true; - - - stmt('throw', function () { - nolinebreak(this); - nonadjacent(token, nexttoken); - this.first = parse(20); - reachable('throw'); - return this; - }).exps = true; - - reserve('void'); - -// Superfluous reserved words - - reserve('class'); - reserve('const'); - reserve('enum'); - reserve('export'); - reserve('extends'); - reserve('import'); - reserve('super'); - - reserve('let'); - reserve('yield'); - reserve('implements'); - reserve('interface'); - reserve('package'); - reserve('private'); - reserve('protected'); - reserve('public'); - reserve('static'); - - -// Parse JSON - - function jsonValue() { - - function jsonObject() { - var o = {}, t = nexttoken; - advance('{'); - if (nexttoken.id !== '}') { - for (;;) { - if (nexttoken.id === '(end)') { - error("Missing '}' to match '{' from line {a}.", - nexttoken, t.line); - } else if (nexttoken.id === '}') { - warning("Unexpected comma.", token); - break; - } else if (nexttoken.id === ',') { - error("Unexpected comma.", nexttoken); - } else if (nexttoken.id !== '(string)') { - warning("Expected a string and instead saw {a}.", - nexttoken, nexttoken.value); - } - if (o[nexttoken.value] === true) { - warning("Duplicate key '{a}'.", - nexttoken, nexttoken.value); - } else if (nexttoken.value === '__proto__') { - warning("Stupid key '{a}'.", - nexttoken, nexttoken.value); - } else { - o[nexttoken.value] = true; - } - advance(); - advance(':'); - jsonValue(); - if (nexttoken.id !== ',') { - break; - } - advance(','); - } - } - advance('}'); - } - - function jsonArray() { - var t = nexttoken; - advance('['); - if (nexttoken.id !== ']') { - for (;;) { - if (nexttoken.id === '(end)') { - error("Missing ']' to match '[' from line {a}.", - nexttoken, t.line); - } else if (nexttoken.id === ']') { - warning("Unexpected comma.", token); - break; - } else if (nexttoken.id === ',') { - error("Unexpected comma.", nexttoken); - } - jsonValue(); - if (nexttoken.id !== ',') { - break; - } - advance(','); - } - } - advance(']'); - } - - switch (nexttoken.id) { - case '{': - jsonObject(); - break; - case '[': - jsonArray(); - break; - case 'true': - case 'false': - case 'null': - case '(number)': - case '(string)': - advance(); - break; - case '-': - advance('-'); - if (token.character !== nexttoken.from) { - warning("Unexpected space after '-'.", token); - } - adjacent(token, nexttoken); - advance('(number)'); - break; - default: - error("Expected a JSON value.", nexttoken); - } - } - - -// The actual JSLINT function itself. - - var itself = function (s, o) { - var a, i; - JSLINT.errors = []; - predefined = Object.create(standard); - if (o) { - a = o.predef; - if (a instanceof Array) { - for (i = 0; i < a.length; i += 1) { - predefined[a[i]] = true; - } - } - if (o.adsafe) { - o.safe = true; - } - if (o.safe) { - o.browser = - o.css = - o.debug = - o.devel = - o.evil = - o.forin = - o.on = - o.rhino = - o.nodejs = - o.windows = - o.sub = - o.widget = false; - - o.eqeqeq = - o.nomen = - o.safe = - o.strict = - o.undef = true; - - predefined.Date = - predefined['eval'] = - predefined.Function = - predefined.Object = null; - - predefined.ADSAFE = - predefined.lib = false; - } - option = o; - } else { - option = {}; - } - option.indent = option.indent || 4; - option.maxerr = option.maxerr || 50; - adsafe_id = ''; - adsafe_may = false; - adsafe_went = false; - approved = {}; - if (option.approved) { - for (i = 0; i < option.approved.length; i += 1) { - approved[option.approved[i]] = option.approved[i]; - } - } else { - approved.test = 'test'; - } - tab = ''; - for (i = 0; i < option.indent; i += 1) { - tab += ' '; - } - indent = 1; - global = Object.create(predefined); - scope = global; - funct = { - '(global)': true, - '(name)': '(global)', - '(scope)': scope, - '(breakage)': 0, - '(loopage)': 0 - }; - functions = [funct]; - ids = {}; - urls = []; - src = false; - xmode = false; - stack = null; - member = {}; - membersOnly = null; - implied = {}; - inblock = false; - lookahead = []; - jsonmode = false; - warnings = 0; - lex.init(s); - prereg = true; - strict_mode = false; - - prevtoken = token = nexttoken = syntax['(begin)']; - assume(); - - try { - advance(); - if (nexttoken.value.charAt(0) === '<') { - html(); - if (option.adsafe && !adsafe_went) { - warning("ADsafe violation: Missing ADSAFE.go.", this); - } - } else { - switch (nexttoken.id) { - case '{': - case '[': - option.laxbreak = true; - jsonmode = true; - jsonValue(); - break; - case '@': - case '*': - case '#': - case '.': - case ':': - xmode = 'style'; - advance(); - if (token.id !== '@' || !nexttoken.identifier || - nexttoken.value !== 'charset' || token.line !== 1 || - token.from !== 1) { - error('A css file should begin with @charset "UTF-8";'); - } - advance(); - if (nexttoken.type !== '(string)' && - nexttoken.value !== 'UTF-8') { - error('A css file should begin with @charset "UTF-8";'); - } - advance(); - advance(';'); - styles(); - break; - - default: - if (option.adsafe && option.fragment) { - error("Expected '{a}' and instead saw '{b}'.", - nexttoken, '
', nexttoken.value); - } - statements('lib'); - } - } - advance('(end)'); - } catch (e) { - if (e) { - JSLINT.errors.push({ - reason : e.message, - line : e.line || nexttoken.line, - character : e.character || nexttoken.from - }, null); - } - } - return JSLINT.errors.length === 0; - }; - - function is_array(o) { - return Object.prototype.toString.apply(o) === '[object Array]'; - } - - function to_array(o) { - var a = [], k; - for (k in o) { - if (is_own(o, k)) { - a.push(k); - } - } - return a; - } - - -// Data summary. - - itself.data = function () { - - var data = {functions: []}, fu, globals, implieds = [], f, i, j, - members = [], n, unused = [], v; - if (itself.errors.length) { - data.errors = itself.errors; - } - - if (jsonmode) { - data.json = true; - } - - for (n in implied) { - if (is_own(implied, n)) { - implieds.push({ - name: n, - line: implied[n] - }); - } - } - if (implieds.length > 0) { - data.implieds = implieds; - } - - if (urls.length > 0) { - data.urls = urls; - } - - globals = to_array(scope); - if (globals.length > 0) { - data.globals = globals; - } - - for (i = 1; i < functions.length; i += 1) { - f = functions[i]; - fu = {}; - for (j = 0; j < functionicity.length; j += 1) { - fu[functionicity[j]] = []; - } - for (n in f) { - if (is_own(f, n) && n.charAt(0) !== '(') { - v = f[n]; - if (v === 'unction') { - v = 'unused'; - } - if (is_array(fu[v])) { - fu[v].push(n); - if (v === 'unused') { - unused.push({ - name: n, - line: f['(line)'], - 'function': f['(name)'] - }); - } - } - } - } - for (j = 0; j < functionicity.length; j += 1) { - if (fu[functionicity[j]].length === 0) { - delete fu[functionicity[j]]; - } - } - fu.name = f['(name)']; - fu.param = f['(params)']; - fu.line = f['(line)']; - fu.last = f['(last)']; - data.functions.push(fu); - } - - if (unused.length > 0) { - data.unused = unused; - } - - members = []; - for (n in member) { - if (typeof member[n] === 'number') { - data.member = member; - break; - } - } - - return data; - }; - - itself.report = function (option) { - var data = itself.data(); - - var a = [], c, e, err, f, i, k, l, m = '', n, o = [], s; - - function detail(h, array) { - var b, i, singularity; - if (array) { - o.push('
' + h + ' '); - array = array.sort(); - for (i = 0; i < array.length; i += 1) { - if (array[i] !== singularity) { - singularity = array[i]; - o.push((b ? ', ' : '') + singularity); - b = true; - } - } - o.push('
'); - } - } - - - if (data.errors || data.implieds || data.unused) { - err = true; - o.push('
Error:'); - if (data.errors) { - for (i = 0; i < data.errors.length; i += 1) { - c = data.errors[i]; - if (c) { - e = c.evidence || ''; - o.push('

Problem' + (isFinite(c.line) ? ' at line ' + - c.line + ' character ' + c.character : '') + - ': ' + entityify(c.reason) + - '

' + - (e && entityify(e.length > 80 ? e.slice(0, 77) + '...' : - e)) + '

'); - } - } - } - - if (data.implieds) { - s = []; - for (i = 0; i < data.implieds.length; i += 1) { - s[i] = '' + data.implieds[i].name + ' ' + - data.implieds[i].line + ''; - } - o.push('

Implied global: ' + s.join(', ') + '

'); - } - - if (data.unused) { - s = []; - for (i = 0; i < data.unused.length; i += 1) { - s[i] = '' + data.unused[i].name + ' ' + - data.unused[i].line + ' ' + - data.unused[i]['function'] + ''; - } - o.push('

Unused variable: ' + s.join(', ') + '

'); - } - if (data.json) { - o.push('

JSON: bad.

'); - } - o.push('
'); - } - - if (!option) { - - o.push('
'); - - if (data.urls) { - detail("URLs
", data.urls, '
'); - } - - if (xmode === 'style') { - o.push('

CSS.

'); - } else if (data.json && !err) { - o.push('

JSON: good.

'); - } else if (data.globals) { - o.push('
Global ' + - data.globals.sort().join(', ') + '
'); - } else { - o.push('
No new global variables introduced.
'); - } - - for (i = 0; i < data.functions.length; i += 1) { - f = data.functions[i]; - - o.push('
' + f.line + '-' + - f.last + ' ' + (f.name || '') + '(' + - (f.param ? f.param.join(', ') : '') + ')
'); - detail('Unused', f.unused); - detail('Closure', f.closure); - detail('Variable', f['var']); - detail('Exception', f.exception); - detail('Outer', f.outer); - detail('Global', f.global); - detail('Label', f.label); - } - - if (data.member) { - a = to_array(data.member); - if (a.length) { - a = a.sort(); - m = '
/*members ';
-                    l = 10;
-                    for (i = 0; i < a.length; i += 1) {
-                        k = a[i];
-                        n = k.name();
-                        if (l + n.length > 72) {
-                            o.push(m + '
'); - m = ' '; - l = 1; - } - l += n.length + 2; - if (data.member[k] === 1) { - n = '' + n + ''; - } - if (i < a.length - 1) { - n += ', '; - } - m += n; - } - o.push(m + '
*/
'); - } - o.push('
'); - } - } - return o.join(''); - }; - itself.jslint = itself; - - itself.edition = '2010-09-16'; - - return itself; - -}()); diff --git a/node_modules/lint/lib/lint/launcher.js b/node_modules/lint/lib/lint/launcher.js deleted file mode 100644 index d4825da..0000000 --- a/node_modules/lint/lib/lint/launcher.js +++ /dev/null @@ -1,531 +0,0 @@ -/*jslint nodejs:true, indent:4 */ -/** - * Imports - */ -//node -var util = require(process.binding('natives').util ? 'util' : 'sys'); -var path = require('path'); -var fs = require('fs'); - -//internal -var parser = require('./parser'); -var formatter = require('./formatter'); - -//Is a tty function -var isAtty; -try { - isAtty = require('tty').isatty; -} catch (e) { - isAtty = function () { - return false; - }; -} - - -var __readDirectory = function (path, callback, filter) { - if (filter) { - // process filter. are we too deep yet? - if (!filter.depthAt) { - filter.depthAt = 1;// initialize what depth we are at - } - if (filter.depth && filter.depth < filter.depthAt) { - callback(undefined, []);// we are too deep. return "nothing found" - return; - } - } - // queue up a "readdir" file system call (and return) - fs.readdir(path, function (err, files) { - var doHidden, count, countFolders, data; - - if (err) { - callback(err); - return; - } - doHidden = false; // true means: process hidden files and folders - if (filter && filter.hidden) { - doHidden = true; // filter requests to process hidden files and folders - } - count = 0; // count the number of "stat" calls queued up - countFolders = 0; // count the number of "folders" calls queued up - data = []; // the data to return - - // iterate over each file in the dir - files.forEach(function (name) { - var obj, processFile; - - // ignore files that start with a "." UNLESS requested to process hidden files and folders - if (doHidden || name.indexOf(".") !== 0) { - // queue up a "stat" file system call for every file (and return) - count += 1; - fs.stat(path + "/" + name, function (err, stat) { - if (err) { - callback(err); - return; - } - processFile = true; - if (filter && filter.callback) { - processFile = filter.callback(name, stat, filter); - } - if (processFile) { - obj = {}; - obj.name = name; - obj.stat = stat; - data.push(obj); - if (stat.isDirectory()) { - - countFolders += 1; - // perform "readDirectory" on each child folder (which queues up a readdir and returns) - (function (obj2) { - // obj2 = the "obj" object - __readDirectory(path + "/" + name, function (err, data2) { - if (err) { - callback(err); - return; - } - // entire child folder info is in "data2" (1 fewer child folders to wait to be processed) - countFolders -= 1; - obj2.children = data2; - if (countFolders <= 0) { - // sub-folders found. This was the last sub-folder to processes. - callback(undefined, data); // callback w/ data - } else { - // more children folders to be processed. do nothing here. - } - }); - }(obj)); - } - } - // 1 more file has been processed (or skipped) - count -= 1; - if (count <= 0) { - // all files have been processed. - if (countFolders <= 0) { - // no sub-folders were found. DONE. no sub-folders found - callback(undefined, data); // callback w/ data - } else { - // children folders were found. do nothing here (we are waiting for the children to callback) - } - } - }); - } - }); - if (count <= 0) { // if no "stat" calls started, then this was an empty folder - callback(undefined, []); // callback w/ empty - } - }); -}; - - -/** - * Launcher constructor - * - * @constructor - * @param {Object} options - */ -function Launcher(options) { - this._parser = null; - this._formatter = null; - this._silent = false; - - this._stdout = process.stdout; - this._stderr = process.stderr; - this._colors = 'auto'; - - this.configure(options); -} - -/** - * Configure the launcher - * - * @param {Object} options - * @return this - */ -Launcher.prototype.configure = function (options) { - if (options) { - if (options.silent !== undefined) { - this._silent = options.silent; - } - - if (options.stdout !== undefined) { - this._stdout = options.stdout; - - //Force reconfiguration - options.formatter = options.formatter || {}; - options.formatter.colors = this._colors; - } - - if (options.parser !== undefined) { - this._getParser(options.parser); - } - - if (options.formatter !== undefined) { - if (options.formatter.colors !== undefined) { - this._colors = options.formatter.colors; - } - - options.formatter.colors = (this._colors === 'auto') ? this._guessColors() : this._colors; - this._getFormatter(options.formatter); - } - } - - return this; -}; - -/** - * - * @param {Array} files - * @param {Function} callback - * @return - */ -Launcher.prototype.validateFiles = function (files, callback) { - var report, onValidateFileCount, onValidateFile, thisLauncher; - - thisLauncher = this; - report = new formatter.Report(); - parser = this._getParser(); - - onValidateFileCount = files.length; - onValidateFile = function (error, fileName, reportFile) { - onValidateFileCount -= 1; - - if (reportFile) { - report.addFile(fileName, reportFile); - } - - if (onValidateFileCount <= 0) { - if (callback) { - callback(null, report); - } - } - }; - - files.forEach(function (fileName) { - thisLauncher._validateFile(fileName, function (error, reportFile) { - onValidateFile(error, fileName, reportFile); - }); - }); -}; - -/** - * Run the executer with specified args - * - * @param {Object} args - * @return {int} code - */ -Launcher.prototype.run = function (args) { - var thisLauncher, searchFilter, searchResult, onFileFoundCount, onFileFound; - - thisLauncher = this; - - searchResult = []; - searchFilter = function (fileName, fileStat) { - if (fileName.substring(fileName.length - 3) !== '.js') { - return false; - } - return true; - }; - - if (args.length === 0) { - args.push(process.cwd()); - } - - - onFileFoundCount = args.length; - onFileFound = function (error, filesFound) { - searchResult = searchResult.concat(filesFound); - onFileFoundCount -= 1; - if (onFileFoundCount <= 0) { - thisLauncher.validateFiles(searchResult, function (error, report) { - var formatted; - - try { - formatted = thisLauncher._formatReport(report); - thisLauncher.printMessage(formatted, function (error, result) { - process.exit(report.length > 0 ? 1 : 0); - }); - } catch (e) { - thisLauncher.printError(e, true); - } - }); - } - }; - - args.forEach(function (searchRoot) { - thisLauncher._findFiles(searchRoot, searchFilter, onFileFound); - }); - - return this; -}; - -Launcher.prototype._guessColors = function (args) { - return isAtty(this._stdout) && (!fs.fstatSync(process.stdout.fd).isFile()); -}; - -Launcher.prototype._findFiles = function (searchRoot, searchFilter, callback) { - var files, searchFind; - - searchFilter = searchFilter || function () { - return true; - }; - - - files = []; - searchRoot = searchRoot || process.cwd(); - searchFind = function (result, rootPath, filter) { - var files = [], i; - rootPath = rootPath || '/'; - if (! Array.isArray(result)) { - if (result.stat.isFile()) { - if (! filter(rootPath, result.stat)) { - return files; - } - files.push(rootPath); - - } else { - result.children.forEach(function (child) { - files = files.concat(searchFind(child, path.join(rootPath, child.name), filter)); - }); - } - } else { - result.forEach(function (file) { - files = files.concat(searchFind(file, path.join(rootPath, file.name), filter)); - }); - } - return files; - }; - - fs.stat(searchRoot, function (error, stat) { - if (error) { - if (callback) { - callback(error); - } - } else { - if (stat.isDirectory()) { - __readDirectory(searchRoot, function (error, result) { - if (error) { - if (callback) { - callback(error); - } - } else { - if (result) { - files = searchFind(result, searchRoot, searchFilter); - } - callback(undefined, files); - } - }); - - } else { - fs.realpath(searchRoot, function (error, resolvedPath) { - files.push(resolvedPath); - callback(undefined, files); - }); - } - } - }); - -}; - -Launcher.prototype._validateFile = function (filePath, callback) { - fs.readFile(filePath, function (error, data) { - var report; - - if (error) { - callback(error); - } else { - data = data.toString('utf-8'); - - // remove any shebangs - data = data.replace(/^\#\!.*/, ''); - - parser = this._getParser(); - parser.reset().update(data); - - report = parser.getReport(); - report.forEach(function (error) { - error.file = filePath; - }); - - - callback(undefined, report); - } - }.bind(this)); -}; - -Launcher.prototype._formatReport = function (report) { - formatter = this._getFormatter(); - return formatter.format(report); -}; - -Launcher.prototype._getParser = function (options) { - if (!this._parser) { - this._parser = new parser.Parser(options); - } else if (options) { - this._parser.configure(options); - } - return this._parser; -}; - -Launcher.prototype._getFormatter = function (options) { - if (!this._formatter) { - this._formatter = new formatter.Formatter(options); - } else if (options) { - this._formatter.configure(options); - } - return this._formatter; -}; - -/** - * Print message to stdout - * - * @param {string} message - * @param {Function} callback - * @return this - */ -Launcher.prototype.printMessage = function (message, callback) { - if (this._silent) { - callback(); - } else { - this._stdout.write('' + message, this._getFormatter().encoding, callback); - } - return this; -}; - -/** - * Print error message - * - * @param {string} error - * @param {int} exit - * @return this - */ -Launcher.prototype.printError = function (error, exit) { - util.puts(error); - if (exit === undefined || exit) { - process.exit(1); - } - return this; -}; - - -/** - * Exports - */ -exports.Launcher = Launcher; - - -/** - * Main - */ -if (__filename === process.argv[1]) { - var usage, args, arg, positionals, launcher, options, configFile; - - - - //called as main executable - - usage = "Usage: " + process.argv[0] + " file.js [dir1 file2 dir2 ...] [options]\n" + - "Options:\n\n" + - " --config=FILE the path to a JSON file with JSLINT options\n" + - " --formatter=FILE optional path to a /dir/dir/file.hs file to customize the output\n" + - " -h, --help display this help and exit\n" + - " -v, --version output version information and exit"; - - args = process.argv.splice(2); - positionals = []; - options = { - formatter: { - }, - parser: { - } - }; - configFile = process.env.NODELINT_CONFIG_FILE; - - launcher = new Launcher(); - while (args.length !== 0) { - arg = args.shift(); - switch (arg) { - case '-v': - case '--version': - var content, pkg; - content = fs.readFileSync(path.join(__filename, '..', '..', '..', 'package.json'), 'utf8'); - pkg = JSON.parse(content); - util.puts(pkg.version); - process.exit(0); - break; - case '-h': - case '--help': - util.puts(usage); - process.exit(0); - break; - case '--silent': - options.silent = true; - break; - case '--pretty': - options.formatter.pretty = true; - break; - case '--no-color': - case '--no-colors': - options.formatter.colors = false; - break; - default: - if (arg.indexOf('--formatter') >= 0) { - options.formatter.type = 'callback'; - options.formatter.callback = fs.readFileSync(arg.split('=')[1], 'utf8'); - } else if (arg.indexOf('--format') >= 0) { - options.formatter.type = arg.split('=')[1]; - } else if (arg.indexOf('--mode') >= 0) { - options.formatter.mode = arg.split('=')[1]; - } else if (arg.indexOf('--config') >= 0) { - var file, source; - - configFile = arg.split('=')[1]; - - } else { - positionals.push(arg); - } - } - } - - //Load default config file from environment - if (configFile) { - var source; - - //read config file - try { - source = fs.readFileSync(configFile, 'utf8'); - } catch (e) { - launcher.printError('Read error when accessing "' + configFile + '".'); - } - - //Remove comments - source = source.replace(/\/\*.+?\*\/|\/\/.*(?=[\n\r])/g, ''); - - //Parse config - try { - source = JSON.parse(source); - } catch (e) { - console.log(e.toString()); - launcher.printError('Parse Error in "' + configFile + '"'); - } - - - try { - launcher.configure(source); - } catch (e) { - console.log(e.toString()); - launcher.printError('Parse Error in "' + configFile + '"'); - } - } - - try { - launcher.configure(options); - } catch (e) { - launcher.printError('Configuration : ' + e.toString()); - } - - try { - launcher.run(positionals); - } catch (e) { - launcher.printError('Execution : ' + e.toString()); - } -} - diff --git a/node_modules/lint/lib/lint/parser.js b/node_modules/lint/lib/lint/parser.js deleted file mode 100644 index c4e00b6..0000000 --- a/node_modules/lint/lib/lint/parser.js +++ /dev/null @@ -1,238 +0,0 @@ -/*global JSLINT */ -/*jslint nodejs:true, indent:4 */ - -/** - * Imports - */ -var fs = require('fs'); -var path = require('path'); -var compile = process.binding('natives').vm ? require('vm').runInThisContext : process.compile; - - -/** - * Constants - */ -var JSLINT_PATH = path.join(path.dirname(fs.realpathSync(__filename)), 'jslint.js'); - -compile(fs.readFileSync(JSLINT_PATH, 'utf8'), JSLINT_PATH); - -/******************************************************************************* - * Parser class - * - * Usage: - * - *
- * var parser = new Parser({
- *     rhino : false,
- *     nodejs: true
- * })
- * parser.update('var local = 1;');
- * parser.update('\n');
- * parser.update('local = 2;');
- * parser.validate();
- *
- * console.log(parser.isValid()) //Display true if not valid javascript
- * for (var key in this.data()) {
- *     //...Put some code here
- * }
- * 
- ******************************************************************************/ -/** - * Parser constructor - * - * @constructor - * @param {Object} options - */ -function Parser(options) { - options = options || {}; - this._config = {}; - this._report = null; - this._isValid = null; - this._source = ''; - - this.configure(options); -} - -Parser.CONFIG = { - "adsafe": false, // if ADsafe should be enforced - "browser": false, // if the standard browser globals should be predefined - //"bitwise": true, // if bitwise operators should not be allowed - //"cap": false, // if upper case HTML should be allowed - //"css": false, // if CSS workarounds should be tolerated - "debug": false, // if debugger statements should be allowed - //"devel": false, // if logging should be allowed (console, alert, etc.) - "eqeqeq": true, // if === should be required - //"es5": true, // if ES5 syntax should be allowed - "evil": false, // if eval should be allowed - "forin": false, // if for in statements must filter - //"fragment": false, // if HTML fragments should be allowed - "immed": true, // if immediate invocations must be wrapped in parens - //"laxbreak": false, // if line breaks should not be checked - //"newcap": true, // if constructor names must be capitalized - "nomen": false, // if names should be checked - //"on": false, // if HTML event handlers should be allowed - "onevar": true, // if only one var statement per function should be allowed - "passfail": false, // if the scan should stop on first error - "plusplus": true, // if increment/decrement should not be allowed - "regexp": true, // if the . should not be allowed in regexp literals - //"rhino": false, // if the Rhino environment globals should be predefined - //"nodejs": false, // if the NodeJS environment globals should be predefined - "undef": true, // if variables should be declared before used - "safe": false, // if use of some browser features should be restricted - "windows": false, // if MS Windows-specific globals should be predefined - "strict": false // require the "use strict"; pragma - //"sub": false, // if all forms of subscript notation are tolerated - //"white": true, // if strict whitespace rules apply - //"widget": false, // if the Yahoo Widgets globals should be predefined - - // the names of predefined global variables: the following are defined by nodejs itself - //"predef": [], - - -}; - -/** - * Configure the parser - * - * @param {Object} options - * @return this - */ -Parser.prototype.configure = function (options) { - var property; - - for (property in options) { - if (options.hasOwnProperty(property)) { - this._config[property] = options[property]; - } - } - - //Parameters has changed to validation could be changed too - this._report = null; - this._isValid = null; - return this; -}; - -/** - * Reset all parameters to default - * - * @return this - */ -Parser.prototype.reset = function () { - this._source = ''; - this._report = null; - this._isValid = null; - return this; -}; - -/** - * Append source to currently parsed source - * - * @param {string} sourcePart - * @return this - */ -Parser.prototype.update = function (sourcePart) { - if (sourcePart) { - this._source += sourcePart; - this._report = null; - this._isValid = null; - } - return this; -}; - -/** - * Validate only if not previously tested or if force is true - * - * @param {boolean} force - * @return this - */ -Parser.prototype.validate = function (force) { - var result, config, property, errors; - - if (this._report === null || force) { - config = {}; - config.maxerr = config.maxerr || 10000; - - //Import configured preferences - for (property in Parser.CONFIG) { - if (Parser.CONFIG.hasOwnProperty(property)) { - config[property] = Parser.CONFIG[property]; - } - } - - //Import configured preferences - for (property in this._config) { - if (this._config.hasOwnProperty(property)) { - config[property] = this._config[property]; - } - } - - result = JSLINT(this._source, config); - - this._report = []; - errors = JSLINT.data().errors || []; - errors.forEach(function (error) { - if (error) { - this._report.push(error); - } - }.bind(this)); - this._isValid = (this._report.length === 0); - } - return this; -}; - -/** - * Return true if source is valid - * - * @return {boolean} - */ -Parser.prototype.isValid = function () { - this.validate(); - return this._isValid; -}; - -/** - * Return the validation report data - * - * @return {Object} - */ -Parser.prototype.getReport = function () { - this.validate(); - return this._report; -}; - - -/** - * Exports - */ -exports.Parser = Parser; -exports.isValid = function isValid(content, options) { - var parser = new Parser(options); - return parser.update(content).isValid(); -}; - -exports.isValidFile = function isValidFile(filePath, options, callback) { - fs.readFile(filePath, function (error, data) { - var parser, result; - - if (error) { - if (callback) { - callback(error); - } - } else { - parser = new Parser(options); - result = parser.update(data).isValid(); - if (callback) { - callback(undefined, result); - } - } - }); -}; - -exports.isValidFileSync = function isValidFileSync(filePath, options) { - var data, parser, result; - data = fs.readFileSync(filePath); - parser = new Parser(options); - result = parser.update(data).isValid(); - - return result; -}; diff --git a/node_modules/lint/lib/lint/vows.js b/node_modules/lint/lib/lint/vows.js deleted file mode 100644 index cb61585..0000000 --- a/node_modules/lint/lib/lint/vows.js +++ /dev/null @@ -1,81 +0,0 @@ -/*jslint nodejs: true, indent:4 */ -/** - * Imports - */ -try { - var vows = require('vows'); -} catch (e) { - console.info("vows cannot be found, extension is disabled"); - return; -} -var assert = require('assert'); -var fs = require('fs'); - -require('../assert/extension'); - -/******************************************************************************* - * LINT / Vows helpers - * - * Usage: - *
- * require('lint').createTest()
- *
- * 
- ******************************************************************************/ -/** - * Return a new Batch object for vows - * - * @param {Array} files - * @param {Object} options passed to the JSLINT parser - * @return {Object} - */ -function createBatch(files, options) { - options = options || {}; - files = Array.isArray(files) ? files : [files]; - var batch = {}, - fileCount = files.length, - filePath, - fileModule, - createSection; - - //Section generator - createSection = function (filePath) { - return function (topic) { - assert.validateLintFile(filePath); - }; - }; - - //Create for all files - while (fileCount > 0) { - fileCount -= 1; - filePath = files[fileCount]; - filePath = fs.realpathSync(filePath); - batch[filePath] = createSection(filePath); - } - - return { - 'JSLINT results' : batch - }; -} - -/** - * Create a default test Object. If files is specified then it creates a batch - * with files and options and add it to the test object - * - * @param {Array} files - * @param {Object} options - * @return - */ -function createTest(files, options) { - var test = vows.describe('JSLINT test'); - if (files) { - test.addBatch(createBatch(files, options)); - } - return test; -} - -/** - * Exports - */ -exports.createBatch = createBatch; -exports.createTest = createTest; \ No newline at end of file diff --git a/node_modules/lint/man1/node-lint.1 b/node_modules/lint/man1/node-lint.1 deleted file mode 100644 index 2207ed3..0000000 --- a/node_modules/lint/man1/node-lint.1 +++ /dev/null @@ -1,365 +0,0 @@ -.\" Generated with Ronnjs/v0.1 -.\" http://github.com/kapouer/ronnjs/ -. -.TH "NODE\-LINT" "1" "November 2010" "" "" -. -.SH "NAME" -\fBnode-lint\fR \-\- Run JSLint from the command\-line under node\.js -. -.SH "SYNOPSIS" -. -.nf -node\-lint [options] [ \.\.\.] -. -.fi -. -.SH "DESCRIPTION" -The node\-lint command\-line tool allows you to check for problems and ensure -. -.br -the code quality of your JavaScript files using JSLint\. -. -.P -It is completely extensible so you can use your own custom JSLint config or -. -.br -even use custom formatters that better integrate with your quality assurance -. -.br -framework\. -. -.SH "OPTIONS" - \fB\-\-formatter FILE\fR: -. -.br - Override the default formatter with your own custom module\. See -. -.br - the \fIexamples/\fR directory for custom formatters that come -. -.br - bundled with node\-lint\. -. -.P - \fB\-\-config FILE\fR: -. -.br - Override the default \fIconfig\.js\fR with your own config file\. -. -.P - \fB\-h\fR, \fB\-\-help\fR: -. -.br - Display the help and exit\. -. -.P - \fB\-v\fR, \fB\-\-version\fR: -. -.br - Output version information and exit\. -. -.P - \fB\fR: - You can run node\-lint on specific files or on all \fI*\.js\fR files inside -. -.br - a directory\. -. -.SH "CONFIG" -You can customize the JSLint options by modifying the default config\.js -. -.br -file or by providing your own config file with the \fI\-\-config\fR parameter: -. -.IP "" 4 -. -.nf -node\-lint \-\-config path/to/custom\.json file1\.js file2\.js \.\.\. -. -.fi -. -.IP "" 0 -. -.P -For example, if the default config\.json looks like: -. -.IP "" 4 -. -.nf -{ - "adsafe" : false, - "bitwise" : true, - "error_prefix" : "\\u001b[1m", - "error_suffix" : ":\\u001b[0m " -}; -. -.fi -. -.IP "" 0 -. -.P -And your custom\.json looks like: -. -.IP "" 4 -. -.nf -{ - "bitwise" : false, - "browser" : false -}; -. -.fi -. -.IP "" 0 -. -.P -Then the final options will be: -. -.IP "" 4 -. -.nf -{ - "adsafe" : false, - "bitwise" : false, - "browser" : false, - "error_prefix" : "\\u001b[1m", - "error_suffix" : ":\\u001b[0m " -}; -. -.fi -. -.IP "" 0 -. -.SH "JSLINT OPTIONS" -. -.IP "\(bu" 4 -adsafe: -. -.br -True if ADsafe rules should be enforced\. See http://www\.ADsafe\.org/\. -. -.IP "\(bu" 4 -bitwise: -. -.br -True if bitwise operators should not be allowed\. -. -.IP "\(bu" 4 -browser: -. -.br -True if the standard browser globals should be predefined\. -. -.IP "\(bu" 4 -cap: -. -.br -True if upper case HTML should be allowed\. -. -.IP "\(bu" 4 -css: -. -.br -True if CSS workarounds should be tolerated\. -. -.IP "\(bu" 4 -debug: -. -.br -True if debugger statements should be allowed\. -. -.br -Set this option to false before going into production\. -. -.IP "\(bu" 4 -devel: -. -.br -True if browser globals that are useful in development -. -.br -(console, alert, \.\.\.) should be predefined\. -. -.IP "\(bu" 4 -eqeqeq: -. -.br -True if === should be required\. -. -.IP "\(bu" 4 -es5: -. -.br -True if ES5 syntax should be allowed\. -. -.IP "\(bu" 4 -evil: -. -.br -True if eval should be allowed\. -. -.IP "\(bu" 4 -forin: -. -.br -True if unfiltered for in statements should be allowed\. -. -.IP "\(bu" 4 -fragment: -. -.br -True if HTML fragments should be allowed\. -. -.IP "\(bu" 4 -immed: -. -.br -True if immediate function invocations must be wrapped in parens -. -.IP "\(bu" 4 -indent: -. -.br -The number of spaces used for indentation (default is 4) -. -.IP "\(bu" 4 -laxbreak: -. -.br -True if statement breaks should not be checked\. -. -.IP "\(bu" 4 -maxerr: -. -.br -The maximum number of warnings reported (default is 50) -. -.IP "\(bu" 4 -maxlen: -. -.br -The maximum number of characters in a line -. -.IP "\(bu" 4 -nomen: -. -.br -True if names should be checked for initial or trailing underbars -. -.IP "\(bu" 4 -newcap: -. -.br -True if Initial Caps must be used with constructor functions\. -. -.IP "\(bu" 4 -on: -. -.br -True if HTML event handlers should be allowed\. -. -.IP "\(bu" 4 -onevar: -. -.br -True if only one var statement per function should be allowed\. -. -.IP "\(bu" 4 -passfail: -. -.br -True if the scan should stop on first error\. -. -.IP "\(bu" 4 -plusplus: -. -.br -True if ++ and \-\- should not be allowed\. -. -.IP "\(bu" 4 -predef: -. -.br -An array of strings (comma separated), the names of predefined global variables\. -. -.br -predef is used with the option object, but not with the /\fIjslint \fR/ comment\. -. -.br -Use the var statement to declare global variables in a script file\. -. -.IP "\(bu" 4 -regexp: -. -.br -True if \. and [^\.\.\.] should not be allowed in RegExp literals\. -. -.br -These forms should not be used when validating in secure applications\. -. -.IP "\(bu" 4 -rhino: -. -.br -True if the Rhino environment globals should be predefined\. -. -.IP "\(bu" 4 -safe: -. -.br -True if the safe subset rules are enforced\. These rules are used by ADsafe\. -. -.br -It enforces the safe subset rules but not the widget structure rules\. -. -.IP "\(bu" 4 -strict: -. -.br -True if the ES5 "use strict"; pragma is required\. Do not use this option carelessly\. -. -.IP "\(bu" 4 -sub: -. -.br -True if subscript notation may be used for expressions better expressed in dot notation\. -. -.IP "\(bu" 4 -undef: -. -.br -True if variables must be declared before used\. -. -.IP "\(bu" 4 -white: -. -.br -True if strict whitespace rules apply\. -. -.IP "\(bu" 4 -widget: -. -.br -True if the Yahoo Widgets globals should be predefined\. -. -.IP "\(bu" 4 -windows: -. -.br -True if the Windows globals should be predefined\. -. -.IP "" 0 -. -.SH "AUTHORS" -Originally written by Tav and other node\-lint contributors\. -Forked by as\-jpolo\. -Contributors list: \fIhttp://github\.com/tav/nodelint/contributors\fR\|\. -. -.SH "REPORTING BUGS" -Report node\-lint bugs to \fIhttp://github\.com/as\-jpolo/node\-lint/issues\fR\|\. -. -.SH "COPYRIGHT" -node\-lint is under MIT License\. -. -.SH "SEE ALSO" -node(1) \ No newline at end of file diff --git a/node_modules/lint/package.json b/node_modules/lint/package.json deleted file mode 100644 index 5daf8a7..0000000 --- a/node_modules/lint/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "lint", - "description": "This package provide lint validation library + node-lint command line tool allows you to check for problems using JSLint. You can specify your own --config file to use alternate JSLint options and your own --formatter file if you want to customize the generated output.", - "version": "1.1.2", - "homepage": "https://github.com/jpolo/node-lint", - "author": "tav (http://tav.espians.com)", - "contributors": [ - "Julien Polo (http://github.com/jpolo)", - "Matthew Kitt (http://github.com/mkitt)", - "Oleg Efimov (http://github.com/Sannis)", - "Corey Hart (http://www.codenothing.com)", - "Cliffano Subagio (http://blog.cliffano.com)", - "Mamading Ceesay (http://github.com/evangineer)", - "Matt Ranney (http://github.com/mranney)", - "Felix Geisendörfer (http://debuggable.com)", - "Nathan Landis (http://github.com/my8bird)" - ], - "bin": { - "node-lint": "./bin/node-lint" - }, - "main": "index", - "directories": { - "lib": "./lib/lint", - "doc": "./doc", - "man": "./man1" - }, - "repository": { - "type": "git", - "url": "http://github.com/jpolo/node-lint.git" - }, - "bugs": { - "url": "http://github.com/jpolo/node-lint/issues" - }, - "licenses" :[ - { - "type" : "MIT", - "url" : "http://github.com/jpolo/node-lint/blob/master//LICENSE" - } - ], - "dependencies" : { - }, - "devDependencies" : { - "vows": "*" - }, - "engines": { - "node": ">=0.4.0" - } -} diff --git a/node_modules/lint/resource/fixture/invalid-test.js b/node_modules/lint/resource/fixture/invalid-test.js deleted file mode 100644 index 7bead59..0000000 --- a/node_modules/lint/resource/fixture/invalid-test.js +++ /dev/null @@ -1,3 +0,0 @@ -object = { - bar: 'foo' -} diff --git a/node_modules/lint/resource/fixture/valid-test.js b/node_modules/lint/resource/fixture/valid-test.js deleted file mode 100644 index 949b770..0000000 --- a/node_modules/lint/resource/fixture/valid-test.js +++ /dev/null @@ -1,3 +0,0 @@ -var object = { - bar: 'foo' -}; diff --git a/node_modules/lint/test/assert/extension-test.js b/node_modules/lint/test/assert/extension-test.js deleted file mode 100644 index 2d29652..0000000 --- a/node_modules/lint/test/assert/extension-test.js +++ /dev/null @@ -1,61 +0,0 @@ -/*jslint nodejs: true, indent:4 */ -var vows = require('vows'); -require('../../lib/assert/extension'); - -var fs = require('fs'); -var path = require('path'); -var assert = require('assert'); - -var FIXTURE_PATH = fs.realpathSync(path.join(path.dirname(path.dirname(__dirname)), 'resource', 'fixture')); - -var AssertExtensionTest = vows.describe('assert module').addBatch({ - "validateLint()" : { - topic : function (item) { - return assert.validateLint; - }, - 'should return a function' : function (topic) { - assert.isFunction(topic); - }, - 'should throw an error if wrong javascript is passed' : function (topic) { - assert.throws(function () { - topic("fdslfjsdlkj;"); - }); - }, - 'should not throw an error if wrong javascript is passed' : function (topic) { - assert.doesNotThrow(function () { - topic("var foo = 'bar';"); - }); - } - }, - "validateLintFile()" : { - topic : function (item) { - return assert.validateLintFile; - }, - 'should return a function' : function (topic) { - assert.isFunction(topic); - }, - 'should throw an error if file does not exist' : function (topic) { - assert.throws(function () { - topic('nonexistent.js'); - }); - }, - 'should throw an error if file does not contains valid javascript' : function (topic) { - var fixtureFile = path.join(FIXTURE_PATH, 'invalid-test.js'); - - assert.doesNotThrow(function () { - fs.realpathSync(fixtureFile); - }); - assert.throws(function () { - topic(fixtureFile); - }); - }, - 'should not throw an error if wrong javascript is passed' : function (topic) { - var fixtureFile = path.join(FIXTURE_PATH, 'valid-test.js'); - assert.doesNotThrow(function () { - topic(fixtureFile); - }); - } - } -}); - -exports.AssertExtensionTest = AssertExtensionTest; \ No newline at end of file diff --git a/node_modules/lint/test/lint/formatter-test.js b/node_modules/lint/test/lint/formatter-test.js deleted file mode 100644 index cd9f55b..0000000 --- a/node_modules/lint/test/lint/formatter-test.js +++ /dev/null @@ -1,64 +0,0 @@ -/*jslint nodejs: true, indent:4 */ -var vows = require('vows'); -var assert = require('assert'); -var formatter = require('../../lib/lint/formatter'); -var Report = require('../../lib/lint/formatter').Report; - -function createFormatter(options) { - return new formatter.Formatter(options); -} - -function createBase(options) { - return new formatter.Base(options); -} - -function createReportEmpty() { - var report; - report = new Report(); - return report; -} - -var FormatterTest = vows.describe('Formatter class').addBatch({ - "constructor()" : { - topic : function (item) { - return createFormatter(); - }, - 'should not throw error for types cli, json, etc' : function (topic) { - ['cli', 'json', 'xml', 'textmate'].forEach(function (type) { - assert.doesNotThrow(function () { - createFormatter({type: type}); - }); - }); - } - }, - "format()" : { - topic : function (item) { - return createFormatter({type: 'json'}); - }, - 'should not throw error for types cli, json, etc' : function (topic) { - ['cli', 'json', 'xml', 'textmate'].forEach(function (type) { - assert.doesNotThrow(function () { - topic.format(createReportEmpty()); - }); - }); - } - } -}); - -var BaseTest = vows.describe('Base class').addBatch({ - "format(), formatSimple(), formatNormal(), formatFull()" : { - topic : function (item) { - return createBase(); - }, - 'should throw error' : function (topic) { - ['format', 'formatSimple', 'formatNormal', 'formatFull'].forEach(function (method) { - assert.throws(function () { - topic[method](); - }); - }); - } - } -}); - -exports.FormatterTest = FormatterTest; -exports.BaseTest = BaseTest; \ No newline at end of file diff --git a/node_modules/lint/test/lint/formatter/callback-test.js b/node_modules/lint/test/lint/formatter/callback-test.js deleted file mode 100644 index e6c9703..0000000 --- a/node_modules/lint/test/lint/formatter/callback-test.js +++ /dev/null @@ -1,75 +0,0 @@ -/*jslint nodejs: true, indent:4 */ - -var vows = require('vows'); -var assert = require('assert'); -var formatter = require('../../../lib/lint/formatter/callback'); - -var Report = require('../../../lib/lint/formatter').Report; - -function createFormatter(options) { - return new formatter.Formatter(options); -} - -function createReportEmpty() { - var report; - report = new Report(); - return report; -} - -function createReportValid() { - var report; - report = new Report(); - report.addFile('foo', []); - return report; -} - -function createReportInvalid() { - var report; - report = new Report(); - report.addFile('foo', [{ - file: 'foo', - line: 12, - character: 5, - evidence: 'e', - reason: 'r' - }]); - - return report; -} - -var FormatterTest = vows.describe('Callback Formatter class').addBatch({ - "format() / with function as callback" : { - topic : function (item) { - return createFormatter({callback: function (report) { - return report; - }}); - }, - 'should format empty report' : function (topic) { - - assert.deepEqual(topic.format(createReportEmpty()), createReportEmpty()); - }, - 'should format valid report' : function (topic) { - assert.deepEqual(topic.format(createReportValid()), createReportValid()); - }, - 'should format invalid report' : function (topic) { - assert.deepEqual(topic.format(createReportInvalid()), createReportInvalid()); - } - }, - "format() / with raw javascript as callback" : { - topic : function (item) { - return createFormatter({callback: "function format(report) {return report};"}); - }, - 'should format empty report' : function (topic) { - - assert.deepEqual(topic.format(createReportEmpty()), createReportEmpty()); - }, - 'should format valid report' : function (topic) { - assert.deepEqual(topic.format(createReportValid()), createReportValid()); - }, - 'should format invalid report' : function (topic) { - assert.deepEqual(topic.format(createReportInvalid()), createReportInvalid()); - } - } -}); - -exports.FormatterTest = FormatterTest; \ No newline at end of file diff --git a/node_modules/lint/test/lint/formatter/cli-test.js b/node_modules/lint/test/lint/formatter/cli-test.js deleted file mode 100644 index c8b76e3..0000000 --- a/node_modules/lint/test/lint/formatter/cli-test.js +++ /dev/null @@ -1,86 +0,0 @@ -/*jslint nodejs: true, indent:4 */ -var vows = require('vows'); -var assert = require('assert'); -var formatter = require('../../../lib/lint/formatter/cli'); - -var Report = require('../../../lib/lint/formatter').Report; - -function createFormatter(options) { - options = options || {}; - options.colors = options.colors === undefined ? false : options.colors; - return new formatter.Formatter(options); -} - -function createReportEmpty() { - var report; - report = new Report(); - return report; -} - -function createReportValid() { - var report; - report = new Report(); - report.addFile('foo', []); - return report; -} - -function createReportInvalid() { - var report; - report = new Report(); - report.addFile('foo', [{ - file: 'foo', - line: 12, - character: 5, - evidence: 'e', - reason: 'r' - }]); - - return report; -} - -var FormatterTest = vows.describe('Cli Formatter class').addBatch({ - "format() / mode=simple" : { - topic : function (item) { - return createFormatter({mode: 'simple'}); - }, - 'should format empty report' : function (topic) { - assert.equal(topic.format(createReportEmpty()), '✓ Valid » 0 file ∙ 0 error\n'); - }, - 'should format valid report' : function (topic) { - assert.equal(topic.format(createReportValid()), '✓ Valid » 1 file ∙ 0 error\n'); - }, - 'should format invalid report ' : function (topic) { - assert.equal(topic.format(createReportInvalid()), '✗ Invalid » 1 file ∙ 1 error\n'); - } - }, - "format() / mode=normal" : { - topic : function (item) { - return createFormatter({mode: 'normal'}); - }, - 'should format empty report' : function (topic) { - assert.equal(topic.format(createReportEmpty()), '✓ Valid » 0 file ∙ 0 error\n'); - }, - 'should format valid report' : function (topic) { - assert.equal(topic.format(createReportValid()), '✓ Valid » 1 file ∙ 0 error\n'); - }, - 'should format invalid report ' : function (topic) { - assert.equal(topic.format(createReportInvalid()), '♢ foo\n 1) e //line 12\n » r\n\n✗ Invalid » 1 file ∙ 1 error\n'); - } - }, - "format() / mode=full" : { - topic : function (item) { - return createFormatter({mode: 'full'}); - }, - 'should format empty report' : function (topic) { - assert.equal(topic.format(createReportEmpty()), '✓ Valid » 0 file ∙ 0 error\n'); - }, - 'should format valid report' : function (topic) { - assert.equal(topic.format(createReportValid()), '✓ Valid » 1 file ∙ 0 error\n'); - }, - 'should format invalid report ' : function (topic) { - assert.equal(topic.format(createReportInvalid()), '♢ foo (1 errors)\n 1) e //line 12, character 5\n » r\n\n✗ Invalid » 1 file ∙ 1 error\n'); - } - } -}); - -exports.FormatterTest = FormatterTest; \ No newline at end of file diff --git a/node_modules/lint/test/lint/formatter/json-test.js b/node_modules/lint/test/lint/formatter/json-test.js deleted file mode 100644 index c58d107..0000000 --- a/node_modules/lint/test/lint/formatter/json-test.js +++ /dev/null @@ -1,57 +0,0 @@ -/*jslint nodejs: true, indent:4 */ - -var vows = require('vows'); -var assert = require('assert'); -var formatter = require('../../../lib/lint/formatter/json'); - -var Report = require('../../../lib/lint/formatter').Report; - -function createFormatter(options) { - return new formatter.Formatter(options); -} - -function createReportEmpty() { - var report; - report = new Report(); - return report; -} - -function createReportValid() { - var report; - report = new Report(); - report.addFile('foo', []); - return report; -} - -function createReportInvalid() { - var report; - report = new Report(); - report.addFile('foo', [{ - file: 'foo', - line: 12, - character: 5, - evidence: 'e', - reason: 'r' - }]); - - return report; -} - -var FormatterTest = vows.describe('JSON Formatter class').addBatch({ - "format()" : { - topic : function (item) { - return createFormatter(); - }, - 'should format empty report' : function (topic) { - assert.equal(topic.format(createReportEmpty()), '[]'); - }, - 'should format valid report' : function (topic) { - assert.equal(topic.format(createReportValid()), '[{"file":"foo","errors":[],"isValid":true}]'); - }, - 'should format invalid report' : function (topic) { - assert.equal(topic.format(createReportInvalid()), '[{"file":"foo","errors":[{"file":"foo","line":12,"character":5,"evidence":"e","reason":"r"}],"isValid":false}]'); - } - } -}); - -exports.FormatterTest = FormatterTest; \ No newline at end of file diff --git a/node_modules/lint/test/lint/formatter/textmate-test.js b/node_modules/lint/test/lint/formatter/textmate-test.js deleted file mode 100644 index aec8bc9..0000000 --- a/node_modules/lint/test/lint/formatter/textmate-test.js +++ /dev/null @@ -1,57 +0,0 @@ -/*jslint nodejs: true, indent:4 */ - -var vows = require('vows'); -var assert = require('assert'); -var formatter = require('../../../lib/lint/formatter/textmate'); - -var Report = require('../../../lib/lint/formatter').Report; - -function createFormatter(options) { - return new formatter.Formatter(options); -} - -function createReportEmpty() { - var report; - report = new Report(); - return report; -} - -function createReportValid() { - var report; - report = new Report(); - report.addFile('foo', []); - return report; -} - -function createReportInvalid() { - var report; - report = new Report(); - report.addFile('foo', [{ - file: 'foo', - line: 12, - character: 5, - evidence: 'e', - reason: 'r' - }]); - - return report; -} - -var FormatterTest = vows.describe('VIM Formatter class').addBatch({ - "format() / mode=normal" : { - topic : function (item) { - return createFormatter(); - }, - 'should format empty report' : function (topic) { - assert.equal(topic.format(createReportEmpty()), '0 error\n'); - }, - 'should format valid report' : function (topic) { - assert.equal(topic.format(createReportValid()), '0 error\n'); - }, - 'should format invalid report' : function (topic) { - assert.equal(topic.format(createReportInvalid()), 'foo: line 12, character 5, r\ne\n\n1 error\n'); - } - } -}); - -exports.FormatterTest = FormatterTest; \ No newline at end of file diff --git a/node_modules/lint/test/lint/formatter/vim-test.js b/node_modules/lint/test/lint/formatter/vim-test.js deleted file mode 100644 index 6374763..0000000 --- a/node_modules/lint/test/lint/formatter/vim-test.js +++ /dev/null @@ -1,57 +0,0 @@ -/*jslint nodejs: true, indent:4 */ - -var vows = require('vows'); -var assert = require('assert'); -var formatter = require('../../../lib/lint/formatter/vim'); - -var Report = require('../../../lib/lint/formatter').Report; - -function createFormatter(options) { - return new formatter.Formatter(options); -} - -function createReportEmpty() { - var report; - report = new Report(); - return report; -} - -function createReportValid() { - var report; - report = new Report(); - report.addFile('foo', []); - return report; -} - -function createReportInvalid() { - var report; - report = new Report(); - report.addFile('foo', [{ - file: 'foo', - line: 12, - character: 5, - evidence: 'e', - reason: 'r' - }]); - - return report; -} - -var FormatterTest = vows.describe('VIM Formatter class').addBatch({ - "format()" : { - topic : function (item) { - return createFormatter(); - }, - 'should format empty report' : function (topic) { - assert.equal(topic.format(createReportEmpty()), ''); - }, - 'should format valid report' : function (topic) { - assert.equal(topic.format(createReportValid()), '\n'); - }, - 'should format invalid report' : function (topic) { - assert.equal(topic.format(createReportInvalid()), 'foo line 12 column 5 Error: r e\n'); - } - } -}); - -exports.FormatterTest = FormatterTest; \ No newline at end of file diff --git a/node_modules/lint/test/lint/formatter/xml-test.js b/node_modules/lint/test/lint/formatter/xml-test.js deleted file mode 100644 index df49385..0000000 --- a/node_modules/lint/test/lint/formatter/xml-test.js +++ /dev/null @@ -1,94 +0,0 @@ -/*jslint nodejs: true, indent:4 */ -var vows = require('vows'); -var assert = require('assert'); -var formatter = require('../../../lib/lint/formatter/xml'); - -var Report = require('../../../lib/lint/formatter').Report; - -function createFormatter(options) { - return new formatter.Formatter(options); -} - -function createReportEmpty() { - var report; - report = new Report(); - return report; -} - -function createReportValid() { - var report; - report = new Report(); - report.addFile('foo', []); - return report; -} - -function createReportInvalid() { - var report; - report = new Report(); - report.addFile('foo', [{ - file: 'foo', - line: 12, - character: 5, - evidence: 'e', - reason: 'r' - }]); - - return report; -} - -var FormatterTest = vows.describe('XML Formatter class').addBatch({ - "format() / pretty=false" : { - 'topic' : function (item) { - return createFormatter(); - }, - 'should format empty report' : function (topic) { - assert.equal(topic.format(createReportEmpty()), ''); - }, - 'should format simple content' : function (topic) { - var expected = ''; - - assert.equal(topic.format(createReportInvalid()), expected); - } - }, - "format() / pretty=true" : { - 'topic' : function (item) { - return createFormatter({pretty: true}); - }, - 'should return format empty content' : function (topic) { - var expected = '\n\n\n'; - assert.equal(topic.format(createReportEmpty()), expected); - }, - 'should return pretty xml formatted content' : function (topic) { - var expected = '\n\n\t\n\t\t\n\t\n\n'; - assert.equal(topic.format(createReportInvalid()), expected); - } - }, - "format() / pretty=true, tab=' '" : { - 'topic' : function (item) { - return createFormatter({pretty: true, tab: ' '}); - }, - 'should return format empty content' : function (topic) { - var expected = '\n\n\n'; - assert.equal(topic.format(createReportEmpty()), expected); - }, - 'should return pretty xml formatted content' : function (topic) { - var expected = '\n\n \n \n \n\n'; - assert.equal(topic.format(createReportInvalid()), expected); - } - }, - "format() / pretty=true, eol='\n\r'" : { - 'topic' : function (item) { - return createFormatter({pretty: true, eol: '\n\r'}); - }, - 'should return format empty content' : function (topic) { - var expected = '\n\r\n\r\n\r'; - assert.equal(topic.format(createReportEmpty()), expected); - }, - 'should return pretty xml formatted content' : function (topic) { - var expected = '\n\r\n\r\t\n\r\t\t\n\r\t\n\r\n\r'; - assert.equal(topic.format(createReportInvalid()), expected); - } - } -}); - -exports.FormatterTest = FormatterTest; \ No newline at end of file diff --git a/node_modules/lint/test/lint/launcher-test.js b/node_modules/lint/test/lint/launcher-test.js deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/lint/test/lint/parser-test.js b/node_modules/lint/test/lint/parser-test.js deleted file mode 100644 index 7ec8d86..0000000 --- a/node_modules/lint/test/lint/parser-test.js +++ /dev/null @@ -1,181 +0,0 @@ -/*jslint nodejs: true, indent:4 */ -var vows = require('vows'); -var assert = require('assert'); -var fs = require('fs'); -var path = require('path'); - -var parser = require('../../lib/lint/parser'); - -var FIXTURE_PATH = fs.realpathSync(path.join(path.dirname(path.dirname(__dirname)), 'resource', 'fixture')); - -function createParser(options) { - return new parser.Parser(options); -} - -var ParserTest = vows.describe('Parser class').addBatch({ - "update()" : { - topic : function (item) { - return createParser(); - }, - 'should return this' : function (topic) { - assert.equal(topic.update(), topic); - }, - 'should concatenate source' : function (topic) { - topic.update(); - assert.equal(topic._source, ''); - topic.update('foo'); - assert.equal(topic._source, 'foo'); - topic.update(); - assert.equal(topic._source, 'foo'); - topic.update(''); - assert.equal(topic._source, 'foo'); - topic.update('bar'); - assert.equal(topic._source, 'foobar'); - } - }, - "reset()" : { - topic : function (item) { - return createParser(); - }, - 'should return this' : function (topic) { - assert.equal(topic.reset(), topic); - }, - 'should empty source' : function (topic) { - topic.reset(); - topic.update('foo-bar').update('-baz'); - assert.equal(topic._source, 'foo-bar-baz'); - topic.reset(); - assert.equal(topic._source, ''); - } - }, - "validate()" : { - topic : function (item) { - return createParser(); - }, - 'should return this' : function (topic) { - assert.equal(topic.validate(), topic); - } - }, - "isValid()" : { - topic : function (item) { - return createParser(); - }, - 'should return true if empty' : function (topic) { - topic.reset(); - assert.equal(topic.isValid(), true); - }, - 'should return true if valid javascript (simple)' : function (topic) { - topic.reset(); - topic.update('var foo = "bar";'); - assert.equal(topic.isValid(), true); - - topic.reset(); - topic.update('var foo = "baz";'); - assert.equal(topic.isValid(), true); - }, - 'should return false if invalid javascript (simple)' : function (topic) { - topic.reset(); - topic.update('var foo = "bar"');// (missing semicolon) - assert.equal(topic.isValid(), false); - - topic.update(';'); - assert.equal(topic.isValid(), true); - } - }, - "getReport()" : { - topic : function (item) { - return createParser(); - }, - 'should return new object' : function (topic) { - assert.ok(typeof (topic.getReport()) === 'object'); - topic.update('foo'); - assert.ok(typeof (topic.getReport()) === 'object'); - topic.reset(); - assert.ok(typeof (topic.getReport()) === 'object'); - } - } - -}); - -var ParserModuleTest = vows.describe('parser module').addBatch({ - "isValid()" : { - topic : function (item) { - return parser.isValid; - }, - 'should return true if empty' : function (topic) { - assert.equal(topic(''), true); - }, - 'should return true if valid javascript (simple)' : function (topic) { - assert.equal(topic('var foo = "bar";'), true); - assert.equal(topic('var foo = "baz";'), true); - }, - 'should return false if invalid javascript (simple)' : function (topic) { - assert.equal(topic('var foo = "bar"'), false);// (missing semicolon) - } - }, - "isValidFile()" : { - topic : function (item) { - var self = this, - report = {}; - - parser.isValidFile('nonexistent.js', null, function (error, result) { - report.nonExistent = { - error : error, - result : result - }; - - var validFile = path.join(FIXTURE_PATH, 'valid-test.js'); - parser.isValidFile(validFile, null, function (error, result) { - report.validFile = { - error : error, - result : result - }; - - var invalidFile = path.join(FIXTURE_PATH, 'invalid-test.js'); - parser.isValidFile(invalidFile, null, function (error, result) { - report.invalidFile = { - error : error, - result : result - }; - - self.callback(null, report); - }); - }); - }); - - }, - 'should set error in callback if file does not exist' : function (topic) { - assert.notEqual(topic.nonExistent.error, undefined); - }, - 'should return true if valid javascript file' : function (topic) { - assert.isUndefined(topic.validFile.error); - assert.equal(topic.validFile.result, true); - }, - 'should return false if invalid javascript file' : function (topic) { - assert.isUndefined(topic.invalidFile.error); - assert.equal(topic.invalidFile.result, false); - } - }, - "isValidFileSync()" : { - topic : function (item) { - return parser.isValidFileSync; - }, - 'should throw an error if file does not exist' : function (topic) { - assert.throws(function () { - topic('nonexistent.js'); - }); - }, - 'should return true if valid javascript file' : function (topic) { - var fixtureFile = path.join(FIXTURE_PATH, 'valid-test.js'); - assert.equal(topic(fixtureFile), true); - assert.equal(topic(fixtureFile), true); - }, - 'should return false if invalid javascript file' : function (topic) { - var fixtureFile = path.join(FIXTURE_PATH, 'invalid-test.js'); - assert.equal(topic(fixtureFile), false); - } - } -}); - -exports.ParserTest = ParserTest; -exports.ParserModuleTest = ParserModuleTest; \ No newline at end of file diff --git a/node_modules/lodash/LICENSE b/node_modules/lodash/LICENSE deleted file mode 100644 index 77c42f1..0000000 --- a/node_modules/lodash/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Copyright OpenJS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -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. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. diff --git a/node_modules/lodash/README.md b/node_modules/lodash/README.md deleted file mode 100644 index c64fce8..0000000 --- a/node_modules/lodash/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# lodash v4.17.23 - -The [Lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules. - -## Installation - -Using npm: -```shell -$ npm i -g npm -$ npm i --save lodash -``` - -In Node.js: -```js -// Load the full build. -var _ = require('lodash'); -// Load the core build. -var _ = require('lodash/core'); -// Load the FP build for immutable auto-curried iteratee-first data-last methods. -var fp = require('lodash/fp'); - -// Load method categories. -var array = require('lodash/array'); -var object = require('lodash/fp/object'); - -// Cherry-pick methods for smaller browserify/rollup/webpack bundles. -var at = require('lodash/at'); -var curryN = require('lodash/fp/curryN'); -``` - -See the [package source](https://github.com/lodash/lodash/tree/4.17.23-npm) for more details. - -**Note:**
-Install [n_](https://www.npmjs.com/package/n_) for Lodash use in the Node.js < 6 REPL. - -## Support - -Tested in Chrome 74-75, Firefox 66-67, IE 11, Edge 18, Safari 11-12, & Node.js 8-12.
-Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. diff --git a/node_modules/lodash/_DataView.js b/node_modules/lodash/_DataView.js deleted file mode 100644 index ac2d57c..0000000 --- a/node_modules/lodash/_DataView.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var DataView = getNative(root, 'DataView'); - -module.exports = DataView; diff --git a/node_modules/lodash/_Hash.js b/node_modules/lodash/_Hash.js deleted file mode 100644 index b504fe3..0000000 --- a/node_modules/lodash/_Hash.js +++ /dev/null @@ -1,32 +0,0 @@ -var hashClear = require('./_hashClear'), - hashDelete = require('./_hashDelete'), - hashGet = require('./_hashGet'), - hashHas = require('./_hashHas'), - hashSet = require('./_hashSet'); - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -module.exports = Hash; diff --git a/node_modules/lodash/_LazyWrapper.js b/node_modules/lodash/_LazyWrapper.js deleted file mode 100644 index 81786c7..0000000 --- a/node_modules/lodash/_LazyWrapper.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseCreate = require('./_baseCreate'), - baseLodash = require('./_baseLodash'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295; - -/** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ -function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; -} - -// Ensure `LazyWrapper` is an instance of `baseLodash`. -LazyWrapper.prototype = baseCreate(baseLodash.prototype); -LazyWrapper.prototype.constructor = LazyWrapper; - -module.exports = LazyWrapper; diff --git a/node_modules/lodash/_ListCache.js b/node_modules/lodash/_ListCache.js deleted file mode 100644 index 26895c3..0000000 --- a/node_modules/lodash/_ListCache.js +++ /dev/null @@ -1,32 +0,0 @@ -var listCacheClear = require('./_listCacheClear'), - listCacheDelete = require('./_listCacheDelete'), - listCacheGet = require('./_listCacheGet'), - listCacheHas = require('./_listCacheHas'), - listCacheSet = require('./_listCacheSet'); - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -module.exports = ListCache; diff --git a/node_modules/lodash/_LodashWrapper.js b/node_modules/lodash/_LodashWrapper.js deleted file mode 100644 index c1e4d9d..0000000 --- a/node_modules/lodash/_LodashWrapper.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseCreate = require('./_baseCreate'), - baseLodash = require('./_baseLodash'); - -/** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ -function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; -} - -LodashWrapper.prototype = baseCreate(baseLodash.prototype); -LodashWrapper.prototype.constructor = LodashWrapper; - -module.exports = LodashWrapper; diff --git a/node_modules/lodash/_Map.js b/node_modules/lodash/_Map.js deleted file mode 100644 index b73f29a..0000000 --- a/node_modules/lodash/_Map.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'); - -module.exports = Map; diff --git a/node_modules/lodash/_MapCache.js b/node_modules/lodash/_MapCache.js deleted file mode 100644 index 4a4eea7..0000000 --- a/node_modules/lodash/_MapCache.js +++ /dev/null @@ -1,32 +0,0 @@ -var mapCacheClear = require('./_mapCacheClear'), - mapCacheDelete = require('./_mapCacheDelete'), - mapCacheGet = require('./_mapCacheGet'), - mapCacheHas = require('./_mapCacheHas'), - mapCacheSet = require('./_mapCacheSet'); - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -module.exports = MapCache; diff --git a/node_modules/lodash/_Promise.js b/node_modules/lodash/_Promise.js deleted file mode 100644 index 247b9e1..0000000 --- a/node_modules/lodash/_Promise.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Promise = getNative(root, 'Promise'); - -module.exports = Promise; diff --git a/node_modules/lodash/_Set.js b/node_modules/lodash/_Set.js deleted file mode 100644 index b3c8dcb..0000000 --- a/node_modules/lodash/_Set.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Set = getNative(root, 'Set'); - -module.exports = Set; diff --git a/node_modules/lodash/_SetCache.js b/node_modules/lodash/_SetCache.js deleted file mode 100644 index 6468b06..0000000 --- a/node_modules/lodash/_SetCache.js +++ /dev/null @@ -1,27 +0,0 @@ -var MapCache = require('./_MapCache'), - setCacheAdd = require('./_setCacheAdd'), - setCacheHas = require('./_setCacheHas'); - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; -SetCache.prototype.has = setCacheHas; - -module.exports = SetCache; diff --git a/node_modules/lodash/_Stack.js b/node_modules/lodash/_Stack.js deleted file mode 100644 index 80b2cf1..0000000 --- a/node_modules/lodash/_Stack.js +++ /dev/null @@ -1,27 +0,0 @@ -var ListCache = require('./_ListCache'), - stackClear = require('./_stackClear'), - stackDelete = require('./_stackDelete'), - stackGet = require('./_stackGet'), - stackHas = require('./_stackHas'), - stackSet = require('./_stackSet'); - -/** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; -} - -// Add methods to `Stack`. -Stack.prototype.clear = stackClear; -Stack.prototype['delete'] = stackDelete; -Stack.prototype.get = stackGet; -Stack.prototype.has = stackHas; -Stack.prototype.set = stackSet; - -module.exports = Stack; diff --git a/node_modules/lodash/_Symbol.js b/node_modules/lodash/_Symbol.js deleted file mode 100644 index a013f7c..0000000 --- a/node_modules/lodash/_Symbol.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Built-in value references. */ -var Symbol = root.Symbol; - -module.exports = Symbol; diff --git a/node_modules/lodash/_Uint8Array.js b/node_modules/lodash/_Uint8Array.js deleted file mode 100644 index 2fb30e1..0000000 --- a/node_modules/lodash/_Uint8Array.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Built-in value references. */ -var Uint8Array = root.Uint8Array; - -module.exports = Uint8Array; diff --git a/node_modules/lodash/_WeakMap.js b/node_modules/lodash/_WeakMap.js deleted file mode 100644 index 567f86c..0000000 --- a/node_modules/lodash/_WeakMap.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var WeakMap = getNative(root, 'WeakMap'); - -module.exports = WeakMap; diff --git a/node_modules/lodash/_apply.js b/node_modules/lodash/_apply.js deleted file mode 100644 index 36436dd..0000000 --- a/node_modules/lodash/_apply.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -module.exports = apply; diff --git a/node_modules/lodash/_arrayAggregator.js b/node_modules/lodash/_arrayAggregator.js deleted file mode 100644 index d96c3ca..0000000 --- a/node_modules/lodash/_arrayAggregator.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; -} - -module.exports = arrayAggregator; diff --git a/node_modules/lodash/_arrayEach.js b/node_modules/lodash/_arrayEach.js deleted file mode 100644 index 2c5f579..0000000 --- a/node_modules/lodash/_arrayEach.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEach; diff --git a/node_modules/lodash/_arrayEachRight.js b/node_modules/lodash/_arrayEachRight.js deleted file mode 100644 index 976ca5c..0000000 --- a/node_modules/lodash/_arrayEachRight.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEachRight(array, iteratee) { - var length = array == null ? 0 : array.length; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEachRight; diff --git a/node_modules/lodash/_arrayEvery.js b/node_modules/lodash/_arrayEvery.js deleted file mode 100644 index e26a918..0000000 --- a/node_modules/lodash/_arrayEvery.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ -function arrayEvery(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; -} - -module.exports = arrayEvery; diff --git a/node_modules/lodash/_arrayFilter.js b/node_modules/lodash/_arrayFilter.js deleted file mode 100644 index 75ea254..0000000 --- a/node_modules/lodash/_arrayFilter.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -module.exports = arrayFilter; diff --git a/node_modules/lodash/_arrayIncludes.js b/node_modules/lodash/_arrayIncludes.js deleted file mode 100644 index 3737a6d..0000000 --- a/node_modules/lodash/_arrayIncludes.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && baseIndexOf(array, value, 0) > -1; -} - -module.exports = arrayIncludes; diff --git a/node_modules/lodash/_arrayIncludesWith.js b/node_modules/lodash/_arrayIncludesWith.js deleted file mode 100644 index 235fd97..0000000 --- a/node_modules/lodash/_arrayIncludesWith.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -module.exports = arrayIncludesWith; diff --git a/node_modules/lodash/_arrayLikeKeys.js b/node_modules/lodash/_arrayLikeKeys.js deleted file mode 100644 index b2ec9ce..0000000 --- a/node_modules/lodash/_arrayLikeKeys.js +++ /dev/null @@ -1,49 +0,0 @@ -var baseTimes = require('./_baseTimes'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isIndex = require('./_isIndex'), - isTypedArray = require('./isTypedArray'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -module.exports = arrayLikeKeys; diff --git a/node_modules/lodash/_arrayMap.js b/node_modules/lodash/_arrayMap.js deleted file mode 100644 index 22b2246..0000000 --- a/node_modules/lodash/_arrayMap.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -module.exports = arrayMap; diff --git a/node_modules/lodash/_arrayPush.js b/node_modules/lodash/_arrayPush.js deleted file mode 100644 index 7d742b3..0000000 --- a/node_modules/lodash/_arrayPush.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -module.exports = arrayPush; diff --git a/node_modules/lodash/_arrayReduce.js b/node_modules/lodash/_arrayReduce.js deleted file mode 100644 index de8b79b..0000000 --- a/node_modules/lodash/_arrayReduce.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -module.exports = arrayReduce; diff --git a/node_modules/lodash/_arrayReduceRight.js b/node_modules/lodash/_arrayReduceRight.js deleted file mode 100644 index 22d8976..0000000 --- a/node_modules/lodash/_arrayReduceRight.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array == null ? 0 : array.length; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; -} - -module.exports = arrayReduceRight; diff --git a/node_modules/lodash/_arraySample.js b/node_modules/lodash/_arraySample.js deleted file mode 100644 index fcab010..0000000 --- a/node_modules/lodash/_arraySample.js +++ /dev/null @@ -1,15 +0,0 @@ -var baseRandom = require('./_baseRandom'); - -/** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ -function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; -} - -module.exports = arraySample; diff --git a/node_modules/lodash/_arraySampleSize.js b/node_modules/lodash/_arraySampleSize.js deleted file mode 100644 index 8c7e364..0000000 --- a/node_modules/lodash/_arraySampleSize.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseClamp = require('./_baseClamp'), - copyArray = require('./_copyArray'), - shuffleSelf = require('./_shuffleSelf'); - -/** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ -function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); -} - -module.exports = arraySampleSize; diff --git a/node_modules/lodash/_arrayShuffle.js b/node_modules/lodash/_arrayShuffle.js deleted file mode 100644 index 46313a3..0000000 --- a/node_modules/lodash/_arrayShuffle.js +++ /dev/null @@ -1,15 +0,0 @@ -var copyArray = require('./_copyArray'), - shuffleSelf = require('./_shuffleSelf'); - -/** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); -} - -module.exports = arrayShuffle; diff --git a/node_modules/lodash/_arraySome.js b/node_modules/lodash/_arraySome.js deleted file mode 100644 index 6fd02fd..0000000 --- a/node_modules/lodash/_arraySome.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -module.exports = arraySome; diff --git a/node_modules/lodash/_asciiSize.js b/node_modules/lodash/_asciiSize.js deleted file mode 100644 index 11d29c3..0000000 --- a/node_modules/lodash/_asciiSize.js +++ /dev/null @@ -1,12 +0,0 @@ -var baseProperty = require('./_baseProperty'); - -/** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -var asciiSize = baseProperty('length'); - -module.exports = asciiSize; diff --git a/node_modules/lodash/_asciiToArray.js b/node_modules/lodash/_asciiToArray.js deleted file mode 100644 index 8e3dd5b..0000000 --- a/node_modules/lodash/_asciiToArray.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function asciiToArray(string) { - return string.split(''); -} - -module.exports = asciiToArray; diff --git a/node_modules/lodash/_asciiWords.js b/node_modules/lodash/_asciiWords.js deleted file mode 100644 index d765f0f..0000000 --- a/node_modules/lodash/_asciiWords.js +++ /dev/null @@ -1,15 +0,0 @@ -/** Used to match words composed of alphanumeric characters. */ -var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - -/** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ -function asciiWords(string) { - return string.match(reAsciiWord) || []; -} - -module.exports = asciiWords; diff --git a/node_modules/lodash/_assignMergeValue.js b/node_modules/lodash/_assignMergeValue.js deleted file mode 100644 index cb1185e..0000000 --- a/node_modules/lodash/_assignMergeValue.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - eq = require('./eq'); - -/** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -module.exports = assignMergeValue; diff --git a/node_modules/lodash/_assignValue.js b/node_modules/lodash/_assignValue.js deleted file mode 100644 index 4083957..0000000 --- a/node_modules/lodash/_assignValue.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - eq = require('./eq'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -module.exports = assignValue; diff --git a/node_modules/lodash/_assocIndexOf.js b/node_modules/lodash/_assocIndexOf.js deleted file mode 100644 index 5b77a2b..0000000 --- a/node_modules/lodash/_assocIndexOf.js +++ /dev/null @@ -1,21 +0,0 @@ -var eq = require('./eq'); - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -module.exports = assocIndexOf; diff --git a/node_modules/lodash/_baseAggregator.js b/node_modules/lodash/_baseAggregator.js deleted file mode 100644 index 4bc9e91..0000000 --- a/node_modules/lodash/_baseAggregator.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; -} - -module.exports = baseAggregator; diff --git a/node_modules/lodash/_baseAssign.js b/node_modules/lodash/_baseAssign.js deleted file mode 100644 index e5c4a1a..0000000 --- a/node_modules/lodash/_baseAssign.js +++ /dev/null @@ -1,17 +0,0 @@ -var copyObject = require('./_copyObject'), - keys = require('./keys'); - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); -} - -module.exports = baseAssign; diff --git a/node_modules/lodash/_baseAssignIn.js b/node_modules/lodash/_baseAssignIn.js deleted file mode 100644 index 6624f90..0000000 --- a/node_modules/lodash/_baseAssignIn.js +++ /dev/null @@ -1,17 +0,0 @@ -var copyObject = require('./_copyObject'), - keysIn = require('./keysIn'); - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); -} - -module.exports = baseAssignIn; diff --git a/node_modules/lodash/_baseAssignValue.js b/node_modules/lodash/_baseAssignValue.js deleted file mode 100644 index d6f66ef..0000000 --- a/node_modules/lodash/_baseAssignValue.js +++ /dev/null @@ -1,25 +0,0 @@ -var defineProperty = require('./_defineProperty'); - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -module.exports = baseAssignValue; diff --git a/node_modules/lodash/_baseAt.js b/node_modules/lodash/_baseAt.js deleted file mode 100644 index 90e4237..0000000 --- a/node_modules/lodash/_baseAt.js +++ /dev/null @@ -1,23 +0,0 @@ -var get = require('./get'); - -/** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths to pick. - * @returns {Array} Returns the picked elements. - */ -function baseAt(object, paths) { - var index = -1, - length = paths.length, - result = Array(length), - skip = object == null; - - while (++index < length) { - result[index] = skip ? undefined : get(object, paths[index]); - } - return result; -} - -module.exports = baseAt; diff --git a/node_modules/lodash/_baseClamp.js b/node_modules/lodash/_baseClamp.js deleted file mode 100644 index a1c5692..0000000 --- a/node_modules/lodash/_baseClamp.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ -function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; -} - -module.exports = baseClamp; diff --git a/node_modules/lodash/_baseClone.js b/node_modules/lodash/_baseClone.js deleted file mode 100644 index 69f8705..0000000 --- a/node_modules/lodash/_baseClone.js +++ /dev/null @@ -1,166 +0,0 @@ -var Stack = require('./_Stack'), - arrayEach = require('./_arrayEach'), - assignValue = require('./_assignValue'), - baseAssign = require('./_baseAssign'), - baseAssignIn = require('./_baseAssignIn'), - cloneBuffer = require('./_cloneBuffer'), - copyArray = require('./_copyArray'), - copySymbols = require('./_copySymbols'), - copySymbolsIn = require('./_copySymbolsIn'), - getAllKeys = require('./_getAllKeys'), - getAllKeysIn = require('./_getAllKeysIn'), - getTag = require('./_getTag'), - initCloneArray = require('./_initCloneArray'), - initCloneByTag = require('./_initCloneByTag'), - initCloneObject = require('./_initCloneObject'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isMap = require('./isMap'), - isObject = require('./isObject'), - isSet = require('./isSet'), - keys = require('./keys'), - keysIn = require('./keysIn'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = -cloneableTags[boolTag] = cloneableTags[dateTag] = -cloneableTags[float32Tag] = cloneableTags[float64Tag] = -cloneableTags[int8Tag] = cloneableTags[int16Tag] = -cloneableTags[int32Tag] = cloneableTags[mapTag] = -cloneableTags[numberTag] = cloneableTags[objectTag] = -cloneableTags[regexpTag] = cloneableTags[setTag] = -cloneableTags[stringTag] = cloneableTags[symbolTag] = -cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = -cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat - ? copySymbolsIn(value, baseAssignIn(result, value)) - : copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? getAllKeysIn : getAllKeys) - : (isFlat ? keysIn : keys); - - var props = isArr ? undefined : keysFunc(value); - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -module.exports = baseClone; diff --git a/node_modules/lodash/_baseConforms.js b/node_modules/lodash/_baseConforms.js deleted file mode 100644 index 947e20d..0000000 --- a/node_modules/lodash/_baseConforms.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseConformsTo = require('./_baseConformsTo'), - keys = require('./keys'); - -/** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ -function baseConforms(source) { - var props = keys(source); - return function(object) { - return baseConformsTo(object, source, props); - }; -} - -module.exports = baseConforms; diff --git a/node_modules/lodash/_baseConformsTo.js b/node_modules/lodash/_baseConformsTo.js deleted file mode 100644 index e449cb8..0000000 --- a/node_modules/lodash/_baseConformsTo.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * The base implementation of `_.conformsTo` which accepts `props` to check. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - */ -function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length], - predicate = source[key], - value = object[key]; - - if ((value === undefined && !(key in object)) || !predicate(value)) { - return false; - } - } - return true; -} - -module.exports = baseConformsTo; diff --git a/node_modules/lodash/_baseCreate.js b/node_modules/lodash/_baseCreate.js deleted file mode 100644 index ffa6a52..0000000 --- a/node_modules/lodash/_baseCreate.js +++ /dev/null @@ -1,30 +0,0 @@ -var isObject = require('./isObject'); - -/** Built-in value references. */ -var objectCreate = Object.create; - -/** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ -var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; -}()); - -module.exports = baseCreate; diff --git a/node_modules/lodash/_baseDelay.js b/node_modules/lodash/_baseDelay.js deleted file mode 100644 index 1486d69..0000000 --- a/node_modules/lodash/_baseDelay.js +++ /dev/null @@ -1,21 +0,0 @@ -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ -function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); -} - -module.exports = baseDelay; diff --git a/node_modules/lodash/_baseDifference.js b/node_modules/lodash/_baseDifference.js deleted file mode 100644 index 343ac19..0000000 --- a/node_modules/lodash/_baseDifference.js +++ /dev/null @@ -1,67 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - arrayMap = require('./_arrayMap'), - baseUnary = require('./_baseUnary'), - cacheHas = require('./_cacheHas'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ -function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee == null ? value : iteratee(value); - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; -} - -module.exports = baseDifference; diff --git a/node_modules/lodash/_baseEach.js b/node_modules/lodash/_baseEach.js deleted file mode 100644 index 512c067..0000000 --- a/node_modules/lodash/_baseEach.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseForOwn = require('./_baseForOwn'), - createBaseEach = require('./_createBaseEach'); - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = createBaseEach(baseForOwn); - -module.exports = baseEach; diff --git a/node_modules/lodash/_baseEachRight.js b/node_modules/lodash/_baseEachRight.js deleted file mode 100644 index 0a8feec..0000000 --- a/node_modules/lodash/_baseEachRight.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseForOwnRight = require('./_baseForOwnRight'), - createBaseEach = require('./_createBaseEach'); - -/** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEachRight = createBaseEach(baseForOwnRight, true); - -module.exports = baseEachRight; diff --git a/node_modules/lodash/_baseEvery.js b/node_modules/lodash/_baseEvery.js deleted file mode 100644 index fa52f7b..0000000 --- a/node_modules/lodash/_baseEvery.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ -function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; -} - -module.exports = baseEvery; diff --git a/node_modules/lodash/_baseExtremum.js b/node_modules/lodash/_baseExtremum.js deleted file mode 100644 index 9d6aa77..0000000 --- a/node_modules/lodash/_baseExtremum.js +++ /dev/null @@ -1,32 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -module.exports = baseExtremum; diff --git a/node_modules/lodash/_baseFill.js b/node_modules/lodash/_baseFill.js deleted file mode 100644 index 46ef9c7..0000000 --- a/node_modules/lodash/_baseFill.js +++ /dev/null @@ -1,32 +0,0 @@ -var toInteger = require('./toInteger'), - toLength = require('./toLength'); - -/** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ -function baseFill(array, value, start, end) { - var length = array.length; - - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; -} - -module.exports = baseFill; diff --git a/node_modules/lodash/_baseFilter.js b/node_modules/lodash/_baseFilter.js deleted file mode 100644 index 4678477..0000000 --- a/node_modules/lodash/_baseFilter.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -module.exports = baseFilter; diff --git a/node_modules/lodash/_baseFindIndex.js b/node_modules/lodash/_baseFindIndex.js deleted file mode 100644 index e3f5d8a..0000000 --- a/node_modules/lodash/_baseFindIndex.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -module.exports = baseFindIndex; diff --git a/node_modules/lodash/_baseFindKey.js b/node_modules/lodash/_baseFindKey.js deleted file mode 100644 index 2e430f3..0000000 --- a/node_modules/lodash/_baseFindKey.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ -function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; -} - -module.exports = baseFindKey; diff --git a/node_modules/lodash/_baseFlatten.js b/node_modules/lodash/_baseFlatten.js deleted file mode 100644 index 4b1e009..0000000 --- a/node_modules/lodash/_baseFlatten.js +++ /dev/null @@ -1,38 +0,0 @@ -var arrayPush = require('./_arrayPush'), - isFlattenable = require('./_isFlattenable'); - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -module.exports = baseFlatten; diff --git a/node_modules/lodash/_baseFor.js b/node_modules/lodash/_baseFor.js deleted file mode 100644 index d946590..0000000 --- a/node_modules/lodash/_baseFor.js +++ /dev/null @@ -1,16 +0,0 @@ -var createBaseFor = require('./_createBaseFor'); - -/** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = createBaseFor(); - -module.exports = baseFor; diff --git a/node_modules/lodash/_baseForOwn.js b/node_modules/lodash/_baseForOwn.js deleted file mode 100644 index 503d523..0000000 --- a/node_modules/lodash/_baseForOwn.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseFor = require('./_baseFor'), - keys = require('./keys'); - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); -} - -module.exports = baseForOwn; diff --git a/node_modules/lodash/_baseForOwnRight.js b/node_modules/lodash/_baseForOwnRight.js deleted file mode 100644 index a4b10e6..0000000 --- a/node_modules/lodash/_baseForOwnRight.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseForRight = require('./_baseForRight'), - keys = require('./keys'); - -/** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); -} - -module.exports = baseForOwnRight; diff --git a/node_modules/lodash/_baseForRight.js b/node_modules/lodash/_baseForRight.js deleted file mode 100644 index 32842cd..0000000 --- a/node_modules/lodash/_baseForRight.js +++ /dev/null @@ -1,15 +0,0 @@ -var createBaseFor = require('./_createBaseFor'); - -/** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseForRight = createBaseFor(true); - -module.exports = baseForRight; diff --git a/node_modules/lodash/_baseFunctions.js b/node_modules/lodash/_baseFunctions.js deleted file mode 100644 index d23bc9b..0000000 --- a/node_modules/lodash/_baseFunctions.js +++ /dev/null @@ -1,19 +0,0 @@ -var arrayFilter = require('./_arrayFilter'), - isFunction = require('./isFunction'); - -/** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ -function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); -} - -module.exports = baseFunctions; diff --git a/node_modules/lodash/_baseGet.js b/node_modules/lodash/_baseGet.js deleted file mode 100644 index a194913..0000000 --- a/node_modules/lodash/_baseGet.js +++ /dev/null @@ -1,24 +0,0 @@ -var castPath = require('./_castPath'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = castPath(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -module.exports = baseGet; diff --git a/node_modules/lodash/_baseGetAllKeys.js b/node_modules/lodash/_baseGetAllKeys.js deleted file mode 100644 index 8ad204e..0000000 --- a/node_modules/lodash/_baseGetAllKeys.js +++ /dev/null @@ -1,20 +0,0 @@ -var arrayPush = require('./_arrayPush'), - isArray = require('./isArray'); - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); -} - -module.exports = baseGetAllKeys; diff --git a/node_modules/lodash/_baseGetTag.js b/node_modules/lodash/_baseGetTag.js deleted file mode 100644 index b927ccc..0000000 --- a/node_modules/lodash/_baseGetTag.js +++ /dev/null @@ -1,28 +0,0 @@ -var Symbol = require('./_Symbol'), - getRawTag = require('./_getRawTag'), - objectToString = require('./_objectToString'); - -/** `Object#toString` result references. */ -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - -/** Built-in value references. */ -var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - -/** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); -} - -module.exports = baseGetTag; diff --git a/node_modules/lodash/_baseGt.js b/node_modules/lodash/_baseGt.js deleted file mode 100644 index 502d273..0000000 --- a/node_modules/lodash/_baseGt.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -module.exports = baseGt; diff --git a/node_modules/lodash/_baseHas.js b/node_modules/lodash/_baseHas.js deleted file mode 100644 index 1b73032..0000000 --- a/node_modules/lodash/_baseHas.js +++ /dev/null @@ -1,19 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); -} - -module.exports = baseHas; diff --git a/node_modules/lodash/_baseHasIn.js b/node_modules/lodash/_baseHasIn.js deleted file mode 100644 index 2e0d042..0000000 --- a/node_modules/lodash/_baseHasIn.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -module.exports = baseHasIn; diff --git a/node_modules/lodash/_baseInRange.js b/node_modules/lodash/_baseInRange.js deleted file mode 100644 index ec95666..0000000 --- a/node_modules/lodash/_baseInRange.js +++ /dev/null @@ -1,18 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * The base implementation of `_.inRange` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ -function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); -} - -module.exports = baseInRange; diff --git a/node_modules/lodash/_baseIndexOf.js b/node_modules/lodash/_baseIndexOf.js deleted file mode 100644 index 167e706..0000000 --- a/node_modules/lodash/_baseIndexOf.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIsNaN = require('./_baseIsNaN'), - strictIndexOf = require('./_strictIndexOf'); - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); -} - -module.exports = baseIndexOf; diff --git a/node_modules/lodash/_baseIndexOfWith.js b/node_modules/lodash/_baseIndexOfWith.js deleted file mode 100644 index f815fe0..0000000 --- a/node_modules/lodash/_baseIndexOfWith.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; -} - -module.exports = baseIndexOfWith; diff --git a/node_modules/lodash/_baseIntersection.js b/node_modules/lodash/_baseIntersection.js deleted file mode 100644 index c1d250c..0000000 --- a/node_modules/lodash/_baseIntersection.js +++ /dev/null @@ -1,74 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - arrayMap = require('./_arrayMap'), - baseUnary = require('./_baseUnary'), - cacheHas = require('./_cacheHas'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ -function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -module.exports = baseIntersection; diff --git a/node_modules/lodash/_baseInverter.js b/node_modules/lodash/_baseInverter.js deleted file mode 100644 index fbc337f..0000000 --- a/node_modules/lodash/_baseInverter.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseForOwn = require('./_baseForOwn'); - -/** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ -function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; -} - -module.exports = baseInverter; diff --git a/node_modules/lodash/_baseInvoke.js b/node_modules/lodash/_baseInvoke.js deleted file mode 100644 index 49bcf3c..0000000 --- a/node_modules/lodash/_baseInvoke.js +++ /dev/null @@ -1,24 +0,0 @@ -var apply = require('./_apply'), - castPath = require('./_castPath'), - last = require('./last'), - parent = require('./_parent'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ -function baseInvoke(object, path, args) { - path = castPath(path, object); - object = parent(object, path); - var func = object == null ? object : object[toKey(last(path))]; - return func == null ? undefined : apply(func, object, args); -} - -module.exports = baseInvoke; diff --git a/node_modules/lodash/_baseIsArguments.js b/node_modules/lodash/_baseIsArguments.js deleted file mode 100644 index b3562cc..0000000 --- a/node_modules/lodash/_baseIsArguments.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]'; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; -} - -module.exports = baseIsArguments; diff --git a/node_modules/lodash/_baseIsArrayBuffer.js b/node_modules/lodash/_baseIsArrayBuffer.js deleted file mode 100644 index a2c4f30..0000000 --- a/node_modules/lodash/_baseIsArrayBuffer.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -var arrayBufferTag = '[object ArrayBuffer]'; - -/** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - */ -function baseIsArrayBuffer(value) { - return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; -} - -module.exports = baseIsArrayBuffer; diff --git a/node_modules/lodash/_baseIsDate.js b/node_modules/lodash/_baseIsDate.js deleted file mode 100644 index ba67c78..0000000 --- a/node_modules/lodash/_baseIsDate.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var dateTag = '[object Date]'; - -/** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ -function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; -} - -module.exports = baseIsDate; diff --git a/node_modules/lodash/_baseIsEqual.js b/node_modules/lodash/_baseIsEqual.js deleted file mode 100644 index 00a68a4..0000000 --- a/node_modules/lodash/_baseIsEqual.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseIsEqualDeep = require('./_baseIsEqualDeep'), - isObjectLike = require('./isObjectLike'); - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -module.exports = baseIsEqual; diff --git a/node_modules/lodash/_baseIsEqualDeep.js b/node_modules/lodash/_baseIsEqualDeep.js deleted file mode 100644 index e3cfd6a..0000000 --- a/node_modules/lodash/_baseIsEqualDeep.js +++ /dev/null @@ -1,83 +0,0 @@ -var Stack = require('./_Stack'), - equalArrays = require('./_equalArrays'), - equalByTag = require('./_equalByTag'), - equalObjects = require('./_equalObjects'), - getTag = require('./_getTag'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isTypedArray = require('./isTypedArray'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = objIsArr ? arrayTag : getTag(object), - othTag = othIsArr ? arrayTag : getTag(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -module.exports = baseIsEqualDeep; diff --git a/node_modules/lodash/_baseIsMap.js b/node_modules/lodash/_baseIsMap.js deleted file mode 100644 index 02a4021..0000000 --- a/node_modules/lodash/_baseIsMap.js +++ /dev/null @@ -1,18 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; -} - -module.exports = baseIsMap; diff --git a/node_modules/lodash/_baseIsMatch.js b/node_modules/lodash/_baseIsMatch.js deleted file mode 100644 index 72494be..0000000 --- a/node_modules/lodash/_baseIsMatch.js +++ /dev/null @@ -1,62 +0,0 @@ -var Stack = require('./_Stack'), - baseIsEqual = require('./_baseIsEqual'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -module.exports = baseIsMatch; diff --git a/node_modules/lodash/_baseIsNaN.js b/node_modules/lodash/_baseIsNaN.js deleted file mode 100644 index 316f1eb..0000000 --- a/node_modules/lodash/_baseIsNaN.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -module.exports = baseIsNaN; diff --git a/node_modules/lodash/_baseIsNative.js b/node_modules/lodash/_baseIsNative.js deleted file mode 100644 index 8702330..0000000 --- a/node_modules/lodash/_baseIsNative.js +++ /dev/null @@ -1,47 +0,0 @@ -var isFunction = require('./isFunction'), - isMasked = require('./_isMasked'), - isObject = require('./isObject'), - toSource = require('./_toSource'); - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -module.exports = baseIsNative; diff --git a/node_modules/lodash/_baseIsRegExp.js b/node_modules/lodash/_baseIsRegExp.js deleted file mode 100644 index 6cd7c1a..0000000 --- a/node_modules/lodash/_baseIsRegExp.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var regexpTag = '[object RegExp]'; - -/** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ -function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; -} - -module.exports = baseIsRegExp; diff --git a/node_modules/lodash/_baseIsSet.js b/node_modules/lodash/_baseIsSet.js deleted file mode 100644 index 6dee367..0000000 --- a/node_modules/lodash/_baseIsSet.js +++ /dev/null @@ -1,18 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; -} - -module.exports = baseIsSet; diff --git a/node_modules/lodash/_baseIsTypedArray.js b/node_modules/lodash/_baseIsTypedArray.js deleted file mode 100644 index 1edb32f..0000000 --- a/node_modules/lodash/_baseIsTypedArray.js +++ /dev/null @@ -1,60 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isLength = require('./isLength'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag] = -typedArrayTags[setTag] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag] = false; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} - -module.exports = baseIsTypedArray; diff --git a/node_modules/lodash/_baseIteratee.js b/node_modules/lodash/_baseIteratee.js deleted file mode 100644 index 995c257..0000000 --- a/node_modules/lodash/_baseIteratee.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseMatches = require('./_baseMatches'), - baseMatchesProperty = require('./_baseMatchesProperty'), - identity = require('./identity'), - isArray = require('./isArray'), - property = require('./property'); - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); -} - -module.exports = baseIteratee; diff --git a/node_modules/lodash/_baseKeys.js b/node_modules/lodash/_baseKeys.js deleted file mode 100644 index 45e9e6f..0000000 --- a/node_modules/lodash/_baseKeys.js +++ /dev/null @@ -1,30 +0,0 @@ -var isPrototype = require('./_isPrototype'), - nativeKeys = require('./_nativeKeys'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -module.exports = baseKeys; diff --git a/node_modules/lodash/_baseKeysIn.js b/node_modules/lodash/_baseKeysIn.js deleted file mode 100644 index ea8a0a1..0000000 --- a/node_modules/lodash/_baseKeysIn.js +++ /dev/null @@ -1,33 +0,0 @@ -var isObject = require('./isObject'), - isPrototype = require('./_isPrototype'), - nativeKeysIn = require('./_nativeKeysIn'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -module.exports = baseKeysIn; diff --git a/node_modules/lodash/_baseLodash.js b/node_modules/lodash/_baseLodash.js deleted file mode 100644 index f76c790..0000000 --- a/node_modules/lodash/_baseLodash.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ -function baseLodash() { - // No operation performed. -} - -module.exports = baseLodash; diff --git a/node_modules/lodash/_baseLt.js b/node_modules/lodash/_baseLt.js deleted file mode 100644 index 8674d29..0000000 --- a/node_modules/lodash/_baseLt.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -module.exports = baseLt; diff --git a/node_modules/lodash/_baseMap.js b/node_modules/lodash/_baseMap.js deleted file mode 100644 index 0bf5cea..0000000 --- a/node_modules/lodash/_baseMap.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseEach = require('./_baseEach'), - isArrayLike = require('./isArrayLike'); - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -module.exports = baseMap; diff --git a/node_modules/lodash/_baseMatches.js b/node_modules/lodash/_baseMatches.js deleted file mode 100644 index e56582a..0000000 --- a/node_modules/lodash/_baseMatches.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'), - matchesStrictComparable = require('./_matchesStrictComparable'); - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; -} - -module.exports = baseMatches; diff --git a/node_modules/lodash/_baseMatchesProperty.js b/node_modules/lodash/_baseMatchesProperty.js deleted file mode 100644 index 24afd89..0000000 --- a/node_modules/lodash/_baseMatchesProperty.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'), - get = require('./get'), - hasIn = require('./hasIn'), - isKey = require('./_isKey'), - isStrictComparable = require('./_isStrictComparable'), - matchesStrictComparable = require('./_matchesStrictComparable'), - toKey = require('./_toKey'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; -} - -module.exports = baseMatchesProperty; diff --git a/node_modules/lodash/_baseMean.js b/node_modules/lodash/_baseMean.js deleted file mode 100644 index fa9e00a..0000000 --- a/node_modules/lodash/_baseMean.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseSum = require('./_baseSum'); - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ -function baseMean(array, iteratee) { - var length = array == null ? 0 : array.length; - return length ? (baseSum(array, iteratee) / length) : NAN; -} - -module.exports = baseMean; diff --git a/node_modules/lodash/_baseMerge.js b/node_modules/lodash/_baseMerge.js deleted file mode 100644 index c98b5eb..0000000 --- a/node_modules/lodash/_baseMerge.js +++ /dev/null @@ -1,42 +0,0 @@ -var Stack = require('./_Stack'), - assignMergeValue = require('./_assignMergeValue'), - baseFor = require('./_baseFor'), - baseMergeDeep = require('./_baseMergeDeep'), - isObject = require('./isObject'), - keysIn = require('./keysIn'), - safeGet = require('./_safeGet'); - -/** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - stack || (stack = new Stack); - if (isObject(srcValue)) { - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); -} - -module.exports = baseMerge; diff --git a/node_modules/lodash/_baseMergeDeep.js b/node_modules/lodash/_baseMergeDeep.js deleted file mode 100644 index 4679e8d..0000000 --- a/node_modules/lodash/_baseMergeDeep.js +++ /dev/null @@ -1,94 +0,0 @@ -var assignMergeValue = require('./_assignMergeValue'), - cloneBuffer = require('./_cloneBuffer'), - cloneTypedArray = require('./_cloneTypedArray'), - copyArray = require('./_copyArray'), - initCloneObject = require('./_initCloneObject'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isArrayLikeObject = require('./isArrayLikeObject'), - isBuffer = require('./isBuffer'), - isFunction = require('./isFunction'), - isObject = require('./isObject'), - isPlainObject = require('./isPlainObject'), - isTypedArray = require('./isTypedArray'), - safeGet = require('./_safeGet'), - toPlainObject = require('./toPlainObject'); - -/** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = safeGet(object, key), - srcValue = safeGet(source, key), - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || isFunction(objValue)) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); -} - -module.exports = baseMergeDeep; diff --git a/node_modules/lodash/_baseNth.js b/node_modules/lodash/_baseNth.js deleted file mode 100644 index 0403c2a..0000000 --- a/node_modules/lodash/_baseNth.js +++ /dev/null @@ -1,20 +0,0 @@ -var isIndex = require('./_isIndex'); - -/** - * The base implementation of `_.nth` which doesn't coerce arguments. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ -function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; -} - -module.exports = baseNth; diff --git a/node_modules/lodash/_baseOrderBy.js b/node_modules/lodash/_baseOrderBy.js deleted file mode 100644 index 775a017..0000000 --- a/node_modules/lodash/_baseOrderBy.js +++ /dev/null @@ -1,49 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseGet = require('./_baseGet'), - baseIteratee = require('./_baseIteratee'), - baseMap = require('./_baseMap'), - baseSortBy = require('./_baseSortBy'), - baseUnary = require('./_baseUnary'), - compareMultiple = require('./_compareMultiple'), - identity = require('./identity'), - isArray = require('./isArray'); - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = arrayMap(iteratees, function(iteratee) { - if (isArray(iteratee)) { - return function(value) { - return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } - } - return iteratee; - }); - } else { - iteratees = [identity]; - } - - var index = -1; - iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); -} - -module.exports = baseOrderBy; diff --git a/node_modules/lodash/_basePick.js b/node_modules/lodash/_basePick.js deleted file mode 100644 index 09b458a..0000000 --- a/node_modules/lodash/_basePick.js +++ /dev/null @@ -1,19 +0,0 @@ -var basePickBy = require('./_basePickBy'), - hasIn = require('./hasIn'); - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, paths) { - return basePickBy(object, paths, function(value, path) { - return hasIn(object, path); - }); -} - -module.exports = basePick; diff --git a/node_modules/lodash/_basePickBy.js b/node_modules/lodash/_basePickBy.js deleted file mode 100644 index 85be68c..0000000 --- a/node_modules/lodash/_basePickBy.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseGet = require('./_baseGet'), - baseSet = require('./_baseSet'), - castPath = require('./_castPath'); - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = baseGet(object, path); - - if (predicate(value, path)) { - baseSet(result, castPath(path, object), value); - } - } - return result; -} - -module.exports = basePickBy; diff --git a/node_modules/lodash/_baseProperty.js b/node_modules/lodash/_baseProperty.js deleted file mode 100644 index 496281e..0000000 --- a/node_modules/lodash/_baseProperty.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -module.exports = baseProperty; diff --git a/node_modules/lodash/_basePropertyDeep.js b/node_modules/lodash/_basePropertyDeep.js deleted file mode 100644 index 1e5aae5..0000000 --- a/node_modules/lodash/_basePropertyDeep.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGet = require('./_baseGet'); - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; -} - -module.exports = basePropertyDeep; diff --git a/node_modules/lodash/_basePropertyOf.js b/node_modules/lodash/_basePropertyOf.js deleted file mode 100644 index 4617399..0000000 --- a/node_modules/lodash/_basePropertyOf.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; -} - -module.exports = basePropertyOf; diff --git a/node_modules/lodash/_basePullAll.js b/node_modules/lodash/_basePullAll.js deleted file mode 100644 index 305720e..0000000 --- a/node_modules/lodash/_basePullAll.js +++ /dev/null @@ -1,51 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIndexOf = require('./_baseIndexOf'), - baseIndexOfWith = require('./_baseIndexOfWith'), - baseUnary = require('./_baseUnary'), - copyArray = require('./_copyArray'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ -function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; -} - -module.exports = basePullAll; diff --git a/node_modules/lodash/_basePullAt.js b/node_modules/lodash/_basePullAt.js deleted file mode 100644 index c3e9e71..0000000 --- a/node_modules/lodash/_basePullAt.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseUnset = require('./_baseUnset'), - isIndex = require('./_isIndex'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ -function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } else { - baseUnset(array, index); - } - } - } - return array; -} - -module.exports = basePullAt; diff --git a/node_modules/lodash/_baseRandom.js b/node_modules/lodash/_baseRandom.js deleted file mode 100644 index 94f76a7..0000000 --- a/node_modules/lodash/_baseRandom.js +++ /dev/null @@ -1,18 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeRandom = Math.random; - -/** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ -function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); -} - -module.exports = baseRandom; diff --git a/node_modules/lodash/_baseRange.js b/node_modules/lodash/_baseRange.js deleted file mode 100644 index 0fb8e41..0000000 --- a/node_modules/lodash/_baseRange.js +++ /dev/null @@ -1,28 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -module.exports = baseRange; diff --git a/node_modules/lodash/_baseReduce.js b/node_modules/lodash/_baseReduce.js deleted file mode 100644 index 5a1f8b5..0000000 --- a/node_modules/lodash/_baseReduce.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -module.exports = baseReduce; diff --git a/node_modules/lodash/_baseRepeat.js b/node_modules/lodash/_baseRepeat.js deleted file mode 100644 index ee44c31..0000000 --- a/node_modules/lodash/_baseRepeat.js +++ /dev/null @@ -1,35 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor; - -/** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ -function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - - return result; -} - -module.exports = baseRepeat; diff --git a/node_modules/lodash/_baseRest.js b/node_modules/lodash/_baseRest.js deleted file mode 100644 index d0dc4bd..0000000 --- a/node_modules/lodash/_baseRest.js +++ /dev/null @@ -1,17 +0,0 @@ -var identity = require('./identity'), - overRest = require('./_overRest'), - setToString = require('./_setToString'); - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); -} - -module.exports = baseRest; diff --git a/node_modules/lodash/_baseSample.js b/node_modules/lodash/_baseSample.js deleted file mode 100644 index 58582b9..0000000 --- a/node_modules/lodash/_baseSample.js +++ /dev/null @@ -1,15 +0,0 @@ -var arraySample = require('./_arraySample'), - values = require('./values'); - -/** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ -function baseSample(collection) { - return arraySample(values(collection)); -} - -module.exports = baseSample; diff --git a/node_modules/lodash/_baseSampleSize.js b/node_modules/lodash/_baseSampleSize.js deleted file mode 100644 index 5c90ec5..0000000 --- a/node_modules/lodash/_baseSampleSize.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseClamp = require('./_baseClamp'), - shuffleSelf = require('./_shuffleSelf'), - values = require('./values'); - -/** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ -function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); -} - -module.exports = baseSampleSize; diff --git a/node_modules/lodash/_baseSet.js b/node_modules/lodash/_baseSet.js deleted file mode 100644 index 99f4fbf..0000000 --- a/node_modules/lodash/_baseSet.js +++ /dev/null @@ -1,51 +0,0 @@ -var assignValue = require('./_assignValue'), - castPath = require('./_castPath'), - isIndex = require('./_isIndex'), - isObject = require('./isObject'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -module.exports = baseSet; diff --git a/node_modules/lodash/_baseSetData.js b/node_modules/lodash/_baseSetData.js deleted file mode 100644 index c409947..0000000 --- a/node_modules/lodash/_baseSetData.js +++ /dev/null @@ -1,17 +0,0 @@ -var identity = require('./identity'), - metaMap = require('./_metaMap'); - -/** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ -var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; -}; - -module.exports = baseSetData; diff --git a/node_modules/lodash/_baseSetToString.js b/node_modules/lodash/_baseSetToString.js deleted file mode 100644 index 89eaca3..0000000 --- a/node_modules/lodash/_baseSetToString.js +++ /dev/null @@ -1,22 +0,0 @@ -var constant = require('./constant'), - defineProperty = require('./_defineProperty'), - identity = require('./identity'); - -/** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); -}; - -module.exports = baseSetToString; diff --git a/node_modules/lodash/_baseShuffle.js b/node_modules/lodash/_baseShuffle.js deleted file mode 100644 index 023077a..0000000 --- a/node_modules/lodash/_baseShuffle.js +++ /dev/null @@ -1,15 +0,0 @@ -var shuffleSelf = require('./_shuffleSelf'), - values = require('./values'); - -/** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function baseShuffle(collection) { - return shuffleSelf(values(collection)); -} - -module.exports = baseShuffle; diff --git a/node_modules/lodash/_baseSlice.js b/node_modules/lodash/_baseSlice.js deleted file mode 100644 index 786f6c9..0000000 --- a/node_modules/lodash/_baseSlice.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ -function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; -} - -module.exports = baseSlice; diff --git a/node_modules/lodash/_baseSome.js b/node_modules/lodash/_baseSome.js deleted file mode 100644 index 58f3f44..0000000 --- a/node_modules/lodash/_baseSome.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; -} - -module.exports = baseSome; diff --git a/node_modules/lodash/_baseSortBy.js b/node_modules/lodash/_baseSortBy.js deleted file mode 100644 index a25c92e..0000000 --- a/node_modules/lodash/_baseSortBy.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -module.exports = baseSortBy; diff --git a/node_modules/lodash/_baseSortedIndex.js b/node_modules/lodash/_baseSortedIndex.js deleted file mode 100644 index 638c366..0000000 --- a/node_modules/lodash/_baseSortedIndex.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseSortedIndexBy = require('./_baseSortedIndexBy'), - identity = require('./identity'), - isSymbol = require('./isSymbol'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - -/** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ -function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array == null ? low : array.length; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); -} - -module.exports = baseSortedIndex; diff --git a/node_modules/lodash/_baseSortedIndexBy.js b/node_modules/lodash/_baseSortedIndexBy.js deleted file mode 100644 index c247b37..0000000 --- a/node_modules/lodash/_baseSortedIndexBy.js +++ /dev/null @@ -1,67 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeMin = Math.min; - -/** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ -function baseSortedIndexBy(array, value, iteratee, retHighest) { - var low = 0, - high = array == null ? 0 : array.length; - if (high === 0) { - return 0; - } - - value = iteratee(value); - var valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); -} - -module.exports = baseSortedIndexBy; diff --git a/node_modules/lodash/_baseSortedUniq.js b/node_modules/lodash/_baseSortedUniq.js deleted file mode 100644 index 802159a..0000000 --- a/node_modules/lodash/_baseSortedUniq.js +++ /dev/null @@ -1,30 +0,0 @@ -var eq = require('./eq'); - -/** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; -} - -module.exports = baseSortedUniq; diff --git a/node_modules/lodash/_baseSum.js b/node_modules/lodash/_baseSum.js deleted file mode 100644 index a9e84c1..0000000 --- a/node_modules/lodash/_baseSum.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ -function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; -} - -module.exports = baseSum; diff --git a/node_modules/lodash/_baseTimes.js b/node_modules/lodash/_baseTimes.js deleted file mode 100644 index 0603fc3..0000000 --- a/node_modules/lodash/_baseTimes.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -module.exports = baseTimes; diff --git a/node_modules/lodash/_baseToNumber.js b/node_modules/lodash/_baseToNumber.js deleted file mode 100644 index 04859f3..0000000 --- a/node_modules/lodash/_baseToNumber.js +++ /dev/null @@ -1,24 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ -function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; -} - -module.exports = baseToNumber; diff --git a/node_modules/lodash/_baseToPairs.js b/node_modules/lodash/_baseToPairs.js deleted file mode 100644 index bff1991..0000000 --- a/node_modules/lodash/_baseToPairs.js +++ /dev/null @@ -1,18 +0,0 @@ -var arrayMap = require('./_arrayMap'); - -/** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ -function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); -} - -module.exports = baseToPairs; diff --git a/node_modules/lodash/_baseToString.js b/node_modules/lodash/_baseToString.js deleted file mode 100644 index ada6ad2..0000000 --- a/node_modules/lodash/_baseToString.js +++ /dev/null @@ -1,37 +0,0 @@ -var Symbol = require('./_Symbol'), - arrayMap = require('./_arrayMap'), - isArray = require('./isArray'), - isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -module.exports = baseToString; diff --git a/node_modules/lodash/_baseTrim.js b/node_modules/lodash/_baseTrim.js deleted file mode 100644 index 3e2797d..0000000 --- a/node_modules/lodash/_baseTrim.js +++ /dev/null @@ -1,19 +0,0 @@ -var trimmedEndIndex = require('./_trimmedEndIndex'); - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -module.exports = baseTrim; diff --git a/node_modules/lodash/_baseUnary.js b/node_modules/lodash/_baseUnary.js deleted file mode 100644 index 98639e9..0000000 --- a/node_modules/lodash/_baseUnary.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -module.exports = baseUnary; diff --git a/node_modules/lodash/_baseUniq.js b/node_modules/lodash/_baseUniq.js deleted file mode 100644 index aea459d..0000000 --- a/node_modules/lodash/_baseUniq.js +++ /dev/null @@ -1,72 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - cacheHas = require('./_cacheHas'), - createSet = require('./_createSet'), - setToArray = require('./_setToArray'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -module.exports = baseUniq; diff --git a/node_modules/lodash/_baseUnset.js b/node_modules/lodash/_baseUnset.js deleted file mode 100644 index 05aa28f..0000000 --- a/node_modules/lodash/_baseUnset.js +++ /dev/null @@ -1,65 +0,0 @@ -var castPath = require('./_castPath'), - last = require('./last'), - parent = require('./_parent'), - toKey = require('./_toKey'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The property path to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ -function baseUnset(object, path) { - path = castPath(path, object); - - // Prevent prototype pollution, see: https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg - var index = -1, - length = path.length; - - if (!length) { - return true; - } - - var isRootPrimitive = object == null || (typeof object !== 'object' && typeof object !== 'function'); - - while (++index < length) { - var key = path[index]; - - // skip non-string keys (e.g., Symbols, numbers) - if (typeof key !== 'string') { - continue; - } - - // Always block "__proto__" anywhere in the path if it's not expected - if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) { - return false; - } - - // Block "constructor.prototype" chains - if (key === 'constructor' && - (index + 1) < length && - typeof path[index + 1] === 'string' && - path[index + 1] === 'prototype') { - - // Allow ONLY when the path starts at a primitive root, e.g., _.unset(0, 'constructor.prototype.a') - if (isRootPrimitive && index === 0) { - continue; - } - - return false; - } - } - - var obj = parent(object, path); - return obj == null || delete obj[toKey(last(path))]; -} - -module.exports = baseUnset; diff --git a/node_modules/lodash/_baseUpdate.js b/node_modules/lodash/_baseUpdate.js deleted file mode 100644 index 92a6237..0000000 --- a/node_modules/lodash/_baseUpdate.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseGet = require('./_baseGet'), - baseSet = require('./_baseSet'); - -/** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); -} - -module.exports = baseUpdate; diff --git a/node_modules/lodash/_baseValues.js b/node_modules/lodash/_baseValues.js deleted file mode 100644 index b95faad..0000000 --- a/node_modules/lodash/_baseValues.js +++ /dev/null @@ -1,19 +0,0 @@ -var arrayMap = require('./_arrayMap'); - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); -} - -module.exports = baseValues; diff --git a/node_modules/lodash/_baseWhile.js b/node_modules/lodash/_baseWhile.js deleted file mode 100644 index 07eac61..0000000 --- a/node_modules/lodash/_baseWhile.js +++ /dev/null @@ -1,26 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ -function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length) && - predicate(array[index], index, array)) {} - - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); -} - -module.exports = baseWhile; diff --git a/node_modules/lodash/_baseWrapperValue.js b/node_modules/lodash/_baseWrapperValue.js deleted file mode 100644 index 443e0df..0000000 --- a/node_modules/lodash/_baseWrapperValue.js +++ /dev/null @@ -1,25 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - arrayPush = require('./_arrayPush'), - arrayReduce = require('./_arrayReduce'); - -/** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ -function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); -} - -module.exports = baseWrapperValue; diff --git a/node_modules/lodash/_baseXor.js b/node_modules/lodash/_baseXor.js deleted file mode 100644 index 8e69338..0000000 --- a/node_modules/lodash/_baseXor.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseUniq = require('./_baseUniq'); - -/** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ -function baseXor(arrays, iteratee, comparator) { - var length = arrays.length; - if (length < 2) { - return length ? baseUniq(arrays[0]) : []; - } - var index = -1, - result = Array(length); - - while (++index < length) { - var array = arrays[index], - othIndex = -1; - - while (++othIndex < length) { - if (othIndex != index) { - result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); - } - } - } - return baseUniq(baseFlatten(result, 1), iteratee, comparator); -} - -module.exports = baseXor; diff --git a/node_modules/lodash/_baseZipObject.js b/node_modules/lodash/_baseZipObject.js deleted file mode 100644 index 401f85b..0000000 --- a/node_modules/lodash/_baseZipObject.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -module.exports = baseZipObject; diff --git a/node_modules/lodash/_cacheHas.js b/node_modules/lodash/_cacheHas.js deleted file mode 100644 index 2dec892..0000000 --- a/node_modules/lodash/_cacheHas.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -module.exports = cacheHas; diff --git a/node_modules/lodash/_castArrayLikeObject.js b/node_modules/lodash/_castArrayLikeObject.js deleted file mode 100644 index 92c75fa..0000000 --- a/node_modules/lodash/_castArrayLikeObject.js +++ /dev/null @@ -1,14 +0,0 @@ -var isArrayLikeObject = require('./isArrayLikeObject'); - -/** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ -function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; -} - -module.exports = castArrayLikeObject; diff --git a/node_modules/lodash/_castFunction.js b/node_modules/lodash/_castFunction.js deleted file mode 100644 index 98c91ae..0000000 --- a/node_modules/lodash/_castFunction.js +++ /dev/null @@ -1,14 +0,0 @@ -var identity = require('./identity'); - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : identity; -} - -module.exports = castFunction; diff --git a/node_modules/lodash/_castPath.js b/node_modules/lodash/_castPath.js deleted file mode 100644 index 017e4c1..0000000 --- a/node_modules/lodash/_castPath.js +++ /dev/null @@ -1,21 +0,0 @@ -var isArray = require('./isArray'), - isKey = require('./_isKey'), - stringToPath = require('./_stringToPath'), - toString = require('./toString'); - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); -} - -module.exports = castPath; diff --git a/node_modules/lodash/_castRest.js b/node_modules/lodash/_castRest.js deleted file mode 100644 index 213c66f..0000000 --- a/node_modules/lodash/_castRest.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseRest = require('./_baseRest'); - -/** - * A `baseRest` alias which can be replaced with `identity` by module - * replacement plugins. - * - * @private - * @type {Function} - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -var castRest = baseRest; - -module.exports = castRest; diff --git a/node_modules/lodash/_castSlice.js b/node_modules/lodash/_castSlice.js deleted file mode 100644 index 071faeb..0000000 --- a/node_modules/lodash/_castSlice.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ -function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); -} - -module.exports = castSlice; diff --git a/node_modules/lodash/_charsEndIndex.js b/node_modules/lodash/_charsEndIndex.js deleted file mode 100644 index 07908ff..0000000 --- a/node_modules/lodash/_charsEndIndex.js +++ /dev/null @@ -1,19 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ -function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; -} - -module.exports = charsEndIndex; diff --git a/node_modules/lodash/_charsStartIndex.js b/node_modules/lodash/_charsStartIndex.js deleted file mode 100644 index b17afd2..0000000 --- a/node_modules/lodash/_charsStartIndex.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ -function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; -} - -module.exports = charsStartIndex; diff --git a/node_modules/lodash/_cloneArrayBuffer.js b/node_modules/lodash/_cloneArrayBuffer.js deleted file mode 100644 index c3d8f6e..0000000 --- a/node_modules/lodash/_cloneArrayBuffer.js +++ /dev/null @@ -1,16 +0,0 @@ -var Uint8Array = require('./_Uint8Array'); - -/** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ -function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; -} - -module.exports = cloneArrayBuffer; diff --git a/node_modules/lodash/_cloneBuffer.js b/node_modules/lodash/_cloneBuffer.js deleted file mode 100644 index 27c4810..0000000 --- a/node_modules/lodash/_cloneBuffer.js +++ /dev/null @@ -1,35 +0,0 @@ -var root = require('./_root'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Built-in value references. */ -var Buffer = moduleExports ? root.Buffer : undefined, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; - -/** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ -function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; -} - -module.exports = cloneBuffer; diff --git a/node_modules/lodash/_cloneDataView.js b/node_modules/lodash/_cloneDataView.js deleted file mode 100644 index 9c9b7b0..0000000 --- a/node_modules/lodash/_cloneDataView.js +++ /dev/null @@ -1,16 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'); - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -module.exports = cloneDataView; diff --git a/node_modules/lodash/_cloneRegExp.js b/node_modules/lodash/_cloneRegExp.js deleted file mode 100644 index 64a30df..0000000 --- a/node_modules/lodash/_cloneRegExp.js +++ /dev/null @@ -1,17 +0,0 @@ -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -module.exports = cloneRegExp; diff --git a/node_modules/lodash/_cloneSymbol.js b/node_modules/lodash/_cloneSymbol.js deleted file mode 100644 index bede39f..0000000 --- a/node_modules/lodash/_cloneSymbol.js +++ /dev/null @@ -1,18 +0,0 @@ -var Symbol = require('./_Symbol'); - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -module.exports = cloneSymbol; diff --git a/node_modules/lodash/_cloneTypedArray.js b/node_modules/lodash/_cloneTypedArray.js deleted file mode 100644 index 7aad84d..0000000 --- a/node_modules/lodash/_cloneTypedArray.js +++ /dev/null @@ -1,16 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'); - -/** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ -function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); -} - -module.exports = cloneTypedArray; diff --git a/node_modules/lodash/_compareAscending.js b/node_modules/lodash/_compareAscending.js deleted file mode 100644 index 8dc2791..0000000 --- a/node_modules/lodash/_compareAscending.js +++ /dev/null @@ -1,41 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -module.exports = compareAscending; diff --git a/node_modules/lodash/_compareMultiple.js b/node_modules/lodash/_compareMultiple.js deleted file mode 100644 index ad61f0f..0000000 --- a/node_modules/lodash/_compareMultiple.js +++ /dev/null @@ -1,44 +0,0 @@ -var compareAscending = require('./_compareAscending'); - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -module.exports = compareMultiple; diff --git a/node_modules/lodash/_composeArgs.js b/node_modules/lodash/_composeArgs.js deleted file mode 100644 index 1ce40f4..0000000 --- a/node_modules/lodash/_composeArgs.js +++ /dev/null @@ -1,39 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ -function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; -} - -module.exports = composeArgs; diff --git a/node_modules/lodash/_composeArgsRight.js b/node_modules/lodash/_composeArgsRight.js deleted file mode 100644 index 8dc588d..0000000 --- a/node_modules/lodash/_composeArgsRight.js +++ /dev/null @@ -1,41 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ -function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; -} - -module.exports = composeArgsRight; diff --git a/node_modules/lodash/_copyArray.js b/node_modules/lodash/_copyArray.js deleted file mode 100644 index cd94d5d..0000000 --- a/node_modules/lodash/_copyArray.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -module.exports = copyArray; diff --git a/node_modules/lodash/_copyObject.js b/node_modules/lodash/_copyObject.js deleted file mode 100644 index 2f2a5c2..0000000 --- a/node_modules/lodash/_copyObject.js +++ /dev/null @@ -1,40 +0,0 @@ -var assignValue = require('./_assignValue'), - baseAssignValue = require('./_baseAssignValue'); - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; -} - -module.exports = copyObject; diff --git a/node_modules/lodash/_copySymbols.js b/node_modules/lodash/_copySymbols.js deleted file mode 100644 index c35944a..0000000 --- a/node_modules/lodash/_copySymbols.js +++ /dev/null @@ -1,16 +0,0 @@ -var copyObject = require('./_copyObject'), - getSymbols = require('./_getSymbols'); - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); -} - -module.exports = copySymbols; diff --git a/node_modules/lodash/_copySymbolsIn.js b/node_modules/lodash/_copySymbolsIn.js deleted file mode 100644 index fdf20a7..0000000 --- a/node_modules/lodash/_copySymbolsIn.js +++ /dev/null @@ -1,16 +0,0 @@ -var copyObject = require('./_copyObject'), - getSymbolsIn = require('./_getSymbolsIn'); - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); -} - -module.exports = copySymbolsIn; diff --git a/node_modules/lodash/_coreJsData.js b/node_modules/lodash/_coreJsData.js deleted file mode 100644 index f8e5b4e..0000000 --- a/node_modules/lodash/_coreJsData.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -module.exports = coreJsData; diff --git a/node_modules/lodash/_countHolders.js b/node_modules/lodash/_countHolders.js deleted file mode 100644 index 718fcda..0000000 --- a/node_modules/lodash/_countHolders.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ -function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; -} - -module.exports = countHolders; diff --git a/node_modules/lodash/_createAggregator.js b/node_modules/lodash/_createAggregator.js deleted file mode 100644 index 0be42c4..0000000 --- a/node_modules/lodash/_createAggregator.js +++ /dev/null @@ -1,23 +0,0 @@ -var arrayAggregator = require('./_arrayAggregator'), - baseAggregator = require('./_baseAggregator'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ -function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, baseIteratee(iteratee, 2), accumulator); - }; -} - -module.exports = createAggregator; diff --git a/node_modules/lodash/_createAssigner.js b/node_modules/lodash/_createAssigner.js deleted file mode 100644 index 1f904c5..0000000 --- a/node_modules/lodash/_createAssigner.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseRest = require('./_baseRest'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -module.exports = createAssigner; diff --git a/node_modules/lodash/_createBaseEach.js b/node_modules/lodash/_createBaseEach.js deleted file mode 100644 index d24fdd1..0000000 --- a/node_modules/lodash/_createBaseEach.js +++ /dev/null @@ -1,32 +0,0 @@ -var isArrayLike = require('./isArrayLike'); - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -module.exports = createBaseEach; diff --git a/node_modules/lodash/_createBaseFor.js b/node_modules/lodash/_createBaseFor.js deleted file mode 100644 index 94cbf29..0000000 --- a/node_modules/lodash/_createBaseFor.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} - -module.exports = createBaseFor; diff --git a/node_modules/lodash/_createBind.js b/node_modules/lodash/_createBind.js deleted file mode 100644 index 07cb99f..0000000 --- a/node_modules/lodash/_createBind.js +++ /dev/null @@ -1,28 +0,0 @@ -var createCtor = require('./_createCtor'), - root = require('./_root'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1; - -/** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; -} - -module.exports = createBind; diff --git a/node_modules/lodash/_createCaseFirst.js b/node_modules/lodash/_createCaseFirst.js deleted file mode 100644 index fe8ea48..0000000 --- a/node_modules/lodash/_createCaseFirst.js +++ /dev/null @@ -1,33 +0,0 @@ -var castSlice = require('./_castSlice'), - hasUnicode = require('./_hasUnicode'), - stringToArray = require('./_stringToArray'), - toString = require('./toString'); - -/** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ -function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; -} - -module.exports = createCaseFirst; diff --git a/node_modules/lodash/_createCompounder.js b/node_modules/lodash/_createCompounder.js deleted file mode 100644 index 8d4cee2..0000000 --- a/node_modules/lodash/_createCompounder.js +++ /dev/null @@ -1,24 +0,0 @@ -var arrayReduce = require('./_arrayReduce'), - deburr = require('./deburr'), - words = require('./words'); - -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]"; - -/** Used to match apostrophes. */ -var reApos = RegExp(rsApos, 'g'); - -/** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ -function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; -} - -module.exports = createCompounder; diff --git a/node_modules/lodash/_createCtor.js b/node_modules/lodash/_createCtor.js deleted file mode 100644 index 9047aa5..0000000 --- a/node_modules/lodash/_createCtor.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseCreate = require('./_baseCreate'), - isObject = require('./isObject'); - -/** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ -function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; -} - -module.exports = createCtor; diff --git a/node_modules/lodash/_createCurry.js b/node_modules/lodash/_createCurry.js deleted file mode 100644 index f06c2cd..0000000 --- a/node_modules/lodash/_createCurry.js +++ /dev/null @@ -1,46 +0,0 @@ -var apply = require('./_apply'), - createCtor = require('./_createCtor'), - createHybrid = require('./_createHybrid'), - createRecurry = require('./_createRecurry'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'), - root = require('./_root'); - -/** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; -} - -module.exports = createCurry; diff --git a/node_modules/lodash/_createFind.js b/node_modules/lodash/_createFind.js deleted file mode 100644 index 8859ff8..0000000 --- a/node_modules/lodash/_createFind.js +++ /dev/null @@ -1,25 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - isArrayLike = require('./isArrayLike'), - keys = require('./keys'); - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = baseIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; -} - -module.exports = createFind; diff --git a/node_modules/lodash/_createFlow.js b/node_modules/lodash/_createFlow.js deleted file mode 100644 index baaddbf..0000000 --- a/node_modules/lodash/_createFlow.js +++ /dev/null @@ -1,78 +0,0 @@ -var LodashWrapper = require('./_LodashWrapper'), - flatRest = require('./_flatRest'), - getData = require('./_getData'), - getFuncName = require('./_getFuncName'), - isArray = require('./isArray'), - isLaziable = require('./_isLaziable'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** Used to compose bitmasks for function metadata. */ -var WRAP_CURRY_FLAG = 8, - WRAP_PARTIAL_FLAG = 32, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256; - -/** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ -function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && - data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && isArray(value)) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); -} - -module.exports = createFlow; diff --git a/node_modules/lodash/_createHybrid.js b/node_modules/lodash/_createHybrid.js deleted file mode 100644 index b671bd1..0000000 --- a/node_modules/lodash/_createHybrid.js +++ /dev/null @@ -1,92 +0,0 @@ -var composeArgs = require('./_composeArgs'), - composeArgsRight = require('./_composeArgsRight'), - countHolders = require('./_countHolders'), - createCtor = require('./_createCtor'), - createRecurry = require('./_createRecurry'), - getHolder = require('./_getHolder'), - reorder = require('./_reorder'), - replaceHolders = require('./_replaceHolders'), - root = require('./_root'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_ARY_FLAG = 128, - WRAP_FLIP_FLAG = 512; - -/** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & WRAP_ARY_FLAG, - isBind = bitmask & WRAP_BIND_FLAG, - isBindKey = bitmask & WRAP_BIND_KEY_FLAG, - isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), - isFlip = bitmask & WRAP_FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; -} - -module.exports = createHybrid; diff --git a/node_modules/lodash/_createInverter.js b/node_modules/lodash/_createInverter.js deleted file mode 100644 index 6c0c562..0000000 --- a/node_modules/lodash/_createInverter.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseInverter = require('./_baseInverter'); - -/** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ -function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; -} - -module.exports = createInverter; diff --git a/node_modules/lodash/_createMathOperation.js b/node_modules/lodash/_createMathOperation.js deleted file mode 100644 index f1e238a..0000000 --- a/node_modules/lodash/_createMathOperation.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseToNumber = require('./_baseToNumber'), - baseToString = require('./_baseToString'); - -/** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @param {number} [defaultValue] The value used for `undefined` arguments. - * @returns {Function} Returns the new mathematical operation function. - */ -function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return defaultValue; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; -} - -module.exports = createMathOperation; diff --git a/node_modules/lodash/_createOver.js b/node_modules/lodash/_createOver.js deleted file mode 100644 index 3b94551..0000000 --- a/node_modules/lodash/_createOver.js +++ /dev/null @@ -1,27 +0,0 @@ -var apply = require('./_apply'), - arrayMap = require('./_arrayMap'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'), - baseUnary = require('./_baseUnary'), - flatRest = require('./_flatRest'); - -/** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ -function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); -} - -module.exports = createOver; diff --git a/node_modules/lodash/_createPadding.js b/node_modules/lodash/_createPadding.js deleted file mode 100644 index 2124612..0000000 --- a/node_modules/lodash/_createPadding.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseRepeat = require('./_baseRepeat'), - baseToString = require('./_baseToString'), - castSlice = require('./_castSlice'), - hasUnicode = require('./_hasUnicode'), - stringSize = require('./_stringSize'), - stringToArray = require('./_stringToArray'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil; - -/** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ -function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); - - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return hasUnicode(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); -} - -module.exports = createPadding; diff --git a/node_modules/lodash/_createPartial.js b/node_modules/lodash/_createPartial.js deleted file mode 100644 index e16c248..0000000 --- a/node_modules/lodash/_createPartial.js +++ /dev/null @@ -1,43 +0,0 @@ -var apply = require('./_apply'), - createCtor = require('./_createCtor'), - root = require('./_root'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1; - -/** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ -function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; -} - -module.exports = createPartial; diff --git a/node_modules/lodash/_createRange.js b/node_modules/lodash/_createRange.js deleted file mode 100644 index 9f52c77..0000000 --- a/node_modules/lodash/_createRange.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseRange = require('./_baseRange'), - isIterateeCall = require('./_isIterateeCall'), - toFinite = require('./toFinite'); - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; -} - -module.exports = createRange; diff --git a/node_modules/lodash/_createRecurry.js b/node_modules/lodash/_createRecurry.js deleted file mode 100644 index eb29fb2..0000000 --- a/node_modules/lodash/_createRecurry.js +++ /dev/null @@ -1,56 +0,0 @@ -var isLaziable = require('./_isLaziable'), - setData = require('./_setData'), - setWrapToString = require('./_setWrapToString'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG = 8, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64; - -/** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); - - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); -} - -module.exports = createRecurry; diff --git a/node_modules/lodash/_createRelationalOperation.js b/node_modules/lodash/_createRelationalOperation.js deleted file mode 100644 index a17c6b5..0000000 --- a/node_modules/lodash/_createRelationalOperation.js +++ /dev/null @@ -1,20 +0,0 @@ -var toNumber = require('./toNumber'); - -/** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ -function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; -} - -module.exports = createRelationalOperation; diff --git a/node_modules/lodash/_createRound.js b/node_modules/lodash/_createRound.js deleted file mode 100644 index 88be5df..0000000 --- a/node_modules/lodash/_createRound.js +++ /dev/null @@ -1,35 +0,0 @@ -var root = require('./_root'), - toInteger = require('./toInteger'), - toNumber = require('./toNumber'), - toString = require('./toString'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsFinite = root.isFinite, - nativeMin = Math.min; - -/** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ -function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); - if (precision && nativeIsFinite(number)) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; -} - -module.exports = createRound; diff --git a/node_modules/lodash/_createSet.js b/node_modules/lodash/_createSet.js deleted file mode 100644 index 0f644ee..0000000 --- a/node_modules/lodash/_createSet.js +++ /dev/null @@ -1,19 +0,0 @@ -var Set = require('./_Set'), - noop = require('./noop'), - setToArray = require('./_setToArray'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); -}; - -module.exports = createSet; diff --git a/node_modules/lodash/_createToPairs.js b/node_modules/lodash/_createToPairs.js deleted file mode 100644 index 568417a..0000000 --- a/node_modules/lodash/_createToPairs.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseToPairs = require('./_baseToPairs'), - getTag = require('./_getTag'), - mapToArray = require('./_mapToArray'), - setToPairs = require('./_setToPairs'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ -function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; -} - -module.exports = createToPairs; diff --git a/node_modules/lodash/_createWrap.js b/node_modules/lodash/_createWrap.js deleted file mode 100644 index 33f0633..0000000 --- a/node_modules/lodash/_createWrap.js +++ /dev/null @@ -1,106 +0,0 @@ -var baseSetData = require('./_baseSetData'), - createBind = require('./_createBind'), - createCurry = require('./_createCurry'), - createHybrid = require('./_createHybrid'), - createPartial = require('./_createPartial'), - getData = require('./_getData'), - mergeData = require('./_mergeData'), - setData = require('./_setData'), - setWrapToString = require('./_setWrapToString'), - toInteger = require('./toInteger'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] === undefined - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); -} - -module.exports = createWrap; diff --git a/node_modules/lodash/_customDefaultsAssignIn.js b/node_modules/lodash/_customDefaultsAssignIn.js deleted file mode 100644 index 1f49e6f..0000000 --- a/node_modules/lodash/_customDefaultsAssignIn.js +++ /dev/null @@ -1,29 +0,0 @@ -var eq = require('./eq'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used by `_.defaults` to customize its `_.assignIn` use to assign properties - * of source objects to the destination object for all destination properties - * that resolve to `undefined`. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ -function customDefaultsAssignIn(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; -} - -module.exports = customDefaultsAssignIn; diff --git a/node_modules/lodash/_customDefaultsMerge.js b/node_modules/lodash/_customDefaultsMerge.js deleted file mode 100644 index 4cab317..0000000 --- a/node_modules/lodash/_customDefaultsMerge.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseMerge = require('./_baseMerge'), - isObject = require('./isObject'); - -/** - * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source - * objects into destination objects that are passed thru. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ -function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); - stack['delete'](srcValue); - } - return objValue; -} - -module.exports = customDefaultsMerge; diff --git a/node_modules/lodash/_customOmitClone.js b/node_modules/lodash/_customOmitClone.js deleted file mode 100644 index 968db2e..0000000 --- a/node_modules/lodash/_customOmitClone.js +++ /dev/null @@ -1,16 +0,0 @@ -var isPlainObject = require('./isPlainObject'); - -/** - * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain - * objects. - * - * @private - * @param {*} value The value to inspect. - * @param {string} key The key of the property to inspect. - * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. - */ -function customOmitClone(value) { - return isPlainObject(value) ? undefined : value; -} - -module.exports = customOmitClone; diff --git a/node_modules/lodash/_deburrLetter.js b/node_modules/lodash/_deburrLetter.js deleted file mode 100644 index 3e531ed..0000000 --- a/node_modules/lodash/_deburrLetter.js +++ /dev/null @@ -1,71 +0,0 @@ -var basePropertyOf = require('./_basePropertyOf'); - -/** Used to map Latin Unicode letters to basic Latin letters. */ -var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' -}; - -/** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ -var deburrLetter = basePropertyOf(deburredLetters); - -module.exports = deburrLetter; diff --git a/node_modules/lodash/_defineProperty.js b/node_modules/lodash/_defineProperty.js deleted file mode 100644 index b6116d9..0000000 --- a/node_modules/lodash/_defineProperty.js +++ /dev/null @@ -1,11 +0,0 @@ -var getNative = require('./_getNative'); - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -module.exports = defineProperty; diff --git a/node_modules/lodash/_equalArrays.js b/node_modules/lodash/_equalArrays.js deleted file mode 100644 index 824228c..0000000 --- a/node_modules/lodash/_equalArrays.js +++ /dev/null @@ -1,84 +0,0 @@ -var SetCache = require('./_SetCache'), - arraySome = require('./_arraySome'), - cacheHas = require('./_cacheHas'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -module.exports = equalArrays; diff --git a/node_modules/lodash/_equalByTag.js b/node_modules/lodash/_equalByTag.js deleted file mode 100644 index 71919e8..0000000 --- a/node_modules/lodash/_equalByTag.js +++ /dev/null @@ -1,112 +0,0 @@ -var Symbol = require('./_Symbol'), - Uint8Array = require('./_Uint8Array'), - eq = require('./eq'), - equalArrays = require('./_equalArrays'), - mapToArray = require('./_mapToArray'), - setToArray = require('./_setToArray'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -module.exports = equalByTag; diff --git a/node_modules/lodash/_equalObjects.js b/node_modules/lodash/_equalObjects.js deleted file mode 100644 index cdaacd2..0000000 --- a/node_modules/lodash/_equalObjects.js +++ /dev/null @@ -1,90 +0,0 @@ -var getAllKeys = require('./_getAllKeys'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = getAllKeys(object), - objLength = objProps.length, - othProps = getAllKeys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -module.exports = equalObjects; diff --git a/node_modules/lodash/_escapeHtmlChar.js b/node_modules/lodash/_escapeHtmlChar.js deleted file mode 100644 index 7ca68ee..0000000 --- a/node_modules/lodash/_escapeHtmlChar.js +++ /dev/null @@ -1,21 +0,0 @@ -var basePropertyOf = require('./_basePropertyOf'); - -/** Used to map characters to HTML entities. */ -var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' -}; - -/** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ -var escapeHtmlChar = basePropertyOf(htmlEscapes); - -module.exports = escapeHtmlChar; diff --git a/node_modules/lodash/_escapeStringChar.js b/node_modules/lodash/_escapeStringChar.js deleted file mode 100644 index 44eca96..0000000 --- a/node_modules/lodash/_escapeStringChar.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used to escape characters for inclusion in compiled string literals. */ -var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' -}; - -/** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ -function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; -} - -module.exports = escapeStringChar; diff --git a/node_modules/lodash/_flatRest.js b/node_modules/lodash/_flatRest.js deleted file mode 100644 index 94ab6cc..0000000 --- a/node_modules/lodash/_flatRest.js +++ /dev/null @@ -1,16 +0,0 @@ -var flatten = require('./flatten'), - overRest = require('./_overRest'), - setToString = require('./_setToString'); - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); -} - -module.exports = flatRest; diff --git a/node_modules/lodash/_freeGlobal.js b/node_modules/lodash/_freeGlobal.js deleted file mode 100644 index bbec998..0000000 --- a/node_modules/lodash/_freeGlobal.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -module.exports = freeGlobal; diff --git a/node_modules/lodash/_getAllKeys.js b/node_modules/lodash/_getAllKeys.js deleted file mode 100644 index a9ce699..0000000 --- a/node_modules/lodash/_getAllKeys.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGetAllKeys = require('./_baseGetAllKeys'), - getSymbols = require('./_getSymbols'), - keys = require('./keys'); - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); -} - -module.exports = getAllKeys; diff --git a/node_modules/lodash/_getAllKeysIn.js b/node_modules/lodash/_getAllKeysIn.js deleted file mode 100644 index 1b46678..0000000 --- a/node_modules/lodash/_getAllKeysIn.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseGetAllKeys = require('./_baseGetAllKeys'), - getSymbolsIn = require('./_getSymbolsIn'), - keysIn = require('./keysIn'); - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); -} - -module.exports = getAllKeysIn; diff --git a/node_modules/lodash/_getData.js b/node_modules/lodash/_getData.js deleted file mode 100644 index a1fe7b7..0000000 --- a/node_modules/lodash/_getData.js +++ /dev/null @@ -1,15 +0,0 @@ -var metaMap = require('./_metaMap'), - noop = require('./noop'); - -/** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ -var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); -}; - -module.exports = getData; diff --git a/node_modules/lodash/_getFuncName.js b/node_modules/lodash/_getFuncName.js deleted file mode 100644 index 21e15b3..0000000 --- a/node_modules/lodash/_getFuncName.js +++ /dev/null @@ -1,31 +0,0 @@ -var realNames = require('./_realNames'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ -function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; -} - -module.exports = getFuncName; diff --git a/node_modules/lodash/_getHolder.js b/node_modules/lodash/_getHolder.js deleted file mode 100644 index 65e94b5..0000000 --- a/node_modules/lodash/_getHolder.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ -function getHolder(func) { - var object = func; - return object.placeholder; -} - -module.exports = getHolder; diff --git a/node_modules/lodash/_getMapData.js b/node_modules/lodash/_getMapData.js deleted file mode 100644 index 17f6303..0000000 --- a/node_modules/lodash/_getMapData.js +++ /dev/null @@ -1,18 +0,0 @@ -var isKeyable = require('./_isKeyable'); - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -module.exports = getMapData; diff --git a/node_modules/lodash/_getMatchData.js b/node_modules/lodash/_getMatchData.js deleted file mode 100644 index 2cc70f9..0000000 --- a/node_modules/lodash/_getMatchData.js +++ /dev/null @@ -1,24 +0,0 @@ -var isStrictComparable = require('./_isStrictComparable'), - keys = require('./keys'); - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; -} - -module.exports = getMatchData; diff --git a/node_modules/lodash/_getNative.js b/node_modules/lodash/_getNative.js deleted file mode 100644 index 97a622b..0000000 --- a/node_modules/lodash/_getNative.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseIsNative = require('./_baseIsNative'), - getValue = require('./_getValue'); - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -module.exports = getNative; diff --git a/node_modules/lodash/_getPrototype.js b/node_modules/lodash/_getPrototype.js deleted file mode 100644 index e808612..0000000 --- a/node_modules/lodash/_getPrototype.js +++ /dev/null @@ -1,6 +0,0 @@ -var overArg = require('./_overArg'); - -/** Built-in value references. */ -var getPrototype = overArg(Object.getPrototypeOf, Object); - -module.exports = getPrototype; diff --git a/node_modules/lodash/_getRawTag.js b/node_modules/lodash/_getRawTag.js deleted file mode 100644 index 49a95c9..0000000 --- a/node_modules/lodash/_getRawTag.js +++ /dev/null @@ -1,46 +0,0 @@ -var Symbol = require('./_Symbol'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; - -/** Built-in value references. */ -var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ -function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; - - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; -} - -module.exports = getRawTag; diff --git a/node_modules/lodash/_getSymbols.js b/node_modules/lodash/_getSymbols.js deleted file mode 100644 index 7d6eafe..0000000 --- a/node_modules/lodash/_getSymbols.js +++ /dev/null @@ -1,30 +0,0 @@ -var arrayFilter = require('./_arrayFilter'), - stubArray = require('./stubArray'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? stubArray : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return arrayFilter(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -module.exports = getSymbols; diff --git a/node_modules/lodash/_getSymbolsIn.js b/node_modules/lodash/_getSymbolsIn.js deleted file mode 100644 index cec0855..0000000 --- a/node_modules/lodash/_getSymbolsIn.js +++ /dev/null @@ -1,25 +0,0 @@ -var arrayPush = require('./_arrayPush'), - getPrototype = require('./_getPrototype'), - getSymbols = require('./_getSymbols'), - stubArray = require('./stubArray'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; -}; - -module.exports = getSymbolsIn; diff --git a/node_modules/lodash/_getTag.js b/node_modules/lodash/_getTag.js deleted file mode 100644 index deaf89d..0000000 --- a/node_modules/lodash/_getTag.js +++ /dev/null @@ -1,58 +0,0 @@ -var DataView = require('./_DataView'), - Map = require('./_Map'), - Promise = require('./_Promise'), - Set = require('./_Set'), - WeakMap = require('./_WeakMap'), - baseGetTag = require('./_baseGetTag'), - toSource = require('./_toSource'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - setTag = '[object Set]', - weakMapTag = '[object WeakMap]'; - -var dataViewTag = '[object DataView]'; - -/** Used to detect maps, sets, and weakmaps. */ -var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - -/** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -var getTag = baseGetTag; - -// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. -if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; -} - -module.exports = getTag; diff --git a/node_modules/lodash/_getValue.js b/node_modules/lodash/_getValue.js deleted file mode 100644 index 5f7d773..0000000 --- a/node_modules/lodash/_getValue.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -module.exports = getValue; diff --git a/node_modules/lodash/_getView.js b/node_modules/lodash/_getView.js deleted file mode 100644 index df1e5d4..0000000 --- a/node_modules/lodash/_getView.js +++ /dev/null @@ -1,33 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ -function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; -} - -module.exports = getView; diff --git a/node_modules/lodash/_getWrapDetails.js b/node_modules/lodash/_getWrapDetails.js deleted file mode 100644 index 3bcc6e4..0000000 --- a/node_modules/lodash/_getWrapDetails.js +++ /dev/null @@ -1,17 +0,0 @@ -/** Used to match wrap detail comments. */ -var reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; - -/** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ -function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; -} - -module.exports = getWrapDetails; diff --git a/node_modules/lodash/_hasPath.js b/node_modules/lodash/_hasPath.js deleted file mode 100644 index 93dbde1..0000000 --- a/node_modules/lodash/_hasPath.js +++ /dev/null @@ -1,39 +0,0 @@ -var castPath = require('./_castPath'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isIndex = require('./_isIndex'), - isLength = require('./isLength'), - toKey = require('./_toKey'); - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = castPath(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); -} - -module.exports = hasPath; diff --git a/node_modules/lodash/_hasUnicode.js b/node_modules/lodash/_hasUnicode.js deleted file mode 100644 index cb6ca15..0000000 --- a/node_modules/lodash/_hasUnicode.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -module.exports = hasUnicode; diff --git a/node_modules/lodash/_hasUnicodeWord.js b/node_modules/lodash/_hasUnicodeWord.js deleted file mode 100644 index 95d52c4..0000000 --- a/node_modules/lodash/_hasUnicodeWord.js +++ /dev/null @@ -1,15 +0,0 @@ -/** Used to detect strings that need a more robust regexp to match words. */ -var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - -/** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ -function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); -} - -module.exports = hasUnicodeWord; diff --git a/node_modules/lodash/_hashClear.js b/node_modules/lodash/_hashClear.js deleted file mode 100644 index 5d4b70c..0000000 --- a/node_modules/lodash/_hashClear.js +++ /dev/null @@ -1,15 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; -} - -module.exports = hashClear; diff --git a/node_modules/lodash/_hashDelete.js b/node_modules/lodash/_hashDelete.js deleted file mode 100644 index ea9dabf..0000000 --- a/node_modules/lodash/_hashDelete.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; -} - -module.exports = hashDelete; diff --git a/node_modules/lodash/_hashGet.js b/node_modules/lodash/_hashGet.js deleted file mode 100644 index 1fc2f34..0000000 --- a/node_modules/lodash/_hashGet.js +++ /dev/null @@ -1,30 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; -} - -module.exports = hashGet; diff --git a/node_modules/lodash/_hashHas.js b/node_modules/lodash/_hashHas.js deleted file mode 100644 index 281a551..0000000 --- a/node_modules/lodash/_hashHas.js +++ /dev/null @@ -1,23 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); -} - -module.exports = hashHas; diff --git a/node_modules/lodash/_hashSet.js b/node_modules/lodash/_hashSet.js deleted file mode 100644 index e105528..0000000 --- a/node_modules/lodash/_hashSet.js +++ /dev/null @@ -1,23 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; -} - -module.exports = hashSet; diff --git a/node_modules/lodash/_initCloneArray.js b/node_modules/lodash/_initCloneArray.js deleted file mode 100644 index 078c15a..0000000 --- a/node_modules/lodash/_initCloneArray.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -module.exports = initCloneArray; diff --git a/node_modules/lodash/_initCloneByTag.js b/node_modules/lodash/_initCloneByTag.js deleted file mode 100644 index f69a008..0000000 --- a/node_modules/lodash/_initCloneByTag.js +++ /dev/null @@ -1,77 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'), - cloneDataView = require('./_cloneDataView'), - cloneRegExp = require('./_cloneRegExp'), - cloneSymbol = require('./_cloneSymbol'), - cloneTypedArray = require('./_cloneTypedArray'); - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return cloneSymbol(object); - } -} - -module.exports = initCloneByTag; diff --git a/node_modules/lodash/_initCloneObject.js b/node_modules/lodash/_initCloneObject.js deleted file mode 100644 index 5a13e64..0000000 --- a/node_modules/lodash/_initCloneObject.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseCreate = require('./_baseCreate'), - getPrototype = require('./_getPrototype'), - isPrototype = require('./_isPrototype'); - -/** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; -} - -module.exports = initCloneObject; diff --git a/node_modules/lodash/_insertWrapDetails.js b/node_modules/lodash/_insertWrapDetails.js deleted file mode 100644 index e790808..0000000 --- a/node_modules/lodash/_insertWrapDetails.js +++ /dev/null @@ -1,23 +0,0 @@ -/** Used to match wrap detail comments. */ -var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/; - -/** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ -function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; - details = details.join(length > 2 ? ', ' : ' '); - return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); -} - -module.exports = insertWrapDetails; diff --git a/node_modules/lodash/_isFlattenable.js b/node_modules/lodash/_isFlattenable.js deleted file mode 100644 index 4cc2c24..0000000 --- a/node_modules/lodash/_isFlattenable.js +++ /dev/null @@ -1,20 +0,0 @@ -var Symbol = require('./_Symbol'), - isArguments = require('./isArguments'), - isArray = require('./isArray'); - -/** Built-in value references. */ -var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -module.exports = isFlattenable; diff --git a/node_modules/lodash/_isIndex.js b/node_modules/lodash/_isIndex.js deleted file mode 100644 index 061cd39..0000000 --- a/node_modules/lodash/_isIndex.js +++ /dev/null @@ -1,25 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} - -module.exports = isIndex; diff --git a/node_modules/lodash/_isIterateeCall.js b/node_modules/lodash/_isIterateeCall.js deleted file mode 100644 index a0bb5a9..0000000 --- a/node_modules/lodash/_isIterateeCall.js +++ /dev/null @@ -1,30 +0,0 @@ -var eq = require('./eq'), - isArrayLike = require('./isArrayLike'), - isIndex = require('./_isIndex'), - isObject = require('./isObject'); - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -module.exports = isIterateeCall; diff --git a/node_modules/lodash/_isKey.js b/node_modules/lodash/_isKey.js deleted file mode 100644 index ff08b06..0000000 --- a/node_modules/lodash/_isKey.js +++ /dev/null @@ -1,29 +0,0 @@ -var isArray = require('./isArray'), - isSymbol = require('./isSymbol'); - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -module.exports = isKey; diff --git a/node_modules/lodash/_isKeyable.js b/node_modules/lodash/_isKeyable.js deleted file mode 100644 index 39f1828..0000000 --- a/node_modules/lodash/_isKeyable.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} - -module.exports = isKeyable; diff --git a/node_modules/lodash/_isLaziable.js b/node_modules/lodash/_isLaziable.js deleted file mode 100644 index a57c4f2..0000000 --- a/node_modules/lodash/_isLaziable.js +++ /dev/null @@ -1,28 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - getData = require('./_getData'), - getFuncName = require('./_getFuncName'), - lodash = require('./wrapperLodash'); - -/** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ -function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; -} - -module.exports = isLaziable; diff --git a/node_modules/lodash/_isMaskable.js b/node_modules/lodash/_isMaskable.js deleted file mode 100644 index eb98d09..0000000 --- a/node_modules/lodash/_isMaskable.js +++ /dev/null @@ -1,14 +0,0 @@ -var coreJsData = require('./_coreJsData'), - isFunction = require('./isFunction'), - stubFalse = require('./stubFalse'); - -/** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ -var isMaskable = coreJsData ? isFunction : stubFalse; - -module.exports = isMaskable; diff --git a/node_modules/lodash/_isMasked.js b/node_modules/lodash/_isMasked.js deleted file mode 100644 index 4b0f21b..0000000 --- a/node_modules/lodash/_isMasked.js +++ /dev/null @@ -1,20 +0,0 @@ -var coreJsData = require('./_coreJsData'); - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -module.exports = isMasked; diff --git a/node_modules/lodash/_isPrototype.js b/node_modules/lodash/_isPrototype.js deleted file mode 100644 index 0f29498..0000000 --- a/node_modules/lodash/_isPrototype.js +++ /dev/null @@ -1,18 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; -} - -module.exports = isPrototype; diff --git a/node_modules/lodash/_isStrictComparable.js b/node_modules/lodash/_isStrictComparable.js deleted file mode 100644 index b59f40b..0000000 --- a/node_modules/lodash/_isStrictComparable.js +++ /dev/null @@ -1,15 +0,0 @@ -var isObject = require('./isObject'); - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !isObject(value); -} - -module.exports = isStrictComparable; diff --git a/node_modules/lodash/_iteratorToArray.js b/node_modules/lodash/_iteratorToArray.js deleted file mode 100644 index 4768566..0000000 --- a/node_modules/lodash/_iteratorToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ -function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; -} - -module.exports = iteratorToArray; diff --git a/node_modules/lodash/_lazyClone.js b/node_modules/lodash/_lazyClone.js deleted file mode 100644 index d8a51f8..0000000 --- a/node_modules/lodash/_lazyClone.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - copyArray = require('./_copyArray'); - -/** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ -function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; -} - -module.exports = lazyClone; diff --git a/node_modules/lodash/_lazyReverse.js b/node_modules/lodash/_lazyReverse.js deleted file mode 100644 index c5b5219..0000000 --- a/node_modules/lodash/_lazyReverse.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'); - -/** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ -function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; -} - -module.exports = lazyReverse; diff --git a/node_modules/lodash/_lazyValue.js b/node_modules/lodash/_lazyValue.js deleted file mode 100644 index 371ca8d..0000000 --- a/node_modules/lodash/_lazyValue.js +++ /dev/null @@ -1,69 +0,0 @@ -var baseWrapperValue = require('./_baseWrapperValue'), - getView = require('./_getView'), - isArray = require('./isArray'); - -/** Used to indicate the type of lazy iteratees. */ -var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ -function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || (!isRight && arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; -} - -module.exports = lazyValue; diff --git a/node_modules/lodash/_listCacheClear.js b/node_modules/lodash/_listCacheClear.js deleted file mode 100644 index acbe39a..0000000 --- a/node_modules/lodash/_listCacheClear.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; - this.size = 0; -} - -module.exports = listCacheClear; diff --git a/node_modules/lodash/_listCacheDelete.js b/node_modules/lodash/_listCacheDelete.js deleted file mode 100644 index b1384ad..0000000 --- a/node_modules/lodash/_listCacheDelete.js +++ /dev/null @@ -1,35 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; -} - -module.exports = listCacheDelete; diff --git a/node_modules/lodash/_listCacheGet.js b/node_modules/lodash/_listCacheGet.js deleted file mode 100644 index f8192fc..0000000 --- a/node_modules/lodash/_listCacheGet.js +++ /dev/null @@ -1,19 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; -} - -module.exports = listCacheGet; diff --git a/node_modules/lodash/_listCacheHas.js b/node_modules/lodash/_listCacheHas.js deleted file mode 100644 index 2adf671..0000000 --- a/node_modules/lodash/_listCacheHas.js +++ /dev/null @@ -1,16 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} - -module.exports = listCacheHas; diff --git a/node_modules/lodash/_listCacheSet.js b/node_modules/lodash/_listCacheSet.js deleted file mode 100644 index 5855c95..0000000 --- a/node_modules/lodash/_listCacheSet.js +++ /dev/null @@ -1,26 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} - -module.exports = listCacheSet; diff --git a/node_modules/lodash/_mapCacheClear.js b/node_modules/lodash/_mapCacheClear.js deleted file mode 100644 index bc9ca20..0000000 --- a/node_modules/lodash/_mapCacheClear.js +++ /dev/null @@ -1,21 +0,0 @@ -var Hash = require('./_Hash'), - ListCache = require('./_ListCache'), - Map = require('./_Map'); - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; -} - -module.exports = mapCacheClear; diff --git a/node_modules/lodash/_mapCacheDelete.js b/node_modules/lodash/_mapCacheDelete.js deleted file mode 100644 index 946ca3c..0000000 --- a/node_modules/lodash/_mapCacheDelete.js +++ /dev/null @@ -1,18 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; -} - -module.exports = mapCacheDelete; diff --git a/node_modules/lodash/_mapCacheGet.js b/node_modules/lodash/_mapCacheGet.js deleted file mode 100644 index f29f55c..0000000 --- a/node_modules/lodash/_mapCacheGet.js +++ /dev/null @@ -1,16 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} - -module.exports = mapCacheGet; diff --git a/node_modules/lodash/_mapCacheHas.js b/node_modules/lodash/_mapCacheHas.js deleted file mode 100644 index a1214c0..0000000 --- a/node_modules/lodash/_mapCacheHas.js +++ /dev/null @@ -1,16 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} - -module.exports = mapCacheHas; diff --git a/node_modules/lodash/_mapCacheSet.js b/node_modules/lodash/_mapCacheSet.js deleted file mode 100644 index 7346849..0000000 --- a/node_modules/lodash/_mapCacheSet.js +++ /dev/null @@ -1,22 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} - -module.exports = mapCacheSet; diff --git a/node_modules/lodash/_mapToArray.js b/node_modules/lodash/_mapToArray.js deleted file mode 100644 index fe3dd53..0000000 --- a/node_modules/lodash/_mapToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -module.exports = mapToArray; diff --git a/node_modules/lodash/_matchesStrictComparable.js b/node_modules/lodash/_matchesStrictComparable.js deleted file mode 100644 index f608af9..0000000 --- a/node_modules/lodash/_matchesStrictComparable.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -module.exports = matchesStrictComparable; diff --git a/node_modules/lodash/_memoizeCapped.js b/node_modules/lodash/_memoizeCapped.js deleted file mode 100644 index 7f71c8f..0000000 --- a/node_modules/lodash/_memoizeCapped.js +++ /dev/null @@ -1,26 +0,0 @@ -var memoize = require('./memoize'); - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -module.exports = memoizeCapped; diff --git a/node_modules/lodash/_mergeData.js b/node_modules/lodash/_mergeData.js deleted file mode 100644 index cb570f9..0000000 --- a/node_modules/lodash/_mergeData.js +++ /dev/null @@ -1,90 +0,0 @@ -var composeArgs = require('./_composeArgs'), - composeArgsRight = require('./_composeArgsRight'), - replaceHolders = require('./_replaceHolders'); - -/** Used as the internal argument placeholder. */ -var PLACEHOLDER = '__lodash_placeholder__'; - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG = 8, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ -function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); - - var isCombo = - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & WRAP_BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & WRAP_ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; -} - -module.exports = mergeData; diff --git a/node_modules/lodash/_metaMap.js b/node_modules/lodash/_metaMap.js deleted file mode 100644 index 0157a0b..0000000 --- a/node_modules/lodash/_metaMap.js +++ /dev/null @@ -1,6 +0,0 @@ -var WeakMap = require('./_WeakMap'); - -/** Used to store function metadata. */ -var metaMap = WeakMap && new WeakMap; - -module.exports = metaMap; diff --git a/node_modules/lodash/_nativeCreate.js b/node_modules/lodash/_nativeCreate.js deleted file mode 100644 index c7aede8..0000000 --- a/node_modules/lodash/_nativeCreate.js +++ /dev/null @@ -1,6 +0,0 @@ -var getNative = require('./_getNative'); - -/* Built-in method references that are verified to be native. */ -var nativeCreate = getNative(Object, 'create'); - -module.exports = nativeCreate; diff --git a/node_modules/lodash/_nativeKeys.js b/node_modules/lodash/_nativeKeys.js deleted file mode 100644 index 479a104..0000000 --- a/node_modules/lodash/_nativeKeys.js +++ /dev/null @@ -1,6 +0,0 @@ -var overArg = require('./_overArg'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object); - -module.exports = nativeKeys; diff --git a/node_modules/lodash/_nativeKeysIn.js b/node_modules/lodash/_nativeKeysIn.js deleted file mode 100644 index 00ee505..0000000 --- a/node_modules/lodash/_nativeKeysIn.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; -} - -module.exports = nativeKeysIn; diff --git a/node_modules/lodash/_nodeUtil.js b/node_modules/lodash/_nodeUtil.js deleted file mode 100644 index 983d78f..0000000 --- a/node_modules/lodash/_nodeUtil.js +++ /dev/null @@ -1,30 +0,0 @@ -var freeGlobal = require('./_freeGlobal'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; - -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); - -module.exports = nodeUtil; diff --git a/node_modules/lodash/_objectToString.js b/node_modules/lodash/_objectToString.js deleted file mode 100644 index c614ec0..0000000 --- a/node_modules/lodash/_objectToString.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; - -/** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ -function objectToString(value) { - return nativeObjectToString.call(value); -} - -module.exports = objectToString; diff --git a/node_modules/lodash/_overArg.js b/node_modules/lodash/_overArg.js deleted file mode 100644 index 651c5c5..0000000 --- a/node_modules/lodash/_overArg.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -module.exports = overArg; diff --git a/node_modules/lodash/_overRest.js b/node_modules/lodash/_overRest.js deleted file mode 100644 index c7cdef3..0000000 --- a/node_modules/lodash/_overRest.js +++ /dev/null @@ -1,36 +0,0 @@ -var apply = require('./_apply'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ -function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; -} - -module.exports = overRest; diff --git a/node_modules/lodash/_parent.js b/node_modules/lodash/_parent.js deleted file mode 100644 index f174328..0000000 --- a/node_modules/lodash/_parent.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGet = require('./_baseGet'), - baseSlice = require('./_baseSlice'); - -/** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ -function parent(object, path) { - return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); -} - -module.exports = parent; diff --git a/node_modules/lodash/_reEscape.js b/node_modules/lodash/_reEscape.js deleted file mode 100644 index 7f47eda..0000000 --- a/node_modules/lodash/_reEscape.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reEscape = /<%-([\s\S]+?)%>/g; - -module.exports = reEscape; diff --git a/node_modules/lodash/_reEvaluate.js b/node_modules/lodash/_reEvaluate.js deleted file mode 100644 index 6adfc31..0000000 --- a/node_modules/lodash/_reEvaluate.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reEvaluate = /<%([\s\S]+?)%>/g; - -module.exports = reEvaluate; diff --git a/node_modules/lodash/_reInterpolate.js b/node_modules/lodash/_reInterpolate.js deleted file mode 100644 index d02ff0b..0000000 --- a/node_modules/lodash/_reInterpolate.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reInterpolate = /<%=([\s\S]+?)%>/g; - -module.exports = reInterpolate; diff --git a/node_modules/lodash/_realNames.js b/node_modules/lodash/_realNames.js deleted file mode 100644 index aa0d529..0000000 --- a/node_modules/lodash/_realNames.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to lookup unminified function names. */ -var realNames = {}; - -module.exports = realNames; diff --git a/node_modules/lodash/_reorder.js b/node_modules/lodash/_reorder.js deleted file mode 100644 index a3502b0..0000000 --- a/node_modules/lodash/_reorder.js +++ /dev/null @@ -1,29 +0,0 @@ -var copyArray = require('./_copyArray'), - isIndex = require('./_isIndex'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ -function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; -} - -module.exports = reorder; diff --git a/node_modules/lodash/_replaceHolders.js b/node_modules/lodash/_replaceHolders.js deleted file mode 100644 index 74360ec..0000000 --- a/node_modules/lodash/_replaceHolders.js +++ /dev/null @@ -1,29 +0,0 @@ -/** Used as the internal argument placeholder. */ -var PLACEHOLDER = '__lodash_placeholder__'; - -/** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ -function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; -} - -module.exports = replaceHolders; diff --git a/node_modules/lodash/_root.js b/node_modules/lodash/_root.js deleted file mode 100644 index d2852be..0000000 --- a/node_modules/lodash/_root.js +++ /dev/null @@ -1,9 +0,0 @@ -var freeGlobal = require('./_freeGlobal'); - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -module.exports = root; diff --git a/node_modules/lodash/_safeGet.js b/node_modules/lodash/_safeGet.js deleted file mode 100644 index b070897..0000000 --- a/node_modules/lodash/_safeGet.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Gets the value at `key`, unless `key` is "__proto__" or "constructor". - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function safeGet(object, key) { - if (key === 'constructor' && typeof object[key] === 'function') { - return; - } - - if (key == '__proto__') { - return; - } - - return object[key]; -} - -module.exports = safeGet; diff --git a/node_modules/lodash/_setCacheAdd.js b/node_modules/lodash/_setCacheAdd.js deleted file mode 100644 index 1081a74..0000000 --- a/node_modules/lodash/_setCacheAdd.js +++ /dev/null @@ -1,19 +0,0 @@ -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -module.exports = setCacheAdd; diff --git a/node_modules/lodash/_setCacheHas.js b/node_modules/lodash/_setCacheHas.js deleted file mode 100644 index 9a49255..0000000 --- a/node_modules/lodash/_setCacheHas.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -module.exports = setCacheHas; diff --git a/node_modules/lodash/_setData.js b/node_modules/lodash/_setData.js deleted file mode 100644 index e5cf3eb..0000000 --- a/node_modules/lodash/_setData.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseSetData = require('./_baseSetData'), - shortOut = require('./_shortOut'); - -/** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ -var setData = shortOut(baseSetData); - -module.exports = setData; diff --git a/node_modules/lodash/_setToArray.js b/node_modules/lodash/_setToArray.js deleted file mode 100644 index b87f074..0000000 --- a/node_modules/lodash/_setToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -module.exports = setToArray; diff --git a/node_modules/lodash/_setToPairs.js b/node_modules/lodash/_setToPairs.js deleted file mode 100644 index 36ad37a..0000000 --- a/node_modules/lodash/_setToPairs.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ -function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; -} - -module.exports = setToPairs; diff --git a/node_modules/lodash/_setToString.js b/node_modules/lodash/_setToString.js deleted file mode 100644 index 6ca8419..0000000 --- a/node_modules/lodash/_setToString.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseSetToString = require('./_baseSetToString'), - shortOut = require('./_shortOut'); - -/** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var setToString = shortOut(baseSetToString); - -module.exports = setToString; diff --git a/node_modules/lodash/_setWrapToString.js b/node_modules/lodash/_setWrapToString.js deleted file mode 100644 index decdc44..0000000 --- a/node_modules/lodash/_setWrapToString.js +++ /dev/null @@ -1,21 +0,0 @@ -var getWrapDetails = require('./_getWrapDetails'), - insertWrapDetails = require('./_insertWrapDetails'), - setToString = require('./_setToString'), - updateWrapDetails = require('./_updateWrapDetails'); - -/** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ -function setWrapToString(wrapper, reference, bitmask) { - var source = (reference + ''); - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); -} - -module.exports = setWrapToString; diff --git a/node_modules/lodash/_shortOut.js b/node_modules/lodash/_shortOut.js deleted file mode 100644 index 3300a07..0000000 --- a/node_modules/lodash/_shortOut.js +++ /dev/null @@ -1,37 +0,0 @@ -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 800, - HOT_SPAN = 16; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeNow = Date.now; - -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; -} - -module.exports = shortOut; diff --git a/node_modules/lodash/_shuffleSelf.js b/node_modules/lodash/_shuffleSelf.js deleted file mode 100644 index 8bcc4f5..0000000 --- a/node_modules/lodash/_shuffleSelf.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseRandom = require('./_baseRandom'); - -/** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ -function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; -} - -module.exports = shuffleSelf; diff --git a/node_modules/lodash/_stackClear.js b/node_modules/lodash/_stackClear.js deleted file mode 100644 index ce8e5a9..0000000 --- a/node_modules/lodash/_stackClear.js +++ /dev/null @@ -1,15 +0,0 @@ -var ListCache = require('./_ListCache'); - -/** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ -function stackClear() { - this.__data__ = new ListCache; - this.size = 0; -} - -module.exports = stackClear; diff --git a/node_modules/lodash/_stackDelete.js b/node_modules/lodash/_stackDelete.js deleted file mode 100644 index ff9887a..0000000 --- a/node_modules/lodash/_stackDelete.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; -} - -module.exports = stackDelete; diff --git a/node_modules/lodash/_stackGet.js b/node_modules/lodash/_stackGet.js deleted file mode 100644 index 1cdf004..0000000 --- a/node_modules/lodash/_stackGet.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function stackGet(key) { - return this.__data__.get(key); -} - -module.exports = stackGet; diff --git a/node_modules/lodash/_stackHas.js b/node_modules/lodash/_stackHas.js deleted file mode 100644 index 16a3ad1..0000000 --- a/node_modules/lodash/_stackHas.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function stackHas(key) { - return this.__data__.has(key); -} - -module.exports = stackHas; diff --git a/node_modules/lodash/_stackSet.js b/node_modules/lodash/_stackSet.js deleted file mode 100644 index b790ac5..0000000 --- a/node_modules/lodash/_stackSet.js +++ /dev/null @@ -1,34 +0,0 @@ -var ListCache = require('./_ListCache'), - Map = require('./_Map'), - MapCache = require('./_MapCache'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ -function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; -} - -module.exports = stackSet; diff --git a/node_modules/lodash/_strictIndexOf.js b/node_modules/lodash/_strictIndexOf.js deleted file mode 100644 index 0486a49..0000000 --- a/node_modules/lodash/_strictIndexOf.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -module.exports = strictIndexOf; diff --git a/node_modules/lodash/_strictLastIndexOf.js b/node_modules/lodash/_strictLastIndexOf.js deleted file mode 100644 index d7310dc..0000000 --- a/node_modules/lodash/_strictLastIndexOf.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.lastIndexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; - } - } - return index; -} - -module.exports = strictLastIndexOf; diff --git a/node_modules/lodash/_stringSize.js b/node_modules/lodash/_stringSize.js deleted file mode 100644 index 17ef462..0000000 --- a/node_modules/lodash/_stringSize.js +++ /dev/null @@ -1,18 +0,0 @@ -var asciiSize = require('./_asciiSize'), - hasUnicode = require('./_hasUnicode'), - unicodeSize = require('./_unicodeSize'); - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - return hasUnicode(string) - ? unicodeSize(string) - : asciiSize(string); -} - -module.exports = stringSize; diff --git a/node_modules/lodash/_stringToArray.js b/node_modules/lodash/_stringToArray.js deleted file mode 100644 index d161158..0000000 --- a/node_modules/lodash/_stringToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -var asciiToArray = require('./_asciiToArray'), - hasUnicode = require('./_hasUnicode'), - unicodeToArray = require('./_unicodeToArray'); - -/** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); -} - -module.exports = stringToArray; diff --git a/node_modules/lodash/_stringToPath.js b/node_modules/lodash/_stringToPath.js deleted file mode 100644 index 8f39f8a..0000000 --- a/node_modules/lodash/_stringToPath.js +++ /dev/null @@ -1,27 +0,0 @@ -var memoizeCapped = require('./_memoizeCapped'); - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -module.exports = stringToPath; diff --git a/node_modules/lodash/_toKey.js b/node_modules/lodash/_toKey.js deleted file mode 100644 index c6d645c..0000000 --- a/node_modules/lodash/_toKey.js +++ /dev/null @@ -1,21 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -module.exports = toKey; diff --git a/node_modules/lodash/_toSource.js b/node_modules/lodash/_toSource.js deleted file mode 100644 index a020b38..0000000 --- a/node_modules/lodash/_toSource.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var funcProto = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -module.exports = toSource; diff --git a/node_modules/lodash/_trimmedEndIndex.js b/node_modules/lodash/_trimmedEndIndex.js deleted file mode 100644 index 139439a..0000000 --- a/node_modules/lodash/_trimmedEndIndex.js +++ /dev/null @@ -1,19 +0,0 @@ -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -module.exports = trimmedEndIndex; diff --git a/node_modules/lodash/_unescapeHtmlChar.js b/node_modules/lodash/_unescapeHtmlChar.js deleted file mode 100644 index a71fecb..0000000 --- a/node_modules/lodash/_unescapeHtmlChar.js +++ /dev/null @@ -1,21 +0,0 @@ -var basePropertyOf = require('./_basePropertyOf'); - -/** Used to map HTML entities to characters. */ -var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" -}; - -/** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ -var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - -module.exports = unescapeHtmlChar; diff --git a/node_modules/lodash/_unicodeSize.js b/node_modules/lodash/_unicodeSize.js deleted file mode 100644 index 68137ec..0000000 --- a/node_modules/lodash/_unicodeSize.js +++ /dev/null @@ -1,44 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; -} - -module.exports = unicodeSize; diff --git a/node_modules/lodash/_unicodeToArray.js b/node_modules/lodash/_unicodeToArray.js deleted file mode 100644 index 2a725c0..0000000 --- a/node_modules/lodash/_unicodeToArray.js +++ /dev/null @@ -1,40 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function unicodeToArray(string) { - return string.match(reUnicode) || []; -} - -module.exports = unicodeToArray; diff --git a/node_modules/lodash/_unicodeWords.js b/node_modules/lodash/_unicodeWords.js deleted file mode 100644 index e72e6e0..0000000 --- a/node_modules/lodash/_unicodeWords.js +++ /dev/null @@ -1,69 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]", - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', - rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', - rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; - -/** Used to match complex or compound words. */ -var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', - rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, - rsUpper + '+' + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji -].join('|'), 'g'); - -/** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ -function unicodeWords(string) { - return string.match(reUnicodeWord) || []; -} - -module.exports = unicodeWords; diff --git a/node_modules/lodash/_updateWrapDetails.js b/node_modules/lodash/_updateWrapDetails.js deleted file mode 100644 index 8759fbd..0000000 --- a/node_modules/lodash/_updateWrapDetails.js +++ /dev/null @@ -1,46 +0,0 @@ -var arrayEach = require('./_arrayEach'), - arrayIncludes = require('./_arrayIncludes'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256, - WRAP_FLIP_FLAG = 512; - -/** Used to associate wrap methods with their bit flags. */ -var wrapFlags = [ - ['ary', WRAP_ARY_FLAG], - ['bind', WRAP_BIND_FLAG], - ['bindKey', WRAP_BIND_KEY_FLAG], - ['curry', WRAP_CURRY_FLAG], - ['curryRight', WRAP_CURRY_RIGHT_FLAG], - ['flip', WRAP_FLIP_FLAG], - ['partial', WRAP_PARTIAL_FLAG], - ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], - ['rearg', WRAP_REARG_FLAG] -]; - -/** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ -function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = '_.' + pair[0]; - if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); -} - -module.exports = updateWrapDetails; diff --git a/node_modules/lodash/_wrapperClone.js b/node_modules/lodash/_wrapperClone.js deleted file mode 100644 index 7bb58a2..0000000 --- a/node_modules/lodash/_wrapperClone.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - LodashWrapper = require('./_LodashWrapper'), - copyArray = require('./_copyArray'); - -/** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ -function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; -} - -module.exports = wrapperClone; diff --git a/node_modules/lodash/add.js b/node_modules/lodash/add.js deleted file mode 100644 index f069515..0000000 --- a/node_modules/lodash/add.js +++ /dev/null @@ -1,22 +0,0 @@ -var createMathOperation = require('./_createMathOperation'); - -/** - * Adds two numbers. - * - * @static - * @memberOf _ - * @since 3.4.0 - * @category Math - * @param {number} augend The first number in an addition. - * @param {number} addend The second number in an addition. - * @returns {number} Returns the total. - * @example - * - * _.add(6, 4); - * // => 10 - */ -var add = createMathOperation(function(augend, addend) { - return augend + addend; -}, 0); - -module.exports = add; diff --git a/node_modules/lodash/after.js b/node_modules/lodash/after.js deleted file mode 100644 index 3900c97..0000000 --- a/node_modules/lodash/after.js +++ /dev/null @@ -1,42 +0,0 @@ -var toInteger = require('./toInteger'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ -function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; -} - -module.exports = after; diff --git a/node_modules/lodash/array.js b/node_modules/lodash/array.js deleted file mode 100644 index af688d3..0000000 --- a/node_modules/lodash/array.js +++ /dev/null @@ -1,67 +0,0 @@ -module.exports = { - 'chunk': require('./chunk'), - 'compact': require('./compact'), - 'concat': require('./concat'), - 'difference': require('./difference'), - 'differenceBy': require('./differenceBy'), - 'differenceWith': require('./differenceWith'), - 'drop': require('./drop'), - 'dropRight': require('./dropRight'), - 'dropRightWhile': require('./dropRightWhile'), - 'dropWhile': require('./dropWhile'), - 'fill': require('./fill'), - 'findIndex': require('./findIndex'), - 'findLastIndex': require('./findLastIndex'), - 'first': require('./first'), - 'flatten': require('./flatten'), - 'flattenDeep': require('./flattenDeep'), - 'flattenDepth': require('./flattenDepth'), - 'fromPairs': require('./fromPairs'), - 'head': require('./head'), - 'indexOf': require('./indexOf'), - 'initial': require('./initial'), - 'intersection': require('./intersection'), - 'intersectionBy': require('./intersectionBy'), - 'intersectionWith': require('./intersectionWith'), - 'join': require('./join'), - 'last': require('./last'), - 'lastIndexOf': require('./lastIndexOf'), - 'nth': require('./nth'), - 'pull': require('./pull'), - 'pullAll': require('./pullAll'), - 'pullAllBy': require('./pullAllBy'), - 'pullAllWith': require('./pullAllWith'), - 'pullAt': require('./pullAt'), - 'remove': require('./remove'), - 'reverse': require('./reverse'), - 'slice': require('./slice'), - 'sortedIndex': require('./sortedIndex'), - 'sortedIndexBy': require('./sortedIndexBy'), - 'sortedIndexOf': require('./sortedIndexOf'), - 'sortedLastIndex': require('./sortedLastIndex'), - 'sortedLastIndexBy': require('./sortedLastIndexBy'), - 'sortedLastIndexOf': require('./sortedLastIndexOf'), - 'sortedUniq': require('./sortedUniq'), - 'sortedUniqBy': require('./sortedUniqBy'), - 'tail': require('./tail'), - 'take': require('./take'), - 'takeRight': require('./takeRight'), - 'takeRightWhile': require('./takeRightWhile'), - 'takeWhile': require('./takeWhile'), - 'union': require('./union'), - 'unionBy': require('./unionBy'), - 'unionWith': require('./unionWith'), - 'uniq': require('./uniq'), - 'uniqBy': require('./uniqBy'), - 'uniqWith': require('./uniqWith'), - 'unzip': require('./unzip'), - 'unzipWith': require('./unzipWith'), - 'without': require('./without'), - 'xor': require('./xor'), - 'xorBy': require('./xorBy'), - 'xorWith': require('./xorWith'), - 'zip': require('./zip'), - 'zipObject': require('./zipObject'), - 'zipObjectDeep': require('./zipObjectDeep'), - 'zipWith': require('./zipWith') -}; diff --git a/node_modules/lodash/ary.js b/node_modules/lodash/ary.js deleted file mode 100644 index 70c87d0..0000000 --- a/node_modules/lodash/ary.js +++ /dev/null @@ -1,29 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_ARY_FLAG = 128; - -/** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ -function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); -} - -module.exports = ary; diff --git a/node_modules/lodash/assign.js b/node_modules/lodash/assign.js deleted file mode 100644 index 909db26..0000000 --- a/node_modules/lodash/assign.js +++ /dev/null @@ -1,58 +0,0 @@ -var assignValue = require('./_assignValue'), - copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - isArrayLike = require('./isArrayLike'), - isPrototype = require('./_isPrototype'), - keys = require('./keys'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ -var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } -}); - -module.exports = assign; diff --git a/node_modules/lodash/assignIn.js b/node_modules/lodash/assignIn.js deleted file mode 100644 index e663473..0000000 --- a/node_modules/lodash/assignIn.js +++ /dev/null @@ -1,40 +0,0 @@ -var copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ -var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); -}); - -module.exports = assignIn; diff --git a/node_modules/lodash/assignInWith.js b/node_modules/lodash/assignInWith.js deleted file mode 100644 index 68fcc0b..0000000 --- a/node_modules/lodash/assignInWith.js +++ /dev/null @@ -1,38 +0,0 @@ -var copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); -}); - -module.exports = assignInWith; diff --git a/node_modules/lodash/assignWith.js b/node_modules/lodash/assignWith.js deleted file mode 100644 index 7dc6c76..0000000 --- a/node_modules/lodash/assignWith.js +++ /dev/null @@ -1,37 +0,0 @@ -var copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - keys = require('./keys'); - -/** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); -}); - -module.exports = assignWith; diff --git a/node_modules/lodash/at.js b/node_modules/lodash/at.js deleted file mode 100644 index 781ee9e..0000000 --- a/node_modules/lodash/at.js +++ /dev/null @@ -1,23 +0,0 @@ -var baseAt = require('./_baseAt'), - flatRest = require('./_flatRest'); - -/** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ -var at = flatRest(baseAt); - -module.exports = at; diff --git a/node_modules/lodash/attempt.js b/node_modules/lodash/attempt.js deleted file mode 100644 index 624d015..0000000 --- a/node_modules/lodash/attempt.js +++ /dev/null @@ -1,35 +0,0 @@ -var apply = require('./_apply'), - baseRest = require('./_baseRest'), - isError = require('./isError'); - -/** - * Attempts to invoke `func`, returning either the result or the caught error - * object. Any additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {Function} func The function to attempt. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {*} Returns the `func` result or error object. - * @example - * - * // Avoid throwing errors for invalid selectors. - * var elements = _.attempt(function(selector) { - * return document.querySelectorAll(selector); - * }, '>_>'); - * - * if (_.isError(elements)) { - * elements = []; - * } - */ -var attempt = baseRest(function(func, args) { - try { - return apply(func, undefined, args); - } catch (e) { - return isError(e) ? e : new Error(e); - } -}); - -module.exports = attempt; diff --git a/node_modules/lodash/before.js b/node_modules/lodash/before.js deleted file mode 100644 index a3e0a16..0000000 --- a/node_modules/lodash/before.js +++ /dev/null @@ -1,40 +0,0 @@ -var toInteger = require('./toInteger'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ -function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; -} - -module.exports = before; diff --git a/node_modules/lodash/bind.js b/node_modules/lodash/bind.js deleted file mode 100644 index b1076e9..0000000 --- a/node_modules/lodash/bind.js +++ /dev/null @@ -1,57 +0,0 @@ -var baseRest = require('./_baseRest'), - createWrap = require('./_createWrap'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_PARTIAL_FLAG = 32; - -/** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ -var bind = baseRest(function(func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); -}); - -// Assign default placeholders. -bind.placeholder = {}; - -module.exports = bind; diff --git a/node_modules/lodash/bindAll.js b/node_modules/lodash/bindAll.js deleted file mode 100644 index a35706d..0000000 --- a/node_modules/lodash/bindAll.js +++ /dev/null @@ -1,41 +0,0 @@ -var arrayEach = require('./_arrayEach'), - baseAssignValue = require('./_baseAssignValue'), - bind = require('./bind'), - flatRest = require('./_flatRest'), - toKey = require('./_toKey'); - -/** - * Binds methods of an object to the object itself, overwriting the existing - * method. - * - * **Note:** This method doesn't set the "length" property of bound functions. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {Object} object The object to bind and assign the bound methods to. - * @param {...(string|string[])} methodNames The object method names to bind. - * @returns {Object} Returns `object`. - * @example - * - * var view = { - * 'label': 'docs', - * 'click': function() { - * console.log('clicked ' + this.label); - * } - * }; - * - * _.bindAll(view, ['click']); - * jQuery(element).on('click', view.click); - * // => Logs 'clicked docs' when clicked. - */ -var bindAll = flatRest(function(object, methodNames) { - arrayEach(methodNames, function(key) { - key = toKey(key); - baseAssignValue(object, key, bind(object[key], object)); - }); - return object; -}); - -module.exports = bindAll; diff --git a/node_modules/lodash/bindKey.js b/node_modules/lodash/bindKey.js deleted file mode 100644 index f7fd64c..0000000 --- a/node_modules/lodash/bindKey.js +++ /dev/null @@ -1,68 +0,0 @@ -var baseRest = require('./_baseRest'), - createWrap = require('./_createWrap'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_PARTIAL_FLAG = 32; - -/** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ -var bindKey = baseRest(function(object, key, partials) { - var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(key, bitmask, object, partials, holders); -}); - -// Assign default placeholders. -bindKey.placeholder = {}; - -module.exports = bindKey; diff --git a/node_modules/lodash/camelCase.js b/node_modules/lodash/camelCase.js deleted file mode 100644 index d7390de..0000000 --- a/node_modules/lodash/camelCase.js +++ /dev/null @@ -1,29 +0,0 @@ -var capitalize = require('./capitalize'), - createCompounder = require('./_createCompounder'); - -/** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ -var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); -}); - -module.exports = camelCase; diff --git a/node_modules/lodash/capitalize.js b/node_modules/lodash/capitalize.js deleted file mode 100644 index 3e1600e..0000000 --- a/node_modules/lodash/capitalize.js +++ /dev/null @@ -1,23 +0,0 @@ -var toString = require('./toString'), - upperFirst = require('./upperFirst'); - -/** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ -function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); -} - -module.exports = capitalize; diff --git a/node_modules/lodash/castArray.js b/node_modules/lodash/castArray.js deleted file mode 100644 index e470bdb..0000000 --- a/node_modules/lodash/castArray.js +++ /dev/null @@ -1,44 +0,0 @@ -var isArray = require('./isArray'); - -/** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ -function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; -} - -module.exports = castArray; diff --git a/node_modules/lodash/ceil.js b/node_modules/lodash/ceil.js deleted file mode 100644 index 56c8722..0000000 --- a/node_modules/lodash/ceil.js +++ /dev/null @@ -1,26 +0,0 @@ -var createRound = require('./_createRound'); - -/** - * Computes `number` rounded up to `precision`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Math - * @param {number} number The number to round up. - * @param {number} [precision=0] The precision to round up to. - * @returns {number} Returns the rounded up number. - * @example - * - * _.ceil(4.006); - * // => 5 - * - * _.ceil(6.004, 2); - * // => 6.01 - * - * _.ceil(6040, -2); - * // => 6100 - */ -var ceil = createRound('ceil'); - -module.exports = ceil; diff --git a/node_modules/lodash/chain.js b/node_modules/lodash/chain.js deleted file mode 100644 index f6cd647..0000000 --- a/node_modules/lodash/chain.js +++ /dev/null @@ -1,38 +0,0 @@ -var lodash = require('./wrapperLodash'); - -/** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ -function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; -} - -module.exports = chain; diff --git a/node_modules/lodash/chunk.js b/node_modules/lodash/chunk.js deleted file mode 100644 index 5b562fe..0000000 --- a/node_modules/lodash/chunk.js +++ /dev/null @@ -1,50 +0,0 @@ -var baseSlice = require('./_baseSlice'), - isIterateeCall = require('./_isIterateeCall'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ -function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array == null ? 0 : array.length; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; -} - -module.exports = chunk; diff --git a/node_modules/lodash/clamp.js b/node_modules/lodash/clamp.js deleted file mode 100644 index 91a72c9..0000000 --- a/node_modules/lodash/clamp.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseClamp = require('./_baseClamp'), - toNumber = require('./toNumber'); - -/** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ -function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); -} - -module.exports = clamp; diff --git a/node_modules/lodash/clone.js b/node_modules/lodash/clone.js deleted file mode 100644 index dd439d6..0000000 --- a/node_modules/lodash/clone.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_SYMBOLS_FLAG = 4; - -/** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ -function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG); -} - -module.exports = clone; diff --git a/node_modules/lodash/cloneDeep.js b/node_modules/lodash/cloneDeep.js deleted file mode 100644 index 4425fbe..0000000 --- a/node_modules/lodash/cloneDeep.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); -} - -module.exports = cloneDeep; diff --git a/node_modules/lodash/cloneDeepWith.js b/node_modules/lodash/cloneDeepWith.js deleted file mode 100644 index fd9c6c0..0000000 --- a/node_modules/lodash/cloneDeepWith.js +++ /dev/null @@ -1,40 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ -function cloneDeepWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); -} - -module.exports = cloneDeepWith; diff --git a/node_modules/lodash/cloneWith.js b/node_modules/lodash/cloneWith.js deleted file mode 100644 index d2f4e75..0000000 --- a/node_modules/lodash/cloneWith.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ -function cloneWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); -} - -module.exports = cloneWith; diff --git a/node_modules/lodash/collection.js b/node_modules/lodash/collection.js deleted file mode 100644 index 77fe837..0000000 --- a/node_modules/lodash/collection.js +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = { - 'countBy': require('./countBy'), - 'each': require('./each'), - 'eachRight': require('./eachRight'), - 'every': require('./every'), - 'filter': require('./filter'), - 'find': require('./find'), - 'findLast': require('./findLast'), - 'flatMap': require('./flatMap'), - 'flatMapDeep': require('./flatMapDeep'), - 'flatMapDepth': require('./flatMapDepth'), - 'forEach': require('./forEach'), - 'forEachRight': require('./forEachRight'), - 'groupBy': require('./groupBy'), - 'includes': require('./includes'), - 'invokeMap': require('./invokeMap'), - 'keyBy': require('./keyBy'), - 'map': require('./map'), - 'orderBy': require('./orderBy'), - 'partition': require('./partition'), - 'reduce': require('./reduce'), - 'reduceRight': require('./reduceRight'), - 'reject': require('./reject'), - 'sample': require('./sample'), - 'sampleSize': require('./sampleSize'), - 'shuffle': require('./shuffle'), - 'size': require('./size'), - 'some': require('./some'), - 'sortBy': require('./sortBy') -}; diff --git a/node_modules/lodash/commit.js b/node_modules/lodash/commit.js deleted file mode 100644 index fe4db71..0000000 --- a/node_modules/lodash/commit.js +++ /dev/null @@ -1,33 +0,0 @@ -var LodashWrapper = require('./_LodashWrapper'); - -/** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ -function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); -} - -module.exports = wrapperCommit; diff --git a/node_modules/lodash/compact.js b/node_modules/lodash/compact.js deleted file mode 100644 index 031fab4..0000000 --- a/node_modules/lodash/compact.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ -function compact(array) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; -} - -module.exports = compact; diff --git a/node_modules/lodash/concat.js b/node_modules/lodash/concat.js deleted file mode 100644 index 1da48a4..0000000 --- a/node_modules/lodash/concat.js +++ /dev/null @@ -1,43 +0,0 @@ -var arrayPush = require('./_arrayPush'), - baseFlatten = require('./_baseFlatten'), - copyArray = require('./_copyArray'), - isArray = require('./isArray'); - -/** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ -function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); -} - -module.exports = concat; diff --git a/node_modules/lodash/cond.js b/node_modules/lodash/cond.js deleted file mode 100644 index 6455598..0000000 --- a/node_modules/lodash/cond.js +++ /dev/null @@ -1,60 +0,0 @@ -var apply = require('./_apply'), - arrayMap = require('./_arrayMap'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that iterates over `pairs` and invokes the corresponding - * function of the first predicate to return truthy. The predicate-function - * pairs are invoked with the `this` binding and arguments of the created - * function. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Util - * @param {Array} pairs The predicate-function pairs. - * @returns {Function} Returns the new composite function. - * @example - * - * var func = _.cond([ - * [_.matches({ 'a': 1 }), _.constant('matches A')], - * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], - * [_.stubTrue, _.constant('no match')] - * ]); - * - * func({ 'a': 1, 'b': 2 }); - * // => 'matches A' - * - * func({ 'a': 0, 'b': 1 }); - * // => 'matches B' - * - * func({ 'a': '1', 'b': '2' }); - * // => 'no match' - */ -function cond(pairs) { - var length = pairs == null ? 0 : pairs.length, - toIteratee = baseIteratee; - - pairs = !length ? [] : arrayMap(pairs, function(pair) { - if (typeof pair[1] != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return [toIteratee(pair[0]), pair[1]]; - }); - - return baseRest(function(args) { - var index = -1; - while (++index < length) { - var pair = pairs[index]; - if (apply(pair[0], this, args)) { - return apply(pair[1], this, args); - } - } - }); -} - -module.exports = cond; diff --git a/node_modules/lodash/conforms.js b/node_modules/lodash/conforms.js deleted file mode 100644 index 5501a94..0000000 --- a/node_modules/lodash/conforms.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseClone = require('./_baseClone'), - baseConforms = require('./_baseConforms'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1; - -/** - * Creates a function that invokes the predicate properties of `source` with - * the corresponding property values of a given object, returning `true` if - * all predicates return truthy, else `false`. - * - * **Note:** The created function is equivalent to `_.conformsTo` with - * `source` partially applied. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Util - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - * @example - * - * var objects = [ - * { 'a': 2, 'b': 1 }, - * { 'a': 1, 'b': 2 } - * ]; - * - * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); - * // => [{ 'a': 1, 'b': 2 }] - */ -function conforms(source) { - return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); -} - -module.exports = conforms; diff --git a/node_modules/lodash/conformsTo.js b/node_modules/lodash/conformsTo.js deleted file mode 100644 index b8a93eb..0000000 --- a/node_modules/lodash/conformsTo.js +++ /dev/null @@ -1,32 +0,0 @@ -var baseConformsTo = require('./_baseConformsTo'), - keys = require('./keys'); - -/** - * Checks if `object` conforms to `source` by invoking the predicate - * properties of `source` with the corresponding property values of `object`. - * - * **Note:** This method is equivalent to `_.conforms` when `source` is - * partially applied. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); - * // => true - * - * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); - * // => false - */ -function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)); -} - -module.exports = conformsTo; diff --git a/node_modules/lodash/constant.js b/node_modules/lodash/constant.js deleted file mode 100644 index 655ece3..0000000 --- a/node_modules/lodash/constant.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ -function constant(value) { - return function() { - return value; - }; -} - -module.exports = constant; diff --git a/node_modules/lodash/core.js b/node_modules/lodash/core.js deleted file mode 100644 index caf078f..0000000 --- a/node_modules/lodash/core.js +++ /dev/null @@ -1,3877 +0,0 @@ -/** - * @license - * Lodash (Custom Build) - * Build: `lodash core -o ./dist/lodash.core.js` - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.17.23'; - - /** Error message constants. */ - var FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to compose bitmasks for value comparisons. */ - var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - - /** Used to compose bitmasks for function metadata. */ - var WRAP_BIND_FLAG = 1, - WRAP_PARTIAL_FLAG = 32; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - asyncTag = '[object AsyncFunction]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - numberTag = '[object Number]', - objectTag = '[object Object]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - stringTag = '[object String]'; - - /** Used to match HTML entities and HTML characters. */ - var reUnescapedHtml = /[&<>"']/g, - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /*--------------------------------------------------------------------------*/ - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - array.push.apply(array, values); - return array; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return baseMap(props, function(key) { - return object[key]; - }); - } - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - /*--------------------------------------------------------------------------*/ - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto.toString; - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Built-in value references. */ - var objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeIsFinite = root.isFinite, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array and iteratees accept only - * one argument. The heuristic for whether a section qualifies for shortcut - * fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - return value instanceof LodashWrapper - ? value - : new LodashWrapper(value); - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; - }()); - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - } - - LodashWrapper.prototype = baseCreate(lodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - object[key] = value; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !false) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return baseFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - return objectToString(value); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - var baseIsArguments = noop; - - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = objIsArr ? arrayTag : baseGetTag(object), - othTag = othIsArr ? arrayTag : baseGetTag(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - stack || (stack = []); - var objStack = find(stack, function(entry) { - return entry[0] == object; - }); - var othStack = find(stack, function(entry) { - return entry[0] == other; - }); - if (objStack && othStack) { - return objStack[1] == other; - } - stack.push([object, other]); - stack.push([other, object]); - if (isSameTag && !objIsObj) { - var result = (objIsArr) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - stack.pop(); - return result; - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - stack.pop(); - return result; - } - } - if (!isSameTag) { - return false; - } - var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack); - stack.pop(); - return result; - } - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(func) { - if (typeof func == 'function') { - return func; - } - if (func == null) { - return identity; - } - return (typeof func == 'object' ? baseMatches : baseProperty)(func); - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var props = nativeKeys(source); - return function(object) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length]; - if (!(key in object && - baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG) - )) { - return false; - } - } - return true; - }; - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, props) { - object = Object(object); - return reduce(props, function(result, key) { - if (key in object) { - result[key] = object[key]; - } - return result; - }, {}); - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source) { - return baseSlice(source, 0, source.length); - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - return reduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = false; - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = false; - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = baseIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return fn.apply(isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined; - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - var compared; - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!baseSome(other, function(othValue, othIndex) { - if (!indexOf(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - var compared; - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - return result; - } - - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value); - } - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value); - } - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return func.apply(this, otherArgs); - }; - } - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = identity; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - return baseFilter(array, Boolean); - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (typeof fromIndex == 'number') { - fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; - } else { - fromIndex = 0; - } - var index = (fromIndex || 0) - 1, - isReflexive = value === value; - - while (++index < length) { - var other = array[index]; - if ((isReflexive ? other === value : other !== other)) { - return index; - } - } - return -1; - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array == null ? 0 : array.length; - start = start == null ? 0 : +start; - end = end === undefined ? length : +end; - return length ? baseSlice(array, start, end) : []; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - predicate = guard ? undefined : predicate; - return baseEvery(collection, baseIteratee(predicate)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ - function filter(collection, predicate) { - return baseFilter(collection, baseIteratee(predicate)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - return baseEach(collection, baseIteratee(iteratee)); - } - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - return baseMap(collection, baseIteratee(iteratee)); - } - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - collection = isArrayLike(collection) ? collection : nativeKeys(collection); - return collection.length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - predicate = guard ? undefined : predicate; - return baseSome(collection, baseIteratee(predicate)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ - function sortBy(collection, iteratee) { - var index = 0; - iteratee = baseIteratee(iteratee); - - return baseMap(baseMap(collection, function(value, key, collection) { - return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; - }).sort(function(object, other) { - return compareAscending(object.criteria, other.criteria) || (object.index - other.index); - }), baseProperty('value')); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function(func, thisArg, partials) { - return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials); - }); - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - return !predicate.apply(this, args); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - if (!isObject(value)) { - return value; - } - return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && baseGetTag(value) == boolTag); - } - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = baseIsDate; - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || isString(value) || - isFunction(value.splice) || isArguments(value))) { - return !value.length; - } - return !nativeKeys(value).length; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are compared by strict equality, i.e. `===`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag); - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = baseIsRegExp; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); - } - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!isArrayLike(value)) { - return values(value); - } - return value.length ? copyArray(value) : []; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - var toInteger = Number; - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - var toNumber = Number; - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - if (typeof value == 'string') { - return value; - } - return value == null ? '' : (value + ''); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function(object, source) { - copyObject(source, nativeKeys(source), object); - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, nativeKeysIn(source), object); - }); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties == null ? result : assign(result, properties); - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; - }); - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasOwnProperty.call(object, path); - } - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - var keys = nativeKeys; - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - var keysIn = nativeKeysIn; - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function(object, paths) { - return object == null ? {} : basePick(object, paths); - }); - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - var value = object == null ? undefined : object[path]; - if (value === undefined) { - value = defaultValue; - } - return isFunction(value) ? value.call(object) : value; - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object == null ? [] : baseValues(object, keys(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /*------------------------------------------------------------------------*/ - - /** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ - function identity(value) { - return value; - } - - /** - * Creates a function that invokes `func` with the arguments of the created - * function. If `func` is a property name, the created function returns the - * property value for a given element. If `func` is an array or object, the - * created function returns `true` for elements that contain the equivalent - * source properties, otherwise it returns `false`. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Util - * @param {*} [func=_.identity] The value to convert to a callback. - * @returns {Function} Returns the callback. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); - * // => [{ 'user': 'barney', 'age': 36, 'active': true }] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, _.iteratee(['user', 'fred'])); - * // => [{ 'user': 'fred', 'age': 40 }] - * - * // The `_.property` iteratee shorthand. - * _.map(users, _.iteratee('user')); - * // => ['barney', 'fred'] - * - * // Create custom iteratee shorthands. - * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { - * return !_.isRegExp(func) ? iteratee(func) : function(string) { - * return func.test(string); - * }; - * }); - * - * _.filter(['abc', 'def'], /ef/); - * // => ['def'] - */ - var iteratee = baseIteratee; - - /** - * Creates a function that performs a partial deep comparison between a given - * object and `source`, returning `true` if the given object has equivalent - * property values, else `false`. - * - * **Note:** The created function is equivalent to `_.isMatch` with `source` - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * **Note:** Multiple values can be checked by combining several matchers - * using `_.overSome` - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - * @example - * - * var objects = [ - * { 'a': 1, 'b': 2, 'c': 3 }, - * { 'a': 4, 'b': 5, 'c': 6 } - * ]; - * - * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); - * // => [{ 'a': 4, 'b': 5, 'c': 6 }] - * - * // Checking for several possible values - * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })])); - * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] - */ - function matches(source) { - return baseMatches(assign({}, source)); - } - - /** - * Adds all own enumerable string keyed function properties of a source - * object to the destination object. If `object` is a function, then methods - * are added to its prototype as well. - * - * **Note:** Use `_.runInContext` to create a pristine `lodash` function to - * avoid conflicts caused by modifying the original. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {Function|Object} [object=lodash] The destination object. - * @param {Object} source The object of functions to add. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.chain=true] Specify whether mixins are chainable. - * @returns {Function|Object} Returns `object`. - * @example - * - * function vowels(string) { - * return _.filter(string, function(v) { - * return /[aeiou]/i.test(v); - * }); - * } - * - * _.mixin({ 'vowels': vowels }); - * _.vowels('fred'); - * // => ['e'] - * - * _('fred').vowels().value(); - * // => ['e'] - * - * _.mixin({ 'vowels': vowels }, { 'chain': false }); - * _('fred').vowels(); - * // => ['e'] - */ - function mixin(object, source, options) { - var props = keys(source), - methodNames = baseFunctions(source, props); - - if (options == null && - !(isObject(source) && (methodNames.length || !props.length))) { - options = source; - source = object; - object = this; - methodNames = baseFunctions(source, keys(source)); - } - var chain = !(isObject(options) && 'chain' in options) || !!options.chain, - isFunc = isFunction(object); - - baseEach(methodNames, function(methodName) { - var func = source[methodName]; - object[methodName] = func; - if (isFunc) { - object.prototype[methodName] = function() { - var chainAll = this.__chain__; - if (chain || chainAll) { - var result = object(this.__wrapped__), - actions = result.__actions__ = copyArray(this.__actions__); - - actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); - result.__chain__ = chainAll; - return result; - } - return func.apply(object, arrayPush([this.value()], arguments)); - }; - } - }); - - return object; - } - - /** - * Reverts the `_` variable to its previous value and returns a reference to - * the `lodash` function. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @returns {Function} Returns the `lodash` function. - * @example - * - * var lodash = _.noConflict(); - */ - function noConflict() { - if (root._ === this) { - root._ = oldDash; - } - return this; - } - - /** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ - function noop() { - // No operation performed. - } - - /** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ - function uniqueId(prefix) { - var id = ++idCounter; - return toString(prefix) + id; - } - - /*------------------------------------------------------------------------*/ - - /** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ - function max(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseGt) - : undefined; - } - - /** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ - function min(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseLt) - : undefined; - } - - /*------------------------------------------------------------------------*/ - - // Add methods that return wrapped values in chain sequences. - lodash.assignIn = assignIn; - lodash.before = before; - lodash.bind = bind; - lodash.chain = chain; - lodash.compact = compact; - lodash.concat = concat; - lodash.create = create; - lodash.defaults = defaults; - lodash.defer = defer; - lodash.delay = delay; - lodash.filter = filter; - lodash.flatten = flatten; - lodash.flattenDeep = flattenDeep; - lodash.iteratee = iteratee; - lodash.keys = keys; - lodash.map = map; - lodash.matches = matches; - lodash.mixin = mixin; - lodash.negate = negate; - lodash.once = once; - lodash.pick = pick; - lodash.slice = slice; - lodash.sortBy = sortBy; - lodash.tap = tap; - lodash.thru = thru; - lodash.toArray = toArray; - lodash.values = values; - - // Add aliases. - lodash.extend = assignIn; - - // Add methods to `lodash.prototype`. - mixin(lodash, lodash); - - /*------------------------------------------------------------------------*/ - - // Add methods that return unwrapped values in chain sequences. - lodash.clone = clone; - lodash.escape = escape; - lodash.every = every; - lodash.find = find; - lodash.forEach = forEach; - lodash.has = has; - lodash.head = head; - lodash.identity = identity; - lodash.indexOf = indexOf; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isBoolean = isBoolean; - lodash.isDate = isDate; - lodash.isEmpty = isEmpty; - lodash.isEqual = isEqual; - lodash.isFinite = isFinite; - lodash.isFunction = isFunction; - lodash.isNaN = isNaN; - lodash.isNull = isNull; - lodash.isNumber = isNumber; - lodash.isObject = isObject; - lodash.isRegExp = isRegExp; - lodash.isString = isString; - lodash.isUndefined = isUndefined; - lodash.last = last; - lodash.max = max; - lodash.min = min; - lodash.noConflict = noConflict; - lodash.noop = noop; - lodash.reduce = reduce; - lodash.result = result; - lodash.size = size; - lodash.some = some; - lodash.uniqueId = uniqueId; - - // Add aliases. - lodash.each = forEach; - lodash.first = head; - - mixin(lodash, (function() { - var source = {}; - baseForOwn(lodash, function(func, methodName) { - if (!hasOwnProperty.call(lodash.prototype, methodName)) { - source[methodName] = func; - } - }); - return source; - }()), { 'chain': false }); - - /*------------------------------------------------------------------------*/ - - /** - * The semantic version number. - * - * @static - * @memberOf _ - * @type {string} - */ - lodash.VERSION = VERSION; - - // Add `Array` methods to `lodash.prototype`. - baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { - var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], - chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', - retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); - - lodash.prototype[methodName] = function() { - var args = arguments; - if (retUnwrapped && !this.__chain__) { - var value = this.value(); - return func.apply(isArray(value) ? value : [], args); - } - return this[chainName](function(value) { - return func.apply(isArray(value) ? value : [], args); - }); - }; - }); - - // Add chain sequence methods to the `lodash` wrapper. - lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; - - /*--------------------------------------------------------------------------*/ - - // Some AMD build optimizers, like r.js, check for condition patterns like: - if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { - // Expose Lodash on the global object to prevent errors when Lodash is - // loaded by a script tag in the presence of an AMD loader. - // See http://requirejs.org/docs/errors.html#mismatch for more details. - // Use `_.noConflict` to remove Lodash from the global object. - root._ = lodash; - - // Define as an anonymous module so, through path mapping, it can be - // referenced as the "underscore" module. - define(function() { - return lodash; - }); - } - // Check for `exports` after `define` in case a build optimizer adds it. - else if (freeModule) { - // Export for Node.js. - (freeModule.exports = lodash)._ = lodash; - // Export for CommonJS support. - freeExports._ = lodash; - } - else { - // Export to the global object. - root._ = lodash; - } -}.call(this)); diff --git a/node_modules/lodash/core.min.js b/node_modules/lodash/core.min.js deleted file mode 100644 index a992088..0000000 --- a/node_modules/lodash/core.min.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @license - * Lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE - * Build: `lodash core -o ./dist/lodash.core.js` - */ -;(function(){function n(n){return H(n)&&pn.call(n,"callee")&&!yn.call(n,"callee")}function t(n,t){return n.push.apply(n,t),n}function r(n){return function(t){return null==t?Z:t[n]}}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return j(t,function(t){return n[t]})}function o(n){return n instanceof i?n:new i(n)}function i(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function c(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function"); -return setTimeout(function(){n.apply(Z,r)},t)}function f(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function a(n,t,r){for(var e=-1,u=n.length;++et}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!H(t)?n!==n&&t!==t:y(n,t,r,e,b,u))}function y(n,t,r,e,u,o){var i=Nn(n),c=Nn(t),f=i?"[object Array]":hn.call(n),a=c?"[object Array]":hn.call(t),f="[object Arguments]"==f?"[object Object]":f,a="[object Arguments]"==a?"[object Object]":a,l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]);var p=An(o,function(t){return t[0]==n}),s=An(o,function(n){ -return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=T(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=J(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 1&r||(i=l&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=B(n,t,r,e,u,o),o.pop(),r):(i=i?n.value():n,f=f?t.value():t, -r=u(i,f,r,e,o),o.pop(),r)}function g(n){return typeof n=="function"?n:null==n?X:(typeof n=="object"?d:r)(n)}function _(n,t){return nt&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++ei))return false;var c=o.get(n),f=o.get(t);if(c&&f)return c==t&&f==n;for(var c=-1,f=true,a=2&r?[]:Z;++cr?jn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++rarguments.length,mn); -}function G(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Fn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=Z),r}}function J(n,t){return n===t||n!==n&&t!==t}function M(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1=t),t&&!U(n)}function U(n){return!!V(n)&&(n=hn.call(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function V(n){var t=typeof n; -return null!=n&&("object"==t||"function"==t)}function H(n){return null!=n&&typeof n=="object"}function K(n){return typeof n=="number"||H(n)&&"[object Number]"==hn.call(n)}function L(n){return typeof n=="string"||!Nn(n)&&H(n)&&"[object String]"==hn.call(n)}function Q(n){return typeof n=="string"?n:null==n?"":n+""}function W(n){return null==n?[]:u(n,Dn(n))}function X(n){return n}function Y(n,r,e){var u=Dn(r),o=h(r,u);null!=e||V(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=h(r,Dn(r)));var i=!(V(e)&&"chain"in e&&!e.chain),c=U(n); -return mn(o,function(e){var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=n(this.__wrapped__);return(e.__actions__=A(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var Z,nn=1/0,tn=/[&<>"']/g,rn=RegExp(tn.source),en=/^(?:0|[1-9]\d*)$/,un=typeof self=="object"&&self&&self.Object===Object&&self,on=typeof global=="object"&&global&&global.Object===Object&&global||un||Function("return this")(),cn=(un=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,fn=function(n){ -return function(t){return null==n?Z:n[t]}}({"&":"&","<":"<",">":">",'"':""","'":"'"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,bn=Object.create,yn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return V(t)?bn?bn(t):(n.prototype=t,t=new n,n.prototype=Z,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i; -var mn=function(n,t){return function(r,e){if(null==r)return r;if(!M(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++or&&(r=jn(e+r,0));n:{for(t=g(t),e=n.length,r+=-1;++re||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ -var countBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } -}); - -module.exports = countBy; diff --git a/node_modules/lodash/create.js b/node_modules/lodash/create.js deleted file mode 100644 index 919edb8..0000000 --- a/node_modules/lodash/create.js +++ /dev/null @@ -1,43 +0,0 @@ -var baseAssign = require('./_baseAssign'), - baseCreate = require('./_baseCreate'); - -/** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ -function create(prototype, properties) { - var result = baseCreate(prototype); - return properties == null ? result : baseAssign(result, properties); -} - -module.exports = create; diff --git a/node_modules/lodash/curry.js b/node_modules/lodash/curry.js deleted file mode 100644 index 918db1a..0000000 --- a/node_modules/lodash/curry.js +++ /dev/null @@ -1,57 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_CURRY_FLAG = 8; - -/** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ -function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curry.placeholder; - return result; -} - -// Assign default placeholders. -curry.placeholder = {}; - -module.exports = curry; diff --git a/node_modules/lodash/curryRight.js b/node_modules/lodash/curryRight.js deleted file mode 100644 index c85b6f3..0000000 --- a/node_modules/lodash/curryRight.js +++ /dev/null @@ -1,54 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_CURRY_RIGHT_FLAG = 16; - -/** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ -function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryRight.placeholder; - return result; -} - -// Assign default placeholders. -curryRight.placeholder = {}; - -module.exports = curryRight; diff --git a/node_modules/lodash/date.js b/node_modules/lodash/date.js deleted file mode 100644 index cbf5b41..0000000 --- a/node_modules/lodash/date.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - 'now': require('./now') -}; diff --git a/node_modules/lodash/debounce.js b/node_modules/lodash/debounce.js deleted file mode 100644 index 8f751d5..0000000 --- a/node_modules/lodash/debounce.js +++ /dev/null @@ -1,191 +0,0 @@ -var isObject = require('./isObject'), - now = require('./now'), - toNumber = require('./toNumber'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ -function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - timeWaiting = wait - timeSinceLastCall; - - return maxing - ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) - : timeWaiting; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - clearTimeout(timerId); - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; -} - -module.exports = debounce; diff --git a/node_modules/lodash/deburr.js b/node_modules/lodash/deburr.js deleted file mode 100644 index f85e314..0000000 --- a/node_modules/lodash/deburr.js +++ /dev/null @@ -1,45 +0,0 @@ -var deburrLetter = require('./_deburrLetter'), - toString = require('./toString'); - -/** Used to match Latin Unicode letters (excluding mathematical operators). */ -var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - -/** Used to compose unicode character classes. */ -var rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; - -/** Used to compose unicode capture groups. */ -var rsCombo = '[' + rsComboRange + ']'; - -/** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ -var reComboMark = RegExp(rsCombo, 'g'); - -/** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ -function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); -} - -module.exports = deburr; diff --git a/node_modules/lodash/defaultTo.js b/node_modules/lodash/defaultTo.js deleted file mode 100644 index 5b33359..0000000 --- a/node_modules/lodash/defaultTo.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Checks `value` to determine whether a default value should be returned in - * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, - * or `undefined`. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Util - * @param {*} value The value to check. - * @param {*} defaultValue The default value. - * @returns {*} Returns the resolved value. - * @example - * - * _.defaultTo(1, 10); - * // => 1 - * - * _.defaultTo(undefined, 10); - * // => 10 - */ -function defaultTo(value, defaultValue) { - return (value == null || value !== value) ? defaultValue : value; -} - -module.exports = defaultTo; diff --git a/node_modules/lodash/defaults.js b/node_modules/lodash/defaults.js deleted file mode 100644 index c74df04..0000000 --- a/node_modules/lodash/defaults.js +++ /dev/null @@ -1,64 +0,0 @@ -var baseRest = require('./_baseRest'), - eq = require('./eq'), - isIterateeCall = require('./_isIterateeCall'), - keysIn = require('./keysIn'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var defaults = baseRest(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; -}); - -module.exports = defaults; diff --git a/node_modules/lodash/defaultsDeep.js b/node_modules/lodash/defaultsDeep.js deleted file mode 100644 index 9b5fa3e..0000000 --- a/node_modules/lodash/defaultsDeep.js +++ /dev/null @@ -1,30 +0,0 @@ -var apply = require('./_apply'), - baseRest = require('./_baseRest'), - customDefaultsMerge = require('./_customDefaultsMerge'), - mergeWith = require('./mergeWith'); - -/** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ -var defaultsDeep = baseRest(function(args) { - args.push(undefined, customDefaultsMerge); - return apply(mergeWith, undefined, args); -}); - -module.exports = defaultsDeep; diff --git a/node_modules/lodash/defer.js b/node_modules/lodash/defer.js deleted file mode 100644 index f6d6c6f..0000000 --- a/node_modules/lodash/defer.js +++ /dev/null @@ -1,26 +0,0 @@ -var baseDelay = require('./_baseDelay'), - baseRest = require('./_baseRest'); - -/** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ -var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); -}); - -module.exports = defer; diff --git a/node_modules/lodash/delay.js b/node_modules/lodash/delay.js deleted file mode 100644 index bd55479..0000000 --- a/node_modules/lodash/delay.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseDelay = require('./_baseDelay'), - baseRest = require('./_baseRest'), - toNumber = require('./toNumber'); - -/** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ -var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); -}); - -module.exports = delay; diff --git a/node_modules/lodash/difference.js b/node_modules/lodash/difference.js deleted file mode 100644 index fa28bb3..0000000 --- a/node_modules/lodash/difference.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseRest = require('./_baseRest'), - isArrayLikeObject = require('./isArrayLikeObject'); - -/** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ -var difference = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; -}); - -module.exports = difference; diff --git a/node_modules/lodash/differenceBy.js b/node_modules/lodash/differenceBy.js deleted file mode 100644 index 2cd63e7..0000000 --- a/node_modules/lodash/differenceBy.js +++ /dev/null @@ -1,44 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'), - isArrayLikeObject = require('./isArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.difference` except that it accepts `iteratee` which - * is invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * **Note:** Unlike `_.pullAllBy`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ -var differenceBy = baseRest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)) - : []; -}); - -module.exports = differenceBy; diff --git a/node_modules/lodash/differenceWith.js b/node_modules/lodash/differenceWith.js deleted file mode 100644 index c0233f4..0000000 --- a/node_modules/lodash/differenceWith.js +++ /dev/null @@ -1,40 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseRest = require('./_baseRest'), - isArrayLikeObject = require('./isArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. The order and - * references of result values are determined by the first array. The comparator - * is invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.pullAllWith`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ -var differenceWith = baseRest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) - : []; -}); - -module.exports = differenceWith; diff --git a/node_modules/lodash/divide.js b/node_modules/lodash/divide.js deleted file mode 100644 index 8cae0cd..0000000 --- a/node_modules/lodash/divide.js +++ /dev/null @@ -1,22 +0,0 @@ -var createMathOperation = require('./_createMathOperation'); - -/** - * Divide two numbers. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Math - * @param {number} dividend The first number in a division. - * @param {number} divisor The second number in a division. - * @returns {number} Returns the quotient. - * @example - * - * _.divide(6, 4); - * // => 1.5 - */ -var divide = createMathOperation(function(dividend, divisor) { - return dividend / divisor; -}, 1); - -module.exports = divide; diff --git a/node_modules/lodash/drop.js b/node_modules/lodash/drop.js deleted file mode 100644 index d5c3cba..0000000 --- a/node_modules/lodash/drop.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseSlice = require('./_baseSlice'), - toInteger = require('./toInteger'); - -/** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ -function drop(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); -} - -module.exports = drop; diff --git a/node_modules/lodash/dropRight.js b/node_modules/lodash/dropRight.js deleted file mode 100644 index 441fe99..0000000 --- a/node_modules/lodash/dropRight.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseSlice = require('./_baseSlice'), - toInteger = require('./toInteger'); - -/** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ -function dropRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); -} - -module.exports = dropRight; diff --git a/node_modules/lodash/dropRightWhile.js b/node_modules/lodash/dropRightWhile.js deleted file mode 100644 index 9ad36a0..0000000 --- a/node_modules/lodash/dropRightWhile.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - baseWhile = require('./_baseWhile'); - -/** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ -function dropRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, baseIteratee(predicate, 3), true, true) - : []; -} - -module.exports = dropRightWhile; diff --git a/node_modules/lodash/dropWhile.js b/node_modules/lodash/dropWhile.js deleted file mode 100644 index 903ef56..0000000 --- a/node_modules/lodash/dropWhile.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - baseWhile = require('./_baseWhile'); - -/** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ -function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, baseIteratee(predicate, 3), true) - : []; -} - -module.exports = dropWhile; diff --git a/node_modules/lodash/each.js b/node_modules/lodash/each.js deleted file mode 100644 index 8800f42..0000000 --- a/node_modules/lodash/each.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEach'); diff --git a/node_modules/lodash/eachRight.js b/node_modules/lodash/eachRight.js deleted file mode 100644 index 3252b2a..0000000 --- a/node_modules/lodash/eachRight.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEachRight'); diff --git a/node_modules/lodash/endsWith.js b/node_modules/lodash/endsWith.js deleted file mode 100644 index 76fc866..0000000 --- a/node_modules/lodash/endsWith.js +++ /dev/null @@ -1,43 +0,0 @@ -var baseClamp = require('./_baseClamp'), - baseToString = require('./_baseToString'), - toInteger = require('./toInteger'), - toString = require('./toString'); - -/** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ -function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; -} - -module.exports = endsWith; diff --git a/node_modules/lodash/entries.js b/node_modules/lodash/entries.js deleted file mode 100644 index 7a88df2..0000000 --- a/node_modules/lodash/entries.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairs'); diff --git a/node_modules/lodash/entriesIn.js b/node_modules/lodash/entriesIn.js deleted file mode 100644 index f6c6331..0000000 --- a/node_modules/lodash/entriesIn.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairsIn'); diff --git a/node_modules/lodash/eq.js b/node_modules/lodash/eq.js deleted file mode 100644 index a940688..0000000 --- a/node_modules/lodash/eq.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -module.exports = eq; diff --git a/node_modules/lodash/escape.js b/node_modules/lodash/escape.js deleted file mode 100644 index 9247e00..0000000 --- a/node_modules/lodash/escape.js +++ /dev/null @@ -1,43 +0,0 @@ -var escapeHtmlChar = require('./_escapeHtmlChar'), - toString = require('./toString'); - -/** Used to match HTML entities and HTML characters. */ -var reUnescapedHtml = /[&<>"']/g, - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - -/** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ -function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; -} - -module.exports = escape; diff --git a/node_modules/lodash/escapeRegExp.js b/node_modules/lodash/escapeRegExp.js deleted file mode 100644 index 0a58c69..0000000 --- a/node_modules/lodash/escapeRegExp.js +++ /dev/null @@ -1,32 +0,0 @@ -var toString = require('./toString'); - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - -/** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ -function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; -} - -module.exports = escapeRegExp; diff --git a/node_modules/lodash/every.js b/node_modules/lodash/every.js deleted file mode 100644 index 25080da..0000000 --- a/node_modules/lodash/every.js +++ /dev/null @@ -1,56 +0,0 @@ -var arrayEvery = require('./_arrayEvery'), - baseEvery = require('./_baseEvery'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ -function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, baseIteratee(predicate, 3)); -} - -module.exports = every; diff --git a/node_modules/lodash/extend.js b/node_modules/lodash/extend.js deleted file mode 100644 index e00166c..0000000 --- a/node_modules/lodash/extend.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignIn'); diff --git a/node_modules/lodash/extendWith.js b/node_modules/lodash/extendWith.js deleted file mode 100644 index dbdcb3b..0000000 --- a/node_modules/lodash/extendWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInWith'); diff --git a/node_modules/lodash/fill.js b/node_modules/lodash/fill.js deleted file mode 100644 index ae13aa1..0000000 --- a/node_modules/lodash/fill.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseFill = require('./_baseFill'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ -function fill(array, value, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); -} - -module.exports = fill; diff --git a/node_modules/lodash/filter.js b/node_modules/lodash/filter.js deleted file mode 100644 index 89e0c8c..0000000 --- a/node_modules/lodash/filter.js +++ /dev/null @@ -1,52 +0,0 @@ -var arrayFilter = require('./_arrayFilter'), - baseFilter = require('./_baseFilter'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ -function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, baseIteratee(predicate, 3)); -} - -module.exports = filter; diff --git a/node_modules/lodash/find.js b/node_modules/lodash/find.js deleted file mode 100644 index de732cc..0000000 --- a/node_modules/lodash/find.js +++ /dev/null @@ -1,42 +0,0 @@ -var createFind = require('./_createFind'), - findIndex = require('./findIndex'); - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = createFind(findIndex); - -module.exports = find; diff --git a/node_modules/lodash/findIndex.js b/node_modules/lodash/findIndex.js deleted file mode 100644 index 4689069..0000000 --- a/node_modules/lodash/findIndex.js +++ /dev/null @@ -1,55 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIteratee = require('./_baseIteratee'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); -} - -module.exports = findIndex; diff --git a/node_modules/lodash/findKey.js b/node_modules/lodash/findKey.js deleted file mode 100644 index cac0248..0000000 --- a/node_modules/lodash/findKey.js +++ /dev/null @@ -1,44 +0,0 @@ -var baseFindKey = require('./_baseFindKey'), - baseForOwn = require('./_baseForOwn'), - baseIteratee = require('./_baseIteratee'); - -/** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ -function findKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn); -} - -module.exports = findKey; diff --git a/node_modules/lodash/findLast.js b/node_modules/lodash/findLast.js deleted file mode 100644 index 70b4271..0000000 --- a/node_modules/lodash/findLast.js +++ /dev/null @@ -1,25 +0,0 @@ -var createFind = require('./_createFind'), - findLastIndex = require('./findLastIndex'); - -/** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ -var findLast = createFind(findLastIndex); - -module.exports = findLast; diff --git a/node_modules/lodash/findLastIndex.js b/node_modules/lodash/findLastIndex.js deleted file mode 100644 index 7da3431..0000000 --- a/node_modules/lodash/findLastIndex.js +++ /dev/null @@ -1,59 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIteratee = require('./_baseIteratee'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ -function findLastIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index, true); -} - -module.exports = findLastIndex; diff --git a/node_modules/lodash/findLastKey.js b/node_modules/lodash/findLastKey.js deleted file mode 100644 index 66fb9fb..0000000 --- a/node_modules/lodash/findLastKey.js +++ /dev/null @@ -1,44 +0,0 @@ -var baseFindKey = require('./_baseFindKey'), - baseForOwnRight = require('./_baseForOwnRight'), - baseIteratee = require('./_baseIteratee'); - -/** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ -function findLastKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight); -} - -module.exports = findLastKey; diff --git a/node_modules/lodash/first.js b/node_modules/lodash/first.js deleted file mode 100644 index 53f4ad1..0000000 --- a/node_modules/lodash/first.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./head'); diff --git a/node_modules/lodash/flatMap.js b/node_modules/lodash/flatMap.js deleted file mode 100644 index e668506..0000000 --- a/node_modules/lodash/flatMap.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'); - -/** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ -function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); -} - -module.exports = flatMap; diff --git a/node_modules/lodash/flatMapDeep.js b/node_modules/lodash/flatMapDeep.js deleted file mode 100644 index 4653d60..0000000 --- a/node_modules/lodash/flatMapDeep.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ -function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); -} - -module.exports = flatMapDeep; diff --git a/node_modules/lodash/flatMapDepth.js b/node_modules/lodash/flatMapDepth.js deleted file mode 100644 index 6d72005..0000000 --- a/node_modules/lodash/flatMapDepth.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'), - toInteger = require('./toInteger'); - -/** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ -function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); -} - -module.exports = flatMapDepth; diff --git a/node_modules/lodash/flatten.js b/node_modules/lodash/flatten.js deleted file mode 100644 index 3f09f7f..0000000 --- a/node_modules/lodash/flatten.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseFlatten = require('./_baseFlatten'); - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; -} - -module.exports = flatten; diff --git a/node_modules/lodash/flattenDeep.js b/node_modules/lodash/flattenDeep.js deleted file mode 100644 index 8ad585c..0000000 --- a/node_modules/lodash/flattenDeep.js +++ /dev/null @@ -1,25 +0,0 @@ -var baseFlatten = require('./_baseFlatten'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ -function flattenDeep(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, INFINITY) : []; -} - -module.exports = flattenDeep; diff --git a/node_modules/lodash/flattenDepth.js b/node_modules/lodash/flattenDepth.js deleted file mode 100644 index 441fdcc..0000000 --- a/node_modules/lodash/flattenDepth.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - toInteger = require('./toInteger'); - -/** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ -function flattenDepth(array, depth) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); -} - -module.exports = flattenDepth; diff --git a/node_modules/lodash/flip.js b/node_modules/lodash/flip.js deleted file mode 100644 index c28dd78..0000000 --- a/node_modules/lodash/flip.js +++ /dev/null @@ -1,28 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_FLIP_FLAG = 512; - -/** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ -function flip(func) { - return createWrap(func, WRAP_FLIP_FLAG); -} - -module.exports = flip; diff --git a/node_modules/lodash/floor.js b/node_modules/lodash/floor.js deleted file mode 100644 index ab6dfa2..0000000 --- a/node_modules/lodash/floor.js +++ /dev/null @@ -1,26 +0,0 @@ -var createRound = require('./_createRound'); - -/** - * Computes `number` rounded down to `precision`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Math - * @param {number} number The number to round down. - * @param {number} [precision=0] The precision to round down to. - * @returns {number} Returns the rounded down number. - * @example - * - * _.floor(4.006); - * // => 4 - * - * _.floor(0.046, 2); - * // => 0.04 - * - * _.floor(4060, -2); - * // => 4000 - */ -var floor = createRound('floor'); - -module.exports = floor; diff --git a/node_modules/lodash/flow.js b/node_modules/lodash/flow.js deleted file mode 100644 index 74b6b62..0000000 --- a/node_modules/lodash/flow.js +++ /dev/null @@ -1,27 +0,0 @@ -var createFlow = require('./_createFlow'); - -/** - * Creates a function that returns the result of invoking the given functions - * with the `this` binding of the created function, where each successive - * invocation is supplied the return value of the previous. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {...(Function|Function[])} [funcs] The functions to invoke. - * @returns {Function} Returns the new composite function. - * @see _.flowRight - * @example - * - * function square(n) { - * return n * n; - * } - * - * var addSquare = _.flow([_.add, square]); - * addSquare(1, 2); - * // => 9 - */ -var flow = createFlow(); - -module.exports = flow; diff --git a/node_modules/lodash/flowRight.js b/node_modules/lodash/flowRight.js deleted file mode 100644 index 1146141..0000000 --- a/node_modules/lodash/flowRight.js +++ /dev/null @@ -1,26 +0,0 @@ -var createFlow = require('./_createFlow'); - -/** - * This method is like `_.flow` except that it creates a function that - * invokes the given functions from right to left. - * - * @static - * @since 3.0.0 - * @memberOf _ - * @category Util - * @param {...(Function|Function[])} [funcs] The functions to invoke. - * @returns {Function} Returns the new composite function. - * @see _.flow - * @example - * - * function square(n) { - * return n * n; - * } - * - * var addSquare = _.flowRight([square, _.add]); - * addSquare(1, 2); - * // => 9 - */ -var flowRight = createFlow(true); - -module.exports = flowRight; diff --git a/node_modules/lodash/forEach.js b/node_modules/lodash/forEach.js deleted file mode 100644 index c64eaa7..0000000 --- a/node_modules/lodash/forEach.js +++ /dev/null @@ -1,41 +0,0 @@ -var arrayEach = require('./_arrayEach'), - baseEach = require('./_baseEach'), - castFunction = require('./_castFunction'), - isArray = require('./isArray'); - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, castFunction(iteratee)); -} - -module.exports = forEach; diff --git a/node_modules/lodash/forEachRight.js b/node_modules/lodash/forEachRight.js deleted file mode 100644 index 7390eba..0000000 --- a/node_modules/lodash/forEachRight.js +++ /dev/null @@ -1,31 +0,0 @@ -var arrayEachRight = require('./_arrayEachRight'), - baseEachRight = require('./_baseEachRight'), - castFunction = require('./_castFunction'), - isArray = require('./isArray'); - -/** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ -function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, castFunction(iteratee)); -} - -module.exports = forEachRight; diff --git a/node_modules/lodash/forIn.js b/node_modules/lodash/forIn.js deleted file mode 100644 index 583a596..0000000 --- a/node_modules/lodash/forIn.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseFor = require('./_baseFor'), - castFunction = require('./_castFunction'), - keysIn = require('./keysIn'); - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, castFunction(iteratee), keysIn); -} - -module.exports = forIn; diff --git a/node_modules/lodash/forInRight.js b/node_modules/lodash/forInRight.js deleted file mode 100644 index 4aedf58..0000000 --- a/node_modules/lodash/forInRight.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseForRight = require('./_baseForRight'), - castFunction = require('./_castFunction'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ -function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, castFunction(iteratee), keysIn); -} - -module.exports = forInRight; diff --git a/node_modules/lodash/forOwn.js b/node_modules/lodash/forOwn.js deleted file mode 100644 index 94eed84..0000000 --- a/node_modules/lodash/forOwn.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseForOwn = require('./_baseForOwn'), - castFunction = require('./_castFunction'); - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && baseForOwn(object, castFunction(iteratee)); -} - -module.exports = forOwn; diff --git a/node_modules/lodash/forOwnRight.js b/node_modules/lodash/forOwnRight.js deleted file mode 100644 index 86f338f..0000000 --- a/node_modules/lodash/forOwnRight.js +++ /dev/null @@ -1,34 +0,0 @@ -var baseForOwnRight = require('./_baseForOwnRight'), - castFunction = require('./_castFunction'); - -/** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ -function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, castFunction(iteratee)); -} - -module.exports = forOwnRight; diff --git a/node_modules/lodash/fp.js b/node_modules/lodash/fp.js deleted file mode 100644 index e372dbb..0000000 --- a/node_modules/lodash/fp.js +++ /dev/null @@ -1,2 +0,0 @@ -var _ = require('./lodash.min').runInContext(); -module.exports = require('./fp/_baseConvert')(_, _); diff --git a/node_modules/lodash/fp/F.js b/node_modules/lodash/fp/F.js deleted file mode 100644 index a05a63a..0000000 --- a/node_modules/lodash/fp/F.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./stubFalse'); diff --git a/node_modules/lodash/fp/T.js b/node_modules/lodash/fp/T.js deleted file mode 100644 index e2ba8ea..0000000 --- a/node_modules/lodash/fp/T.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./stubTrue'); diff --git a/node_modules/lodash/fp/__.js b/node_modules/lodash/fp/__.js deleted file mode 100644 index 4af98de..0000000 --- a/node_modules/lodash/fp/__.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./placeholder'); diff --git a/node_modules/lodash/fp/_baseConvert.js b/node_modules/lodash/fp/_baseConvert.js deleted file mode 100644 index 9baf8e1..0000000 --- a/node_modules/lodash/fp/_baseConvert.js +++ /dev/null @@ -1,569 +0,0 @@ -var mapping = require('./_mapping'), - fallbackHolder = require('./placeholder'); - -/** Built-in value reference. */ -var push = Array.prototype.push; - -/** - * Creates a function, with an arity of `n`, that invokes `func` with the - * arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} n The arity of the new function. - * @returns {Function} Returns the new function. - */ -function baseArity(func, n) { - return n == 2 - ? function(a, b) { return func.apply(undefined, arguments); } - : function(a) { return func.apply(undefined, arguments); }; -} - -/** - * Creates a function that invokes `func`, with up to `n` arguments, ignoring - * any additional arguments. - * - * @private - * @param {Function} func The function to cap arguments for. - * @param {number} n The arity cap. - * @returns {Function} Returns the new function. - */ -function baseAry(func, n) { - return n == 2 - ? function(a, b) { return func(a, b); } - : function(a) { return func(a); }; -} - -/** - * Creates a clone of `array`. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the cloned array. - */ -function cloneArray(array) { - var length = array ? array.length : 0, - result = Array(length); - - while (length--) { - result[length] = array[length]; - } - return result; -} - -/** - * Creates a function that clones a given object using the assignment `func`. - * - * @private - * @param {Function} func The assignment function. - * @returns {Function} Returns the new cloner function. - */ -function createCloner(func) { - return function(object) { - return func({}, object); - }; -} - -/** - * A specialized version of `_.spread` which flattens the spread array into - * the arguments of the invoked `func`. - * - * @private - * @param {Function} func The function to spread arguments over. - * @param {number} start The start position of the spread. - * @returns {Function} Returns the new function. - */ -function flatSpread(func, start) { - return function() { - var length = arguments.length, - lastIndex = length - 1, - args = Array(length); - - while (length--) { - args[length] = arguments[length]; - } - var array = args[start], - otherArgs = args.slice(0, start); - - if (array) { - push.apply(otherArgs, array); - } - if (start != lastIndex) { - push.apply(otherArgs, args.slice(start + 1)); - } - return func.apply(this, otherArgs); - }; -} - -/** - * Creates a function that wraps `func` and uses `cloner` to clone the first - * argument it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} cloner The function to clone arguments. - * @returns {Function} Returns the new immutable function. - */ -function wrapImmutable(func, cloner) { - return function() { - var length = arguments.length; - if (!length) { - return; - } - var args = Array(length); - while (length--) { - args[length] = arguments[length]; - } - var result = args[0] = cloner.apply(undefined, args); - func.apply(undefined, args); - return result; - }; -} - -/** - * The base implementation of `convert` which accepts a `util` object of methods - * required to perform conversions. - * - * @param {Object} util The util object. - * @param {string} name The name of the function to convert. - * @param {Function} func The function to convert. - * @param {Object} [options] The options object. - * @param {boolean} [options.cap=true] Specify capping iteratee arguments. - * @param {boolean} [options.curry=true] Specify currying. - * @param {boolean} [options.fixed=true] Specify fixed arity. - * @param {boolean} [options.immutable=true] Specify immutable operations. - * @param {boolean} [options.rearg=true] Specify rearranging arguments. - * @returns {Function|Object} Returns the converted function or object. - */ -function baseConvert(util, name, func, options) { - var isLib = typeof name == 'function', - isObj = name === Object(name); - - if (isObj) { - options = func; - func = name; - name = undefined; - } - if (func == null) { - throw new TypeError; - } - options || (options = {}); - - var config = { - 'cap': 'cap' in options ? options.cap : true, - 'curry': 'curry' in options ? options.curry : true, - 'fixed': 'fixed' in options ? options.fixed : true, - 'immutable': 'immutable' in options ? options.immutable : true, - 'rearg': 'rearg' in options ? options.rearg : true - }; - - var defaultHolder = isLib ? func : fallbackHolder, - forceCurry = ('curry' in options) && options.curry, - forceFixed = ('fixed' in options) && options.fixed, - forceRearg = ('rearg' in options) && options.rearg, - pristine = isLib ? func.runInContext() : undefined; - - var helpers = isLib ? func : { - 'ary': util.ary, - 'assign': util.assign, - 'clone': util.clone, - 'curry': util.curry, - 'forEach': util.forEach, - 'isArray': util.isArray, - 'isError': util.isError, - 'isFunction': util.isFunction, - 'isWeakMap': util.isWeakMap, - 'iteratee': util.iteratee, - 'keys': util.keys, - 'rearg': util.rearg, - 'toInteger': util.toInteger, - 'toPath': util.toPath - }; - - var ary = helpers.ary, - assign = helpers.assign, - clone = helpers.clone, - curry = helpers.curry, - each = helpers.forEach, - isArray = helpers.isArray, - isError = helpers.isError, - isFunction = helpers.isFunction, - isWeakMap = helpers.isWeakMap, - keys = helpers.keys, - rearg = helpers.rearg, - toInteger = helpers.toInteger, - toPath = helpers.toPath; - - var aryMethodKeys = keys(mapping.aryMethod); - - var wrappers = { - 'castArray': function(castArray) { - return function() { - var value = arguments[0]; - return isArray(value) - ? castArray(cloneArray(value)) - : castArray.apply(undefined, arguments); - }; - }, - 'iteratee': function(iteratee) { - return function() { - var func = arguments[0], - arity = arguments[1], - result = iteratee(func, arity), - length = result.length; - - if (config.cap && typeof arity == 'number') { - arity = arity > 2 ? (arity - 2) : 1; - return (length && length <= arity) ? result : baseAry(result, arity); - } - return result; - }; - }, - 'mixin': function(mixin) { - return function(source) { - var func = this; - if (!isFunction(func)) { - return mixin(func, Object(source)); - } - var pairs = []; - each(keys(source), function(key) { - if (isFunction(source[key])) { - pairs.push([key, func.prototype[key]]); - } - }); - - mixin(func, Object(source)); - - each(pairs, function(pair) { - var value = pair[1]; - if (isFunction(value)) { - func.prototype[pair[0]] = value; - } else { - delete func.prototype[pair[0]]; - } - }); - return func; - }; - }, - 'nthArg': function(nthArg) { - return function(n) { - var arity = n < 0 ? 1 : (toInteger(n) + 1); - return curry(nthArg(n), arity); - }; - }, - 'rearg': function(rearg) { - return function(func, indexes) { - var arity = indexes ? indexes.length : 0; - return curry(rearg(func, indexes), arity); - }; - }, - 'runInContext': function(runInContext) { - return function(context) { - return baseConvert(util, runInContext(context), options); - }; - } - }; - - /*--------------------------------------------------------------------------*/ - - /** - * Casts `func` to a function with an arity capped iteratee if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @returns {Function} Returns the cast function. - */ - function castCap(name, func) { - if (config.cap) { - var indexes = mapping.iterateeRearg[name]; - if (indexes) { - return iterateeRearg(func, indexes); - } - var n = !isLib && mapping.iterateeAry[name]; - if (n) { - return iterateeAry(func, n); - } - } - return func; - } - - /** - * Casts `func` to a curried function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity of `func`. - * @returns {Function} Returns the cast function. - */ - function castCurry(name, func, n) { - return (forceCurry || (config.curry && n > 1)) - ? curry(func, n) - : func; - } - - /** - * Casts `func` to a fixed arity function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity cap. - * @returns {Function} Returns the cast function. - */ - function castFixed(name, func, n) { - if (config.fixed && (forceFixed || !mapping.skipFixed[name])) { - var data = mapping.methodSpread[name], - start = data && data.start; - - return start === undefined ? ary(func, n) : flatSpread(func, start); - } - return func; - } - - /** - * Casts `func` to an rearged function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity of `func`. - * @returns {Function} Returns the cast function. - */ - function castRearg(name, func, n) { - return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name])) - ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n]) - : func; - } - - /** - * Creates a clone of `object` by `path`. - * - * @private - * @param {Object} object The object to clone. - * @param {Array|string} path The path to clone by. - * @returns {Object} Returns the cloned object. - */ - function cloneByPath(object, path) { - path = toPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - result = clone(Object(object)), - nested = result; - - while (nested != null && ++index < length) { - var key = path[index], - value = nested[key]; - - if (value != null && - !(isFunction(value) || isError(value) || isWeakMap(value))) { - nested[key] = clone(index == lastIndex ? value : Object(value)); - } - nested = nested[key]; - } - return result; - } - - /** - * Converts `lodash` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. - * - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function} Returns the converted `lodash`. - */ - function convertLib(options) { - return _.runInContext.convert(options)(undefined); - } - - /** - * Create a converter function for `func` of `name`. - * - * @param {string} name The name of the function to convert. - * @param {Function} func The function to convert. - * @returns {Function} Returns the new converter function. - */ - function createConverter(name, func) { - var realName = mapping.aliasToReal[name] || name, - methodName = mapping.remap[realName] || realName, - oldOptions = options; - - return function(options) { - var newUtil = isLib ? pristine : helpers, - newFunc = isLib ? pristine[methodName] : func, - newOptions = assign(assign({}, oldOptions), options); - - return baseConvert(newUtil, realName, newFunc, newOptions); - }; - } - - /** - * Creates a function that wraps `func` to invoke its iteratee, with up to `n` - * arguments, ignoring any additional arguments. - * - * @private - * @param {Function} func The function to cap iteratee arguments for. - * @param {number} n The arity cap. - * @returns {Function} Returns the new function. - */ - function iterateeAry(func, n) { - return overArg(func, function(func) { - return typeof func == 'function' ? baseAry(func, n) : func; - }); - } - - /** - * Creates a function that wraps `func` to invoke its iteratee with arguments - * arranged according to the specified `indexes` where the argument value at - * the first index is provided as the first argument, the argument value at - * the second index is provided as the second argument, and so on. - * - * @private - * @param {Function} func The function to rearrange iteratee arguments for. - * @param {number[]} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - */ - function iterateeRearg(func, indexes) { - return overArg(func, function(func) { - var n = indexes.length; - return baseArity(rearg(baseAry(func, n), indexes), n); - }); - } - - /** - * Creates a function that invokes `func` with its first argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function() { - var length = arguments.length; - if (!length) { - return func(); - } - var args = Array(length); - while (length--) { - args[length] = arguments[length]; - } - var index = config.rearg ? 0 : (length - 1); - args[index] = transform(args[index]); - return func.apply(undefined, args); - }; - } - - /** - * Creates a function that wraps `func` and applys the conversions - * rules by `name`. - * - * @private - * @param {string} name The name of the function to wrap. - * @param {Function} func The function to wrap. - * @returns {Function} Returns the converted function. - */ - function wrap(name, func, placeholder) { - var result, - realName = mapping.aliasToReal[name] || name, - wrapped = func, - wrapper = wrappers[realName]; - - if (wrapper) { - wrapped = wrapper(func); - } - else if (config.immutable) { - if (mapping.mutate.array[realName]) { - wrapped = wrapImmutable(func, cloneArray); - } - else if (mapping.mutate.object[realName]) { - wrapped = wrapImmutable(func, createCloner(func)); - } - else if (mapping.mutate.set[realName]) { - wrapped = wrapImmutable(func, cloneByPath); - } - } - each(aryMethodKeys, function(aryKey) { - each(mapping.aryMethod[aryKey], function(otherName) { - if (realName == otherName) { - var data = mapping.methodSpread[realName], - afterRearg = data && data.afterRearg; - - result = afterRearg - ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey) - : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey); - - result = castCap(realName, result); - result = castCurry(realName, result, aryKey); - return false; - } - }); - return !result; - }); - - result || (result = wrapped); - if (result == func) { - result = forceCurry ? curry(result, 1) : function() { - return func.apply(this, arguments); - }; - } - result.convert = createConverter(realName, func); - result.placeholder = func.placeholder = placeholder; - - return result; - } - - /*--------------------------------------------------------------------------*/ - - if (!isObj) { - return wrap(name, func, defaultHolder); - } - var _ = func; - - // Convert methods by ary cap. - var pairs = []; - each(aryMethodKeys, function(aryKey) { - each(mapping.aryMethod[aryKey], function(key) { - var func = _[mapping.remap[key] || key]; - if (func) { - pairs.push([key, wrap(key, func, _)]); - } - }); - }); - - // Convert remaining methods. - each(keys(_), function(key) { - var func = _[key]; - if (typeof func == 'function') { - var length = pairs.length; - while (length--) { - if (pairs[length][0] == key) { - return; - } - } - func.convert = createConverter(key, func); - pairs.push([key, func]); - } - }); - - // Assign to `_` leaving `_.prototype` unchanged to allow chaining. - each(pairs, function(pair) { - _[pair[0]] = pair[1]; - }); - - _.convert = convertLib; - _.placeholder = _; - - // Assign aliases. - each(keys(_), function(key) { - each(mapping.realToAlias[key] || [], function(alias) { - _[alias] = _[key]; - }); - }); - - return _; -} - -module.exports = baseConvert; diff --git a/node_modules/lodash/fp/_convertBrowser.js b/node_modules/lodash/fp/_convertBrowser.js deleted file mode 100644 index bde030d..0000000 --- a/node_modules/lodash/fp/_convertBrowser.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseConvert = require('./_baseConvert'); - -/** - * Converts `lodash` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. - * - * @param {Function} lodash The lodash function to convert. - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function} Returns the converted `lodash`. - */ -function browserConvert(lodash, options) { - return baseConvert(lodash, lodash, options); -} - -if (typeof _ == 'function' && typeof _.runInContext == 'function') { - _ = browserConvert(_.runInContext()); -} -module.exports = browserConvert; diff --git a/node_modules/lodash/fp/_falseOptions.js b/node_modules/lodash/fp/_falseOptions.js deleted file mode 100644 index 773235e..0000000 --- a/node_modules/lodash/fp/_falseOptions.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - 'cap': false, - 'curry': false, - 'fixed': false, - 'immutable': false, - 'rearg': false -}; diff --git a/node_modules/lodash/fp/_mapping.js b/node_modules/lodash/fp/_mapping.js deleted file mode 100644 index a642ec0..0000000 --- a/node_modules/lodash/fp/_mapping.js +++ /dev/null @@ -1,358 +0,0 @@ -/** Used to map aliases to their real names. */ -exports.aliasToReal = { - - // Lodash aliases. - 'each': 'forEach', - 'eachRight': 'forEachRight', - 'entries': 'toPairs', - 'entriesIn': 'toPairsIn', - 'extend': 'assignIn', - 'extendAll': 'assignInAll', - 'extendAllWith': 'assignInAllWith', - 'extendWith': 'assignInWith', - 'first': 'head', - - // Methods that are curried variants of others. - 'conforms': 'conformsTo', - 'matches': 'isMatch', - 'property': 'get', - - // Ramda aliases. - '__': 'placeholder', - 'F': 'stubFalse', - 'T': 'stubTrue', - 'all': 'every', - 'allPass': 'overEvery', - 'always': 'constant', - 'any': 'some', - 'anyPass': 'overSome', - 'apply': 'spread', - 'assoc': 'set', - 'assocPath': 'set', - 'complement': 'negate', - 'compose': 'flowRight', - 'contains': 'includes', - 'dissoc': 'unset', - 'dissocPath': 'unset', - 'dropLast': 'dropRight', - 'dropLastWhile': 'dropRightWhile', - 'equals': 'isEqual', - 'identical': 'eq', - 'indexBy': 'keyBy', - 'init': 'initial', - 'invertObj': 'invert', - 'juxt': 'over', - 'omitAll': 'omit', - 'nAry': 'ary', - 'path': 'get', - 'pathEq': 'matchesProperty', - 'pathOr': 'getOr', - 'paths': 'at', - 'pickAll': 'pick', - 'pipe': 'flow', - 'pluck': 'map', - 'prop': 'get', - 'propEq': 'matchesProperty', - 'propOr': 'getOr', - 'props': 'at', - 'symmetricDifference': 'xor', - 'symmetricDifferenceBy': 'xorBy', - 'symmetricDifferenceWith': 'xorWith', - 'takeLast': 'takeRight', - 'takeLastWhile': 'takeRightWhile', - 'unapply': 'rest', - 'unnest': 'flatten', - 'useWith': 'overArgs', - 'where': 'conformsTo', - 'whereEq': 'isMatch', - 'zipObj': 'zipObject' -}; - -/** Used to map ary to method names. */ -exports.aryMethod = { - '1': [ - 'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create', - 'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow', - 'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll', - 'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse', - 'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart', - 'uniqueId', 'words', 'zipAll' - ], - '2': [ - 'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith', - 'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith', - 'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN', - 'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference', - 'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', - 'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex', - 'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach', - 'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get', - 'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection', - 'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy', - 'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty', - 'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit', - 'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial', - 'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll', - 'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove', - 'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex', - 'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy', - 'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', - 'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars', - 'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith', - 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject', - 'zipObjectDeep' - ], - '3': [ - 'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith', - 'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr', - 'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith', - 'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth', - 'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd', - 'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight', - 'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy', - 'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy', - 'xorWith', 'zipWith' - ], - '4': [ - 'fill', 'setWith', 'updateWith' - ] -}; - -/** Used to map ary to rearg configs. */ -exports.aryRearg = { - '2': [1, 0], - '3': [2, 0, 1], - '4': [3, 2, 0, 1] -}; - -/** Used to map method names to their iteratee ary. */ -exports.iterateeAry = { - 'dropRightWhile': 1, - 'dropWhile': 1, - 'every': 1, - 'filter': 1, - 'find': 1, - 'findFrom': 1, - 'findIndex': 1, - 'findIndexFrom': 1, - 'findKey': 1, - 'findLast': 1, - 'findLastFrom': 1, - 'findLastIndex': 1, - 'findLastIndexFrom': 1, - 'findLastKey': 1, - 'flatMap': 1, - 'flatMapDeep': 1, - 'flatMapDepth': 1, - 'forEach': 1, - 'forEachRight': 1, - 'forIn': 1, - 'forInRight': 1, - 'forOwn': 1, - 'forOwnRight': 1, - 'map': 1, - 'mapKeys': 1, - 'mapValues': 1, - 'partition': 1, - 'reduce': 2, - 'reduceRight': 2, - 'reject': 1, - 'remove': 1, - 'some': 1, - 'takeRightWhile': 1, - 'takeWhile': 1, - 'times': 1, - 'transform': 2 -}; - -/** Used to map method names to iteratee rearg configs. */ -exports.iterateeRearg = { - 'mapKeys': [1], - 'reduceRight': [1, 0] -}; - -/** Used to map method names to rearg configs. */ -exports.methodRearg = { - 'assignInAllWith': [1, 0], - 'assignInWith': [1, 2, 0], - 'assignAllWith': [1, 0], - 'assignWith': [1, 2, 0], - 'differenceBy': [1, 2, 0], - 'differenceWith': [1, 2, 0], - 'getOr': [2, 1, 0], - 'intersectionBy': [1, 2, 0], - 'intersectionWith': [1, 2, 0], - 'isEqualWith': [1, 2, 0], - 'isMatchWith': [2, 1, 0], - 'mergeAllWith': [1, 0], - 'mergeWith': [1, 2, 0], - 'padChars': [2, 1, 0], - 'padCharsEnd': [2, 1, 0], - 'padCharsStart': [2, 1, 0], - 'pullAllBy': [2, 1, 0], - 'pullAllWith': [2, 1, 0], - 'rangeStep': [1, 2, 0], - 'rangeStepRight': [1, 2, 0], - 'setWith': [3, 1, 2, 0], - 'sortedIndexBy': [2, 1, 0], - 'sortedLastIndexBy': [2, 1, 0], - 'unionBy': [1, 2, 0], - 'unionWith': [1, 2, 0], - 'updateWith': [3, 1, 2, 0], - 'xorBy': [1, 2, 0], - 'xorWith': [1, 2, 0], - 'zipWith': [1, 2, 0] -}; - -/** Used to map method names to spread configs. */ -exports.methodSpread = { - 'assignAll': { 'start': 0 }, - 'assignAllWith': { 'start': 0 }, - 'assignInAll': { 'start': 0 }, - 'assignInAllWith': { 'start': 0 }, - 'defaultsAll': { 'start': 0 }, - 'defaultsDeepAll': { 'start': 0 }, - 'invokeArgs': { 'start': 2 }, - 'invokeArgsMap': { 'start': 2 }, - 'mergeAll': { 'start': 0 }, - 'mergeAllWith': { 'start': 0 }, - 'partial': { 'start': 1 }, - 'partialRight': { 'start': 1 }, - 'without': { 'start': 1 }, - 'zipAll': { 'start': 0 } -}; - -/** Used to identify methods which mutate arrays or objects. */ -exports.mutate = { - 'array': { - 'fill': true, - 'pull': true, - 'pullAll': true, - 'pullAllBy': true, - 'pullAllWith': true, - 'pullAt': true, - 'remove': true, - 'reverse': true - }, - 'object': { - 'assign': true, - 'assignAll': true, - 'assignAllWith': true, - 'assignIn': true, - 'assignInAll': true, - 'assignInAllWith': true, - 'assignInWith': true, - 'assignWith': true, - 'defaults': true, - 'defaultsAll': true, - 'defaultsDeep': true, - 'defaultsDeepAll': true, - 'merge': true, - 'mergeAll': true, - 'mergeAllWith': true, - 'mergeWith': true, - }, - 'set': { - 'set': true, - 'setWith': true, - 'unset': true, - 'update': true, - 'updateWith': true - } -}; - -/** Used to map real names to their aliases. */ -exports.realToAlias = (function() { - var hasOwnProperty = Object.prototype.hasOwnProperty, - object = exports.aliasToReal, - result = {}; - - for (var key in object) { - var value = object[key]; - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - } - return result; -}()); - -/** Used to map method names to other names. */ -exports.remap = { - 'assignAll': 'assign', - 'assignAllWith': 'assignWith', - 'assignInAll': 'assignIn', - 'assignInAllWith': 'assignInWith', - 'curryN': 'curry', - 'curryRightN': 'curryRight', - 'defaultsAll': 'defaults', - 'defaultsDeepAll': 'defaultsDeep', - 'findFrom': 'find', - 'findIndexFrom': 'findIndex', - 'findLastFrom': 'findLast', - 'findLastIndexFrom': 'findLastIndex', - 'getOr': 'get', - 'includesFrom': 'includes', - 'indexOfFrom': 'indexOf', - 'invokeArgs': 'invoke', - 'invokeArgsMap': 'invokeMap', - 'lastIndexOfFrom': 'lastIndexOf', - 'mergeAll': 'merge', - 'mergeAllWith': 'mergeWith', - 'padChars': 'pad', - 'padCharsEnd': 'padEnd', - 'padCharsStart': 'padStart', - 'propertyOf': 'get', - 'rangeStep': 'range', - 'rangeStepRight': 'rangeRight', - 'restFrom': 'rest', - 'spreadFrom': 'spread', - 'trimChars': 'trim', - 'trimCharsEnd': 'trimEnd', - 'trimCharsStart': 'trimStart', - 'zipAll': 'zip' -}; - -/** Used to track methods that skip fixing their arity. */ -exports.skipFixed = { - 'castArray': true, - 'flow': true, - 'flowRight': true, - 'iteratee': true, - 'mixin': true, - 'rearg': true, - 'runInContext': true -}; - -/** Used to track methods that skip rearranging arguments. */ -exports.skipRearg = { - 'add': true, - 'assign': true, - 'assignIn': true, - 'bind': true, - 'bindKey': true, - 'concat': true, - 'difference': true, - 'divide': true, - 'eq': true, - 'gt': true, - 'gte': true, - 'isEqual': true, - 'lt': true, - 'lte': true, - 'matchesProperty': true, - 'merge': true, - 'multiply': true, - 'overArgs': true, - 'partial': true, - 'partialRight': true, - 'propertyOf': true, - 'random': true, - 'range': true, - 'rangeRight': true, - 'subtract': true, - 'zip': true, - 'zipObject': true, - 'zipObjectDeep': true -}; diff --git a/node_modules/lodash/fp/_util.js b/node_modules/lodash/fp/_util.js deleted file mode 100644 index 1dbf36f..0000000 --- a/node_modules/lodash/fp/_util.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - 'ary': require('../ary'), - 'assign': require('../_baseAssign'), - 'clone': require('../clone'), - 'curry': require('../curry'), - 'forEach': require('../_arrayEach'), - 'isArray': require('../isArray'), - 'isError': require('../isError'), - 'isFunction': require('../isFunction'), - 'isWeakMap': require('../isWeakMap'), - 'iteratee': require('../iteratee'), - 'keys': require('../_baseKeys'), - 'rearg': require('../rearg'), - 'toInteger': require('../toInteger'), - 'toPath': require('../toPath') -}; diff --git a/node_modules/lodash/fp/add.js b/node_modules/lodash/fp/add.js deleted file mode 100644 index 816eeec..0000000 --- a/node_modules/lodash/fp/add.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('add', require('../add')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/after.js b/node_modules/lodash/fp/after.js deleted file mode 100644 index 21a0167..0000000 --- a/node_modules/lodash/fp/after.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('after', require('../after')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/all.js b/node_modules/lodash/fp/all.js deleted file mode 100644 index d0839f7..0000000 --- a/node_modules/lodash/fp/all.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./every'); diff --git a/node_modules/lodash/fp/allPass.js b/node_modules/lodash/fp/allPass.js deleted file mode 100644 index 79b73ef..0000000 --- a/node_modules/lodash/fp/allPass.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overEvery'); diff --git a/node_modules/lodash/fp/always.js b/node_modules/lodash/fp/always.js deleted file mode 100644 index 9887703..0000000 --- a/node_modules/lodash/fp/always.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./constant'); diff --git a/node_modules/lodash/fp/any.js b/node_modules/lodash/fp/any.js deleted file mode 100644 index 900ac25..0000000 --- a/node_modules/lodash/fp/any.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./some'); diff --git a/node_modules/lodash/fp/anyPass.js b/node_modules/lodash/fp/anyPass.js deleted file mode 100644 index 2774ab3..0000000 --- a/node_modules/lodash/fp/anyPass.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overSome'); diff --git a/node_modules/lodash/fp/apply.js b/node_modules/lodash/fp/apply.js deleted file mode 100644 index 2b75712..0000000 --- a/node_modules/lodash/fp/apply.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./spread'); diff --git a/node_modules/lodash/fp/array.js b/node_modules/lodash/fp/array.js deleted file mode 100644 index fe939c2..0000000 --- a/node_modules/lodash/fp/array.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../array')); diff --git a/node_modules/lodash/fp/ary.js b/node_modules/lodash/fp/ary.js deleted file mode 100644 index 8edf187..0000000 --- a/node_modules/lodash/fp/ary.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('ary', require('../ary')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assign.js b/node_modules/lodash/fp/assign.js deleted file mode 100644 index 23f47af..0000000 --- a/node_modules/lodash/fp/assign.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assign', require('../assign')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignAll.js b/node_modules/lodash/fp/assignAll.js deleted file mode 100644 index b1d36c7..0000000 --- a/node_modules/lodash/fp/assignAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignAll', require('../assign')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignAllWith.js b/node_modules/lodash/fp/assignAllWith.js deleted file mode 100644 index 21e836e..0000000 --- a/node_modules/lodash/fp/assignAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignAllWith', require('../assignWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignIn.js b/node_modules/lodash/fp/assignIn.js deleted file mode 100644 index 6e7c65f..0000000 --- a/node_modules/lodash/fp/assignIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignIn', require('../assignIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignInAll.js b/node_modules/lodash/fp/assignInAll.js deleted file mode 100644 index 7ba75db..0000000 --- a/node_modules/lodash/fp/assignInAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignInAll', require('../assignIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignInAllWith.js b/node_modules/lodash/fp/assignInAllWith.js deleted file mode 100644 index e766903..0000000 --- a/node_modules/lodash/fp/assignInAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignInAllWith', require('../assignInWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignInWith.js b/node_modules/lodash/fp/assignInWith.js deleted file mode 100644 index acb5923..0000000 --- a/node_modules/lodash/fp/assignInWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignInWith', require('../assignInWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assignWith.js b/node_modules/lodash/fp/assignWith.js deleted file mode 100644 index eb92521..0000000 --- a/node_modules/lodash/fp/assignWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignWith', require('../assignWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/assoc.js b/node_modules/lodash/fp/assoc.js deleted file mode 100644 index 7648820..0000000 --- a/node_modules/lodash/fp/assoc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./set'); diff --git a/node_modules/lodash/fp/assocPath.js b/node_modules/lodash/fp/assocPath.js deleted file mode 100644 index 7648820..0000000 --- a/node_modules/lodash/fp/assocPath.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./set'); diff --git a/node_modules/lodash/fp/at.js b/node_modules/lodash/fp/at.js deleted file mode 100644 index cc39d25..0000000 --- a/node_modules/lodash/fp/at.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('at', require('../at')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/attempt.js b/node_modules/lodash/fp/attempt.js deleted file mode 100644 index 26ca42e..0000000 --- a/node_modules/lodash/fp/attempt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('attempt', require('../attempt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/before.js b/node_modules/lodash/fp/before.js deleted file mode 100644 index 7a2de65..0000000 --- a/node_modules/lodash/fp/before.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('before', require('../before')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/bind.js b/node_modules/lodash/fp/bind.js deleted file mode 100644 index 5cbe4f3..0000000 --- a/node_modules/lodash/fp/bind.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bind', require('../bind')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/bindAll.js b/node_modules/lodash/fp/bindAll.js deleted file mode 100644 index 6b4a4a0..0000000 --- a/node_modules/lodash/fp/bindAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bindAll', require('../bindAll')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/bindKey.js b/node_modules/lodash/fp/bindKey.js deleted file mode 100644 index 6a46c6b..0000000 --- a/node_modules/lodash/fp/bindKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bindKey', require('../bindKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/camelCase.js b/node_modules/lodash/fp/camelCase.js deleted file mode 100644 index 87b77b4..0000000 --- a/node_modules/lodash/fp/camelCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('camelCase', require('../camelCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/capitalize.js b/node_modules/lodash/fp/capitalize.js deleted file mode 100644 index cac74e1..0000000 --- a/node_modules/lodash/fp/capitalize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('capitalize', require('../capitalize'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/castArray.js b/node_modules/lodash/fp/castArray.js deleted file mode 100644 index 8681c09..0000000 --- a/node_modules/lodash/fp/castArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('castArray', require('../castArray')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/ceil.js b/node_modules/lodash/fp/ceil.js deleted file mode 100644 index f416b72..0000000 --- a/node_modules/lodash/fp/ceil.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('ceil', require('../ceil')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/chain.js b/node_modules/lodash/fp/chain.js deleted file mode 100644 index 604fe39..0000000 --- a/node_modules/lodash/fp/chain.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('chain', require('../chain'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/chunk.js b/node_modules/lodash/fp/chunk.js deleted file mode 100644 index 871ab08..0000000 --- a/node_modules/lodash/fp/chunk.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('chunk', require('../chunk')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/clamp.js b/node_modules/lodash/fp/clamp.js deleted file mode 100644 index 3b06c01..0000000 --- a/node_modules/lodash/fp/clamp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('clamp', require('../clamp')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/clone.js b/node_modules/lodash/fp/clone.js deleted file mode 100644 index cadb59c..0000000 --- a/node_modules/lodash/fp/clone.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('clone', require('../clone'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/cloneDeep.js b/node_modules/lodash/fp/cloneDeep.js deleted file mode 100644 index a6107aa..0000000 --- a/node_modules/lodash/fp/cloneDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneDeep', require('../cloneDeep'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/cloneDeepWith.js b/node_modules/lodash/fp/cloneDeepWith.js deleted file mode 100644 index 6f01e44..0000000 --- a/node_modules/lodash/fp/cloneDeepWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneDeepWith', require('../cloneDeepWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/cloneWith.js b/node_modules/lodash/fp/cloneWith.js deleted file mode 100644 index aa88578..0000000 --- a/node_modules/lodash/fp/cloneWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneWith', require('../cloneWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/collection.js b/node_modules/lodash/fp/collection.js deleted file mode 100644 index fc8b328..0000000 --- a/node_modules/lodash/fp/collection.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../collection')); diff --git a/node_modules/lodash/fp/commit.js b/node_modules/lodash/fp/commit.js deleted file mode 100644 index 130a894..0000000 --- a/node_modules/lodash/fp/commit.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('commit', require('../commit'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/compact.js b/node_modules/lodash/fp/compact.js deleted file mode 100644 index ce8f7a1..0000000 --- a/node_modules/lodash/fp/compact.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('compact', require('../compact'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/complement.js b/node_modules/lodash/fp/complement.js deleted file mode 100644 index 93eb462..0000000 --- a/node_modules/lodash/fp/complement.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./negate'); diff --git a/node_modules/lodash/fp/compose.js b/node_modules/lodash/fp/compose.js deleted file mode 100644 index 1954e94..0000000 --- a/node_modules/lodash/fp/compose.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flowRight'); diff --git a/node_modules/lodash/fp/concat.js b/node_modules/lodash/fp/concat.js deleted file mode 100644 index e59346a..0000000 --- a/node_modules/lodash/fp/concat.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('concat', require('../concat')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/cond.js b/node_modules/lodash/fp/cond.js deleted file mode 100644 index 6a0120e..0000000 --- a/node_modules/lodash/fp/cond.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cond', require('../cond'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/conforms.js b/node_modules/lodash/fp/conforms.js deleted file mode 100644 index 3247f64..0000000 --- a/node_modules/lodash/fp/conforms.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./conformsTo'); diff --git a/node_modules/lodash/fp/conformsTo.js b/node_modules/lodash/fp/conformsTo.js deleted file mode 100644 index aa7f41e..0000000 --- a/node_modules/lodash/fp/conformsTo.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('conformsTo', require('../conformsTo')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/constant.js b/node_modules/lodash/fp/constant.js deleted file mode 100644 index 9e406fc..0000000 --- a/node_modules/lodash/fp/constant.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('constant', require('../constant'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/contains.js b/node_modules/lodash/fp/contains.js deleted file mode 100644 index 594722a..0000000 --- a/node_modules/lodash/fp/contains.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./includes'); diff --git a/node_modules/lodash/fp/convert.js b/node_modules/lodash/fp/convert.js deleted file mode 100644 index 4795dc4..0000000 --- a/node_modules/lodash/fp/convert.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseConvert = require('./_baseConvert'), - util = require('./_util'); - -/** - * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. If `name` is an object its methods - * will be converted. - * - * @param {string} name The name of the function to wrap. - * @param {Function} [func] The function to wrap. - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function|Object} Returns the converted function or object. - */ -function convert(name, func, options) { - return baseConvert(util, name, func, options); -} - -module.exports = convert; diff --git a/node_modules/lodash/fp/countBy.js b/node_modules/lodash/fp/countBy.js deleted file mode 100644 index dfa4643..0000000 --- a/node_modules/lodash/fp/countBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('countBy', require('../countBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/create.js b/node_modules/lodash/fp/create.js deleted file mode 100644 index 752025f..0000000 --- a/node_modules/lodash/fp/create.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('create', require('../create')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/curry.js b/node_modules/lodash/fp/curry.js deleted file mode 100644 index b0b4168..0000000 --- a/node_modules/lodash/fp/curry.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curry', require('../curry')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/curryN.js b/node_modules/lodash/fp/curryN.js deleted file mode 100644 index 2ae7d00..0000000 --- a/node_modules/lodash/fp/curryN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryN', require('../curry')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/curryRight.js b/node_modules/lodash/fp/curryRight.js deleted file mode 100644 index cb619eb..0000000 --- a/node_modules/lodash/fp/curryRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryRight', require('../curryRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/curryRightN.js b/node_modules/lodash/fp/curryRightN.js deleted file mode 100644 index 2495afc..0000000 --- a/node_modules/lodash/fp/curryRightN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryRightN', require('../curryRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/date.js b/node_modules/lodash/fp/date.js deleted file mode 100644 index 82cb952..0000000 --- a/node_modules/lodash/fp/date.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../date')); diff --git a/node_modules/lodash/fp/debounce.js b/node_modules/lodash/fp/debounce.js deleted file mode 100644 index 2612229..0000000 --- a/node_modules/lodash/fp/debounce.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('debounce', require('../debounce')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/deburr.js b/node_modules/lodash/fp/deburr.js deleted file mode 100644 index 96463ab..0000000 --- a/node_modules/lodash/fp/deburr.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('deburr', require('../deburr'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defaultTo.js b/node_modules/lodash/fp/defaultTo.js deleted file mode 100644 index d6b52a4..0000000 --- a/node_modules/lodash/fp/defaultTo.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultTo', require('../defaultTo')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defaults.js b/node_modules/lodash/fp/defaults.js deleted file mode 100644 index e1a8e6e..0000000 --- a/node_modules/lodash/fp/defaults.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaults', require('../defaults')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defaultsAll.js b/node_modules/lodash/fp/defaultsAll.js deleted file mode 100644 index 238fcc3..0000000 --- a/node_modules/lodash/fp/defaultsAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultsAll', require('../defaults')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defaultsDeep.js b/node_modules/lodash/fp/defaultsDeep.js deleted file mode 100644 index 1f172ff..0000000 --- a/node_modules/lodash/fp/defaultsDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultsDeep', require('../defaultsDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defaultsDeepAll.js b/node_modules/lodash/fp/defaultsDeepAll.js deleted file mode 100644 index 6835f2f..0000000 --- a/node_modules/lodash/fp/defaultsDeepAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultsDeepAll', require('../defaultsDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/defer.js b/node_modules/lodash/fp/defer.js deleted file mode 100644 index ec7990f..0000000 --- a/node_modules/lodash/fp/defer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defer', require('../defer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/delay.js b/node_modules/lodash/fp/delay.js deleted file mode 100644 index 556dbd5..0000000 --- a/node_modules/lodash/fp/delay.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('delay', require('../delay')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/difference.js b/node_modules/lodash/fp/difference.js deleted file mode 100644 index 2d03765..0000000 --- a/node_modules/lodash/fp/difference.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('difference', require('../difference')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/differenceBy.js b/node_modules/lodash/fp/differenceBy.js deleted file mode 100644 index 2f91491..0000000 --- a/node_modules/lodash/fp/differenceBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('differenceBy', require('../differenceBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/differenceWith.js b/node_modules/lodash/fp/differenceWith.js deleted file mode 100644 index bcf5ad2..0000000 --- a/node_modules/lodash/fp/differenceWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('differenceWith', require('../differenceWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/dissoc.js b/node_modules/lodash/fp/dissoc.js deleted file mode 100644 index 7ec7be1..0000000 --- a/node_modules/lodash/fp/dissoc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./unset'); diff --git a/node_modules/lodash/fp/dissocPath.js b/node_modules/lodash/fp/dissocPath.js deleted file mode 100644 index 7ec7be1..0000000 --- a/node_modules/lodash/fp/dissocPath.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./unset'); diff --git a/node_modules/lodash/fp/divide.js b/node_modules/lodash/fp/divide.js deleted file mode 100644 index 82048c5..0000000 --- a/node_modules/lodash/fp/divide.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('divide', require('../divide')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/drop.js b/node_modules/lodash/fp/drop.js deleted file mode 100644 index 2fa9b4f..0000000 --- a/node_modules/lodash/fp/drop.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('drop', require('../drop')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/dropLast.js b/node_modules/lodash/fp/dropLast.js deleted file mode 100644 index 174e525..0000000 --- a/node_modules/lodash/fp/dropLast.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dropRight'); diff --git a/node_modules/lodash/fp/dropLastWhile.js b/node_modules/lodash/fp/dropLastWhile.js deleted file mode 100644 index be2a9d2..0000000 --- a/node_modules/lodash/fp/dropLastWhile.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dropRightWhile'); diff --git a/node_modules/lodash/fp/dropRight.js b/node_modules/lodash/fp/dropRight.js deleted file mode 100644 index e98881f..0000000 --- a/node_modules/lodash/fp/dropRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropRight', require('../dropRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/dropRightWhile.js b/node_modules/lodash/fp/dropRightWhile.js deleted file mode 100644 index cacaa70..0000000 --- a/node_modules/lodash/fp/dropRightWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropRightWhile', require('../dropRightWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/dropWhile.js b/node_modules/lodash/fp/dropWhile.js deleted file mode 100644 index 285f864..0000000 --- a/node_modules/lodash/fp/dropWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropWhile', require('../dropWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/each.js b/node_modules/lodash/fp/each.js deleted file mode 100644 index 8800f42..0000000 --- a/node_modules/lodash/fp/each.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEach'); diff --git a/node_modules/lodash/fp/eachRight.js b/node_modules/lodash/fp/eachRight.js deleted file mode 100644 index 3252b2a..0000000 --- a/node_modules/lodash/fp/eachRight.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEachRight'); diff --git a/node_modules/lodash/fp/endsWith.js b/node_modules/lodash/fp/endsWith.js deleted file mode 100644 index 17dc2a4..0000000 --- a/node_modules/lodash/fp/endsWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('endsWith', require('../endsWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/entries.js b/node_modules/lodash/fp/entries.js deleted file mode 100644 index 7a88df2..0000000 --- a/node_modules/lodash/fp/entries.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairs'); diff --git a/node_modules/lodash/fp/entriesIn.js b/node_modules/lodash/fp/entriesIn.js deleted file mode 100644 index f6c6331..0000000 --- a/node_modules/lodash/fp/entriesIn.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairsIn'); diff --git a/node_modules/lodash/fp/eq.js b/node_modules/lodash/fp/eq.js deleted file mode 100644 index 9a3d21b..0000000 --- a/node_modules/lodash/fp/eq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('eq', require('../eq')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/equals.js b/node_modules/lodash/fp/equals.js deleted file mode 100644 index e6a5ce0..0000000 --- a/node_modules/lodash/fp/equals.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./isEqual'); diff --git a/node_modules/lodash/fp/escape.js b/node_modules/lodash/fp/escape.js deleted file mode 100644 index 52c1fbb..0000000 --- a/node_modules/lodash/fp/escape.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('escape', require('../escape'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/escapeRegExp.js b/node_modules/lodash/fp/escapeRegExp.js deleted file mode 100644 index 369b2ef..0000000 --- a/node_modules/lodash/fp/escapeRegExp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('escapeRegExp', require('../escapeRegExp'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/every.js b/node_modules/lodash/fp/every.js deleted file mode 100644 index 95c2776..0000000 --- a/node_modules/lodash/fp/every.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('every', require('../every')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/extend.js b/node_modules/lodash/fp/extend.js deleted file mode 100644 index e00166c..0000000 --- a/node_modules/lodash/fp/extend.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignIn'); diff --git a/node_modules/lodash/fp/extendAll.js b/node_modules/lodash/fp/extendAll.js deleted file mode 100644 index cc55b64..0000000 --- a/node_modules/lodash/fp/extendAll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInAll'); diff --git a/node_modules/lodash/fp/extendAllWith.js b/node_modules/lodash/fp/extendAllWith.js deleted file mode 100644 index 6679d20..0000000 --- a/node_modules/lodash/fp/extendAllWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInAllWith'); diff --git a/node_modules/lodash/fp/extendWith.js b/node_modules/lodash/fp/extendWith.js deleted file mode 100644 index dbdcb3b..0000000 --- a/node_modules/lodash/fp/extendWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInWith'); diff --git a/node_modules/lodash/fp/fill.js b/node_modules/lodash/fp/fill.js deleted file mode 100644 index b2d47e8..0000000 --- a/node_modules/lodash/fp/fill.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('fill', require('../fill')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/filter.js b/node_modules/lodash/fp/filter.js deleted file mode 100644 index 796d501..0000000 --- a/node_modules/lodash/fp/filter.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('filter', require('../filter')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/find.js b/node_modules/lodash/fp/find.js deleted file mode 100644 index f805d33..0000000 --- a/node_modules/lodash/fp/find.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('find', require('../find')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findFrom.js b/node_modules/lodash/fp/findFrom.js deleted file mode 100644 index da8275e..0000000 --- a/node_modules/lodash/fp/findFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findFrom', require('../find')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findIndex.js b/node_modules/lodash/fp/findIndex.js deleted file mode 100644 index 8c15fd1..0000000 --- a/node_modules/lodash/fp/findIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findIndex', require('../findIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findIndexFrom.js b/node_modules/lodash/fp/findIndexFrom.js deleted file mode 100644 index 32e98cb..0000000 --- a/node_modules/lodash/fp/findIndexFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findIndexFrom', require('../findIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findKey.js b/node_modules/lodash/fp/findKey.js deleted file mode 100644 index 475bcfa..0000000 --- a/node_modules/lodash/fp/findKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findKey', require('../findKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findLast.js b/node_modules/lodash/fp/findLast.js deleted file mode 100644 index 093fe94..0000000 --- a/node_modules/lodash/fp/findLast.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLast', require('../findLast')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findLastFrom.js b/node_modules/lodash/fp/findLastFrom.js deleted file mode 100644 index 76c38fb..0000000 --- a/node_modules/lodash/fp/findLastFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastFrom', require('../findLast')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findLastIndex.js b/node_modules/lodash/fp/findLastIndex.js deleted file mode 100644 index 36986df..0000000 --- a/node_modules/lodash/fp/findLastIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastIndex', require('../findLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findLastIndexFrom.js b/node_modules/lodash/fp/findLastIndexFrom.js deleted file mode 100644 index 34c8176..0000000 --- a/node_modules/lodash/fp/findLastIndexFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastIndexFrom', require('../findLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/findLastKey.js b/node_modules/lodash/fp/findLastKey.js deleted file mode 100644 index 5f81b60..0000000 --- a/node_modules/lodash/fp/findLastKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastKey', require('../findLastKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/first.js b/node_modules/lodash/fp/first.js deleted file mode 100644 index 53f4ad1..0000000 --- a/node_modules/lodash/fp/first.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./head'); diff --git a/node_modules/lodash/fp/flatMap.js b/node_modules/lodash/fp/flatMap.js deleted file mode 100644 index d01dc4d..0000000 --- a/node_modules/lodash/fp/flatMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMap', require('../flatMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flatMapDeep.js b/node_modules/lodash/fp/flatMapDeep.js deleted file mode 100644 index 569c42e..0000000 --- a/node_modules/lodash/fp/flatMapDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMapDeep', require('../flatMapDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flatMapDepth.js b/node_modules/lodash/fp/flatMapDepth.js deleted file mode 100644 index 6eb68fd..0000000 --- a/node_modules/lodash/fp/flatMapDepth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMapDepth', require('../flatMapDepth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flatten.js b/node_modules/lodash/fp/flatten.js deleted file mode 100644 index 30425d8..0000000 --- a/node_modules/lodash/fp/flatten.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatten', require('../flatten'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flattenDeep.js b/node_modules/lodash/fp/flattenDeep.js deleted file mode 100644 index aed5db2..0000000 --- a/node_modules/lodash/fp/flattenDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flattenDeep', require('../flattenDeep'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flattenDepth.js b/node_modules/lodash/fp/flattenDepth.js deleted file mode 100644 index ad65e37..0000000 --- a/node_modules/lodash/fp/flattenDepth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flattenDepth', require('../flattenDepth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flip.js b/node_modules/lodash/fp/flip.js deleted file mode 100644 index 0547e7b..0000000 --- a/node_modules/lodash/fp/flip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flip', require('../flip'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/floor.js b/node_modules/lodash/fp/floor.js deleted file mode 100644 index a6cf335..0000000 --- a/node_modules/lodash/fp/floor.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('floor', require('../floor')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flow.js b/node_modules/lodash/fp/flow.js deleted file mode 100644 index cd83677..0000000 --- a/node_modules/lodash/fp/flow.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flow', require('../flow')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/flowRight.js b/node_modules/lodash/fp/flowRight.js deleted file mode 100644 index 972a5b9..0000000 --- a/node_modules/lodash/fp/flowRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flowRight', require('../flowRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forEach.js b/node_modules/lodash/fp/forEach.js deleted file mode 100644 index 2f49452..0000000 --- a/node_modules/lodash/fp/forEach.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forEach', require('../forEach')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forEachRight.js b/node_modules/lodash/fp/forEachRight.js deleted file mode 100644 index 3ff9733..0000000 --- a/node_modules/lodash/fp/forEachRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forEachRight', require('../forEachRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forIn.js b/node_modules/lodash/fp/forIn.js deleted file mode 100644 index 9341749..0000000 --- a/node_modules/lodash/fp/forIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forIn', require('../forIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forInRight.js b/node_modules/lodash/fp/forInRight.js deleted file mode 100644 index cecf8bb..0000000 --- a/node_modules/lodash/fp/forInRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forInRight', require('../forInRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forOwn.js b/node_modules/lodash/fp/forOwn.js deleted file mode 100644 index 246449e..0000000 --- a/node_modules/lodash/fp/forOwn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forOwn', require('../forOwn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/forOwnRight.js b/node_modules/lodash/fp/forOwnRight.js deleted file mode 100644 index c5e826e..0000000 --- a/node_modules/lodash/fp/forOwnRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forOwnRight', require('../forOwnRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/fromPairs.js b/node_modules/lodash/fp/fromPairs.js deleted file mode 100644 index f8cc596..0000000 --- a/node_modules/lodash/fp/fromPairs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('fromPairs', require('../fromPairs')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/function.js b/node_modules/lodash/fp/function.js deleted file mode 100644 index dfe69b1..0000000 --- a/node_modules/lodash/fp/function.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../function')); diff --git a/node_modules/lodash/fp/functions.js b/node_modules/lodash/fp/functions.js deleted file mode 100644 index 09d1bb1..0000000 --- a/node_modules/lodash/fp/functions.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('functions', require('../functions'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/functionsIn.js b/node_modules/lodash/fp/functionsIn.js deleted file mode 100644 index 2cfeb83..0000000 --- a/node_modules/lodash/fp/functionsIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('functionsIn', require('../functionsIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/get.js b/node_modules/lodash/fp/get.js deleted file mode 100644 index 6d3a328..0000000 --- a/node_modules/lodash/fp/get.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('get', require('../get')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/getOr.js b/node_modules/lodash/fp/getOr.js deleted file mode 100644 index 7dbf771..0000000 --- a/node_modules/lodash/fp/getOr.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('getOr', require('../get')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/groupBy.js b/node_modules/lodash/fp/groupBy.js deleted file mode 100644 index fc0bc78..0000000 --- a/node_modules/lodash/fp/groupBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('groupBy', require('../groupBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/gt.js b/node_modules/lodash/fp/gt.js deleted file mode 100644 index 9e57c80..0000000 --- a/node_modules/lodash/fp/gt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('gt', require('../gt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/gte.js b/node_modules/lodash/fp/gte.js deleted file mode 100644 index 4584786..0000000 --- a/node_modules/lodash/fp/gte.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('gte', require('../gte')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/has.js b/node_modules/lodash/fp/has.js deleted file mode 100644 index b901298..0000000 --- a/node_modules/lodash/fp/has.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('has', require('../has')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/hasIn.js b/node_modules/lodash/fp/hasIn.js deleted file mode 100644 index b3c3d1a..0000000 --- a/node_modules/lodash/fp/hasIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('hasIn', require('../hasIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/head.js b/node_modules/lodash/fp/head.js deleted file mode 100644 index 2694f0a..0000000 --- a/node_modules/lodash/fp/head.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('head', require('../head'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/identical.js b/node_modules/lodash/fp/identical.js deleted file mode 100644 index 85563f4..0000000 --- a/node_modules/lodash/fp/identical.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./eq'); diff --git a/node_modules/lodash/fp/identity.js b/node_modules/lodash/fp/identity.js deleted file mode 100644 index 096415a..0000000 --- a/node_modules/lodash/fp/identity.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('identity', require('../identity'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/inRange.js b/node_modules/lodash/fp/inRange.js deleted file mode 100644 index 202d940..0000000 --- a/node_modules/lodash/fp/inRange.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('inRange', require('../inRange')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/includes.js b/node_modules/lodash/fp/includes.js deleted file mode 100644 index 1146780..0000000 --- a/node_modules/lodash/fp/includes.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('includes', require('../includes')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/includesFrom.js b/node_modules/lodash/fp/includesFrom.js deleted file mode 100644 index 683afdb..0000000 --- a/node_modules/lodash/fp/includesFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('includesFrom', require('../includes')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/indexBy.js b/node_modules/lodash/fp/indexBy.js deleted file mode 100644 index 7e64bc0..0000000 --- a/node_modules/lodash/fp/indexBy.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./keyBy'); diff --git a/node_modules/lodash/fp/indexOf.js b/node_modules/lodash/fp/indexOf.js deleted file mode 100644 index 524658e..0000000 --- a/node_modules/lodash/fp/indexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('indexOf', require('../indexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/indexOfFrom.js b/node_modules/lodash/fp/indexOfFrom.js deleted file mode 100644 index d99c822..0000000 --- a/node_modules/lodash/fp/indexOfFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('indexOfFrom', require('../indexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/init.js b/node_modules/lodash/fp/init.js deleted file mode 100644 index 2f88d8b..0000000 --- a/node_modules/lodash/fp/init.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./initial'); diff --git a/node_modules/lodash/fp/initial.js b/node_modules/lodash/fp/initial.js deleted file mode 100644 index b732ba0..0000000 --- a/node_modules/lodash/fp/initial.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('initial', require('../initial'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/intersection.js b/node_modules/lodash/fp/intersection.js deleted file mode 100644 index 52936d5..0000000 --- a/node_modules/lodash/fp/intersection.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersection', require('../intersection')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/intersectionBy.js b/node_modules/lodash/fp/intersectionBy.js deleted file mode 100644 index 72629f2..0000000 --- a/node_modules/lodash/fp/intersectionBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersectionBy', require('../intersectionBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/intersectionWith.js b/node_modules/lodash/fp/intersectionWith.js deleted file mode 100644 index e064f40..0000000 --- a/node_modules/lodash/fp/intersectionWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersectionWith', require('../intersectionWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invert.js b/node_modules/lodash/fp/invert.js deleted file mode 100644 index 2d5d1f0..0000000 --- a/node_modules/lodash/fp/invert.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invert', require('../invert')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invertBy.js b/node_modules/lodash/fp/invertBy.js deleted file mode 100644 index 63ca97e..0000000 --- a/node_modules/lodash/fp/invertBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invertBy', require('../invertBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invertObj.js b/node_modules/lodash/fp/invertObj.js deleted file mode 100644 index f1d842e..0000000 --- a/node_modules/lodash/fp/invertObj.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./invert'); diff --git a/node_modules/lodash/fp/invoke.js b/node_modules/lodash/fp/invoke.js deleted file mode 100644 index fcf17f0..0000000 --- a/node_modules/lodash/fp/invoke.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invoke', require('../invoke')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invokeArgs.js b/node_modules/lodash/fp/invokeArgs.js deleted file mode 100644 index d3f2953..0000000 --- a/node_modules/lodash/fp/invokeArgs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeArgs', require('../invoke')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invokeArgsMap.js b/node_modules/lodash/fp/invokeArgsMap.js deleted file mode 100644 index eaa9f84..0000000 --- a/node_modules/lodash/fp/invokeArgsMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeArgsMap', require('../invokeMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/invokeMap.js b/node_modules/lodash/fp/invokeMap.js deleted file mode 100644 index 6515fd7..0000000 --- a/node_modules/lodash/fp/invokeMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeMap', require('../invokeMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isArguments.js b/node_modules/lodash/fp/isArguments.js deleted file mode 100644 index 1d93c9e..0000000 --- a/node_modules/lodash/fp/isArguments.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArguments', require('../isArguments'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isArray.js b/node_modules/lodash/fp/isArray.js deleted file mode 100644 index ba7ade8..0000000 --- a/node_modules/lodash/fp/isArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArray', require('../isArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isArrayBuffer.js b/node_modules/lodash/fp/isArrayBuffer.js deleted file mode 100644 index 5088513..0000000 --- a/node_modules/lodash/fp/isArrayBuffer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayBuffer', require('../isArrayBuffer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isArrayLike.js b/node_modules/lodash/fp/isArrayLike.js deleted file mode 100644 index 8f1856b..0000000 --- a/node_modules/lodash/fp/isArrayLike.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayLike', require('../isArrayLike'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isArrayLikeObject.js b/node_modules/lodash/fp/isArrayLikeObject.js deleted file mode 100644 index 2108498..0000000 --- a/node_modules/lodash/fp/isArrayLikeObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayLikeObject', require('../isArrayLikeObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isBoolean.js b/node_modules/lodash/fp/isBoolean.js deleted file mode 100644 index 9339f75..0000000 --- a/node_modules/lodash/fp/isBoolean.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isBoolean', require('../isBoolean'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isBuffer.js b/node_modules/lodash/fp/isBuffer.js deleted file mode 100644 index e60b123..0000000 --- a/node_modules/lodash/fp/isBuffer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isBuffer', require('../isBuffer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isDate.js b/node_modules/lodash/fp/isDate.js deleted file mode 100644 index dc41d08..0000000 --- a/node_modules/lodash/fp/isDate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isDate', require('../isDate'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isElement.js b/node_modules/lodash/fp/isElement.js deleted file mode 100644 index 18ee039..0000000 --- a/node_modules/lodash/fp/isElement.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isElement', require('../isElement'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isEmpty.js b/node_modules/lodash/fp/isEmpty.js deleted file mode 100644 index 0f4ae84..0000000 --- a/node_modules/lodash/fp/isEmpty.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEmpty', require('../isEmpty'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isEqual.js b/node_modules/lodash/fp/isEqual.js deleted file mode 100644 index 4138386..0000000 --- a/node_modules/lodash/fp/isEqual.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEqual', require('../isEqual')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isEqualWith.js b/node_modules/lodash/fp/isEqualWith.js deleted file mode 100644 index 029ff5c..0000000 --- a/node_modules/lodash/fp/isEqualWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEqualWith', require('../isEqualWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isError.js b/node_modules/lodash/fp/isError.js deleted file mode 100644 index 3dfd81c..0000000 --- a/node_modules/lodash/fp/isError.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isError', require('../isError'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isFinite.js b/node_modules/lodash/fp/isFinite.js deleted file mode 100644 index 0b647b8..0000000 --- a/node_modules/lodash/fp/isFinite.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isFinite', require('../isFinite'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isFunction.js b/node_modules/lodash/fp/isFunction.js deleted file mode 100644 index ff8e5c4..0000000 --- a/node_modules/lodash/fp/isFunction.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isFunction', require('../isFunction'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isInteger.js b/node_modules/lodash/fp/isInteger.js deleted file mode 100644 index 67af4ff..0000000 --- a/node_modules/lodash/fp/isInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isInteger', require('../isInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isLength.js b/node_modules/lodash/fp/isLength.js deleted file mode 100644 index fc101c5..0000000 --- a/node_modules/lodash/fp/isLength.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isLength', require('../isLength'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isMap.js b/node_modules/lodash/fp/isMap.js deleted file mode 100644 index a209aa6..0000000 --- a/node_modules/lodash/fp/isMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMap', require('../isMap'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isMatch.js b/node_modules/lodash/fp/isMatch.js deleted file mode 100644 index 6264ca1..0000000 --- a/node_modules/lodash/fp/isMatch.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMatch', require('../isMatch')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isMatchWith.js b/node_modules/lodash/fp/isMatchWith.js deleted file mode 100644 index d95f319..0000000 --- a/node_modules/lodash/fp/isMatchWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMatchWith', require('../isMatchWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isNaN.js b/node_modules/lodash/fp/isNaN.js deleted file mode 100644 index 66a978f..0000000 --- a/node_modules/lodash/fp/isNaN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNaN', require('../isNaN'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isNative.js b/node_modules/lodash/fp/isNative.js deleted file mode 100644 index 3d775ba..0000000 --- a/node_modules/lodash/fp/isNative.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNative', require('../isNative'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isNil.js b/node_modules/lodash/fp/isNil.js deleted file mode 100644 index 5952c02..0000000 --- a/node_modules/lodash/fp/isNil.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNil', require('../isNil'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isNull.js b/node_modules/lodash/fp/isNull.js deleted file mode 100644 index f201a35..0000000 --- a/node_modules/lodash/fp/isNull.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNull', require('../isNull'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isNumber.js b/node_modules/lodash/fp/isNumber.js deleted file mode 100644 index a2b5fa0..0000000 --- a/node_modules/lodash/fp/isNumber.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNumber', require('../isNumber'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isObject.js b/node_modules/lodash/fp/isObject.js deleted file mode 100644 index 231ace0..0000000 --- a/node_modules/lodash/fp/isObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isObject', require('../isObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isObjectLike.js b/node_modules/lodash/fp/isObjectLike.js deleted file mode 100644 index f16082e..0000000 --- a/node_modules/lodash/fp/isObjectLike.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isObjectLike', require('../isObjectLike'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isPlainObject.js b/node_modules/lodash/fp/isPlainObject.js deleted file mode 100644 index b5bea90..0000000 --- a/node_modules/lodash/fp/isPlainObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isPlainObject', require('../isPlainObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isRegExp.js b/node_modules/lodash/fp/isRegExp.js deleted file mode 100644 index 12a1a3d..0000000 --- a/node_modules/lodash/fp/isRegExp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isRegExp', require('../isRegExp'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isSafeInteger.js b/node_modules/lodash/fp/isSafeInteger.js deleted file mode 100644 index 7230f55..0000000 --- a/node_modules/lodash/fp/isSafeInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSafeInteger', require('../isSafeInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isSet.js b/node_modules/lodash/fp/isSet.js deleted file mode 100644 index 35c01f6..0000000 --- a/node_modules/lodash/fp/isSet.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSet', require('../isSet'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isString.js b/node_modules/lodash/fp/isString.js deleted file mode 100644 index 1fd0679..0000000 --- a/node_modules/lodash/fp/isString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isString', require('../isString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isSymbol.js b/node_modules/lodash/fp/isSymbol.js deleted file mode 100644 index 3867695..0000000 --- a/node_modules/lodash/fp/isSymbol.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSymbol', require('../isSymbol'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isTypedArray.js b/node_modules/lodash/fp/isTypedArray.js deleted file mode 100644 index 8567953..0000000 --- a/node_modules/lodash/fp/isTypedArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isTypedArray', require('../isTypedArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isUndefined.js b/node_modules/lodash/fp/isUndefined.js deleted file mode 100644 index ddbca31..0000000 --- a/node_modules/lodash/fp/isUndefined.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isUndefined', require('../isUndefined'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isWeakMap.js b/node_modules/lodash/fp/isWeakMap.js deleted file mode 100644 index ef60c61..0000000 --- a/node_modules/lodash/fp/isWeakMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isWeakMap', require('../isWeakMap'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/isWeakSet.js b/node_modules/lodash/fp/isWeakSet.js deleted file mode 100644 index c99bfaa..0000000 --- a/node_modules/lodash/fp/isWeakSet.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isWeakSet', require('../isWeakSet'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/iteratee.js b/node_modules/lodash/fp/iteratee.js deleted file mode 100644 index 9f0f717..0000000 --- a/node_modules/lodash/fp/iteratee.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('iteratee', require('../iteratee')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/join.js b/node_modules/lodash/fp/join.js deleted file mode 100644 index a220e00..0000000 --- a/node_modules/lodash/fp/join.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('join', require('../join')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/juxt.js b/node_modules/lodash/fp/juxt.js deleted file mode 100644 index f71e04e..0000000 --- a/node_modules/lodash/fp/juxt.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./over'); diff --git a/node_modules/lodash/fp/kebabCase.js b/node_modules/lodash/fp/kebabCase.js deleted file mode 100644 index 60737f1..0000000 --- a/node_modules/lodash/fp/kebabCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('kebabCase', require('../kebabCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/keyBy.js b/node_modules/lodash/fp/keyBy.js deleted file mode 100644 index 9a6a85d..0000000 --- a/node_modules/lodash/fp/keyBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keyBy', require('../keyBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/keys.js b/node_modules/lodash/fp/keys.js deleted file mode 100644 index e12bb07..0000000 --- a/node_modules/lodash/fp/keys.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keys', require('../keys'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/keysIn.js b/node_modules/lodash/fp/keysIn.js deleted file mode 100644 index f3eb36a..0000000 --- a/node_modules/lodash/fp/keysIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keysIn', require('../keysIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lang.js b/node_modules/lodash/fp/lang.js deleted file mode 100644 index 08cc9c1..0000000 --- a/node_modules/lodash/fp/lang.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../lang')); diff --git a/node_modules/lodash/fp/last.js b/node_modules/lodash/fp/last.js deleted file mode 100644 index 0f71699..0000000 --- a/node_modules/lodash/fp/last.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('last', require('../last'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lastIndexOf.js b/node_modules/lodash/fp/lastIndexOf.js deleted file mode 100644 index ddf39c3..0000000 --- a/node_modules/lodash/fp/lastIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lastIndexOf', require('../lastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lastIndexOfFrom.js b/node_modules/lodash/fp/lastIndexOfFrom.js deleted file mode 100644 index 1ff6a0b..0000000 --- a/node_modules/lodash/fp/lastIndexOfFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lastIndexOfFrom', require('../lastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lowerCase.js b/node_modules/lodash/fp/lowerCase.js deleted file mode 100644 index ea64bc1..0000000 --- a/node_modules/lodash/fp/lowerCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lowerCase', require('../lowerCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lowerFirst.js b/node_modules/lodash/fp/lowerFirst.js deleted file mode 100644 index 539720a..0000000 --- a/node_modules/lodash/fp/lowerFirst.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lowerFirst', require('../lowerFirst'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lt.js b/node_modules/lodash/fp/lt.js deleted file mode 100644 index a31d21e..0000000 --- a/node_modules/lodash/fp/lt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lt', require('../lt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/lte.js b/node_modules/lodash/fp/lte.js deleted file mode 100644 index d795d10..0000000 --- a/node_modules/lodash/fp/lte.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lte', require('../lte')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/map.js b/node_modules/lodash/fp/map.js deleted file mode 100644 index cf98794..0000000 --- a/node_modules/lodash/fp/map.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('map', require('../map')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mapKeys.js b/node_modules/lodash/fp/mapKeys.js deleted file mode 100644 index 1684587..0000000 --- a/node_modules/lodash/fp/mapKeys.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mapKeys', require('../mapKeys')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mapValues.js b/node_modules/lodash/fp/mapValues.js deleted file mode 100644 index 4004972..0000000 --- a/node_modules/lodash/fp/mapValues.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mapValues', require('../mapValues')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/matches.js b/node_modules/lodash/fp/matches.js deleted file mode 100644 index 29d1e1e..0000000 --- a/node_modules/lodash/fp/matches.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./isMatch'); diff --git a/node_modules/lodash/fp/matchesProperty.js b/node_modules/lodash/fp/matchesProperty.js deleted file mode 100644 index 4575bd2..0000000 --- a/node_modules/lodash/fp/matchesProperty.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('matchesProperty', require('../matchesProperty')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/math.js b/node_modules/lodash/fp/math.js deleted file mode 100644 index e8f50f7..0000000 --- a/node_modules/lodash/fp/math.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../math')); diff --git a/node_modules/lodash/fp/max.js b/node_modules/lodash/fp/max.js deleted file mode 100644 index a66acac..0000000 --- a/node_modules/lodash/fp/max.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('max', require('../max'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/maxBy.js b/node_modules/lodash/fp/maxBy.js deleted file mode 100644 index d083fd6..0000000 --- a/node_modules/lodash/fp/maxBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('maxBy', require('../maxBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mean.js b/node_modules/lodash/fp/mean.js deleted file mode 100644 index 3117246..0000000 --- a/node_modules/lodash/fp/mean.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mean', require('../mean'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/meanBy.js b/node_modules/lodash/fp/meanBy.js deleted file mode 100644 index 556f25e..0000000 --- a/node_modules/lodash/fp/meanBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('meanBy', require('../meanBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/memoize.js b/node_modules/lodash/fp/memoize.js deleted file mode 100644 index 638eec6..0000000 --- a/node_modules/lodash/fp/memoize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('memoize', require('../memoize')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/merge.js b/node_modules/lodash/fp/merge.js deleted file mode 100644 index ac66add..0000000 --- a/node_modules/lodash/fp/merge.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('merge', require('../merge')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mergeAll.js b/node_modules/lodash/fp/mergeAll.js deleted file mode 100644 index a3674d6..0000000 --- a/node_modules/lodash/fp/mergeAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mergeAll', require('../merge')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mergeAllWith.js b/node_modules/lodash/fp/mergeAllWith.js deleted file mode 100644 index 4bd4206..0000000 --- a/node_modules/lodash/fp/mergeAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mergeAllWith', require('../mergeWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mergeWith.js b/node_modules/lodash/fp/mergeWith.js deleted file mode 100644 index 00d44d5..0000000 --- a/node_modules/lodash/fp/mergeWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mergeWith', require('../mergeWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/method.js b/node_modules/lodash/fp/method.js deleted file mode 100644 index f4060c6..0000000 --- a/node_modules/lodash/fp/method.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('method', require('../method')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/methodOf.js b/node_modules/lodash/fp/methodOf.js deleted file mode 100644 index 6139905..0000000 --- a/node_modules/lodash/fp/methodOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('methodOf', require('../methodOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/min.js b/node_modules/lodash/fp/min.js deleted file mode 100644 index d12c6b4..0000000 --- a/node_modules/lodash/fp/min.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('min', require('../min'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/minBy.js b/node_modules/lodash/fp/minBy.js deleted file mode 100644 index fdb9e24..0000000 --- a/node_modules/lodash/fp/minBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('minBy', require('../minBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/mixin.js b/node_modules/lodash/fp/mixin.js deleted file mode 100644 index 332e6fb..0000000 --- a/node_modules/lodash/fp/mixin.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mixin', require('../mixin')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/multiply.js b/node_modules/lodash/fp/multiply.js deleted file mode 100644 index 4dcf0b0..0000000 --- a/node_modules/lodash/fp/multiply.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('multiply', require('../multiply')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/nAry.js b/node_modules/lodash/fp/nAry.js deleted file mode 100644 index f262a76..0000000 --- a/node_modules/lodash/fp/nAry.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./ary'); diff --git a/node_modules/lodash/fp/negate.js b/node_modules/lodash/fp/negate.js deleted file mode 100644 index 8b6dc7c..0000000 --- a/node_modules/lodash/fp/negate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('negate', require('../negate'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/next.js b/node_modules/lodash/fp/next.js deleted file mode 100644 index 140155e..0000000 --- a/node_modules/lodash/fp/next.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('next', require('../next'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/noop.js b/node_modules/lodash/fp/noop.js deleted file mode 100644 index b9e32cc..0000000 --- a/node_modules/lodash/fp/noop.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('noop', require('../noop'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/now.js b/node_modules/lodash/fp/now.js deleted file mode 100644 index 6de2068..0000000 --- a/node_modules/lodash/fp/now.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('now', require('../now'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/nth.js b/node_modules/lodash/fp/nth.js deleted file mode 100644 index da4fda7..0000000 --- a/node_modules/lodash/fp/nth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('nth', require('../nth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/nthArg.js b/node_modules/lodash/fp/nthArg.js deleted file mode 100644 index fce3165..0000000 --- a/node_modules/lodash/fp/nthArg.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('nthArg', require('../nthArg')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/number.js b/node_modules/lodash/fp/number.js deleted file mode 100644 index 5c10b88..0000000 --- a/node_modules/lodash/fp/number.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../number')); diff --git a/node_modules/lodash/fp/object.js b/node_modules/lodash/fp/object.js deleted file mode 100644 index ae39a13..0000000 --- a/node_modules/lodash/fp/object.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../object')); diff --git a/node_modules/lodash/fp/omit.js b/node_modules/lodash/fp/omit.js deleted file mode 100644 index fd68529..0000000 --- a/node_modules/lodash/fp/omit.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('omit', require('../omit')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/omitAll.js b/node_modules/lodash/fp/omitAll.js deleted file mode 100644 index 144cf4b..0000000 --- a/node_modules/lodash/fp/omitAll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./omit'); diff --git a/node_modules/lodash/fp/omitBy.js b/node_modules/lodash/fp/omitBy.js deleted file mode 100644 index 90df738..0000000 --- a/node_modules/lodash/fp/omitBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('omitBy', require('../omitBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/once.js b/node_modules/lodash/fp/once.js deleted file mode 100644 index f8f0a5c..0000000 --- a/node_modules/lodash/fp/once.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('once', require('../once'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/orderBy.js b/node_modules/lodash/fp/orderBy.js deleted file mode 100644 index 848e210..0000000 --- a/node_modules/lodash/fp/orderBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('orderBy', require('../orderBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/over.js b/node_modules/lodash/fp/over.js deleted file mode 100644 index 01eba7b..0000000 --- a/node_modules/lodash/fp/over.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('over', require('../over')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/overArgs.js b/node_modules/lodash/fp/overArgs.js deleted file mode 100644 index 738556f..0000000 --- a/node_modules/lodash/fp/overArgs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overArgs', require('../overArgs')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/overEvery.js b/node_modules/lodash/fp/overEvery.js deleted file mode 100644 index 9f5a032..0000000 --- a/node_modules/lodash/fp/overEvery.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overEvery', require('../overEvery')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/overSome.js b/node_modules/lodash/fp/overSome.js deleted file mode 100644 index 15939d5..0000000 --- a/node_modules/lodash/fp/overSome.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overSome', require('../overSome')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pad.js b/node_modules/lodash/fp/pad.js deleted file mode 100644 index f1dea4a..0000000 --- a/node_modules/lodash/fp/pad.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pad', require('../pad')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/padChars.js b/node_modules/lodash/fp/padChars.js deleted file mode 100644 index d6e0804..0000000 --- a/node_modules/lodash/fp/padChars.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padChars', require('../pad')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/padCharsEnd.js b/node_modules/lodash/fp/padCharsEnd.js deleted file mode 100644 index d4ab79a..0000000 --- a/node_modules/lodash/fp/padCharsEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padCharsEnd', require('../padEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/padCharsStart.js b/node_modules/lodash/fp/padCharsStart.js deleted file mode 100644 index a08a300..0000000 --- a/node_modules/lodash/fp/padCharsStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padCharsStart', require('../padStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/padEnd.js b/node_modules/lodash/fp/padEnd.js deleted file mode 100644 index a8522ec..0000000 --- a/node_modules/lodash/fp/padEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padEnd', require('../padEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/padStart.js b/node_modules/lodash/fp/padStart.js deleted file mode 100644 index f4ca79d..0000000 --- a/node_modules/lodash/fp/padStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padStart', require('../padStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/parseInt.js b/node_modules/lodash/fp/parseInt.js deleted file mode 100644 index 27314cc..0000000 --- a/node_modules/lodash/fp/parseInt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('parseInt', require('../parseInt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/partial.js b/node_modules/lodash/fp/partial.js deleted file mode 100644 index 5d46015..0000000 --- a/node_modules/lodash/fp/partial.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partial', require('../partial')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/partialRight.js b/node_modules/lodash/fp/partialRight.js deleted file mode 100644 index 7f05fed..0000000 --- a/node_modules/lodash/fp/partialRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partialRight', require('../partialRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/partition.js b/node_modules/lodash/fp/partition.js deleted file mode 100644 index 2ebcacc..0000000 --- a/node_modules/lodash/fp/partition.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partition', require('../partition')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/path.js b/node_modules/lodash/fp/path.js deleted file mode 100644 index b29cfb2..0000000 --- a/node_modules/lodash/fp/path.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./get'); diff --git a/node_modules/lodash/fp/pathEq.js b/node_modules/lodash/fp/pathEq.js deleted file mode 100644 index 36c027a..0000000 --- a/node_modules/lodash/fp/pathEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./matchesProperty'); diff --git a/node_modules/lodash/fp/pathOr.js b/node_modules/lodash/fp/pathOr.js deleted file mode 100644 index 4ab5820..0000000 --- a/node_modules/lodash/fp/pathOr.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./getOr'); diff --git a/node_modules/lodash/fp/paths.js b/node_modules/lodash/fp/paths.js deleted file mode 100644 index 1eb7950..0000000 --- a/node_modules/lodash/fp/paths.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./at'); diff --git a/node_modules/lodash/fp/pick.js b/node_modules/lodash/fp/pick.js deleted file mode 100644 index 197393d..0000000 --- a/node_modules/lodash/fp/pick.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pick', require('../pick')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pickAll.js b/node_modules/lodash/fp/pickAll.js deleted file mode 100644 index a8ecd46..0000000 --- a/node_modules/lodash/fp/pickAll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./pick'); diff --git a/node_modules/lodash/fp/pickBy.js b/node_modules/lodash/fp/pickBy.js deleted file mode 100644 index d832d16..0000000 --- a/node_modules/lodash/fp/pickBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pickBy', require('../pickBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pipe.js b/node_modules/lodash/fp/pipe.js deleted file mode 100644 index b2e1e2c..0000000 --- a/node_modules/lodash/fp/pipe.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flow'); diff --git a/node_modules/lodash/fp/placeholder.js b/node_modules/lodash/fp/placeholder.js deleted file mode 100644 index 1ce1739..0000000 --- a/node_modules/lodash/fp/placeholder.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * The default argument placeholder value for methods. - * - * @type {Object} - */ -module.exports = {}; diff --git a/node_modules/lodash/fp/plant.js b/node_modules/lodash/fp/plant.js deleted file mode 100644 index eca8f32..0000000 --- a/node_modules/lodash/fp/plant.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('plant', require('../plant'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pluck.js b/node_modules/lodash/fp/pluck.js deleted file mode 100644 index 0d1e1ab..0000000 --- a/node_modules/lodash/fp/pluck.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./map'); diff --git a/node_modules/lodash/fp/prop.js b/node_modules/lodash/fp/prop.js deleted file mode 100644 index b29cfb2..0000000 --- a/node_modules/lodash/fp/prop.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./get'); diff --git a/node_modules/lodash/fp/propEq.js b/node_modules/lodash/fp/propEq.js deleted file mode 100644 index 36c027a..0000000 --- a/node_modules/lodash/fp/propEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./matchesProperty'); diff --git a/node_modules/lodash/fp/propOr.js b/node_modules/lodash/fp/propOr.js deleted file mode 100644 index 4ab5820..0000000 --- a/node_modules/lodash/fp/propOr.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./getOr'); diff --git a/node_modules/lodash/fp/property.js b/node_modules/lodash/fp/property.js deleted file mode 100644 index b29cfb2..0000000 --- a/node_modules/lodash/fp/property.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./get'); diff --git a/node_modules/lodash/fp/propertyOf.js b/node_modules/lodash/fp/propertyOf.js deleted file mode 100644 index f6273ee..0000000 --- a/node_modules/lodash/fp/propertyOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('propertyOf', require('../get')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/props.js b/node_modules/lodash/fp/props.js deleted file mode 100644 index 1eb7950..0000000 --- a/node_modules/lodash/fp/props.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./at'); diff --git a/node_modules/lodash/fp/pull.js b/node_modules/lodash/fp/pull.js deleted file mode 100644 index 8d7084f..0000000 --- a/node_modules/lodash/fp/pull.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pull', require('../pull')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pullAll.js b/node_modules/lodash/fp/pullAll.js deleted file mode 100644 index 98d5c9a..0000000 --- a/node_modules/lodash/fp/pullAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAll', require('../pullAll')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pullAllBy.js b/node_modules/lodash/fp/pullAllBy.js deleted file mode 100644 index 876bc3b..0000000 --- a/node_modules/lodash/fp/pullAllBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAllBy', require('../pullAllBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pullAllWith.js b/node_modules/lodash/fp/pullAllWith.js deleted file mode 100644 index f71ba4d..0000000 --- a/node_modules/lodash/fp/pullAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAllWith', require('../pullAllWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/pullAt.js b/node_modules/lodash/fp/pullAt.js deleted file mode 100644 index e8b3bb6..0000000 --- a/node_modules/lodash/fp/pullAt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAt', require('../pullAt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/random.js b/node_modules/lodash/fp/random.js deleted file mode 100644 index 99d852e..0000000 --- a/node_modules/lodash/fp/random.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('random', require('../random')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/range.js b/node_modules/lodash/fp/range.js deleted file mode 100644 index a6bb591..0000000 --- a/node_modules/lodash/fp/range.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('range', require('../range')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/rangeRight.js b/node_modules/lodash/fp/rangeRight.js deleted file mode 100644 index fdb712f..0000000 --- a/node_modules/lodash/fp/rangeRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rangeRight', require('../rangeRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/rangeStep.js b/node_modules/lodash/fp/rangeStep.js deleted file mode 100644 index d72dfc2..0000000 --- a/node_modules/lodash/fp/rangeStep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rangeStep', require('../range')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/rangeStepRight.js b/node_modules/lodash/fp/rangeStepRight.js deleted file mode 100644 index 8b2a67b..0000000 --- a/node_modules/lodash/fp/rangeStepRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rangeStepRight', require('../rangeRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/rearg.js b/node_modules/lodash/fp/rearg.js deleted file mode 100644 index 678e02a..0000000 --- a/node_modules/lodash/fp/rearg.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rearg', require('../rearg')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/reduce.js b/node_modules/lodash/fp/reduce.js deleted file mode 100644 index 4cef0a0..0000000 --- a/node_modules/lodash/fp/reduce.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reduce', require('../reduce')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/reduceRight.js b/node_modules/lodash/fp/reduceRight.js deleted file mode 100644 index caf5bb5..0000000 --- a/node_modules/lodash/fp/reduceRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reduceRight', require('../reduceRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/reject.js b/node_modules/lodash/fp/reject.js deleted file mode 100644 index c163273..0000000 --- a/node_modules/lodash/fp/reject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reject', require('../reject')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/remove.js b/node_modules/lodash/fp/remove.js deleted file mode 100644 index e9d1327..0000000 --- a/node_modules/lodash/fp/remove.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('remove', require('../remove')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/repeat.js b/node_modules/lodash/fp/repeat.js deleted file mode 100644 index 08470f2..0000000 --- a/node_modules/lodash/fp/repeat.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('repeat', require('../repeat')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/replace.js b/node_modules/lodash/fp/replace.js deleted file mode 100644 index 2227db6..0000000 --- a/node_modules/lodash/fp/replace.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('replace', require('../replace')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/rest.js b/node_modules/lodash/fp/rest.js deleted file mode 100644 index c1f3d64..0000000 --- a/node_modules/lodash/fp/rest.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rest', require('../rest')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/restFrom.js b/node_modules/lodash/fp/restFrom.js deleted file mode 100644 index 714e42b..0000000 --- a/node_modules/lodash/fp/restFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('restFrom', require('../rest')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/result.js b/node_modules/lodash/fp/result.js deleted file mode 100644 index f86ce07..0000000 --- a/node_modules/lodash/fp/result.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('result', require('../result')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/reverse.js b/node_modules/lodash/fp/reverse.js deleted file mode 100644 index 07c9f5e..0000000 --- a/node_modules/lodash/fp/reverse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reverse', require('../reverse')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/round.js b/node_modules/lodash/fp/round.js deleted file mode 100644 index 4c0e5c8..0000000 --- a/node_modules/lodash/fp/round.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('round', require('../round')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sample.js b/node_modules/lodash/fp/sample.js deleted file mode 100644 index 6bea125..0000000 --- a/node_modules/lodash/fp/sample.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sample', require('../sample'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sampleSize.js b/node_modules/lodash/fp/sampleSize.js deleted file mode 100644 index 359ed6f..0000000 --- a/node_modules/lodash/fp/sampleSize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sampleSize', require('../sampleSize')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/seq.js b/node_modules/lodash/fp/seq.js deleted file mode 100644 index d8f42b0..0000000 --- a/node_modules/lodash/fp/seq.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../seq')); diff --git a/node_modules/lodash/fp/set.js b/node_modules/lodash/fp/set.js deleted file mode 100644 index 0b56a56..0000000 --- a/node_modules/lodash/fp/set.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('set', require('../set')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/setWith.js b/node_modules/lodash/fp/setWith.js deleted file mode 100644 index 0b58495..0000000 --- a/node_modules/lodash/fp/setWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('setWith', require('../setWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/shuffle.js b/node_modules/lodash/fp/shuffle.js deleted file mode 100644 index aa3a1ca..0000000 --- a/node_modules/lodash/fp/shuffle.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('shuffle', require('../shuffle'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/size.js b/node_modules/lodash/fp/size.js deleted file mode 100644 index 7490136..0000000 --- a/node_modules/lodash/fp/size.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('size', require('../size'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/slice.js b/node_modules/lodash/fp/slice.js deleted file mode 100644 index 15945d3..0000000 --- a/node_modules/lodash/fp/slice.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('slice', require('../slice')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/snakeCase.js b/node_modules/lodash/fp/snakeCase.js deleted file mode 100644 index a0ff780..0000000 --- a/node_modules/lodash/fp/snakeCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('snakeCase', require('../snakeCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/some.js b/node_modules/lodash/fp/some.js deleted file mode 100644 index a4fa2d0..0000000 --- a/node_modules/lodash/fp/some.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('some', require('../some')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortBy.js b/node_modules/lodash/fp/sortBy.js deleted file mode 100644 index e0790ad..0000000 --- a/node_modules/lodash/fp/sortBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortBy', require('../sortBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndex.js b/node_modules/lodash/fp/sortedIndex.js deleted file mode 100644 index 364a054..0000000 --- a/node_modules/lodash/fp/sortedIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndex', require('../sortedIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndexBy.js b/node_modules/lodash/fp/sortedIndexBy.js deleted file mode 100644 index 9593dbd..0000000 --- a/node_modules/lodash/fp/sortedIndexBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndexBy', require('../sortedIndexBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndexOf.js b/node_modules/lodash/fp/sortedIndexOf.js deleted file mode 100644 index c9084ca..0000000 --- a/node_modules/lodash/fp/sortedIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndexOf', require('../sortedIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndex.js b/node_modules/lodash/fp/sortedLastIndex.js deleted file mode 100644 index 47fe241..0000000 --- a/node_modules/lodash/fp/sortedLastIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndex', require('../sortedLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndexBy.js b/node_modules/lodash/fp/sortedLastIndexBy.js deleted file mode 100644 index 0f9a347..0000000 --- a/node_modules/lodash/fp/sortedLastIndexBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndexBy', require('../sortedLastIndexBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndexOf.js b/node_modules/lodash/fp/sortedLastIndexOf.js deleted file mode 100644 index 0d4d932..0000000 --- a/node_modules/lodash/fp/sortedLastIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndexOf', require('../sortedLastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedUniq.js b/node_modules/lodash/fp/sortedUniq.js deleted file mode 100644 index 882d283..0000000 --- a/node_modules/lodash/fp/sortedUniq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedUniq', require('../sortedUniq'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sortedUniqBy.js b/node_modules/lodash/fp/sortedUniqBy.js deleted file mode 100644 index 033db91..0000000 --- a/node_modules/lodash/fp/sortedUniqBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedUniqBy', require('../sortedUniqBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/split.js b/node_modules/lodash/fp/split.js deleted file mode 100644 index 14de1a7..0000000 --- a/node_modules/lodash/fp/split.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('split', require('../split')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/spread.js b/node_modules/lodash/fp/spread.js deleted file mode 100644 index 2d11b70..0000000 --- a/node_modules/lodash/fp/spread.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('spread', require('../spread')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/spreadFrom.js b/node_modules/lodash/fp/spreadFrom.js deleted file mode 100644 index 0b630df..0000000 --- a/node_modules/lodash/fp/spreadFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('spreadFrom', require('../spread')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/startCase.js b/node_modules/lodash/fp/startCase.js deleted file mode 100644 index ada98c9..0000000 --- a/node_modules/lodash/fp/startCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('startCase', require('../startCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/startsWith.js b/node_modules/lodash/fp/startsWith.js deleted file mode 100644 index 985e2f2..0000000 --- a/node_modules/lodash/fp/startsWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('startsWith', require('../startsWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/string.js b/node_modules/lodash/fp/string.js deleted file mode 100644 index 773b037..0000000 --- a/node_modules/lodash/fp/string.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../string')); diff --git a/node_modules/lodash/fp/stubArray.js b/node_modules/lodash/fp/stubArray.js deleted file mode 100644 index cd604cb..0000000 --- a/node_modules/lodash/fp/stubArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubArray', require('../stubArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/stubFalse.js b/node_modules/lodash/fp/stubFalse.js deleted file mode 100644 index 3296664..0000000 --- a/node_modules/lodash/fp/stubFalse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubFalse', require('../stubFalse'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/stubObject.js b/node_modules/lodash/fp/stubObject.js deleted file mode 100644 index c6c8ec4..0000000 --- a/node_modules/lodash/fp/stubObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubObject', require('../stubObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/stubString.js b/node_modules/lodash/fp/stubString.js deleted file mode 100644 index 701051e..0000000 --- a/node_modules/lodash/fp/stubString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubString', require('../stubString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/stubTrue.js b/node_modules/lodash/fp/stubTrue.js deleted file mode 100644 index 9249082..0000000 --- a/node_modules/lodash/fp/stubTrue.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubTrue', require('../stubTrue'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/subtract.js b/node_modules/lodash/fp/subtract.js deleted file mode 100644 index d32b16d..0000000 --- a/node_modules/lodash/fp/subtract.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('subtract', require('../subtract')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sum.js b/node_modules/lodash/fp/sum.js deleted file mode 100644 index 5cce12b..0000000 --- a/node_modules/lodash/fp/sum.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sum', require('../sum'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/sumBy.js b/node_modules/lodash/fp/sumBy.js deleted file mode 100644 index c882656..0000000 --- a/node_modules/lodash/fp/sumBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sumBy', require('../sumBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/symmetricDifference.js b/node_modules/lodash/fp/symmetricDifference.js deleted file mode 100644 index 78c16ad..0000000 --- a/node_modules/lodash/fp/symmetricDifference.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./xor'); diff --git a/node_modules/lodash/fp/symmetricDifferenceBy.js b/node_modules/lodash/fp/symmetricDifferenceBy.js deleted file mode 100644 index 298fc7f..0000000 --- a/node_modules/lodash/fp/symmetricDifferenceBy.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./xorBy'); diff --git a/node_modules/lodash/fp/symmetricDifferenceWith.js b/node_modules/lodash/fp/symmetricDifferenceWith.js deleted file mode 100644 index 70bc6fa..0000000 --- a/node_modules/lodash/fp/symmetricDifferenceWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./xorWith'); diff --git a/node_modules/lodash/fp/tail.js b/node_modules/lodash/fp/tail.js deleted file mode 100644 index f122f0a..0000000 --- a/node_modules/lodash/fp/tail.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('tail', require('../tail'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/take.js b/node_modules/lodash/fp/take.js deleted file mode 100644 index 9af98a7..0000000 --- a/node_modules/lodash/fp/take.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('take', require('../take')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/takeLast.js b/node_modules/lodash/fp/takeLast.js deleted file mode 100644 index e98c84a..0000000 --- a/node_modules/lodash/fp/takeLast.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./takeRight'); diff --git a/node_modules/lodash/fp/takeLastWhile.js b/node_modules/lodash/fp/takeLastWhile.js deleted file mode 100644 index 5367968..0000000 --- a/node_modules/lodash/fp/takeLastWhile.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./takeRightWhile'); diff --git a/node_modules/lodash/fp/takeRight.js b/node_modules/lodash/fp/takeRight.js deleted file mode 100644 index b82950a..0000000 --- a/node_modules/lodash/fp/takeRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeRight', require('../takeRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/takeRightWhile.js b/node_modules/lodash/fp/takeRightWhile.js deleted file mode 100644 index 8ffb0a2..0000000 --- a/node_modules/lodash/fp/takeRightWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeRightWhile', require('../takeRightWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/takeWhile.js b/node_modules/lodash/fp/takeWhile.js deleted file mode 100644 index 2813664..0000000 --- a/node_modules/lodash/fp/takeWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeWhile', require('../takeWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/tap.js b/node_modules/lodash/fp/tap.js deleted file mode 100644 index d33ad6e..0000000 --- a/node_modules/lodash/fp/tap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('tap', require('../tap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/template.js b/node_modules/lodash/fp/template.js deleted file mode 100644 index 74857e1..0000000 --- a/node_modules/lodash/fp/template.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('template', require('../template')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/templateSettings.js b/node_modules/lodash/fp/templateSettings.js deleted file mode 100644 index 7bcc0a8..0000000 --- a/node_modules/lodash/fp/templateSettings.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('templateSettings', require('../templateSettings'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/throttle.js b/node_modules/lodash/fp/throttle.js deleted file mode 100644 index 77fff14..0000000 --- a/node_modules/lodash/fp/throttle.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('throttle', require('../throttle')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/thru.js b/node_modules/lodash/fp/thru.js deleted file mode 100644 index d42b3b1..0000000 --- a/node_modules/lodash/fp/thru.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('thru', require('../thru')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/times.js b/node_modules/lodash/fp/times.js deleted file mode 100644 index 0dab06d..0000000 --- a/node_modules/lodash/fp/times.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('times', require('../times')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toArray.js b/node_modules/lodash/fp/toArray.js deleted file mode 100644 index f0c360a..0000000 --- a/node_modules/lodash/fp/toArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toArray', require('../toArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toFinite.js b/node_modules/lodash/fp/toFinite.js deleted file mode 100644 index 3a47687..0000000 --- a/node_modules/lodash/fp/toFinite.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toFinite', require('../toFinite'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toInteger.js b/node_modules/lodash/fp/toInteger.js deleted file mode 100644 index e0af6a7..0000000 --- a/node_modules/lodash/fp/toInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toInteger', require('../toInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toIterator.js b/node_modules/lodash/fp/toIterator.js deleted file mode 100644 index 65e6baa..0000000 --- a/node_modules/lodash/fp/toIterator.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toIterator', require('../toIterator'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toJSON.js b/node_modules/lodash/fp/toJSON.js deleted file mode 100644 index 2d718d0..0000000 --- a/node_modules/lodash/fp/toJSON.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toJSON', require('../toJSON'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toLength.js b/node_modules/lodash/fp/toLength.js deleted file mode 100644 index b97cdd9..0000000 --- a/node_modules/lodash/fp/toLength.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toLength', require('../toLength'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toLower.js b/node_modules/lodash/fp/toLower.js deleted file mode 100644 index 616ef36..0000000 --- a/node_modules/lodash/fp/toLower.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toLower', require('../toLower'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toNumber.js b/node_modules/lodash/fp/toNumber.js deleted file mode 100644 index d0c6f4d..0000000 --- a/node_modules/lodash/fp/toNumber.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toNumber', require('../toNumber'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toPairs.js b/node_modules/lodash/fp/toPairs.js deleted file mode 100644 index af78378..0000000 --- a/node_modules/lodash/fp/toPairs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPairs', require('../toPairs'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toPairsIn.js b/node_modules/lodash/fp/toPairsIn.js deleted file mode 100644 index 66504ab..0000000 --- a/node_modules/lodash/fp/toPairsIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPairsIn', require('../toPairsIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toPath.js b/node_modules/lodash/fp/toPath.js deleted file mode 100644 index b4d5e50..0000000 --- a/node_modules/lodash/fp/toPath.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPath', require('../toPath'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toPlainObject.js b/node_modules/lodash/fp/toPlainObject.js deleted file mode 100644 index 278bb86..0000000 --- a/node_modules/lodash/fp/toPlainObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPlainObject', require('../toPlainObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toSafeInteger.js b/node_modules/lodash/fp/toSafeInteger.js deleted file mode 100644 index 367a26f..0000000 --- a/node_modules/lodash/fp/toSafeInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toSafeInteger', require('../toSafeInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toString.js b/node_modules/lodash/fp/toString.js deleted file mode 100644 index cec4f8e..0000000 --- a/node_modules/lodash/fp/toString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toString', require('../toString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/toUpper.js b/node_modules/lodash/fp/toUpper.js deleted file mode 100644 index 54f9a56..0000000 --- a/node_modules/lodash/fp/toUpper.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toUpper', require('../toUpper'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/transform.js b/node_modules/lodash/fp/transform.js deleted file mode 100644 index 759d088..0000000 --- a/node_modules/lodash/fp/transform.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('transform', require('../transform')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trim.js b/node_modules/lodash/fp/trim.js deleted file mode 100644 index e6319a7..0000000 --- a/node_modules/lodash/fp/trim.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trim', require('../trim')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trimChars.js b/node_modules/lodash/fp/trimChars.js deleted file mode 100644 index c9294de..0000000 --- a/node_modules/lodash/fp/trimChars.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimChars', require('../trim')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trimCharsEnd.js b/node_modules/lodash/fp/trimCharsEnd.js deleted file mode 100644 index 284bc2f..0000000 --- a/node_modules/lodash/fp/trimCharsEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimCharsEnd', require('../trimEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trimCharsStart.js b/node_modules/lodash/fp/trimCharsStart.js deleted file mode 100644 index ff0ee65..0000000 --- a/node_modules/lodash/fp/trimCharsStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimCharsStart', require('../trimStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trimEnd.js b/node_modules/lodash/fp/trimEnd.js deleted file mode 100644 index 7190880..0000000 --- a/node_modules/lodash/fp/trimEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimEnd', require('../trimEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/trimStart.js b/node_modules/lodash/fp/trimStart.js deleted file mode 100644 index fda902c..0000000 --- a/node_modules/lodash/fp/trimStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimStart', require('../trimStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/truncate.js b/node_modules/lodash/fp/truncate.js deleted file mode 100644 index d265c1d..0000000 --- a/node_modules/lodash/fp/truncate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('truncate', require('../truncate')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unapply.js b/node_modules/lodash/fp/unapply.js deleted file mode 100644 index c5dfe77..0000000 --- a/node_modules/lodash/fp/unapply.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./rest'); diff --git a/node_modules/lodash/fp/unary.js b/node_modules/lodash/fp/unary.js deleted file mode 100644 index 286c945..0000000 --- a/node_modules/lodash/fp/unary.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unary', require('../unary'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unescape.js b/node_modules/lodash/fp/unescape.js deleted file mode 100644 index fddcb46..0000000 --- a/node_modules/lodash/fp/unescape.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unescape', require('../unescape'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/union.js b/node_modules/lodash/fp/union.js deleted file mode 100644 index ef8228d..0000000 --- a/node_modules/lodash/fp/union.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('union', require('../union')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unionBy.js b/node_modules/lodash/fp/unionBy.js deleted file mode 100644 index 603687a..0000000 --- a/node_modules/lodash/fp/unionBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unionBy', require('../unionBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unionWith.js b/node_modules/lodash/fp/unionWith.js deleted file mode 100644 index 65bb3a7..0000000 --- a/node_modules/lodash/fp/unionWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unionWith', require('../unionWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/uniq.js b/node_modules/lodash/fp/uniq.js deleted file mode 100644 index bc18524..0000000 --- a/node_modules/lodash/fp/uniq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniq', require('../uniq'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/uniqBy.js b/node_modules/lodash/fp/uniqBy.js deleted file mode 100644 index 634c6a8..0000000 --- a/node_modules/lodash/fp/uniqBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqBy', require('../uniqBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/uniqWith.js b/node_modules/lodash/fp/uniqWith.js deleted file mode 100644 index 0ec601a..0000000 --- a/node_modules/lodash/fp/uniqWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqWith', require('../uniqWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/uniqueId.js b/node_modules/lodash/fp/uniqueId.js deleted file mode 100644 index aa8fc2f..0000000 --- a/node_modules/lodash/fp/uniqueId.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqueId', require('../uniqueId')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unnest.js b/node_modules/lodash/fp/unnest.js deleted file mode 100644 index 5d34060..0000000 --- a/node_modules/lodash/fp/unnest.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flatten'); diff --git a/node_modules/lodash/fp/unset.js b/node_modules/lodash/fp/unset.js deleted file mode 100644 index ea203a0..0000000 --- a/node_modules/lodash/fp/unset.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unset', require('../unset')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unzip.js b/node_modules/lodash/fp/unzip.js deleted file mode 100644 index cc364b3..0000000 --- a/node_modules/lodash/fp/unzip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unzip', require('../unzip'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/unzipWith.js b/node_modules/lodash/fp/unzipWith.js deleted file mode 100644 index 182eaa1..0000000 --- a/node_modules/lodash/fp/unzipWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unzipWith', require('../unzipWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/update.js b/node_modules/lodash/fp/update.js deleted file mode 100644 index b8ce2cc..0000000 --- a/node_modules/lodash/fp/update.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('update', require('../update')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/updateWith.js b/node_modules/lodash/fp/updateWith.js deleted file mode 100644 index d5e8282..0000000 --- a/node_modules/lodash/fp/updateWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('updateWith', require('../updateWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/upperCase.js b/node_modules/lodash/fp/upperCase.js deleted file mode 100644 index c886f20..0000000 --- a/node_modules/lodash/fp/upperCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('upperCase', require('../upperCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/upperFirst.js b/node_modules/lodash/fp/upperFirst.js deleted file mode 100644 index d8c04df..0000000 --- a/node_modules/lodash/fp/upperFirst.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('upperFirst', require('../upperFirst'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/useWith.js b/node_modules/lodash/fp/useWith.js deleted file mode 100644 index d8b3df5..0000000 --- a/node_modules/lodash/fp/useWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overArgs'); diff --git a/node_modules/lodash/fp/util.js b/node_modules/lodash/fp/util.js deleted file mode 100644 index 18c00ba..0000000 --- a/node_modules/lodash/fp/util.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../util')); diff --git a/node_modules/lodash/fp/value.js b/node_modules/lodash/fp/value.js deleted file mode 100644 index 555eec7..0000000 --- a/node_modules/lodash/fp/value.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('value', require('../value'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/valueOf.js b/node_modules/lodash/fp/valueOf.js deleted file mode 100644 index f968807..0000000 --- a/node_modules/lodash/fp/valueOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('valueOf', require('../valueOf'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/values.js b/node_modules/lodash/fp/values.js deleted file mode 100644 index 2dfc561..0000000 --- a/node_modules/lodash/fp/values.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('values', require('../values'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/valuesIn.js b/node_modules/lodash/fp/valuesIn.js deleted file mode 100644 index a1b2bb8..0000000 --- a/node_modules/lodash/fp/valuesIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('valuesIn', require('../valuesIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/where.js b/node_modules/lodash/fp/where.js deleted file mode 100644 index 3247f64..0000000 --- a/node_modules/lodash/fp/where.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./conformsTo'); diff --git a/node_modules/lodash/fp/whereEq.js b/node_modules/lodash/fp/whereEq.js deleted file mode 100644 index 29d1e1e..0000000 --- a/node_modules/lodash/fp/whereEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./isMatch'); diff --git a/node_modules/lodash/fp/without.js b/node_modules/lodash/fp/without.js deleted file mode 100644 index bad9e12..0000000 --- a/node_modules/lodash/fp/without.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('without', require('../without')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/words.js b/node_modules/lodash/fp/words.js deleted file mode 100644 index 4a90141..0000000 --- a/node_modules/lodash/fp/words.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('words', require('../words')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrap.js b/node_modules/lodash/fp/wrap.js deleted file mode 100644 index e93bd8a..0000000 --- a/node_modules/lodash/fp/wrap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrap', require('../wrap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrapperAt.js b/node_modules/lodash/fp/wrapperAt.js deleted file mode 100644 index 8f0a310..0000000 --- a/node_modules/lodash/fp/wrapperAt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperAt', require('../wrapperAt'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrapperChain.js b/node_modules/lodash/fp/wrapperChain.js deleted file mode 100644 index 2a48ea2..0000000 --- a/node_modules/lodash/fp/wrapperChain.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperChain', require('../wrapperChain'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrapperLodash.js b/node_modules/lodash/fp/wrapperLodash.js deleted file mode 100644 index a7162d0..0000000 --- a/node_modules/lodash/fp/wrapperLodash.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperLodash', require('../wrapperLodash'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrapperReverse.js b/node_modules/lodash/fp/wrapperReverse.js deleted file mode 100644 index e1481aa..0000000 --- a/node_modules/lodash/fp/wrapperReverse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperReverse', require('../wrapperReverse'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/wrapperValue.js b/node_modules/lodash/fp/wrapperValue.js deleted file mode 100644 index 8eb9112..0000000 --- a/node_modules/lodash/fp/wrapperValue.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperValue', require('../wrapperValue'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/xor.js b/node_modules/lodash/fp/xor.js deleted file mode 100644 index 29e2819..0000000 --- a/node_modules/lodash/fp/xor.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xor', require('../xor')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/xorBy.js b/node_modules/lodash/fp/xorBy.js deleted file mode 100644 index b355686..0000000 --- a/node_modules/lodash/fp/xorBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xorBy', require('../xorBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/xorWith.js b/node_modules/lodash/fp/xorWith.js deleted file mode 100644 index 8e05739..0000000 --- a/node_modules/lodash/fp/xorWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xorWith', require('../xorWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/zip.js b/node_modules/lodash/fp/zip.js deleted file mode 100644 index 69e147a..0000000 --- a/node_modules/lodash/fp/zip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zip', require('../zip')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/zipAll.js b/node_modules/lodash/fp/zipAll.js deleted file mode 100644 index efa8ccb..0000000 --- a/node_modules/lodash/fp/zipAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipAll', require('../zip')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/zipObj.js b/node_modules/lodash/fp/zipObj.js deleted file mode 100644 index f4a3453..0000000 --- a/node_modules/lodash/fp/zipObj.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./zipObject'); diff --git a/node_modules/lodash/fp/zipObject.js b/node_modules/lodash/fp/zipObject.js deleted file mode 100644 index 462dbb6..0000000 --- a/node_modules/lodash/fp/zipObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipObject', require('../zipObject')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/zipObjectDeep.js b/node_modules/lodash/fp/zipObjectDeep.js deleted file mode 100644 index 53a5d33..0000000 --- a/node_modules/lodash/fp/zipObjectDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipObjectDeep', require('../zipObjectDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fp/zipWith.js b/node_modules/lodash/fp/zipWith.js deleted file mode 100644 index c5cf9e2..0000000 --- a/node_modules/lodash/fp/zipWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipWith', require('../zipWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/node_modules/lodash/fromPairs.js b/node_modules/lodash/fromPairs.js deleted file mode 100644 index ee7940d..0000000 --- a/node_modules/lodash/fromPairs.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['a', 1], ['b', 2]]); - * // => { 'a': 1, 'b': 2 } - */ -function fromPairs(pairs) { - var index = -1, - length = pairs == null ? 0 : pairs.length, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; -} - -module.exports = fromPairs; diff --git a/node_modules/lodash/function.js b/node_modules/lodash/function.js deleted file mode 100644 index b0fc6d9..0000000 --- a/node_modules/lodash/function.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - 'after': require('./after'), - 'ary': require('./ary'), - 'before': require('./before'), - 'bind': require('./bind'), - 'bindKey': require('./bindKey'), - 'curry': require('./curry'), - 'curryRight': require('./curryRight'), - 'debounce': require('./debounce'), - 'defer': require('./defer'), - 'delay': require('./delay'), - 'flip': require('./flip'), - 'memoize': require('./memoize'), - 'negate': require('./negate'), - 'once': require('./once'), - 'overArgs': require('./overArgs'), - 'partial': require('./partial'), - 'partialRight': require('./partialRight'), - 'rearg': require('./rearg'), - 'rest': require('./rest'), - 'spread': require('./spread'), - 'throttle': require('./throttle'), - 'unary': require('./unary'), - 'wrap': require('./wrap') -}; diff --git a/node_modules/lodash/functions.js b/node_modules/lodash/functions.js deleted file mode 100644 index 9722928..0000000 --- a/node_modules/lodash/functions.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFunctions = require('./_baseFunctions'), - keys = require('./keys'); - -/** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ -function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); -} - -module.exports = functions; diff --git a/node_modules/lodash/functionsIn.js b/node_modules/lodash/functionsIn.js deleted file mode 100644 index f00345d..0000000 --- a/node_modules/lodash/functionsIn.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFunctions = require('./_baseFunctions'), - keysIn = require('./keysIn'); - -/** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ -function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); -} - -module.exports = functionsIn; diff --git a/node_modules/lodash/get.js b/node_modules/lodash/get.js deleted file mode 100644 index 8805ff9..0000000 --- a/node_modules/lodash/get.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseGet = require('./_baseGet'); - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; -} - -module.exports = get; diff --git a/node_modules/lodash/groupBy.js b/node_modules/lodash/groupBy.js deleted file mode 100644 index babf4f6..0000000 --- a/node_modules/lodash/groupBy.js +++ /dev/null @@ -1,41 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - createAggregator = require('./_createAggregator'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ -var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } -}); - -module.exports = groupBy; diff --git a/node_modules/lodash/gt.js b/node_modules/lodash/gt.js deleted file mode 100644 index 3a66282..0000000 --- a/node_modules/lodash/gt.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseGt = require('./_baseGt'), - createRelationalOperation = require('./_createRelationalOperation'); - -/** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ -var gt = createRelationalOperation(baseGt); - -module.exports = gt; diff --git a/node_modules/lodash/gte.js b/node_modules/lodash/gte.js deleted file mode 100644 index 4180a68..0000000 --- a/node_modules/lodash/gte.js +++ /dev/null @@ -1,30 +0,0 @@ -var createRelationalOperation = require('./_createRelationalOperation'); - -/** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ -var gte = createRelationalOperation(function(value, other) { - return value >= other; -}); - -module.exports = gte; diff --git a/node_modules/lodash/has.js b/node_modules/lodash/has.js deleted file mode 100644 index 34df55e..0000000 --- a/node_modules/lodash/has.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseHas = require('./_baseHas'), - hasPath = require('./_hasPath'); - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && hasPath(object, path, baseHas); -} - -module.exports = has; diff --git a/node_modules/lodash/hasIn.js b/node_modules/lodash/hasIn.js deleted file mode 100644 index 06a3686..0000000 --- a/node_modules/lodash/hasIn.js +++ /dev/null @@ -1,34 +0,0 @@ -var baseHasIn = require('./_baseHasIn'), - hasPath = require('./_hasPath'); - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); -} - -module.exports = hasIn; diff --git a/node_modules/lodash/head.js b/node_modules/lodash/head.js deleted file mode 100644 index dee9d1f..0000000 --- a/node_modules/lodash/head.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ -function head(array) { - return (array && array.length) ? array[0] : undefined; -} - -module.exports = head; diff --git a/node_modules/lodash/identity.js b/node_modules/lodash/identity.js deleted file mode 100644 index 2d5d963..0000000 --- a/node_modules/lodash/identity.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity(value) { - return value; -} - -module.exports = identity; diff --git a/node_modules/lodash/inRange.js b/node_modules/lodash/inRange.js deleted file mode 100644 index f20728d..0000000 --- a/node_modules/lodash/inRange.js +++ /dev/null @@ -1,55 +0,0 @@ -var baseInRange = require('./_baseInRange'), - toFinite = require('./toFinite'), - toNumber = require('./toNumber'); - -/** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ -function inRange(number, start, end) { - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number = toNumber(number); - return baseInRange(number, start, end); -} - -module.exports = inRange; diff --git a/node_modules/lodash/includes.js b/node_modules/lodash/includes.js deleted file mode 100644 index ae0deed..0000000 --- a/node_modules/lodash/includes.js +++ /dev/null @@ -1,53 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'), - isArrayLike = require('./isArrayLike'), - isString = require('./isString'), - toInteger = require('./toInteger'), - values = require('./values'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'a': 1, 'b': 2 }, 1); - * // => true - * - * _.includes('abcd', 'bc'); - * // => true - */ -function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); -} - -module.exports = includes; diff --git a/node_modules/lodash/index.js b/node_modules/lodash/index.js deleted file mode 100644 index 5d063e2..0000000 --- a/node_modules/lodash/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lodash'); \ No newline at end of file diff --git a/node_modules/lodash/indexOf.js b/node_modules/lodash/indexOf.js deleted file mode 100644 index 3c644af..0000000 --- a/node_modules/lodash/indexOf.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ -function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); -} - -module.exports = indexOf; diff --git a/node_modules/lodash/initial.js b/node_modules/lodash/initial.js deleted file mode 100644 index f47fc50..0000000 --- a/node_modules/lodash/initial.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ -function initial(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 0, -1) : []; -} - -module.exports = initial; diff --git a/node_modules/lodash/intersection.js b/node_modules/lodash/intersection.js deleted file mode 100644 index a94c135..0000000 --- a/node_modules/lodash/intersection.js +++ /dev/null @@ -1,30 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - baseRest = require('./_baseRest'), - castArrayLikeObject = require('./_castArrayLikeObject'); - -/** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ -var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; -}); - -module.exports = intersection; diff --git a/node_modules/lodash/intersectionBy.js b/node_modules/lodash/intersectionBy.js deleted file mode 100644 index 31461aa..0000000 --- a/node_modules/lodash/intersectionBy.js +++ /dev/null @@ -1,45 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'), - castArrayLikeObject = require('./_castArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ -var intersectionBy = baseRest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, baseIteratee(iteratee, 2)) - : []; -}); - -module.exports = intersectionBy; diff --git a/node_modules/lodash/intersectionWith.js b/node_modules/lodash/intersectionWith.js deleted file mode 100644 index 63cabfa..0000000 --- a/node_modules/lodash/intersectionWith.js +++ /dev/null @@ -1,41 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - baseRest = require('./_baseRest'), - castArrayLikeObject = require('./_castArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The order and references - * of result values are determined by the first array. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ -var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - comparator = typeof comparator == 'function' ? comparator : undefined; - if (comparator) { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; -}); - -module.exports = intersectionWith; diff --git a/node_modules/lodash/invert.js b/node_modules/lodash/invert.js deleted file mode 100644 index 8c47950..0000000 --- a/node_modules/lodash/invert.js +++ /dev/null @@ -1,42 +0,0 @@ -var constant = require('./constant'), - createInverter = require('./_createInverter'), - identity = require('./identity'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; - -/** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ -var invert = createInverter(function(result, value, key) { - if (value != null && - typeof value.toString != 'function') { - value = nativeObjectToString.call(value); - } - - result[value] = key; -}, constant(identity)); - -module.exports = invert; diff --git a/node_modules/lodash/invertBy.js b/node_modules/lodash/invertBy.js deleted file mode 100644 index 3f4f7e5..0000000 --- a/node_modules/lodash/invertBy.js +++ /dev/null @@ -1,56 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - createInverter = require('./_createInverter'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; - -/** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ -var invertBy = createInverter(function(result, value, key) { - if (value != null && - typeof value.toString != 'function') { - value = nativeObjectToString.call(value); - } - - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } -}, baseIteratee); - -module.exports = invertBy; diff --git a/node_modules/lodash/invoke.js b/node_modules/lodash/invoke.js deleted file mode 100644 index 97d51eb..0000000 --- a/node_modules/lodash/invoke.js +++ /dev/null @@ -1,24 +0,0 @@ -var baseInvoke = require('./_baseInvoke'), - baseRest = require('./_baseRest'); - -/** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ -var invoke = baseRest(baseInvoke); - -module.exports = invoke; diff --git a/node_modules/lodash/invokeMap.js b/node_modules/lodash/invokeMap.js deleted file mode 100644 index 8da5126..0000000 --- a/node_modules/lodash/invokeMap.js +++ /dev/null @@ -1,41 +0,0 @@ -var apply = require('./_apply'), - baseEach = require('./_baseEach'), - baseInvoke = require('./_baseInvoke'), - baseRest = require('./_baseRest'), - isArrayLike = require('./isArrayLike'); - -/** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `path` is a function, it's invoked - * for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ -var invokeMap = baseRest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); - }); - return result; -}); - -module.exports = invokeMap; diff --git a/node_modules/lodash/isArguments.js b/node_modules/lodash/isArguments.js deleted file mode 100644 index 8b9ed66..0000000 --- a/node_modules/lodash/isArguments.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseIsArguments = require('./_baseIsArguments'), - isObjectLike = require('./isObjectLike'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; - -module.exports = isArguments; diff --git a/node_modules/lodash/isArray.js b/node_modules/lodash/isArray.js deleted file mode 100644 index 88ab55f..0000000 --- a/node_modules/lodash/isArray.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -module.exports = isArray; diff --git a/node_modules/lodash/isArrayBuffer.js b/node_modules/lodash/isArrayBuffer.js deleted file mode 100644 index 12904a6..0000000 --- a/node_modules/lodash/isArrayBuffer.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsArrayBuffer = require('./_baseIsArrayBuffer'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer; - -/** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ -var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - -module.exports = isArrayBuffer; diff --git a/node_modules/lodash/isArrayLike.js b/node_modules/lodash/isArrayLike.js deleted file mode 100644 index 0f96680..0000000 --- a/node_modules/lodash/isArrayLike.js +++ /dev/null @@ -1,33 +0,0 @@ -var isFunction = require('./isFunction'), - isLength = require('./isLength'); - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -module.exports = isArrayLike; diff --git a/node_modules/lodash/isArrayLikeObject.js b/node_modules/lodash/isArrayLikeObject.js deleted file mode 100644 index 6c4812a..0000000 --- a/node_modules/lodash/isArrayLikeObject.js +++ /dev/null @@ -1,33 +0,0 @@ -var isArrayLike = require('./isArrayLike'), - isObjectLike = require('./isObjectLike'); - -/** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); -} - -module.exports = isArrayLikeObject; diff --git a/node_modules/lodash/isBoolean.js b/node_modules/lodash/isBoolean.js deleted file mode 100644 index a43ed4b..0000000 --- a/node_modules/lodash/isBoolean.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]'; - -/** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ -function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && baseGetTag(value) == boolTag); -} - -module.exports = isBoolean; diff --git a/node_modules/lodash/isBuffer.js b/node_modules/lodash/isBuffer.js deleted file mode 100644 index c103cc7..0000000 --- a/node_modules/lodash/isBuffer.js +++ /dev/null @@ -1,38 +0,0 @@ -var root = require('./_root'), - stubFalse = require('./stubFalse'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Built-in value references. */ -var Buffer = moduleExports ? root.Buffer : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || stubFalse; - -module.exports = isBuffer; diff --git a/node_modules/lodash/isDate.js b/node_modules/lodash/isDate.js deleted file mode 100644 index 7f0209f..0000000 --- a/node_modules/lodash/isDate.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsDate = require('./_baseIsDate'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsDate = nodeUtil && nodeUtil.isDate; - -/** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ -var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - -module.exports = isDate; diff --git a/node_modules/lodash/isElement.js b/node_modules/lodash/isElement.js deleted file mode 100644 index 76ae29c..0000000 --- a/node_modules/lodash/isElement.js +++ /dev/null @@ -1,25 +0,0 @@ -var isObjectLike = require('./isObjectLike'), - isPlainObject = require('./isPlainObject'); - -/** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ -function isElement(value) { - return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); -} - -module.exports = isElement; diff --git a/node_modules/lodash/isEmpty.js b/node_modules/lodash/isEmpty.js deleted file mode 100644 index 3597294..0000000 --- a/node_modules/lodash/isEmpty.js +++ /dev/null @@ -1,77 +0,0 @@ -var baseKeys = require('./_baseKeys'), - getTag = require('./_getTag'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isArrayLike = require('./isArrayLike'), - isBuffer = require('./isBuffer'), - isPrototype = require('./_isPrototype'), - isTypedArray = require('./isTypedArray'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ -function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; -} - -module.exports = isEmpty; diff --git a/node_modules/lodash/isEqual.js b/node_modules/lodash/isEqual.js deleted file mode 100644 index 5e23e76..0000000 --- a/node_modules/lodash/isEqual.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'); - -/** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are compared by strict equality, i.e. `===`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ -function isEqual(value, other) { - return baseIsEqual(value, other); -} - -module.exports = isEqual; diff --git a/node_modules/lodash/isEqualWith.js b/node_modules/lodash/isEqualWith.js deleted file mode 100644 index 21bdc7f..0000000 --- a/node_modules/lodash/isEqualWith.js +++ /dev/null @@ -1,41 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'); - -/** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ -function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; -} - -module.exports = isEqualWith; diff --git a/node_modules/lodash/isError.js b/node_modules/lodash/isError.js deleted file mode 100644 index b4f41e0..0000000 --- a/node_modules/lodash/isError.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'), - isPlainObject = require('./isPlainObject'); - -/** `Object#toString` result references. */ -var domExcTag = '[object DOMException]', - errorTag = '[object Error]'; - -/** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ -function isError(value) { - if (!isObjectLike(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == errorTag || tag == domExcTag || - (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); -} - -module.exports = isError; diff --git a/node_modules/lodash/isFinite.js b/node_modules/lodash/isFinite.js deleted file mode 100644 index 601842b..0000000 --- a/node_modules/lodash/isFinite.js +++ /dev/null @@ -1,36 +0,0 @@ -var root = require('./_root'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsFinite = root.isFinite; - -/** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ -function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); -} - -module.exports = isFinite; diff --git a/node_modules/lodash/isFunction.js b/node_modules/lodash/isFunction.js deleted file mode 100644 index 907a8cd..0000000 --- a/node_modules/lodash/isFunction.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObject = require('./isObject'); - -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -module.exports = isFunction; diff --git a/node_modules/lodash/isInteger.js b/node_modules/lodash/isInteger.js deleted file mode 100644 index 66aa87d..0000000 --- a/node_modules/lodash/isInteger.js +++ /dev/null @@ -1,33 +0,0 @@ -var toInteger = require('./toInteger'); - -/** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ -function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); -} - -module.exports = isInteger; diff --git a/node_modules/lodash/isLength.js b/node_modules/lodash/isLength.js deleted file mode 100644 index 3a95caa..0000000 --- a/node_modules/lodash/isLength.js +++ /dev/null @@ -1,35 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -module.exports = isLength; diff --git a/node_modules/lodash/isMap.js b/node_modules/lodash/isMap.js deleted file mode 100644 index 44f8517..0000000 --- a/node_modules/lodash/isMap.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsMap = require('./_baseIsMap'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsMap = nodeUtil && nodeUtil.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - -module.exports = isMap; diff --git a/node_modules/lodash/isMatch.js b/node_modules/lodash/isMatch.js deleted file mode 100644 index 9773a18..0000000 --- a/node_modules/lodash/isMatch.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'); - -/** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. - * - * **Note:** This method is equivalent to `_.matches` when `source` is - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.isMatch(object, { 'b': 2 }); - * // => true - * - * _.isMatch(object, { 'b': 1 }); - * // => false - */ -function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); -} - -module.exports = isMatch; diff --git a/node_modules/lodash/isMatchWith.js b/node_modules/lodash/isMatchWith.js deleted file mode 100644 index 187b6a6..0000000 --- a/node_modules/lodash/isMatchWith.js +++ /dev/null @@ -1,41 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'); - -/** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ -function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); -} - -module.exports = isMatchWith; diff --git a/node_modules/lodash/isNaN.js b/node_modules/lodash/isNaN.js deleted file mode 100644 index 7d0d783..0000000 --- a/node_modules/lodash/isNaN.js +++ /dev/null @@ -1,38 +0,0 @@ -var isNumber = require('./isNumber'); - -/** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ -function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; -} - -module.exports = isNaN; diff --git a/node_modules/lodash/isNative.js b/node_modules/lodash/isNative.js deleted file mode 100644 index f0cb8d5..0000000 --- a/node_modules/lodash/isNative.js +++ /dev/null @@ -1,40 +0,0 @@ -var baseIsNative = require('./_baseIsNative'), - isMaskable = require('./_isMaskable'); - -/** Error message constants. */ -var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.'; - -/** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the presence - * of the core-js package because core-js circumvents this kind of detection. - * Despite multiple requests, the core-js maintainer has made it clear: any - * attempt to fix the detection will be obstructed. As a result, we're left - * with little choice but to throw an error. Unfortunately, this also affects - * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on core-js. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ -function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT); - } - return baseIsNative(value); -} - -module.exports = isNative; diff --git a/node_modules/lodash/isNil.js b/node_modules/lodash/isNil.js deleted file mode 100644 index 79f0505..0000000 --- a/node_modules/lodash/isNil.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ -function isNil(value) { - return value == null; -} - -module.exports = isNil; diff --git a/node_modules/lodash/isNull.js b/node_modules/lodash/isNull.js deleted file mode 100644 index c0a374d..0000000 --- a/node_modules/lodash/isNull.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ -function isNull(value) { - return value === null; -} - -module.exports = isNull; diff --git a/node_modules/lodash/isNumber.js b/node_modules/lodash/isNumber.js deleted file mode 100644 index cd34ee4..0000000 --- a/node_modules/lodash/isNumber.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var numberTag = '[object Number]'; - -/** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ -function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag); -} - -module.exports = isNumber; diff --git a/node_modules/lodash/isObject.js b/node_modules/lodash/isObject.js deleted file mode 100644 index 1dc8939..0000000 --- a/node_modules/lodash/isObject.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -module.exports = isObject; diff --git a/node_modules/lodash/isObjectLike.js b/node_modules/lodash/isObjectLike.js deleted file mode 100644 index 301716b..0000000 --- a/node_modules/lodash/isObjectLike.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -module.exports = isObjectLike; diff --git a/node_modules/lodash/isPlainObject.js b/node_modules/lodash/isPlainObject.js deleted file mode 100644 index 2387373..0000000 --- a/node_modules/lodash/isPlainObject.js +++ /dev/null @@ -1,62 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - getPrototype = require('./_getPrototype'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to infer the `Object` constructor. */ -var objectCtorString = funcToString.call(Object); - -/** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ -function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return typeof Ctor == 'function' && Ctor instanceof Ctor && - funcToString.call(Ctor) == objectCtorString; -} - -module.exports = isPlainObject; diff --git a/node_modules/lodash/isRegExp.js b/node_modules/lodash/isRegExp.js deleted file mode 100644 index 76c9b6e..0000000 --- a/node_modules/lodash/isRegExp.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsRegExp = require('./_baseIsRegExp'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - -/** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ -var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - -module.exports = isRegExp; diff --git a/node_modules/lodash/isSafeInteger.js b/node_modules/lodash/isSafeInteger.js deleted file mode 100644 index 2a48526..0000000 --- a/node_modules/lodash/isSafeInteger.js +++ /dev/null @@ -1,37 +0,0 @@ -var isInteger = require('./isInteger'); - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ -function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; -} - -module.exports = isSafeInteger; diff --git a/node_modules/lodash/isSet.js b/node_modules/lodash/isSet.js deleted file mode 100644 index ab88bdf..0000000 --- a/node_modules/lodash/isSet.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsSet = require('./_baseIsSet'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsSet = nodeUtil && nodeUtil.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - -module.exports = isSet; diff --git a/node_modules/lodash/isString.js b/node_modules/lodash/isString.js deleted file mode 100644 index 627eb9c..0000000 --- a/node_modules/lodash/isString.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isArray = require('./isArray'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); -} - -module.exports = isString; diff --git a/node_modules/lodash/isSymbol.js b/node_modules/lodash/isSymbol.js deleted file mode 100644 index dfb60b9..0000000 --- a/node_modules/lodash/isSymbol.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); -} - -module.exports = isSymbol; diff --git a/node_modules/lodash/isTypedArray.js b/node_modules/lodash/isTypedArray.js deleted file mode 100644 index da3f8dd..0000000 --- a/node_modules/lodash/isTypedArray.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsTypedArray = require('./_baseIsTypedArray'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -module.exports = isTypedArray; diff --git a/node_modules/lodash/isUndefined.js b/node_modules/lodash/isUndefined.js deleted file mode 100644 index 377d121..0000000 --- a/node_modules/lodash/isUndefined.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -module.exports = isUndefined; diff --git a/node_modules/lodash/isWeakMap.js b/node_modules/lodash/isWeakMap.js deleted file mode 100644 index 8d36f66..0000000 --- a/node_modules/lodash/isWeakMap.js +++ /dev/null @@ -1,28 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var weakMapTag = '[object WeakMap]'; - -/** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ -function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; -} - -module.exports = isWeakMap; diff --git a/node_modules/lodash/isWeakSet.js b/node_modules/lodash/isWeakSet.js deleted file mode 100644 index e628b26..0000000 --- a/node_modules/lodash/isWeakSet.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var weakSetTag = '[object WeakSet]'; - -/** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ -function isWeakSet(value) { - return isObjectLike(value) && baseGetTag(value) == weakSetTag; -} - -module.exports = isWeakSet; diff --git a/node_modules/lodash/iteratee.js b/node_modules/lodash/iteratee.js deleted file mode 100644 index 61b73a8..0000000 --- a/node_modules/lodash/iteratee.js +++ /dev/null @@ -1,53 +0,0 @@ -var baseClone = require('./_baseClone'), - baseIteratee = require('./_baseIteratee'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1; - -/** - * Creates a function that invokes `func` with the arguments of the created - * function. If `func` is a property name, the created function returns the - * property value for a given element. If `func` is an array or object, the - * created function returns `true` for elements that contain the equivalent - * source properties, otherwise it returns `false`. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Util - * @param {*} [func=_.identity] The value to convert to a callback. - * @returns {Function} Returns the callback. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); - * // => [{ 'user': 'barney', 'age': 36, 'active': true }] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, _.iteratee(['user', 'fred'])); - * // => [{ 'user': 'fred', 'age': 40 }] - * - * // The `_.property` iteratee shorthand. - * _.map(users, _.iteratee('user')); - * // => ['barney', 'fred'] - * - * // Create custom iteratee shorthands. - * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { - * return !_.isRegExp(func) ? iteratee(func) : function(string) { - * return func.test(string); - * }; - * }); - * - * _.filter(['abc', 'def'], /ef/); - * // => ['def'] - */ -function iteratee(func) { - return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); -} - -module.exports = iteratee; diff --git a/node_modules/lodash/join.js b/node_modules/lodash/join.js deleted file mode 100644 index 45de079..0000000 --- a/node_modules/lodash/join.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeJoin = arrayProto.join; - -/** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ -function join(array, separator) { - return array == null ? '' : nativeJoin.call(array, separator); -} - -module.exports = join; diff --git a/node_modules/lodash/kebabCase.js b/node_modules/lodash/kebabCase.js deleted file mode 100644 index 8a52be6..0000000 --- a/node_modules/lodash/kebabCase.js +++ /dev/null @@ -1,28 +0,0 @@ -var createCompounder = require('./_createCompounder'); - -/** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ -var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); -}); - -module.exports = kebabCase; diff --git a/node_modules/lodash/keyBy.js b/node_modules/lodash/keyBy.js deleted file mode 100644 index acc007a..0000000 --- a/node_modules/lodash/keyBy.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - createAggregator = require('./_createAggregator'); - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ -var keyBy = createAggregator(function(result, value, key) { - baseAssignValue(result, key, value); -}); - -module.exports = keyBy; diff --git a/node_modules/lodash/keys.js b/node_modules/lodash/keys.js deleted file mode 100644 index d143c71..0000000 --- a/node_modules/lodash/keys.js +++ /dev/null @@ -1,37 +0,0 @@ -var arrayLikeKeys = require('./_arrayLikeKeys'), - baseKeys = require('./_baseKeys'), - isArrayLike = require('./isArrayLike'); - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -module.exports = keys; diff --git a/node_modules/lodash/keysIn.js b/node_modules/lodash/keysIn.js deleted file mode 100644 index a62308f..0000000 --- a/node_modules/lodash/keysIn.js +++ /dev/null @@ -1,32 +0,0 @@ -var arrayLikeKeys = require('./_arrayLikeKeys'), - baseKeysIn = require('./_baseKeysIn'), - isArrayLike = require('./isArrayLike'); - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); -} - -module.exports = keysIn; diff --git a/node_modules/lodash/lang.js b/node_modules/lodash/lang.js deleted file mode 100644 index a396216..0000000 --- a/node_modules/lodash/lang.js +++ /dev/null @@ -1,58 +0,0 @@ -module.exports = { - 'castArray': require('./castArray'), - 'clone': require('./clone'), - 'cloneDeep': require('./cloneDeep'), - 'cloneDeepWith': require('./cloneDeepWith'), - 'cloneWith': require('./cloneWith'), - 'conformsTo': require('./conformsTo'), - 'eq': require('./eq'), - 'gt': require('./gt'), - 'gte': require('./gte'), - 'isArguments': require('./isArguments'), - 'isArray': require('./isArray'), - 'isArrayBuffer': require('./isArrayBuffer'), - 'isArrayLike': require('./isArrayLike'), - 'isArrayLikeObject': require('./isArrayLikeObject'), - 'isBoolean': require('./isBoolean'), - 'isBuffer': require('./isBuffer'), - 'isDate': require('./isDate'), - 'isElement': require('./isElement'), - 'isEmpty': require('./isEmpty'), - 'isEqual': require('./isEqual'), - 'isEqualWith': require('./isEqualWith'), - 'isError': require('./isError'), - 'isFinite': require('./isFinite'), - 'isFunction': require('./isFunction'), - 'isInteger': require('./isInteger'), - 'isLength': require('./isLength'), - 'isMap': require('./isMap'), - 'isMatch': require('./isMatch'), - 'isMatchWith': require('./isMatchWith'), - 'isNaN': require('./isNaN'), - 'isNative': require('./isNative'), - 'isNil': require('./isNil'), - 'isNull': require('./isNull'), - 'isNumber': require('./isNumber'), - 'isObject': require('./isObject'), - 'isObjectLike': require('./isObjectLike'), - 'isPlainObject': require('./isPlainObject'), - 'isRegExp': require('./isRegExp'), - 'isSafeInteger': require('./isSafeInteger'), - 'isSet': require('./isSet'), - 'isString': require('./isString'), - 'isSymbol': require('./isSymbol'), - 'isTypedArray': require('./isTypedArray'), - 'isUndefined': require('./isUndefined'), - 'isWeakMap': require('./isWeakMap'), - 'isWeakSet': require('./isWeakSet'), - 'lt': require('./lt'), - 'lte': require('./lte'), - 'toArray': require('./toArray'), - 'toFinite': require('./toFinite'), - 'toInteger': require('./toInteger'), - 'toLength': require('./toLength'), - 'toNumber': require('./toNumber'), - 'toPlainObject': require('./toPlainObject'), - 'toSafeInteger': require('./toSafeInteger'), - 'toString': require('./toString') -}; diff --git a/node_modules/lodash/last.js b/node_modules/lodash/last.js deleted file mode 100644 index cad1eaf..0000000 --- a/node_modules/lodash/last.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; -} - -module.exports = last; diff --git a/node_modules/lodash/lastIndexOf.js b/node_modules/lodash/lastIndexOf.js deleted file mode 100644 index dabfb61..0000000 --- a/node_modules/lodash/lastIndexOf.js +++ /dev/null @@ -1,46 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIsNaN = require('./_baseIsNaN'), - strictLastIndexOf = require('./_strictLastIndexOf'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ -function lastIndexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return value === value - ? strictLastIndexOf(array, value, index) - : baseFindIndex(array, baseIsNaN, index, true); -} - -module.exports = lastIndexOf; diff --git a/node_modules/lodash/lodash.js b/node_modules/lodash/lodash.js deleted file mode 100644 index ba61bcb..0000000 --- a/node_modules/lodash/lodash.js +++ /dev/null @@ -1,17248 +0,0 @@ -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.17.23'; - - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; - - /** Error message constants. */ - var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', - FUNC_ERROR_TEXT = 'Expected a function', - INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; - - /** Used as the maximum memoize cache size. */ - var MAX_MEMOIZE_SIZE = 500; - - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; - - /** Used to compose bitmasks for cloning. */ - var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - - /** Used to compose bitmasks for value comparisons. */ - var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - - /** Used to compose bitmasks for function metadata. */ - var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256, - WRAP_FLIP_FLAG = 512; - - /** Used as default options for `_.truncate`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 800, - HOT_SPAN = 16; - - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e+308, - NAN = 0 / 0; - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - - /** Used to associate wrap methods with their bit flags. */ - var wrapFlags = [ - ['ary', WRAP_ARY_FLAG], - ['bind', WRAP_BIND_FLAG], - ['bindKey', WRAP_BIND_KEY_FLAG], - ['curry', WRAP_CURRY_FLAG], - ['curryRight', WRAP_CURRY_RIGHT_FLAG], - ['flip', WRAP_FLIP_FLAG], - ['partial', WRAP_PARTIAL_FLAG], - ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], - ['rearg', WRAP_REARG_FLAG] - ]; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - asyncTag = '[object AsyncFunction]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - domExcTag = '[object DOMException]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - nullTag = '[object Null]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - undefinedTag = '[object Undefined]', - weakMapTag = '[object WeakMap]', - weakSetTag = '[object WeakSet]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, - reUnescapedHtml = /[&<>"']/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - - /** Used to match leading whitespace. */ - var reTrimStart = /^\s+/; - - /** Used to match a single whitespace character. */ - var reWhitespace = /\s/; - - /** Used to match wrap detail comments. */ - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, - reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; - - /** Used to match words composed of alphanumeric characters. */ - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - - /** - * Used to validate the `validate` option in `_.template` variable. - * - * Forbids characters which could potentially change the meaning of the function argument definition: - * - "()," (modification of function parameters) - * - "=" (default value) - * - "[]{}" (destructuring of function parameters) - * - "/" (beginning of a comment) - * - whitespace - */ - var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; - - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; - - /** - * Used to match - * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** Used to match Latin Unicode letters (excluding mathematical operators). */ - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - - /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; - - /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - - /** Used to compose unicode capture groups. */ - var rsApos = "['\u2019]", - rsAstral = '[' + rsAstralRange + ']', - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', - rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', - rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** Used to match apostrophes. */ - var reApos = RegExp(rsApos, 'g'); - - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ - var reComboMark = RegExp(rsCombo, 'g'); - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** Used to match complex or compound words. */ - var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', - rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, - rsUpper + '+' + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji - ].join('|'), 'g'); - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - - /** Used to detect strings that need a more robust regexp to match words. */ - var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', - 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', - 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', - 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', - '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' - ]; - - /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = - typedArrayTags[errorTag] = typedArrayTags[funcTag] = - typedArrayTags[mapTag] = typedArrayTags[numberTag] = - typedArrayTags[objectTag] = typedArrayTags[regexpTag] = - typedArrayTags[setTag] = typedArrayTags[stringTag] = - typedArrayTags[weakMapTag] = false; - - /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = - cloneableTags[boolTag] = cloneableTags[dateTag] = - cloneableTags[float32Tag] = cloneableTags[float64Tag] = - cloneableTags[int8Tag] = cloneableTags[int16Tag] = - cloneableTags[int32Tag] = cloneableTags[mapTag] = - cloneableTags[numberTag] = cloneableTags[objectTag] = - cloneableTags[regexpTag] = cloneableTags[setTag] = - cloneableTags[stringTag] = cloneableTags[symbolTag] = - cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[weakMapTag] = false; - - /** Used to map Latin Unicode letters to basic Latin letters. */ - var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' - }; - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" - }; - - /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; - - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; - - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} - }()); - - /* Node.js helper references. */ - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, - nodeIsDate = nodeUtil && nodeUtil.isDate, - nodeIsMap = nodeUtil && nodeUtil.isMap, - nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, - nodeIsSet = nodeUtil && nodeUtil.isSet, - nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - - /*--------------------------------------------------------------------------*/ - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - /** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } - - /** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEachRight(array, iteratee) { - var length = array == null ? 0 : array.length; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } - - /** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && baseIndexOf(array, value, 0) > -1; - } - - /** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } - - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - - /** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array == null ? 0 : array.length; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } - - /** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - - /** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - var asciiSize = baseProperty('length'); - - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } - - /** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function asciiWords(string) { - return string.match(reAsciiWord) || []; - } - - /** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); - } - - /** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ - function baseIsNaN(value) { - return value !== value; - } - - /** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ - function baseMean(array, iteratee) { - var length = array == null ? 0 : array.length; - return length ? (baseSum(array, iteratee) / length) : NAN; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } - - /** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - /** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } - - /** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ - function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; - } - - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - - /** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function cacheHas(cache, key) { - return cache.has(key); - } - - /** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ - function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; - } - - /** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ - var deburrLetter = basePropertyOf(deburredLetters); - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); - - /** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; - } - - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } - - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } - - /** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ - function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); - } - - /** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ - function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } - - /** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ - function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; - } - - /** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ - function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } - - /** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ - function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; - } - - /** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * A specialized version of `_.lastIndexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; - } - } - return index; - } - - /** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ - function stringSize(string) { - return hasUnicode(string) - ? unicodeSize(string) - : asciiSize(string); - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ - function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; - } - - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - - /** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; - } - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - - /** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function unicodeWords(string) { - return string.match(reUnicodeWord) || []; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new pristine `lodash` function using the `context` object. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Util - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `lodash` function. - * @example - * - * _.mixin({ 'foo': _.constant('foo') }); - * - * var lodash = _.runInContext(); - * lodash.mixin({ 'bar': lodash.constant('bar') }); - * - * _.isFunction(_.foo); - * // => true - * _.isFunction(_.bar); - * // => false - * - * lodash.isFunction(lodash.foo); - * // => false - * lodash.isFunction(lodash.bar); - * // => true - * - * // Create a suped-up `defer` in Node.js. - * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; - */ - var runInContext = (function runInContext(context) { - context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); - - /** Built-in constructor references. */ - var Array = context.Array, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; - - /** Used to detect overreaching core-js shims. */ - var coreJsData = context['__core-js_shared__']; - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto.toString; - - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** Built-in value references. */ - var Buffer = moduleExports ? context.Buffer : undefined, - Symbol = context.Symbol, - Uint8Array = context.Uint8Array, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, - getPrototype = overArg(Object.getPrototypeOf, Object), - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice, - spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, - symIterator = Symbol ? Symbol.iterator : undefined, - symToStringTag = Symbol ? Symbol.toStringTag : undefined; - - var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - }()); - - /** Mocked built-ins. */ - var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, - ctxNow = Date && Date.now !== root.Date.now && Date.now, - ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeGetSymbols = Object.getOwnPropertySymbols, - nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, - nativeIsFinite = context.isFinite, - nativeJoin = arrayProto.join, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max, - nativeMin = Math.min, - nativeNow = Date.now, - nativeParseInt = context.parseInt, - nativeRandom = Math.random, - nativeReverse = arrayProto.reverse; - - /* Built-in method references that are verified to be native. */ - var DataView = getNative(context, 'DataView'), - Map = getNative(context, 'Map'), - Promise = getNative(context, 'Promise'), - Set = getNative(context, 'Set'), - WeakMap = getNative(context, 'WeakMap'), - nativeCreate = getNative(Object, 'create'); - - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; - - /** Used to lookup unminified function names. */ - var realNames = {}; - - /** Used to detect maps, sets, and weakmaps. */ - var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array and iteratees accept only - * one argument. The heuristic for whether a section qualifies for shortcut - * fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; - }()); - - /** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ - function baseLodash() { - // No operation performed. - } - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; - } - - /** - * By default, the template delimiters used by lodash are like those in - * embedded Ruby (ERB) as well as ES2015 template strings. Change the - * following template settings to use alternative delimiters. - * - * @static - * @memberOf _ - * @type {Object} - */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'escape': reEscape, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'evaluate': reEvaluate, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type {string} - */ - 'variable': '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type {Object} - */ - 'imports': { - - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type {Function} - */ - '_': lodash - } - }; - - // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } - - /** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; - } - - /** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } - - /** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || (!isRight && arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } - - // Ensure `LazyWrapper` is an instance of `baseLodash`. - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; - } - - /** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; - } - - /** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); - } - - /** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; - } - - // Add methods to `Hash`. - Hash.prototype.clear = hashClear; - Hash.prototype['delete'] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } - - /** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; - } - - /** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; - } - - /** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - - /** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ - function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } - - // Add methods to `ListCache`. - ListCache.prototype.clear = listCacheClear; - ListCache.prototype['delete'] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ - function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; - } - - /** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - - /** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - - /** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ - function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; - } - - // Add methods to `MapCache`. - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype['delete'] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } - } - - /** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } - - /** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ - function setCacheHas(value) { - return this.__data__.has(value); - } - - // Add methods to `SetCache`. - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; - } - - /** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ - function stackClear() { - this.__data__ = new ListCache; - this.size = 0; - } - - /** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; - } - - /** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function stackGet(key) { - return this.__data__.get(key); - } - - /** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function stackHas(key) { - return this.__data__.has(key); - } - - /** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } - - // Add methods to `Stack`. - Stack.prototype.clear = stackClear; - Stack.prototype['delete'] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; - } - - /** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ - function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; - } - - /** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); - } - - /** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - - /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } - - /** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - - /** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } - } - - /** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths to pick. - * @returns {Array} Returns the picked elements. - */ - function baseAt(object, paths) { - var index = -1, - length = paths.length, - result = Array(length), - skip = object == null; - - while (++index < length) { - result[index] = skip ? undefined : get(object, paths[index]); - } - return result; - } - - /** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; - } - - /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat - ? copySymbolsIn(value, baseAssignIn(result, value)) - : copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? getAllKeysIn : getAllKeys) - : (isFlat ? keysIn : keys); - - var props = isArr ? undefined : keysFunc(value); - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; - } - - /** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ - function baseConforms(source) { - var props = keys(source); - return function(object) { - return baseConformsTo(object, source, props); - }; - } - - /** - * The base implementation of `_.conformsTo` which accepts `props` to check. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - */ - function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length], - predicate = source[key], - value = object[key]; - - if ((value === undefined && !(key in object)) || !predicate(value)) { - return false; - } - } - return true; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee == null ? value : iteratee(value); - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEachRight = createBaseEach(baseForOwnRight, true); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ - function baseFill(array, value, start, end) { - var length = array.length; - - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseForRight = createBaseFor(true); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path) { - path = castPath(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; - } - - /** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); - } - - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); - } - - /** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHasIn(object, key) { - return object != null && key in Object(object); - } - - /** - * The base implementation of `_.inRange` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ - function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); - } - - /** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; - } - - /** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ - function baseInvoke(object, path, args) { - path = castPath(path, object); - object = parent(object, path); - var func = object == null ? object : object[toKey(last(path))]; - return func == null ? undefined : apply(func, object, args); - } - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; - } - - /** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - */ - function baseIsArrayBuffer(value) { - return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; - } - - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = objIsArr ? arrayTag : getTag(object), - othTag = othIsArr ? arrayTag : getTag(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); - } - - /** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ - function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } - - /** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; - } - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - - /** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ - function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } - - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); - } - - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } - - /** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; - } - - /** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - stack || (stack = new Stack); - if (isObject(srcValue)) { - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); - } - - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = safeGet(object, key), - srcValue = safeGet(source, key), - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || isFunction(objValue)) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); - } - - /** - * The base implementation of `_.nth` which doesn't coerce arguments. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ - function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; - } - - /** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ - function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = arrayMap(iteratees, function(iteratee) { - if (isArray(iteratee)) { - return function(value) { - return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); - }; - } - return iteratee; - }); - } else { - iteratees = [identity]; - } - - var index = -1; - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, paths) { - return basePickBy(object, paths, function(value, path) { - return hasIn(object, path); - }); - } - - /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ - function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = baseGet(object, path); - - if (predicate(value, path)) { - baseSet(result, castPath(path, object), value); - } - } - return result; - } - - /** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } - - /** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ - function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; - } - - /** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } else { - baseUnset(array, index); - } - } - } - return array; - } - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - /** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ - function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - - return result; - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ - function baseSample(collection) { - return arraySample(values(collection)); - } - - /** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); - } - - /** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; - } - - /** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; - - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); - }; - - /** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function baseShuffle(collection) { - return shuffleSelf(values(collection)); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array == null ? low : array.length; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); - } - - /** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndexBy(array, value, iteratee, retHighest) { - var low = 0, - high = array == null ? 0 : array.length; - if (high === 0) { - return 0; - } - - value = iteratee(value); - var valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - - /** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; - } - - /** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ - function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; - } - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The property path to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ - function baseUnset(object, path) { - path = castPath(path, object); - - // Prevent prototype pollution, see: https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg - var index = -1, - length = path.length; - - if (!length) { - return true; - } - - var isRootPrimitive = object == null || (typeof object !== 'object' && typeof object !== 'function'); - - while (++index < length) { - var key = path[index]; - - // skip non-string keys (e.g., Symbols, numbers) - if (typeof key !== 'string') { - continue; - } - - // Always block "__proto__" anywhere in the path if it's not expected - if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) { - return false; - } - - // Block "constructor.prototype" chains - if (key === 'constructor' && - (index + 1) < length && - typeof path[index + 1] === 'string' && - path[index + 1] === 'prototype') { - - // Allow ONLY when the path starts at a primitive root, e.g., _.unset(0, 'constructor.prototype.a') - if (isRootPrimitive && index === 0) { - continue; - } - - return false; - } - } - - var obj = parent(object, path); - return obj == null || delete obj[toKey(last(path))]; - } - - /** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); - } - - /** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length) && - predicate(array[index], index, array)) {} - - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ - function baseXor(arrays, iteratee, comparator) { - var length = arrays.length; - if (length < 2) { - return length ? baseUniq(arrays[0]) : []; - } - var index = -1, - result = Array(length); - - while (++index < length) { - var array = arrays[index], - othIndex = -1; - - while (++othIndex < length) { - if (othIndex != index) { - result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); - } - } - } - return baseUniq(baseFlatten(result, 1), iteratee, comparator); - } - - /** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; - } - - /** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - - /** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ - function castFunction(value) { - return typeof value == 'function' ? value : identity; - } - - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ - function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); - } - - /** - * A `baseRest` alias which can be replaced with `identity` by module - * replacement plugins. - * - * @private - * @type {Function} - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - var castRest = baseRest; - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } - - /** - * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). - * - * @private - * @param {number|Object} id The timer id or timeout object of the timer to clear. - */ - var clearTimeout = ctxClearTimeout || function(id) { - return root.clearTimeout(id); - }; - - /** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; - } - - /** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } - - /** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - - /** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; - } - - /** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; - } - - /** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; - } - - /** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } - - /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } - - /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - - /** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); - } - - /** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, getIteratee(iteratee, 2), accumulator); - }; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; - } - - /** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = getIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; - } - - /** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ - function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && - data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && isArray(value)) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); - } - - /** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & WRAP_ARY_FLAG, - isBind = bitmask & WRAP_BIND_FLAG, - isBindKey = bitmask & WRAP_BIND_KEY_FLAG, - isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), - isFlip = bitmask & WRAP_FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - - /** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ - function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } - - /** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @param {number} [defaultValue] The value used for `undefined` arguments. - * @returns {Function} Returns the new mathematical operation function. - */ - function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return defaultValue; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; - } - - /** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ - function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); - } - - /** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ - function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); - - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return hasUnicode(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ - function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; - } - - /** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); - - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); - } - - /** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); - if (precision && nativeIsFinite(number)) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; - } - - /** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ - var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); - }; - - /** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ - function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; - } - - /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] === undefined - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); - } - - /** - * Used by `_.defaults` to customize its `_.assignIn` use to assign properties - * of source objects to the destination object for all destination properties - * that resolve to `undefined`. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function customDefaultsAssignIn(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } - - /** - * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source - * objects into destination objects that are passed thru. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ - function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); - stack['delete'](srcValue); - } - return objValue; - } - - /** - * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain - * objects. - * - * @private - * @param {*} value The value to inspect. - * @param {string} key The key of the property to inspect. - * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. - */ - function customOmitClone(value) { - return isPlainObject(value) ? undefined : value; - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = getAllKeys(object), - objLength = objProps.length, - othProps = getAllKeys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } - - /** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); - } - - /** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } - - /** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - - /** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ - function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } - - /** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ - function getHolder(func) { - var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; - return object.placeholder; - } - - /** - * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, - * this function returns the custom method, otherwise it returns `baseIteratee`. - * If arguments are provided, the chosen function is invoked with them and - * its result is returned. - * - * @private - * @param {*} [value] The value to convert to an iteratee. - * @param {number} [arity] The arity of the created iteratee. - * @returns {Function} Returns the chosen function or its result. - */ - function getIteratee() { - var result = lodash.iteratee || iteratee; - result = result === iteratee ? baseIteratee : result; - return arguments.length ? result(arguments[0], arguments[1]) : result; - } - - /** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ - function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; - } - - /** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ - function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } - - /** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ - function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; - - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; - } - - /** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbols = !nativeGetSymbols ? stubArray : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return arrayFilter(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); - }; - - /** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; - - /** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - var getTag = baseGetTag; - - // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. - if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; - } - - /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; - } - - /** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ - function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; - } - - /** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ - function hasPath(object, path, hasFunc) { - path = castPath(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); - } - - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; - } - - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return cloneSymbol(object); - } - } - - /** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ - function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; - details = details.join(length > 2 ? ', ' : ' '); - return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); - } - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } - - /** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ - function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); - } - - /** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ - function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); - } - - /** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ - function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } - - /** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ - var isMaskable = coreJsData ? isFunction : stubFalse; - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; - } - - /** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } - - /** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; - } - - /** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ - function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; - } - - /** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); - - var isCombo = - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & WRAP_BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & WRAP_ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value); - } - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } - - /** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ - function parent(object, path) { - return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); - } - - /** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; - } - - /** - * Gets the value at `key`, unless `key` is "__proto__" or "constructor". - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function safeGet(object, key) { - if (key === 'constructor' && typeof object[key] === 'function') { - return; - } - - if (key == '__proto__') { - return; - } - - return object[key]; - } - - /** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var setData = shortOut(baseSetData); - - /** - * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @returns {number|Object} Returns the timer id or timeout object. - */ - var setTimeout = ctxSetTimeout || function(func, wait) { - return root.setTimeout(func, wait); - }; - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString); - - /** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ - function setWrapToString(wrapper, reference, bitmask) { - var source = (reference + ''); - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); - } - - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; - } - - /** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ - function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; - } - - /** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ - var stringToPath = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - }); - - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } - - /** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = '_.' + pair[0]; - if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); - } - - /** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ - function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array == null ? 0 : array.length; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; - } - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - - /** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ - var difference = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `iteratee` which - * is invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * **Note:** Unlike `_.pullAllBy`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var differenceBy = baseRest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. The order and - * references of result values are determined by the first array. The comparator - * is invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.pullAllWith`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ - var differenceWith = baseRest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) - : []; - }); - - /** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function drop(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function dropRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true, true) - : []; - } - - /** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true) - : []; - } - - /** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ - function fill(array, value, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, getIteratee(predicate, 3), index); - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ - function findLastIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, getIteratee(predicate, 3), index, true); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ - function flattenDepth(array, depth) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } - - /** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['a', 1], ['b', 2]]); - * // => { 'a': 1, 'b': 2 } - */ - function fromPairs(pairs) { - var index = -1, - length = pairs == null ? 0 : pairs.length, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); - } - - /** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ - function initial(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 0, -1) : []; - } - - /** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ - var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ - var intersectionBy = baseRest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, getIteratee(iteratee, 2)) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The order and references - * of result values are determined by the first array. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ - var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - comparator = typeof comparator == 'function' ? comparator : undefined; - if (comparator) { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; - }); - - /** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ - function join(array, separator) { - return array == null ? '' : nativeJoin.call(array, separator); - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; - } - - /** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return value === value - ? strictLastIndexOf(array, value, index) - : baseFindIndex(array, baseIsNaN, index, true); - } - - /** - * Gets the element at index `n` of `array`. If `n` is negative, the nth - * element from the end is returned. - * - * @static - * @memberOf _ - * @since 4.11.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=0] The index of the element to return. - * @returns {*} Returns the nth element of `array`. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * - * _.nth(array, 1); - * // => 'b' - * - * _.nth(array, -2); - * // => 'c'; - */ - function nth(array, n) { - return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; - } - - /** - * Removes all given values from `array` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` - * to remove elements from an array by predicate. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...*} [values] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pull(array, 'a', 'c'); - * console.log(array); - * // => ['b', 'b'] - */ - var pull = baseRest(pullAll); - - /** - * This method is like `_.pull` except that it accepts an array of values to remove. - * - * **Note:** Unlike `_.difference`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pullAll(array, ['a', 'c']); - * console.log(array); - * // => ['b', 'b'] - */ - function pullAll(array, values) { - return (array && array.length && values && values.length) - ? basePullAll(array, values) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `iteratee` which is - * invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The iteratee is invoked with one argument: (value). - * - * **Note:** Unlike `_.differenceBy`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; - * - * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); - * console.log(array); - * // => [{ 'x': 2 }] - */ - function pullAllBy(array, values, iteratee) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, getIteratee(iteratee, 2)) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `comparator` which - * is invoked to compare elements of `array` to `values`. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.differenceWith`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; - * - * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); - * console.log(array); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] - */ - function pullAllWith(array, values, comparator) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, undefined, comparator) - : array; - } - - /** - * Removes elements from `array` corresponding to `indexes` and returns an - * array of removed elements. - * - * **Note:** Unlike `_.at`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...(number|number[])} [indexes] The indexes of elements to remove. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * var pulled = _.pullAt(array, [1, 3]); - * - * console.log(array); - * // => ['a', 'c'] - * - * console.log(pulled); - * // => ['b', 'd'] - */ - var pullAt = flatRest(function(array, indexes) { - var length = array == null ? 0 : array.length, - result = baseAt(array, indexes); - - basePullAt(array, arrayMap(indexes, function(index) { - return isIndex(index, length) ? +index : index; - }).sort(compareAscending)); - - return result; - }); - - /** - * Removes all elements from `array` that `predicate` returns truthy for - * and returns an array of the removed elements. The predicate is invoked - * with three arguments: (value, index, array). - * - * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` - * to pull elements from an array by value. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4]; - * var evens = _.remove(array, function(n) { - * return n % 2 == 0; - * }); - * - * console.log(array); - * // => [1, 3] - * - * console.log(evens); - * // => [2, 4] - */ - function remove(array, predicate) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, - indexes = [], - length = array.length; - - predicate = getIteratee(predicate, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } - - /** - * Reverses `array` so that the first element becomes the last, the second - * element becomes the second to last, and so on. - * - * **Note:** This method mutates `array` and is based on - * [`Array#reverse`](https://mdn.io/Array/reverse). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.reverse(array); - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function reverse(array) { - return array == null ? array : nativeReverse.call(array); - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - else { - start = start == null ? 0 : toInteger(start); - end = end === undefined ? length : toInteger(end); - } - return baseSlice(array, start, end); - } - - /** - * Uses a binary search to determine the lowest index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([30, 50], 40); - * // => 1 - */ - function sortedIndex(array, value) { - return baseSortedIndex(array, value); - } - - /** - * This method is like `_.sortedIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); - * // => 0 - */ - function sortedIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); - } - - /** - * This method is like `_.indexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedIndexOf([4, 5, 5, 5, 6], 5); - * // => 1 - */ - function sortedIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value); - if (index < length && eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.sortedIndex` except that it returns the highest - * index at which `value` should be inserted into `array` in order to - * maintain its sort order. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedLastIndex([4, 5, 5, 5, 6], 5); - * // => 4 - */ - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true); - } - - /** - * This method is like `_.sortedLastIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 1 - * - * // The `_.property` iteratee shorthand. - * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); - * // => 1 - */ - function sortedLastIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); - } - - /** - * This method is like `_.lastIndexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); - * // => 3 - */ - function sortedLastIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value, true) - 1; - if (eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.uniq` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniq([1, 1, 2]); - * // => [1, 2] - */ - function sortedUniq(array) { - return (array && array.length) - ? baseSortedUniq(array) - : []; - } - - /** - * This method is like `_.uniqBy` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); - * // => [1.1, 2.3] - */ - function sortedUniqBy(array, iteratee) { - return (array && array.length) - ? baseSortedUniq(array, getIteratee(iteratee, 2)) - : []; - } - - /** - * Gets all but the first element of `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.tail([1, 2, 3]); - * // => [2, 3] - */ - function tail(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 1, length) : []; - } - - /** - * Creates a slice of `array` with `n` elements taken from the beginning. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.take([1, 2, 3]); - * // => [1] - * - * _.take([1, 2, 3], 2); - * // => [1, 2] - * - * _.take([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.take([1, 2, 3], 0); - * // => [] - */ - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` with `n` elements taken from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRight([1, 2, 3]); - * // => [3] - * - * _.takeRight([1, 2, 3], 2); - * // => [2, 3] - * - * _.takeRight([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.takeRight([1, 2, 3], 0); - * // => [] - */ - function takeRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with elements taken from the end. Elements are - * taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.takeRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeRightWhile(users, ['active', false]); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.takeRightWhile(users, 'active'); - * // => [] - */ - function takeRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), false, true) - : []; - } - - /** - * Creates a slice of `array` with elements taken from the beginning. Elements - * are taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.takeWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matches` iteratee shorthand. - * _.takeWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeWhile(users, ['active', false]); - * // => objects for ['barney', 'fred'] - * - * // The `_.property` iteratee shorthand. - * _.takeWhile(users, 'active'); - * // => [] - */ - function takeWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3)) - : []; - } - - /** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ - var union = baseRest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); - - /** - * This method is like `_.union` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which uniqueness is computed. Result values are chosen from the first - * array in which the value occurs. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.unionBy([2.1], [1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - var unionBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); - }); - - /** - * This method is like `_.union` except that it accepts `comparator` which - * is invoked to compare elements of `arrays`. Result values are chosen from - * the first array in which the value occurs. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.unionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var unionWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == 'function' ? comparator : undefined; - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); - }); - - /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each element - * is kept. The order of result values is determined by the order they occur - * in the array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - */ - function uniq(array) { - return (array && array.length) ? baseUniq(array) : []; - } - - /** - * This method is like `_.uniq` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * uniqueness is computed. The order of result values is determined by the - * order they occur in the array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniqBy([2.1, 1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniqBy(array, iteratee) { - return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; - } - - /** - * This method is like `_.uniq` except that it accepts `comparator` which - * is invoked to compare elements of `array`. The order of result values is - * determined by the order they occur in the array.The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.uniqWith(objects, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] - */ - function uniqWith(array, comparator) { - comparator = typeof comparator == 'function' ? comparator : undefined; - return (array && array.length) ? baseUniq(array, undefined, comparator) : []; - } - - /** - * This method is like `_.zip` except that it accepts an array of grouped - * elements and creates an array regrouping the elements to their pre-zip - * configuration. - * - * @static - * @memberOf _ - * @since 1.2.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - * - * _.unzip(zipped); - * // => [['a', 'b'], [1, 2], [true, false]] - */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - return baseTimes(length, function(index) { - return arrayMap(array, baseProperty(index)); - }); - } - - /** - * This method is like `_.unzip` except that it accepts `iteratee` to specify - * how regrouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @param {Function} [iteratee=_.identity] The function to combine - * regrouped values. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip([1, 2], [10, 20], [100, 200]); - * // => [[1, 10, 100], [2, 20, 200]] - * - * _.unzipWith(zipped, _.add); - * // => [3, 30, 300] - */ - function unzipWith(array, iteratee) { - if (!(array && array.length)) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - return arrayMap(result, function(group) { - return apply(iteratee, undefined, group); - }); - } - - /** - * Creates an array excluding all given values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.pull`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.xor - * @example - * - * _.without([2, 1, 2, 3], 1, 2); - * // => [3] - */ - var without = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, values) - : []; - }); - - /** - * Creates an array of unique values that is the - * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) - * of the given arrays. The order of result values is determined by the order - * they occur in the arrays. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.without - * @example - * - * _.xor([2, 1], [2, 3]); - * // => [1, 3] - */ - var xor = baseRest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); - - /** - * This method is like `_.xor` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which by which they're compared. The order of result values is determined - * by the order they occur in the arrays. The iteratee is invoked with one - * argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2, 3.4] - * - * // The `_.property` iteratee shorthand. - * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var xorBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); - }); - - /** - * This method is like `_.xor` except that it accepts `comparator` which is - * invoked to compare elements of `arrays`. The order of result values is - * determined by the order they occur in the arrays. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.xorWith(objects, others, _.isEqual); - * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var xorWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == 'function' ? comparator : undefined; - return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); - }); - - /** - * Creates an array of grouped elements, the first of which contains the - * first elements of the given arrays, the second of which contains the - * second elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - */ - var zip = baseRest(unzip); - - /** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue); - } - - /** - * This method is like `_.zipObject` except that it supports property paths. - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); - * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } - */ - function zipObjectDeep(props, values) { - return baseZipObject(props || [], values || [], baseSet); - } - - /** - * This method is like `_.zip` except that it accepts `iteratee` to specify - * how grouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @param {Function} [iteratee=_.identity] The function to combine - * grouped values. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { - * return a + b + c; - * }); - * // => [111, 222] - */ - var zipWith = baseRest(function(arrays) { - var length = arrays.length, - iteratee = length > 1 ? arrays[length - 1] : undefined; - - iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; - return unzipWith(arrays, iteratee); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * This method is the wrapper version of `_.at`. - * - * @name at - * @memberOf _ - * @since 1.0.0 - * @category Seq - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _(object).at(['a[0].b.c', 'a[1]']).value(); - * // => [3, 4] - */ - var wrapperAt = flatRest(function(paths) { - var length = paths.length, - start = length ? paths[0] : 0, - value = this.__wrapped__, - interceptor = function(object) { return baseAt(object, paths); }; - - if (length > 1 || this.__actions__.length || - !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - 'func': thru, - 'args': [interceptor], - 'thisArg': undefined - }); - return new LodashWrapper(value, this.__chain__).thru(function(array) { - if (length && !array.length) { - array.push(undefined); - } - return array; - }); - }); - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - - /** - * Gets the next value on a wrapped object following the - * [iterator protocol](https://mdn.io/iteration_protocols#iterator). - * - * @name next - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the next iterator value. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped.next(); - * // => { 'done': false, 'value': 1 } - * - * wrapped.next(); - * // => { 'done': false, 'value': 2 } - * - * wrapped.next(); - * // => { 'done': true, 'value': undefined } - */ - function wrapperNext() { - if (this.__values__ === undefined) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, - value = done ? undefined : this.__values__[this.__index__++]; - - return { 'done': done, 'value': value }; - } - - /** - * Enables the wrapper to be iterable. - * - * @name Symbol.iterator - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the wrapper object. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped[Symbol.iterator]() === wrapped; - * // => true - * - * Array.from(wrapped); - * // => [1, 2] - */ - function wrapperToIterator() { - return this; - } - - /** - * Creates a clone of the chain sequence planting `value` as the wrapped value. - * - * @name plant - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @param {*} value The value to plant. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2]).map(square); - * var other = wrapped.plant([3, 4]); - * - * other.value(); - * // => [9, 16] - * - * wrapped.value(); - * // => [1, 4] - */ - function wrapperPlant(value) { - var result, - parent = this; - - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - clone.__index__ = 0; - clone.__values__ = undefined; - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } - - /** - * This method is the wrapper version of `_.reverse`. - * - * **Note:** This method mutates the wrapped array. - * - * @name reverse - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2, 3]; - * - * _(array).reverse().value() - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - 'func': thru, - 'args': [reverse], - 'thisArg': undefined - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the number of times the key was returned by `iteratee`. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } - }); - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ - var findLast = createFind(findLastIndex); - - /** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ - function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); - } - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ - function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } - }); - - /** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'a': 1, 'b': 2 }, 1); - * // => true - * - * _.includes('abcd', 'bc'); - * // => true - */ - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); - } - - /** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `path` is a function, it's invoked - * for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - var invokeMap = baseRest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); - }); - return result; - }); - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ - var keyBy = createAggregator(function(result, value, key) { - baseAssignValue(result, key, value); - }); - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.sortBy` except that it allows specifying the sort - * orders of the iteratees to sort by. If `orders` is unspecified, all values - * are sorted in ascending order. Otherwise, specify an order of "desc" for - * descending or "asc" for ascending sort order of corresponding values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] - * The iteratees to sort by. - * @param {string[]} [orders] The sort orders of `iteratees`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 34 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 36 } - * ]; - * - * // Sort by `user` in ascending order and by `age` in descending order. - * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - */ - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } - - /** - * Creates an array of elements split into two groups, the first of which - * contains elements `predicate` returns truthy for, the second of which - * contains elements `predicate` returns falsey for. The predicate is - * invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the array of grouped elements. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true }, - * { 'user': 'pebbles', 'age': 1, 'active': false } - * ]; - * - * _.partition(users, function(o) { return o.active; }); - * // => objects for [['fred'], ['barney', 'pebbles']] - * - * // The `_.matches` iteratee shorthand. - * _.partition(users, { 'age': 1, 'active': false }); - * // => objects for [['pebbles'], ['barney', 'fred']] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.partition(users, ['active', false]); - * // => objects for [['barney', 'pebbles'], ['fred']] - * - * // The `_.property` iteratee shorthand. - * _.partition(users, 'active'); - * // => objects for [['fred'], ['barney', 'pebbles']] - */ - var partition = createAggregator(function(result, value, key) { - result[key ? 0 : 1].push(value); - }, function() { return [[], []]; }); - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); - } - - /** - * This method is like `_.reduce` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduce - * @example - * - * var array = [[0, 1], [2, 3], [4, 5]]; - * - * _.reduceRight(array, function(flattened, other) { - * return flattened.concat(other); - * }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); - } - - /** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.filter - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * _.reject(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.reject(users, { 'age': 40, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.reject(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.reject(users, 'active'); - * // => objects for ['barney'] - */ - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, negate(getIteratee(predicate, 3))); - } - - /** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ - function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); - } - - /** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=1] The number of elements to sample. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ - function sampleSize(collection, n, guard) { - if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - return isString(collection) ? stringSize(collection) : collection.length; - } - var tag = getTag(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return baseKeys(collection).length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ - var sortBy = baseRest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ - var now = ctxNow || function() { - return root.Date.now(); - }; - - /*------------------------------------------------------------------------*/ - - /** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ - function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ - function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); - } - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function(func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); - }); - - /** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ - var bindKey = baseRest(function(object, key, partials) { - var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(key, bitmask, object, partials, holders); - }); - - /** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ - function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curry.placeholder; - return result; - } - - /** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ - function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryRight.placeholder; - return result; - } - - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ - function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - timeWaiting = wait - timeSinceLastCall; - - return maxing - ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) - : timeWaiting; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - clearTimeout(timerId); - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ - function flip(func) { - return createWrap(func, WRAP_FLIP_FLAG); - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `clear`, `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ - function memoize(func, resolver) { - if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; - } - - // Expose `MapCache`. - memoize.Cache = MapCache; - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - switch (args.length) { - case 0: return !predicate.call(this); - case 1: return !predicate.call(this, args[0]); - case 2: return !predicate.call(this, args[0], args[1]); - case 3: return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func); - } - - /** - * Creates a function that invokes `func` with its arguments transformed. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Function - * @param {Function} func The function to wrap. - * @param {...(Function|Function[])} [transforms=[_.identity]] - * The argument transforms. - * @returns {Function} Returns the new function. - * @example - * - * function doubled(n) { - * return n * 2; - * } - * - * function square(n) { - * return n * n; - * } - * - * var func = _.overArgs(function(x, y) { - * return [x, y]; - * }, [square, doubled]); - * - * func(9, 3); - * // => [81, 6] - * - * func(10, 5); - * // => [100, 10] - */ - var overArgs = castRest(function(func, transforms) { - transforms = (transforms.length == 1 && isArray(transforms[0])) - ? arrayMap(transforms[0], baseUnary(getIteratee())) - : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); - - var funcsLength = transforms.length; - return baseRest(function(args) { - var index = -1, - length = nativeMin(args.length, funcsLength); - - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); - - /** - * Creates a function that invokes `func` with `partials` prepended to the - * arguments it receives. This method is like `_.bind` except it does **not** - * alter the `this` binding. - * - * The `_.partial.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 0.2.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var sayHelloTo = _.partial(greet, 'hello'); - * sayHelloTo('fred'); - * // => 'hello fred' - * - * // Partially applied with placeholders. - * var greetFred = _.partial(greet, _, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - */ - var partial = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partial)); - return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); - }); - - /** - * This method is like `_.partial` except that partially applied arguments - * are appended to the arguments it receives. - * - * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var greetFred = _.partialRight(greet, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - * - * // Partially applied with placeholders. - * var sayHelloTo = _.partialRight(greet, 'hello', _); - * sayHelloTo('fred'); - * // => 'hello fred' - */ - var partialRight = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); - }); - - /** - * Creates a function that invokes `func` with arguments arranged according - * to the specified `indexes` where the argument value at the first index is - * provided as the first argument, the argument value at the second index is - * provided as the second argument, and so on. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to rearrange arguments for. - * @param {...(number|number[])} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - * @example - * - * var rearged = _.rearg(function(a, b, c) { - * return [a, b, c]; - * }, [2, 0, 1]); - * - * rearged('b', 'c', 'a') - * // => ['a', 'b', 'c'] - */ - var rearg = flatRest(function(func, indexes) { - return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); - }); - - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as - * an array. - * - * **Note:** This method is based on the - * [rest parameter](https://mdn.io/rest_parameters). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.rest(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? start : toInteger(start); - return baseRest(func, start); - } - - /** - * Creates a function that invokes `func` with the `this` binding of the - * create function and an array of arguments much like - * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). - * - * **Note:** This method is based on the - * [spread operator](https://mdn.io/spread_operator). - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Function - * @param {Function} func The function to spread arguments over. - * @param {number} [start=0] The start position of the spread. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.spread(function(who, what) { - * return who + ' says ' + what; - * }); - * - * say(['fred', 'hello']); - * // => 'fred says hello' - * - * var numbers = Promise.all([ - * Promise.resolve(40), - * Promise.resolve(36) - * ]); - * - * numbers.then(_.spread(function(x, y) { - * return x + y; - * })); - * // => a Promise of 76 - */ - function spread(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start == null ? 0 : nativeMax(toInteger(start), 0); - return baseRest(function(args) { - var array = args[start], - otherArgs = castSlice(args, 0, start); - - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } - - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide `options` to indicate whether `func` - * should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the throttled function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=true] - * Specify invoking on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - 'leading': leading, - 'maxWait': wait, - 'trailing': trailing - }); - } - - /** - * Creates a function that accepts up to one argument, ignoring any - * additional arguments. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.unary(parseInt)); - * // => [6, 8, 10] - */ - function unary(func) { - return ary(func, 1); - } - - /** - * Creates a function that provides `value` to `wrapper` as its first - * argument. Any additional arguments provided to the function are appended - * to those provided to the `wrapper`. The wrapper is invoked with the `this` - * binding of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {*} value The value to wrap. - * @param {Function} [wrapper=identity] The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('fred, barney, & pebbles'); - * // => '

fred, barney, & pebbles

' - */ - function wrap(value, wrapper) { - return partial(castFunction(wrapper), value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG); - } - - /** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ - function cloneWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); - } - - /** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ - function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); - } - - /** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ - function cloneDeepWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); - } - - /** - * Checks if `object` conforms to `source` by invoking the predicate - * properties of `source` with the corresponding property values of `object`. - * - * **Note:** This method is equivalent to `_.conforms` when `source` is - * partially applied. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); - * // => true - * - * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); - * // => false - */ - function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ - var gt = createRelationalOperation(baseGt); - - /** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ - var gte = createRelationalOperation(function(value, other) { - return value >= other; - }); - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ - var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && baseGetTag(value) == boolTag); - } - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - - /** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ - function isElement(value) { - return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); - } - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are compared by strict equality, i.e. `===`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; - } - - /** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == errorTag || tag == domExcTag || - (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; - } - - /** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ - function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - - /** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. - * - * **Note:** This method is equivalent to `_.matches` when `source` is - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.isMatch(object, { 'b': 2 }); - * // => true - * - * _.isMatch(object, { 'b': 1 }); - * // => false - */ - function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } - - /** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the presence - * of the core-js package because core-js circumvents this kind of detection. - * Despite multiple requests, the core-js maintainer has made it clear: any - * attempt to fix the detection will be obstructed. As a result, we're left - * with little choice but to throw an error. Unfortunately, this also affects - * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on core-js. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ - function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT); - } - return baseIsNative(value); - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ - function isNil(value) { - return value == null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag); - } - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return typeof Ctor == 'function' && Ctor instanceof Ctor && - funcToString.call(Ctor) == objectCtorString; - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - - /** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); - } - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); - } - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } - - /** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ - function isWeakSet(value) { - return isObjectLike(value) && baseGetTag(value) == weakSetTag; - } - - /** - * Checks if `value` is less than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - * @see _.gt - * @example - * - * _.lt(1, 3); - * // => true - * - * _.lt(3, 3); - * // => false - * - * _.lt(3, 1); - * // => false - */ - var lt = createRelationalOperation(baseLt); - - /** - * Checks if `value` is less than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than or equal to - * `other`, else `false`. - * @see _.gte - * @example - * - * _.lte(1, 3); - * // => true - * - * _.lte(3, 3); - * // => true - * - * _.lte(3, 1); - * // => false - */ - var lte = createRelationalOperation(function(value, other) { - return value <= other; - }); - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (symIterator && value[symIterator]) { - return iteratorToArray(value[symIterator]()); - } - var tag = getTag(value), - func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); - - return func(value); - } - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; - } - - /** - * Converts `value` to an integer suitable for use as the length of an - * array-like object. - * - * **Note:** This method is based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toLength(3.2); - * // => 3 - * - * _.toLength(Number.MIN_VALUE); - * // => 0 - * - * _.toLength(Infinity); - * // => 4294967295 - * - * _.toLength('3.2'); - * // => 3 - */ - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; - } - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } - - /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - - /** - * Converts `value` to a safe integer. A safe integer can be compared and - * represented correctly. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toSafeInteger(3.2); - * // => 3 - * - * _.toSafeInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toSafeInteger(Infinity); - * // => 9007199254740991 - * - * _.toSafeInteger('3.2'); - * // => 3 - */ - function toSafeInteger(value) { - return value - ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) - : (value === 0 ? value : 0); - } - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - - /** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); - }); - - /** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ - var at = flatRest(baseAt); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties == null ? result : baseAssign(result, properties); - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; - }); - - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ - var defaultsDeep = baseRest(function(args) { - args.push(undefined, customDefaultsMerge); - return apply(mergeWith, undefined, args); - }); - - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); - } - - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - function findLastKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); - } - - /** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ - function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ - function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forOwn(object, iteratee) { - return object && baseForOwn(object, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ - function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, getIteratee(iteratee, 3)); - } - - /** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); - } - - /** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); - } - - /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; - } - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } - - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } - - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ - var invert = createInverter(function(result, value, key) { - if (value != null && - typeof value.toString != 'function') { - value = nativeObjectToString.call(value); - } - - result[value] = key; - }, constant(identity)); - - /** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ - var invertBy = createInverter(function(result, value, key) { - if (value != null && - typeof value.toString != 'function') { - value = nativeObjectToString.call(value); - } - - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - }, getIteratee); - - /** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ - var invoke = baseRest(baseInvoke); - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - - /** - * The opposite of `_.mapValues`; this method creates an object with the - * same values as `object` and keys generated by running each own enumerable - * string keyed property of `object` thru `iteratee`. The iteratee is invoked - * with three arguments: (value, key, object). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapValues - * @example - * - * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { - * return key + value; - * }); - * // => { 'a1': 1, 'b2': 2 } - */ - function mapKeys(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, iteratee(value, key, object), value); - }); - return result; - } - - /** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ - function mapValues(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, key, iteratee(value, key, object)); - }); - return result; - } - - /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - - /** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined`, merging is handled by the - * method instead. The `customizer` is invoked with six arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { 'a': [1], 'b': [2] }; - * var other = { 'a': [3], 'b': [4] }; - * - * _.mergeWith(object, other, customizer); - * // => { 'a': [1, 3], 'b': [2, 4] } - */ - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); - - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable property paths of `object` that are not omitted. - * - * **Note:** This method is considerably slower than `_.pick`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to omit. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ - var omit = flatRest(function(object, paths) { - var result = {}; - if (object == null) { - return result; - } - var isDeep = false; - paths = arrayMap(paths, function(path) { - path = castPath(path, object); - isDeep || (isDeep = path.length > 1); - return path; - }); - copyObject(object, getAllKeysIn(object), result); - if (isDeep) { - result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); - } - var length = paths.length; - while (length--) { - baseUnset(result, paths[length]); - } - return result; - }); - - /** - * The opposite of `_.pickBy`; this method creates an object composed of - * the own and inherited enumerable string keyed properties of `object` that - * `predicate` doesn't return truthy for. The predicate is invoked with two - * arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - return pickBy(object, negate(getIteratee(predicate))); - } - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function(object, paths) { - return object == null ? {} : basePick(object, paths); - }); - - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - if (object == null) { - return {}; - } - var props = arrayMap(getAllKeysIn(object), function(prop) { - return [prop]; - }); - predicate = getIteratee(predicate); - return basePickBy(object, props, function(value, path) { - return predicate(value, path[0]); - }); - } - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - path = castPath(path, object); - - var index = -1, - length = path.length; - - // Ensure the loop is entered when path is empty. - if (!length) { - length = 1; - object = undefined; - } - while (++index < length) { - var value = object == null ? undefined : object[toKey(path[index])]; - if (value === undefined) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; - } - return object; - } - - /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } - - /** - * This method is like `_.set` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.setWith(object, '[0][1]', 'a', Object); - * // => { '0': { '1': 'a' } } - */ - function setWith(object, path, value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseSet(object, path, value, customizer); - } - - /** - * Creates an array of own enumerable string keyed-value pairs for `object` - * which can be consumed by `_.fromPairs`. If `object` is a map or set, its - * entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entries - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairs(new Foo); - * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) - */ - var toPairs = createToPairs(keys); - - /** - * Creates an array of own and inherited enumerable string keyed-value pairs - * for `object` which can be consumed by `_.fromPairs`. If `object` is a map - * or set, its entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entriesIn - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairsIn(new Foo); - * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) - */ - var toPairsIn = createToPairs(keysIn); - - /** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable string keyed properties thru `iteratee`, with each invocation - * potentially mutating the `accumulator` object. If `accumulator` is not - * provided, a new object with the same `[[Prototype]]` will be used. The - * iteratee is invoked with four arguments: (accumulator, value, key, object). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }, []); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ - function transform(object, iteratee, accumulator) { - var isArr = isArray(object), - isArrLike = isArr || isBuffer(object) || isTypedArray(object); - - iteratee = getIteratee(iteratee, 4); - if (accumulator == null) { - var Ctor = object && object.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor : []; - } - else if (isObject(object)) { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; - } - else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; - } - - /** - * Removes the property at `path` of `object`. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 7 } }] }; - * _.unset(object, 'a[0].b.c'); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - * - * _.unset(object, ['a', '0', 'b', 'c']); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - */ - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } - - /** - * This method is like `_.set` except that accepts `updater` to produce the - * value to set. Use `_.updateWith` to customize `path` creation. The `updater` - * is invoked with one argument: (value). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.update(object, 'a[0].b.c', function(n) { return n * n; }); - * console.log(object.a[0].b.c); - * // => 9 - * - * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); - * console.log(object.x[0].y.z); - * // => 0 - */ - function update(object, path, updater) { - return object == null ? object : baseUpdate(object, path, castFunction(updater)); - } - - /** - * This method is like `_.update` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.updateWith(object, '[0][1]', _.constant('a'), Object); - * // => { '0': { '1': 'a' } } - */ - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object == null ? [] : baseValues(object, keys(object)); - } - - /** - * Creates an array of the own and inherited enumerable string keyed property - * values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.valuesIn(new Foo); - * // => [1, 2, 3] (iteration order is not guaranteed) - */ - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - - /** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ - function inRange(number, start, end) { - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number = toNumber(number); - return baseInRange(number, start, end); - } - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); - }); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - - /** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ - function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); - } - - /** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ - function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; - } - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ - function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; - } - - /** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); - - /** - * Converts `string`, as space separated words, to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the lower cased string. - * @example - * - * _.lowerCase('--Foo-Bar--'); - * // => 'foo bar' - * - * _.lowerCase('fooBar'); - * // => 'foo bar' - * - * _.lowerCase('__FOO_BAR__'); - * // => 'foo bar' - */ - var lowerCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + word.toLowerCase(); - }); - - /** - * Converts the first character of `string` to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.lowerFirst('Fred'); - * // => 'fred' - * - * _.lowerFirst('FRED'); - * // => 'fRED' - */ - var lowerFirst = createCaseFirst('toLowerCase'); - - /** - * Pads `string` on the left and right sides if it's shorter than `length`. - * Padding characters are truncated if they can't be evenly divided by `length`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.pad('abc', 8); - * // => ' abc ' - * - * _.pad('abc', 8, '_-'); - * // => '_-abc_-_' - * - * _.pad('abc', 3); - * // => 'abc' - */ - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - if (!length || strLength >= length) { - return string; - } - var mid = (length - strLength) / 2; - return ( - createPadding(nativeFloor(mid), chars) + - string + - createPadding(nativeCeil(mid), chars) - ); - } - - /** - * Pads `string` on the right side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padEnd('abc', 6); - * // => 'abc ' - * - * _.padEnd('abc', 6, '_-'); - * // => 'abc_-_' - * - * _.padEnd('abc', 3); - * // => 'abc' - */ - function padEnd(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (string + createPadding(length - strLength, chars)) - : string; - } - - /** - * Pads `string` on the left side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padStart('abc', 6); - * // => ' abc' - * - * _.padStart('abc', 6, '_-'); - * // => '_-_abc' - * - * _.padStart('abc', 3); - * // => 'abc' - */ - function padStart(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (createPadding(length - strLength, chars) + string) - : string; - } - - /** - * Converts `string` to an integer of the specified radix. If `radix` is - * `undefined` or `0`, a `radix` of `10` is used unless `value` is a - * hexadecimal, in which case a `radix` of `16` is used. - * - * **Note:** This method aligns with the - * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category String - * @param {string} string The string to convert. - * @param {number} [radix=10] The radix to interpret `value` by. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {number} Returns the converted integer. - * @example - * - * _.parseInt('08'); - * // => 8 - * - * _.map(['6', '08', '10'], _.parseInt); - * // => [6, 8, 10] - */ - function parseInt(string, radix, guard) { - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); - } - - /** - * Repeats the given string `n` times. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to repeat. - * @param {number} [n=1] The number of times to repeat the string. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {string} Returns the repeated string. - * @example - * - * _.repeat('*', 3); - * // => '***' - * - * _.repeat('abc', 2); - * // => 'abcabc' - * - * _.repeat('abc', 0); - * // => '' - */ - function repeat(string, n, guard) { - if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string), n); - } - - /** - * Replaces matches for `pattern` in `string` with `replacement`. - * - * **Note:** This method is based on - * [`String#replace`](https://mdn.io/String/replace). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to modify. - * @param {RegExp|string} pattern The pattern to replace. - * @param {Function|string} replacement The match replacement. - * @returns {string} Returns the modified string. - * @example - * - * _.replace('Hi Fred', 'Fred', 'Barney'); - * // => 'Hi Barney' - */ - function replace() { - var args = arguments, - string = toString(args[0]); - - return args.length < 3 ? string : string.replace(args[1], args[2]); - } - - /** - * Converts `string` to - * [snake case](https://en.wikipedia.org/wiki/Snake_case). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the snake cased string. - * @example - * - * _.snakeCase('Foo Bar'); - * // => 'foo_bar' - * - * _.snakeCase('fooBar'); - * // => 'foo_bar' - * - * _.snakeCase('--FOO-BAR--'); - * // => 'foo_bar' - */ - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); - - /** - * Splits `string` by `separator`. - * - * **Note:** This method is based on - * [`String#split`](https://mdn.io/String/split). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to split. - * @param {RegExp|string} separator The separator pattern to split by. - * @param {number} [limit] The length to truncate results to. - * @returns {Array} Returns the string segments. - * @example - * - * _.split('a-b-c', '-', 2); - * // => ['a', 'b'] - */ - function split(string, separator, limit) { - if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { - separator = limit = undefined; - } - limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string = toString(string); - if (string && ( - typeof separator == 'string' || - (separator != null && !isRegExp(separator)) - )) { - separator = baseToString(separator); - if (!separator && hasUnicode(string)) { - return castSlice(stringToArray(string), 0, limit); - } - } - return string.split(separator, limit); - } - - /** - * Converts `string` to - * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). - * - * @static - * @memberOf _ - * @since 3.1.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the start cased string. - * @example - * - * _.startCase('--foo-bar--'); - * // => 'Foo Bar' - * - * _.startCase('fooBar'); - * // => 'Foo Bar' - * - * _.startCase('__FOO_BAR__'); - * // => 'FOO BAR' - */ - var startCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + upperFirst(word); - }); - - /** - * Checks if `string` starts with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=0] The position to search from. - * @returns {boolean} Returns `true` if `string` starts with `target`, - * else `false`. - * @example - * - * _.startsWith('abc', 'a'); - * // => true - * - * _.startsWith('abc', 'b'); - * // => false - * - * _.startsWith('abc', 'b', 1); - * // => true - */ - function startsWith(string, target, position) { - string = toString(string); - position = position == null - ? 0 - : baseClamp(toInteger(position), 0, string.length); - - target = baseToString(target); - return string.slice(position, position + target.length) == target; - } - - /** - * Creates a compiled template function that can interpolate data properties - * in "interpolate" delimiters, HTML-escape interpolated data properties in - * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data - * properties may be accessed as free variables in the template. If a setting - * object is given, it takes precedence over `_.templateSettings` values. - * - * **Note:** In the development build `_.template` utilizes - * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * for easier debugging. - * - * For more information on precompiling templates see - * [lodash's custom builds documentation](https://lodash.com/custom-builds). - * - * For more information on Chrome extension sandboxes see - * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The template string. - * @param {Object} [options={}] The options object. - * @param {RegExp} [options.escape=_.templateSettings.escape] - * The HTML "escape" delimiter. - * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] - * The "evaluate" delimiter. - * @param {Object} [options.imports=_.templateSettings.imports] - * An object to import into the template as free variables. - * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] - * The "interpolate" delimiter. - * @param {string} [options.sourceURL='lodash.templateSources[n]'] - * The sourceURL of the compiled template. - * @param {string} [options.variable='obj'] - * The data object variable name. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the compiled template function. - * @example - * - * // Use the "interpolate" delimiter to create a compiled template. - * var compiled = _.template('hello <%= user %>!'); - * compiled({ 'user': 'fred' }); - * // => 'hello fred!' - * - * // Use the HTML "escape" delimiter to escape data property values. - * var compiled = _.template('<%- value %>'); - * compiled({ 'value': ' - - - - diff --git a/node_modules/mute-stream/coverage/lcov-report/__root__/mute.js.html b/node_modules/mute-stream/coverage/lcov-report/__root__/mute.js.html deleted file mode 100644 index 375a832..0000000 --- a/node_modules/mute-stream/coverage/lcov-report/__root__/mute.js.html +++ /dev/null @@ -1,500 +0,0 @@ - - - - Code coverage report for mute.js - - - - - - - -
-
-

- all files / __root__/ mute.js -

-
-
- 77.03% - Statements - 57/74 -
-
- 57.14% - Branches - 28/49 -
-
- 93.33% - Functions - 14/15 -
-
- 79.1% - Lines - 53/67 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -  - -  -  -  - - - - - - - -  -  -  -  - - -  -  - -  - -  -  -  -  - -10× -  -  - - -  -  - -  -  -  -  -  -  - - -  -  - -  -  -  -  -  -  - - -  -  -  -  -  -  - - -  -  -  -  -  -  -  - -  - -  -  -  -  - -  - -  -  -  -  -  - - - -  -  - - -  -  - - -  -  - -25× -13× - -  -  -  -  -  -  -  -  - -  -  -  -  -  - -  -  -20× -  -  - - - -  -  - -  -  - - -  -  - -  -  -  -  -  -  - - - - 
var Stream = require('stream')
- 
-module.exports = MuteStream
- 
-// var out = new MuteStream(process.stdout)
-// argument auto-pipes
-function MuteStream (opts) {
-  Stream.apply(this)
-  opts = opts || {}
-  this.writable = this.readable = true
-  this.muted = false
-  this.on('pipe', this._onpipe)
-  this.replace = opts.replace
- 
-  // For readline-type situations
-  // This much at the start of a line being redrawn after a ctrl char
-  // is seen (such as backspace) won't be redrawn as the replacement
-  this._prompt = opts.prompt || null
-  this._hadControl = false
-}
- 
-MuteStream.prototype = Object.create(Stream.prototype)
- 
-Object.defineProperty(MuteStream.prototype, 'constructor', {
-  value: MuteStream,
-  enumerable: false
-})
- 
-MuteStream.prototype.mute = function () {
-  this.muted = true
-}
- 
-MuteStream.prototype.unmute = function () {
-  this.muted = false
-}
- 
-Object.defineProperty(MuteStream.prototype, '_onpipe', {
-  value: onPipe,
-  enumerable: false,
-  writable: true,
-  configurable: true
-})
- 
-function onPipe (src) {
-  this._src = src
-}
- 
-Object.defineProperty(MuteStream.prototype, 'isTTY', {
-  get: getIsTTY,
-  set: setIsTTY,
-  enumerable: true,
-  configurable: true
-})
- 
-function getIsTTY () {
-  return( (this._dest) ? this._dest.isTTY
-        : (this._src) ? this._src.isTTY
-        : false
-        )
-}
- 
-// basically just get replace the getter/setter with a regular value
-function setIsTTY (isTTY) {
-  Object.defineProperty(this, 'isTTY', {
-    value: isTTY,
-    enumerable: true,
-    writable: true,
-    configurable: true
-  })
-}
- 
-Object.defineProperty(MuteStream.prototype, 'rows', {
-  get: function () {
-    return( this._dest ? this._dest.rows
-          : this._src ? this._src.rows
-          : undefined )
-  }, enumerable: true, configurable: true })
- 
-Object.defineProperty(MuteStream.prototype, 'columns', {
-  get: function () {
-    return( this._dest ? this._dest.columns
-          : this._src ? this._src.columns
-          : undefined )
-  }, enumerable: true, configurable: true })
- 
- 
-MuteStream.prototype.pipe = function (dest, options) {
-  this._dest = dest
-  return Stream.prototype.pipe.call(this, dest, options)
-}
- 
-MuteStream.prototype.pause = function () {
-  Eif (this._src) return this._src.pause()
-}
- 
-MuteStream.prototype.resume = function () {
-  Eif (this._src) return this._src.resume()
-}
- 
-MuteStream.prototype.write = function (c) {
-  if (this.muted) {
-    if (!this.replace) return true
-    Iif (c.match(/^\u001b/)) {
-      if(c.indexOf(this._prompt) === 0) {
-        c = c.substr(this._prompt.length);
-        c = c.replace(/./g, this.replace);
-        c = this._prompt + c;
-      }
-      this._hadControl = true
-      return this.emit('data', c)
-    } else {
-      Iif (this._prompt && this._hadControl &&
-          c.indexOf(this._prompt) === 0) {
-        this._hadControl = false
-        this.emit('data', this._prompt)
-        c = c.substr(this._prompt.length)
-      }
-      c = c.toString().replace(/./g, this.replace)
-    }
-  }
-  this.emit('data', c)
-}
- 
-MuteStream.prototype.end = function (c) {
-  Eif (this.muted) {
-    Iif (c && this.replace) {
-      c = c.toString().replace(/./g, this.replace)
-    } else {
-      c = null
-    }
-  }
-  Iif (c) this.emit('data', c)
-  this.emit('end')
-}
- 
-function proxy (fn) { return function () {
-  var d = this._dest
-  var s = this._src
-  if (d && d[fn]) d[fn].apply(d, arguments)
-  if (s && s[fn]) s[fn].apply(s, arguments)
-}}
- 
-MuteStream.prototype.destroy = proxy('destroy')
-MuteStream.prototype.destroySoon = proxy('destroySoon')
-MuteStream.prototype.close = proxy('close')
- 
-
-
- -
- - - - - diff --git a/node_modules/mute-stream/coverage/lcov-report/base.css b/node_modules/mute-stream/coverage/lcov-report/base.css deleted file mode 100644 index 0c0571d..0000000 --- a/node_modules/mute-stream/coverage/lcov-report/base.css +++ /dev/null @@ -1,212 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px;; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } - - -.medium .chart { border:1px solid #666; } -.medium .cover-fill { background: #666; } - -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } -.medium { background: #eaeaea; } - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/node_modules/mute-stream/coverage/lcov-report/index.html b/node_modules/mute-stream/coverage/lcov-report/index.html deleted file mode 100644 index 17d7a76..0000000 --- a/node_modules/mute-stream/coverage/lcov-report/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for All files - - - - - - - -
-
-

- / -

-
-
- 77.03% - Statements - 57/74 -
-
- 57.14% - Branches - 28/49 -
-
- 93.33% - Functions - 14/15 -
-
- 79.1% - Lines - 53/67 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
__root__/
77.03%57/7457.14%28/4993.33%14/1579.1%53/67
-
-
- - - - - - - diff --git a/node_modules/mute-stream/coverage/lcov-report/prettify.css b/node_modules/mute-stream/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/node_modules/mute-stream/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/node_modules/mute-stream/coverage/lcov-report/prettify.js b/node_modules/mute-stream/coverage/lcov-report/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/node_modules/mute-stream/coverage/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/node_modules/mute-stream/coverage/lcov-report/sort-arrow-sprite.png b/node_modules/mute-stream/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a609c6fd0dbfdac63466a7d7c958b5cbf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/node_modules/mute-stream/coverage/lcov.info b/node_modules/mute-stream/coverage/lcov.info deleted file mode 100644 index 5f2a58e..0000000 --- a/node_modules/mute-stream/coverage/lcov.info +++ /dev/null @@ -1,155 +0,0 @@ -TN: -SF:./mute.js -FN:7,MuteStream -FN:29,(anonymous_2) -FN:33,(anonymous_3) -FN:44,onPipe -FN:55,getIsTTY -FN:63,setIsTTY -FN:73,(anonymous_7) -FN:80,(anonymous_8) -FN:87,(anonymous_9) -FN:92,(anonymous_10) -FN:96,(anonymous_11) -FN:100,(anonymous_12) -FN:124,(anonymous_13) -FN:136,proxy -FN:136,(anonymous_15) -FNF:15 -FNH:14 -FNDA:7,MuteStream -FNDA:10,(anonymous_2) -FNDA:6,(anonymous_3) -FNDA:5,onPipe -FNDA:8,getIsTTY -FNDA:2,setIsTTY -FNDA:5,(anonymous_7) -FNDA:5,(anonymous_8) -FNDA:2,(anonymous_9) -FNDA:2,(anonymous_10) -FNDA:2,(anonymous_11) -FNDA:25,(anonymous_12) -FNDA:2,(anonymous_13) -FNDA:3,proxy -FNDA:0,(anonymous_15) -DA:1,1 -DA:3,1 -DA:7,1 -DA:8,7 -DA:9,7 -DA:10,7 -DA:11,7 -DA:12,7 -DA:13,7 -DA:18,7 -DA:19,7 -DA:22,1 -DA:24,1 -DA:29,1 -DA:30,10 -DA:33,1 -DA:34,6 -DA:37,1 -DA:44,1 -DA:45,5 -DA:48,1 -DA:55,1 -DA:56,8 -DA:63,1 -DA:64,2 -DA:72,1 -DA:74,5 -DA:79,1 -DA:81,5 -DA:87,1 -DA:88,2 -DA:89,2 -DA:92,1 -DA:93,2 -DA:96,1 -DA:97,2 -DA:100,1 -DA:101,25 -DA:102,13 -DA:103,8 -DA:104,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:109,0 -DA:110,0 -DA:112,8 -DA:114,0 -DA:115,0 -DA:116,0 -DA:118,8 -DA:121,20 -DA:124,1 -DA:125,2 -DA:126,2 -DA:127,0 -DA:129,2 -DA:132,2 -DA:133,2 -DA:136,3 -DA:137,0 -DA:138,0 -DA:139,0 -DA:140,0 -DA:143,1 -DA:144,1 -DA:145,1 -LF:67 -LH:53 -BRDA:9,1,0,7 -BRDA:9,1,1,5 -BRDA:18,2,0,7 -BRDA:18,2,1,7 -BRDA:56,3,0,3 -BRDA:56,3,1,5 -BRDA:57,4,0,3 -BRDA:57,4,1,2 -BRDA:74,5,0,4 -BRDA:74,5,1,1 -BRDA:75,6,0,0 -BRDA:75,6,1,1 -BRDA:81,7,0,4 -BRDA:81,7,1,1 -BRDA:82,8,0,0 -BRDA:82,8,1,1 -BRDA:93,9,0,2 -BRDA:93,9,1,0 -BRDA:97,10,0,2 -BRDA:97,10,1,0 -BRDA:101,11,0,13 -BRDA:101,11,1,12 -BRDA:102,12,0,5 -BRDA:102,12,1,8 -BRDA:103,13,0,0 -BRDA:103,13,1,8 -BRDA:104,14,0,0 -BRDA:104,14,1,0 -BRDA:112,15,0,0 -BRDA:112,15,1,8 -BRDA:112,16,0,8 -BRDA:112,16,1,0 -BRDA:112,16,2,0 -BRDA:125,17,0,2 -BRDA:125,17,1,0 -BRDA:126,18,0,0 -BRDA:126,18,1,2 -BRDA:126,19,0,2 -BRDA:126,19,1,1 -BRDA:132,20,0,0 -BRDA:132,20,1,2 -BRDA:139,21,0,0 -BRDA:139,21,1,0 -BRDA:139,22,0,0 -BRDA:139,22,1,0 -BRDA:140,23,0,0 -BRDA:140,23,1,0 -BRDA:140,24,0,0 -BRDA:140,24,1,0 -BRF:49 -BRH:28 -end_of_record diff --git a/node_modules/mute-stream/mute.js b/node_modules/mute-stream/mute.js deleted file mode 100644 index a24fc09..0000000 --- a/node_modules/mute-stream/mute.js +++ /dev/null @@ -1,145 +0,0 @@ -var Stream = require('stream') - -module.exports = MuteStream - -// var out = new MuteStream(process.stdout) -// argument auto-pipes -function MuteStream (opts) { - Stream.apply(this) - opts = opts || {} - this.writable = this.readable = true - this.muted = false - this.on('pipe', this._onpipe) - this.replace = opts.replace - - // For readline-type situations - // This much at the start of a line being redrawn after a ctrl char - // is seen (such as backspace) won't be redrawn as the replacement - this._prompt = opts.prompt || null - this._hadControl = false -} - -MuteStream.prototype = Object.create(Stream.prototype) - -Object.defineProperty(MuteStream.prototype, 'constructor', { - value: MuteStream, - enumerable: false -}) - -MuteStream.prototype.mute = function () { - this.muted = true -} - -MuteStream.prototype.unmute = function () { - this.muted = false -} - -Object.defineProperty(MuteStream.prototype, '_onpipe', { - value: onPipe, - enumerable: false, - writable: true, - configurable: true -}) - -function onPipe (src) { - this._src = src -} - -Object.defineProperty(MuteStream.prototype, 'isTTY', { - get: getIsTTY, - set: setIsTTY, - enumerable: true, - configurable: true -}) - -function getIsTTY () { - return( (this._dest) ? this._dest.isTTY - : (this._src) ? this._src.isTTY - : false - ) -} - -// basically just get replace the getter/setter with a regular value -function setIsTTY (isTTY) { - Object.defineProperty(this, 'isTTY', { - value: isTTY, - enumerable: true, - writable: true, - configurable: true - }) -} - -Object.defineProperty(MuteStream.prototype, 'rows', { - get: function () { - return( this._dest ? this._dest.rows - : this._src ? this._src.rows - : undefined ) - }, enumerable: true, configurable: true }) - -Object.defineProperty(MuteStream.prototype, 'columns', { - get: function () { - return( this._dest ? this._dest.columns - : this._src ? this._src.columns - : undefined ) - }, enumerable: true, configurable: true }) - - -MuteStream.prototype.pipe = function (dest, options) { - this._dest = dest - return Stream.prototype.pipe.call(this, dest, options) -} - -MuteStream.prototype.pause = function () { - if (this._src) return this._src.pause() -} - -MuteStream.prototype.resume = function () { - if (this._src) return this._src.resume() -} - -MuteStream.prototype.write = function (c) { - if (this.muted) { - if (!this.replace) return true - if (c.match(/^\u001b/)) { - if(c.indexOf(this._prompt) === 0) { - c = c.substr(this._prompt.length); - c = c.replace(/./g, this.replace); - c = this._prompt + c; - } - this._hadControl = true - return this.emit('data', c) - } else { - if (this._prompt && this._hadControl && - c.indexOf(this._prompt) === 0) { - this._hadControl = false - this.emit('data', this._prompt) - c = c.substr(this._prompt.length) - } - c = c.toString().replace(/./g, this.replace) - } - } - this.emit('data', c) -} - -MuteStream.prototype.end = function (c) { - if (this.muted) { - if (c && this.replace) { - c = c.toString().replace(/./g, this.replace) - } else { - c = null - } - } - if (c) this.emit('data', c) - this.emit('end') -} - -function proxy (fn) { return function () { - var d = this._dest - var s = this._src - if (d && d[fn]) d[fn].apply(d, arguments) - if (s && s[fn]) s[fn].apply(s, arguments) -}} - -MuteStream.prototype.destroy = proxy('destroy') -MuteStream.prototype.destroySoon = proxy('destroySoon') -MuteStream.prototype.close = proxy('close') diff --git a/node_modules/mute-stream/package.json b/node_modules/mute-stream/package.json deleted file mode 100644 index dcd2d37..0000000 --- a/node_modules/mute-stream/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "mute-stream", - "version": "0.0.7", - "main": "mute.js", - "directories": { - "test": "test" - }, - "devDependencies": { - "tap": "^5.4.4" - }, - "scripts": { - "test": "tap test/*.js --cov" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/mute-stream" - }, - "keywords": [ - "mute", - "stream", - "pipe" - ], - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC", - "description": "Bytes go in, but they don't come out (when muted)." -} diff --git a/node_modules/mute-stream/test/basic.js b/node_modules/mute-stream/test/basic.js deleted file mode 100644 index 41f9e10..0000000 --- a/node_modules/mute-stream/test/basic.js +++ /dev/null @@ -1,207 +0,0 @@ -var Stream = require('stream') -var tap = require('tap') -var MS = require('../mute.js') - -// some marker objects -var END = {} -var PAUSE = {} -var RESUME = {} - -function PassThrough () { - Stream.call(this) - this.readable = this.writable = true -} - -PassThrough.prototype = Object.create(Stream.prototype, { - constructor: { - value: PassThrough - }, - write: { - value: function (c) { - this.emit('data', c) - return true - } - }, - end: { - value: function (c) { - if (c) this.write(c) - this.emit('end') - } - }, - pause: { - value: function () { - this.emit('pause') - } - }, - resume: { - value: function () { - this.emit('resume') - } - } -}) - -tap.test('incoming', function (t) { - var ms = new MS - var str = new PassThrough - str.pipe(ms) - - var expect = ['foo', 'boo', END] - ms.on('data', function (c) { - t.equal(c, expect.shift()) - }) - ms.on('end', function () { - t.equal(END, expect.shift()) - t.end() - }) - str.write('foo') - ms.mute() - str.write('bar') - ms.unmute() - str.write('boo') - ms.mute() - str.write('blaz') - str.end('grelb') -}) - -tap.test('outgoing', function (t) { - var ms = new MS - var str = new PassThrough - ms.pipe(str) - - var expect = ['foo', 'boo', END] - str.on('data', function (c) { - t.equal(c, expect.shift()) - }) - str.on('end', function () { - t.equal(END, expect.shift()) - t.end() - }) - - ms.write('foo') - ms.mute() - ms.write('bar') - ms.unmute() - ms.write('boo') - ms.mute() - ms.write('blaz') - ms.end('grelb') -}) - -tap.test('isTTY', function (t) { - var str = new PassThrough - str.isTTY = true - str.columns=80 - str.rows=24 - - var ms = new MS - t.equal(ms.isTTY, false) - t.equal(ms.columns, undefined) - t.equal(ms.rows, undefined) - ms.pipe(str) - t.equal(ms.isTTY, true) - t.equal(ms.columns, 80) - t.equal(ms.rows, 24) - str.isTTY = false - t.equal(ms.isTTY, false) - t.equal(ms.columns, 80) - t.equal(ms.rows, 24) - str.isTTY = true - t.equal(ms.isTTY, true) - t.equal(ms.columns, 80) - t.equal(ms.rows, 24) - ms.isTTY = false - t.equal(ms.isTTY, false) - t.equal(ms.columns, 80) - t.equal(ms.rows, 24) - - ms = new MS - t.equal(ms.isTTY, false) - str.pipe(ms) - t.equal(ms.isTTY, true) - str.isTTY = false - t.equal(ms.isTTY, false) - str.isTTY = true - t.equal(ms.isTTY, true) - ms.isTTY = false - t.equal(ms.isTTY, false) - - t.end() -}) - -tap.test('pause/resume incoming', function (t) { - var str = new PassThrough - var ms = new MS - str.on('pause', function () { - t.equal(PAUSE, expect.shift()) - }) - str.on('resume', function () { - t.equal(RESUME, expect.shift()) - }) - var expect = [PAUSE, RESUME, PAUSE, RESUME] - str.pipe(ms) - ms.pause() - ms.resume() - ms.pause() - ms.resume() - t.equal(expect.length, 0, 'saw all events') - t.end() -}) - -tap.test('replace with *', function (t) { - var str = new PassThrough - var ms = new MS({replace: '*'}) - str.pipe(ms) - var expect = ['foo', '*****', 'bar', '***', 'baz', 'boo', '**', '****'] - - ms.on('data', function (c) { - t.equal(c, expect.shift()) - }) - - str.write('foo') - ms.mute() - str.write('12345') - ms.unmute() - str.write('bar') - ms.mute() - str.write('baz') - ms.unmute() - str.write('baz') - str.write('boo') - ms.mute() - str.write('xy') - str.write('xyzΩ') - - t.equal(expect.length, 0) - t.end() -}) - -tap.test('replace with ~YARG~', function (t) { - var str = new PassThrough - var ms = new MS({replace: '~YARG~'}) - str.pipe(ms) - var expect = ['foo', '~YARG~~YARG~~YARG~~YARG~~YARG~', 'bar', - '~YARG~~YARG~~YARG~', 'baz', 'boo', '~YARG~~YARG~', - '~YARG~~YARG~~YARG~~YARG~'] - - ms.on('data', function (c) { - t.equal(c, expect.shift()) - }) - - // also throw some unicode in there, just for good measure. - str.write('foo') - ms.mute() - str.write('ΩΩ') - ms.unmute() - str.write('bar') - ms.mute() - str.write('Ω') - ms.unmute() - str.write('baz') - str.write('boo') - ms.mute() - str.write('Ω') - str.write('ΩΩ') - - t.equal(expect.length, 0) - t.end() -}) diff --git a/node_modules/node-fetch/LICENSE.md b/node_modules/node-fetch/LICENSE.md deleted file mode 100644 index 660ffec..0000000 --- a/node_modules/node-fetch/LICENSE.md +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 David Frank - -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. - diff --git a/node_modules/node-fetch/README.md b/node_modules/node-fetch/README.md deleted file mode 100644 index 55f09b7..0000000 --- a/node_modules/node-fetch/README.md +++ /dev/null @@ -1,634 +0,0 @@ -node-fetch -========== - -[![npm version][npm-image]][npm-url] -[![build status][travis-image]][travis-url] -[![coverage status][codecov-image]][codecov-url] -[![install size][install-size-image]][install-size-url] -[![Discord][discord-image]][discord-url] - -A light-weight module that brings `window.fetch` to Node.js - -(We are looking for [v2 maintainers and collaborators](https://github.com/bitinn/node-fetch/issues/567)) - -[![Backers][opencollective-image]][opencollective-url] - - - -- [Motivation](#motivation) -- [Features](#features) -- [Difference from client-side fetch](#difference-from-client-side-fetch) -- [Installation](#installation) -- [Loading and configuring the module](#loading-and-configuring-the-module) -- [Common Usage](#common-usage) - - [Plain text or HTML](#plain-text-or-html) - - [JSON](#json) - - [Simple Post](#simple-post) - - [Post with JSON](#post-with-json) - - [Post with form parameters](#post-with-form-parameters) - - [Handling exceptions](#handling-exceptions) - - [Handling client and server errors](#handling-client-and-server-errors) -- [Advanced Usage](#advanced-usage) - - [Streams](#streams) - - [Buffer](#buffer) - - [Accessing Headers and other Meta data](#accessing-headers-and-other-meta-data) - - [Extract Set-Cookie Header](#extract-set-cookie-header) - - [Post data using a file stream](#post-data-using-a-file-stream) - - [Post with form-data (detect multipart)](#post-with-form-data-detect-multipart) - - [Request cancellation with AbortSignal](#request-cancellation-with-abortsignal) -- [API](#api) - - [fetch(url[, options])](#fetchurl-options) - - [Options](#options) - - [Class: Request](#class-request) - - [Class: Response](#class-response) - - [Class: Headers](#class-headers) - - [Interface: Body](#interface-body) - - [Class: FetchError](#class-fetcherror) -- [License](#license) -- [Acknowledgement](#acknowledgement) - - - -## Motivation - -Instead of implementing `XMLHttpRequest` in Node.js to run browser-specific [Fetch polyfill](https://github.com/github/fetch), why not go from native `http` to `fetch` API directly? Hence, `node-fetch`, minimal code for a `window.fetch` compatible API on Node.js runtime. - -See Matt Andrews' [isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch) or Leonardo Quixada's [cross-fetch](https://github.com/lquixada/cross-fetch) for isomorphic usage (exports `node-fetch` for server-side, `whatwg-fetch` for client-side). - -## Features - -- Stay consistent with `window.fetch` API. -- Make conscious trade-off when following [WHATWG fetch spec][whatwg-fetch] and [stream spec](https://streams.spec.whatwg.org/) implementation details, document known differences. -- Use native promise but allow substituting it with [insert your favorite promise library]. -- Use native Node streams for body on both request and response. -- Decode content encoding (gzip/deflate) properly and convert string output (such as `res.text()` and `res.json()`) to UTF-8 automatically. -- Useful extensions such as timeout, redirect limit, response size limit, [explicit errors](ERROR-HANDLING.md) for troubleshooting. - -## Difference from client-side fetch - -- See [Known Differences](LIMITS.md) for details. -- If you happen to use a missing feature that `window.fetch` offers, feel free to open an issue. -- Pull requests are welcomed too! - -## Installation - -Current stable release (`2.x`) - -```sh -$ npm install node-fetch -``` - -## Loading and configuring the module -We suggest you load the module via `require` until the stabilization of ES modules in node: -```js -const fetch = require('node-fetch'); -``` - -If you are using a Promise library other than native, set it through `fetch.Promise`: -```js -const Bluebird = require('bluebird'); - -fetch.Promise = Bluebird; -``` - -## Common Usage - -NOTE: The documentation below is up-to-date with `2.x` releases; see the [`1.x` readme](https://github.com/bitinn/node-fetch/blob/1.x/README.md), [changelog](https://github.com/bitinn/node-fetch/blob/1.x/CHANGELOG.md) and [2.x upgrade guide](UPGRADE-GUIDE.md) for the differences. - -#### Plain text or HTML -```js -fetch('https://github.com/') - .then(res => res.text()) - .then(body => console.log(body)); -``` - -#### JSON - -```js - -fetch('https://api.github.com/users/github') - .then(res => res.json()) - .then(json => console.log(json)); -``` - -#### Simple Post -```js -fetch('https://httpbin.org/post', { method: 'POST', body: 'a=1' }) - .then(res => res.json()) // expecting a json response - .then(json => console.log(json)); -``` - -#### Post with JSON - -```js -const body = { a: 1 }; - -fetch('https://httpbin.org/post', { - method: 'post', - body: JSON.stringify(body), - headers: { 'Content-Type': 'application/json' }, - }) - .then(res => res.json()) - .then(json => console.log(json)); -``` - -#### Post with form parameters -`URLSearchParams` is available in Node.js as of v7.5.0. See [official documentation](https://nodejs.org/api/url.html#url_class_urlsearchparams) for more usage methods. - -NOTE: The `Content-Type` header is only set automatically to `x-www-form-urlencoded` when an instance of `URLSearchParams` is given as such: - -```js -const { URLSearchParams } = require('url'); - -const params = new URLSearchParams(); -params.append('a', 1); - -fetch('https://httpbin.org/post', { method: 'POST', body: params }) - .then(res => res.json()) - .then(json => console.log(json)); -``` - -#### Handling exceptions -NOTE: 3xx-5xx responses are *NOT* exceptions and should be handled in `then()`; see the next section for more information. - -Adding a catch to the fetch promise chain will catch *all* exceptions, such as errors originating from node core libraries, network errors and operational errors, which are instances of FetchError. See the [error handling document](ERROR-HANDLING.md) for more details. - -```js -fetch('https://domain.invalid/') - .catch(err => console.error(err)); -``` - -#### Handling client and server errors -It is common to create a helper function to check that the response contains no client (4xx) or server (5xx) error responses: - -```js -function checkStatus(res) { - if (res.ok) { // res.status >= 200 && res.status < 300 - return res; - } else { - throw MyCustomError(res.statusText); - } -} - -fetch('https://httpbin.org/status/400') - .then(checkStatus) - .then(res => console.log('will not get here...')) -``` - -## Advanced Usage - -#### Streams -The "Node.js way" is to use streams when possible: - -```js -fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png') - .then(res => { - const dest = fs.createWriteStream('./octocat.png'); - res.body.pipe(dest); - }); -``` - -In Node.js 14 you can also use async iterators to read `body`; however, be careful to catch -errors -- the longer a response runs, the more likely it is to encounter an error. - -```js -const fetch = require('node-fetch'); -const response = await fetch('https://httpbin.org/stream/3'); -try { - for await (const chunk of response.body) { - console.dir(JSON.parse(chunk.toString())); - } -} catch (err) { - console.error(err.stack); -} -``` - -In Node.js 12 you can also use async iterators to read `body`; however, async iterators with streams -did not mature until Node.js 14, so you need to do some extra work to ensure you handle errors -directly from the stream and wait on it response to fully close. - -```js -const fetch = require('node-fetch'); -const read = async body => { - let error; - body.on('error', err => { - error = err; - }); - for await (const chunk of body) { - console.dir(JSON.parse(chunk.toString())); - } - return new Promise((resolve, reject) => { - body.on('close', () => { - error ? reject(error) : resolve(); - }); - }); -}; -try { - const response = await fetch('https://httpbin.org/stream/3'); - await read(response.body); -} catch (err) { - console.error(err.stack); -} -``` - -#### Buffer -If you prefer to cache binary data in full, use buffer(). (NOTE: `buffer()` is a `node-fetch`-only API) - -```js -const fileType = require('file-type'); - -fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png') - .then(res => res.buffer()) - .then(buffer => fileType(buffer)) - .then(type => { /* ... */ }); -``` - -#### Accessing Headers and other Meta data -```js -fetch('https://github.com/') - .then(res => { - console.log(res.ok); - console.log(res.status); - console.log(res.statusText); - console.log(res.headers.raw()); - console.log(res.headers.get('content-type')); - }); -``` - -#### Extract Set-Cookie Header - -Unlike browsers, you can access raw `Set-Cookie` headers manually using `Headers.raw()`. This is a `node-fetch` only API. - -```js -fetch(url).then(res => { - // returns an array of values, instead of a string of comma-separated values - console.log(res.headers.raw()['set-cookie']); -}); -``` - -#### Post data using a file stream - -```js -const { createReadStream } = require('fs'); - -const stream = createReadStream('input.txt'); - -fetch('https://httpbin.org/post', { method: 'POST', body: stream }) - .then(res => res.json()) - .then(json => console.log(json)); -``` - -#### Post with form-data (detect multipart) - -```js -const FormData = require('form-data'); - -const form = new FormData(); -form.append('a', 1); - -fetch('https://httpbin.org/post', { method: 'POST', body: form }) - .then(res => res.json()) - .then(json => console.log(json)); - -// OR, using custom headers -// NOTE: getHeaders() is non-standard API - -const form = new FormData(); -form.append('a', 1); - -const options = { - method: 'POST', - body: form, - headers: form.getHeaders() -} - -fetch('https://httpbin.org/post', options) - .then(res => res.json()) - .then(json => console.log(json)); -``` - -#### Request cancellation with AbortSignal - -> NOTE: You may cancel streamed requests only on Node >= v8.0.0 - -You may cancel requests with `AbortController`. A suggested implementation is [`abort-controller`](https://www.npmjs.com/package/abort-controller). - -An example of timing out a request after 150ms could be achieved as the following: - -```js -import AbortController from 'abort-controller'; - -const controller = new AbortController(); -const timeout = setTimeout( - () => { controller.abort(); }, - 150, -); - -fetch(url, { signal: controller.signal }) - .then(res => res.json()) - .then( - data => { - useData(data) - }, - err => { - if (err.name === 'AbortError') { - // request was aborted - } - }, - ) - .finally(() => { - clearTimeout(timeout); - }); -``` - -See [test cases](https://github.com/bitinn/node-fetch/blob/master/test/test.js) for more examples. - - -## API - -### fetch(url[, options]) - -- `url` A string representing the URL for fetching -- `options` [Options](#fetch-options) for the HTTP(S) request -- Returns: Promise<[Response](#class-response)> - -Perform an HTTP(S) fetch. - -`url` should be an absolute url, such as `https://example.com/`. A path-relative URL (`/file/under/root`) or protocol-relative URL (`//can-be-http-or-https.com/`) will result in a rejected `Promise`. - - -### Options - -The default values are shown after each option key. - -```js -{ - // These properties are part of the Fetch Standard - method: 'GET', - headers: {}, // request headers. format is the identical to that accepted by the Headers constructor (see below) - body: null, // request body. can be null, a string, a Buffer, a Blob, or a Node.js Readable stream - redirect: 'follow', // set to `manual` to extract redirect headers, `error` to reject redirect - signal: null, // pass an instance of AbortSignal to optionally abort requests - - // The following properties are node-fetch extensions - follow: 20, // maximum redirect count. 0 to not follow redirect - timeout: 0, // req/res timeout in ms, it resets on redirect. 0 to disable (OS limit applies). Signal is recommended instead. - compress: true, // support gzip/deflate content encoding. false to disable - size: 0, // maximum response body size in bytes. 0 to disable - agent: null // http(s).Agent instance or function that returns an instance (see below) -} -``` - -##### Default Headers - -If no values are set, the following request headers will be sent automatically: - -Header | Value -------------------- | -------------------------------------------------------- -`Accept-Encoding` | `gzip,deflate` _(when `options.compress === true`)_ -`Accept` | `*/*` -`Content-Length` | _(automatically calculated, if possible)_ -`Transfer-Encoding` | `chunked` _(when `req.body` is a stream)_ -`User-Agent` | `node-fetch/1.0 (+https://github.com/bitinn/node-fetch)` - -Note: when `body` is a `Stream`, `Content-Length` is not set automatically. - -##### Custom Agent - -The `agent` option allows you to specify networking related options which are out of the scope of Fetch, including and not limited to the following: - -- Support self-signed certificate -- Use only IPv4 or IPv6 -- Custom DNS Lookup - -See [`http.Agent`](https://nodejs.org/api/http.html#http_new_agent_options) for more information. - -If no agent is specified, the default agent provided by Node.js is used. Note that [this changed in Node.js 19](https://github.com/nodejs/node/blob/4267b92604ad78584244488e7f7508a690cb80d0/lib/_http_agent.js#L564) to have `keepalive` true by default. If you wish to enable `keepalive` in an earlier version of Node.js, you can override the agent as per the following code sample. - -In addition, the `agent` option accepts a function that returns `http`(s)`.Agent` instance given current [URL](https://nodejs.org/api/url.html), this is useful during a redirection chain across HTTP and HTTPS protocol. - -```js -const httpAgent = new http.Agent({ - keepAlive: true -}); -const httpsAgent = new https.Agent({ - keepAlive: true -}); - -const options = { - agent: function (_parsedURL) { - if (_parsedURL.protocol == 'http:') { - return httpAgent; - } else { - return httpsAgent; - } - } -} -``` - - -### Class: Request - -An HTTP(S) request containing information about URL, method, headers, and the body. This class implements the [Body](#iface-body) interface. - -Due to the nature of Node.js, the following properties are not implemented at this moment: - -- `type` -- `destination` -- `referrer` -- `referrerPolicy` -- `mode` -- `credentials` -- `cache` -- `integrity` -- `keepalive` - -The following node-fetch extension properties are provided: - -- `follow` -- `compress` -- `counter` -- `agent` - -See [options](#fetch-options) for exact meaning of these extensions. - -#### new Request(input[, options]) - -*(spec-compliant)* - -- `input` A string representing a URL, or another `Request` (which will be cloned) -- `options` [Options][#fetch-options] for the HTTP(S) request - -Constructs a new `Request` object. The constructor is identical to that in the [browser](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request). - -In most cases, directly `fetch(url, options)` is simpler than creating a `Request` object. - - -### Class: Response - -An HTTP(S) response. This class implements the [Body](#iface-body) interface. - -The following properties are not implemented in node-fetch at this moment: - -- `Response.error()` -- `Response.redirect()` -- `type` -- `trailer` - -#### new Response([body[, options]]) - -*(spec-compliant)* - -- `body` A `String` or [`Readable` stream][node-readable] -- `options` A [`ResponseInit`][response-init] options dictionary - -Constructs a new `Response` object. The constructor is identical to that in the [browser](https://developer.mozilla.org/en-US/docs/Web/API/Response/Response). - -Because Node.js does not implement service workers (for which this class was designed), one rarely has to construct a `Response` directly. - -#### response.ok - -*(spec-compliant)* - -Convenience property representing if the request ended normally. Will evaluate to true if the response status was greater than or equal to 200 but smaller than 300. - -#### response.redirected - -*(spec-compliant)* - -Convenience property representing if the request has been redirected at least once. Will evaluate to true if the internal redirect counter is greater than 0. - - -### Class: Headers - -This class allows manipulating and iterating over a set of HTTP headers. All methods specified in the [Fetch Standard][whatwg-fetch] are implemented. - -#### new Headers([init]) - -*(spec-compliant)* - -- `init` Optional argument to pre-fill the `Headers` object - -Construct a new `Headers` object. `init` can be either `null`, a `Headers` object, an key-value map object or any iterable object. - -```js -// Example adapted from https://fetch.spec.whatwg.org/#example-headers-class - -const meta = { - 'Content-Type': 'text/xml', - 'Breaking-Bad': '<3' -}; -const headers = new Headers(meta); - -// The above is equivalent to -const meta = [ - [ 'Content-Type', 'text/xml' ], - [ 'Breaking-Bad', '<3' ] -]; -const headers = new Headers(meta); - -// You can in fact use any iterable objects, like a Map or even another Headers -const meta = new Map(); -meta.set('Content-Type', 'text/xml'); -meta.set('Breaking-Bad', '<3'); -const headers = new Headers(meta); -const copyOfHeaders = new Headers(headers); -``` - - -### Interface: Body - -`Body` is an abstract interface with methods that are applicable to both `Request` and `Response` classes. - -The following methods are not yet implemented in node-fetch at this moment: - -- `formData()` - -#### body.body - -*(deviation from spec)* - -* Node.js [`Readable` stream][node-readable] - -Data are encapsulated in the `Body` object. Note that while the [Fetch Standard][whatwg-fetch] requires the property to always be a WHATWG `ReadableStream`, in node-fetch it is a Node.js [`Readable` stream][node-readable]. - -#### body.bodyUsed - -*(spec-compliant)* - -* `Boolean` - -A boolean property for if this body has been consumed. Per the specs, a consumed body cannot be used again. - -#### body.arrayBuffer() -#### body.blob() -#### body.json() -#### body.text() - -*(spec-compliant)* - -* Returns: Promise - -Consume the body and return a promise that will resolve to one of these formats. - -#### body.buffer() - -*(node-fetch extension)* - -* Returns: Promise<Buffer> - -Consume the body and return a promise that will resolve to a Buffer. - -#### body.textConverted() - -*(node-fetch extension)* - -* Returns: Promise<String> - -Identical to `body.text()`, except instead of always converting to UTF-8, encoding sniffing will be performed and text converted to UTF-8 if possible. - -(This API requires an optional dependency of the npm package [encoding](https://www.npmjs.com/package/encoding), which you need to install manually. `webpack` users may see [a warning message](https://github.com/bitinn/node-fetch/issues/412#issuecomment-379007792) due to this optional dependency.) - - -### Class: FetchError - -*(node-fetch extension)* - -An operational error in the fetching process. See [ERROR-HANDLING.md][] for more info. - - -### Class: AbortError - -*(node-fetch extension)* - -An Error thrown when the request is aborted in response to an `AbortSignal`'s `abort` event. It has a `name` property of `AbortError`. See [ERROR-HANDLING.MD][] for more info. - -## Acknowledgement - -Thanks to [github/fetch](https://github.com/github/fetch) for providing a solid implementation reference. - -`node-fetch` v1 was maintained by [@bitinn](https://github.com/bitinn); v2 was maintained by [@TimothyGu](https://github.com/timothygu), [@bitinn](https://github.com/bitinn) and [@jimmywarting](https://github.com/jimmywarting); v2 readme is written by [@jkantr](https://github.com/jkantr). - -## License - -MIT - -[npm-image]: https://flat.badgen.net/npm/v/node-fetch -[npm-url]: https://www.npmjs.com/package/node-fetch -[travis-image]: https://flat.badgen.net/travis/bitinn/node-fetch -[travis-url]: https://travis-ci.org/bitinn/node-fetch -[codecov-image]: https://flat.badgen.net/codecov/c/github/bitinn/node-fetch/master -[codecov-url]: https://codecov.io/gh/bitinn/node-fetch -[install-size-image]: https://flat.badgen.net/packagephobia/install/node-fetch -[install-size-url]: https://packagephobia.now.sh/result?p=node-fetch -[discord-image]: https://img.shields.io/discord/619915844268326952?color=%237289DA&label=Discord&style=flat-square -[discord-url]: https://discord.gg/Zxbndcm -[opencollective-image]: https://opencollective.com/node-fetch/backers.svg -[opencollective-url]: https://opencollective.com/node-fetch -[whatwg-fetch]: https://fetch.spec.whatwg.org/ -[response-init]: https://fetch.spec.whatwg.org/#responseinit -[node-readable]: https://nodejs.org/api/stream.html#stream_readable_streams -[mdn-headers]: https://developer.mozilla.org/en-US/docs/Web/API/Headers -[LIMITS.md]: https://github.com/bitinn/node-fetch/blob/master/LIMITS.md -[ERROR-HANDLING.md]: https://github.com/bitinn/node-fetch/blob/master/ERROR-HANDLING.md -[UPGRADE-GUIDE.md]: https://github.com/bitinn/node-fetch/blob/master/UPGRADE-GUIDE.md diff --git a/node_modules/node-fetch/browser.js b/node_modules/node-fetch/browser.js deleted file mode 100644 index ee86265..0000000 --- a/node_modules/node-fetch/browser.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; - -// ref: https://github.com/tc39/proposal-global -var getGlobal = function () { - // the only reliable means to get the global object is - // `Function('return this')()` - // However, this causes CSP violations in Chrome apps. - if (typeof self !== 'undefined') { return self; } - if (typeof window !== 'undefined') { return window; } - if (typeof global !== 'undefined') { return global; } - throw new Error('unable to locate global object'); -} - -var globalObject = getGlobal(); - -module.exports = exports = globalObject.fetch; - -// Needed for TypeScript and Webpack. -if (globalObject.fetch) { - exports.default = globalObject.fetch.bind(globalObject); -} - -exports.Headers = globalObject.Headers; -exports.Request = globalObject.Request; -exports.Response = globalObject.Response; diff --git a/node_modules/node-fetch/lib/index.es.js b/node_modules/node-fetch/lib/index.es.js deleted file mode 100644 index aae9799..0000000 --- a/node_modules/node-fetch/lib/index.es.js +++ /dev/null @@ -1,1777 +0,0 @@ -process.emitWarning("The .es.js file is deprecated. Use .mjs instead."); - -import Stream from 'stream'; -import http from 'http'; -import Url from 'url'; -import whatwgUrl from 'whatwg-url'; -import https from 'https'; -import zlib from 'zlib'; - -// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js - -// fix for "Readable" isn't a named export issue -const Readable = Stream.Readable; - -const BUFFER = Symbol('buffer'); -const TYPE = Symbol('type'); - -class Blob { - constructor() { - this[TYPE] = ''; - - const blobParts = arguments[0]; - const options = arguments[1]; - - const buffers = []; - let size = 0; - - if (blobParts) { - const a = blobParts; - const length = Number(a.length); - for (let i = 0; i < length; i++) { - const element = a[i]; - let buffer; - if (element instanceof Buffer) { - buffer = element; - } else if (ArrayBuffer.isView(element)) { - buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); - } else if (element instanceof ArrayBuffer) { - buffer = Buffer.from(element); - } else if (element instanceof Blob) { - buffer = element[BUFFER]; - } else { - buffer = Buffer.from(typeof element === 'string' ? element : String(element)); - } - size += buffer.length; - buffers.push(buffer); - } - } - - this[BUFFER] = Buffer.concat(buffers); - - let type = options && options.type !== undefined && String(options.type).toLowerCase(); - if (type && !/[^\u0020-\u007E]/.test(type)) { - this[TYPE] = type; - } - } - get size() { - return this[BUFFER].length; - } - get type() { - return this[TYPE]; - } - text() { - return Promise.resolve(this[BUFFER].toString()); - } - arrayBuffer() { - const buf = this[BUFFER]; - const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - return Promise.resolve(ab); - } - stream() { - const readable = new Readable(); - readable._read = function () {}; - readable.push(this[BUFFER]); - readable.push(null); - return readable; - } - toString() { - return '[object Blob]'; - } - slice() { - const size = this.size; - - const start = arguments[0]; - const end = arguments[1]; - let relativeStart, relativeEnd; - if (start === undefined) { - relativeStart = 0; - } else if (start < 0) { - relativeStart = Math.max(size + start, 0); - } else { - relativeStart = Math.min(start, size); - } - if (end === undefined) { - relativeEnd = size; - } else if (end < 0) { - relativeEnd = Math.max(size + end, 0); - } else { - relativeEnd = Math.min(end, size); - } - const span = Math.max(relativeEnd - relativeStart, 0); - - const buffer = this[BUFFER]; - const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); - const blob = new Blob([], { type: arguments[2] }); - blob[BUFFER] = slicedBuffer; - return blob; - } -} - -Object.defineProperties(Blob.prototype, { - size: { enumerable: true }, - type: { enumerable: true }, - slice: { enumerable: true } -}); - -Object.defineProperty(Blob.prototype, Symbol.toStringTag, { - value: 'Blob', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * fetch-error.js - * - * FetchError interface for operational errors - */ - -/** - * Create FetchError instance - * - * @param String message Error message for human - * @param String type Error type for machine - * @param String systemError For Node.js system error - * @return FetchError - */ -function FetchError(message, type, systemError) { - Error.call(this, message); - - this.message = message; - this.type = type; - - // when err.type is `system`, err.code contains system error code - if (systemError) { - this.code = this.errno = systemError.code; - } - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -FetchError.prototype = Object.create(Error.prototype); -FetchError.prototype.constructor = FetchError; -FetchError.prototype.name = 'FetchError'; - -let convert; -try { - convert = require('encoding').convert; -} catch (e) {} - -const INTERNALS = Symbol('Body internals'); - -// fix an issue where "PassThrough" isn't a named export for node <10 -const PassThrough = Stream.PassThrough; - -/** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -function Body(body) { - var _this = this; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref$size = _ref.size; - - let size = _ref$size === undefined ? 0 : _ref$size; - var _ref$timeout = _ref.timeout; - let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; - - if (body == null) { - // body is undefined or null - body = null; - } else if (isURLSearchParams(body)) { - // body is a URLSearchParams - body = Buffer.from(body.toString()); - } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { - // body is ArrayBuffer - body = Buffer.from(body); - } else if (ArrayBuffer.isView(body)) { - // body is ArrayBufferView - body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); - } else if (body instanceof Stream) ; else { - // none of the above - // coerce to string then buffer - body = Buffer.from(String(body)); - } - this[INTERNALS] = { - body, - disturbed: false, - error: null - }; - this.size = size; - this.timeout = timeout; - - if (body instanceof Stream) { - body.on('error', function (err) { - const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); - _this[INTERNALS].error = error; - }); - } -} - -Body.prototype = { - get body() { - return this[INTERNALS].body; - }, - - get bodyUsed() { - return this[INTERNALS].disturbed; - }, - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - arrayBuffer() { - return consumeBody.call(this).then(function (buf) { - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - }); - }, - - /** - * Return raw response as Blob - * - * @return Promise - */ - blob() { - let ct = this.headers && this.headers.get('content-type') || ''; - return consumeBody.call(this).then(function (buf) { - return Object.assign( - // Prevent copying - new Blob([], { - type: ct.toLowerCase() - }), { - [BUFFER]: buf - }); - }); - }, - - /** - * Decode response as json - * - * @return Promise - */ - json() { - var _this2 = this; - - return consumeBody.call(this).then(function (buffer) { - try { - return JSON.parse(buffer.toString()); - } catch (err) { - return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); - } - }); - }, - - /** - * Decode response as text - * - * @return Promise - */ - text() { - return consumeBody.call(this).then(function (buffer) { - return buffer.toString(); - }); - }, - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - buffer() { - return consumeBody.call(this); - }, - - /** - * Decode response as text, while automatically detecting the encoding and - * trying to decode to UTF-8 (non-spec api) - * - * @return Promise - */ - textConverted() { - var _this3 = this; - - return consumeBody.call(this).then(function (buffer) { - return convertBody(buffer, _this3.headers); - }); - } -}; - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true } -}); - -Body.mixIn = function (proto) { - for (const name of Object.getOwnPropertyNames(Body.prototype)) { - // istanbul ignore else: future proof - if (!(name in proto)) { - const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); - Object.defineProperty(proto, name, desc); - } - } -}; - -/** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ -function consumeBody() { - var _this4 = this; - - if (this[INTERNALS].disturbed) { - return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); - } - - this[INTERNALS].disturbed = true; - - if (this[INTERNALS].error) { - return Body.Promise.reject(this[INTERNALS].error); - } - - let body = this.body; - - // body is null - if (body === null) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is blob - if (isBlob(body)) { - body = body.stream(); - } - - // body is buffer - if (Buffer.isBuffer(body)) { - return Body.Promise.resolve(body); - } - - // istanbul ignore if: should never happen - if (!(body instanceof Stream)) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is stream - // get ready to actually consume the body - let accum = []; - let accumBytes = 0; - let abort = false; - - return new Body.Promise(function (resolve, reject) { - let resTimeout; - - // allow timeout on slow response body - if (_this4.timeout) { - resTimeout = setTimeout(function () { - abort = true; - reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); - }, _this4.timeout); - } - - // handle stream errors - body.on('error', function (err) { - if (err.name === 'AbortError') { - // if the request was aborted, reject with this Error - abort = true; - reject(err); - } else { - // other errors, such as incorrect content-encoding - reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - - body.on('data', function (chunk) { - if (abort || chunk === null) { - return; - } - - if (_this4.size && accumBytes + chunk.length > _this4.size) { - abort = true; - reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); - return; - } - - accumBytes += chunk.length; - accum.push(chunk); - }); - - body.on('end', function () { - if (abort) { - return; - } - - clearTimeout(resTimeout); - - try { - resolve(Buffer.concat(accum, accumBytes)); - } catch (err) { - // handle streams that have accumulated too much data (issue #414) - reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - }); -} - -/** - * Detect buffer encoding and convert to target encoding - * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding - * - * @param Buffer buffer Incoming buffer - * @param String encoding Target encoding - * @return String - */ -function convertBody(buffer, headers) { - if (typeof convert !== 'function') { - throw new Error('The package `encoding` must be installed to use the textConverted() function'); - } - - const ct = headers.get('content-type'); - let charset = 'utf-8'; - let res, str; - - // header - if (ct) { - res = /charset=([^;]*)/i.exec(ct); - } - - // no charset in content type, peek at response body for at most 1024 bytes - str = buffer.slice(0, 1024).toString(); - - // html5 - if (!res && str) { - res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; - - this[MAP] = Object.create(null); - - if (init instanceof Headers) { - const rawHeaders = init.raw(); - const headerNames = Object.keys(rawHeaders); - - for (const headerName of headerNames) { - for (const value of rawHeaders[headerName]) { - this.append(headerName, value); - } - } - - return; - } - - // We don't worry about converting prop to ByteString here as append() - // will handle it. - if (init == null) ; else if (typeof init === 'object') { - const method = init[Symbol.iterator]; - if (method != null) { - if (typeof method !== 'function') { - throw new TypeError('Header pairs must be iterable'); - } - - // sequence> - // Note: per spec we have to first exhaust the lists then process them - const pairs = []; - for (const pair of init) { - if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { - throw new TypeError('Each header pair must be iterable'); - } - pairs.push(Array.from(pair)); - } - - for (const pair of pairs) { - if (pair.length !== 2) { - throw new TypeError('Each header pair must be a name/value tuple'); - } - this.append(pair[0], pair[1]); - } - } else { - // record - for (const key of Object.keys(init)) { - const value = init[key]; - this.append(key, value); - } - } - } else { - throw new TypeError('Provided initializer must be an object'); - } - } - - /** - * Return combined header value given name - * - * @param String name Header name - * @return Mixed - */ - get(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key === undefined) { - return null; - } - - return this[MAP][key].join(', '); - } - - /** - * Iterate over all headers - * - * @param Function callback Executed for each item with parameters (value, name, thisArg) - * @param Boolean thisArg `this` context for callback function - * @return Void - */ - forEach(callback) { - let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - - let pairs = getHeaders(this); - let i = 0; - while (i < pairs.length) { - var _pairs$i = pairs[i]; - const name = _pairs$i[0], - value = _pairs$i[1]; - - callback.call(thisArg, value, name, this); - pairs = getHeaders(this); - i++; - } - } - - /** - * Overwrite header values given name - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - set(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - this[MAP][key !== undefined ? key : name] = [value]; - } - - /** - * Append a value onto existing header - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - append(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - if (key !== undefined) { - this[MAP][key].push(value); - } else { - this[MAP][name] = [value]; - } - } - - /** - * Check for header name existence - * - * @param String name Header name - * @return Boolean - */ - has(name) { - name = `${name}`; - validateName(name); - return find(this[MAP], name) !== undefined; - } - - /** - * Delete all header values given name - * - * @param String name Header name - * @return Void - */ - delete(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key !== undefined) { - delete this[MAP][key]; - } - } - - /** - * Return raw headers (non-spec api) - * - * @return Object - */ - raw() { - return this[MAP]; - } - - /** - * Get an iterator on keys. - * - * @return Iterator - */ - keys() { - return createHeadersIterator(this, 'key'); - } - - /** - * Get an iterator on values. - * - * @return Iterator - */ - values() { - return createHeadersIterator(this, 'value'); - } - - /** - * Get an iterator on entries. - * - * This is the default iterator of the Headers object. - * - * @return Iterator - */ - [Symbol.iterator]() { - return createHeadersIterator(this, 'key+value'); - } -} -Headers.prototype.entries = Headers.prototype[Symbol.iterator]; - -Object.defineProperty(Headers.prototype, Symbol.toStringTag, { - value: 'Headers', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Headers.prototype, { - get: { enumerable: true }, - forEach: { enumerable: true }, - set: { enumerable: true }, - append: { enumerable: true }, - has: { enumerable: true }, - delete: { enumerable: true }, - keys: { enumerable: true }, - values: { enumerable: true }, - entries: { enumerable: true } -}); - -function getHeaders(headers) { - let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; - - const keys = Object.keys(headers[MAP]).sort(); - return keys.map(kind === 'key' ? function (k) { - return k.toLowerCase(); - } : kind === 'value' ? function (k) { - return headers[MAP][k].join(', '); - } : function (k) { - return [k.toLowerCase(), headers[MAP][k].join(', ')]; - }); -} - -const INTERNAL = Symbol('internal'); - -function createHeadersIterator(target, kind) { - const iterator = Object.create(HeadersIteratorPrototype); - iterator[INTERNAL] = { - target, - kind, - index: 0 - }; - return iterator; -} - -const HeadersIteratorPrototype = Object.setPrototypeOf({ - next() { - // istanbul ignore if - if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { - throw new TypeError('Value of `this` is not a HeadersIterator'); - } - - var _INTERNAL = this[INTERNAL]; - const target = _INTERNAL.target, - kind = _INTERNAL.kind, - index = _INTERNAL.index; - - const values = getHeaders(target, kind); - const len = values.length; - if (index >= len) { - return { - value: undefined, - done: true - }; - } - - this[INTERNAL].index = index + 1; - - return { - value: values[index], - done: false - }; - } -}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); - -Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { - value: 'HeadersIterator', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * Export the Headers object in a form that Node.js can consume. - * - * @param Headers headers - * @return Object - */ -function exportNodeCompatibleHeaders(headers) { - const obj = Object.assign({ __proto__: null }, headers[MAP]); - - // http.request() only supports string as Host header. This hack makes - // specifying custom Host header possible. - const hostHeaderKey = find(headers[MAP], 'Host'); - if (hostHeaderKey !== undefined) { - obj[hostHeaderKey] = obj[hostHeaderKey][0]; - } - - return obj; -} - -/** - * Create a Headers object from an object of headers, ignoring those that do - * not conform to HTTP grammar productions. - * - * @param Object obj Object of headers - * @return Headers - */ -function createHeadersLenient(obj) { - const headers = new Headers(); - for (const name of Object.keys(obj)) { - if (invalidTokenRegex.test(name)) { - continue; - } - if (Array.isArray(obj[name])) { - for (const val of obj[name]) { - if (invalidHeaderCharRegex.test(val)) { - continue; - } - if (headers[MAP][name] === undefined) { - headers[MAP][name] = [val]; - } else { - headers[MAP][name].push(val); - } - } - } else if (!invalidHeaderCharRegex.test(obj[name])) { - headers[MAP][name] = [obj[name]]; - } - } - return headers; -} - -const INTERNALS$1 = Symbol('Response internals'); - -// fix an issue where "STATUS_CODES" aren't a named export for node <10 -const STATUS_CODES = http.STATUS_CODES; - -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Response { - constructor() { - let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - Body.call(this, body, opts); - - const status = opts.status || 200; - const headers = new Headers(opts.headers); - - if (body != null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - this[INTERNALS$1] = { - url: opts.url, - status, - statusText: opts.statusText || STATUS_CODES[status], - headers, - counter: opts.counter - }; - } - - get url() { - return this[INTERNALS$1].url || ''; - } - - get status() { - return this[INTERNALS$1].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; - } - - get redirected() { - return this[INTERNALS$1].counter > 0; - } - - get statusText() { - return this[INTERNALS$1].statusText; - } - - get headers() { - return this[INTERNALS$1].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - return new Response(clone(this), { - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected - }); - } -} - -Body.mixIn(Response.prototype); - -Object.defineProperties(Response.prototype, { - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true } -}); - -Object.defineProperty(Response.prototype, Symbol.toStringTag, { - value: 'Response', - writable: false, - enumerable: false, - configurable: true -}); - -const INTERNALS$2 = Symbol('Request internals'); -const URL = Url.URL || whatwgUrl.URL; - -// fix an issue where "format", "parse" aren't a named export for node <10 -const parse_url = Url.parse; -const format_url = Url.format; - -/** - * Wrapper around `new URL` to handle arbitrary URLs - * - * @param {string} urlStr - * @return {void} - */ -function parseURL(urlStr) { - /* - Check whether the URL is absolute or not - Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 - Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 - */ - if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { - urlStr = new URL(urlStr).toString(); - } - - // Fallback to old implementation for arbitrary URLs - return parse_url(urlStr); -} - -const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; - -/** - * Check if a value is an instance of Request. - * - * @param Mixed input - * @return Boolean - */ -function isRequest(input) { - return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; -} - -function isAbortSignal(signal) { - const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); - return !!(proto && proto.constructor.name === 'AbortSignal'); -} - -/** - * Request class - * - * @param Mixed input Url or Request instance - * @param Object init Custom options - * @return Void - */ -class Request { - constructor(input) { - let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - let parsedURL; - - // normalize input - if (!isRequest(input)) { - if (input && input.href) { - // in order to support Node.js' Url objects; though WHATWG's URL objects - // will fall into this branch also (since their `toString()` will return - // `href` property anyway) - parsedURL = parseURL(input.href); - } else { - // coerce input to a string before attempting to parse - parsedURL = parseURL(`${input}`); - } - input = {}; - } else { - parsedURL = parseURL(input.url); - } - - let method = init.method || input.method || 'GET'; - method = method.toUpperCase(); - - if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { - throw new TypeError('Request with GET/HEAD method cannot have body'); - } - - let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; - - Body.call(this, inputBody, { - timeout: init.timeout || input.timeout || 0, - size: init.size || input.size || 0 - }); - - const headers = new Headers(init.headers || input.headers || {}); - - if (inputBody != null && !headers.has('Content-Type')) { - const contentType = extractContentType(inputBody); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - let signal = isRequest(input) ? input.signal : null; - if ('signal' in init) signal = init.signal; - - if (signal != null && !isAbortSignal(signal)) { - throw new TypeError('Expected signal to be an instanceof AbortSignal'); - } - - this[INTERNALS$2] = { - method, - redirect: init.redirect || input.redirect || 'follow', - headers, - parsedURL, - signal - }; - - // node-fetch-only options - this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; - this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; - this.counter = init.counter || input.counter || 0; - this.agent = init.agent || input.agent; - } - - get method() { - return this[INTERNALS$2].method; - } - - get url() { - return format_url(this[INTERNALS$2].parsedURL); - } - - get headers() { - return this[INTERNALS$2].headers; - } - - get redirect() { - return this[INTERNALS$2].redirect; - } - - get signal() { - return this[INTERNALS$2].signal; - } - - /** - * Clone this request - * - * @return Request - */ - clone() { - return new Request(this); - } -} - -Body.mixIn(Request.prototype); - -Object.defineProperty(Request.prototype, Symbol.toStringTag, { - value: 'Request', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Request.prototype, { - method: { enumerable: true }, - url: { enumerable: true }, - headers: { enumerable: true }, - redirect: { enumerable: true }, - clone: { enumerable: true }, - signal: { enumerable: true } -}); - -/** - * Convert a Request to Node.js http request options. - * - * @param Request A Request instance - * @return Object The options object to be passed to http.request - */ -function getNodeRequestOptions(request) { - const parsedURL = request[INTERNALS$2].parsedURL; - const headers = new Headers(request[INTERNALS$2].headers); - - // fetch step 1.3 - if (!headers.has('Accept')) { - headers.set('Accept', '*/*'); - } - - // Basic fetch - if (!parsedURL.protocol || !parsedURL.hostname) { - throw new TypeError('Only absolute URLs are supported'); - } - - if (!/^https?:$/.test(parsedURL.protocol)) { - throw new TypeError('Only HTTP(S) protocols are supported'); - } - - if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { - throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); - } - - // HTTP-network-or-cache fetch steps 2.4-2.7 - let contentLengthValue = null; - if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { - contentLengthValue = '0'; - } - if (request.body != null) { - const totalBytes = getTotalBytes(request); - if (typeof totalBytes === 'number') { - contentLengthValue = String(totalBytes); - } - } - if (contentLengthValue) { - headers.set('Content-Length', contentLengthValue); - } - - // HTTP-network-or-cache fetch step 2.11 - if (!headers.has('User-Agent')) { - headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); - } - - // HTTP-network-or-cache fetch step 2.15 - if (request.compress && !headers.has('Accept-Encoding')) { - headers.set('Accept-Encoding', 'gzip,deflate'); - } - - let agent = request.agent; - if (typeof agent === 'function') { - agent = agent(parsedURL); - } - - // HTTP-network fetch step 4.2 - // chunked encoding is handled by Node.js - - return Object.assign({}, parsedURL, { - method: request.method, - headers: exportNodeCompatibleHeaders(headers), - agent - }); -} - -/** - * abort-error.js - * - * AbortError interface for cancelled requests - */ - -/** - * Create AbortError instance - * - * @param String message Error message for human - * @return AbortError - */ -function AbortError(message) { - Error.call(this, message); - - this.type = 'aborted'; - this.message = message; - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -AbortError.prototype = Object.create(Error.prototype); -AbortError.prototype.constructor = AbortError; -AbortError.prototype.name = 'AbortError'; - -const URL$1 = Url.URL || whatwgUrl.URL; - -// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 -const PassThrough$1 = Stream.PassThrough; - -const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { - const orig = new URL$1(original).hostname; - const dest = new URL$1(destination).hostname; - - return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); -}; - -/** - * isSameProtocol reports whether the two provided URLs use the same protocol. - * - * Both domains must already be in canonical form. - * @param {string|URL} original - * @param {string|URL} destination - */ -const isSameProtocol = function isSameProtocol(destination, original) { - const orig = new URL$1(original).protocol; - const dest = new URL$1(destination).protocol; - - return orig === dest; -}; - -/** - * Fetch function - * - * @param Mixed url Absolute url or Request instance - * @param Object opts Fetch options - * @return Promise - */ -function fetch(url, opts) { - - // allow custom promise - if (!fetch.Promise) { - throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); - } - - Body.Promise = fetch.Promise; - - // wrap http.request into fetch - return new fetch.Promise(function (resolve, reject) { - // build request object - const request = new Request(url, opts); - const options = getNodeRequestOptions(request); - - const send = (options.protocol === 'https:' ? https : http).request; - const signal = request.signal; - - let response = null; - - const abort = function abort() { - let error = new AbortError('The user aborted a request.'); - reject(error); - if (request.body && request.body instanceof Stream.Readable) { - destroyStream(request.body, error); - } - if (!response || !response.body) return; - response.body.emit('error', error); - }; - - if (signal && signal.aborted) { - abort(); - return; - } - - const abortAndFinalize = function abortAndFinalize() { - abort(); - finalize(); - }; - - // send request - const req = send(options); - let reqTimeout; - - if (signal) { - signal.addEventListener('abort', abortAndFinalize); - } - - function finalize() { - req.abort(); - if (signal) signal.removeEventListener('abort', abortAndFinalize); - clearTimeout(reqTimeout); - } - - if (request.timeout) { - req.once('socket', function (socket) { - reqTimeout = setTimeout(function () { - reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); - finalize(); - }, request.timeout); - }); - } - - req.on('error', function (err) { - reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); - - if (response && response.body) { - destroyStream(response.body, err); - } - - finalize(); - }); - - fixResponseChunkedTransferBadEnding(req, function (err) { - if (signal && signal.aborted) { - return; - } - - if (response && response.body) { - destroyStream(response.body, err); - } - }); - - /* c8 ignore next 18 */ - if (parseInt(process.version.substring(1)) < 14) { - // Before Node.js 14, pipeline() does not fully support async iterators and does not always - // properly handle when the socket close/end events are out of order. - req.on('socket', function (s) { - s.addListener('close', function (hadError) { - // if a data listener is still present we didn't end cleanly - const hasDataListener = s.listenerCount('data') > 0; - - // if end happened before close but the socket didn't emit an error, do it now - if (response && hasDataListener && !hadError && !(signal && signal.aborted)) { - const err = new Error('Premature close'); - err.code = 'ERR_STREAM_PREMATURE_CLOSE'; - response.body.emit('error', err); - } - }); - }); - } - - req.on('response', function (res) { - clearTimeout(reqTimeout); - - const headers = createHeadersLenient(res.headers); - - // HTTP fetch step 5 - if (fetch.isRedirect(res.statusCode)) { - // HTTP fetch step 5.2 - const location = headers.get('Location'); - - // HTTP fetch step 5.3 - let locationURL = null; - try { - locationURL = location === null ? null : new URL$1(location, request.url).toString(); - } catch (err) { - // error here can only be invalid URL in Location: header - // do not throw when options.redirect == manual - // let the user extract the errorneous redirect URL - if (request.redirect !== 'manual') { - reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); - finalize(); - return; - } - } - - // HTTP fetch step 5.5 - switch (request.redirect) { - case 'error': - reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); - finalize(); - return; - case 'manual': - // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. - if (locationURL !== null) { - // handle corrupted header - try { - headers.set('Location', locationURL); - } catch (err) { - // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request - reject(err); - } - } - break; - case 'follow': - // HTTP-redirect fetch step 2 - if (locationURL === null) { - break; - } - - // HTTP-redirect fetch step 5 - if (request.counter >= request.follow) { - reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 6 (counter increment) - // Create a new Request object. - const requestOpts = { - headers: new Headers(request.headers), - follow: request.follow, - counter: request.counter + 1, - agent: request.agent, - compress: request.compress, - method: request.method, - body: request.body, - signal: request.signal, - timeout: request.timeout, - size: request.size - }; - - if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) { - for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { - requestOpts.headers.delete(name); - } - } - - // HTTP-redirect fetch step 9 - if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { - reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 11 - if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { - requestOpts.method = 'GET'; - requestOpts.body = undefined; - requestOpts.headers.delete('content-length'); - } - - // HTTP-redirect fetch step 15 - resolve(fetch(new Request(locationURL, requestOpts))); - finalize(); - return; - } - } - - // prepare response - res.once('end', function () { - if (signal) signal.removeEventListener('abort', abortAndFinalize); - }); - let body = res.pipe(new PassThrough$1()); - - const response_options = { - url: request.url, - status: res.statusCode, - statusText: res.statusMessage, - headers: headers, - size: request.size, - timeout: request.timeout, - counter: request.counter - }; - - // HTTP-network fetch step 12.1.1.3 - const codings = headers.get('Content-Encoding'); - - // HTTP-network fetch step 12.1.1.4: handle content codings - - // in following scenarios we ignore compression support - // 1. compression support is disabled - // 2. HEAD request - // 3. no Content-Encoding header - // 4. no content response (204) - // 5. content not modified response (304) - if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { - response = new Response(body, response_options); - resolve(response); - return; - } - - // For Node v6+ - // Be less strict when decoding compressed responses, since sometimes - // servers send slightly invalid responses that are still accepted - // by common browsers. - // Always using Z_SYNC_FLUSH is what cURL does. - const zlibOptions = { - flush: zlib.Z_SYNC_FLUSH, - finishFlush: zlib.Z_SYNC_FLUSH - }; - - // for gzip - if (codings == 'gzip' || codings == 'x-gzip') { - body = body.pipe(zlib.createGunzip(zlibOptions)); - response = new Response(body, response_options); - resolve(response); - return; - } - - // for deflate - if (codings == 'deflate' || codings == 'x-deflate') { - // handle the infamous raw deflate response from old servers - // a hack for old IIS and Apache servers - const raw = res.pipe(new PassThrough$1()); - raw.once('data', function (chunk) { - // see http://stackoverflow.com/questions/37519828 - if ((chunk[0] & 0x0F) === 0x08) { - body = body.pipe(zlib.createInflate()); - } else { - body = body.pipe(zlib.createInflateRaw()); - } - response = new Response(body, response_options); - resolve(response); - }); - raw.on('end', function () { - // some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted. - if (!response) { - response = new Response(body, response_options); - resolve(response); - } - }); - return; - } - - // for br - if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { - body = body.pipe(zlib.createBrotliDecompress()); - response = new Response(body, response_options); - resolve(response); - return; - } - - // otherwise, use response as-is - response = new Response(body, response_options); - resolve(response); - }); - - writeToStream(req, request); - }); -} -function fixResponseChunkedTransferBadEnding(request, errorCallback) { - let socket; - - request.on('socket', function (s) { - socket = s; - }); - - request.on('response', function (response) { - const headers = response.headers; - - if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) { - response.once('close', function (hadError) { - // tests for socket presence, as in some situations the - // the 'socket' event is not triggered for the request - // (happens in deno), avoids `TypeError` - // if a data listener is still present we didn't end cleanly - const hasDataListener = socket && socket.listenerCount('data') > 0; - - if (hasDataListener && !hadError) { - const err = new Error('Premature close'); - err.code = 'ERR_STREAM_PREMATURE_CLOSE'; - errorCallback(err); - } - }); - } - }); -} - -function destroyStream(stream, err) { - if (stream.destroy) { - stream.destroy(err); - } else { - // node < 8 - stream.emit('error', err); - stream.end(); - } -} - -/** - * Redirect code matching - * - * @param Number code Status code - * @return Boolean - */ -fetch.isRedirect = function (code) { - return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; -}; - -// expose Promise -fetch.Promise = global.Promise; - -export default fetch; -export { Headers, Request, Response, FetchError, AbortError }; diff --git a/node_modules/node-fetch/lib/index.js b/node_modules/node-fetch/lib/index.js deleted file mode 100644 index 567ff5d..0000000 --- a/node_modules/node-fetch/lib/index.js +++ /dev/null @@ -1,1787 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var Stream = _interopDefault(require('stream')); -var http = _interopDefault(require('http')); -var Url = _interopDefault(require('url')); -var whatwgUrl = _interopDefault(require('whatwg-url')); -var https = _interopDefault(require('https')); -var zlib = _interopDefault(require('zlib')); - -// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js - -// fix for "Readable" isn't a named export issue -const Readable = Stream.Readable; - -const BUFFER = Symbol('buffer'); -const TYPE = Symbol('type'); - -class Blob { - constructor() { - this[TYPE] = ''; - - const blobParts = arguments[0]; - const options = arguments[1]; - - const buffers = []; - let size = 0; - - if (blobParts) { - const a = blobParts; - const length = Number(a.length); - for (let i = 0; i < length; i++) { - const element = a[i]; - let buffer; - if (element instanceof Buffer) { - buffer = element; - } else if (ArrayBuffer.isView(element)) { - buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); - } else if (element instanceof ArrayBuffer) { - buffer = Buffer.from(element); - } else if (element instanceof Blob) { - buffer = element[BUFFER]; - } else { - buffer = Buffer.from(typeof element === 'string' ? element : String(element)); - } - size += buffer.length; - buffers.push(buffer); - } - } - - this[BUFFER] = Buffer.concat(buffers); - - let type = options && options.type !== undefined && String(options.type).toLowerCase(); - if (type && !/[^\u0020-\u007E]/.test(type)) { - this[TYPE] = type; - } - } - get size() { - return this[BUFFER].length; - } - get type() { - return this[TYPE]; - } - text() { - return Promise.resolve(this[BUFFER].toString()); - } - arrayBuffer() { - const buf = this[BUFFER]; - const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - return Promise.resolve(ab); - } - stream() { - const readable = new Readable(); - readable._read = function () {}; - readable.push(this[BUFFER]); - readable.push(null); - return readable; - } - toString() { - return '[object Blob]'; - } - slice() { - const size = this.size; - - const start = arguments[0]; - const end = arguments[1]; - let relativeStart, relativeEnd; - if (start === undefined) { - relativeStart = 0; - } else if (start < 0) { - relativeStart = Math.max(size + start, 0); - } else { - relativeStart = Math.min(start, size); - } - if (end === undefined) { - relativeEnd = size; - } else if (end < 0) { - relativeEnd = Math.max(size + end, 0); - } else { - relativeEnd = Math.min(end, size); - } - const span = Math.max(relativeEnd - relativeStart, 0); - - const buffer = this[BUFFER]; - const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); - const blob = new Blob([], { type: arguments[2] }); - blob[BUFFER] = slicedBuffer; - return blob; - } -} - -Object.defineProperties(Blob.prototype, { - size: { enumerable: true }, - type: { enumerable: true }, - slice: { enumerable: true } -}); - -Object.defineProperty(Blob.prototype, Symbol.toStringTag, { - value: 'Blob', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * fetch-error.js - * - * FetchError interface for operational errors - */ - -/** - * Create FetchError instance - * - * @param String message Error message for human - * @param String type Error type for machine - * @param String systemError For Node.js system error - * @return FetchError - */ -function FetchError(message, type, systemError) { - Error.call(this, message); - - this.message = message; - this.type = type; - - // when err.type is `system`, err.code contains system error code - if (systemError) { - this.code = this.errno = systemError.code; - } - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -FetchError.prototype = Object.create(Error.prototype); -FetchError.prototype.constructor = FetchError; -FetchError.prototype.name = 'FetchError'; - -let convert; -try { - convert = require('encoding').convert; -} catch (e) {} - -const INTERNALS = Symbol('Body internals'); - -// fix an issue where "PassThrough" isn't a named export for node <10 -const PassThrough = Stream.PassThrough; - -/** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -function Body(body) { - var _this = this; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref$size = _ref.size; - - let size = _ref$size === undefined ? 0 : _ref$size; - var _ref$timeout = _ref.timeout; - let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; - - if (body == null) { - // body is undefined or null - body = null; - } else if (isURLSearchParams(body)) { - // body is a URLSearchParams - body = Buffer.from(body.toString()); - } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { - // body is ArrayBuffer - body = Buffer.from(body); - } else if (ArrayBuffer.isView(body)) { - // body is ArrayBufferView - body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); - } else if (body instanceof Stream) ; else { - // none of the above - // coerce to string then buffer - body = Buffer.from(String(body)); - } - this[INTERNALS] = { - body, - disturbed: false, - error: null - }; - this.size = size; - this.timeout = timeout; - - if (body instanceof Stream) { - body.on('error', function (err) { - const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); - _this[INTERNALS].error = error; - }); - } -} - -Body.prototype = { - get body() { - return this[INTERNALS].body; - }, - - get bodyUsed() { - return this[INTERNALS].disturbed; - }, - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - arrayBuffer() { - return consumeBody.call(this).then(function (buf) { - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - }); - }, - - /** - * Return raw response as Blob - * - * @return Promise - */ - blob() { - let ct = this.headers && this.headers.get('content-type') || ''; - return consumeBody.call(this).then(function (buf) { - return Object.assign( - // Prevent copying - new Blob([], { - type: ct.toLowerCase() - }), { - [BUFFER]: buf - }); - }); - }, - - /** - * Decode response as json - * - * @return Promise - */ - json() { - var _this2 = this; - - return consumeBody.call(this).then(function (buffer) { - try { - return JSON.parse(buffer.toString()); - } catch (err) { - return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); - } - }); - }, - - /** - * Decode response as text - * - * @return Promise - */ - text() { - return consumeBody.call(this).then(function (buffer) { - return buffer.toString(); - }); - }, - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - buffer() { - return consumeBody.call(this); - }, - - /** - * Decode response as text, while automatically detecting the encoding and - * trying to decode to UTF-8 (non-spec api) - * - * @return Promise - */ - textConverted() { - var _this3 = this; - - return consumeBody.call(this).then(function (buffer) { - return convertBody(buffer, _this3.headers); - }); - } -}; - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true } -}); - -Body.mixIn = function (proto) { - for (const name of Object.getOwnPropertyNames(Body.prototype)) { - // istanbul ignore else: future proof - if (!(name in proto)) { - const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); - Object.defineProperty(proto, name, desc); - } - } -}; - -/** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ -function consumeBody() { - var _this4 = this; - - if (this[INTERNALS].disturbed) { - return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); - } - - this[INTERNALS].disturbed = true; - - if (this[INTERNALS].error) { - return Body.Promise.reject(this[INTERNALS].error); - } - - let body = this.body; - - // body is null - if (body === null) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is blob - if (isBlob(body)) { - body = body.stream(); - } - - // body is buffer - if (Buffer.isBuffer(body)) { - return Body.Promise.resolve(body); - } - - // istanbul ignore if: should never happen - if (!(body instanceof Stream)) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is stream - // get ready to actually consume the body - let accum = []; - let accumBytes = 0; - let abort = false; - - return new Body.Promise(function (resolve, reject) { - let resTimeout; - - // allow timeout on slow response body - if (_this4.timeout) { - resTimeout = setTimeout(function () { - abort = true; - reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); - }, _this4.timeout); - } - - // handle stream errors - body.on('error', function (err) { - if (err.name === 'AbortError') { - // if the request was aborted, reject with this Error - abort = true; - reject(err); - } else { - // other errors, such as incorrect content-encoding - reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - - body.on('data', function (chunk) { - if (abort || chunk === null) { - return; - } - - if (_this4.size && accumBytes + chunk.length > _this4.size) { - abort = true; - reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); - return; - } - - accumBytes += chunk.length; - accum.push(chunk); - }); - - body.on('end', function () { - if (abort) { - return; - } - - clearTimeout(resTimeout); - - try { - resolve(Buffer.concat(accum, accumBytes)); - } catch (err) { - // handle streams that have accumulated too much data (issue #414) - reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - }); -} - -/** - * Detect buffer encoding and convert to target encoding - * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding - * - * @param Buffer buffer Incoming buffer - * @param String encoding Target encoding - * @return String - */ -function convertBody(buffer, headers) { - if (typeof convert !== 'function') { - throw new Error('The package `encoding` must be installed to use the textConverted() function'); - } - - const ct = headers.get('content-type'); - let charset = 'utf-8'; - let res, str; - - // header - if (ct) { - res = /charset=([^;]*)/i.exec(ct); - } - - // no charset in content type, peek at response body for at most 1024 bytes - str = buffer.slice(0, 1024).toString(); - - // html5 - if (!res && str) { - res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; - - this[MAP] = Object.create(null); - - if (init instanceof Headers) { - const rawHeaders = init.raw(); - const headerNames = Object.keys(rawHeaders); - - for (const headerName of headerNames) { - for (const value of rawHeaders[headerName]) { - this.append(headerName, value); - } - } - - return; - } - - // We don't worry about converting prop to ByteString here as append() - // will handle it. - if (init == null) ; else if (typeof init === 'object') { - const method = init[Symbol.iterator]; - if (method != null) { - if (typeof method !== 'function') { - throw new TypeError('Header pairs must be iterable'); - } - - // sequence> - // Note: per spec we have to first exhaust the lists then process them - const pairs = []; - for (const pair of init) { - if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { - throw new TypeError('Each header pair must be iterable'); - } - pairs.push(Array.from(pair)); - } - - for (const pair of pairs) { - if (pair.length !== 2) { - throw new TypeError('Each header pair must be a name/value tuple'); - } - this.append(pair[0], pair[1]); - } - } else { - // record - for (const key of Object.keys(init)) { - const value = init[key]; - this.append(key, value); - } - } - } else { - throw new TypeError('Provided initializer must be an object'); - } - } - - /** - * Return combined header value given name - * - * @param String name Header name - * @return Mixed - */ - get(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key === undefined) { - return null; - } - - return this[MAP][key].join(', '); - } - - /** - * Iterate over all headers - * - * @param Function callback Executed for each item with parameters (value, name, thisArg) - * @param Boolean thisArg `this` context for callback function - * @return Void - */ - forEach(callback) { - let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - - let pairs = getHeaders(this); - let i = 0; - while (i < pairs.length) { - var _pairs$i = pairs[i]; - const name = _pairs$i[0], - value = _pairs$i[1]; - - callback.call(thisArg, value, name, this); - pairs = getHeaders(this); - i++; - } - } - - /** - * Overwrite header values given name - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - set(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - this[MAP][key !== undefined ? key : name] = [value]; - } - - /** - * Append a value onto existing header - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - append(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - if (key !== undefined) { - this[MAP][key].push(value); - } else { - this[MAP][name] = [value]; - } - } - - /** - * Check for header name existence - * - * @param String name Header name - * @return Boolean - */ - has(name) { - name = `${name}`; - validateName(name); - return find(this[MAP], name) !== undefined; - } - - /** - * Delete all header values given name - * - * @param String name Header name - * @return Void - */ - delete(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key !== undefined) { - delete this[MAP][key]; - } - } - - /** - * Return raw headers (non-spec api) - * - * @return Object - */ - raw() { - return this[MAP]; - } - - /** - * Get an iterator on keys. - * - * @return Iterator - */ - keys() { - return createHeadersIterator(this, 'key'); - } - - /** - * Get an iterator on values. - * - * @return Iterator - */ - values() { - return createHeadersIterator(this, 'value'); - } - - /** - * Get an iterator on entries. - * - * This is the default iterator of the Headers object. - * - * @return Iterator - */ - [Symbol.iterator]() { - return createHeadersIterator(this, 'key+value'); - } -} -Headers.prototype.entries = Headers.prototype[Symbol.iterator]; - -Object.defineProperty(Headers.prototype, Symbol.toStringTag, { - value: 'Headers', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Headers.prototype, { - get: { enumerable: true }, - forEach: { enumerable: true }, - set: { enumerable: true }, - append: { enumerable: true }, - has: { enumerable: true }, - delete: { enumerable: true }, - keys: { enumerable: true }, - values: { enumerable: true }, - entries: { enumerable: true } -}); - -function getHeaders(headers) { - let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; - - const keys = Object.keys(headers[MAP]).sort(); - return keys.map(kind === 'key' ? function (k) { - return k.toLowerCase(); - } : kind === 'value' ? function (k) { - return headers[MAP][k].join(', '); - } : function (k) { - return [k.toLowerCase(), headers[MAP][k].join(', ')]; - }); -} - -const INTERNAL = Symbol('internal'); - -function createHeadersIterator(target, kind) { - const iterator = Object.create(HeadersIteratorPrototype); - iterator[INTERNAL] = { - target, - kind, - index: 0 - }; - return iterator; -} - -const HeadersIteratorPrototype = Object.setPrototypeOf({ - next() { - // istanbul ignore if - if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { - throw new TypeError('Value of `this` is not a HeadersIterator'); - } - - var _INTERNAL = this[INTERNAL]; - const target = _INTERNAL.target, - kind = _INTERNAL.kind, - index = _INTERNAL.index; - - const values = getHeaders(target, kind); - const len = values.length; - if (index >= len) { - return { - value: undefined, - done: true - }; - } - - this[INTERNAL].index = index + 1; - - return { - value: values[index], - done: false - }; - } -}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); - -Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { - value: 'HeadersIterator', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * Export the Headers object in a form that Node.js can consume. - * - * @param Headers headers - * @return Object - */ -function exportNodeCompatibleHeaders(headers) { - const obj = Object.assign({ __proto__: null }, headers[MAP]); - - // http.request() only supports string as Host header. This hack makes - // specifying custom Host header possible. - const hostHeaderKey = find(headers[MAP], 'Host'); - if (hostHeaderKey !== undefined) { - obj[hostHeaderKey] = obj[hostHeaderKey][0]; - } - - return obj; -} - -/** - * Create a Headers object from an object of headers, ignoring those that do - * not conform to HTTP grammar productions. - * - * @param Object obj Object of headers - * @return Headers - */ -function createHeadersLenient(obj) { - const headers = new Headers(); - for (const name of Object.keys(obj)) { - if (invalidTokenRegex.test(name)) { - continue; - } - if (Array.isArray(obj[name])) { - for (const val of obj[name]) { - if (invalidHeaderCharRegex.test(val)) { - continue; - } - if (headers[MAP][name] === undefined) { - headers[MAP][name] = [val]; - } else { - headers[MAP][name].push(val); - } - } - } else if (!invalidHeaderCharRegex.test(obj[name])) { - headers[MAP][name] = [obj[name]]; - } - } - return headers; -} - -const INTERNALS$1 = Symbol('Response internals'); - -// fix an issue where "STATUS_CODES" aren't a named export for node <10 -const STATUS_CODES = http.STATUS_CODES; - -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Response { - constructor() { - let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - Body.call(this, body, opts); - - const status = opts.status || 200; - const headers = new Headers(opts.headers); - - if (body != null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - this[INTERNALS$1] = { - url: opts.url, - status, - statusText: opts.statusText || STATUS_CODES[status], - headers, - counter: opts.counter - }; - } - - get url() { - return this[INTERNALS$1].url || ''; - } - - get status() { - return this[INTERNALS$1].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; - } - - get redirected() { - return this[INTERNALS$1].counter > 0; - } - - get statusText() { - return this[INTERNALS$1].statusText; - } - - get headers() { - return this[INTERNALS$1].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - return new Response(clone(this), { - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected - }); - } -} - -Body.mixIn(Response.prototype); - -Object.defineProperties(Response.prototype, { - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true } -}); - -Object.defineProperty(Response.prototype, Symbol.toStringTag, { - value: 'Response', - writable: false, - enumerable: false, - configurable: true -}); - -const INTERNALS$2 = Symbol('Request internals'); -const URL = Url.URL || whatwgUrl.URL; - -// fix an issue where "format", "parse" aren't a named export for node <10 -const parse_url = Url.parse; -const format_url = Url.format; - -/** - * Wrapper around `new URL` to handle arbitrary URLs - * - * @param {string} urlStr - * @return {void} - */ -function parseURL(urlStr) { - /* - Check whether the URL is absolute or not - Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 - Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 - */ - if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { - urlStr = new URL(urlStr).toString(); - } - - // Fallback to old implementation for arbitrary URLs - return parse_url(urlStr); -} - -const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; - -/** - * Check if a value is an instance of Request. - * - * @param Mixed input - * @return Boolean - */ -function isRequest(input) { - return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; -} - -function isAbortSignal(signal) { - const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); - return !!(proto && proto.constructor.name === 'AbortSignal'); -} - -/** - * Request class - * - * @param Mixed input Url or Request instance - * @param Object init Custom options - * @return Void - */ -class Request { - constructor(input) { - let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - let parsedURL; - - // normalize input - if (!isRequest(input)) { - if (input && input.href) { - // in order to support Node.js' Url objects; though WHATWG's URL objects - // will fall into this branch also (since their `toString()` will return - // `href` property anyway) - parsedURL = parseURL(input.href); - } else { - // coerce input to a string before attempting to parse - parsedURL = parseURL(`${input}`); - } - input = {}; - } else { - parsedURL = parseURL(input.url); - } - - let method = init.method || input.method || 'GET'; - method = method.toUpperCase(); - - if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { - throw new TypeError('Request with GET/HEAD method cannot have body'); - } - - let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; - - Body.call(this, inputBody, { - timeout: init.timeout || input.timeout || 0, - size: init.size || input.size || 0 - }); - - const headers = new Headers(init.headers || input.headers || {}); - - if (inputBody != null && !headers.has('Content-Type')) { - const contentType = extractContentType(inputBody); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - let signal = isRequest(input) ? input.signal : null; - if ('signal' in init) signal = init.signal; - - if (signal != null && !isAbortSignal(signal)) { - throw new TypeError('Expected signal to be an instanceof AbortSignal'); - } - - this[INTERNALS$2] = { - method, - redirect: init.redirect || input.redirect || 'follow', - headers, - parsedURL, - signal - }; - - // node-fetch-only options - this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; - this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; - this.counter = init.counter || input.counter || 0; - this.agent = init.agent || input.agent; - } - - get method() { - return this[INTERNALS$2].method; - } - - get url() { - return format_url(this[INTERNALS$2].parsedURL); - } - - get headers() { - return this[INTERNALS$2].headers; - } - - get redirect() { - return this[INTERNALS$2].redirect; - } - - get signal() { - return this[INTERNALS$2].signal; - } - - /** - * Clone this request - * - * @return Request - */ - clone() { - return new Request(this); - } -} - -Body.mixIn(Request.prototype); - -Object.defineProperty(Request.prototype, Symbol.toStringTag, { - value: 'Request', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Request.prototype, { - method: { enumerable: true }, - url: { enumerable: true }, - headers: { enumerable: true }, - redirect: { enumerable: true }, - clone: { enumerable: true }, - signal: { enumerable: true } -}); - -/** - * Convert a Request to Node.js http request options. - * - * @param Request A Request instance - * @return Object The options object to be passed to http.request - */ -function getNodeRequestOptions(request) { - const parsedURL = request[INTERNALS$2].parsedURL; - const headers = new Headers(request[INTERNALS$2].headers); - - // fetch step 1.3 - if (!headers.has('Accept')) { - headers.set('Accept', '*/*'); - } - - // Basic fetch - if (!parsedURL.protocol || !parsedURL.hostname) { - throw new TypeError('Only absolute URLs are supported'); - } - - if (!/^https?:$/.test(parsedURL.protocol)) { - throw new TypeError('Only HTTP(S) protocols are supported'); - } - - if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { - throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); - } - - // HTTP-network-or-cache fetch steps 2.4-2.7 - let contentLengthValue = null; - if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { - contentLengthValue = '0'; - } - if (request.body != null) { - const totalBytes = getTotalBytes(request); - if (typeof totalBytes === 'number') { - contentLengthValue = String(totalBytes); - } - } - if (contentLengthValue) { - headers.set('Content-Length', contentLengthValue); - } - - // HTTP-network-or-cache fetch step 2.11 - if (!headers.has('User-Agent')) { - headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); - } - - // HTTP-network-or-cache fetch step 2.15 - if (request.compress && !headers.has('Accept-Encoding')) { - headers.set('Accept-Encoding', 'gzip,deflate'); - } - - let agent = request.agent; - if (typeof agent === 'function') { - agent = agent(parsedURL); - } - - // HTTP-network fetch step 4.2 - // chunked encoding is handled by Node.js - - return Object.assign({}, parsedURL, { - method: request.method, - headers: exportNodeCompatibleHeaders(headers), - agent - }); -} - -/** - * abort-error.js - * - * AbortError interface for cancelled requests - */ - -/** - * Create AbortError instance - * - * @param String message Error message for human - * @return AbortError - */ -function AbortError(message) { - Error.call(this, message); - - this.type = 'aborted'; - this.message = message; - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -AbortError.prototype = Object.create(Error.prototype); -AbortError.prototype.constructor = AbortError; -AbortError.prototype.name = 'AbortError'; - -const URL$1 = Url.URL || whatwgUrl.URL; - -// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 -const PassThrough$1 = Stream.PassThrough; - -const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { - const orig = new URL$1(original).hostname; - const dest = new URL$1(destination).hostname; - - return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); -}; - -/** - * isSameProtocol reports whether the two provided URLs use the same protocol. - * - * Both domains must already be in canonical form. - * @param {string|URL} original - * @param {string|URL} destination - */ -const isSameProtocol = function isSameProtocol(destination, original) { - const orig = new URL$1(original).protocol; - const dest = new URL$1(destination).protocol; - - return orig === dest; -}; - -/** - * Fetch function - * - * @param Mixed url Absolute url or Request instance - * @param Object opts Fetch options - * @return Promise - */ -function fetch(url, opts) { - - // allow custom promise - if (!fetch.Promise) { - throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); - } - - Body.Promise = fetch.Promise; - - // wrap http.request into fetch - return new fetch.Promise(function (resolve, reject) { - // build request object - const request = new Request(url, opts); - const options = getNodeRequestOptions(request); - - const send = (options.protocol === 'https:' ? https : http).request; - const signal = request.signal; - - let response = null; - - const abort = function abort() { - let error = new AbortError('The user aborted a request.'); - reject(error); - if (request.body && request.body instanceof Stream.Readable) { - destroyStream(request.body, error); - } - if (!response || !response.body) return; - response.body.emit('error', error); - }; - - if (signal && signal.aborted) { - abort(); - return; - } - - const abortAndFinalize = function abortAndFinalize() { - abort(); - finalize(); - }; - - // send request - const req = send(options); - let reqTimeout; - - if (signal) { - signal.addEventListener('abort', abortAndFinalize); - } - - function finalize() { - req.abort(); - if (signal) signal.removeEventListener('abort', abortAndFinalize); - clearTimeout(reqTimeout); - } - - if (request.timeout) { - req.once('socket', function (socket) { - reqTimeout = setTimeout(function () { - reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); - finalize(); - }, request.timeout); - }); - } - - req.on('error', function (err) { - reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); - - if (response && response.body) { - destroyStream(response.body, err); - } - - finalize(); - }); - - fixResponseChunkedTransferBadEnding(req, function (err) { - if (signal && signal.aborted) { - return; - } - - if (response && response.body) { - destroyStream(response.body, err); - } - }); - - /* c8 ignore next 18 */ - if (parseInt(process.version.substring(1)) < 14) { - // Before Node.js 14, pipeline() does not fully support async iterators and does not always - // properly handle when the socket close/end events are out of order. - req.on('socket', function (s) { - s.addListener('close', function (hadError) { - // if a data listener is still present we didn't end cleanly - const hasDataListener = s.listenerCount('data') > 0; - - // if end happened before close but the socket didn't emit an error, do it now - if (response && hasDataListener && !hadError && !(signal && signal.aborted)) { - const err = new Error('Premature close'); - err.code = 'ERR_STREAM_PREMATURE_CLOSE'; - response.body.emit('error', err); - } - }); - }); - } - - req.on('response', function (res) { - clearTimeout(reqTimeout); - - const headers = createHeadersLenient(res.headers); - - // HTTP fetch step 5 - if (fetch.isRedirect(res.statusCode)) { - // HTTP fetch step 5.2 - const location = headers.get('Location'); - - // HTTP fetch step 5.3 - let locationURL = null; - try { - locationURL = location === null ? null : new URL$1(location, request.url).toString(); - } catch (err) { - // error here can only be invalid URL in Location: header - // do not throw when options.redirect == manual - // let the user extract the errorneous redirect URL - if (request.redirect !== 'manual') { - reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); - finalize(); - return; - } - } - - // HTTP fetch step 5.5 - switch (request.redirect) { - case 'error': - reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); - finalize(); - return; - case 'manual': - // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. - if (locationURL !== null) { - // handle corrupted header - try { - headers.set('Location', locationURL); - } catch (err) { - // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request - reject(err); - } - } - break; - case 'follow': - // HTTP-redirect fetch step 2 - if (locationURL === null) { - break; - } - - // HTTP-redirect fetch step 5 - if (request.counter >= request.follow) { - reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 6 (counter increment) - // Create a new Request object. - const requestOpts = { - headers: new Headers(request.headers), - follow: request.follow, - counter: request.counter + 1, - agent: request.agent, - compress: request.compress, - method: request.method, - body: request.body, - signal: request.signal, - timeout: request.timeout, - size: request.size - }; - - if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) { - for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { - requestOpts.headers.delete(name); - } - } - - // HTTP-redirect fetch step 9 - if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { - reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 11 - if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { - requestOpts.method = 'GET'; - requestOpts.body = undefined; - requestOpts.headers.delete('content-length'); - } - - // HTTP-redirect fetch step 15 - resolve(fetch(new Request(locationURL, requestOpts))); - finalize(); - return; - } - } - - // prepare response - res.once('end', function () { - if (signal) signal.removeEventListener('abort', abortAndFinalize); - }); - let body = res.pipe(new PassThrough$1()); - - const response_options = { - url: request.url, - status: res.statusCode, - statusText: res.statusMessage, - headers: headers, - size: request.size, - timeout: request.timeout, - counter: request.counter - }; - - // HTTP-network fetch step 12.1.1.3 - const codings = headers.get('Content-Encoding'); - - // HTTP-network fetch step 12.1.1.4: handle content codings - - // in following scenarios we ignore compression support - // 1. compression support is disabled - // 2. HEAD request - // 3. no Content-Encoding header - // 4. no content response (204) - // 5. content not modified response (304) - if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { - response = new Response(body, response_options); - resolve(response); - return; - } - - // For Node v6+ - // Be less strict when decoding compressed responses, since sometimes - // servers send slightly invalid responses that are still accepted - // by common browsers. - // Always using Z_SYNC_FLUSH is what cURL does. - const zlibOptions = { - flush: zlib.Z_SYNC_FLUSH, - finishFlush: zlib.Z_SYNC_FLUSH - }; - - // for gzip - if (codings == 'gzip' || codings == 'x-gzip') { - body = body.pipe(zlib.createGunzip(zlibOptions)); - response = new Response(body, response_options); - resolve(response); - return; - } - - // for deflate - if (codings == 'deflate' || codings == 'x-deflate') { - // handle the infamous raw deflate response from old servers - // a hack for old IIS and Apache servers - const raw = res.pipe(new PassThrough$1()); - raw.once('data', function (chunk) { - // see http://stackoverflow.com/questions/37519828 - if ((chunk[0] & 0x0F) === 0x08) { - body = body.pipe(zlib.createInflate()); - } else { - body = body.pipe(zlib.createInflateRaw()); - } - response = new Response(body, response_options); - resolve(response); - }); - raw.on('end', function () { - // some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted. - if (!response) { - response = new Response(body, response_options); - resolve(response); - } - }); - return; - } - - // for br - if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { - body = body.pipe(zlib.createBrotliDecompress()); - response = new Response(body, response_options); - resolve(response); - return; - } - - // otherwise, use response as-is - response = new Response(body, response_options); - resolve(response); - }); - - writeToStream(req, request); - }); -} -function fixResponseChunkedTransferBadEnding(request, errorCallback) { - let socket; - - request.on('socket', function (s) { - socket = s; - }); - - request.on('response', function (response) { - const headers = response.headers; - - if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) { - response.once('close', function (hadError) { - // tests for socket presence, as in some situations the - // the 'socket' event is not triggered for the request - // (happens in deno), avoids `TypeError` - // if a data listener is still present we didn't end cleanly - const hasDataListener = socket && socket.listenerCount('data') > 0; - - if (hasDataListener && !hadError) { - const err = new Error('Premature close'); - err.code = 'ERR_STREAM_PREMATURE_CLOSE'; - errorCallback(err); - } - }); - } - }); -} - -function destroyStream(stream, err) { - if (stream.destroy) { - stream.destroy(err); - } else { - // node < 8 - stream.emit('error', err); - stream.end(); - } -} - -/** - * Redirect code matching - * - * @param Number code Status code - * @return Boolean - */ -fetch.isRedirect = function (code) { - return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; -}; - -// expose Promise -fetch.Promise = global.Promise; - -module.exports = exports = fetch; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = exports; -exports.Headers = Headers; -exports.Request = Request; -exports.Response = Response; -exports.FetchError = FetchError; -exports.AbortError = AbortError; diff --git a/node_modules/node-fetch/lib/index.mjs b/node_modules/node-fetch/lib/index.mjs deleted file mode 100644 index 2863dd9..0000000 --- a/node_modules/node-fetch/lib/index.mjs +++ /dev/null @@ -1,1775 +0,0 @@ -import Stream from 'stream'; -import http from 'http'; -import Url from 'url'; -import whatwgUrl from 'whatwg-url'; -import https from 'https'; -import zlib from 'zlib'; - -// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js - -// fix for "Readable" isn't a named export issue -const Readable = Stream.Readable; - -const BUFFER = Symbol('buffer'); -const TYPE = Symbol('type'); - -class Blob { - constructor() { - this[TYPE] = ''; - - const blobParts = arguments[0]; - const options = arguments[1]; - - const buffers = []; - let size = 0; - - if (blobParts) { - const a = blobParts; - const length = Number(a.length); - for (let i = 0; i < length; i++) { - const element = a[i]; - let buffer; - if (element instanceof Buffer) { - buffer = element; - } else if (ArrayBuffer.isView(element)) { - buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); - } else if (element instanceof ArrayBuffer) { - buffer = Buffer.from(element); - } else if (element instanceof Blob) { - buffer = element[BUFFER]; - } else { - buffer = Buffer.from(typeof element === 'string' ? element : String(element)); - } - size += buffer.length; - buffers.push(buffer); - } - } - - this[BUFFER] = Buffer.concat(buffers); - - let type = options && options.type !== undefined && String(options.type).toLowerCase(); - if (type && !/[^\u0020-\u007E]/.test(type)) { - this[TYPE] = type; - } - } - get size() { - return this[BUFFER].length; - } - get type() { - return this[TYPE]; - } - text() { - return Promise.resolve(this[BUFFER].toString()); - } - arrayBuffer() { - const buf = this[BUFFER]; - const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - return Promise.resolve(ab); - } - stream() { - const readable = new Readable(); - readable._read = function () {}; - readable.push(this[BUFFER]); - readable.push(null); - return readable; - } - toString() { - return '[object Blob]'; - } - slice() { - const size = this.size; - - const start = arguments[0]; - const end = arguments[1]; - let relativeStart, relativeEnd; - if (start === undefined) { - relativeStart = 0; - } else if (start < 0) { - relativeStart = Math.max(size + start, 0); - } else { - relativeStart = Math.min(start, size); - } - if (end === undefined) { - relativeEnd = size; - } else if (end < 0) { - relativeEnd = Math.max(size + end, 0); - } else { - relativeEnd = Math.min(end, size); - } - const span = Math.max(relativeEnd - relativeStart, 0); - - const buffer = this[BUFFER]; - const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); - const blob = new Blob([], { type: arguments[2] }); - blob[BUFFER] = slicedBuffer; - return blob; - } -} - -Object.defineProperties(Blob.prototype, { - size: { enumerable: true }, - type: { enumerable: true }, - slice: { enumerable: true } -}); - -Object.defineProperty(Blob.prototype, Symbol.toStringTag, { - value: 'Blob', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * fetch-error.js - * - * FetchError interface for operational errors - */ - -/** - * Create FetchError instance - * - * @param String message Error message for human - * @param String type Error type for machine - * @param String systemError For Node.js system error - * @return FetchError - */ -function FetchError(message, type, systemError) { - Error.call(this, message); - - this.message = message; - this.type = type; - - // when err.type is `system`, err.code contains system error code - if (systemError) { - this.code = this.errno = systemError.code; - } - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -FetchError.prototype = Object.create(Error.prototype); -FetchError.prototype.constructor = FetchError; -FetchError.prototype.name = 'FetchError'; - -let convert; -try { - convert = require('encoding').convert; -} catch (e) {} - -const INTERNALS = Symbol('Body internals'); - -// fix an issue where "PassThrough" isn't a named export for node <10 -const PassThrough = Stream.PassThrough; - -/** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -function Body(body) { - var _this = this; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref$size = _ref.size; - - let size = _ref$size === undefined ? 0 : _ref$size; - var _ref$timeout = _ref.timeout; - let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; - - if (body == null) { - // body is undefined or null - body = null; - } else if (isURLSearchParams(body)) { - // body is a URLSearchParams - body = Buffer.from(body.toString()); - } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { - // body is ArrayBuffer - body = Buffer.from(body); - } else if (ArrayBuffer.isView(body)) { - // body is ArrayBufferView - body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); - } else if (body instanceof Stream) ; else { - // none of the above - // coerce to string then buffer - body = Buffer.from(String(body)); - } - this[INTERNALS] = { - body, - disturbed: false, - error: null - }; - this.size = size; - this.timeout = timeout; - - if (body instanceof Stream) { - body.on('error', function (err) { - const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); - _this[INTERNALS].error = error; - }); - } -} - -Body.prototype = { - get body() { - return this[INTERNALS].body; - }, - - get bodyUsed() { - return this[INTERNALS].disturbed; - }, - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - arrayBuffer() { - return consumeBody.call(this).then(function (buf) { - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - }); - }, - - /** - * Return raw response as Blob - * - * @return Promise - */ - blob() { - let ct = this.headers && this.headers.get('content-type') || ''; - return consumeBody.call(this).then(function (buf) { - return Object.assign( - // Prevent copying - new Blob([], { - type: ct.toLowerCase() - }), { - [BUFFER]: buf - }); - }); - }, - - /** - * Decode response as json - * - * @return Promise - */ - json() { - var _this2 = this; - - return consumeBody.call(this).then(function (buffer) { - try { - return JSON.parse(buffer.toString()); - } catch (err) { - return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); - } - }); - }, - - /** - * Decode response as text - * - * @return Promise - */ - text() { - return consumeBody.call(this).then(function (buffer) { - return buffer.toString(); - }); - }, - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - buffer() { - return consumeBody.call(this); - }, - - /** - * Decode response as text, while automatically detecting the encoding and - * trying to decode to UTF-8 (non-spec api) - * - * @return Promise - */ - textConverted() { - var _this3 = this; - - return consumeBody.call(this).then(function (buffer) { - return convertBody(buffer, _this3.headers); - }); - } -}; - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true } -}); - -Body.mixIn = function (proto) { - for (const name of Object.getOwnPropertyNames(Body.prototype)) { - // istanbul ignore else: future proof - if (!(name in proto)) { - const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); - Object.defineProperty(proto, name, desc); - } - } -}; - -/** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ -function consumeBody() { - var _this4 = this; - - if (this[INTERNALS].disturbed) { - return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); - } - - this[INTERNALS].disturbed = true; - - if (this[INTERNALS].error) { - return Body.Promise.reject(this[INTERNALS].error); - } - - let body = this.body; - - // body is null - if (body === null) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is blob - if (isBlob(body)) { - body = body.stream(); - } - - // body is buffer - if (Buffer.isBuffer(body)) { - return Body.Promise.resolve(body); - } - - // istanbul ignore if: should never happen - if (!(body instanceof Stream)) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is stream - // get ready to actually consume the body - let accum = []; - let accumBytes = 0; - let abort = false; - - return new Body.Promise(function (resolve, reject) { - let resTimeout; - - // allow timeout on slow response body - if (_this4.timeout) { - resTimeout = setTimeout(function () { - abort = true; - reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); - }, _this4.timeout); - } - - // handle stream errors - body.on('error', function (err) { - if (err.name === 'AbortError') { - // if the request was aborted, reject with this Error - abort = true; - reject(err); - } else { - // other errors, such as incorrect content-encoding - reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - - body.on('data', function (chunk) { - if (abort || chunk === null) { - return; - } - - if (_this4.size && accumBytes + chunk.length > _this4.size) { - abort = true; - reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); - return; - } - - accumBytes += chunk.length; - accum.push(chunk); - }); - - body.on('end', function () { - if (abort) { - return; - } - - clearTimeout(resTimeout); - - try { - resolve(Buffer.concat(accum, accumBytes)); - } catch (err) { - // handle streams that have accumulated too much data (issue #414) - reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - }); -} - -/** - * Detect buffer encoding and convert to target encoding - * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding - * - * @param Buffer buffer Incoming buffer - * @param String encoding Target encoding - * @return String - */ -function convertBody(buffer, headers) { - if (typeof convert !== 'function') { - throw new Error('The package `encoding` must be installed to use the textConverted() function'); - } - - const ct = headers.get('content-type'); - let charset = 'utf-8'; - let res, str; - - // header - if (ct) { - res = /charset=([^;]*)/i.exec(ct); - } - - // no charset in content type, peek at response body for at most 1024 bytes - str = buffer.slice(0, 1024).toString(); - - // html5 - if (!res && str) { - res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; - - this[MAP] = Object.create(null); - - if (init instanceof Headers) { - const rawHeaders = init.raw(); - const headerNames = Object.keys(rawHeaders); - - for (const headerName of headerNames) { - for (const value of rawHeaders[headerName]) { - this.append(headerName, value); - } - } - - return; - } - - // We don't worry about converting prop to ByteString here as append() - // will handle it. - if (init == null) ; else if (typeof init === 'object') { - const method = init[Symbol.iterator]; - if (method != null) { - if (typeof method !== 'function') { - throw new TypeError('Header pairs must be iterable'); - } - - // sequence> - // Note: per spec we have to first exhaust the lists then process them - const pairs = []; - for (const pair of init) { - if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { - throw new TypeError('Each header pair must be iterable'); - } - pairs.push(Array.from(pair)); - } - - for (const pair of pairs) { - if (pair.length !== 2) { - throw new TypeError('Each header pair must be a name/value tuple'); - } - this.append(pair[0], pair[1]); - } - } else { - // record - for (const key of Object.keys(init)) { - const value = init[key]; - this.append(key, value); - } - } - } else { - throw new TypeError('Provided initializer must be an object'); - } - } - - /** - * Return combined header value given name - * - * @param String name Header name - * @return Mixed - */ - get(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key === undefined) { - return null; - } - - return this[MAP][key].join(', '); - } - - /** - * Iterate over all headers - * - * @param Function callback Executed for each item with parameters (value, name, thisArg) - * @param Boolean thisArg `this` context for callback function - * @return Void - */ - forEach(callback) { - let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - - let pairs = getHeaders(this); - let i = 0; - while (i < pairs.length) { - var _pairs$i = pairs[i]; - const name = _pairs$i[0], - value = _pairs$i[1]; - - callback.call(thisArg, value, name, this); - pairs = getHeaders(this); - i++; - } - } - - /** - * Overwrite header values given name - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - set(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - this[MAP][key !== undefined ? key : name] = [value]; - } - - /** - * Append a value onto existing header - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - append(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - if (key !== undefined) { - this[MAP][key].push(value); - } else { - this[MAP][name] = [value]; - } - } - - /** - * Check for header name existence - * - * @param String name Header name - * @return Boolean - */ - has(name) { - name = `${name}`; - validateName(name); - return find(this[MAP], name) !== undefined; - } - - /** - * Delete all header values given name - * - * @param String name Header name - * @return Void - */ - delete(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key !== undefined) { - delete this[MAP][key]; - } - } - - /** - * Return raw headers (non-spec api) - * - * @return Object - */ - raw() { - return this[MAP]; - } - - /** - * Get an iterator on keys. - * - * @return Iterator - */ - keys() { - return createHeadersIterator(this, 'key'); - } - - /** - * Get an iterator on values. - * - * @return Iterator - */ - values() { - return createHeadersIterator(this, 'value'); - } - - /** - * Get an iterator on entries. - * - * This is the default iterator of the Headers object. - * - * @return Iterator - */ - [Symbol.iterator]() { - return createHeadersIterator(this, 'key+value'); - } -} -Headers.prototype.entries = Headers.prototype[Symbol.iterator]; - -Object.defineProperty(Headers.prototype, Symbol.toStringTag, { - value: 'Headers', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Headers.prototype, { - get: { enumerable: true }, - forEach: { enumerable: true }, - set: { enumerable: true }, - append: { enumerable: true }, - has: { enumerable: true }, - delete: { enumerable: true }, - keys: { enumerable: true }, - values: { enumerable: true }, - entries: { enumerable: true } -}); - -function getHeaders(headers) { - let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; - - const keys = Object.keys(headers[MAP]).sort(); - return keys.map(kind === 'key' ? function (k) { - return k.toLowerCase(); - } : kind === 'value' ? function (k) { - return headers[MAP][k].join(', '); - } : function (k) { - return [k.toLowerCase(), headers[MAP][k].join(', ')]; - }); -} - -const INTERNAL = Symbol('internal'); - -function createHeadersIterator(target, kind) { - const iterator = Object.create(HeadersIteratorPrototype); - iterator[INTERNAL] = { - target, - kind, - index: 0 - }; - return iterator; -} - -const HeadersIteratorPrototype = Object.setPrototypeOf({ - next() { - // istanbul ignore if - if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { - throw new TypeError('Value of `this` is not a HeadersIterator'); - } - - var _INTERNAL = this[INTERNAL]; - const target = _INTERNAL.target, - kind = _INTERNAL.kind, - index = _INTERNAL.index; - - const values = getHeaders(target, kind); - const len = values.length; - if (index >= len) { - return { - value: undefined, - done: true - }; - } - - this[INTERNAL].index = index + 1; - - return { - value: values[index], - done: false - }; - } -}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); - -Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { - value: 'HeadersIterator', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * Export the Headers object in a form that Node.js can consume. - * - * @param Headers headers - * @return Object - */ -function exportNodeCompatibleHeaders(headers) { - const obj = Object.assign({ __proto__: null }, headers[MAP]); - - // http.request() only supports string as Host header. This hack makes - // specifying custom Host header possible. - const hostHeaderKey = find(headers[MAP], 'Host'); - if (hostHeaderKey !== undefined) { - obj[hostHeaderKey] = obj[hostHeaderKey][0]; - } - - return obj; -} - -/** - * Create a Headers object from an object of headers, ignoring those that do - * not conform to HTTP grammar productions. - * - * @param Object obj Object of headers - * @return Headers - */ -function createHeadersLenient(obj) { - const headers = new Headers(); - for (const name of Object.keys(obj)) { - if (invalidTokenRegex.test(name)) { - continue; - } - if (Array.isArray(obj[name])) { - for (const val of obj[name]) { - if (invalidHeaderCharRegex.test(val)) { - continue; - } - if (headers[MAP][name] === undefined) { - headers[MAP][name] = [val]; - } else { - headers[MAP][name].push(val); - } - } - } else if (!invalidHeaderCharRegex.test(obj[name])) { - headers[MAP][name] = [obj[name]]; - } - } - return headers; -} - -const INTERNALS$1 = Symbol('Response internals'); - -// fix an issue where "STATUS_CODES" aren't a named export for node <10 -const STATUS_CODES = http.STATUS_CODES; - -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Response { - constructor() { - let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - Body.call(this, body, opts); - - const status = opts.status || 200; - const headers = new Headers(opts.headers); - - if (body != null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - this[INTERNALS$1] = { - url: opts.url, - status, - statusText: opts.statusText || STATUS_CODES[status], - headers, - counter: opts.counter - }; - } - - get url() { - return this[INTERNALS$1].url || ''; - } - - get status() { - return this[INTERNALS$1].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; - } - - get redirected() { - return this[INTERNALS$1].counter > 0; - } - - get statusText() { - return this[INTERNALS$1].statusText; - } - - get headers() { - return this[INTERNALS$1].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - return new Response(clone(this), { - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected - }); - } -} - -Body.mixIn(Response.prototype); - -Object.defineProperties(Response.prototype, { - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true } -}); - -Object.defineProperty(Response.prototype, Symbol.toStringTag, { - value: 'Response', - writable: false, - enumerable: false, - configurable: true -}); - -const INTERNALS$2 = Symbol('Request internals'); -const URL = Url.URL || whatwgUrl.URL; - -// fix an issue where "format", "parse" aren't a named export for node <10 -const parse_url = Url.parse; -const format_url = Url.format; - -/** - * Wrapper around `new URL` to handle arbitrary URLs - * - * @param {string} urlStr - * @return {void} - */ -function parseURL(urlStr) { - /* - Check whether the URL is absolute or not - Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 - Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 - */ - if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { - urlStr = new URL(urlStr).toString(); - } - - // Fallback to old implementation for arbitrary URLs - return parse_url(urlStr); -} - -const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; - -/** - * Check if a value is an instance of Request. - * - * @param Mixed input - * @return Boolean - */ -function isRequest(input) { - return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; -} - -function isAbortSignal(signal) { - const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); - return !!(proto && proto.constructor.name === 'AbortSignal'); -} - -/** - * Request class - * - * @param Mixed input Url or Request instance - * @param Object init Custom options - * @return Void - */ -class Request { - constructor(input) { - let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - let parsedURL; - - // normalize input - if (!isRequest(input)) { - if (input && input.href) { - // in order to support Node.js' Url objects; though WHATWG's URL objects - // will fall into this branch also (since their `toString()` will return - // `href` property anyway) - parsedURL = parseURL(input.href); - } else { - // coerce input to a string before attempting to parse - parsedURL = parseURL(`${input}`); - } - input = {}; - } else { - parsedURL = parseURL(input.url); - } - - let method = init.method || input.method || 'GET'; - method = method.toUpperCase(); - - if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { - throw new TypeError('Request with GET/HEAD method cannot have body'); - } - - let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; - - Body.call(this, inputBody, { - timeout: init.timeout || input.timeout || 0, - size: init.size || input.size || 0 - }); - - const headers = new Headers(init.headers || input.headers || {}); - - if (inputBody != null && !headers.has('Content-Type')) { - const contentType = extractContentType(inputBody); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - let signal = isRequest(input) ? input.signal : null; - if ('signal' in init) signal = init.signal; - - if (signal != null && !isAbortSignal(signal)) { - throw new TypeError('Expected signal to be an instanceof AbortSignal'); - } - - this[INTERNALS$2] = { - method, - redirect: init.redirect || input.redirect || 'follow', - headers, - parsedURL, - signal - }; - - // node-fetch-only options - this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; - this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; - this.counter = init.counter || input.counter || 0; - this.agent = init.agent || input.agent; - } - - get method() { - return this[INTERNALS$2].method; - } - - get url() { - return format_url(this[INTERNALS$2].parsedURL); - } - - get headers() { - return this[INTERNALS$2].headers; - } - - get redirect() { - return this[INTERNALS$2].redirect; - } - - get signal() { - return this[INTERNALS$2].signal; - } - - /** - * Clone this request - * - * @return Request - */ - clone() { - return new Request(this); - } -} - -Body.mixIn(Request.prototype); - -Object.defineProperty(Request.prototype, Symbol.toStringTag, { - value: 'Request', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Request.prototype, { - method: { enumerable: true }, - url: { enumerable: true }, - headers: { enumerable: true }, - redirect: { enumerable: true }, - clone: { enumerable: true }, - signal: { enumerable: true } -}); - -/** - * Convert a Request to Node.js http request options. - * - * @param Request A Request instance - * @return Object The options object to be passed to http.request - */ -function getNodeRequestOptions(request) { - const parsedURL = request[INTERNALS$2].parsedURL; - const headers = new Headers(request[INTERNALS$2].headers); - - // fetch step 1.3 - if (!headers.has('Accept')) { - headers.set('Accept', '*/*'); - } - - // Basic fetch - if (!parsedURL.protocol || !parsedURL.hostname) { - throw new TypeError('Only absolute URLs are supported'); - } - - if (!/^https?:$/.test(parsedURL.protocol)) { - throw new TypeError('Only HTTP(S) protocols are supported'); - } - - if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { - throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); - } - - // HTTP-network-or-cache fetch steps 2.4-2.7 - let contentLengthValue = null; - if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { - contentLengthValue = '0'; - } - if (request.body != null) { - const totalBytes = getTotalBytes(request); - if (typeof totalBytes === 'number') { - contentLengthValue = String(totalBytes); - } - } - if (contentLengthValue) { - headers.set('Content-Length', contentLengthValue); - } - - // HTTP-network-or-cache fetch step 2.11 - if (!headers.has('User-Agent')) { - headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); - } - - // HTTP-network-or-cache fetch step 2.15 - if (request.compress && !headers.has('Accept-Encoding')) { - headers.set('Accept-Encoding', 'gzip,deflate'); - } - - let agent = request.agent; - if (typeof agent === 'function') { - agent = agent(parsedURL); - } - - // HTTP-network fetch step 4.2 - // chunked encoding is handled by Node.js - - return Object.assign({}, parsedURL, { - method: request.method, - headers: exportNodeCompatibleHeaders(headers), - agent - }); -} - -/** - * abort-error.js - * - * AbortError interface for cancelled requests - */ - -/** - * Create AbortError instance - * - * @param String message Error message for human - * @return AbortError - */ -function AbortError(message) { - Error.call(this, message); - - this.type = 'aborted'; - this.message = message; - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -AbortError.prototype = Object.create(Error.prototype); -AbortError.prototype.constructor = AbortError; -AbortError.prototype.name = 'AbortError'; - -const URL$1 = Url.URL || whatwgUrl.URL; - -// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 -const PassThrough$1 = Stream.PassThrough; - -const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { - const orig = new URL$1(original).hostname; - const dest = new URL$1(destination).hostname; - - return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); -}; - -/** - * isSameProtocol reports whether the two provided URLs use the same protocol. - * - * Both domains must already be in canonical form. - * @param {string|URL} original - * @param {string|URL} destination - */ -const isSameProtocol = function isSameProtocol(destination, original) { - const orig = new URL$1(original).protocol; - const dest = new URL$1(destination).protocol; - - return orig === dest; -}; - -/** - * Fetch function - * - * @param Mixed url Absolute url or Request instance - * @param Object opts Fetch options - * @return Promise - */ -function fetch(url, opts) { - - // allow custom promise - if (!fetch.Promise) { - throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); - } - - Body.Promise = fetch.Promise; - - // wrap http.request into fetch - return new fetch.Promise(function (resolve, reject) { - // build request object - const request = new Request(url, opts); - const options = getNodeRequestOptions(request); - - const send = (options.protocol === 'https:' ? https : http).request; - const signal = request.signal; - - let response = null; - - const abort = function abort() { - let error = new AbortError('The user aborted a request.'); - reject(error); - if (request.body && request.body instanceof Stream.Readable) { - destroyStream(request.body, error); - } - if (!response || !response.body) return; - response.body.emit('error', error); - }; - - if (signal && signal.aborted) { - abort(); - return; - } - - const abortAndFinalize = function abortAndFinalize() { - abort(); - finalize(); - }; - - // send request - const req = send(options); - let reqTimeout; - - if (signal) { - signal.addEventListener('abort', abortAndFinalize); - } - - function finalize() { - req.abort(); - if (signal) signal.removeEventListener('abort', abortAndFinalize); - clearTimeout(reqTimeout); - } - - if (request.timeout) { - req.once('socket', function (socket) { - reqTimeout = setTimeout(function () { - reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); - finalize(); - }, request.timeout); - }); - } - - req.on('error', function (err) { - reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); - - if (response && response.body) { - destroyStream(response.body, err); - } - - finalize(); - }); - - fixResponseChunkedTransferBadEnding(req, function (err) { - if (signal && signal.aborted) { - return; - } - - if (response && response.body) { - destroyStream(response.body, err); - } - }); - - /* c8 ignore next 18 */ - if (parseInt(process.version.substring(1)) < 14) { - // Before Node.js 14, pipeline() does not fully support async iterators and does not always - // properly handle when the socket close/end events are out of order. - req.on('socket', function (s) { - s.addListener('close', function (hadError) { - // if a data listener is still present we didn't end cleanly - const hasDataListener = s.listenerCount('data') > 0; - - // if end happened before close but the socket didn't emit an error, do it now - if (response && hasDataListener && !hadError && !(signal && signal.aborted)) { - const err = new Error('Premature close'); - err.code = 'ERR_STREAM_PREMATURE_CLOSE'; - response.body.emit('error', err); - } - }); - }); - } - - req.on('response', function (res) { - clearTimeout(reqTimeout); - - const headers = createHeadersLenient(res.headers); - - // HTTP fetch step 5 - if (fetch.isRedirect(res.statusCode)) { - // HTTP fetch step 5.2 - const location = headers.get('Location'); - - // HTTP fetch step 5.3 - let locationURL = null; - try { - locationURL = location === null ? null : new URL$1(location, request.url).toString(); - } catch (err) { - // error here can only be invalid URL in Location: header - // do not throw when options.redirect == manual - // let the user extract the errorneous redirect URL - if (request.redirect !== 'manual') { - reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); - finalize(); - return; - } - } - - // HTTP fetch step 5.5 - switch (request.redirect) { - case 'error': - reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); - finalize(); - return; - case 'manual': - // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. - if (locationURL !== null) { - // handle corrupted header - try { - headers.set('Location', locationURL); - } catch (err) { - // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request - reject(err); - } - } - break; - case 'follow': - // HTTP-redirect fetch step 2 - if (locationURL === null) { - break; - } - - // HTTP-redirect fetch step 5 - if (request.counter >= request.follow) { - reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 6 (counter increment) - // Create a new Request object. - const requestOpts = { - headers: new Headers(request.headers), - follow: request.follow, - counter: request.counter + 1, - agent: request.agent, - compress: request.compress, - method: request.method, - body: request.body, - signal: request.signal, - timeout: request.timeout, - size: request.size - }; - - if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) { - for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { - requestOpts.headers.delete(name); - } - } - - // HTTP-redirect fetch step 9 - if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { - reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 11 - if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { - requestOpts.method = 'GET'; - requestOpts.body = undefined; - requestOpts.headers.delete('content-length'); - } - - // HTTP-redirect fetch step 15 - resolve(fetch(new Request(locationURL, requestOpts))); - finalize(); - return; - } - } - - // prepare response - res.once('end', function () { - if (signal) signal.removeEventListener('abort', abortAndFinalize); - }); - let body = res.pipe(new PassThrough$1()); - - const response_options = { - url: request.url, - status: res.statusCode, - statusText: res.statusMessage, - headers: headers, - size: request.size, - timeout: request.timeout, - counter: request.counter - }; - - // HTTP-network fetch step 12.1.1.3 - const codings = headers.get('Content-Encoding'); - - // HTTP-network fetch step 12.1.1.4: handle content codings - - // in following scenarios we ignore compression support - // 1. compression support is disabled - // 2. HEAD request - // 3. no Content-Encoding header - // 4. no content response (204) - // 5. content not modified response (304) - if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { - response = new Response(body, response_options); - resolve(response); - return; - } - - // For Node v6+ - // Be less strict when decoding compressed responses, since sometimes - // servers send slightly invalid responses that are still accepted - // by common browsers. - // Always using Z_SYNC_FLUSH is what cURL does. - const zlibOptions = { - flush: zlib.Z_SYNC_FLUSH, - finishFlush: zlib.Z_SYNC_FLUSH - }; - - // for gzip - if (codings == 'gzip' || codings == 'x-gzip') { - body = body.pipe(zlib.createGunzip(zlibOptions)); - response = new Response(body, response_options); - resolve(response); - return; - } - - // for deflate - if (codings == 'deflate' || codings == 'x-deflate') { - // handle the infamous raw deflate response from old servers - // a hack for old IIS and Apache servers - const raw = res.pipe(new PassThrough$1()); - raw.once('data', function (chunk) { - // see http://stackoverflow.com/questions/37519828 - if ((chunk[0] & 0x0F) === 0x08) { - body = body.pipe(zlib.createInflate()); - } else { - body = body.pipe(zlib.createInflateRaw()); - } - response = new Response(body, response_options); - resolve(response); - }); - raw.on('end', function () { - // some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted. - if (!response) { - response = new Response(body, response_options); - resolve(response); - } - }); - return; - } - - // for br - if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { - body = body.pipe(zlib.createBrotliDecompress()); - response = new Response(body, response_options); - resolve(response); - return; - } - - // otherwise, use response as-is - response = new Response(body, response_options); - resolve(response); - }); - - writeToStream(req, request); - }); -} -function fixResponseChunkedTransferBadEnding(request, errorCallback) { - let socket; - - request.on('socket', function (s) { - socket = s; - }); - - request.on('response', function (response) { - const headers = response.headers; - - if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) { - response.once('close', function (hadError) { - // tests for socket presence, as in some situations the - // the 'socket' event is not triggered for the request - // (happens in deno), avoids `TypeError` - // if a data listener is still present we didn't end cleanly - const hasDataListener = socket && socket.listenerCount('data') > 0; - - if (hasDataListener && !hadError) { - const err = new Error('Premature close'); - err.code = 'ERR_STREAM_PREMATURE_CLOSE'; - errorCallback(err); - } - }); - } - }); -} - -function destroyStream(stream, err) { - if (stream.destroy) { - stream.destroy(err); - } else { - // node < 8 - stream.emit('error', err); - stream.end(); - } -} - -/** - * Redirect code matching - * - * @param Number code Status code - * @return Boolean - */ -fetch.isRedirect = function (code) { - return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; -}; - -// expose Promise -fetch.Promise = global.Promise; - -export default fetch; -export { Headers, Request, Response, FetchError, AbortError }; diff --git a/node_modules/node-fetch/package.json b/node_modules/node-fetch/package.json deleted file mode 100644 index e0be176..0000000 --- a/node_modules/node-fetch/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "node-fetch", - "version": "2.7.0", - "description": "A light-weight module that brings window.fetch to node.js", - "main": "lib/index.js", - "browser": "./browser.js", - "module": "lib/index.mjs", - "files": [ - "lib/index.js", - "lib/index.mjs", - "lib/index.es.js", - "browser.js" - ], - "engines": { - "node": "4.x || >=6.0.0" - }, - "scripts": { - "build": "cross-env BABEL_ENV=rollup rollup -c", - "prepare": "npm run build", - "test": "cross-env BABEL_ENV=test mocha --require babel-register --throw-deprecation test/test.js", - "report": "cross-env BABEL_ENV=coverage nyc --reporter lcov --reporter text mocha -R spec test/test.js", - "coverage": "cross-env BABEL_ENV=coverage nyc --reporter json --reporter text mocha -R spec test/test.js && codecov -f coverage/coverage-final.json" - }, - "repository": { - "type": "git", - "url": "https://github.com/bitinn/node-fetch.git" - }, - "keywords": [ - "fetch", - "http", - "promise" - ], - "author": "David Frank", - "license": "MIT", - "bugs": { - "url": "https://github.com/bitinn/node-fetch/issues" - }, - "homepage": "https://github.com/bitinn/node-fetch", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - }, - "devDependencies": { - "@ungap/url-search-params": "^0.1.2", - "abort-controller": "^1.1.0", - "abortcontroller-polyfill": "^1.3.0", - "babel-core": "^6.26.3", - "babel-plugin-istanbul": "^4.1.6", - "babel-plugin-transform-async-generator-functions": "^6.24.1", - "babel-polyfill": "^6.26.0", - "babel-preset-env": "1.4.0", - "babel-register": "^6.16.3", - "chai": "^3.5.0", - "chai-as-promised": "^7.1.1", - "chai-iterator": "^1.1.1", - "chai-string": "~1.3.0", - "codecov": "3.3.0", - "cross-env": "^5.2.0", - "form-data": "^2.3.3", - "is-builtin-module": "^1.0.0", - "mocha": "^5.0.0", - "nyc": "11.9.0", - "parted": "^0.1.1", - "promise": "^8.0.3", - "resumer": "0.0.0", - "rollup": "^0.63.4", - "rollup-plugin-babel": "^3.0.7", - "string-to-arraybuffer": "^1.0.2", - "teeny-request": "3.7.0" - }, - "release": { - "branches": [ - "+([0-9]).x", - "main", - "next", - { - "name": "beta", - "prerelease": true - } - ] - } -} diff --git a/node_modules/node-rsa/gruntfile.js b/node_modules/node-rsa/gruntfile.js deleted file mode 100644 index 4d00789..0000000 --- a/node_modules/node-rsa/gruntfile.js +++ /dev/null @@ -1,33 +0,0 @@ -module.exports = function (grunt) { - grunt.initConfig({ - jshint: { - options: {}, - default: { - files: { - src: ['gruntfile.js', 'src/**/*.js', '!src/libs/jsbn.js'] - } - }, - libs: { - files: { - src: ['src/libs/**/*'] - } - } - }, - - simplemocha: { - options: { - reporter: 'list' - }, - all: {src: ['test/**/*.js']} - } - }); - - require('jit-grunt')(grunt, { - 'simplemocha': 'grunt-simple-mocha' - }); - - grunt.registerTask('lint', ['jshint:default']); - grunt.registerTask('test', ['simplemocha']); - - grunt.registerTask('default', ['lint', 'test']); -}; \ No newline at end of file diff --git a/node_modules/node-rsa/src/encryptEngines/encryptEngines.js b/node_modules/node-rsa/src/encryptEngines/encryptEngines.js deleted file mode 100644 index 2d7421b..0000000 --- a/node_modules/node-rsa/src/encryptEngines/encryptEngines.js +++ /dev/null @@ -1,17 +0,0 @@ -var crypt = require('crypto'); - -module.exports = { - getEngine: function (keyPair, options) { - var engine = require('./js.js'); - if (options.environment === 'node') { - if (typeof crypt.publicEncrypt === 'function' && typeof crypt.privateDecrypt === 'function') { - if (typeof crypt.privateEncrypt === 'function' && typeof crypt.publicDecrypt === 'function') { - engine = require('./io.js'); - } else { - engine = require('./node12.js'); - } - } - } - return engine(keyPair, options); - } -}; \ No newline at end of file diff --git a/node_modules/node-rsa/src/encryptEngines/js.js b/node_modules/node-rsa/src/encryptEngines/js.js deleted file mode 100644 index 4df3531..0000000 --- a/node_modules/node-rsa/src/encryptEngines/js.js +++ /dev/null @@ -1,34 +0,0 @@ -var BigInteger = require('../libs/jsbn.js'); -var schemes = require('../schemes/schemes.js'); - -module.exports = function (keyPair, options) { - var pkcs1Scheme = schemes.pkcs1.makeScheme(keyPair, options); - - return { - encrypt: function (buffer, usePrivate) { - var m, c; - if (usePrivate) { - /* Type 1: zeros padding for private key encrypt */ - m = new BigInteger(pkcs1Scheme.encPad(buffer, {type: 1})); - c = keyPair.$doPrivate(m); - } else { - m = new BigInteger(keyPair.encryptionScheme.encPad(buffer)); - c = keyPair.$doPublic(m); - } - return c.toBuffer(keyPair.encryptedDataLength); - }, - - decrypt: function (buffer, usePublic) { - var m, c = new BigInteger(buffer); - - if (usePublic) { - m = keyPair.$doPublic(c); - /* Type 1: zeros padding for private key decrypt */ - return pkcs1Scheme.encUnPad(m.toBuffer(keyPair.encryptedDataLength), {type: 1}); - } else { - m = keyPair.$doPrivate(c); - return keyPair.encryptionScheme.encUnPad(m.toBuffer(keyPair.encryptedDataLength)); - } - } - }; -}; \ No newline at end of file diff --git a/node_modules/node-rsa/src/formats/components.js b/node_modules/node-rsa/src/formats/components.js deleted file mode 100644 index 56af95c..0000000 --- a/node_modules/node-rsa/src/formats/components.js +++ /dev/null @@ -1,71 +0,0 @@ -var _ = require('../utils')._; -var utils = require('../utils'); - -module.exports = { - privateExport: function (key, options) { - return { - n: key.n.toBuffer(), - e: key.e, - d: key.d.toBuffer(), - p: key.p.toBuffer(), - q: key.q.toBuffer(), - dmp1: key.dmp1.toBuffer(), - dmq1: key.dmq1.toBuffer(), - coeff: key.coeff.toBuffer() - }; - }, - - privateImport: function (key, data, options) { - if (data.n && data.e && data.d && data.p && data.q && data.dmp1 && data.dmq1 && data.coeff) { - key.setPrivate( - data.n, - data.e, - data.d, - data.p, - data.q, - data.dmp1, - data.dmq1, - data.coeff - ); - } else { - throw Error("Invalid key data"); - } - }, - - publicExport: function (key, options) { - return { - n: key.n.toBuffer(), - e: key.e - }; - }, - - publicImport: function (key, data, options) { - if (data.n && data.e) { - key.setPublic( - data.n, - data.e - ); - } else { - throw Error("Invalid key data"); - } - }, - - /** - * Trying autodetect and import key - * @param key - * @param data - */ - autoImport: function (key, data) { - if (data.n && data.e) { - if (data.d && data.p && data.q && data.dmp1 && data.dmq1 && data.coeff) { - module.exports.privateImport(key, data); - return true; - } else { - module.exports.publicImport(key, data); - return true; - } - } - - return false; - } -}; diff --git a/node_modules/node-rsa/src/libs/jsbn.js b/node_modules/node-rsa/src/libs/jsbn.js deleted file mode 100644 index 5464d7c..0000000 --- a/node_modules/node-rsa/src/libs/jsbn.js +++ /dev/null @@ -1,1540 +0,0 @@ -/* - * Basic JavaScript BN library - subset useful for RSA encryption. - * - * Copyright (c) 2003-2005 Tom Wu - * All Rights Reserved. - * - * 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" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER - * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF - * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * In addition, the following condition applies: - * - * All redistributions must retain an intact copy of this copyright notice - * and disclaimer. - */ - -/* - * Added Node.js Buffers support - * 2014 rzcoder - */ - -var crypt = require('crypto'); -var _ = require('../utils')._; - -// Bits per digit -var dbits; - -// JavaScript engine analysis -var canary = 0xdeadbeefcafe; -var j_lm = ((canary & 0xffffff) == 0xefcafe); - -// (public) Constructor -function BigInteger(a, b) { - if (a != null) { - if ("number" == typeof a) { - this.fromNumber(a, b); - } else if (Buffer.isBuffer(a)) { - this.fromBuffer(a); - } else if (b == null && "string" != typeof a) { - this.fromByteArray(a); - } else { - this.fromString(a, b); - } - } -} - -// return new, unset BigInteger -function nbi() { - return new BigInteger(null); -} - -// am: Compute w_j += (x*this_i), propagate carries, -// c is initial carry, returns final carry. -// c < 3*dvalue, x < 2*dvalue, this_i < dvalue -// We need to select the fastest one that works in this environment. - -// am1: use a single mult and divide to get the high bits, -// max digit bits should be 26 because -// max internal value = 2*dvalue^2-2*dvalue (< 2^53) -function am1(i, x, w, j, c, n) { - while (--n >= 0) { - var v = x * this[i++] + w[j] + c; - c = Math.floor(v / 0x4000000); - w[j++] = v & 0x3ffffff; - } - return c; -} -// am2 avoids a big mult-and-extract completely. -// Max digit bits should be <= 30 because we do bitwise ops -// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) -function am2(i, x, w, j, c, n) { - var xl = x & 0x7fff, xh = x >> 15; - while (--n >= 0) { - var l = this[i] & 0x7fff; - var h = this[i++] >> 15; - var m = xh * l + h * xl; - l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff); - c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30); - w[j++] = l & 0x3fffffff; - } - return c; -} -// Alternately, set max digit bits to 28 since some -// browsers slow down when dealing with 32-bit numbers. -function am3(i, x, w, j, c, n) { - var xl = x & 0x3fff, xh = x >> 14; - while (--n >= 0) { - var l = this[i] & 0x3fff; - var h = this[i++] >> 14; - var m = xh * l + h * xl; - l = xl * l + ((m & 0x3fff) << 14) + w[j] + c; - c = (l >> 28) + (m >> 14) + xh * h; - w[j++] = l & 0xfffffff; - } - return c; -} - -// We need to select the fastest one that works in this environment. -//if (j_lm && (navigator.appName == "Microsoft Internet Explorer")) { -// BigInteger.prototype.am = am2; -// dbits = 30; -//} else if (j_lm && (navigator.appName != "Netscape")) { -// BigInteger.prototype.am = am1; -// dbits = 26; -//} else { // Mozilla/Netscape seems to prefer am3 -// BigInteger.prototype.am = am3; -// dbits = 28; -//} - -// For node.js, we pick am3 with max dbits to 28. -BigInteger.prototype.am = am3; -dbits = 28; - -BigInteger.prototype.DB = dbits; -BigInteger.prototype.DM = ((1 << dbits) - 1); -BigInteger.prototype.DV = (1 << dbits); - -var BI_FP = 52; -BigInteger.prototype.FV = Math.pow(2, BI_FP); -BigInteger.prototype.F1 = BI_FP - dbits; -BigInteger.prototype.F2 = 2 * dbits - BI_FP; - -// Digit conversions -var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; -var BI_RC = new Array(); -var rr, vv; -rr = "0".charCodeAt(0); -for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv; -rr = "a".charCodeAt(0); -for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv; -rr = "A".charCodeAt(0); -for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv; - -function int2char(n) { - return BI_RM.charAt(n); -} -function intAt(s, i) { - var c = BI_RC[s.charCodeAt(i)]; - return (c == null) ? -1 : c; -} - -// (protected) copy this to r -function bnpCopyTo(r) { - for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]; - r.t = this.t; - r.s = this.s; -} - -// (protected) set from integer value x, -DV <= x < DV -function bnpFromInt(x) { - this.t = 1; - this.s = (x < 0) ? -1 : 0; - if (x > 0) this[0] = x; - else if (x < -1) this[0] = x + DV; - else this.t = 0; -} - -// return bigint initialized to value -function nbv(i) { - var r = nbi(); - r.fromInt(i); - return r; -} - -// (protected) set from string and radix -function bnpFromString(data, radix, unsigned) { - var k; - switch (radix) { - case 2: - k = 1; - break; - case 4: - k = 2; - break; - case 8: - k = 3; - break; - case 16: - k = 4; - break; - case 32: - k = 5; - break; - case 256: - k = 8; - break; - default: - this.fromRadix(data, radix); - return; - } - - this.t = 0; - this.s = 0; - - var i = data.length; - var mi = false; - var sh = 0; - - while (--i >= 0) { - var x = (k == 8) ? data[i] & 0xff : intAt(data, i); - if (x < 0) { - if (data.charAt(i) == "-") mi = true; - continue; - } - mi = false; - if (sh === 0) - this[this.t++] = x; - else if (sh + k > this.DB) { - this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh; - this[this.t++] = (x >> (this.DB - sh)); - } - else - this[this.t - 1] |= x << sh; - sh += k; - if (sh >= this.DB) sh -= this.DB; - } - if ((!unsigned) && k == 8 && (data[0] & 0x80) != 0) { - this.s = -1; - if (sh > 0) this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh; - } - this.clamp(); - if (mi) BigInteger.ZERO.subTo(this, this); -} - -function bnpFromByteArray(a, unsigned) { - this.fromString(a, 256, unsigned) -} - -function bnpFromBuffer(a) { - this.fromString(a, 256, true) -} - -// (protected) clamp off excess high words -function bnpClamp() { - var c = this.s & this.DM; - while (this.t > 0 && this[this.t - 1] == c) --this.t; -} - -// (public) return string representation in given radix -function bnToString(b) { - if (this.s < 0) return "-" + this.negate().toString(b); - var k; - if (b == 16) k = 4; - else if (b == 8) k = 3; - else if (b == 2) k = 1; - else if (b == 32) k = 5; - else if (b == 4) k = 2; - else return this.toRadix(b); - var km = (1 << k) - 1, d, m = false, r = "", i = this.t; - var p = this.DB - (i * this.DB) % k; - if (i-- > 0) { - if (p < this.DB && (d = this[i] >> p) > 0) { - m = true; - r = int2char(d); - } - while (i >= 0) { - if (p < k) { - d = (this[i] & ((1 << p) - 1)) << (k - p); - d |= this[--i] >> (p += this.DB - k); - } - else { - d = (this[i] >> (p -= k)) & km; - if (p <= 0) { - p += this.DB; - --i; - } - } - if (d > 0) m = true; - if (m) r += int2char(d); - } - } - return m ? r : "0"; -} - -// (public) -this -function bnNegate() { - var r = nbi(); - BigInteger.ZERO.subTo(this, r); - return r; -} - -// (public) |this| -function bnAbs() { - return (this.s < 0) ? this.negate() : this; -} - -// (public) return + if this > a, - if this < a, 0 if equal -function bnCompareTo(a) { - var r = this.s - a.s; - if (r != 0) return r; - var i = this.t; - r = i - a.t; - if (r != 0) return (this.s < 0) ? -r : r; - while (--i >= 0) if ((r = this[i] - a[i]) != 0) return r; - return 0; -} - -// returns bit length of the integer x -function nbits(x) { - var r = 1, t; - if ((t = x >>> 16) != 0) { - x = t; - r += 16; - } - if ((t = x >> 8) != 0) { - x = t; - r += 8; - } - if ((t = x >> 4) != 0) { - x = t; - r += 4; - } - if ((t = x >> 2) != 0) { - x = t; - r += 2; - } - if ((t = x >> 1) != 0) { - x = t; - r += 1; - } - return r; -} - -// (public) return the number of bits in "this" -function bnBitLength() { - if (this.t <= 0) return 0; - return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM)); -} - -// (protected) r = this << n*DB -function bnpDLShiftTo(n, r) { - var i; - for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]; - for (i = n - 1; i >= 0; --i) r[i] = 0; - r.t = this.t + n; - r.s = this.s; -} - -// (protected) r = this >> n*DB -function bnpDRShiftTo(n, r) { - for (var i = n; i < this.t; ++i) r[i - n] = this[i]; - r.t = Math.max(this.t - n, 0); - r.s = this.s; -} - -// (protected) r = this << n -function bnpLShiftTo(n, r) { - var bs = n % this.DB; - var cbs = this.DB - bs; - var bm = (1 << cbs) - 1; - var ds = Math.floor(n / this.DB), c = (this.s << bs) & this.DM, i; - for (i = this.t - 1; i >= 0; --i) { - r[i + ds + 1] = (this[i] >> cbs) | c; - c = (this[i] & bm) << bs; - } - for (i = ds - 1; i >= 0; --i) r[i] = 0; - r[ds] = c; - r.t = this.t + ds + 1; - r.s = this.s; - r.clamp(); -} - -// (protected) r = this >> n -function bnpRShiftTo(n, r) { - r.s = this.s; - var ds = Math.floor(n / this.DB); - if (ds >= this.t) { - r.t = 0; - return; - } - var bs = n % this.DB; - var cbs = this.DB - bs; - var bm = (1 << bs) - 1; - r[0] = this[ds] >> bs; - for (var i = ds + 1; i < this.t; ++i) { - r[i - ds - 1] |= (this[i] & bm) << cbs; - r[i - ds] = this[i] >> bs; - } - if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs; - r.t = this.t - ds; - r.clamp(); -} - -// (protected) r = this - a -function bnpSubTo(a, r) { - var i = 0, c = 0, m = Math.min(a.t, this.t); - while (i < m) { - c += this[i] - a[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - if (a.t < this.t) { - c -= a.s; - while (i < this.t) { - c += this[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while (i < a.t) { - c -= a[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c -= a.s; - } - r.s = (c < 0) ? -1 : 0; - if (c < -1) r[i++] = this.DV + c; - else if (c > 0) r[i++] = c; - r.t = i; - r.clamp(); -} - -// (protected) r = this * a, r != this,a (HAC 14.12) -// "this" should be the larger one if appropriate. -function bnpMultiplyTo(a, r) { - var x = this.abs(), y = a.abs(); - var i = x.t; - r.t = i + y.t; - while (--i >= 0) r[i] = 0; - for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t); - r.s = 0; - r.clamp(); - if (this.s != a.s) BigInteger.ZERO.subTo(r, r); -} - -// (protected) r = this^2, r != this (HAC 14.16) -function bnpSquareTo(r) { - var x = this.abs(); - var i = r.t = 2 * x.t; - while (--i >= 0) r[i] = 0; - for (i = 0; i < x.t - 1; ++i) { - var c = x.am(i, x[i], r, 2 * i, 0, 1); - if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) { - r[i + x.t] -= x.DV; - r[i + x.t + 1] = 1; - } - } - if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1); - r.s = 0; - r.clamp(); -} - -// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) -// r != q, this != m. q or r may be null. -function bnpDivRemTo(m, q, r) { - var pm = m.abs(); - if (pm.t <= 0) return; - var pt = this.abs(); - if (pt.t < pm.t) { - if (q != null) q.fromInt(0); - if (r != null) this.copyTo(r); - return; - } - if (r == null) r = nbi(); - var y = nbi(), ts = this.s, ms = m.s; - var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus - if (nsh > 0) { - pm.lShiftTo(nsh, y); - pt.lShiftTo(nsh, r); - } - else { - pm.copyTo(y); - pt.copyTo(r); - } - var ys = y.t; - var y0 = y[ys - 1]; - if (y0 === 0) return; - var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0); - var d1 = this.FV / yt, d2 = (1 << this.F1) / yt, e = 1 << this.F2; - var i = r.t, j = i - ys, t = (q == null) ? nbi() : q; - y.dlShiftTo(j, t); - if (r.compareTo(t) >= 0) { - r[r.t++] = 1; - r.subTo(t, r); - } - BigInteger.ONE.dlShiftTo(ys, t); - t.subTo(y, y); // "negative" y so we can replace sub with am later - while (y.t < ys) y[y.t++] = 0; - while (--j >= 0) { - // Estimate quotient digit - var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2); - if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out - y.dlShiftTo(j, t); - r.subTo(t, r); - while (r[i] < --qd) r.subTo(t, r); - } - } - if (q != null) { - r.drShiftTo(ys, q); - if (ts != ms) BigInteger.ZERO.subTo(q, q); - } - r.t = ys; - r.clamp(); - if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder - if (ts < 0) BigInteger.ZERO.subTo(r, r); -} - -// (public) this mod a -function bnMod(a) { - var r = nbi(); - this.abs().divRemTo(a, null, r); - if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r); - return r; -} - -// Modular reduction using "classic" algorithm -function Classic(m) { - this.m = m; -} -function cConvert(x) { - if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); - else return x; -} -function cRevert(x) { - return x; -} -function cReduce(x) { - x.divRemTo(this.m, null, x); -} -function cMulTo(x, y, r) { - x.multiplyTo(y, r); - this.reduce(r); -} -function cSqrTo(x, r) { - x.squareTo(r); - this.reduce(r); -} - -Classic.prototype.convert = cConvert; -Classic.prototype.revert = cRevert; -Classic.prototype.reduce = cReduce; -Classic.prototype.mulTo = cMulTo; -Classic.prototype.sqrTo = cSqrTo; - -// (protected) return "-1/this % 2^DB"; useful for Mont. reduction -// justification: -// xy == 1 (mod m) -// xy = 1+km -// xy(2-xy) = (1+km)(1-km) -// x[y(2-xy)] = 1-k^2m^2 -// x[y(2-xy)] == 1 (mod m^2) -// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 -// should reduce x and y(2-xy) by m^2 at each step to keep size bounded. -// JS multiply "overflows" differently from C/C++, so care is needed here. -function bnpInvDigit() { - if (this.t < 1) return 0; - var x = this[0]; - if ((x & 1) === 0) return 0; - var y = x & 3; // y == 1/x mod 2^2 - y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4 - y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8 - y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16 - // last step - calculate inverse mod DV directly; - // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints - y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits - // we really want the negative inverse, and -DV < y < DV - return (y > 0) ? this.DV - y : -y; -} - -// Montgomery reduction -function Montgomery(m) { - this.m = m; - this.mp = m.invDigit(); - this.mpl = this.mp & 0x7fff; - this.mph = this.mp >> 15; - this.um = (1 << (m.DB - 15)) - 1; - this.mt2 = 2 * m.t; -} - -// xR mod m -function montConvert(x) { - var r = nbi(); - x.abs().dlShiftTo(this.m.t, r); - r.divRemTo(this.m, null, r); - if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r); - return r; -} - -// x/R mod m -function montRevert(x) { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; -} - -// x = x/R mod m (HAC 14.32) -function montReduce(x) { - while (x.t <= this.mt2) // pad x so am has enough room later - x[x.t++] = 0; - for (var i = 0; i < this.m.t; ++i) { - // faster way of calculating u0 = x[i]*mp mod DV - var j = x[i] & 0x7fff; - var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM; - // use am to combine the multiply-shift-add into one call - j = i + this.m.t; - x[j] += this.m.am(0, u0, x, i, 0, this.m.t); - // propagate carry - while (x[j] >= x.DV) { - x[j] -= x.DV; - x[++j]++; - } - } - x.clamp(); - x.drShiftTo(this.m.t, x); - if (x.compareTo(this.m) >= 0) x.subTo(this.m, x); -} - -// r = "x^2/R mod m"; x != r -function montSqrTo(x, r) { - x.squareTo(r); - this.reduce(r); -} - -// r = "xy/R mod m"; x,y != r -function montMulTo(x, y, r) { - x.multiplyTo(y, r); - this.reduce(r); -} - -Montgomery.prototype.convert = montConvert; -Montgomery.prototype.revert = montRevert; -Montgomery.prototype.reduce = montReduce; -Montgomery.prototype.mulTo = montMulTo; -Montgomery.prototype.sqrTo = montSqrTo; - -// (protected) true iff this is even -function bnpIsEven() { - return ((this.t > 0) ? (this[0] & 1) : this.s) === 0; -} - -// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) -function bnpExp(e, z) { - if (e > 0xffffffff || e < 1) return BigInteger.ONE; - var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e) - 1; - g.copyTo(r); - while (--i >= 0) { - z.sqrTo(r, r2); - if ((e & (1 << i)) > 0) z.mulTo(r2, g, r); - else { - var t = r; - r = r2; - r2 = t; - } - } - return z.revert(r); -} - -// (public) this^e % m, 0 <= e < 2^32 -function bnModPowInt(e, m) { - var z; - if (e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); - return this.exp(e, z); -} - -// Copyright (c) 2005-2009 Tom Wu -// All Rights Reserved. -// See "LICENSE" for details. - -// Extended JavaScript BN functions, required for RSA private ops. - -// Version 1.1: new BigInteger("0", 10) returns "proper" zero -// Version 1.2: square() API, isProbablePrime fix - -//(public) -function bnClone() { - var r = nbi(); - this.copyTo(r); - return r; -} - -//(public) return value as integer -function bnIntValue() { - if (this.s < 0) { - if (this.t == 1) return this[0] - this.DV; - else if (this.t === 0) return -1; - } - else if (this.t == 1) return this[0]; - else if (this.t === 0) return 0; -// assumes 16 < DB < 32 - return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]; -} - -//(public) return value as byte -function bnByteValue() { - return (this.t == 0) ? this.s : (this[0] << 24) >> 24; -} - -//(public) return value as short (assumes DB>=16) -function bnShortValue() { - return (this.t == 0) ? this.s : (this[0] << 16) >> 16; -} - -//(protected) return x s.t. r^x < DV -function bnpChunkSize(r) { - return Math.floor(Math.LN2 * this.DB / Math.log(r)); -} - -//(public) 0 if this === 0, 1 if this > 0 -function bnSigNum() { - if (this.s < 0) return -1; - else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0; - else return 1; -} - -//(protected) convert to radix string -function bnpToRadix(b) { - if (b == null) b = 10; - if (this.signum() === 0 || b < 2 || b > 36) return "0"; - var cs = this.chunkSize(b); - var a = Math.pow(b, cs); - var d = nbv(a), y = nbi(), z = nbi(), r = ""; - this.divRemTo(d, y, z); - while (y.signum() > 0) { - r = (a + z.intValue()).toString(b).substr(1) + r; - y.divRemTo(d, y, z); - } - return z.intValue().toString(b) + r; -} - -//(protected) convert from radix string -function bnpFromRadix(s, b) { - this.fromInt(0); - if (b == null) b = 10; - var cs = this.chunkSize(b); - var d = Math.pow(b, cs), mi = false, j = 0, w = 0; - for (var i = 0; i < s.length; ++i) { - var x = intAt(s, i); - if (x < 0) { - if (s.charAt(i) == "-" && this.signum() === 0) mi = true; - continue; - } - w = b * w + x; - if (++j >= cs) { - this.dMultiply(d); - this.dAddOffset(w, 0); - j = 0; - w = 0; - } - } - if (j > 0) { - this.dMultiply(Math.pow(b, j)); - this.dAddOffset(w, 0); - } - if (mi) BigInteger.ZERO.subTo(this, this); -} - -//(protected) alternate constructor -function bnpFromNumber(a, b) { - if ("number" == typeof b) { - // new BigInteger(int,int,RNG) - if (a < 2) this.fromInt(1); - else { - this.fromNumber(a); - if (!this.testBit(a - 1)) // force MSB set - this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this); - if (this.isEven()) this.dAddOffset(1, 0); // force odd - while (!this.isProbablePrime(b)) { - this.dAddOffset(2, 0); - if (this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a - 1), this); - } - } - } else { - // new BigInteger(int,RNG) - var x = crypt.randomBytes((a >> 3) + 1) - var t = a & 7; - - if (t > 0) - x[0] &= ((1 << t) - 1); - else - x[0] = 0; - - this.fromByteArray(x); - } -} - -//(public) convert to bigendian byte array -function bnToByteArray() { - var i = this.t, r = new Array(); - r[0] = this.s; - var p = this.DB - (i * this.DB) % 8, d, k = 0; - if (i-- > 0) { - if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) - r[k++] = d | (this.s << (this.DB - p)); - while (i >= 0) { - if (p < 8) { - d = (this[i] & ((1 << p) - 1)) << (8 - p); - d |= this[--i] >> (p += this.DB - 8); - } - else { - d = (this[i] >> (p -= 8)) & 0xff; - if (p <= 0) { - p += this.DB; - --i; - } - } - if ((d & 0x80) != 0) d |= -256; - if (k === 0 && (this.s & 0x80) != (d & 0x80)) ++k; - if (k > 0 || d != this.s) r[k++] = d; - } - } - return r; -} - -/** - * return Buffer object - * @param trim {boolean} slice buffer if first element == 0 - * @returns {Buffer} - */ -function bnToBuffer(trimOrSize) { - var res = Buffer.from(this.toByteArray()); - if (trimOrSize === true && res[0] === 0) { - res = res.slice(1); - } else if (_.isNumber(trimOrSize)) { - if (res.length > trimOrSize) { - for (var i = 0; i < res.length - trimOrSize; i++) { - if (res[i] !== 0) { - return null; - } - } - return res.slice(res.length - trimOrSize); - } else if (res.length < trimOrSize) { - var padded = Buffer.alloc(trimOrSize); - padded.fill(0, 0, trimOrSize - res.length); - res.copy(padded, trimOrSize - res.length); - return padded; - } - } - return res; -} - -function bnEquals(a) { - return (this.compareTo(a) == 0); -} -function bnMin(a) { - return (this.compareTo(a) < 0) ? this : a; -} -function bnMax(a) { - return (this.compareTo(a) > 0) ? this : a; -} - -//(protected) r = this op a (bitwise) -function bnpBitwiseTo(a, op, r) { - var i, f, m = Math.min(a.t, this.t); - for (i = 0; i < m; ++i) r[i] = op(this[i], a[i]); - if (a.t < this.t) { - f = a.s & this.DM; - for (i = m; i < this.t; ++i) r[i] = op(this[i], f); - r.t = this.t; - } - else { - f = this.s & this.DM; - for (i = m; i < a.t; ++i) r[i] = op(f, a[i]); - r.t = a.t; - } - r.s = op(this.s, a.s); - r.clamp(); -} - -//(public) this & a -function op_and(x, y) { - return x & y; -} -function bnAnd(a) { - var r = nbi(); - this.bitwiseTo(a, op_and, r); - return r; -} - -//(public) this | a -function op_or(x, y) { - return x | y; -} -function bnOr(a) { - var r = nbi(); - this.bitwiseTo(a, op_or, r); - return r; -} - -//(public) this ^ a -function op_xor(x, y) { - return x ^ y; -} -function bnXor(a) { - var r = nbi(); - this.bitwiseTo(a, op_xor, r); - return r; -} - -//(public) this & ~a -function op_andnot(x, y) { - return x & ~y; -} -function bnAndNot(a) { - var r = nbi(); - this.bitwiseTo(a, op_andnot, r); - return r; -} - -//(public) ~this -function bnNot() { - var r = nbi(); - for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]; - r.t = this.t; - r.s = ~this.s; - return r; -} - -//(public) this << n -function bnShiftLeft(n) { - var r = nbi(); - if (n < 0) this.rShiftTo(-n, r); else this.lShiftTo(n, r); - return r; -} - -//(public) this >> n -function bnShiftRight(n) { - var r = nbi(); - if (n < 0) this.lShiftTo(-n, r); else this.rShiftTo(n, r); - return r; -} - -//return index of lowest 1-bit in x, x < 2^31 -function lbit(x) { - if (x === 0) return -1; - var r = 0; - if ((x & 0xffff) === 0) { - x >>= 16; - r += 16; - } - if ((x & 0xff) === 0) { - x >>= 8; - r += 8; - } - if ((x & 0xf) === 0) { - x >>= 4; - r += 4; - } - if ((x & 3) === 0) { - x >>= 2; - r += 2; - } - if ((x & 1) === 0) ++r; - return r; -} - -//(public) returns index of lowest 1-bit (or -1 if none) -function bnGetLowestSetBit() { - for (var i = 0; i < this.t; ++i) - if (this[i] != 0) return i * this.DB + lbit(this[i]); - if (this.s < 0) return this.t * this.DB; - return -1; -} - -//return number of 1 bits in x -function cbit(x) { - var r = 0; - while (x != 0) { - x &= x - 1; - ++r; - } - return r; -} - -//(public) return number of set bits -function bnBitCount() { - var r = 0, x = this.s & this.DM; - for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x); - return r; -} - -//(public) true iff nth bit is set -function bnTestBit(n) { - var j = Math.floor(n / this.DB); - if (j >= this.t) return (this.s != 0); - return ((this[j] & (1 << (n % this.DB))) != 0); -} - -//(protected) this op (1<>= this.DB; - } - if (a.t < this.t) { - c += a.s; - while (i < this.t) { - c += this[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while (i < a.t) { - c += a[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c += a.s; - } - r.s = (c < 0) ? -1 : 0; - if (c > 0) r[i++] = c; - else if (c < -1) r[i++] = this.DV + c; - r.t = i; - r.clamp(); -} - -//(public) this + a -function bnAdd(a) { - var r = nbi(); - this.addTo(a, r); - return r; -} - -//(public) this - a -function bnSubtract(a) { - var r = nbi(); - this.subTo(a, r); - return r; -} - -//(public) this * a -function bnMultiply(a) { - var r = nbi(); - this.multiplyTo(a, r); - return r; -} - -// (public) this^2 -function bnSquare() { - var r = nbi(); - this.squareTo(r); - return r; -} - -//(public) this / a -function bnDivide(a) { - var r = nbi(); - this.divRemTo(a, r, null); - return r; -} - -//(public) this % a -function bnRemainder(a) { - var r = nbi(); - this.divRemTo(a, null, r); - return r; -} - -//(public) [this/a,this%a] -function bnDivideAndRemainder(a) { - var q = nbi(), r = nbi(); - this.divRemTo(a, q, r); - return new Array(q, r); -} - -//(protected) this *= n, this >= 0, 1 < n < DV -function bnpDMultiply(n) { - this[this.t] = this.am(0, n - 1, this, 0, 0, this.t); - ++this.t; - this.clamp(); -} - -//(protected) this += n << w words, this >= 0 -function bnpDAddOffset(n, w) { - if (n === 0) return; - while (this.t <= w) this[this.t++] = 0; - this[w] += n; - while (this[w] >= this.DV) { - this[w] -= this.DV; - if (++w >= this.t) this[this.t++] = 0; - ++this[w]; - } -} - -//A "null" reducer -function NullExp() { -} -function nNop(x) { - return x; -} -function nMulTo(x, y, r) { - x.multiplyTo(y, r); -} -function nSqrTo(x, r) { - x.squareTo(r); -} - -NullExp.prototype.convert = nNop; -NullExp.prototype.revert = nNop; -NullExp.prototype.mulTo = nMulTo; -NullExp.prototype.sqrTo = nSqrTo; - -//(public) this^e -function bnPow(e) { - return this.exp(e, new NullExp()); -} - -//(protected) r = lower n words of "this * a", a.t <= n -//"this" should be the larger one if appropriate. -function bnpMultiplyLowerTo(a, n, r) { - var i = Math.min(this.t + a.t, n); - r.s = 0; // assumes a,this >= 0 - r.t = i; - while (i > 0) r[--i] = 0; - var j; - for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t); - for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i); - r.clamp(); -} - -//(protected) r = "this * a" without lower n words, n > 0 -//"this" should be the larger one if appropriate. -function bnpMultiplyUpperTo(a, n, r) { - --n; - var i = r.t = this.t + a.t - n; - r.s = 0; // assumes a,this >= 0 - while (--i >= 0) r[i] = 0; - for (i = Math.max(n - this.t, 0); i < a.t; ++i) - r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n); - r.clamp(); - r.drShiftTo(1, r); -} - -//Barrett modular reduction -function Barrett(m) { -// setup Barrett - this.r2 = nbi(); - this.q3 = nbi(); - BigInteger.ONE.dlShiftTo(2 * m.t, this.r2); - this.mu = this.r2.divide(m); - this.m = m; -} - -function barrettConvert(x) { - if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m); - else if (x.compareTo(this.m) < 0) return x; - else { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; - } -} - -function barrettRevert(x) { - return x; -} - -//x = x mod m (HAC 14.42) -function barrettReduce(x) { - x.drShiftTo(this.m.t - 1, this.r2); - if (x.t > this.m.t + 1) { - x.t = this.m.t + 1; - x.clamp(); - } - this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3); - this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); - while (x.compareTo(this.r2) < 0) x.dAddOffset(1, this.m.t + 1); - x.subTo(this.r2, x); - while (x.compareTo(this.m) >= 0) x.subTo(this.m, x); -} - -//r = x^2 mod m; x != r -function barrettSqrTo(x, r) { - x.squareTo(r); - this.reduce(r); -} - -//r = x*y mod m; x,y != r -function barrettMulTo(x, y, r) { - x.multiplyTo(y, r); - this.reduce(r); -} - -Barrett.prototype.convert = barrettConvert; -Barrett.prototype.revert = barrettRevert; -Barrett.prototype.reduce = barrettReduce; -Barrett.prototype.mulTo = barrettMulTo; -Barrett.prototype.sqrTo = barrettSqrTo; - -//(public) this^e % m (HAC 14.85) -function bnModPow(e, m) { - var i = e.bitLength(), k, r = nbv(1), z; - if (i <= 0) return r; - else if (i < 18) k = 1; - else if (i < 48) k = 3; - else if (i < 144) k = 4; - else if (i < 768) k = 5; - else k = 6; - if (i < 8) - z = new Classic(m); - else if (m.isEven()) - z = new Barrett(m); - else - z = new Montgomery(m); - -// precomputation - var g = new Array(), n = 3, k1 = k - 1, km = (1 << k) - 1; - g[1] = z.convert(this); - if (k > 1) { - var g2 = nbi(); - z.sqrTo(g[1], g2); - while (n <= km) { - g[n] = nbi(); - z.mulTo(g2, g[n - 2], g[n]); - n += 2; - } - } - - var j = e.t - 1, w, is1 = true, r2 = nbi(), t; - i = nbits(e[j]) - 1; - while (j >= 0) { - if (i >= k1) w = (e[j] >> (i - k1)) & km; - else { - w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i); - if (j > 0) w |= e[j - 1] >> (this.DB + i - k1); - } - - n = k; - while ((w & 1) === 0) { - w >>= 1; - --n; - } - if ((i -= n) < 0) { - i += this.DB; - --j; - } - if (is1) { // ret == 1, don't bother squaring or multiplying it - g[w].copyTo(r); - is1 = false; - } - else { - while (n > 1) { - z.sqrTo(r, r2); - z.sqrTo(r2, r); - n -= 2; - } - if (n > 0) z.sqrTo(r, r2); else { - t = r; - r = r2; - r2 = t; - } - z.mulTo(r2, g[w], r); - } - - while (j >= 0 && (e[j] & (1 << i)) === 0) { - z.sqrTo(r, r2); - t = r; - r = r2; - r2 = t; - if (--i < 0) { - i = this.DB - 1; - --j; - } - } - } - return z.revert(r); -} - -//(public) gcd(this,a) (HAC 14.54) -function bnGCD(a) { - var x = (this.s < 0) ? this.negate() : this.clone(); - var y = (a.s < 0) ? a.negate() : a.clone(); - if (x.compareTo(y) < 0) { - var t = x; - x = y; - y = t; - } - var i = x.getLowestSetBit(), g = y.getLowestSetBit(); - if (g < 0) return x; - if (i < g) g = i; - if (g > 0) { - x.rShiftTo(g, x); - y.rShiftTo(g, y); - } - while (x.signum() > 0) { - if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x); - if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y); - if (x.compareTo(y) >= 0) { - x.subTo(y, x); - x.rShiftTo(1, x); - } - else { - y.subTo(x, y); - y.rShiftTo(1, y); - } - } - if (g > 0) y.lShiftTo(g, y); - return y; -} - -//(protected) this % n, n < 2^26 -function bnpModInt(n) { - if (n <= 0) return 0; - var d = this.DV % n, r = (this.s < 0) ? n - 1 : 0; - if (this.t > 0) - if (d === 0) r = this[0] % n; - else for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n; - return r; -} - -//(public) 1/this % m (HAC 14.61) -function bnModInverse(m) { - var ac = m.isEven(); - if ((this.isEven() && ac) || m.signum() === 0) return BigInteger.ZERO; - var u = m.clone(), v = this.clone(); - var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); - while (u.signum() != 0) { - while (u.isEven()) { - u.rShiftTo(1, u); - if (ac) { - if (!a.isEven() || !b.isEven()) { - a.addTo(this, a); - b.subTo(m, b); - } - a.rShiftTo(1, a); - } - else if (!b.isEven()) b.subTo(m, b); - b.rShiftTo(1, b); - } - while (v.isEven()) { - v.rShiftTo(1, v); - if (ac) { - if (!c.isEven() || !d.isEven()) { - c.addTo(this, c); - d.subTo(m, d); - } - c.rShiftTo(1, c); - } - else if (!d.isEven()) d.subTo(m, d); - d.rShiftTo(1, d); - } - if (u.compareTo(v) >= 0) { - u.subTo(v, u); - if (ac) a.subTo(c, a); - b.subTo(d, b); - } - else { - v.subTo(u, v); - if (ac) c.subTo(a, c); - d.subTo(b, d); - } - } - if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; - if (d.compareTo(m) >= 0) return d.subtract(m); - if (d.signum() < 0) d.addTo(m, d); else return d; - if (d.signum() < 0) return d.add(m); else return d; -} - -var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]; -var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]; - -//(public) test primality with certainty >= 1-.5^t -function bnIsProbablePrime(t) { - var i, x = this.abs(); - if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) { - for (i = 0; i < lowprimes.length; ++i) - if (x[0] == lowprimes[i]) return true; - return false; - } - if (x.isEven()) return false; - i = 1; - while (i < lowprimes.length) { - var m = lowprimes[i], j = i + 1; - while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]; - m = x.modInt(m); - while (i < j) if (m % lowprimes[i++] === 0) return false; - } - return x.millerRabin(t); -} - -//(protected) true if probably prime (HAC 4.24, Miller-Rabin) -function bnpMillerRabin(t) { - var n1 = this.subtract(BigInteger.ONE); - var k = n1.getLowestSetBit(); - if (k <= 0) return false; - var r = n1.shiftRight(k); - t = (t + 1) >> 1; - if (t > lowprimes.length) t = lowprimes.length; - var a = nbi(); - for (var i = 0; i < t; ++i) { - //Pick bases at random, instead of starting at 2 - a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]); - var y = a.modPow(r, this); - if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { - var j = 1; - while (j++ < k && y.compareTo(n1) != 0) { - y = y.modPowInt(2, this); - if (y.compareTo(BigInteger.ONE) === 0) return false; - } - if (y.compareTo(n1) != 0) return false; - } - } - return true; -} - -// protected -BigInteger.prototype.copyTo = bnpCopyTo; -BigInteger.prototype.fromInt = bnpFromInt; -BigInteger.prototype.fromString = bnpFromString; -BigInteger.prototype.fromByteArray = bnpFromByteArray; -BigInteger.prototype.fromBuffer = bnpFromBuffer; -BigInteger.prototype.clamp = bnpClamp; -BigInteger.prototype.dlShiftTo = bnpDLShiftTo; -BigInteger.prototype.drShiftTo = bnpDRShiftTo; -BigInteger.prototype.lShiftTo = bnpLShiftTo; -BigInteger.prototype.rShiftTo = bnpRShiftTo; -BigInteger.prototype.subTo = bnpSubTo; -BigInteger.prototype.multiplyTo = bnpMultiplyTo; -BigInteger.prototype.squareTo = bnpSquareTo; -BigInteger.prototype.divRemTo = bnpDivRemTo; -BigInteger.prototype.invDigit = bnpInvDigit; -BigInteger.prototype.isEven = bnpIsEven; -BigInteger.prototype.exp = bnpExp; - -BigInteger.prototype.chunkSize = bnpChunkSize; -BigInteger.prototype.toRadix = bnpToRadix; -BigInteger.prototype.fromRadix = bnpFromRadix; -BigInteger.prototype.fromNumber = bnpFromNumber; -BigInteger.prototype.bitwiseTo = bnpBitwiseTo; -BigInteger.prototype.changeBit = bnpChangeBit; -BigInteger.prototype.addTo = bnpAddTo; -BigInteger.prototype.dMultiply = bnpDMultiply; -BigInteger.prototype.dAddOffset = bnpDAddOffset; -BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; -BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; -BigInteger.prototype.modInt = bnpModInt; -BigInteger.prototype.millerRabin = bnpMillerRabin; - - -// public -BigInteger.prototype.toString = bnToString; -BigInteger.prototype.negate = bnNegate; -BigInteger.prototype.abs = bnAbs; -BigInteger.prototype.compareTo = bnCompareTo; -BigInteger.prototype.bitLength = bnBitLength; -BigInteger.prototype.mod = bnMod; -BigInteger.prototype.modPowInt = bnModPowInt; - -BigInteger.prototype.clone = bnClone; -BigInteger.prototype.intValue = bnIntValue; -BigInteger.prototype.byteValue = bnByteValue; -BigInteger.prototype.shortValue = bnShortValue; -BigInteger.prototype.signum = bnSigNum; -BigInteger.prototype.toByteArray = bnToByteArray; -BigInteger.prototype.toBuffer = bnToBuffer; -BigInteger.prototype.equals = bnEquals; -BigInteger.prototype.min = bnMin; -BigInteger.prototype.max = bnMax; -BigInteger.prototype.and = bnAnd; -BigInteger.prototype.or = bnOr; -BigInteger.prototype.xor = bnXor; -BigInteger.prototype.andNot = bnAndNot; -BigInteger.prototype.not = bnNot; -BigInteger.prototype.shiftLeft = bnShiftLeft; -BigInteger.prototype.shiftRight = bnShiftRight; -BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; -BigInteger.prototype.bitCount = bnBitCount; -BigInteger.prototype.testBit = bnTestBit; -BigInteger.prototype.setBit = bnSetBit; -BigInteger.prototype.clearBit = bnClearBit; -BigInteger.prototype.flipBit = bnFlipBit; -BigInteger.prototype.add = bnAdd; -BigInteger.prototype.subtract = bnSubtract; -BigInteger.prototype.multiply = bnMultiply; -BigInteger.prototype.divide = bnDivide; -BigInteger.prototype.remainder = bnRemainder; -BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; -BigInteger.prototype.modPow = bnModPow; -BigInteger.prototype.modInverse = bnModInverse; -BigInteger.prototype.pow = bnPow; -BigInteger.prototype.gcd = bnGCD; -BigInteger.prototype.isProbablePrime = bnIsProbablePrime; -BigInteger.int2char = int2char; - -// "constants" -BigInteger.ZERO = nbv(0); -BigInteger.ONE = nbv(1); - -// JSBN-specific extension -BigInteger.prototype.square = bnSquare; - -//BigInteger interfaces not implemented in jsbn: - -//BigInteger(int signum, byte[] magnitude) -//double doubleValue() -//float floatValue() -//int hashCode() -//long longValue() -//static BigInteger valueOf(long val) - -module.exports = BigInteger; \ No newline at end of file diff --git a/node_modules/node-rsa/src/schemes/pss.js b/node_modules/node-rsa/src/schemes/pss.js deleted file mode 100644 index d7f3b58..0000000 --- a/node_modules/node-rsa/src/schemes/pss.js +++ /dev/null @@ -1,183 +0,0 @@ -/** - * PSS signature scheme - */ - -var BigInteger = require('../libs/jsbn'); -var crypt = require('crypto'); - -module.exports = { - isEncryption: false, - isSignature: true -}; - -var DEFAULT_HASH_FUNCTION = 'sha1'; -var DEFAULT_SALT_LENGTH = 20; - -module.exports.makeScheme = function (key, options) { - var OAEP = require('./schemes').pkcs1_oaep; - - /** - * @param key - * @param options - * options [Object] An object that contains the following keys that specify certain options for encoding. - * └>signingSchemeOptions - * ├>hash [String] Hash function to use when encoding and generating masks. Must be a string accepted by node's crypto.createHash function. (default = "sha1") - * ├>mgf [function] The mask generation function to use when encoding. (default = mgf1SHA1) - * └>sLen [uint] The length of the salt to generate. (default = 20) - * @constructor - */ - function Scheme(key, options) { - this.key = key; - this.options = options; - } - - Scheme.prototype.sign = function (buffer) { - var mHash = crypt.createHash(this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION); - mHash.update(buffer); - - var encoded = this.emsa_pss_encode(mHash.digest(), this.key.keySize - 1); - return this.key.$doPrivate(new BigInteger(encoded)).toBuffer(this.key.encryptedDataLength); - }; - - Scheme.prototype.verify = function (buffer, signature, signature_encoding) { - if (signature_encoding) { - signature = Buffer.from(signature, signature_encoding); - } - signature = new BigInteger(signature); - - var emLen = Math.ceil((this.key.keySize - 1) / 8); - var m = this.key.$doPublic(signature).toBuffer(emLen); - - var mHash = crypt.createHash(this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION); - mHash.update(buffer); - - return this.emsa_pss_verify(mHash.digest(), m, this.key.keySize - 1); - }; - - /* - * https://tools.ietf.org/html/rfc3447#section-9.1.1 - * - * mHash [Buffer] Hashed message to encode - * emBits [uint] Maximum length of output in bits. Must be at least 8hLen + 8sLen + 9 (hLen = Hash digest length in bytes | sLen = length of salt in bytes) - * @returns {Buffer} The encoded message - */ - Scheme.prototype.emsa_pss_encode = function (mHash, emBits) { - var hash = this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION; - var mgf = this.options.signingSchemeOptions.mgf || OAEP.eme_oaep_mgf1; - var sLen = this.options.signingSchemeOptions.saltLength || DEFAULT_SALT_LENGTH; - - var hLen = OAEP.digestLength[hash]; - var emLen = Math.ceil(emBits / 8); - - if (emLen < hLen + sLen + 2) { - throw new Error("Output length passed to emBits(" + emBits + ") is too small for the options " + - "specified(" + hash + ", " + sLen + "). To fix this issue increase the value of emBits. (minimum size: " + - (8 * hLen + 8 * sLen + 9) + ")" - ); - } - - var salt = crypt.randomBytes(sLen); - - var Mapostrophe = Buffer.alloc(8 + hLen + sLen); - Mapostrophe.fill(0, 0, 8); - mHash.copy(Mapostrophe, 8); - salt.copy(Mapostrophe, 8 + mHash.length); - - var H = crypt.createHash(hash); - H.update(Mapostrophe); - H = H.digest(); - - var PS = Buffer.alloc(emLen - salt.length - hLen - 2); - PS.fill(0); - - var DB = Buffer.alloc(PS.length + 1 + salt.length); - PS.copy(DB); - DB[PS.length] = 0x01; - salt.copy(DB, PS.length + 1); - - var dbMask = mgf(H, DB.length, hash); - - // XOR DB and dbMask together - var maskedDB = Buffer.alloc(DB.length); - for (var i = 0; i < dbMask.length; i++) { - maskedDB[i] = DB[i] ^ dbMask[i]; - } - - var bits = 8 * emLen - emBits; - var mask = 255 ^ (255 >> 8 - bits << 8 - bits); - maskedDB[0] = maskedDB[0] & mask; - - var EM = Buffer.alloc(maskedDB.length + H.length + 1); - maskedDB.copy(EM, 0); - H.copy(EM, maskedDB.length); - EM[EM.length - 1] = 0xbc; - - return EM; - }; - - /* - * https://tools.ietf.org/html/rfc3447#section-9.1.2 - * - * mHash [Buffer] Hashed message - * EM [Buffer] Signature - * emBits [uint] Length of EM in bits. Must be at least 8hLen + 8sLen + 9 to be a valid signature. (hLen = Hash digest length in bytes | sLen = length of salt in bytes) - * @returns {Boolean} True if signature(EM) matches message(M) - */ - Scheme.prototype.emsa_pss_verify = function (mHash, EM, emBits) { - var hash = this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION; - var mgf = this.options.signingSchemeOptions.mgf || OAEP.eme_oaep_mgf1; - var sLen = this.options.signingSchemeOptions.saltLength || DEFAULT_SALT_LENGTH; - - var hLen = OAEP.digestLength[hash]; - var emLen = Math.ceil(emBits / 8); - - if (emLen < hLen + sLen + 2 || EM[EM.length - 1] != 0xbc) { - return false; - } - - var DB = Buffer.alloc(emLen - hLen - 1); - EM.copy(DB, 0, 0, emLen - hLen - 1); - - var mask = 0; - for (var i = 0, bits = 8 * emLen - emBits; i < bits; i++) { - mask |= 1 << (7 - i); - } - - if ((DB[0] & mask) !== 0) { - return false; - } - - var H = EM.slice(emLen - hLen - 1, emLen - 1); - var dbMask = mgf(H, DB.length, hash); - - // Unmask DB - for (i = 0; i < DB.length; i++) { - DB[i] ^= dbMask[i]; - } - - bits = 8 * emLen - emBits; - mask = 255 ^ (255 >> 8 - bits << 8 - bits); - DB[0] = DB[0] & mask; - - // Filter out padding - for (i = 0; DB[i] === 0 && i < DB.length; i++); - if (DB[i] != 1) { - return false; - } - - var salt = DB.slice(DB.length - sLen); - - var Mapostrophe = Buffer.alloc(8 + hLen + sLen); - Mapostrophe.fill(0, 0, 8); - mHash.copy(Mapostrophe, 8); - salt.copy(Mapostrophe, 8 + mHash.length); - - var Hapostrophe = crypt.createHash(hash); - Hapostrophe.update(Mapostrophe); - Hapostrophe = Hapostrophe.digest(); - - return H.toString("hex") === Hapostrophe.toString("hex"); - }; - - return new Scheme(key, options); -}; diff --git a/node_modules/node-rsa/src/schemes/schemes.js b/node_modules/node-rsa/src/schemes/schemes.js deleted file mode 100644 index 141827a..0000000 --- a/node_modules/node-rsa/src/schemes/schemes.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = { - pkcs1: require('./pkcs1'), - pkcs1_oaep: require('./oaep'), - pss: require('./pss'), - - /** - * Check if scheme has padding methods - * @param scheme {string} - * @returns {Boolean} - */ - isEncryption: function (scheme) { - return module.exports[scheme] && module.exports[scheme].isEncryption; - }, - - /** - * Check if scheme has sign/verify methods - * @param scheme {string} - * @returns {Boolean} - */ - isSignature: function (scheme) { - return module.exports[scheme] && module.exports[scheme].isSignature; - } -}; \ No newline at end of file diff --git a/node_modules/object-assign/index.js b/node_modules/object-assign/index.js deleted file mode 100644 index 0930cf8..0000000 --- a/node_modules/object-assign/index.js +++ /dev/null @@ -1,90 +0,0 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - -'use strict'; -/* eslint-disable no-unused-vars */ -var getOwnPropertySymbols = Object.getOwnPropertySymbols; -var hasOwnProperty = Object.prototype.hasOwnProperty; -var propIsEnumerable = Object.prototype.propertyIsEnumerable; - -function toObject(val) { - if (val === null || val === undefined) { - throw new TypeError('Object.assign cannot be called with null or undefined'); - } - - return Object(val); -} - -function shouldUseNative() { - try { - if (!Object.assign) { - return false; - } - - // Detect buggy property enumeration order in older V8 versions. - - // https://bugs.chromium.org/p/v8/issues/detail?id=4118 - var test1 = new String('abc'); // eslint-disable-line no-new-wrappers - test1[5] = 'de'; - if (Object.getOwnPropertyNames(test1)[0] === '5') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test2 = {}; - for (var i = 0; i < 10; i++) { - test2['_' + String.fromCharCode(i)] = i; - } - var order2 = Object.getOwnPropertyNames(test2).map(function (n) { - return test2[n]; - }); - if (order2.join('') !== '0123456789') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test3 = {}; - 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { - test3[letter] = letter; - }); - if (Object.keys(Object.assign({}, test3)).join('') !== - 'abcdefghijklmnopqrst') { - return false; - } - - return true; - } catch (err) { - // We don't expect any of the above to throw, but better to be safe. - return false; - } -} - -module.exports = shouldUseNative() ? Object.assign : function (target, source) { - var from; - var to = toObject(target); - var symbols; - - for (var s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); - - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) { - if (propIsEnumerable.call(from, symbols[i])) { - to[symbols[i]] = from[symbols[i]]; - } - } - } - } - - return to; -}; diff --git a/node_modules/object-assign/license b/node_modules/object-assign/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/object-assign/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/object-assign/package.json b/node_modules/object-assign/package.json deleted file mode 100644 index 503eb1e..0000000 --- a/node_modules/object-assign/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "object-assign", - "version": "4.1.1", - "description": "ES2015 `Object.assign()` ponyfill", - "license": "MIT", - "repository": "sindresorhus/object-assign", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "xo && ava", - "bench": "matcha bench.js" - }, - "files": [ - "index.js" - ], - "keywords": [ - "object", - "assign", - "extend", - "properties", - "es2015", - "ecmascript", - "harmony", - "ponyfill", - "prollyfill", - "polyfill", - "shim", - "browser" - ], - "devDependencies": { - "ava": "^0.16.0", - "lodash": "^4.16.4", - "matcha": "^0.7.0", - "xo": "^0.16.0" - } -} diff --git a/node_modules/object-assign/readme.md b/node_modules/object-assign/readme.md deleted file mode 100644 index 1be09d3..0000000 --- a/node_modules/object-assign/readme.md +++ /dev/null @@ -1,61 +0,0 @@ -# object-assign [![Build Status](https://travis-ci.org/sindresorhus/object-assign.svg?branch=master)](https://travis-ci.org/sindresorhus/object-assign) - -> ES2015 [`Object.assign()`](http://www.2ality.com/2014/01/object-assign.html) [ponyfill](https://ponyfill.com) - - -## Use the built-in - -Node.js 4 and up, as well as every evergreen browser (Chrome, Edge, Firefox, Opera, Safari), -support `Object.assign()` :tada:. If you target only those environments, then by all -means, use `Object.assign()` instead of this package. - - -## Install - -``` -$ npm install --save object-assign -``` - - -## Usage - -```js -const objectAssign = require('object-assign'); - -objectAssign({foo: 0}, {bar: 1}); -//=> {foo: 0, bar: 1} - -// multiple sources -objectAssign({foo: 0}, {bar: 1}, {baz: 2}); -//=> {foo: 0, bar: 1, baz: 2} - -// overwrites equal keys -objectAssign({foo: 0}, {foo: 1}, {foo: 2}); -//=> {foo: 2} - -// ignores null and undefined sources -objectAssign({foo: 0}, null, {bar: 1}, undefined); -//=> {foo: 0, bar: 1} -``` - - -## API - -### objectAssign(target, [source, ...]) - -Assigns enumerable own properties of `source` objects to the `target` object and returns the `target` object. Additional `source` objects will overwrite previous ones. - - -## Resources - -- [ES2015 spec - Object.assign](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign) - - -## Related - -- [deep-assign](https://github.com/sindresorhus/deep-assign) - Recursive `Object.assign()` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/once/LICENSE b/node_modules/once/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/node_modules/once/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/once/README.md b/node_modules/once/README.md deleted file mode 100644 index 1f1ffca..0000000 --- a/node_modules/once/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# once - -Only call a function once. - -## usage - -```javascript -var once = require('once') - -function load (file, cb) { - cb = once(cb) - loader.load('file') - loader.once('load', cb) - loader.once('error', cb) -} -``` - -Or add to the Function.prototype in a responsible way: - -```javascript -// only has to be done once -require('once').proto() - -function load (file, cb) { - cb = cb.once() - loader.load('file') - loader.once('load', cb) - loader.once('error', cb) -} -``` - -Ironically, the prototype feature makes this module twice as -complicated as necessary. - -To check whether you function has been called, use `fn.called`. Once the -function is called for the first time the return value of the original -function is saved in `fn.value` and subsequent calls will continue to -return this value. - -```javascript -var once = require('once') - -function load (cb) { - cb = once(cb) - var stream = createStream() - stream.once('data', cb) - stream.once('end', function () { - if (!cb.called) cb(new Error('not found')) - }) -} -``` - -## `once.strict(func)` - -Throw an error if the function is called twice. - -Some functions are expected to be called only once. Using `once` for them would -potentially hide logical errors. - -In the example below, the `greet` function has to call the callback only once: - -```javascript -function greet (name, cb) { - // return is missing from the if statement - // when no name is passed, the callback is called twice - if (!name) cb('Hello anonymous') - cb('Hello ' + name) -} - -function log (msg) { - console.log(msg) -} - -// this will print 'Hello anonymous' but the logical error will be missed -greet(null, once(msg)) - -// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time -greet(null, once.strict(msg)) -``` diff --git a/node_modules/once/once.js b/node_modules/once/once.js deleted file mode 100644 index 2354067..0000000 --- a/node_modules/once/once.js +++ /dev/null @@ -1,42 +0,0 @@ -var wrappy = require('wrappy') -module.exports = wrappy(once) -module.exports.strict = wrappy(onceStrict) - -once.proto = once(function () { - Object.defineProperty(Function.prototype, 'once', { - value: function () { - return once(this) - }, - configurable: true - }) - - Object.defineProperty(Function.prototype, 'onceStrict', { - value: function () { - return onceStrict(this) - }, - configurable: true - }) -}) - -function once (fn) { - var f = function () { - if (f.called) return f.value - f.called = true - return f.value = fn.apply(this, arguments) - } - f.called = false - return f -} - -function onceStrict (fn) { - var f = function () { - if (f.called) - throw new Error(f.onceError) - f.called = true - return f.value = fn.apply(this, arguments) - } - var name = fn.name || 'Function wrapped with `once`' - f.onceError = name + " shouldn't be called more than once" - f.called = false - return f -} diff --git a/node_modules/once/package.json b/node_modules/once/package.json deleted file mode 100644 index 16815b2..0000000 --- a/node_modules/once/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "once", - "version": "1.4.0", - "description": "Run a function exactly one time", - "main": "once.js", - "directories": { - "test": "test" - }, - "dependencies": { - "wrappy": "1" - }, - "devDependencies": { - "tap": "^7.0.1" - }, - "scripts": { - "test": "tap test/*.js" - }, - "files": [ - "once.js" - ], - "repository": { - "type": "git", - "url": "git://github.com/isaacs/once" - }, - "keywords": [ - "once", - "function", - "one", - "single" - ], - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC" -} diff --git a/node_modules/onetime/index.js b/node_modules/onetime/index.js deleted file mode 100644 index 0d76476..0000000 --- a/node_modules/onetime/index.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; -const mimicFn = require('mimic-fn'); - -module.exports = (fn, opts) => { - // TODO: Remove this in v3 - if (opts === true) { - throw new TypeError('The second argument is now an options object'); - } - - if (typeof fn !== 'function') { - throw new TypeError('Expected a function'); - } - - opts = opts || {}; - - let ret; - let called = false; - const fnName = fn.displayName || fn.name || ''; - - const onetime = function () { - if (called) { - if (opts.throw === true) { - throw new Error(`Function \`${fnName}\` can only be called once`); - } - - return ret; - } - - called = true; - ret = fn.apply(this, arguments); - fn = null; - - return ret; - }; - - mimicFn(onetime, fn); - - return onetime; -}; diff --git a/node_modules/onetime/license b/node_modules/onetime/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/onetime/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/onetime/package.json b/node_modules/onetime/package.json deleted file mode 100644 index 73223ff..0000000 --- a/node_modules/onetime/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "onetime", - "version": "2.0.1", - "description": "Ensure a function is only called once", - "license": "MIT", - "repository": "sindresorhus/onetime", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=4" - }, - "scripts": { - "test": "xo && ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "once", - "function", - "one", - "onetime", - "func", - "fn", - "single", - "call", - "called", - "prevent" - ], - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "devDependencies": { - "ava": "*", - "xo": "*" - } -} diff --git a/node_modules/onetime/readme.md b/node_modules/onetime/readme.md deleted file mode 100644 index 95eb3b7..0000000 --- a/node_modules/onetime/readme.md +++ /dev/null @@ -1,65 +0,0 @@ -# onetime [![Build Status](https://travis-ci.org/sindresorhus/onetime.svg?branch=master)](https://travis-ci.org/sindresorhus/onetime) - -> Ensure a function is only called once - -When called multiple times it will return the return value from the first call. - -*Unlike the module [once](https://github.com/isaacs/once), this one isn't naughty extending `Function.prototype`.* - - -## Install - -``` -$ npm install --save onetime -``` - - -## Usage - -```js -let i = 0; - -const foo = onetime(() => i++); - -foo(); //=> 0 -foo(); //=> 0 -foo(); //=> 0 -``` - -```js -const foo = onetime(() => {}, {throw: true}); - -foo(); - -foo(); -//=> Error: Function `foo` can only be called once -``` - - -## API - -### onetime(fn, [options]) - -Returns a function that only calls `fn` once. - -#### fn - -Type: `Function` - -Function that should only be called once. - -#### options - -Type: `Object` - -##### throw - -Type: `boolean`
-Default: `false` - -Throw an error when called more than once. - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/optionator/CHANGELOG.md b/node_modules/optionator/CHANGELOG.md deleted file mode 100644 index ddaf0b5..0000000 --- a/node_modules/optionator/CHANGELOG.md +++ /dev/null @@ -1,56 +0,0 @@ -# 0.8.3 -- changes dependency from `wordwrap` to `word-wrap` due to license issue -- update dependencies - -# 0.8.2 -- fix bug #18 - detect missing value when flag is last item -- update dependencies - -# 0.8.1 -- update `fast-levenshtein` dependency - -# 0.8.0 -- update `levn` dependency - supplying a float value to an option with type `Int` now throws an error, instead of silently converting to an `Int` - -# 0.7.1 -- fix bug with use of `defaults` and `concatRepeatedArrays` or `mergeRepeatedObjects` - -# 0.7.0 -- added `concatrepeatedarrays` option: `oneValuePerFlag`, only allows one array value per flag -- added `typeAliases` option -- added `parseArgv` which takes an array and parses with the first two items sliced off -- changed enum help style -- bug fixes (#12) -- use of `concatRepeatedArrays` and `mergeRepeatedObjects` at the top level is deprecated, use it as either a per-option option, or set them in the `defaults` object to set them for all objects - -# 0.6.0 -- added `defaults` lib-option flag, allowing one to set default properties for all options -- added `concatRepeatedArrays` and `mergeRepeatedObjects` as option level properties, allowing you to turn this feature on for specific options only - -# 0.5.0 -- `Boolean` flags with `default: 'true'`, and no short aliases, will by default show the `--no` version in help - -# 0.4.0 -- add `mergeRepeatedObjects` setting - -# 0.3.0 -- add `concatRepeatedArrays` setting -- add `overrideRequired` option setting -- use just Levenshtein string compare algo rather than Levenshtein Damerau to due dependency license issue - -# 0.2.2 -- bug fixes - -# 0.2.1 -- improved interpolation -- added changelog - -# 0.2.0 -- add dependency checks to options - added `dependsOn` as an option property -- add interpolation for `prepend` and `append` text with new `generateHelp` option, `interpolate` - -# 0.1.1 -- update dependencies - -# 0.1.0 -- initial release diff --git a/node_modules/optionator/README.md b/node_modules/optionator/README.md deleted file mode 100644 index 8e4ba42..0000000 --- a/node_modules/optionator/README.md +++ /dev/null @@ -1,238 +0,0 @@ -# Optionator - - -Optionator is a JavaScript/Node.js option parsing and help generation library used by [eslint](http://eslint.org), [Grasp](http://graspjs.com), [LiveScript](http://livescript.net), [esmangle](https://github.com/estools/esmangle), [escodegen](https://github.com/estools/escodegen), and [many more](https://www.npmjs.com/browse/depended/optionator). - -For an online demo, check out the [Grasp online demo](http://www.graspjs.com/#demo). - -[About](#about) · [Usage](#usage) · [Settings Format](#settings-format) · [Argument Format](#argument-format) - -## Why? -The problem with other option parsers, such as `yargs` or `minimist`, is they just accept all input, valid or not. -With Optionator, if you mistype an option, it will give you an error (with a suggestion for what you meant). -If you give the wrong type of argument for an option, it will give you an error rather than supplying the wrong input to your application. - - $ cmd --halp - Invalid option '--halp' - perhaps you meant '--help'? - - $ cmd --count str - Invalid value for option 'count' - expected type Int, received value: str. - -Other helpful features include reformatting the help text based on the size of the console, so that it fits even if the console is narrow, and accepting not just an array (eg. process.argv), but a string or object as well, making things like testing much easier. - -## About -Optionator uses [type-check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) behind the scenes to cast and verify input according the specified types. - -MIT license. Version 0.8.3 - - npm install optionator - -For updates on Optionator, [follow me on twitter](https://twitter.com/gkzahariev). - -Optionator is a Node.js module, but can be used in the browser as well if packed with webpack/browserify. - -## Usage -`require('optionator');` returns a function. It has one property, `VERSION`, the current version of the library as a string. This function is called with an object specifying your options and other information, see the [settings format section](#settings-format). This in turn returns an object with three properties, `parse`, `parseArgv`, `generateHelp`, and `generateHelpForOption`, which are all functions. - -```js -var optionator = require('optionator')({ - prepend: 'Usage: cmd [options]', - append: 'Version 1.0.0', - options: [{ - option: 'help', - alias: 'h', - type: 'Boolean', - description: 'displays help' - }, { - option: 'count', - alias: 'c', - type: 'Int', - description: 'number of things', - example: 'cmd --count 2' - }] -}); - -var options = optionator.parseArgv(process.argv); -if (options.help) { - console.log(optionator.generateHelp()); -} -... -``` - -### parse(input, parseOptions) -`parse` processes the `input` according to your settings, and returns an object with the results. - -##### arguments -* input - `[String] | Object | String` - the input you wish to parse -* parseOptions - `{slice: Int}` - all options optional - - `slice` specifies how much to slice away from the beginning if the input is an array or string - by default `0` for string, `2` for array (works with `process.argv`) - -##### returns -`Object` - the parsed options, each key is a camelCase version of the option name (specified in dash-case), and each value is the processed value for that option. Positional values are in an array under the `_` key. - -##### example -```js -parse(['node', 't.js', '--count', '2', 'positional']); // {count: 2, _: ['positional']} -parse('--count 2 positional'); // {count: 2, _: ['positional']} -parse({count: 2, _:['positional']}); // {count: 2, _: ['positional']} -``` - -### parseArgv(input) -`parseArgv` works exactly like `parse`, but only for array input and it slices off the first two elements. - -##### arguments -* input - `[String]` - the input you wish to parse - -##### returns -See "returns" section in "parse" - -##### example -```js -parseArgv(process.argv); -``` - -### generateHelp(helpOptions) -`generateHelp` produces help text based on your settings. - -##### arguments -* helpOptions - `{showHidden: Boolean, interpolate: Object}` - all options optional - - `showHidden` specifies whether to show options with `hidden: true` specified, by default it is `false` - - `interpolate` specify data to be interpolated in `prepend` and `append` text, `{{key}}` is the format - eg. `generateHelp({interpolate:{version: '0.4.2'}})`, will change this `append` text: `Version {{version}}` to `Version 0.4.2` - -##### returns -`String` - the generated help text - -##### example -```js -generateHelp(); /* -"Usage: cmd [options] positional - - -h, --help displays help - -c, --count Int number of things - -Version 1.0.0 -"*/ -``` - -### generateHelpForOption(optionName) -`generateHelpForOption` produces expanded help text for the specified with `optionName` option. If an `example` was specified for the option, it will be displayed, and if a `longDescription` was specified, it will display that instead of the `description`. - -##### arguments -* optionName - `String` - the name of the option to display - -##### returns -`String` - the generated help text for the option - -##### example -```js -generateHelpForOption('count'); /* -"-c, --count Int -description: number of things -example: cmd --count 2 -"*/ -``` - -## Settings Format -When your `require('optionator')`, you get a function that takes in a settings object. This object has the type: - - { - prepend: String, - append: String, - options: [{heading: String} | { - option: String, - alias: [String] | String, - type: String, - enum: [String], - default: String, - restPositional: Boolean, - required: Boolean, - overrideRequired: Boolean, - dependsOn: [String] | String, - concatRepeatedArrays: Boolean | (Boolean, Object), - mergeRepeatedObjects: Boolean, - description: String, - longDescription: String, - example: [String] | String - }], - helpStyle: { - aliasSeparator: String, - typeSeparator: String, - descriptionSeparator: String, - initialIndent: Int, - secondaryIndent: Int, - maxPadFactor: Number - }, - mutuallyExclusive: [[String | [String]]], - concatRepeatedArrays: Boolean | (Boolean, Object), // deprecated, set in defaults object - mergeRepeatedObjects: Boolean, // deprecated, set in defaults object - positionalAnywhere: Boolean, - typeAliases: Object, - defaults: Object - } - -All of the properties are optional (the `Maybe` has been excluded for brevities sake), except for having either `heading: String` or `option: String` in each object in the `options` array. - -### Top Level Properties -* `prepend` is an optional string to be placed before the options in the help text -* `append` is an optional string to be placed after the options in the help text -* `options` is a required array specifying your options and headings, the options and headings will be displayed in the order specified -* `helpStyle` is an optional object which enables you to change the default appearance of some aspects of the help text -* `mutuallyExclusive` is an optional array of arrays of either strings or arrays of strings. The top level array is a list of rules, each rule is a list of elements - each element can be either a string (the name of an option), or a list of strings (a group of option names) - there will be an error if more than one element is present -* `concatRepeatedArrays` see description under the "Option Properties" heading - use at the top level is deprecated, if you want to set this for all options, use the `defaults` property -* `mergeRepeatedObjects` see description under the "Option Properties" heading - use at the top level is deprecated, if you want to set this for all options, use the `defaults` property -* `positionalAnywhere` is an optional boolean (defaults to `true`) - when `true` it allows positional arguments anywhere, when `false`, all arguments after the first positional one are taken to be positional as well, even if they look like a flag. For example, with `positionalAnywhere: false`, the arguments `--flag --boom 12 --crack` would have two positional arguments: `12` and `--crack` -* `typeAliases` is an optional object, it allows you to set aliases for types, eg. `{Path: 'String'}` would allow you to use the type `Path` as an alias for the type `String` -* `defaults` is an optional object following the option properties format, which specifies default values for all options. A default will be overridden if manually set. For example, you can do `default: { type: "String" }` to set the default type of all options to `String`, and then override that default in an individual option by setting the `type` property - -#### Heading Properties -* `heading` a required string, the name of the heading - -#### Option Properties -* `option` the required name of the option - use dash-case, without the leading dashes -* `alias` is an optional string or array of strings which specify any aliases for the option -* `type` is a required string in the [type check](https://github.com/gkz/type-check) [format](https://github.com/gkz/type-check#type-format), this will be used to cast the inputted value and validate it -* `enum` is an optional array of strings, each string will be parsed by [levn](https://github.com/gkz/levn) - the argument value must be one of the resulting values - each potential value must validate against the specified `type` -* `default` is a optional string, which will be parsed by [levn](https://github.com/gkz/levn) and used as the default value if none is set - the value must validate against the specified `type` -* `restPositional` is an optional boolean - if set to `true`, everything after the option will be taken to be a positional argument, even if it looks like a named argument -* `required` is an optional boolean - if set to `true`, the option parsing will fail if the option is not defined -* `overrideRequired` is a optional boolean - if set to `true` and the option is used, and there is another option which is required but not set, it will override the need for the required option and there will be no error - this is useful if you have required options and want to use `--help` or `--version` flags -* `concatRepeatedArrays` is an optional boolean or tuple with boolean and options object (defaults to `false`) - when set to `true` and an option contains an array value and is repeated, the subsequent values for the flag will be appended rather than overwriting the original value - eg. option `g` of type `[String]`: `-g a -g b -g c,d` will result in `['a','b','c','d']` - - You can supply an options object by giving the following value: `[true, options]`. The one currently supported option is `oneValuePerFlag`, this only allows one array value per flag. This is useful if your potential values contain a comma. -* `mergeRepeatedObjects` is an optional boolean (defaults to `false`) - when set to `true` and an option contains an object value and is repeated, the subsequent values for the flag will be merged rather than overwriting the original value - eg. option `g` of type `Object`: `-g a:1 -g b:2 -g c:3,d:4` will result in `{a: 1, b: 2, c: 3, d: 4}` -* `dependsOn` is an optional string or array of strings - if simply a string (the name of another option), it will make sure that that other option is set, if an array of strings, depending on whether `'and'` or `'or'` is first, it will either check whether all (`['and', 'option-a', 'option-b']`), or at least one (`['or', 'option-a', 'option-b']`) other options are set -* `description` is an optional string, which will be displayed next to the option in the help text -* `longDescription` is an optional string, it will be displayed instead of the `description` when `generateHelpForOption` is used -* `example` is an optional string or array of strings with example(s) for the option - these will be displayed when `generateHelpForOption` is used - -#### Help Style Properties -* `aliasSeparator` is an optional string, separates multiple names from each other - default: ' ,' -* `typeSeparator` is an optional string, separates the type from the names - default: ' ' -* `descriptionSeparator` is an optional string , separates the description from the padded name and type - default: ' ' -* `initialIndent` is an optional int - the amount of indent for options - default: 2 -* `secondaryIndent` is an optional int - the amount of indent if wrapped fully (in addition to the initial indent) - default: 4 -* `maxPadFactor` is an optional number - affects the default level of padding for the names/type, it is multiplied by the average of the length of the names/type - default: 1.5 - -## Argument Format -At the highest level there are two types of arguments: named, and positional. - -Name arguments of any length are prefixed with `--` (eg. `--go`), and those of one character may be prefixed with either `--` or `-` (eg. `-g`). - -There are two types of named arguments: boolean flags (eg. `--problemo`, `-p`) which take no value and result in a `true` if they are present, the falsey `undefined` if they are not present, or `false` if present and explicitly prefixed with `no` (eg. `--no-problemo`). Named arguments with values (eg. `--tseries 800`, `-t 800`) are the other type. If the option has a type `Boolean` it will automatically be made into a boolean flag. Any other type results in a named argument that takes a value. - -For more information about how to properly set types to get the value you want, take a look at the [type check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) pages. - -You can group single character arguments that use a single `-`, however all except the last must be boolean flags (which take no value). The last may be a boolean flag, or an argument which takes a value - eg. `-ba 2` is equivalent to `-b -a 2`. - -Positional arguments are all those values which do not fall under the above - they can be anywhere, not just at the end. For example, in `cmd -b one -a 2 two` where `b` is a boolean flag, and `a` has the type `Number`, there are two positional arguments, `one` and `two`. - -Everything after an `--` is positional, even if it looks like a named argument. - -You may optionally use `=` to separate option names from values, for example: `--count=2`. - -If you specify the option `NUM`, then any argument using a single `-` followed by a number will be valid and will set the value of `NUM`. Eg. `-2` will be parsed into `NUM: 2`. - -If duplicate named arguments are present, the last one will be taken. - -## Technical About -`optionator` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It uses [levn](https://github.com/gkz/levn) to cast arguments to their specified type, and uses [type-check](https://github.com/gkz/type-check) to validate values. It also uses the [prelude.ls](http://preludels.com/) library. diff --git a/node_modules/optionator/lib/index.js b/node_modules/optionator/lib/index.js deleted file mode 100644 index 7ce37b2..0000000 --- a/node_modules/optionator/lib/index.js +++ /dev/null @@ -1,465 +0,0 @@ -// Generated by LiveScript 1.6.0 -(function(){ - var VERSION, ref$, id, map, compact, any, groupBy, partition, chars, isItNaN, keys, Obj, camelize, deepIs, closestString, nameToRaw, dasherize, naturalJoin, generateHelp, generateHelpForOption, parsedTypeCheck, parseType, parseLevn, camelizeKeys, parseString, main, toString$ = {}.toString, slice$ = [].slice, arrayFrom$ = Array.from || function(x){return slice$.call(x);}; - VERSION = '0.8.3'; - ref$ = require('prelude-ls'), id = ref$.id, map = ref$.map, compact = ref$.compact, any = ref$.any, groupBy = ref$.groupBy, partition = ref$.partition, chars = ref$.chars, isItNaN = ref$.isItNaN, keys = ref$.keys, Obj = ref$.Obj, camelize = ref$.camelize; - deepIs = require('deep-is'); - ref$ = require('./util'), closestString = ref$.closestString, nameToRaw = ref$.nameToRaw, dasherize = ref$.dasherize, naturalJoin = ref$.naturalJoin; - ref$ = require('./help'), generateHelp = ref$.generateHelp, generateHelpForOption = ref$.generateHelpForOption; - ref$ = require('type-check'), parsedTypeCheck = ref$.parsedTypeCheck, parseType = ref$.parseType; - parseLevn = require('levn').parsedTypeParse; - camelizeKeys = function(obj){ - var key, value, resultObj$ = {}; - for (key in obj) { - value = obj[key]; - resultObj$[camelize(key)] = value; - } - return resultObj$; - }; - parseString = function(string){ - var assignOpt, regex, replaceRegex, result; - assignOpt = '--?[a-zA-Z][-a-z-A-Z0-9]*='; - regex = RegExp('(?:' + assignOpt + ')?(?:\'(?:\\\\\'|[^\'])+\'|"(?:\\\\"|[^"])+")|[^\'"\\s]+', 'g'); - replaceRegex = RegExp('^(' + assignOpt + ')?[\'"]([\\s\\S]*)[\'"]$'); - result = map(function(it){ - return it.replace(replaceRegex, '$1$2'); - }, string.match(regex) || []); - return result; - }; - main = function(libOptions){ - var opts, defaults, required, traverse, getOption, parse; - opts = {}; - defaults = {}; - required = []; - if (toString$.call(libOptions.stdout).slice(8, -1) === 'Undefined') { - libOptions.stdout = process.stdout; - } - libOptions.positionalAnywhere == null && (libOptions.positionalAnywhere = true); - libOptions.typeAliases == null && (libOptions.typeAliases = {}); - libOptions.defaults == null && (libOptions.defaults = {}); - if (libOptions.concatRepeatedArrays != null) { - libOptions.defaults.concatRepeatedArrays = libOptions.concatRepeatedArrays; - } - if (libOptions.mergeRepeatedObjects != null) { - libOptions.defaults.mergeRepeatedObjects = libOptions.mergeRepeatedObjects; - } - traverse = function(options){ - var i$, len$, option, name, k, ref$, v, type, that, e, parsedPossibilities, parsedType, j$, len1$, possibility, rawDependsType, dependsOpts, dependsType, cra, alias, shortNames, longNames; - if (toString$.call(options).slice(8, -1) !== 'Array') { - throw new Error('No options defined.'); - } - for (i$ = 0, len$ = options.length; i$ < len$; ++i$) { - option = options[i$]; - if (option.heading == null) { - name = option.option; - if (opts[name] != null) { - throw new Error("Option '" + name + "' already defined."); - } - for (k in ref$ = libOptions.defaults) { - v = ref$[k]; - option[k] == null && (option[k] = v); - } - if (option.type === 'Boolean') { - option.boolean == null && (option.boolean = true); - } - if (option.parsedType == null) { - if (!option.type) { - throw new Error("No type defined for option '" + name + "'."); - } - try { - type = (that = libOptions.typeAliases[option.type]) != null - ? that - : option.type; - option.parsedType = parseType(type); - } catch (e$) { - e = e$; - throw new Error("Option '" + name + "': Error parsing type '" + option.type + "': " + e.message); - } - } - if (option['default']) { - try { - defaults[name] = parseLevn(option.parsedType, option['default']); - } catch (e$) { - e = e$; - throw new Error("Option '" + name + "': Error parsing default value '" + option['default'] + "' for type '" + option.type + "': " + e.message); - } - } - if (option['enum'] && !option.parsedPossiblities) { - parsedPossibilities = []; - parsedType = option.parsedType; - for (j$ = 0, len1$ = (ref$ = option['enum']).length; j$ < len1$; ++j$) { - possibility = ref$[j$]; - try { - parsedPossibilities.push(parseLevn(parsedType, possibility)); - } catch (e$) { - e = e$; - throw new Error("Option '" + name + "': Error parsing enum value '" + possibility + "' for type '" + option.type + "': " + e.message); - } - } - option.parsedPossibilities = parsedPossibilities; - } - if (that = option.dependsOn) { - if (that.length) { - ref$ = [].concat(option.dependsOn), rawDependsType = ref$[0], dependsOpts = slice$.call(ref$, 1); - dependsType = rawDependsType.toLowerCase(); - if (dependsOpts.length) { - if (dependsType === 'and' || dependsType === 'or') { - option.dependsOn = [dependsType].concat(arrayFrom$(dependsOpts)); - } else { - throw new Error("Option '" + name + "': If you have more than one dependency, you must specify either 'and' or 'or'"); - } - } else { - if ((ref$ = dependsType.toLowerCase()) === 'and' || ref$ === 'or') { - option.dependsOn = null; - } else { - option.dependsOn = ['and', rawDependsType]; - } - } - } else { - option.dependsOn = null; - } - } - if (option.required) { - required.push(name); - } - opts[name] = option; - if (option.concatRepeatedArrays != null) { - cra = option.concatRepeatedArrays; - if ('Boolean' === toString$.call(cra).slice(8, -1)) { - option.concatRepeatedArrays = [cra, {}]; - } else if (cra.length === 1) { - option.concatRepeatedArrays = [cra[0], {}]; - } else if (cra.length !== 2) { - throw new Error("Invalid setting for concatRepeatedArrays"); - } - } - if (option.alias || option.aliases) { - if (name === 'NUM') { - throw new Error("-NUM option can't have aliases."); - } - if (option.alias) { - option.aliases == null && (option.aliases = [].concat(option.alias)); - } - for (j$ = 0, len1$ = (ref$ = option.aliases).length; j$ < len1$; ++j$) { - alias = ref$[j$]; - if (opts[alias] != null) { - throw new Error("Option '" + alias + "' already defined."); - } - opts[alias] = option; - } - ref$ = partition(fn$, option.aliases), shortNames = ref$[0], longNames = ref$[1]; - option.shortNames == null && (option.shortNames = shortNames); - option.longNames == null && (option.longNames = longNames); - } - if ((!option.aliases || option.shortNames.length === 0) && option.type === 'Boolean' && option['default'] === 'true') { - option.negateName = true; - } - } - } - function fn$(it){ - return it.length === 1; - } - }; - traverse(libOptions.options); - getOption = function(name){ - var opt, possiblyMeant; - opt = opts[name]; - if (opt == null) { - possiblyMeant = closestString(keys(opts), name); - throw new Error("Invalid option '" + nameToRaw(name) + "'" + (possiblyMeant ? " - perhaps you meant '" + nameToRaw(possiblyMeant) + "'?" : '.')); - } - return opt; - }; - parse = function(input, arg$){ - var slice, obj, positional, restPositional, overrideRequired, prop, setValue, setDefaults, checkRequired, mutuallyExclusiveError, checkMutuallyExclusive, checkDependency, checkDependencies, checkProp, args, key, value, option, ref$, i$, len$, arg, that, result, short, argName, usingAssign, val, flags, len, j$, len1$, i, flag, opt, name, valPrime, negated, noedName; - slice = (arg$ != null - ? arg$ - : {}).slice; - obj = {}; - positional = []; - restPositional = false; - overrideRequired = false; - prop = null; - setValue = function(name, value){ - var opt, val, cra, e, currentType; - opt = getOption(name); - if (opt.boolean) { - val = value; - } else { - try { - cra = opt.concatRepeatedArrays; - if (cra != null && cra[0] && cra[1].oneValuePerFlag && opt.parsedType.length === 1 && opt.parsedType[0].structure === 'array') { - val = [parseLevn(opt.parsedType[0].of, value)]; - } else { - val = parseLevn(opt.parsedType, value); - } - } catch (e$) { - e = e$; - throw new Error("Invalid value for option '" + name + "' - expected type " + opt.type + ", received value: " + value + "."); - } - if (opt['enum'] && !any(function(it){ - return deepIs(it, val); - }, opt.parsedPossibilities)) { - throw new Error("Option " + name + ": '" + val + "' not one of " + naturalJoin(opt['enum']) + "."); - } - } - currentType = toString$.call(obj[name]).slice(8, -1); - if (obj[name] != null) { - if (opt.concatRepeatedArrays != null && opt.concatRepeatedArrays[0] && currentType === 'Array') { - obj[name] = obj[name].concat(val); - } else if (opt.mergeRepeatedObjects && currentType === 'Object') { - import$(obj[name], val); - } else { - obj[name] = val; - } - } else { - obj[name] = val; - } - if (opt.restPositional) { - restPositional = true; - } - if (opt.overrideRequired) { - overrideRequired = true; - } - }; - setDefaults = function(){ - var name, ref$, value; - for (name in ref$ = defaults) { - value = ref$[name]; - if (obj[name] == null) { - obj[name] = value; - } - } - }; - checkRequired = function(){ - var i$, ref$, len$, name; - if (overrideRequired) { - return; - } - for (i$ = 0, len$ = (ref$ = required).length; i$ < len$; ++i$) { - name = ref$[i$]; - if (!obj[name]) { - throw new Error("Option " + nameToRaw(name) + " is required."); - } - } - }; - mutuallyExclusiveError = function(first, second){ - throw new Error("The options " + nameToRaw(first) + " and " + nameToRaw(second) + " are mutually exclusive - you cannot use them at the same time."); - }; - checkMutuallyExclusive = function(){ - var rules, i$, len$, rule, present, j$, len1$, element, k$, len2$, opt; - rules = libOptions.mutuallyExclusive; - if (!rules) { - return; - } - for (i$ = 0, len$ = rules.length; i$ < len$; ++i$) { - rule = rules[i$]; - present = null; - for (j$ = 0, len1$ = rule.length; j$ < len1$; ++j$) { - element = rule[j$]; - if (toString$.call(element).slice(8, -1) === 'Array') { - for (k$ = 0, len2$ = element.length; k$ < len2$; ++k$) { - opt = element[k$]; - if (opt in obj) { - if (present != null) { - mutuallyExclusiveError(present, opt); - } else { - present = opt; - break; - } - } - } - } else { - if (element in obj) { - if (present != null) { - mutuallyExclusiveError(present, element); - } else { - present = element; - } - } - } - } - } - }; - checkDependency = function(option){ - var dependsOn, type, targetOptionNames, i$, len$, targetOptionName, targetOption; - dependsOn = option.dependsOn; - if (!dependsOn || option.dependenciesMet) { - return true; - } - type = dependsOn[0], targetOptionNames = slice$.call(dependsOn, 1); - for (i$ = 0, len$ = targetOptionNames.length; i$ < len$; ++i$) { - targetOptionName = targetOptionNames[i$]; - targetOption = obj[targetOptionName]; - if (targetOption && checkDependency(targetOption)) { - if (type === 'or') { - return true; - } - } else if (type === 'and') { - throw new Error("The option '" + option.option + "' did not have its dependencies met."); - } - } - if (type === 'and') { - return true; - } else { - throw new Error("The option '" + option.option + "' did not meet any of its dependencies."); - } - }; - checkDependencies = function(){ - var name; - for (name in obj) { - checkDependency(opts[name]); - } - }; - checkProp = function(){ - if (prop) { - throw new Error("Value for '" + prop + "' of type '" + getOption(prop).type + "' required."); - } - }; - switch (toString$.call(input).slice(8, -1)) { - case 'String': - args = parseString(input.slice(slice != null ? slice : 0)); - break; - case 'Array': - args = input.slice(slice != null ? slice : 2); - break; - case 'Object': - obj = {}; - for (key in input) { - value = input[key]; - if (key !== '_') { - option = getOption(dasherize(key)); - if (parsedTypeCheck(option.parsedType, value)) { - obj[option.option] = value; - } else { - throw new Error("Option '" + option.option + "': Invalid type for '" + value + "' - expected type '" + option.type + "'."); - } - } - } - checkMutuallyExclusive(); - checkDependencies(); - setDefaults(); - checkRequired(); - return ref$ = camelizeKeys(obj), ref$._ = input._ || [], ref$; - default: - throw new Error("Invalid argument to 'parse': " + input + "."); - } - for (i$ = 0, len$ = args.length; i$ < len$; ++i$) { - arg = args[i$]; - if (arg === '--') { - restPositional = true; - } else if (restPositional) { - positional.push(arg); - } else { - if (that = arg.match(/^(--?)([a-zA-Z][-a-zA-Z0-9]*)(=)?(.*)?$/)) { - result = that; - checkProp(); - short = result[1].length === 1; - argName = result[2]; - usingAssign = result[3] != null; - val = result[4]; - if (usingAssign && val == null) { - throw new Error("No value for '" + argName + "' specified."); - } - if (short) { - flags = chars(argName); - len = flags.length; - for (j$ = 0, len1$ = flags.length; j$ < len1$; ++j$) { - i = j$; - flag = flags[j$]; - opt = getOption(flag); - name = opt.option; - if (restPositional) { - positional.push(flag); - } else if (i === len - 1) { - if (usingAssign) { - valPrime = opt.boolean ? parseLevn([{ - type: 'Boolean' - }], val) : val; - setValue(name, valPrime); - } else if (opt.boolean) { - setValue(name, true); - } else { - prop = name; - } - } else if (opt.boolean) { - setValue(name, true); - } else { - throw new Error("Can't set argument '" + flag + "' when not last flag in a group of short flags."); - } - } - } else { - negated = false; - if (that = argName.match(/^no-(.+)$/)) { - negated = true; - noedName = that[1]; - opt = getOption(noedName); - } else { - opt = getOption(argName); - } - name = opt.option; - if (opt.boolean) { - valPrime = usingAssign ? parseLevn([{ - type: 'Boolean' - }], val) : true; - if (negated) { - setValue(name, !valPrime); - } else { - setValue(name, valPrime); - } - } else { - if (negated) { - throw new Error("Only use 'no-' prefix for Boolean options, not with '" + noedName + "'."); - } - if (usingAssign) { - setValue(name, val); - } else { - prop = name; - } - } - } - } else if (that = arg.match(/^-([0-9]+(?:\.[0-9]+)?)$/)) { - opt = opts.NUM; - if (!opt) { - throw new Error('No -NUM option defined.'); - } - setValue(opt.option, that[1]); - } else { - if (prop) { - setValue(prop, arg); - prop = null; - } else { - positional.push(arg); - if (!libOptions.positionalAnywhere) { - restPositional = true; - } - } - } - } - } - checkProp(); - checkMutuallyExclusive(); - checkDependencies(); - setDefaults(); - checkRequired(); - return ref$ = camelizeKeys(obj), ref$._ = positional, ref$; - }; - return { - parse: parse, - parseArgv: function(it){ - return parse(it, { - slice: 2 - }); - }, - generateHelp: generateHelp(libOptions), - generateHelpForOption: generateHelpForOption(getOption, libOptions) - }; - }; - main.VERSION = VERSION; - module.exports = main; - function import$(obj, src){ - var own = {}.hasOwnProperty; - for (var key in src) if (own.call(src, key)) obj[key] = src[key]; - return obj; - } -}).call(this); diff --git a/node_modules/optionator/package.json b/node_modules/optionator/package.json deleted file mode 100644 index fbeb2f9..0000000 --- a/node_modules/optionator/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "optionator", - "version": "0.8.3", - "author": "George Zahariev ", - "description": "option parsing and help generation", - "homepage": "https://github.com/gkz/optionator", - "keywords": [ - "options", - "flags", - "option parsing", - "cli" - ], - "files": [ - "lib", - "README.md", - "LICENSE" - ], - "main": "./lib/", - "bugs": "https://github.com/gkz/optionator/issues", - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - }, - "repository": { - "type": "git", - "url": "git://github.com/gkz/optionator.git" - }, - "scripts": { - "test": "make test" - }, - "dependencies": { - "prelude-ls": "~1.1.2", - "deep-is": "~0.1.3", - "word-wrap": "~1.2.3", - "type-check": "~0.3.2", - "levn": "~0.3.0", - "fast-levenshtein": "~2.0.6" - }, - "devDependencies": { - "livescript": "~1.6.0", - "mocha": "~6.2.2", - "istanbul": "~0.4.5" - } -} diff --git a/node_modules/os-tmpdir/index.js b/node_modules/os-tmpdir/index.js deleted file mode 100644 index 2077b1c..0000000 --- a/node_modules/os-tmpdir/index.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; -var isWindows = process.platform === 'win32'; -var trailingSlashRe = isWindows ? /[^:]\\$/ : /.\/$/; - -// https://github.com/nodejs/node/blob/3e7a14381497a3b73dda68d05b5130563cdab420/lib/os.js#L25-L43 -module.exports = function () { - var path; - - if (isWindows) { - path = process.env.TEMP || - process.env.TMP || - (process.env.SystemRoot || process.env.windir) + '\\temp'; - } else { - path = process.env.TMPDIR || - process.env.TMP || - process.env.TEMP || - '/tmp'; - } - - if (trailingSlashRe.test(path)) { - path = path.slice(0, -1); - } - - return path; -}; diff --git a/node_modules/os-tmpdir/license b/node_modules/os-tmpdir/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/os-tmpdir/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/os-tmpdir/package.json b/node_modules/os-tmpdir/package.json deleted file mode 100644 index 180a317..0000000 --- a/node_modules/os-tmpdir/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "os-tmpdir", - "version": "1.0.2", - "description": "Node.js os.tmpdir() ponyfill", - "license": "MIT", - "repository": "sindresorhus/os-tmpdir", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "xo && ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "built-in", - "core", - "ponyfill", - "polyfill", - "shim", - "os", - "tmpdir", - "tempdir", - "tmp", - "temp", - "dir", - "directory", - "env", - "environment" - ], - "devDependencies": { - "ava": "*", - "xo": "^0.16.0" - } -} diff --git a/node_modules/os-tmpdir/readme.md b/node_modules/os-tmpdir/readme.md deleted file mode 100644 index c09f7ed..0000000 --- a/node_modules/os-tmpdir/readme.md +++ /dev/null @@ -1,32 +0,0 @@ -# os-tmpdir [![Build Status](https://travis-ci.org/sindresorhus/os-tmpdir.svg?branch=master)](https://travis-ci.org/sindresorhus/os-tmpdir) - -> Node.js [`os.tmpdir()`](https://nodejs.org/api/os.html#os_os_tmpdir) [ponyfill](https://ponyfill.com) - -Use this instead of `require('os').tmpdir()` to get a consistent behavior on different Node.js versions (even 0.8). - - -## Install - -``` -$ npm install --save os-tmpdir -``` - - -## Usage - -```js -const osTmpdir = require('os-tmpdir'); - -osTmpdir(); -//=> '/var/folders/m3/5574nnhn0yj488ccryqr7tc80000gn/T' -``` - - -## API - -See the [`os.tmpdir()` docs](https://nodejs.org/api/os.html#os_os_tmpdir). - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/path-is-absolute/index.js b/node_modules/path-is-absolute/index.js deleted file mode 100644 index 22aa6c3..0000000 --- a/node_modules/path-is-absolute/index.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -function posix(path) { - return path.charAt(0) === '/'; -} - -function win32(path) { - // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 - var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; - var result = splitDeviceRe.exec(path); - var device = result[1] || ''; - var isUnc = Boolean(device && device.charAt(1) !== ':'); - - // UNC paths are always absolute - return Boolean(result[2] || isUnc); -} - -module.exports = process.platform === 'win32' ? win32 : posix; -module.exports.posix = posix; -module.exports.win32 = win32; diff --git a/node_modules/path-is-absolute/license b/node_modules/path-is-absolute/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/path-is-absolute/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/path-is-absolute/package.json b/node_modules/path-is-absolute/package.json deleted file mode 100644 index 91196d5..0000000 --- a/node_modules/path-is-absolute/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "path-is-absolute", - "version": "1.0.1", - "description": "Node.js 0.12 path.isAbsolute() ponyfill", - "license": "MIT", - "repository": "sindresorhus/path-is-absolute", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "xo && node test.js" - }, - "files": [ - "index.js" - ], - "keywords": [ - "path", - "paths", - "file", - "dir", - "absolute", - "isabsolute", - "is-absolute", - "built-in", - "util", - "utils", - "core", - "ponyfill", - "polyfill", - "shim", - "is", - "detect", - "check" - ], - "devDependencies": { - "xo": "^0.16.0" - } -} diff --git a/node_modules/path-is-absolute/readme.md b/node_modules/path-is-absolute/readme.md deleted file mode 100644 index 8dbdf5f..0000000 --- a/node_modules/path-is-absolute/readme.md +++ /dev/null @@ -1,59 +0,0 @@ -# path-is-absolute [![Build Status](https://travis-ci.org/sindresorhus/path-is-absolute.svg?branch=master)](https://travis-ci.org/sindresorhus/path-is-absolute) - -> Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) [ponyfill](https://ponyfill.com) - - -## Install - -``` -$ npm install --save path-is-absolute -``` - - -## Usage - -```js -const pathIsAbsolute = require('path-is-absolute'); - -// Running on Linux -pathIsAbsolute('/home/foo'); -//=> true -pathIsAbsolute('C:/Users/foo'); -//=> false - -// Running on Windows -pathIsAbsolute('C:/Users/foo'); -//=> true -pathIsAbsolute('/home/foo'); -//=> false - -// Running on any OS -pathIsAbsolute.posix('/home/foo'); -//=> true -pathIsAbsolute.posix('C:/Users/foo'); -//=> false -pathIsAbsolute.win32('C:/Users/foo'); -//=> true -pathIsAbsolute.win32('/home/foo'); -//=> false -``` - - -## API - -See the [`path.isAbsolute()` docs](http://nodejs.org/api/path.html#path_path_isabsolute_path). - -### pathIsAbsolute(path) - -### pathIsAbsolute.posix(path) - -POSIX specific version. - -### pathIsAbsolute.win32(path) - -Windows specific version. - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/path-is-inside/LICENSE.txt b/node_modules/path-is-inside/LICENSE.txt deleted file mode 100644 index 0bdbb61..0000000 --- a/node_modules/path-is-inside/LICENSE.txt +++ /dev/null @@ -1,47 +0,0 @@ -Dual licensed under WTFPL and MIT: - ---- - -Copyright © 2013–2016 Domenic Denicola - -This work is free. You can redistribute it and/or modify it under the -terms of the Do What The Fuck You Want To Public License, Version 2, -as published by Sam Hocevar. See below for more details. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. - ---- - -The MIT License (MIT) - -Copyright © 2013–2016 Domenic Denicola - -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. diff --git a/node_modules/path-is-inside/lib/path-is-inside.js b/node_modules/path-is-inside/lib/path-is-inside.js deleted file mode 100644 index 596dfd3..0000000 --- a/node_modules/path-is-inside/lib/path-is-inside.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; - -var path = require("path"); - -module.exports = function (thePath, potentialParent) { - // For inside-directory checking, we want to allow trailing slashes, so normalize. - thePath = stripTrailingSep(thePath); - potentialParent = stripTrailingSep(potentialParent); - - // Node treats only Windows as case-insensitive in its path module; we follow those conventions. - if (process.platform === "win32") { - thePath = thePath.toLowerCase(); - potentialParent = potentialParent.toLowerCase(); - } - - return thePath.lastIndexOf(potentialParent, 0) === 0 && - ( - thePath[potentialParent.length] === path.sep || - thePath[potentialParent.length] === undefined - ); -}; - -function stripTrailingSep(thePath) { - if (thePath[thePath.length - 1] === path.sep) { - return thePath.slice(0, -1); - } - return thePath; -} diff --git a/node_modules/path-is-inside/package.json b/node_modules/path-is-inside/package.json deleted file mode 100644 index 74c56e6..0000000 --- a/node_modules/path-is-inside/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "path-is-inside", - "description": "Tests whether one path is inside another path", - "keywords": ["path", "directory", "folder", "inside", "relative"], - "version": "1.0.2", - "author": "Domenic Denicola (https://domenic.me)", - "license": "(WTFPL OR MIT)", - "repository": "domenic/path-is-inside", - "main": "lib/path-is-inside.js", - "files": [ - "lib" - ], - "scripts": { - "test": "mocha", - "lint": "jshint lib" - }, - "devDependencies": { - "jshint": "~2.3.0", - "mocha": "~1.15.1" - } -} diff --git a/node_modules/pluralize/LICENSE b/node_modules/pluralize/LICENSE deleted file mode 100644 index 309c2e3..0000000 --- a/node_modules/pluralize/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Blake Embrey (hello@blakeembrey.com) - -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. diff --git a/node_modules/pluralize/Readme.md b/node_modules/pluralize/Readme.md deleted file mode 100644 index 46434a9..0000000 --- a/node_modules/pluralize/Readme.md +++ /dev/null @@ -1,89 +0,0 @@ -# Pluralize - -[![NPM version][npm-image]][npm-url] -[![NPM downloads][downloads-image]][downloads-url] -[![Build status][travis-image]][travis-url] -[![Test coverage][coveralls-image]][coveralls-url] -![File Size][filesize-url] -[![CDNJS][cdnjs-image]][cdnjs-url] -[![Greenkeeper badge](https://badges.greenkeeper.io/blakeembrey/pluralize.svg)](https://greenkeeper.io/) - -> Pluralize and singularize any word. - -## Installation - -``` -npm install pluralize --save -yarn add pluralize -bower install pluralize --save -``` - -### Node - -```javascript -var pluralize = require('pluralize') -``` - -### AMD - -```javascript -define(function (require, exports, module) { - var pluralize = require('pluralize') -}) -``` - -### ` -``` - -## Why? - -This module uses a pre-defined list of rules, applied in order, to singularize or pluralize a given word. There are many cases where this is useful, such as any automation based on user input. For applications where the word(s) are known ahead of time, you can use a simple ternary (or function) which would be a much lighter alternative. - -## Usage - -```javascript -pluralize('test') //=> "tests" -pluralize('test', 1) //=> "test" -pluralize('test', 5) //=> "tests" -pluralize('test', 1, true) //=> "1 test" -pluralize('test', 5, true) //=> "5 tests" -pluralize('蘋果', 2, true) //=> "2 蘋果" - -pluralize.plural('regex') //=> "regexes" -pluralize.addPluralRule(/gex$/i, 'gexii') -pluralize.plural('regex') //=> "regexii" - -pluralize.singular('singles') //=> "single" -pluralize.addSingularRule(/singles$/i, 'singular') -pluralize.singular('singles') //=> "singular" - -pluralize.plural('irregular') //=> "irregulars" -pluralize.addIrregularRule('irregular', 'regular') -pluralize.plural('irregular') //=> "regular" - -pluralize.plural('paper') //=> "papers" -pluralize.addUncountableRule('paper') -pluralize.plural('paper') //=> "paper" - -pluralize.isPlural('test') //=> false -pluralize.isSingular('test') //=> true -``` - -## License - -MIT - -[npm-image]: https://img.shields.io/npm/v/pluralize.svg?style=flat -[npm-url]: https://npmjs.org/package/pluralize -[downloads-image]: https://img.shields.io/npm/dm/pluralize.svg?style=flat -[downloads-url]: https://npmjs.org/package/pluralize -[travis-image]: https://img.shields.io/travis/blakeembrey/pluralize.svg?style=flat -[travis-url]: https://travis-ci.org/blakeembrey/pluralize -[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/pluralize.svg?style=flat -[coveralls-url]: https://coveralls.io/r/blakeembrey/pluralize?branch=master -[filesize-url]: https://img.shields.io/github/size/blakeembrey/pluralize/pluralize.js.svg?style=flat -[cdnjs-image]: https://img.shields.io/cdnjs/v/pluralize.svg -[cdnjs-url]: https://cdnjs.com/libraries/pluralize diff --git a/node_modules/pluralize/package.json b/node_modules/pluralize/package.json deleted file mode 100644 index daad050..0000000 --- a/node_modules/pluralize/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "pluralize", - "version": "7.0.0", - "description": "Pluralize and singularize any word", - "main": "pluralize.js", - "files": [ - "pluralize.js" - ], - "scripts": { - "lint": "semistandard", - "test-spec": "mocha -R spec --bail", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- -R spec --bail", - "test": "npm run lint && npm run test-cov" - }, - "repository": "https://github.com/blakeembrey/pluralize.git", - "keywords": [ - "plural", - "plurals", - "pluralize", - "singular", - "singularize", - "inflection" - ], - "author": { - "name": "Blake Embrey", - "email": "hello@blakeembrey.com", - "url": "http://blakeembrey.me" - }, - "license": "MIT", - "readmeFilename": "Readme.md", - "engines": { - "node": ">=4" - }, - "devDependencies": { - "chai": "^4.0.0", - "istanbul": "^0.4.5", - "mocha": "^3.2.0", - "semistandard": "^11.0.0" - } -} diff --git a/node_modules/pluralize/pluralize.js b/node_modules/pluralize/pluralize.js deleted file mode 100644 index c87a8fc..0000000 --- a/node_modules/pluralize/pluralize.js +++ /dev/null @@ -1,490 +0,0 @@ -/* global define */ - -(function (root, pluralize) { - /* istanbul ignore else */ - if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') { - // Node. - module.exports = pluralize(); - } else if (typeof define === 'function' && define.amd) { - // AMD, registers as an anonymous module. - define(function () { - return pluralize(); - }); - } else { - // Browser global. - root.pluralize = pluralize(); - } -})(this, function () { - // Rule storage - pluralize and singularize need to be run sequentially, - // while other rules can be optimized using an object for instant lookups. - var pluralRules = []; - var singularRules = []; - var uncountables = {}; - var irregularPlurals = {}; - var irregularSingles = {}; - - /** - * Sanitize a pluralization rule to a usable regular expression. - * - * @param {(RegExp|string)} rule - * @return {RegExp} - */ - function sanitizeRule (rule) { - if (typeof rule === 'string') { - return new RegExp('^' + rule + '$', 'i'); - } - - return rule; - } - - /** - * Pass in a word token to produce a function that can replicate the case on - * another word. - * - * @param {string} word - * @param {string} token - * @return {Function} - */ - function restoreCase (word, token) { - // Tokens are an exact match. - if (word === token) return token; - - // Upper cased words. E.g. "HELLO". - if (word === word.toUpperCase()) return token.toUpperCase(); - - // Title cased words. E.g. "Title". - if (word[0] === word[0].toUpperCase()) { - return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase(); - } - - // Lower cased words. E.g. "test". - return token.toLowerCase(); - } - - /** - * Interpolate a regexp string. - * - * @param {string} str - * @param {Array} args - * @return {string} - */ - function interpolate (str, args) { - return str.replace(/\$(\d{1,2})/g, function (match, index) { - return args[index] || ''; - }); - } - - /** - * Replace a word using a rule. - * - * @param {string} word - * @param {Array} rule - * @return {string} - */ - function replace (word, rule) { - return word.replace(rule[0], function (match, index) { - var result = interpolate(rule[1], arguments); - - if (match === '') { - return restoreCase(word[index - 1], result); - } - - return restoreCase(match, result); - }); - } - - /** - * Sanitize a word by passing in the word and sanitization rules. - * - * @param {string} token - * @param {string} word - * @param {Array} rules - * @return {string} - */ - function sanitizeWord (token, word, rules) { - // Empty string or doesn't need fixing. - if (!token.length || uncountables.hasOwnProperty(token)) { - return word; - } - - var len = rules.length; - - // Iterate over the sanitization rules and use the first one to match. - while (len--) { - var rule = rules[len]; - - if (rule[0].test(word)) return replace(word, rule); - } - - return word; - } - - /** - * Replace a word with the updated word. - * - * @param {Object} replaceMap - * @param {Object} keepMap - * @param {Array} rules - * @return {Function} - */ - function replaceWord (replaceMap, keepMap, rules) { - return function (word) { - // Get the correct token and case restoration functions. - var token = word.toLowerCase(); - - // Check against the keep object map. - if (keepMap.hasOwnProperty(token)) { - return restoreCase(word, token); - } - - // Check against the replacement map for a direct word replacement. - if (replaceMap.hasOwnProperty(token)) { - return restoreCase(word, replaceMap[token]); - } - - // Run all the rules against the word. - return sanitizeWord(token, word, rules); - }; - } - - /** - * Check if a word is part of the map. - */ - function checkWord (replaceMap, keepMap, rules, bool) { - return function (word) { - var token = word.toLowerCase(); - - if (keepMap.hasOwnProperty(token)) return true; - if (replaceMap.hasOwnProperty(token)) return false; - - return sanitizeWord(token, token, rules) === token; - }; - } - - /** - * Pluralize or singularize a word based on the passed in count. - * - * @param {string} word - * @param {number} count - * @param {boolean} inclusive - * @return {string} - */ - function pluralize (word, count, inclusive) { - var pluralized = count === 1 - ? pluralize.singular(word) : pluralize.plural(word); - - return (inclusive ? count + ' ' : '') + pluralized; - } - - /** - * Pluralize a word. - * - * @type {Function} - */ - pluralize.plural = replaceWord( - irregularSingles, irregularPlurals, pluralRules - ); - - /** - * Check if a word is plural. - * - * @type {Function} - */ - pluralize.isPlural = checkWord( - irregularSingles, irregularPlurals, pluralRules - ); - - /** - * Singularize a word. - * - * @type {Function} - */ - pluralize.singular = replaceWord( - irregularPlurals, irregularSingles, singularRules - ); - - /** - * Check if a word is singular. - * - * @type {Function} - */ - pluralize.isSingular = checkWord( - irregularPlurals, irregularSingles, singularRules - ); - - /** - * Add a pluralization rule to the collection. - * - * @param {(string|RegExp)} rule - * @param {string} replacement - */ - pluralize.addPluralRule = function (rule, replacement) { - pluralRules.push([sanitizeRule(rule), replacement]); - }; - - /** - * Add a singularization rule to the collection. - * - * @param {(string|RegExp)} rule - * @param {string} replacement - */ - pluralize.addSingularRule = function (rule, replacement) { - singularRules.push([sanitizeRule(rule), replacement]); - }; - - /** - * Add an uncountable word rule. - * - * @param {(string|RegExp)} word - */ - pluralize.addUncountableRule = function (word) { - if (typeof word === 'string') { - uncountables[word.toLowerCase()] = true; - return; - } - - // Set singular and plural references for the word. - pluralize.addPluralRule(word, '$0'); - pluralize.addSingularRule(word, '$0'); - }; - - /** - * Add an irregular word definition. - * - * @param {string} single - * @param {string} plural - */ - pluralize.addIrregularRule = function (single, plural) { - plural = plural.toLowerCase(); - single = single.toLowerCase(); - - irregularSingles[single] = plural; - irregularPlurals[plural] = single; - }; - - /** - * Irregular rules. - */ - [ - // Pronouns. - ['I', 'we'], - ['me', 'us'], - ['he', 'they'], - ['she', 'they'], - ['them', 'them'], - ['myself', 'ourselves'], - ['yourself', 'yourselves'], - ['itself', 'themselves'], - ['herself', 'themselves'], - ['himself', 'themselves'], - ['themself', 'themselves'], - ['is', 'are'], - ['was', 'were'], - ['has', 'have'], - ['this', 'these'], - ['that', 'those'], - // Words ending in with a consonant and `o`. - ['echo', 'echoes'], - ['dingo', 'dingoes'], - ['volcano', 'volcanoes'], - ['tornado', 'tornadoes'], - ['torpedo', 'torpedoes'], - // Ends with `us`. - ['genus', 'genera'], - ['viscus', 'viscera'], - // Ends with `ma`. - ['stigma', 'stigmata'], - ['stoma', 'stomata'], - ['dogma', 'dogmata'], - ['lemma', 'lemmata'], - ['schema', 'schemata'], - ['anathema', 'anathemata'], - // Other irregular rules. - ['ox', 'oxen'], - ['axe', 'axes'], - ['die', 'dice'], - ['yes', 'yeses'], - ['foot', 'feet'], - ['eave', 'eaves'], - ['goose', 'geese'], - ['tooth', 'teeth'], - ['quiz', 'quizzes'], - ['human', 'humans'], - ['proof', 'proofs'], - ['carve', 'carves'], - ['valve', 'valves'], - ['looey', 'looies'], - ['thief', 'thieves'], - ['groove', 'grooves'], - ['pickaxe', 'pickaxes'], - ['whiskey', 'whiskies'] - ].forEach(function (rule) { - return pluralize.addIrregularRule(rule[0], rule[1]); - }); - - /** - * Pluralization rules. - */ - [ - [/s?$/i, 's'], - [/[^\u0000-\u007F]$/i, '$0'], - [/([^aeiou]ese)$/i, '$1'], - [/(ax|test)is$/i, '$1es'], - [/(alias|[^aou]us|tlas|gas|ris)$/i, '$1es'], - [/(e[mn]u)s?$/i, '$1s'], - [/([^l]ias|[aeiou]las|[emjzr]as|[iu]am)$/i, '$1'], - [/(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'], - [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'], - [/(seraph|cherub)(?:im)?$/i, '$1im'], - [/(her|at|gr)o$/i, '$1oes'], - [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'], - [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'], - [/sis$/i, 'ses'], - [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'], - [/([^aeiouy]|qu)y$/i, '$1ies'], - [/([^ch][ieo][ln])ey$/i, '$1ies'], - [/(x|ch|ss|sh|zz)$/i, '$1es'], - [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'], - [/(m|l)(?:ice|ouse)$/i, '$1ice'], - [/(pe)(?:rson|ople)$/i, '$1ople'], - [/(child)(?:ren)?$/i, '$1ren'], - [/eaux$/i, '$0'], - [/m[ae]n$/i, 'men'], - ['thou', 'you'] - ].forEach(function (rule) { - return pluralize.addPluralRule(rule[0], rule[1]); - }); - - /** - * Singularization rules. - */ - [ - [/s$/i, ''], - [/(ss)$/i, '$1'], - [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, '$1fe'], - [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'], - [/ies$/i, 'y'], - [/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'], - [/\b(mon|smil)ies$/i, '$1ey'], - [/(m|l)ice$/i, '$1ouse'], - [/(seraph|cherub)im$/i, '$1'], - [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|tlas|gas|(?:her|at|gr)o|ris)(?:es)?$/i, '$1'], - [/(analy|ba|diagno|parenthe|progno|synop|the|empha|cri)(?:sis|ses)$/i, '$1sis'], - [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'], - [/(test)(?:is|es)$/i, '$1is'], - [/(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'], - [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'], - [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'], - [/(alumn|alg|vertebr)ae$/i, '$1a'], - [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'], - [/(matr|append)ices$/i, '$1ix'], - [/(pe)(rson|ople)$/i, '$1rson'], - [/(child)ren$/i, '$1'], - [/(eau)x?$/i, '$1'], - [/men$/i, 'man'] - ].forEach(function (rule) { - return pluralize.addSingularRule(rule[0], rule[1]); - }); - - /** - * Uncountable rules. - */ - [ - // Singular words with no plurals. - 'adulthood', - 'advice', - 'agenda', - 'aid', - 'alcohol', - 'ammo', - 'anime', - 'athletics', - 'audio', - 'bison', - 'blood', - 'bream', - 'buffalo', - 'butter', - 'carp', - 'cash', - 'chassis', - 'chess', - 'clothing', - 'cod', - 'commerce', - 'cooperation', - 'corps', - 'debris', - 'diabetes', - 'digestion', - 'elk', - 'energy', - 'equipment', - 'excretion', - 'expertise', - 'flounder', - 'fun', - 'gallows', - 'garbage', - 'graffiti', - 'headquarters', - 'health', - 'herpes', - 'highjinks', - 'homework', - 'housework', - 'information', - 'jeans', - 'justice', - 'kudos', - 'labour', - 'literature', - 'machinery', - 'mackerel', - 'mail', - 'media', - 'mews', - 'moose', - 'music', - 'manga', - 'news', - 'pike', - 'plankton', - 'pliers', - 'pollution', - 'premises', - 'rain', - 'research', - 'rice', - 'salmon', - 'scissors', - 'series', - 'sewage', - 'shambles', - 'shrimp', - 'species', - 'staff', - 'swine', - 'tennis', - 'traffic', - 'transporation', - 'trout', - 'tuna', - 'wealth', - 'welfare', - 'whiting', - 'wildebeest', - 'wildlife', - 'you', - // Regexes. - /[^aeiou]ese$/i, // "chinese", "japanese" - /deer$/i, // "deer", "reindeer" - /fish$/i, // "fish", "blowfish", "angelfish" - /measles$/i, - /o[iu]s$/i, // "carnivorous" - /pox$/i, // "chickpox", "smallpox" - /sheep$/i - ].forEach(pluralize.addUncountableRule); - - return pluralize; -}); diff --git a/node_modules/prelude-ls/CHANGELOG.md b/node_modules/prelude-ls/CHANGELOG.md deleted file mode 100644 index c2de12d..0000000 --- a/node_modules/prelude-ls/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ -# 1.1.2 -- add `Func.memoize` -- fix `zip-all` and `zip-with-all` corner case (no input) -- build with LiveScript 1.4.0 - -# 1.1.1 -- curry `unique-by`, `minimum-by` - -# 1.1.0 -- added `List` functions: `maximum-by`, `minimum-by`, `unique-by` -- added `List` functions: `at`, `elem-index`, `elem-indices`, `find-index`, `find-indices` -- added `Str` functions: `capitalize`, `camelize`, `dasherize` -- added `Func` function: `over` - eg. ``same-length = (==) `over` (.length)`` -- exported `Str.repeat` through main `prelude` object -- fixed definition of `foldr` and `foldr1`, the new correct definition is backwards incompatible with the old, incorrect one -- fixed issue with `fix` -- improved code coverage - -# 1.0.3 -- build browser versions - -# 1.0.2 -- bug fix for `flatten` - slight change with bug fix, flattens arrays only, not array-like objects - -# 1.0.1 -- bug fixes for `drop-while` and `take-while` - -# 1.0.0 -* massive update - separated functions into separate modules -* functions do not accept multiple types anymore - use different versions in their respective modules in some cases (eg. `Obj.map`), or use `chars` or `values` in other cases to transform into a list -* objects are no longer transformed into functions, simply use `(obj.)` in LiveScript to do that -* browser version now using browserify - use `prelude = require('prelude-ls')` -* added `compact`, `split`, `flatten`, `difference`, `intersection`, `union`, `count-by`, `group-by`, `chars`, `unchars`, `apply` -* added `lists-to-obj` which takes a list of keys and list of values and zips them up into an object, and the converse `obj-to-lists` -* added `pairs-to-obj` which takes a list of pairs (2 element lists) and creates an object, and the converse `obj-to-pairs` -* removed `cons`, `append` - use the concat operator -* removed `compose` - use the compose operator -* removed `obj-to-func` - use partially applied access (eg. `(obj.)`) -* removed `length` - use `(.length)` -* `sort-by` renamed to `sort-with` -* added new `sort-by` -* removed `compare` - just use the new `sort-by` -* `break-it` renamed `break-list`, (`Str.break-str` for the string version) -* added `Str.repeat` which creates a new string by repeating the input n times -* `unfold` as alias to `unfoldr` is no longer used -* fixed up style and compiled with LiveScript 1.1.1 -* use Make instead of Slake -* greatly improved tests - -# 0.6.0 -* fixed various bugs -* added `fix`, a fixpoint (Y combinator) for anonymous recursive functions -* added `unfoldr` (alias `unfold`) -* calling `replicate` with a string now returns a list of strings -* removed `partial`, just use native partial application in LiveScript using the `_` placeholder, or currying -* added `sort`, `sortBy`, and `compare` - -# 0.5.0 -* removed `lookup` - use (.prop) -* removed `call` - use (.func arg1, arg2) -* removed `pluck` - use map (.prop), xs -* fixed buys wtih `head` and `last` -* added non-minifed browser version, as `prelude-browser.js` -* renamed `prelude-min.js` to `prelude-browser-min.js` -* renamed `zip` to `zipAll` -* renamed `zipWith` to `zipAllWith` -* added `zip`, a curried zip that takes only two arguments -* added `zipWith`, a curried zipWith that takes only two arguments - -# 0.4.0 -* added `parition` function -* added `curry` function -* removed `elem` function (use `in`) -* removed `notElem` function (use `not in`) - -# 0.3.0 -* added `listToObject` -* added `unique` -* added `objToFunc` -* added support for using strings in map and the like -* added support for using objects in map and the like -* added ability to use objects instead of functions in certain cases -* removed `error` (just use throw) -* added `tau` constant -* added `join` -* added `values` -* added `keys` -* added `partial` -* renamed `log` to `ln` -* added alias to `head`: `first` -* added `installPrelude` helper - -# 0.2.0 -* removed functions that simply warp operators as you can now use operators as functions in LiveScript -* `min/max` are now curried and take only 2 arguments -* added `call` - -# 0.1.0 -* initial public release diff --git a/node_modules/prelude-ls/lib/Func.js b/node_modules/prelude-ls/lib/Func.js deleted file mode 100644 index b80c9b1..0000000 --- a/node_modules/prelude-ls/lib/Func.js +++ /dev/null @@ -1,65 +0,0 @@ -// Generated by LiveScript 1.4.0 -var apply, curry, flip, fix, over, memoize, slice$ = [].slice, toString$ = {}.toString; -apply = curry$(function(f, list){ - return f.apply(null, list); -}); -curry = function(f){ - return curry$(f); -}; -flip = curry$(function(f, x, y){ - return f(y, x); -}); -fix = function(f){ - return function(g){ - return function(){ - return f(g(g)).apply(null, arguments); - }; - }(function(g){ - return function(){ - return f(g(g)).apply(null, arguments); - }; - }); -}; -over = curry$(function(f, g, x, y){ - return f(g(x), g(y)); -}); -memoize = function(f){ - var memo; - memo = {}; - return function(){ - var args, key, arg; - args = slice$.call(arguments); - key = (function(){ - var i$, ref$, len$, results$ = []; - for (i$ = 0, len$ = (ref$ = args).length; i$ < len$; ++i$) { - arg = ref$[i$]; - results$.push(arg + toString$.call(arg).slice(8, -1)); - } - return results$; - }()).join(''); - return memo[key] = key in memo - ? memo[key] - : f.apply(null, args); - }; -}; -module.exports = { - curry: curry, - flip: flip, - fix: fix, - apply: apply, - over: over, - memoize: memoize -}; -function curry$(f, bound){ - var context, - _curry = function(args) { - return f.length > 1 ? function(){ - var params = args ? args.concat() : []; - context = bound ? context || this : this; - return params.push.apply(params, arguments) < - f.length && arguments.length ? - _curry.call(context, params) : f.apply(context, params); - } : f; - }; - return _curry(); -} \ No newline at end of file diff --git a/node_modules/prelude-ls/lib/List.js b/node_modules/prelude-ls/lib/List.js deleted file mode 100644 index 5790816..0000000 --- a/node_modules/prelude-ls/lib/List.js +++ /dev/null @@ -1,686 +0,0 @@ -// Generated by LiveScript 1.4.0 -var each, map, compact, filter, reject, partition, find, head, first, tail, last, initial, empty, reverse, unique, uniqueBy, fold, foldl, fold1, foldl1, foldr, foldr1, unfoldr, concat, concatMap, flatten, difference, intersection, union, countBy, groupBy, andList, orList, any, all, sort, sortWith, sortBy, sum, product, mean, average, maximum, minimum, maximumBy, minimumBy, scan, scanl, scan1, scanl1, scanr, scanr1, slice, take, drop, splitAt, takeWhile, dropWhile, span, breakList, zip, zipWith, zipAll, zipAllWith, at, elemIndex, elemIndices, findIndex, findIndices, toString$ = {}.toString, slice$ = [].slice; -each = curry$(function(f, xs){ - var i$, len$, x; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - f(x); - } - return xs; -}); -map = curry$(function(f, xs){ - var i$, len$, x, results$ = []; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - results$.push(f(x)); - } - return results$; -}); -compact = function(xs){ - var i$, len$, x, results$ = []; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - if (x) { - results$.push(x); - } - } - return results$; -}; -filter = curry$(function(f, xs){ - var i$, len$, x, results$ = []; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - if (f(x)) { - results$.push(x); - } - } - return results$; -}); -reject = curry$(function(f, xs){ - var i$, len$, x, results$ = []; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - if (!f(x)) { - results$.push(x); - } - } - return results$; -}); -partition = curry$(function(f, xs){ - var passed, failed, i$, len$, x; - passed = []; - failed = []; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - (f(x) ? passed : failed).push(x); - } - return [passed, failed]; -}); -find = curry$(function(f, xs){ - var i$, len$, x; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - if (f(x)) { - return x; - } - } -}); -head = first = function(xs){ - return xs[0]; -}; -tail = function(xs){ - if (!xs.length) { - return; - } - return xs.slice(1); -}; -last = function(xs){ - return xs[xs.length - 1]; -}; -initial = function(xs){ - if (!xs.length) { - return; - } - return xs.slice(0, -1); -}; -empty = function(xs){ - return !xs.length; -}; -reverse = function(xs){ - return xs.concat().reverse(); -}; -unique = function(xs){ - var result, i$, len$, x; - result = []; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - if (!in$(x, result)) { - result.push(x); - } - } - return result; -}; -uniqueBy = curry$(function(f, xs){ - var seen, i$, len$, x, val, results$ = []; - seen = []; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - val = f(x); - if (in$(val, seen)) { - continue; - } - seen.push(val); - results$.push(x); - } - return results$; -}); -fold = foldl = curry$(function(f, memo, xs){ - var i$, len$, x; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - memo = f(memo, x); - } - return memo; -}); -fold1 = foldl1 = curry$(function(f, xs){ - return fold(f, xs[0], xs.slice(1)); -}); -foldr = curry$(function(f, memo, xs){ - var i$, x; - for (i$ = xs.length - 1; i$ >= 0; --i$) { - x = xs[i$]; - memo = f(x, memo); - } - return memo; -}); -foldr1 = curry$(function(f, xs){ - return foldr(f, xs[xs.length - 1], xs.slice(0, -1)); -}); -unfoldr = curry$(function(f, b){ - var result, x, that; - result = []; - x = b; - while ((that = f(x)) != null) { - result.push(that[0]); - x = that[1]; - } - return result; -}); -concat = function(xss){ - return [].concat.apply([], xss); -}; -concatMap = curry$(function(f, xs){ - var x; - return [].concat.apply([], (function(){ - var i$, ref$, len$, results$ = []; - for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) { - x = ref$[i$]; - results$.push(f(x)); - } - return results$; - }())); -}); -flatten = function(xs){ - var x; - return [].concat.apply([], (function(){ - var i$, ref$, len$, results$ = []; - for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) { - x = ref$[i$]; - if (toString$.call(x).slice(8, -1) === 'Array') { - results$.push(flatten(x)); - } else { - results$.push(x); - } - } - return results$; - }())); -}; -difference = function(xs){ - var yss, results, i$, len$, x, j$, len1$, ys; - yss = slice$.call(arguments, 1); - results = []; - outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) { - ys = yss[j$]; - if (in$(x, ys)) { - continue outer; - } - } - results.push(x); - } - return results; -}; -intersection = function(xs){ - var yss, results, i$, len$, x, j$, len1$, ys; - yss = slice$.call(arguments, 1); - results = []; - outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) { - ys = yss[j$]; - if (!in$(x, ys)) { - continue outer; - } - } - results.push(x); - } - return results; -}; -union = function(){ - var xss, results, i$, len$, xs, j$, len1$, x; - xss = slice$.call(arguments); - results = []; - for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) { - xs = xss[i$]; - for (j$ = 0, len1$ = xs.length; j$ < len1$; ++j$) { - x = xs[j$]; - if (!in$(x, results)) { - results.push(x); - } - } - } - return results; -}; -countBy = curry$(function(f, xs){ - var results, i$, len$, x, key; - results = {}; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - key = f(x); - if (key in results) { - results[key] += 1; - } else { - results[key] = 1; - } - } - return results; -}); -groupBy = curry$(function(f, xs){ - var results, i$, len$, x, key; - results = {}; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - key = f(x); - if (key in results) { - results[key].push(x); - } else { - results[key] = [x]; - } - } - return results; -}); -andList = function(xs){ - var i$, len$, x; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - if (!x) { - return false; - } - } - return true; -}; -orList = function(xs){ - var i$, len$, x; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - if (x) { - return true; - } - } - return false; -}; -any = curry$(function(f, xs){ - var i$, len$, x; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - if (f(x)) { - return true; - } - } - return false; -}); -all = curry$(function(f, xs){ - var i$, len$, x; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - if (!f(x)) { - return false; - } - } - return true; -}); -sort = function(xs){ - return xs.concat().sort(function(x, y){ - if (x > y) { - return 1; - } else if (x < y) { - return -1; - } else { - return 0; - } - }); -}; -sortWith = curry$(function(f, xs){ - return xs.concat().sort(f); -}); -sortBy = curry$(function(f, xs){ - return xs.concat().sort(function(x, y){ - if (f(x) > f(y)) { - return 1; - } else if (f(x) < f(y)) { - return -1; - } else { - return 0; - } - }); -}); -sum = function(xs){ - var result, i$, len$, x; - result = 0; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - result += x; - } - return result; -}; -product = function(xs){ - var result, i$, len$, x; - result = 1; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - result *= x; - } - return result; -}; -mean = average = function(xs){ - var sum, i$, len$, x; - sum = 0; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - x = xs[i$]; - sum += x; - } - return sum / xs.length; -}; -maximum = function(xs){ - var max, i$, ref$, len$, x; - max = xs[0]; - for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { - x = ref$[i$]; - if (x > max) { - max = x; - } - } - return max; -}; -minimum = function(xs){ - var min, i$, ref$, len$, x; - min = xs[0]; - for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { - x = ref$[i$]; - if (x < min) { - min = x; - } - } - return min; -}; -maximumBy = curry$(function(f, xs){ - var max, i$, ref$, len$, x; - max = xs[0]; - for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { - x = ref$[i$]; - if (f(x) > f(max)) { - max = x; - } - } - return max; -}); -minimumBy = curry$(function(f, xs){ - var min, i$, ref$, len$, x; - min = xs[0]; - for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { - x = ref$[i$]; - if (f(x) < f(min)) { - min = x; - } - } - return min; -}); -scan = scanl = curry$(function(f, memo, xs){ - var last, x; - last = memo; - return [memo].concat((function(){ - var i$, ref$, len$, results$ = []; - for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) { - x = ref$[i$]; - results$.push(last = f(last, x)); - } - return results$; - }())); -}); -scan1 = scanl1 = curry$(function(f, xs){ - if (!xs.length) { - return; - } - return scan(f, xs[0], xs.slice(1)); -}); -scanr = curry$(function(f, memo, xs){ - xs = xs.concat().reverse(); - return scan(f, memo, xs).reverse(); -}); -scanr1 = curry$(function(f, xs){ - if (!xs.length) { - return; - } - xs = xs.concat().reverse(); - return scan(f, xs[0], xs.slice(1)).reverse(); -}); -slice = curry$(function(x, y, xs){ - return xs.slice(x, y); -}); -take = curry$(function(n, xs){ - if (n <= 0) { - return xs.slice(0, 0); - } else { - return xs.slice(0, n); - } -}); -drop = curry$(function(n, xs){ - if (n <= 0) { - return xs; - } else { - return xs.slice(n); - } -}); -splitAt = curry$(function(n, xs){ - return [take(n, xs), drop(n, xs)]; -}); -takeWhile = curry$(function(p, xs){ - var len, i; - len = xs.length; - if (!len) { - return xs; - } - i = 0; - while (i < len && p(xs[i])) { - i += 1; - } - return xs.slice(0, i); -}); -dropWhile = curry$(function(p, xs){ - var len, i; - len = xs.length; - if (!len) { - return xs; - } - i = 0; - while (i < len && p(xs[i])) { - i += 1; - } - return xs.slice(i); -}); -span = curry$(function(p, xs){ - return [takeWhile(p, xs), dropWhile(p, xs)]; -}); -breakList = curry$(function(p, xs){ - return span(compose$(p, not$), xs); -}); -zip = curry$(function(xs, ys){ - var result, len, i$, len$, i, x; - result = []; - len = ys.length; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - i = i$; - x = xs[i$]; - if (i === len) { - break; - } - result.push([x, ys[i]]); - } - return result; -}); -zipWith = curry$(function(f, xs, ys){ - var result, len, i$, len$, i, x; - result = []; - len = ys.length; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - i = i$; - x = xs[i$]; - if (i === len) { - break; - } - result.push(f(x, ys[i])); - } - return result; -}); -zipAll = function(){ - var xss, minLength, i$, len$, xs, ref$, i, lresult$, j$, results$ = []; - xss = slice$.call(arguments); - minLength = undefined; - for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) { - xs = xss[i$]; - minLength <= (ref$ = xs.length) || (minLength = ref$); - } - for (i$ = 0; i$ < minLength; ++i$) { - i = i$; - lresult$ = []; - for (j$ = 0, len$ = xss.length; j$ < len$; ++j$) { - xs = xss[j$]; - lresult$.push(xs[i]); - } - results$.push(lresult$); - } - return results$; -}; -zipAllWith = function(f){ - var xss, minLength, i$, len$, xs, ref$, i, results$ = []; - xss = slice$.call(arguments, 1); - minLength = undefined; - for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) { - xs = xss[i$]; - minLength <= (ref$ = xs.length) || (minLength = ref$); - } - for (i$ = 0; i$ < minLength; ++i$) { - i = i$; - results$.push(f.apply(null, (fn$()))); - } - return results$; - function fn$(){ - var i$, ref$, len$, results$ = []; - for (i$ = 0, len$ = (ref$ = xss).length; i$ < len$; ++i$) { - xs = ref$[i$]; - results$.push(xs[i]); - } - return results$; - } -}; -at = curry$(function(n, xs){ - if (n < 0) { - return xs[xs.length + n]; - } else { - return xs[n]; - } -}); -elemIndex = curry$(function(el, xs){ - var i$, len$, i, x; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - i = i$; - x = xs[i$]; - if (x === el) { - return i; - } - } -}); -elemIndices = curry$(function(el, xs){ - var i$, len$, i, x, results$ = []; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - i = i$; - x = xs[i$]; - if (x === el) { - results$.push(i); - } - } - return results$; -}); -findIndex = curry$(function(f, xs){ - var i$, len$, i, x; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - i = i$; - x = xs[i$]; - if (f(x)) { - return i; - } - } -}); -findIndices = curry$(function(f, xs){ - var i$, len$, i, x, results$ = []; - for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { - i = i$; - x = xs[i$]; - if (f(x)) { - results$.push(i); - } - } - return results$; -}); -module.exports = { - each: each, - map: map, - filter: filter, - compact: compact, - reject: reject, - partition: partition, - find: find, - head: head, - first: first, - tail: tail, - last: last, - initial: initial, - empty: empty, - reverse: reverse, - difference: difference, - intersection: intersection, - union: union, - countBy: countBy, - groupBy: groupBy, - fold: fold, - fold1: fold1, - foldl: foldl, - foldl1: foldl1, - foldr: foldr, - foldr1: foldr1, - unfoldr: unfoldr, - andList: andList, - orList: orList, - any: any, - all: all, - unique: unique, - uniqueBy: uniqueBy, - sort: sort, - sortWith: sortWith, - sortBy: sortBy, - sum: sum, - product: product, - mean: mean, - average: average, - concat: concat, - concatMap: concatMap, - flatten: flatten, - maximum: maximum, - minimum: minimum, - maximumBy: maximumBy, - minimumBy: minimumBy, - scan: scan, - scan1: scan1, - scanl: scanl, - scanl1: scanl1, - scanr: scanr, - scanr1: scanr1, - slice: slice, - take: take, - drop: drop, - splitAt: splitAt, - takeWhile: takeWhile, - dropWhile: dropWhile, - span: span, - breakList: breakList, - zip: zip, - zipWith: zipWith, - zipAll: zipAll, - zipAllWith: zipAllWith, - at: at, - elemIndex: elemIndex, - elemIndices: elemIndices, - findIndex: findIndex, - findIndices: findIndices -}; -function curry$(f, bound){ - var context, - _curry = function(args) { - return f.length > 1 ? function(){ - var params = args ? args.concat() : []; - context = bound ? context || this : this; - return params.push.apply(params, arguments) < - f.length && arguments.length ? - _curry.call(context, params) : f.apply(context, params); - } : f; - }; - return _curry(); -} -function in$(x, xs){ - var i = -1, l = xs.length >>> 0; - while (++i < l) if (x === xs[i]) return true; - return false; -} -function compose$() { - var functions = arguments; - return function() { - var i, result; - result = functions[0].apply(this, arguments); - for (i = 1; i < functions.length; ++i) { - result = functions[i](result); - } - return result; - }; -} -function not$(x){ return !x; } \ No newline at end of file diff --git a/node_modules/prelude-ls/lib/Num.js b/node_modules/prelude-ls/lib/Num.js deleted file mode 100644 index 0e25be7..0000000 --- a/node_modules/prelude-ls/lib/Num.js +++ /dev/null @@ -1,130 +0,0 @@ -// Generated by LiveScript 1.4.0 -var max, min, negate, abs, signum, quot, rem, div, mod, recip, pi, tau, exp, sqrt, ln, pow, sin, tan, cos, asin, acos, atan, atan2, truncate, round, ceiling, floor, isItNaN, even, odd, gcd, lcm; -max = curry$(function(x$, y$){ - return x$ > y$ ? x$ : y$; -}); -min = curry$(function(x$, y$){ - return x$ < y$ ? x$ : y$; -}); -negate = function(x){ - return -x; -}; -abs = Math.abs; -signum = function(x){ - if (x < 0) { - return -1; - } else if (x > 0) { - return 1; - } else { - return 0; - } -}; -quot = curry$(function(x, y){ - return ~~(x / y); -}); -rem = curry$(function(x$, y$){ - return x$ % y$; -}); -div = curry$(function(x, y){ - return Math.floor(x / y); -}); -mod = curry$(function(x$, y$){ - var ref$; - return (((x$) % (ref$ = y$) + ref$) % ref$); -}); -recip = (function(it){ - return 1 / it; -}); -pi = Math.PI; -tau = pi * 2; -exp = Math.exp; -sqrt = Math.sqrt; -ln = Math.log; -pow = curry$(function(x$, y$){ - return Math.pow(x$, y$); -}); -sin = Math.sin; -tan = Math.tan; -cos = Math.cos; -asin = Math.asin; -acos = Math.acos; -atan = Math.atan; -atan2 = curry$(function(x, y){ - return Math.atan2(x, y); -}); -truncate = function(x){ - return ~~x; -}; -round = Math.round; -ceiling = Math.ceil; -floor = Math.floor; -isItNaN = function(x){ - return x !== x; -}; -even = function(x){ - return x % 2 === 0; -}; -odd = function(x){ - return x % 2 !== 0; -}; -gcd = curry$(function(x, y){ - var z; - x = Math.abs(x); - y = Math.abs(y); - while (y !== 0) { - z = x % y; - x = y; - y = z; - } - return x; -}); -lcm = curry$(function(x, y){ - return Math.abs(Math.floor(x / gcd(x, y) * y)); -}); -module.exports = { - max: max, - min: min, - negate: negate, - abs: abs, - signum: signum, - quot: quot, - rem: rem, - div: div, - mod: mod, - recip: recip, - pi: pi, - tau: tau, - exp: exp, - sqrt: sqrt, - ln: ln, - pow: pow, - sin: sin, - tan: tan, - cos: cos, - acos: acos, - asin: asin, - atan: atan, - atan2: atan2, - truncate: truncate, - round: round, - ceiling: ceiling, - floor: floor, - isItNaN: isItNaN, - even: even, - odd: odd, - gcd: gcd, - lcm: lcm -}; -function curry$(f, bound){ - var context, - _curry = function(args) { - return f.length > 1 ? function(){ - var params = args ? args.concat() : []; - context = bound ? context || this : this; - return params.push.apply(params, arguments) < - f.length && arguments.length ? - _curry.call(context, params) : f.apply(context, params); - } : f; - }; - return _curry(); -} \ No newline at end of file diff --git a/node_modules/prelude-ls/lib/Obj.js b/node_modules/prelude-ls/lib/Obj.js deleted file mode 100644 index f0a921f..0000000 --- a/node_modules/prelude-ls/lib/Obj.js +++ /dev/null @@ -1,154 +0,0 @@ -// Generated by LiveScript 1.4.0 -var values, keys, pairsToObj, objToPairs, listsToObj, objToLists, empty, each, map, compact, filter, reject, partition, find; -values = function(object){ - var i$, x, results$ = []; - for (i$ in object) { - x = object[i$]; - results$.push(x); - } - return results$; -}; -keys = function(object){ - var x, results$ = []; - for (x in object) { - results$.push(x); - } - return results$; -}; -pairsToObj = function(object){ - var i$, len$, x, resultObj$ = {}; - for (i$ = 0, len$ = object.length; i$ < len$; ++i$) { - x = object[i$]; - resultObj$[x[0]] = x[1]; - } - return resultObj$; -}; -objToPairs = function(object){ - var key, value, results$ = []; - for (key in object) { - value = object[key]; - results$.push([key, value]); - } - return results$; -}; -listsToObj = curry$(function(keys, values){ - var i$, len$, i, key, resultObj$ = {}; - for (i$ = 0, len$ = keys.length; i$ < len$; ++i$) { - i = i$; - key = keys[i$]; - resultObj$[key] = values[i]; - } - return resultObj$; -}); -objToLists = function(object){ - var keys, values, key, value; - keys = []; - values = []; - for (key in object) { - value = object[key]; - keys.push(key); - values.push(value); - } - return [keys, values]; -}; -empty = function(object){ - var x; - for (x in object) { - return false; - } - return true; -}; -each = curry$(function(f, object){ - var i$, x; - for (i$ in object) { - x = object[i$]; - f(x); - } - return object; -}); -map = curry$(function(f, object){ - var k, x, resultObj$ = {}; - for (k in object) { - x = object[k]; - resultObj$[k] = f(x); - } - return resultObj$; -}); -compact = function(object){ - var k, x, resultObj$ = {}; - for (k in object) { - x = object[k]; - if (x) { - resultObj$[k] = x; - } - } - return resultObj$; -}; -filter = curry$(function(f, object){ - var k, x, resultObj$ = {}; - for (k in object) { - x = object[k]; - if (f(x)) { - resultObj$[k] = x; - } - } - return resultObj$; -}); -reject = curry$(function(f, object){ - var k, x, resultObj$ = {}; - for (k in object) { - x = object[k]; - if (!f(x)) { - resultObj$[k] = x; - } - } - return resultObj$; -}); -partition = curry$(function(f, object){ - var passed, failed, k, x; - passed = {}; - failed = {}; - for (k in object) { - x = object[k]; - (f(x) ? passed : failed)[k] = x; - } - return [passed, failed]; -}); -find = curry$(function(f, object){ - var i$, x; - for (i$ in object) { - x = object[i$]; - if (f(x)) { - return x; - } - } -}); -module.exports = { - values: values, - keys: keys, - pairsToObj: pairsToObj, - objToPairs: objToPairs, - listsToObj: listsToObj, - objToLists: objToLists, - empty: empty, - each: each, - map: map, - filter: filter, - compact: compact, - reject: reject, - partition: partition, - find: find -}; -function curry$(f, bound){ - var context, - _curry = function(args) { - return f.length > 1 ? function(){ - var params = args ? args.concat() : []; - context = bound ? context || this : this; - return params.push.apply(params, arguments) < - f.length && arguments.length ? - _curry.call(context, params) : f.apply(context, params); - } : f; - }; - return _curry(); -} \ No newline at end of file diff --git a/node_modules/prelude-ls/lib/Str.js b/node_modules/prelude-ls/lib/Str.js deleted file mode 100644 index eb9a1ac..0000000 --- a/node_modules/prelude-ls/lib/Str.js +++ /dev/null @@ -1,92 +0,0 @@ -// Generated by LiveScript 1.4.0 -var split, join, lines, unlines, words, unwords, chars, unchars, reverse, repeat, capitalize, camelize, dasherize; -split = curry$(function(sep, str){ - return str.split(sep); -}); -join = curry$(function(sep, xs){ - return xs.join(sep); -}); -lines = function(str){ - if (!str.length) { - return []; - } - return str.split('\n'); -}; -unlines = function(it){ - return it.join('\n'); -}; -words = function(str){ - if (!str.length) { - return []; - } - return str.split(/[ ]+/); -}; -unwords = function(it){ - return it.join(' '); -}; -chars = function(it){ - return it.split(''); -}; -unchars = function(it){ - return it.join(''); -}; -reverse = function(str){ - return str.split('').reverse().join(''); -}; -repeat = curry$(function(n, str){ - var result, i$; - result = ''; - for (i$ = 0; i$ < n; ++i$) { - result += str; - } - return result; -}); -capitalize = function(str){ - return str.charAt(0).toUpperCase() + str.slice(1); -}; -camelize = function(it){ - return it.replace(/[-_]+(.)?/g, function(arg$, c){ - return (c != null ? c : '').toUpperCase(); - }); -}; -dasherize = function(str){ - return str.replace(/([^-A-Z])([A-Z]+)/g, function(arg$, lower, upper){ - return lower + "-" + (upper.length > 1 - ? upper - : upper.toLowerCase()); - }).replace(/^([A-Z]+)/, function(arg$, upper){ - if (upper.length > 1) { - return upper + "-"; - } else { - return upper.toLowerCase(); - } - }); -}; -module.exports = { - split: split, - join: join, - lines: lines, - unlines: unlines, - words: words, - unwords: unwords, - chars: chars, - unchars: unchars, - reverse: reverse, - repeat: repeat, - capitalize: capitalize, - camelize: camelize, - dasherize: dasherize -}; -function curry$(f, bound){ - var context, - _curry = function(args) { - return f.length > 1 ? function(){ - var params = args ? args.concat() : []; - context = bound ? context || this : this; - return params.push.apply(params, arguments) < - f.length && arguments.length ? - _curry.call(context, params) : f.apply(context, params); - } : f; - }; - return _curry(); -} \ No newline at end of file diff --git a/node_modules/prelude-ls/lib/index.js b/node_modules/prelude-ls/lib/index.js deleted file mode 100644 index 391cb2e..0000000 --- a/node_modules/prelude-ls/lib/index.js +++ /dev/null @@ -1,178 +0,0 @@ -// Generated by LiveScript 1.4.0 -var Func, List, Obj, Str, Num, id, isType, replicate, prelude, toString$ = {}.toString; -Func = require('./Func.js'); -List = require('./List.js'); -Obj = require('./Obj.js'); -Str = require('./Str.js'); -Num = require('./Num.js'); -id = function(x){ - return x; -}; -isType = curry$(function(type, x){ - return toString$.call(x).slice(8, -1) === type; -}); -replicate = curry$(function(n, x){ - var i$, results$ = []; - for (i$ = 0; i$ < n; ++i$) { - results$.push(x); - } - return results$; -}); -Str.empty = List.empty; -Str.slice = List.slice; -Str.take = List.take; -Str.drop = List.drop; -Str.splitAt = List.splitAt; -Str.takeWhile = List.takeWhile; -Str.dropWhile = List.dropWhile; -Str.span = List.span; -Str.breakStr = List.breakList; -prelude = { - Func: Func, - List: List, - Obj: Obj, - Str: Str, - Num: Num, - id: id, - isType: isType, - replicate: replicate -}; -prelude.each = List.each; -prelude.map = List.map; -prelude.filter = List.filter; -prelude.compact = List.compact; -prelude.reject = List.reject; -prelude.partition = List.partition; -prelude.find = List.find; -prelude.head = List.head; -prelude.first = List.first; -prelude.tail = List.tail; -prelude.last = List.last; -prelude.initial = List.initial; -prelude.empty = List.empty; -prelude.reverse = List.reverse; -prelude.difference = List.difference; -prelude.intersection = List.intersection; -prelude.union = List.union; -prelude.countBy = List.countBy; -prelude.groupBy = List.groupBy; -prelude.fold = List.fold; -prelude.foldl = List.foldl; -prelude.fold1 = List.fold1; -prelude.foldl1 = List.foldl1; -prelude.foldr = List.foldr; -prelude.foldr1 = List.foldr1; -prelude.unfoldr = List.unfoldr; -prelude.andList = List.andList; -prelude.orList = List.orList; -prelude.any = List.any; -prelude.all = List.all; -prelude.unique = List.unique; -prelude.uniqueBy = List.uniqueBy; -prelude.sort = List.sort; -prelude.sortWith = List.sortWith; -prelude.sortBy = List.sortBy; -prelude.sum = List.sum; -prelude.product = List.product; -prelude.mean = List.mean; -prelude.average = List.average; -prelude.concat = List.concat; -prelude.concatMap = List.concatMap; -prelude.flatten = List.flatten; -prelude.maximum = List.maximum; -prelude.minimum = List.minimum; -prelude.maximumBy = List.maximumBy; -prelude.minimumBy = List.minimumBy; -prelude.scan = List.scan; -prelude.scanl = List.scanl; -prelude.scan1 = List.scan1; -prelude.scanl1 = List.scanl1; -prelude.scanr = List.scanr; -prelude.scanr1 = List.scanr1; -prelude.slice = List.slice; -prelude.take = List.take; -prelude.drop = List.drop; -prelude.splitAt = List.splitAt; -prelude.takeWhile = List.takeWhile; -prelude.dropWhile = List.dropWhile; -prelude.span = List.span; -prelude.breakList = List.breakList; -prelude.zip = List.zip; -prelude.zipWith = List.zipWith; -prelude.zipAll = List.zipAll; -prelude.zipAllWith = List.zipAllWith; -prelude.at = List.at; -prelude.elemIndex = List.elemIndex; -prelude.elemIndices = List.elemIndices; -prelude.findIndex = List.findIndex; -prelude.findIndices = List.findIndices; -prelude.apply = Func.apply; -prelude.curry = Func.curry; -prelude.flip = Func.flip; -prelude.fix = Func.fix; -prelude.over = Func.over; -prelude.split = Str.split; -prelude.join = Str.join; -prelude.lines = Str.lines; -prelude.unlines = Str.unlines; -prelude.words = Str.words; -prelude.unwords = Str.unwords; -prelude.chars = Str.chars; -prelude.unchars = Str.unchars; -prelude.repeat = Str.repeat; -prelude.capitalize = Str.capitalize; -prelude.camelize = Str.camelize; -prelude.dasherize = Str.dasherize; -prelude.values = Obj.values; -prelude.keys = Obj.keys; -prelude.pairsToObj = Obj.pairsToObj; -prelude.objToPairs = Obj.objToPairs; -prelude.listsToObj = Obj.listsToObj; -prelude.objToLists = Obj.objToLists; -prelude.max = Num.max; -prelude.min = Num.min; -prelude.negate = Num.negate; -prelude.abs = Num.abs; -prelude.signum = Num.signum; -prelude.quot = Num.quot; -prelude.rem = Num.rem; -prelude.div = Num.div; -prelude.mod = Num.mod; -prelude.recip = Num.recip; -prelude.pi = Num.pi; -prelude.tau = Num.tau; -prelude.exp = Num.exp; -prelude.sqrt = Num.sqrt; -prelude.ln = Num.ln; -prelude.pow = Num.pow; -prelude.sin = Num.sin; -prelude.tan = Num.tan; -prelude.cos = Num.cos; -prelude.acos = Num.acos; -prelude.asin = Num.asin; -prelude.atan = Num.atan; -prelude.atan2 = Num.atan2; -prelude.truncate = Num.truncate; -prelude.round = Num.round; -prelude.ceiling = Num.ceiling; -prelude.floor = Num.floor; -prelude.isItNaN = Num.isItNaN; -prelude.even = Num.even; -prelude.odd = Num.odd; -prelude.gcd = Num.gcd; -prelude.lcm = Num.lcm; -prelude.VERSION = '1.1.2'; -module.exports = prelude; -function curry$(f, bound){ - var context, - _curry = function(args) { - return f.length > 1 ? function(){ - var params = args ? args.concat() : []; - context = bound ? context || this : this; - return params.push.apply(params, arguments) < - f.length && arguments.length ? - _curry.call(context, params) : f.apply(context, params); - } : f; - }; - return _curry(); -} \ No newline at end of file diff --git a/node_modules/prelude-ls/package.json b/node_modules/prelude-ls/package.json deleted file mode 100644 index 5507d3c..0000000 --- a/node_modules/prelude-ls/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "prelude-ls", - "version": "1.1.2", - "author": "George Zahariev ", - "description": "prelude.ls is a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, LiveScript.", - "keywords": [ - "prelude", - "livescript", - "utility", - "ls", - "coffeescript", - "javascript", - "library", - "functional", - "array", - "list", - "object", - "string" - ], - "main": "lib/", - "files": [ - "lib/", - "README.md", - "LICENSE" - ], - "homepage": "http://preludels.com", - "bugs": "https://github.com/gkz/prelude-ls/issues", - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/gkz/prelude-ls/master/LICENSE" - } - ], - "engines": { - "node": ">= 0.8.0" - }, - "repository": { - "type": "git", - "url": "git://github.com/gkz/prelude-ls.git" - }, - "scripts": { - "test": "make test" - }, - "devDependencies": { - "livescript": "~1.4.0", - "uglify-js": "~2.4.12", - "mocha": "~2.2.4", - "istanbul": "~0.2.4", - "browserify": "~3.24.13", - "sinon": "~1.10.2" - } -} diff --git a/node_modules/prettier/THIRD-PARTY-NOTICES.md b/node_modules/prettier/THIRD-PARTY-NOTICES.md deleted file mode 100644 index f2af3ea..0000000 --- a/node_modules/prettier/THIRD-PARTY-NOTICES.md +++ /dev/null @@ -1,5844 +0,0 @@ -# Licenses of bundled dependencies - -The published Prettier artifact additionally contains code with the following licenses: -MIT, ISC, BSD-3-Clause, BSD-2-Clause, and Apache-2.0. - -## @angular/compiler@v20.0.5 - -> Angular - the compiler library - -License: MIT -Repository: -Author: angular - -> The MIT License -> -> Copyright (c) 2010-2025 Google LLC. https://angular.dev/license -> -> 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. - ----------------------------------------- - -## @babel/code-frame@v7.27.1 - -> Generate errors that contain a code frame that point to source locations. - -License: MIT -Homepage: -Repository: -Author: The Babel Team (https://babel.dev/team) - -> MIT License -> -> Copyright (c) 2014-present Sebastian McKenzie and other contributors -> -> 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. - ----------------------------------------- - -## @babel/helper-validator-identifier@v7.27.1 - -> Validate identifier/keywords name - -License: MIT -Repository: -Author: The Babel Team (https://babel.dev/team) - -> MIT License -> -> Copyright (c) 2014-present Sebastian McKenzie and other contributors -> -> 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. - ----------------------------------------- - -## @babel/parser@v7.27.7 - -> A JavaScript parser - -License: MIT -Homepage: -Repository: -Author: The Babel Team (https://babel.dev/team) - -> Copyright (C) 2012-2014 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. - ----------------------------------------- - -## @glimmer/syntax@v0.94.9 - -License: MIT -Repository: - -> Copyright (c) 2015 Tilde, Inc. -> -> 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. - ----------------------------------------- - -## @glimmer/util@v0.94.8 - -> Common utilities used in Glimmer - -License: MIT -Repository: - -> Copyright (c) 2015 Tilde, Inc. -> -> 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. - ----------------------------------------- - -## @glimmer/wire-format@v0.94.8 - -License: MIT -Repository: - -> Copyright (c) 2015 Tilde, Inc. -> -> 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. - ----------------------------------------- - -## @handlebars/parser@v2.0.0 - -> The parser for the Handlebars language - -License: ISC -Homepage: -Repository: - ----------------------------------------- - -## @keyv/serialize@v1.0.3 - -> Serialization for Keyv - -License: MIT -Homepage: -Repository: -Author: Jared Wray (https://jaredwray.com) - -> MIT License -> -> Copyright (c) 2017-2021 Luke Childs -> Copyright (c) 2021-2022 Jared Wray -> -> 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. - ----------------------------------------- - -## @nodelib/fs.scandir@v2.1.5 - -> List files and directories inside the specified directory - -License: MIT - -> 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. - ----------------------------------------- - -## @nodelib/fs.stat@v2.0.5 - -> Get the status of a file with some features - -License: MIT - -> 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. - ----------------------------------------- - -## @nodelib/fs.walk@v1.2.8 - -> A library for efficiently walking a directory recursively - -License: MIT - -> 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. - ----------------------------------------- - -## @prettier/cli@v0.9.0 - -> A faster CLI for Prettier. - -License: MIT - -> Copyright © James Long and contributors -> -> 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. - ----------------------------------------- - -## @prettier/parse-srcset@v3.1.0 - -> A spec-conformant JavaScript parser for the HTML5 srcset attribute - -License: MIT -Homepage: -Author: Alex Bell - -> The MIT License (MIT) -> -> Copyright (c) 2014 Alex Bell -> Copyright (c) fisker Cheung -> -> 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. - ----------------------------------------- - -## @typescript-eslint/types@v8.34.1 - -> Types for the TypeScript-ESTree AST spec - -License: MIT -Homepage: -Repository: - -> MIT License -> -> Copyright (c) 2019 typescript-eslint and other contributors -> -> 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. - ----------------------------------------- - -## @typescript-eslint/typescript-estree@v8.34.1 - -> A parser that converts TypeScript source code into an ESTree compatible form - -License: MIT -Homepage: -Repository: - -> MIT License -> -> Copyright (c) 2019 typescript-eslint and other contributors -> -> 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. - ----------------------------------------- - -## acorn@v8.15.0 - -> ECMAScript parser - -License: MIT -Homepage: -Repository: - -> MIT License -> -> Copyright (C) 2012-2022 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. - ----------------------------------------- - -## acorn-jsx@v5.3.2 - -> Modern, fast React.js JSX parser - -License: MIT -Homepage: -Repository: - -> Copyright (C) 2012-2017 by Ingvar Stepanyan -> -> 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. - ----------------------------------------- - -## angular-estree-parser@v12.1.0 - -> A parser that converts Angular source code into an ESTree-compatible form - -License: MIT -Homepage: -Author: Ika (https://github.com/ikatyang) - -> MIT License -> -> Copyright (c) Ika (https://github.com/ikatyang) -> -> 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. - ----------------------------------------- - -## angular-html-parser@v8.1.0 - -> A HTML parser extracted from Angular with some modifications - -License: MIT -Homepage: -Author: Ika (https://github.com/ikatyang) - -> MIT License -> -> Copyright (c) Ika (https://github.com/ikatyang) -> -> 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. - ----------------------------------------- - -## ansi-purge@v1.0.1 - -> A tiny function for deleting ANSI escape sequences from a string. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## ansi-regex@v6.1.0 - -> Regular expression for matching ANSI escape codes - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## ansi-truncate@v1.2.0 - -> A tiny function for truncating a string that may contain ANSI escape sequences. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## atomically@v2.0.3 - -> Read and write files atomically and reliably. - - -> The MIT License (MIT) -> -> Copyright (c) 2020-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## bail@v1.0.5 - -> Throw a given error - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## binary-extensions@v2.3.0 - -> List of binary file extensions - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> Copyright (c) Paul Miller (https://paulmillr.com) -> -> 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. - ----------------------------------------- - -## braces@v3.0.3 - -> Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed. - -License: MIT -Homepage: -Author: Jon Schlinkert (https://github.com/jonschlinkert) -Contributors: - - Brian Woodward (https://twitter.com/doowb) - - Elan Shanker (https://github.com/es128) - - Eugene Sharygin (https://github.com/eush77) - - hemanth.hm (http://h3manth.com) - - Jon Schlinkert (http://twitter.com/jonschlinkert) - -> The MIT License (MIT) -> -> Copyright (c) 2014-present, Jon Schlinkert. -> -> 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. - ----------------------------------------- - -## cacheable@v1.10.0 - -> High Performance Layer 1 / Layer 2 Caching with Keyv Storage - -License: MIT -Repository: -Author: Jared Wray - -> MIT License & © Jared Wray -> -> 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. - ----------------------------------------- - -## camelcase@v8.0.0 - -> Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar` - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## ccount@v1.1.0 - -> Count characters - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## character-entities@v1.2.4 - -> HTML character entity information - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## character-entities-legacy@v1.1.4 - -> HTML legacy character entity information - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## character-reference-invalid@v1.1.4 - -> HTML invalid numeric character reference information - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## ci-info@v4.2.0 - -> Get details about the current Continuous Integration environment - -License: MIT -Homepage: -Author: Thomas Watson Steen (https://twitter.com/wa7son) -Contributors: - - Sibiraj (https://github.com/sibiraj-s) - -> The MIT License (MIT) -> -> Copyright (c) 2016 Thomas Watson Steen -> -> 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. - ----------------------------------------- - -## collapse-white-space@v1.0.6 - -> Replace multiple white-space characters with a single space - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## common-path-prefix@v3.0.0 - -> Computes the longest prefix string that is common to each path, excluding the base component - -License: ISC -Homepage: -Repository: -Author: Mark Wubben (https://novemberborn.net/) - -> ISC License (ISC) -> Copyright (c) 2016, Mark Wubben -> -> Permission to use, copy, modify, and/or distribute this software for any purpose -> with or without fee is hereby granted, provided that the above copyright notice -> and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -> REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -> FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -> INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -> OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -> TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -> THIS SOFTWARE. - ----------------------------------------- - -## dashify@v2.0.0 - -> Convert a camelcase or space-separated string to a dash-separated string. ~12 sloc, fast, supports diacritics. - -License: MIT -Homepage: -Author: Jon Schlinkert (https://github.com/jonschlinkert) -Contributors: - - Jeffrey Priebe (https://github.com/jeffreypriebe) - - Jon Schlinkert (http://twitter.com/jonschlinkert) - - Ondrej Brinkel (https://www.anzui.de) - -> The MIT License (MIT) -> -> Copyright (c) 2015-present, Jon Schlinkert. -> -> 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. - ----------------------------------------- - -## deno-path-from-file-url@v0.0.3 - -> Convert file URLs to paths. - -License: MIT -Homepage: -Author: fisker Cheung (https://www.fiskercheung.com/) - -> MIT License -> -> Copyright (c) fisker Cheung (https://www.fiskercheung.com/) -> -> 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. - ----------------------------------------- - -## dettle@v1.0.5 - -> A tiny fully-featured debounce and throttle implementation. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## diff@v8.0.2 - -> A JavaScript text diff implementation. - -License: BSD-3-Clause -Repository: - -> BSD 3-Clause License -> -> Copyright (c) 2009-2015, Kevin Decker -> All rights reserved. -> -> Redistribution and use in source and binary forms, with or without -> modification, are permitted provided that the following conditions are met: -> -> 1. Redistributions of source code must retain the above copyright notice, this -> list of conditions and the following disclaimer. -> -> 2. Redistributions in binary form must reproduce the above copyright notice, -> this list of conditions and the following disclaimer in the documentation -> and/or other materials provided with the distribution. -> -> 3. Neither the name of the copyright holder nor the names of its -> contributors may be used to endorse or promote products derived from -> this software without specific prior written permission. -> -> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ----------------------------------------- - -## editorconfig@v0.15.3 - -> EditorConfig File Locator and Interpreter for Node.js - -License: MIT -Repository: -Author: EditorConfig Team -Contributors: - - Hong Xu (topbug.net) - - Jed Mao (https://github.com/jedmao/) - - Trey Hunner (http://treyhunner.com) - -> Copyright © 2012 EditorConfig Team -> -> 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. - ----------------------------------------- - -## emoji-regex@v10.4.0 - -> A regular expression to match all Emoji-only symbols as per the Unicode Standard. - -License: MIT -Homepage: -Repository: -Author: Mathias Bynens (https://mathiasbynens.be/) - -> Copyright Mathias Bynens -> -> 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. - ----------------------------------------- - -## escape-string-regexp@v5.0.0 - -> Escape RegExp special characters - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## espree@v10.4.0 - -> An Esprima-compatible JavaScript parser built on Acorn - -License: BSD-2-Clause -Homepage: -Repository: -Author: Nicholas C. Zakas - -> BSD 2-Clause License -> -> Copyright (c) Open JS Foundation -> All rights reserved. -> -> Redistribution and use in source and binary forms, with or without -> modification, are permitted provided that the following conditions are met: -> -> 1. Redistributions of source code must retain the above copyright notice, this -> list of conditions and the following disclaimer. -> -> 2. Redistributions in binary form must reproduce the above copyright notice, -> this list of conditions and the following disclaimer in the documentation -> and/or other materials provided with the distribution. -> -> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ----------------------------------------- - -## extend@v3.0.2 - -> Port of jQuery.extend for node.js and the browser - -License: MIT -Repository: -Author: Stefan Thomas (http://www.justmoon.net) -Contributors: - - Jordan Harband (https://github.com/ljharb) - -> The MIT License (MIT) -> -> Copyright (c) 2014 Stefan Thomas -> -> 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. - ----------------------------------------- - -## fast-glob@v3.3.3 - -> It's a very fast and efficient glob library for Node.js - -License: MIT -Author: Denis Malinochkin (https://mrmlnc.com) - -> 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. - ----------------------------------------- - -## fast-ignore@v1.1.3 - -> A fast parser and processor for .gitignore files. - - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## fast-json-stable-stringify@v2.1.0 - -> deterministic `JSON.stringify()` - a faster version of substack's json-stable-strigify without jsonify - -License: MIT -Homepage: -Repository: -Author: James Halliday (http://substack.net) - -> This software is released under the MIT license: -> -> Copyright (c) 2017 Evgeny Poberezkin -> Copyright (c) 2013 James Halliday -> -> 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. - ----------------------------------------- - -## fast-string-truncated-width@v1.2.1 - -> A fast function for calculating where a string should be truncated, given an optional width limit and an ellipsis string. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2024-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## fast-string-width@v1.1.0 - -> A fast function for calculating the visual width of a string once printed to the terminal. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2024-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## fastq@v1.19.1 - -> Fast, in memory work queue - -License: ISC -Homepage: -Repository: -Author: Matteo Collina - -> Copyright (c) 2015-2020, Matteo Collina -> -> Permission to use, copy, modify, and/or distribute this software for any -> purpose with or without fee is hereby granted, provided that the above -> copyright notice and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -> OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----------------------------------------- - -## file-entry-cache@v10.1.1 - -> A lightweight cache for file metadata, ideal for processes that work on a specific set of files and only need to reprocess files that have changed since the last run - -License: MIT -Repository: -Author: Jared Wray - -> MIT License & © Jared Wray -> -> 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. - ----------------------------------------- - -## fill-range@v7.1.1 - -> Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex` - -License: MIT -Homepage: -Author: Jon Schlinkert (https://github.com/jonschlinkert) -Contributors: - - Edo Rivai (edo.rivai.nl) - - Jon Schlinkert (http://twitter.com/jonschlinkert) - - Paul Miller (paulmillr.com) - - Rouven Weßling (www.rouvenwessling.de) - - null (https://github.com/wtgtybhertgeghgtwtg) - -> The MIT License (MIT) -> -> Copyright (c) 2014-present, Jon Schlinkert. -> -> 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-cache-directory@v6.0.0 - -> Finds the common standard cache directory - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> Copyright (c) James Talmage (https://github.com/jamestalmage) -> -> 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-in-directory@v3.0.0 - -> Find file or directory by names in a directory. - -License: MIT -Homepage: -Author: fisker Cheung (https://www.fiskercheung.com/) - -> MIT License -> -> Copyright (c) fisker Cheung (https://www.fiskercheung.com/) -> -> 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-up-json@v2.0.5 - -> Find, read and parse the first matching file found walking the filesystem upwards. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2021-present Fabio Spampinato -> -> 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-up-path@v1.0.1 - -> Find the path of the first file matching a given name, walking the filesystem upwards. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2024-present Fabio Spampinato -> -> 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-up-simple@v1.0.1 - -> Find a file or directory by walking up parent directories — Zero dependencies - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## flat-cache@v6.1.10 - -> A simple key/value storage using files to persist the data - -License: MIT -Repository: -Author: Jared Wray - -> MIT License & © Jared Wray -> -> 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. - ----------------------------------------- - -## flatted@v3.3.3 - -> A super light and fast circular JSON parser. - -License: ISC -Homepage: -Repository: -Author: Andrea Giammarchi - -> ISC License -> -> Copyright (c) 2018-2020, Andrea Giammarchi, @WebReflection -> -> Permission to use, copy, modify, and/or distribute this software for any -> purpose with or without fee is hereby granted, provided that the above -> copyright notice and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -> REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -> AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -> INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -> LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -> OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -> PERFORMANCE OF THIS SOFTWARE. - ----------------------------------------- - -## flatten@v1.0.3 - -> Flatten arbitrarily nested arrays into a non-nested list of non-array items. Maintained for legacy compatibility. - -License: MIT -Homepage: -Repository: -Author: Joshua Holbrook (http://jesusabdullah.net) -Contributors: - - M.K. (https://github.com/mk-pmb) - -> The MIT License (MIT) -> -> Copyright (c) 2016 Joshua Holbrook -> -> 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. - ----------------------------------------- - -## flow-parser@v0.274.1 - -> JavaScript parser written in OCaml. Produces ESTree AST - -License: MIT -Homepage: -Repository: -Author: Flow Team - ----------------------------------------- - -## function-once@v3.0.1 - -> Wraps a function so that it's only ever executed once. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2021-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## get-current-package@v1.0.1 - -> Get the package.json of the currently executing bin. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## get-east-asian-width@v1.3.0 - -> Determine the East Asian Width of a Unicode character - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## get-stdin@v9.0.0 - -> Get stdin as a string or buffer - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## glob-parent@v5.1.2 - -> Extract the non-magic parent path from a glob string. - -License: ISC -Author: Gulp Team (https://gulpjs.com/) -Contributors: - - Elan Shanker (https://github.com/es128) - - Blaine Bublitz - -> The ISC License -> -> Copyright (c) 2015, 2019 Elan Shanker -> -> Permission to use, copy, modify, and/or distribute this software for any -> purpose with or without fee is hereby granted, provided that the above -> copyright notice and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----------------------------------------- - -## grammex@v3.1.10 - -> A tiny, PEG-like system for building language grammars with regexes. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## graphql@v16.11.0 - -> A Query Language and Runtime which can target any service. - -License: MIT -Homepage: -Repository: - -> MIT License -> -> Copyright (c) GraphQL Contributors -> -> 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. - ----------------------------------------- - -## hookified@v1.9.1 - -> Event Emitting and Middleware Hooks - -License: MIT -Homepage: -Repository: -Author: Jared Wray - -> MIT License & © Jared Wray -> -> 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. - ----------------------------------------- - -## ignore@v7.0.5 - -> Ignore is a manager and filter for .gitignore rules, the one used by eslint, gitbook and many others. - -License: MIT -Repository: -Author: kael - -> Copyright (c) 2013 Kael Zhang , contributors -> http://kael.me/ -> -> 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. - ----------------------------------------- - -## import-meta-resolve@v4.1.0 - -> Resolve things like Node.js — ponyfill for `import.meta.resolve` - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2021 Titus Wormer -> -> 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. -> -> --- -> -> This is a derivative work based on: -> . -> Which is licensed: -> -> """ -> Copyright Node.js contributors. All rights reserved. -> -> 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. -> """ -> -> This license applies to parts of Node.js originating from the -> https://github.com/joyent/node repository: -> -> """ -> Copyright Joyent, Inc. and other Node contributors. All rights reserved. -> 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. -> """ - ----------------------------------------- - -## index-to-position@v1.1.0 - -> Convert a string index to its line and column position - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## indexes-of@v1.0.1 - -> line String/Array#indexOf but return all the indexes in an array - -License: MIT -Homepage: -Repository: -Author: Dominic Tarr (dominictarr.com) - -> Copyright (c) 2013 Dominic Tarr -> -> 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. - ----------------------------------------- - -## inherits@v2.0.4 - -> Browser-friendly inheritance fully compatible with standard node.js inherits() - -License: ISC - -> The ISC License -> -> Copyright (c) Isaac Z. Schlueter -> -> Permission to use, copy, modify, and/or distribute this software for any -> purpose with or without fee is hereby granted, provided that the above -> copyright notice and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -> REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -> FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -> INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -> LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -> OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -> PERFORMANCE OF THIS SOFTWARE. - ----------------------------------------- - -## ini-simple-parser@v1.0.1 - -> A simple, fast and configurable INI parser. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## ionstore@v1.0.1 - -> A very simple isomorphic key-value store with a Map-like API for persisting session data. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## is-alphabetical@v1.0.4 - -> Check if a character is alphabetical - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## is-alphanumerical@v1.0.4 - -> Check if a character is alphanumerical - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## is-binary-path@v2.1.0 - -> Check if a file path is a binary file - -License: MIT -Author: Sindre Sorhus (sindresorhus.com) - -> MIT License -> -> Copyright (c) 2019 Sindre Sorhus (https://sindresorhus.com), Paul Miller (https://paulmillr.com) -> -> 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. - ----------------------------------------- - -## is-buffer@v2.0.5 - -> Determine if an object is a Buffer - -License: MIT -Repository: -Author: Feross Aboukhadijeh (https://feross.org) - -> The MIT License (MIT) -> -> Copyright (c) Feross Aboukhadijeh -> -> 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. - ----------------------------------------- - -## is-decimal@v1.0.4 - -> Check if a character is decimal - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## is-es5-identifier-name@v1.0.0 - -> Check if provided string is an `IdentifierName` as specified in ECMA262 edition 5.1 section 7.6. - -License: MIT -Author: fisker Cheung - -> MIT License -> -> Copyright (c) fisker Cheung (https://www.fiskercheung.com/) -> -> 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. - ----------------------------------------- - -## is-extglob@v2.1.1 - -> Returns true if a string has an extglob. - -License: MIT -Homepage: -Author: Jon Schlinkert (https://github.com/jonschlinkert) - -> The MIT License (MIT) -> -> Copyright (c) 2014-2016, Jon Schlinkert -> -> 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. - ----------------------------------------- - -## is-glob@v4.0.3 - -> Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience. - -License: MIT -Homepage: -Author: Jon Schlinkert (https://github.com/jonschlinkert) -Contributors: - - Brian Woodward (https://twitter.com/doowb) - - Daniel Perez (https://tuvistavie.com) - - Jon Schlinkert (http://twitter.com/jonschlinkert) - -> The MIT License (MIT) -> -> Copyright (c) 2014-2017, Jon Schlinkert. -> -> 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. - ----------------------------------------- - -## is-hexadecimal@v1.0.4 - -> Check if a character is hexadecimal - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## is-number@v7.0.0 - -> Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc. - -License: MIT -Homepage: -Author: Jon Schlinkert (https://github.com/jonschlinkert) -Contributors: - - Jon Schlinkert (http://twitter.com/jonschlinkert) - - Olsten Larck (https://i.am.charlike.online) - - Rouven Weßling (www.rouvenwessling.de) - -> The MIT License (MIT) -> -> Copyright (c) 2014-present, Jon Schlinkert. -> -> 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. - ----------------------------------------- - -## is-plain-obj@v2.1.0 - -> Check if a value is a plain object - -License: MIT -Author: Sindre Sorhus (sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (sindresorhus.com) -> -> 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. - ----------------------------------------- - -## is-whitespace-character@v1.0.4 - -> Check if a character is a whitespace character - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## is-word-character@v1.0.4 - -> Check if a character is a word character - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## isoconcurrency@v1.0.0 - -> An isomorphic way to get the number of logical cores available. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2025-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## isotimer@v1.0.0 - -> An isomorphic setImmediate/setInterval/setTimeout implementation. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2025-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## iterate-directory-up@v1.4.0 - -> Iterate directory up. - -License: MIT -Homepage: -Author: fisker Cheung (https://www.fiskercheung.com/) - -> MIT License -> -> Copyright (c) fisker Cheung (https://www.fiskercheung.com/) -> -> 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. - ----------------------------------------- - -## jest-docblock@v30.0.1 - -License: MIT -Repository: - -> MIT License -> -> Copyright (c) Meta Platforms, Inc. and affiliates. -> Copyright Contributors to the Jest project. -> -> 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. - ----------------------------------------- - -## js-tokens@v4.0.0 - -> A regex that tokenizes JavaScript. - -License: MIT -Author: Simon Lydell - -> The MIT License (MIT) -> -> Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell -> -> 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. - ----------------------------------------- - -## js-yaml@v4.1.0 - -> YAML 1.2 parser and serializer - -License: MIT -Author: Vladimir Zapparov -Contributors: - - Aleksey V Zapparov (http://www.ixti.net/) - - Vitaly Puzrin (https://github.com/puzrin) - - Martin Grenfell (http://got-ravings.blogspot.com) - -> (The MIT License) -> -> Copyright (C) 2011-2015 by Vitaly Puzrin -> -> 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. - ----------------------------------------- - -## json-sorted-stringify@v1.0.1 - -> Alternative JSON.stringify function with sorted keys, so the output is stable. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## json5@v2.2.3 - -> JSON for Humans - -License: MIT -Homepage: -Repository: -Author: Aseem Kishore -Contributors: - - Max Nanasy - - Andrew Eisenberg - - Jordan Tucker - -> MIT License -> -> Copyright (c) 2012-2018 Aseem Kishore, and [others]. -> -> 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. -> -> [others]: https://github.com/json5/json5/contributors - ----------------------------------------- - -## kasi@v1.1.1 - -> A collection of functions for working with different casings. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## keyv@v5.3.3 - -> Simple key-value storage with support for multiple backends - -License: MIT -Homepage: -Repository: -Author: Jared Wray (http://jaredwray.com) - -> MIT License -> -> Copyright (c) 2017-2021 Luke Childs -> Copyright (c) 2021-2022 Jared Wray -> -> 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. - ----------------------------------------- - -## leven@v4.0.0 - -> Measure the difference between two strings using the Levenshtein distance algorithm - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## lomemo@v1.0.1 - -> Lodash's memoize function, but in a much smaller package than lodash.memoize's. - -License: MIT - -> The MIT License -> -> Copyright JS Foundation and other contributors -> -> Based on Underscore.js, copyright Jeremy Ashkenas, -> DocumentCloud and Investigative Reporters & Editors -> -> This software consists of voluntary contributions made by many -> individuals. For exact contribution history, see the revision history -> available at https://github.com/lodash/lodash -> -> The following license applies to all parts of this software except as -> documented below: -> -> ==== -> -> 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. -> -> ==== -> -> Copyright and related rights for sample code are waived via CC0. Sample -> code is defined as all source code displayed within the prose of the -> documentation. -> -> CC0: http://creativecommons.org/publicdomain/zero/1.0/ -> -> ==== -> -> Files located in the node_modules and vendor directories are externally -> maintained libraries used by this software which have their own -> licenses; we recommend you read them, as their terms may differ from the -> terms above. - ----------------------------------------- - -## lru-cache@v4.1.5 - -> A cache object that deletes the least-recently-used items. - -License: ISC -Author: Isaac Z. Schlueter - -> The ISC License -> -> Copyright (c) Isaac Z. Schlueter and Contributors -> -> Permission to use, copy, modify, and/or distribute this software for any -> purpose with or without fee is hereby granted, provided that the above -> copyright notice and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----------------------------------------- - -## markdown-escapes@v1.0.4 - -> List of escapable characters in markdown - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## merge2@v1.4.1 - -> Merge multiple streams into one stream in sequence or parallel. - -License: MIT -Homepage: -Repository: - -> The MIT License (MIT) -> -> Copyright (c) 2014-2020 Teambition -> -> 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. - ----------------------------------------- - -## meriyah@v6.1.3 - -> A 100% compliant, self-hosted javascript parser with high focus on both performance and stability - -License: ISC -Homepage: -Repository: -Author: Kenny F. (https://github.com/KFlash) -Contributors: - - Chunpeng Huo (https://github.com/3cp) - -> ISC License -> -> Copyright (c) 2019 and later, KFlash and others. -> -> Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----------------------------------------- - -## micromatch@v4.0.8 - -> Glob matching for javascript/node.js. A replacement and faster alternative to minimatch and multimatch. - -License: MIT -Homepage: -Author: Jon Schlinkert (https://github.com/jonschlinkert) -Contributors: - - null (https://github.com/DianeLooney) - - Amila Welihinda (amilajack.com) - - Bogdan Chadkin (https://github.com/TrySound) - - Brian Woodward (https://twitter.com/doowb) - - Devon Govett (http://badassjs.com) - - Elan Shanker (https://github.com/es128) - - Fabrício Matté (https://ultcombo.js.org) - - Jon Schlinkert (http://twitter.com/jonschlinkert) - - Martin Kolárik (https://kolarik.sk) - - Olsten Larck (https://i.am.charlike.online) - - Paul Miller (paulmillr.com) - - Tom Byrer (https://github.com/tomByrer) - - Tyler Akins (http://rumkin.com) - - Peter Bright (https://github.com/drpizza) - - Kuba Juszczyk (https://github.com/ku8ar) - -> The MIT License (MIT) -> -> Copyright (c) 2014-present, Jon Schlinkert. -> -> 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. - ----------------------------------------- - -## minimist@v1.2.8 - -> parse argument options - -License: MIT -Homepage: -Repository: -Author: James Halliday (http://substack.net) - -> This software is released under the MIT license: -> -> 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. - ----------------------------------------- - -## n-readlines@v1.0.1 - -> Read file line by line without buffering the whole file in memory. - -License: MIT -Repository: -Author: Yoan Arnaudov - -> The MIT License (MIT) -> -> Copyright (c) 2013 Liucw -> -> 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. - ----------------------------------------- - -## nanoid@v3.3.11 - -> A tiny (116 bytes), secure URL-friendly unique string ID generator - -License: MIT -Author: Andrey Sitnik - -> The MIT License (MIT) -> -> Copyright 2017 Andrey Sitnik -> -> 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. - ----------------------------------------- - -## parse-entities@v2.0.0 - -> Parse HTML character references: fast, spec-compliant, positional information - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## parse-json@v8.3.0 - -> Parse JSON with more helpful errors - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## picocolors@v1.1.1 - -> The tiniest and the fastest library for terminal output formatting with ANSI colors - -License: ISC -Author: Alexey Raspopov - -> ISC License -> -> Copyright (c) 2021-2024 Oleksii Raspopov, Kostiantyn Denysov, Anton Verinov -> -> Permission to use, copy, modify, and/or distribute this software for any -> purpose with or without fee is hereby granted, provided that the above -> copyright notice and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -> OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----------------------------------------- - -## picomatch@v2.3.1 - -> Blazing fast and accurate glob matcher written in JavaScript, with no dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions. - -License: MIT -Homepage: -Author: Jon Schlinkert (https://github.com/jonschlinkert) - -> The MIT License (MIT) -> -> Copyright (c) 2017-present, Jon Schlinkert. -> -> 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. - ----------------------------------------- - -## pioppo@v1.2.1 - -> A tiny isomorphic batched logger. ~3x faster than regular logging in Node. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## pkg-dir@v8.0.0 - -> Find the root directory of a Node.js project or npm package - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## please-upgrade-node@v3.2.0 - -> Displays a beginner-friendly message telling your user to upgrade their version of Node - -License: MIT -Homepage: -Repository: -Author: typicode - -> MIT License -> -> Copyright (c) 2017 -> -> 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. - ----------------------------------------- - -## postcss@v8.5.6 - -> Tool for transforming styles with JS plugins - -License: MIT -Homepage: -Author: Andrey Sitnik - -> The MIT License (MIT) -> -> Copyright 2013 Andrey Sitnik -> -> 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. - ----------------------------------------- - -## postcss-less@v6.0.0 - -> LESS parser for PostCSS - -License: MIT -Homepage: -Author: Denys Kniazevych - -> The MIT License (MIT) -> -> Copyright (c) 2013 Andrey Sitnik -> Copyright (c) 2016 Denys Kniazevych -> Copyright (c) 2016 Pat Sissons -> Copyright (c) 2017 Andrew Powell -> -> 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. - ----------------------------------------- - -## postcss-media-query-parser@v0.2.3 - -> A tool for parsing media query lists. - -License: MIT -Homepage: -Repository: -Author: dryoma - ----------------------------------------- - -## postcss-scss@v4.0.9 - -> SCSS parser for PostCSS - -License: MIT -Author: Andrey Sitnik - -> The MIT License (MIT) -> -> Copyright 2013 Andrey Sitnik -> -> 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. - ----------------------------------------- - -## postcss-selector-parser@v2.2.3 - -License: MIT -Homepage: -Author: Ben Briggs (http://beneb.info) - -> Copyright (c) Ben Briggs (http://beneb.info) -> -> 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. - ----------------------------------------- - -## postcss-values-parser@v2.0.1 - -> A CSS property value parser for use with PostCSS - -License: MIT -Author: Andrew Powell (shellscape) (http://shellscape.org) - -> Copyright (c) Andrew Powell -> -> 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. - ----------------------------------------- - -## promise-make-counter@v1.0.2 - -> A simple function that makes a counter-based promise, which can be incremented and decremented, and it resolves once its counter reaches zero. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2024-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## promise-make-naked@v3.0.2 - -> A simple function that makes a promise that can be resolved, rejected or introspected from the outside. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2021-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## promise-resolve-timeout@v2.0.1 - -> Create a Promise which will resolve with the provided value after a timeout. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2019-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## pseudomap@v1.0.2 - -> A thing that is a lot like ES6 `Map`, but without iterators, for use in environments where `for..of` syntax and `Map` are not available. - -License: ISC -Homepage: -Repository: -Author: Isaac Z. Schlueter (http://blog.izs.me/) - -> The ISC License -> -> Copyright (c) Isaac Z. Schlueter and Contributors -> -> Permission to use, copy, modify, and/or distribute this software for any -> purpose with or without fee is hereby granted, provided that the above -> copyright notice and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----------------------------------------- - -## queue-microtask@v1.2.3 - -> fast, tiny `queueMicrotask` shim for modern engines - -License: MIT -Homepage: -Repository: -Author: Feross Aboukhadijeh (https://feross.org) - -> The MIT License (MIT) -> -> Copyright (c) Feross Aboukhadijeh -> -> 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. - ----------------------------------------- - -## remark-footnotes@v2.0.0 - -> remark plugin to add support for pandoc footnotes - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2020 Titus Wormer -> -> 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. - ----------------------------------------- - -## remark-math@v3.0.1 - -> remark plugin to parse and stringify math - -License: MIT -Author: Junyoung Choi (https://rokt33r.github.io) -Contributors: - - Junyoung Choi (https://rokt33r.github.io) - - Titus Wormer (https://wooorm.com) - ----------------------------------------- - -## remark-parse@v8.0.3 - -> remark plugin to parse Markdown - -License: MIT -Homepage: -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - - Eugene Sharygin - - Junyoung Choi - - Elijah Hamovitz - - Ika - ----------------------------------------- - -## repeat-string@v1.6.1 - -> Repeat the given string n times. Fastest implementation for repeating a string. - -License: MIT -Homepage: -Author: Jon Schlinkert (http://github.com/jonschlinkert) -Contributors: - - Brian Woodward (https://github.com/doowb) - - Jon Schlinkert (http://twitter.com/jonschlinkert) - - Linus Unnebäck (http://linus.unnebäck.se) - - Thijs Busser (http://tbusser.net) - - Titus (wooorm.com) - -> The MIT License (MIT) -> -> Copyright (c) 2014-2016, Jon Schlinkert. -> -> 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. - ----------------------------------------- - -## reusify@v1.1.0 - -> Reuse objects and functions with style - -License: MIT -Homepage: -Repository: -Author: Matteo Collina - -> The MIT License (MIT) -> -> Copyright (c) 2015-2024 Matteo Collina -> -> 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. - ----------------------------------------- - -## run-parallel@v1.2.0 - -> Run an array of functions in parallel - -License: MIT -Homepage: -Repository: -Author: Feross Aboukhadijeh (https://feross.org) - -> The MIT License (MIT) -> -> Copyright (c) Feross Aboukhadijeh -> -> 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. - ----------------------------------------- - -## sdbm@v2.0.0 - -> SDBM non-cryptographic hash function - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## search-closest@v1.1.0 - -> Find closest file or directory by names. - -License: MIT -Homepage: -Author: fisker Cheung (https://www.fiskercheung.com/) - -> MIT License -> -> Copyright (c) fisker Cheung (https://www.fiskercheung.com/) -> -> 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. - ----------------------------------------- - -## semver@v7.7.2 - -> The semantic version parser used by npm. - -License: ISC -Repository: -Author: GitHub Inc. - -> The ISC License -> -> Copyright (c) Isaac Z. Schlueter and Contributors -> -> Permission to use, copy, modify, and/or distribute this software for any -> purpose with or without fee is hereby granted, provided that the above -> copyright notice and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----------------------------------------- - -## semver-compare@v1.0.0 - -> compare two semver version strings, returning -1, 0, or 1 - -License: MIT -Homepage: -Repository: -Author: James Halliday (http://substack.net) - -> This software is released under the MIT license: -> -> 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. - ----------------------------------------- - -## sigmund@v1.0.1 - -> Quick and dirty signatures for Objects. - -License: ISC -Repository: -Author: Isaac Z. Schlueter (http://blog.izs.me/) - -> The ISC License -> -> Copyright (c) Isaac Z. Schlueter and Contributors -> -> Permission to use, copy, modify, and/or distribute this software for any -> purpose with or without fee is hereby granted, provided that the above -> copyright notice and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----------------------------------------- - -## simple-html-tokenizer@v0.5.11 - -> Simple HTML Tokenizer is a lightweight JavaScript library that can be used to tokenize the kind of HTML normally found in templates. - -License: MIT -Repository: - -> Copyright (c) 2014 Yehuda Katz and contributors -> -> 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. - ----------------------------------------- - -## smol-toml@v1.3.4 - -> A small, fast, and correct TOML parser/serializer - -License: BSD-3-Clause -Author: Cynthia - -> Copyright (c) Squirrel Chat et al., All rights reserved. -> -> Redistribution and use in source and binary forms, with or without -> modification, are permitted provided that the following conditions are met: -> -> 1. Redistributions of source code must retain the above copyright notice, this -> list of conditions and the following disclaimer. -> 2. Redistributions in binary form must reproduce the above copyright notice, -> this list of conditions and the following disclaimer in the -> documentation and/or other materials provided with the distribution. -> 3. Neither the name of the copyright holder nor the names of its contributors -> may be used to endorse or promote products derived from this software without -> specific prior written permission. -> -> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -> ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ----------------------------------------- - -## specialist@v1.4.5 - -> A library that helps you write tiny, fast and beautiful CLI apps that can automatically check for updates. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2021-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## state-toggle@v1.0.3 - -> Enter/exit a state - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## stdin-blocker@v2.0.1 - -> A tiny library for blocking stdin keypresses, except for Ctrl+C. Useful while displaying animations. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## string-escape-regex@v1.0.1 - -> A tiny function for escaping a string to be used as the source in a regex. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## strip-ansi@v7.1.0 - -> Strip ANSI escape codes from a string - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## stubborn-fs@v1.2.5 - -> Stubborn versions of Node's fs functions that try really hard to do their job. - - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## tiny-bin@v1.11.1 - -> A library for building tiny and beautiful command line apps. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## tiny-colors@v2.2.2 - -> A tiny library providing the basic ANSI colors for the terminal. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## tiny-cursor@v2.0.1 - -> A tiny library for hiding and showing the cursor in the terminal. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## tiny-editorconfig@v1.0.0 - -> A tiny isomorphic parser and resolver for EditorConfig. - - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## tiny-levenshtein@v1.0.1 - -> A tiny implementation of the Levenshtein edit distance algorithm. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## tiny-parse-argv@v2.8.2 - -> A tiny function for parsing process.argv, a modern rewrite of minimist. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## tiny-readdir@v2.7.4 - -> A simple promisified recursive readdir function. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2020-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## tiny-readdir-glob@v1.23.2 - -> A simple promisified recursive readdir function, with support for globs. - - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## tiny-spinner@v2.0.5 - -> A simple, yet beautiful, CLI spinner. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## tiny-truncate@v1.0.3 - -> A tiny function for truncating a string which may containg ANSI escapes, with automatic terminal width detection. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## tiny-updater@v3.5.3 - -> A small update notifier for NPM packages, useful for CLI apps. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2021-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## to-fast-properties@v4.0.0 - -> Force V8 to use fast properties for an object - -License: MIT -Author: Sindre Sorhus (https:/sindresorhus.com) - -> MIT License -> -> Copyright (c) Petka Antonov -> Benjamin Gruenbaum -> John-David Dalton -> Sindre Sorhus -> -> 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. - ----------------------------------------- - -## to-regex-range@v5.0.1 - -> Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions. - -License: MIT -Homepage: -Author: Jon Schlinkert (https://github.com/jonschlinkert) -Contributors: - - Jon Schlinkert (http://twitter.com/jonschlinkert) - - Rouven Weßling (www.rouvenwessling.de) - -> The MIT License (MIT) -> -> Copyright (c) 2015-present, Jon Schlinkert. -> -> 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. - ----------------------------------------- - -## trim@v1.0.1 - -> Trim string whitespace - -License: MIT -Repository: -Author: TJ Holowaychuk - ----------------------------------------- - -## trim-newlines@v5.0.0 - -> Trim newlines from the start and/or end of a string - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> 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. - ----------------------------------------- - -## trim-trailing-lines@v1.1.4 - -> Remove final line feeds from a string - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## trough@v1.0.5 - -> Middleware: a channel used to convey a liquid - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## ts-api-utils@v2.1.0 - -> Utility functions for working with TypeScript's API. Successor to the wonderful tsutils. 🛠️️ - -License: MIT -Repository: -Author: JoshuaKGoldberg - -> # MIT License -> -> 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. - ----------------------------------------- - -## typescript@v5.8.3 - -> TypeScript is a language for application scale JavaScript development - -License: Apache-2.0 -Homepage: -Repository: -Author: Microsoft Corp. - -> Apache License -> -> Version 2.0, January 2004 -> -> http://www.apache.org/licenses/ -> -> TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -> -> 1. Definitions. -> -> "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. -> -> "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. -> -> "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. -> -> "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. -> -> "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. -> -> "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. -> -> "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). -> -> "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. -> -> "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." -> -> "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. -> -> 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. -> -> 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. -> -> 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: -> -> You must give any other recipients of the Work or Derivative Works a copy of this License; and -> -> You must cause any modified files to carry prominent notices stating that You changed the files; and -> -> You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and -> -> If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. -> -> 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. -> -> 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. -> -> 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. -> -> 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. -> -> 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. -> -> END OF TERMS AND CONDITIONS - ----------------------------------------- - -## unherit@v1.1.3 - -> Clone a constructor without affecting the super-class - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## unified@v9.2.2 - -> Interface for parsing, inspecting, transforming, and serializing content through syntax trees - -License: MIT -Homepage: -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - - Junyoung Choi - - Hernan Rajchert - - Christian Murphy - - Vse Mozhet Byt - - Richard Littauer - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## uniq@v1.0.1 - -> Removes duplicates from a sorted array in place - -License: MIT -Repository: -Author: Mikola Lysenko - -> The MIT License (MIT) -> -> Copyright (c) 2013 Mikola Lysenko -> -> 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. - ----------------------------------------- - -## unist-util-is@v4.1.0 - -> unist utility to check if a node passes a test - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - - Christian Murphy - - Lucas Brandstaetter (https://github.com/Roang-zero1) - -> (The MIT license) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## unist-util-remove-position@v2.0.1 - -> unist utility to remove positions from a tree - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## unist-util-stringify-position@v2.0.3 - -> unist utility to serialize a node, position, or point as a human readable location - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## unist-util-visit@v2.0.3 - -> unist utility to visit nodes - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - - Eugene Sharygin - - Richard Gibson - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## unist-util-visit-parents@v3.1.1 - -> unist utility to recursively walk over nodes, with ancestral information - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## url-or-path@v2.6.1 - -> Convert between file URL and path. - -License: MIT -Homepage: -Author: fisker Cheung (https://www.fiskercheung.com/) - -> MIT License -> -> Copyright (c) fisker Cheung (https://www.fiskercheung.com/) -> -> 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. - ----------------------------------------- - -## vfile@v4.2.1 - -> Virtual file format for text processing - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - - Brendan Abbott - - Denys Dovhan - - Kyle Mathews - - Shinnosuke Watanabe - - Sindre Sorhus - -> (The MIT License) -> -> Copyright (c) 2015 Titus Wormer -> -> 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. - ----------------------------------------- - -## vfile-location@v3.2.0 - -> vfile utility to convert between positional (line and column-based) and offset (range-based) locations - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - - Christian Murphy - -> (The MIT License) -> -> Copyright (c) 2016 Titus Wormer -> -> 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. - ----------------------------------------- - -## vfile-message@v2.0.4 - -> vfile utility to create a virtual message - -License: MIT -Author: Titus Wormer (https://wooorm.com) -Contributors: - - Titus Wormer (https://wooorm.com) - -> (The MIT License) -> -> Copyright (c) 2017 Titus Wormer -> -> 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. - ----------------------------------------- - -## vnopts@v2.0.2 - -> validate and normalize options - -License: MIT -Homepage: -Author: Ika (https://github.com/ikatyang) - -> MIT License -> -> Copyright (c) Ika (https://github.com/ikatyang) -> -> 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. - ----------------------------------------- - -## wcwidth.js@v2.0.0 - -> a javascript porting of C's wcwidth() - -License: MIT -Homepage: -Repository: -Author: Woong Jun (http://code.woong.org/) -Contributors: - - Tim Oxley (http://campjs.com/) - -> wcwidth.js: a javascript portng of C's wcwidth() -> ================================================ -> -> Copyright (C) 2012-2014 by Woong Jun and Tim Oxley. -> -> This package is a javascript porting of `wcwidth()` implementation -> [by Markus Kuhn](http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c). -> -> 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. -> -> -> THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, -> INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -> FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR -> OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -> EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -> OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -> IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY -> OF SUCH DAMAGE. - ----------------------------------------- - -## webworker-shim@v1.1.4 - -> A tiny shim for WebWorker (data URI only) that works in Node. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## when-exit@v2.1.4 - -> Execute a function right before the process, or the browser's tab, is about to exit. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2022-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## worktank@v3.0.2 - -> A simple isomorphic library for executing functions inside WebWorkers or Node Threads pools. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2021-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## xtend@v4.0.2 - -> extend like a boss - -License: MIT -Homepage: -Author: Raynos -Contributors: - - Jake Verbaten - - Matt Esch - -> The MIT License (MIT) -> Copyright (c) 2012-2014 Raynos. -> -> 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. - ----------------------------------------- - -## yallist@v2.1.2 - -> Yet Another Linked List - -License: ISC -Repository: -Author: Isaac Z. Schlueter (http://blog.izs.me/) - -> The ISC License -> -> Copyright (c) Isaac Z. Schlueter and Contributors -> -> Permission to use, copy, modify, and/or distribute this software for any -> purpose with or without fee is hereby granted, provided that the above -> copyright notice and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----------------------------------------- - -## yaml@v1.10.2 - -> JavaScript parser and stringifier for YAML - -License: ISC -Homepage: -Author: Eemeli Aro - -> Copyright 2018 Eemeli Aro -> -> Permission to use, copy, modify, and/or distribute this software for any purpose -> with or without fee is hereby granted, provided that the above copyright notice -> and this permission notice appear in all copies. -> -> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -> REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -> FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -> INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -> OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -> TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -> THIS SOFTWARE. - ----------------------------------------- - -## yaml-unist-parser@v2.0.5 - -> A YAML parser that produces output compatible with unist - -License: MIT -Homepage: -Author: Ika (https://github.com/ikatyang) - -> MIT License -> -> Copyright (c) Ika (https://github.com/ikatyang) -> -> 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. - ----------------------------------------- - -## zeptomatch@v2.0.2 - -> An absurdly small glob matcher that packs a punch. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2023-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## zeptomatch-escape@v1.0.1 - -> A little utility for escaping globs before passing them to zeptomatch. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2024-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## zeptomatch-explode@v1.0.1 - -> A little utility for exploding a zeptomatch-flavored glob into its dynamic and static parts. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2024-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## zeptomatch-is-static@v1.0.1 - -> A little utility for checking if a glob is fully static. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2024-present Fabio Spampinato -> -> 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. - ----------------------------------------- - -## zeptomatch-unescape@v1.0.1 - -> A little utility for removing escape sequences from a glob. - -License: MIT - -> The MIT License (MIT) -> -> Copyright (c) 2024-present Fabio Spampinato -> -> 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. diff --git a/node_modules/prettier/bin/prettier.cjs b/node_modules/prettier/bin/prettier.cjs deleted file mode 100755 index 642c99d..0000000 --- a/node_modules/prettier/bin/prettier.cjs +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env node -"use strict"; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __commonJS = function(cb, mod) { - return function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; - }; -}; - -// node_modules/semver-compare/index.js -var require_semver_compare = __commonJS({ - "node_modules/semver-compare/index.js": function(exports2, module2) { - module2.exports = function cmp(a, b) { - var pa = a.split("."); - var pb = b.split("."); - for (var i = 0; i < 3; i++) { - var na = Number(pa[i]); - var nb = Number(pb[i]); - if (na > nb) return 1; - if (nb > na) return -1; - if (!isNaN(na) && isNaN(nb)) return 1; - if (isNaN(na) && !isNaN(nb)) return -1; - } - return 0; - }; - } -}); - -// node_modules/please-upgrade-node/index.js -var require_please_upgrade_node = __commonJS({ - "node_modules/please-upgrade-node/index.js": function(exports2, module2) { - var semverCompare = require_semver_compare(); - module2.exports = function pleaseUpgradeNode2(pkg, opts) { - var opts = opts || {}; - var requiredVersion = pkg.engines.node.replace(">=", ""); - var currentVersion = process.version.replace("v", ""); - if (semverCompare(currentVersion, requiredVersion) === -1) { - if (opts.message) { - console.error(opts.message(requiredVersion)); - } else { - console.error( - pkg.name + " requires at least version " + requiredVersion + " of Node, please upgrade" - ); - } - if (opts.hasOwnProperty("exitCode")) { - process.exit(opts.exitCode); - } else { - process.exit(1); - } - } - }; - } -}); - -// bin/prettier.cjs -var nodeModule = require("module"); -if (typeof nodeModule.enableCompileCache === "function") { - nodeModule.enableCompileCache(); -} -var pleaseUpgradeNode = require_please_upgrade_node(); -var packageJson = require("../package.json"); -pleaseUpgradeNode(packageJson); -var dynamicImport = new Function("module", "return import(module)"); -var promise; -var index = process.argv.indexOf("--experimental-cli"); -if (process.env.PRETTIER_EXPERIMENTAL_CLI || index !== -1) { - if (index !== -1) { - process.argv.splice(index, 1); - } - promise = dynamicImport("../internal/experimental-cli.mjs").then( - function(cli) { - return cli.__promise; - } - ); -} else { - promise = dynamicImport("../internal/legacy-cli.mjs").then(function runCli(cli) { - return cli.run(); - }); -} -module.exports.__promise = promise; diff --git a/node_modules/process-nextick-args/index.js b/node_modules/process-nextick-args/index.js deleted file mode 100644 index 3eecf11..0000000 --- a/node_modules/process-nextick-args/index.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -if (typeof process === 'undefined' || - !process.version || - process.version.indexOf('v0.') === 0 || - process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { - module.exports = { nextTick: nextTick }; -} else { - module.exports = process -} - -function nextTick(fn, arg1, arg2, arg3) { - if (typeof fn !== 'function') { - throw new TypeError('"callback" argument must be a function'); - } - var len = arguments.length; - var args, i; - switch (len) { - case 0: - case 1: - return process.nextTick(fn); - case 2: - return process.nextTick(function afterTickOne() { - fn.call(null, arg1); - }); - case 3: - return process.nextTick(function afterTickTwo() { - fn.call(null, arg1, arg2); - }); - case 4: - return process.nextTick(function afterTickThree() { - fn.call(null, arg1, arg2, arg3); - }); - default: - args = new Array(len - 1); - i = 0; - while (i < args.length) { - args[i++] = arguments[i]; - } - return process.nextTick(function afterTick() { - fn.apply(null, args); - }); - } -} - diff --git a/node_modules/process-nextick-args/license.md b/node_modules/process-nextick-args/license.md deleted file mode 100644 index c67e353..0000000 --- a/node_modules/process-nextick-args/license.md +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015 Calvin Metcalf - -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.** diff --git a/node_modules/process-nextick-args/package.json b/node_modules/process-nextick-args/package.json deleted file mode 100644 index 6070b72..0000000 --- a/node_modules/process-nextick-args/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "process-nextick-args", - "version": "2.0.1", - "description": "process.nextTick but always with args", - "main": "index.js", - "files": [ - "index.js" - ], - "scripts": { - "test": "node test.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/calvinmetcalf/process-nextick-args.git" - }, - "author": "", - "license": "MIT", - "bugs": { - "url": "https://github.com/calvinmetcalf/process-nextick-args/issues" - }, - "homepage": "https://github.com/calvinmetcalf/process-nextick-args", - "devDependencies": { - "tap": "~0.2.6" - } -} diff --git a/node_modules/process-nextick-args/readme.md b/node_modules/process-nextick-args/readme.md deleted file mode 100644 index ecb432c..0000000 --- a/node_modules/process-nextick-args/readme.md +++ /dev/null @@ -1,18 +0,0 @@ -process-nextick-args -===== - -[![Build Status](https://travis-ci.org/calvinmetcalf/process-nextick-args.svg?branch=master)](https://travis-ci.org/calvinmetcalf/process-nextick-args) - -```bash -npm install --save process-nextick-args -``` - -Always be able to pass arguments to process.nextTick, no matter the platform - -```js -var pna = require('process-nextick-args'); - -pna.nextTick(function (a, b, c) { - console.log(a, b, c); -}, 'step', 3, 'profit'); -``` diff --git a/node_modules/progress/CHANGELOG.md b/node_modules/progress/CHANGELOG.md deleted file mode 100644 index d9be0aa..0000000 --- a/node_modules/progress/CHANGELOG.md +++ /dev/null @@ -1,115 +0,0 @@ - -2.0.0 / 2017-04-04 -================== - - * Fix: check before using stream.clearLine to prevent crash in Docker - * Fix: fixed output multiline on windows cmd - * Fix: Bug with array length when window is too small - * Fix: Don't clear whole line every time; instead, clear everything after end of line - * Fix: Use `this.stream` instead of `console.log` when terminating a progress bar to ensure that, if a writable stream is provided, it uses that rather than process.stdout - * Fix: Bug causing potentially stale tokens on render - * Feature: configurable cursor - * Feature: feature to interrupt the bar and display a message - * Feature: Add rate reporting to progress bar - * Improvement: Add head option to specify head character - * Improvement: Rename tickTokens to tokens - * Improvement: Change default throttle time to 16ms - * Improvement: Rename renderDelay to renderThrottle - * Improvement: Add delay between render updates - * Docs: Add example and documentation for custom token usage - * Docs: Add head option to readme - * Docs: Updated README example for public use - * Docs: Add renderThrottle option to code documentation - -1.1.7 / 2014-06-30 -================== - - * fixed a bug that occurs when a progress bar attempts to draw itself - on a console with very few columns - -1.1.6 / 2014-06-16 -================== - - * now prevents progress bar from exceeding TTY width by limiting its width to - the with of the TTY - -1.1.5 / 2014-03-25 -================== - - * updated documentation and various other repo maintenance - * updated makefile to run examples with `make` - * removed dependency on readline module - -1.1.4 / 2014-03-14 -================== - - * now supports streams, for example output progress bar to stderr, while piping - stdout - * increases performance and flicker by remembering the last drawn progress bar - -1.1.3 / 2013-12-31 -================== - - * fixes a bug where bar would bug when initializing - * allows to pass updated tokens when ticking or updating the bar - * fixes a bug where the bar would throw if skipping to far - -1.1.2 / 2013-10-17 -================== - - * lets you pass an `fmt` and a `total` instead of an options object - -1.1.0 / 2013-09-18 -================== - - * eta and elapsed tokens default to 0.0 instead of ?.? - * better JSDocs - * added back and forth example - * added method to update the progress bar to a specific percentage - * added an option to hide the bar on completion - -1.0.1 / 2013-08-07 -================== - - * on os x readline now works, reverting the terminal hack - -1.0.0 / 2013-06-18 -================== - - * remove .version - * merge pull request #15 from davglass/readline-osx - * on OSX revert back to terminal hack to avoid a readline bug - -0.1.0 / 2012-09-19 -================== - - * fixed logic bug that caused bar to jump one extra space at the end [davglass] - * working with readline impl, even on Windows [davglass] - * using readline instead of the \r hack [davglass] - -0.0.5 / 2012-08-07 -================== - - * add ability to tick by zero chunks - tick(0) - * fix ETA. Closes #4 [lwille] - -0.0.4 / 2011-11-14 -================== - - * allow more recent versions of node - -0.0.3 / 2011-04-20 -================== - - * changed; erase the line when complete - -0.0.2 / 2011-04-20 -================== - - * added custom tokens support - * fixed; clear line before writing - -0.0.1 / 2010-01-03 -================== - - * initial release diff --git a/node_modules/progress/LICENSE b/node_modules/progress/LICENSE deleted file mode 100644 index 4608b39..0000000 --- a/node_modules/progress/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2017 TJ Holowaychuk - -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. diff --git a/node_modules/progress/Makefile b/node_modules/progress/Makefile deleted file mode 100644 index f933be1..0000000 --- a/node_modules/progress/Makefile +++ /dev/null @@ -1,8 +0,0 @@ - -EXAMPLES = $(foreach EXAMPLE, $(wildcard examples/*.js), $(EXAMPLE)) - -.PHONY: test -test: $(EXAMPLES) - -.PHONY: $(EXAMPLES) -$(EXAMPLES): ; node $@ && echo diff --git a/node_modules/progress/Readme.md b/node_modules/progress/Readme.md deleted file mode 100644 index 6d4271a..0000000 --- a/node_modules/progress/Readme.md +++ /dev/null @@ -1,146 +0,0 @@ -Flexible ascii progress bar. - -## Installation - -```bash -$ npm install progress -``` - -## Usage - -First we create a `ProgressBar`, giving it a format string -as well as the `total`, telling the progress bar when it will -be considered complete. After that all we need to do is `tick()` appropriately. - -```javascript -var ProgressBar = require('progress'); - -var bar = new ProgressBar(':bar', { total: 10 }); -var timer = setInterval(function () { - bar.tick(); - if (bar.complete) { - console.log('\ncomplete\n'); - clearInterval(timer); - } -}, 100); -``` - -### Options - -These are keys in the options object you can pass to the progress bar along with -`total` as seen in the example above. - -- `curr` current completed index -- `total` total number of ticks to complete -- `width` the displayed width of the progress bar defaulting to total -- `stream` the output stream defaulting to stderr -- `head` head character defaulting to complete character -- `complete` completion character defaulting to "=" -- `incomplete` incomplete character defaulting to "-" -- `renderThrottle` minimum time between updates in milliseconds defaulting to 16 -- `clear` option to clear the bar on completion defaulting to false -- `callback` optional function to call when the progress bar completes - -### Tokens - -These are tokens you can use in the format of your progress bar. - -- `:bar` the progress bar itself -- `:current` current tick number -- `:total` total ticks -- `:elapsed` time elapsed in seconds -- `:percent` completion percentage -- `:eta` estimated completion time in seconds -- `:rate` rate of ticks per second - -### Custom Tokens - -You can define custom tokens by adding a `{'name': value}` object parameter to your method (`tick()`, `update()`, etc.) calls. - -```javascript -var bar = new ProgressBar(':current: :token1 :token2', { total: 3 }) -bar.tick({ - 'token1': "Hello", - 'token2': "World!\n" -}) -bar.tick(2, { - 'token1': "Goodbye", - 'token2': "World!" -}) -``` -The above example would result in the output below. - -``` -1: Hello World! -3: Goodbye World! -``` - -## Examples - -### Download - -In our download example each tick has a variable influence, so we pass the chunk -length which adjusts the progress bar appropriately relative to the total -length. - -```javascript -var ProgressBar = require('progress'); -var https = require('https'); - -var req = https.request({ - host: 'download.github.com', - port: 443, - path: '/visionmedia-node-jscoverage-0d4608a.zip' -}); - -req.on('response', function(res){ - var len = parseInt(res.headers['content-length'], 10); - - console.log(); - var bar = new ProgressBar(' downloading [:bar] :rate/bps :percent :etas', { - complete: '=', - incomplete: ' ', - width: 20, - total: len - }); - - res.on('data', function (chunk) { - bar.tick(chunk.length); - }); - - res.on('end', function () { - console.log('\n'); - }); -}); - -req.end(); -``` - -The above example result in a progress bar like the one below. - -``` -downloading [===== ] 39/bps 29% 3.7s -``` - -### Interrupt - -To display a message during progress bar execution, use `interrupt()` -```javascript -var ProgressBar = require('progress'); - -var bar = new ProgressBar(':bar :current/:total', { total: 10 }); -var timer = setInterval(function () { - bar.tick(); - if (bar.complete) { - clearInterval(timer); - } else if (bar.curr === 5) { - bar.interrupt('this message appears above the progress bar\ncurrent progress is ' + bar.curr + '/' + bar.total); - } -}, 1000); -``` - -You can see more examples in the `examples` folder. - -## License - -MIT diff --git a/node_modules/progress/index.js b/node_modules/progress/index.js deleted file mode 100644 index 4449dd3..0000000 --- a/node_modules/progress/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/node-progress'); diff --git a/node_modules/progress/lib/node-progress.js b/node_modules/progress/lib/node-progress.js deleted file mode 100644 index 8eb0740..0000000 --- a/node_modules/progress/lib/node-progress.js +++ /dev/null @@ -1,236 +0,0 @@ -/*! - * node-progress - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Expose `ProgressBar`. - */ - -exports = module.exports = ProgressBar; - -/** - * Initialize a `ProgressBar` with the given `fmt` string and `options` or - * `total`. - * - * Options: - * - * - `curr` current completed index - * - `total` total number of ticks to complete - * - `width` the displayed width of the progress bar defaulting to total - * - `stream` the output stream defaulting to stderr - * - `head` head character defaulting to complete character - * - `complete` completion character defaulting to "=" - * - `incomplete` incomplete character defaulting to "-" - * - `renderThrottle` minimum time between updates in milliseconds defaulting to 16 - * - `callback` optional function to call when the progress bar completes - * - `clear` will clear the progress bar upon termination - * - * Tokens: - * - * - `:bar` the progress bar itself - * - `:current` current tick number - * - `:total` total ticks - * - `:elapsed` time elapsed in seconds - * - `:percent` completion percentage - * - `:eta` eta in seconds - * - `:rate` rate of ticks per second - * - * @param {string} fmt - * @param {object|number} options or total - * @api public - */ - -function ProgressBar(fmt, options) { - this.stream = options.stream || process.stderr; - - if (typeof(options) == 'number') { - var total = options; - options = {}; - options.total = total; - } else { - options = options || {}; - if ('string' != typeof fmt) throw new Error('format required'); - if ('number' != typeof options.total) throw new Error('total required'); - } - - this.fmt = fmt; - this.curr = options.curr || 0; - this.total = options.total; - this.width = options.width || this.total; - this.clear = options.clear - this.chars = { - complete : options.complete || '=', - incomplete : options.incomplete || '-', - head : options.head || (options.complete || '=') - }; - this.renderThrottle = options.renderThrottle !== 0 ? (options.renderThrottle || 16) : 0; - this.lastRender = -Infinity; - this.callback = options.callback || function () {}; - this.tokens = {}; - this.lastDraw = ''; -} - -/** - * "tick" the progress bar with optional `len` and optional `tokens`. - * - * @param {number|object} len or tokens - * @param {object} tokens - * @api public - */ - -ProgressBar.prototype.tick = function(len, tokens){ - if (len !== 0) - len = len || 1; - - // swap tokens - if ('object' == typeof len) tokens = len, len = 1; - if (tokens) this.tokens = tokens; - - // start time for eta - if (0 == this.curr) this.start = new Date; - - this.curr += len - - // try to render - this.render(); - - // progress complete - if (this.curr >= this.total) { - this.render(undefined, true); - this.complete = true; - this.terminate(); - this.callback(this); - return; - } -}; - -/** - * Method to render the progress bar with optional `tokens` to place in the - * progress bar's `fmt` field. - * - * @param {object} tokens - * @api public - */ - -ProgressBar.prototype.render = function (tokens, force) { - force = force !== undefined ? force : false; - if (tokens) this.tokens = tokens; - - if (!this.stream.isTTY) return; - - var now = Date.now(); - var delta = now - this.lastRender; - if (!force && (delta < this.renderThrottle)) { - return; - } else { - this.lastRender = now; - } - - var ratio = this.curr / this.total; - ratio = Math.min(Math.max(ratio, 0), 1); - - var percent = Math.floor(ratio * 100); - var incomplete, complete, completeLength; - var elapsed = new Date - this.start; - var eta = (percent == 100) ? 0 : elapsed * (this.total / this.curr - 1); - var rate = this.curr / (elapsed / 1000); - - /* populate the bar template with percentages and timestamps */ - var str = this.fmt - .replace(':current', this.curr) - .replace(':total', this.total) - .replace(':elapsed', isNaN(elapsed) ? '0.0' : (elapsed / 1000).toFixed(1)) - .replace(':eta', (isNaN(eta) || !isFinite(eta)) ? '0.0' : (eta / 1000) - .toFixed(1)) - .replace(':percent', percent.toFixed(0) + '%') - .replace(':rate', Math.round(rate)); - - /* compute the available space (non-zero) for the bar */ - var availableSpace = Math.max(0, this.stream.columns - str.replace(':bar', '').length); - if(availableSpace && process.platform === 'win32'){ - availableSpace = availableSpace - 1; - } - - var width = Math.min(this.width, availableSpace); - - /* TODO: the following assumes the user has one ':bar' token */ - completeLength = Math.round(width * ratio); - complete = Array(Math.max(0, completeLength + 1)).join(this.chars.complete); - incomplete = Array(Math.max(0, width - completeLength + 1)).join(this.chars.incomplete); - - /* add head to the complete string */ - if(completeLength > 0) - complete = complete.slice(0, -1) + this.chars.head; - - /* fill in the actual progress bar */ - str = str.replace(':bar', complete + incomplete); - - /* replace the extra tokens */ - if (this.tokens) for (var key in this.tokens) str = str.replace(':' + key, this.tokens[key]); - - if (this.lastDraw !== str) { - this.stream.cursorTo(0); - this.stream.write(str); - this.stream.clearLine(1); - this.lastDraw = str; - } -}; - -/** - * "update" the progress bar to represent an exact percentage. - * The ratio (between 0 and 1) specified will be multiplied by `total` and - * floored, representing the closest available "tick." For example, if a - * progress bar has a length of 3 and `update(0.5)` is called, the progress - * will be set to 1. - * - * A ratio of 0.5 will attempt to set the progress to halfway. - * - * @param {number} ratio The ratio (between 0 and 1 inclusive) to set the - * overall completion to. - * @api public - */ - -ProgressBar.prototype.update = function (ratio, tokens) { - var goal = Math.floor(ratio * this.total); - var delta = goal - this.curr; - - this.tick(delta, tokens); -}; - -/** - * "interrupt" the progress bar and write a message above it. - * @param {string} message The message to write. - * @api public - */ - -ProgressBar.prototype.interrupt = function (message) { - // clear the current line - this.stream.clearLine(); - // move the cursor to the start of the line - this.stream.cursorTo(0); - // write the message text - this.stream.write(message); - // terminate the line after writing the message - this.stream.write('\n'); - // re-display the progress bar with its lastDraw - this.stream.write(this.lastDraw); -}; - -/** - * Terminates a progress bar. - * - * @api public - */ - -ProgressBar.prototype.terminate = function () { - if (this.clear) { - if (this.stream.clearLine) { - this.stream.clearLine(); - this.stream.cursorTo(0); - } - } else { - this.stream.write('\n'); - } -}; diff --git a/node_modules/progress/package.json b/node_modules/progress/package.json deleted file mode 100644 index bb81fa0..0000000 --- a/node_modules/progress/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "progress", - "version": "2.0.3", - "description": "Flexible ascii progress bar", - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/node-progress" - }, - "keywords": [ - "cli", - "progress" - ], - "author": "TJ Holowaychuk ", - "contributors": [ - "Christoffer Hallas ", - "Jordan Scales ", - "Andrew Rhyne ", - "Marco Brack " - ], - "dependencies": {}, - "main": "./index.js", - "engines": { - "node": ">=0.4.0" - }, - "license": "MIT" -} diff --git a/node_modules/pseudomap/LICENSE b/node_modules/pseudomap/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/node_modules/pseudomap/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/pseudomap/README.md b/node_modules/pseudomap/README.md deleted file mode 100644 index 778bf01..0000000 --- a/node_modules/pseudomap/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# pseudomap - -A thing that is a lot like ES6 `Map`, but without iterators, for use -in environments where `for..of` syntax and `Map` are not available. - -If you need iterators, or just in general a more faithful polyfill to -ES6 Maps, check out [es6-map](http://npm.im/es6-map). - -If you are in an environment where `Map` is supported, then that will -be returned instead, unless `process.env.TEST_PSEUDOMAP` is set. - -You can use any value as keys, and any value as data. Setting again -with the identical key will overwrite the previous value. - -Internally, data is stored on an `Object.create(null)` style object. -The key is coerced to a string to generate the key on the internal -data-bag object. The original key used is stored along with the data. - -In the event of a stringified-key collision, a new key is generated by -appending an increasing number to the stringified-key until finding -either the intended key or an empty spot. - -Note that because object traversal order of plain objects is not -guaranteed to be identical to insertion order, the insertion order -guarantee of `Map.prototype.forEach` is not guaranteed in this -implementation. However, in all versions of Node.js and V8 where this -module works, `forEach` does traverse data in insertion order. - -## API - -Most of the [Map -API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), -with the following exceptions: - -1. A `Map` object is not an iterator. -2. `values`, `keys`, and `entries` methods are not implemented, - because they return iterators. -3. The argument to the constructor can be an Array of `[key, value]` - pairs, or a `Map` or `PseudoMap` object. But, since iterators - aren't used, passing any plain-old iterator won't initialize the - map properly. - -## USAGE - -Use just like a regular ES6 Map. - -```javascript -var PseudoMap = require('pseudomap') - -// optionally provide a pseudomap, or an array of [key,value] pairs -// as the argument to initialize the map with -var myMap = new PseudoMap() - -myMap.set(1, 'number 1') -myMap.set('1', 'string 1') -var akey = {} -var bkey = {} -myMap.set(akey, { some: 'data' }) -myMap.set(bkey, { some: 'other data' }) -``` diff --git a/node_modules/pseudomap/map.js b/node_modules/pseudomap/map.js deleted file mode 100644 index 7db1599..0000000 --- a/node_modules/pseudomap/map.js +++ /dev/null @@ -1,9 +0,0 @@ -if (process.env.npm_package_name === 'pseudomap' && - process.env.npm_lifecycle_script === 'test') - process.env.TEST_PSEUDOMAP = 'true' - -if (typeof Map === 'function' && !process.env.TEST_PSEUDOMAP) { - module.exports = Map -} else { - module.exports = require('./pseudomap') -} diff --git a/node_modules/pseudomap/package.json b/node_modules/pseudomap/package.json deleted file mode 100644 index 4b02ab7..0000000 --- a/node_modules/pseudomap/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "pseudomap", - "version": "1.0.2", - "description": "A thing that is a lot like ES6 `Map`, but without iterators, for use in environments where `for..of` syntax and `Map` are not available.", - "main": "map.js", - "directories": { - "test": "test" - }, - "devDependencies": { - "tap": "^2.3.1" - }, - "scripts": { - "test": "tap test/*.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/pseudomap.git" - }, - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC", - "bugs": { - "url": "https://github.com/isaacs/pseudomap/issues" - }, - "homepage": "https://github.com/isaacs/pseudomap#readme" -} diff --git a/node_modules/pseudomap/pseudomap.js b/node_modules/pseudomap/pseudomap.js deleted file mode 100644 index 25a21d8..0000000 --- a/node_modules/pseudomap/pseudomap.js +++ /dev/null @@ -1,113 +0,0 @@ -var hasOwnProperty = Object.prototype.hasOwnProperty - -module.exports = PseudoMap - -function PseudoMap (set) { - if (!(this instanceof PseudoMap)) // whyyyyyyy - throw new TypeError("Constructor PseudoMap requires 'new'") - - this.clear() - - if (set) { - if ((set instanceof PseudoMap) || - (typeof Map === 'function' && set instanceof Map)) - set.forEach(function (value, key) { - this.set(key, value) - }, this) - else if (Array.isArray(set)) - set.forEach(function (kv) { - this.set(kv[0], kv[1]) - }, this) - else - throw new TypeError('invalid argument') - } -} - -PseudoMap.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - Object.keys(this._data).forEach(function (k) { - if (k !== 'size') - fn.call(thisp, this._data[k].value, this._data[k].key) - }, this) -} - -PseudoMap.prototype.has = function (k) { - return !!find(this._data, k) -} - -PseudoMap.prototype.get = function (k) { - var res = find(this._data, k) - return res && res.value -} - -PseudoMap.prototype.set = function (k, v) { - set(this._data, k, v) -} - -PseudoMap.prototype.delete = function (k) { - var res = find(this._data, k) - if (res) { - delete this._data[res._index] - this._data.size-- - } -} - -PseudoMap.prototype.clear = function () { - var data = Object.create(null) - data.size = 0 - - Object.defineProperty(this, '_data', { - value: data, - enumerable: false, - configurable: true, - writable: false - }) -} - -Object.defineProperty(PseudoMap.prototype, 'size', { - get: function () { - return this._data.size - }, - set: function (n) {}, - enumerable: true, - configurable: true -}) - -PseudoMap.prototype.values = -PseudoMap.prototype.keys = -PseudoMap.prototype.entries = function () { - throw new Error('iterators are not implemented in this version') -} - -// Either identical, or both NaN -function same (a, b) { - return a === b || a !== a && b !== b -} - -function Entry (k, v, i) { - this.key = k - this.value = v - this._index = i -} - -function find (data, k) { - for (var i = 0, s = '_' + k, key = s; - hasOwnProperty.call(data, key); - key = s + i++) { - if (same(data[key].key, k)) - return data[key] - } -} - -function set (data, k, v) { - for (var i = 0, s = '_' + k, key = s; - hasOwnProperty.call(data, key); - key = s + i++) { - if (same(data[key].key, k)) { - data[key].value = v - return - } - } - data.size++ - data[key] = new Entry(k, v, key) -} diff --git a/node_modules/pseudomap/test/basic.js b/node_modules/pseudomap/test/basic.js deleted file mode 100644 index 4378e45..0000000 --- a/node_modules/pseudomap/test/basic.js +++ /dev/null @@ -1,86 +0,0 @@ -var t = require('tap') - -process.env.TEST_PSEUDOMAP = 'true' - -var PM = require('../') -runTests(PM) - -// if possible, verify that Map also behaves the same way -if (typeof Map === 'function') - runTests(Map) - - -function runTests (Map) { - t.throws(Map) - - var m = new Map() - - t.equal(m.size, 0) - - m.set(1, '1 string') - t.equal(m.get(1), '1 string') - t.equal(m.size, 1) - m.size = 1000 - t.equal(m.size, 1) - m.size = 0 - t.equal(m.size, 1) - - m = new Map([[1, 'number 1'], ['1', 'string 1']]) - t.equal(m.get(1), 'number 1') - t.equal(m.get('1'), 'string 1') - t.equal(m.size, 2) - - m = new Map(m) - t.equal(m.get(1), 'number 1') - t.equal(m.get('1'), 'string 1') - t.equal(m.size, 2) - - var akey = {} - var bkey = {} - m.set(akey, { some: 'data' }) - m.set(bkey, { some: 'other data' }) - t.same(m.get(akey), { some: 'data' }) - t.same(m.get(bkey), { some: 'other data' }) - t.equal(m.size, 4) - - var x = /x/ - var y = /x/ - m.set(x, 'x regex') - m.set(y, 'y regex') - t.equal(m.get(x), 'x regex') - m.set(x, 'x again') - t.equal(m.get(x), 'x again') - t.equal(m.size, 6) - - m.set(NaN, 'not a number') - t.equal(m.get(NaN), 'not a number') - m.set(NaN, 'it is a ' + typeof NaN) - t.equal(m.get(NaN), 'it is a number') - m.set('NaN', 'stringie nan') - t.equal(m.get(NaN), 'it is a number') - t.equal(m.get('NaN'), 'stringie nan') - t.equal(m.size, 8) - - m.delete(NaN) - t.equal(m.get(NaN), undefined) - t.equal(m.size, 7) - - var expect = [ - { value: 'number 1', key: 1 }, - { value: 'string 1', key: '1' }, - { value: { some: 'data' }, key: {} }, - { value: { some: 'other data' }, key: {} }, - { value: 'x again', key: /x/ }, - { value: 'y regex', key: /x/ }, - { value: 'stringie nan', key: 'NaN' } - ] - var actual = [] - - m.forEach(function (value, key) { - actual.push({ value: value, key: key }) - }) - t.same(actual, expect) - - m.clear() - t.equal(m.size, 0) -} diff --git a/node_modules/readable-stream/.travis.yml b/node_modules/readable-stream/.travis.yml deleted file mode 100644 index f62cdac..0000000 --- a/node_modules/readable-stream/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -sudo: false -language: node_js -before_install: - - (test $NPM_LEGACY && npm install -g npm@2 && npm install -g npm@3) || true -notifications: - email: false -matrix: - fast_finish: true - include: - - node_js: '0.8' - env: NPM_LEGACY=true - - node_js: '0.10' - env: NPM_LEGACY=true - - node_js: '0.11' - env: NPM_LEGACY=true - - node_js: '0.12' - env: NPM_LEGACY=true - - node_js: 1 - env: NPM_LEGACY=true - - node_js: 2 - env: NPM_LEGACY=true - - node_js: 3 - env: NPM_LEGACY=true - - node_js: 4 - - node_js: 5 - - node_js: 6 - - node_js: 7 - - node_js: 8 - - node_js: 9 -script: "npm run test" -env: - global: - - secure: rE2Vvo7vnjabYNULNyLFxOyt98BoJexDqsiOnfiD6kLYYsiQGfr/sbZkPMOFm9qfQG7pjqx+zZWZjGSswhTt+626C0t/njXqug7Yps4c3dFblzGfreQHp7wNX5TFsvrxd6dAowVasMp61sJcRnB2w8cUzoe3RAYUDHyiHktwqMc= - - secure: g9YINaKAdMatsJ28G9jCGbSaguXCyxSTy+pBO6Ch0Cf57ZLOTka3HqDj8p3nV28LUIHZ3ut5WO43CeYKwt4AUtLpBS3a0dndHdY6D83uY6b2qh5hXlrcbeQTq2cvw2y95F7hm4D1kwrgZ7ViqaKggRcEupAL69YbJnxeUDKWEdI= diff --git a/node_modules/readable-stream/CONTRIBUTING.md b/node_modules/readable-stream/CONTRIBUTING.md deleted file mode 100644 index f478d58..0000000 --- a/node_modules/readable-stream/CONTRIBUTING.md +++ /dev/null @@ -1,38 +0,0 @@ -# Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -* (a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -* (b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -* (c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -* (d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. - -## Moderation Policy - -The [Node.js Moderation Policy] applies to this WG. - -## Code of Conduct - -The [Node.js Code of Conduct][] applies to this WG. - -[Node.js Code of Conduct]: -https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md -[Node.js Moderation Policy]: -https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md diff --git a/node_modules/readable-stream/GOVERNANCE.md b/node_modules/readable-stream/GOVERNANCE.md deleted file mode 100644 index 16ffb93..0000000 --- a/node_modules/readable-stream/GOVERNANCE.md +++ /dev/null @@ -1,136 +0,0 @@ -### Streams Working Group - -The Node.js Streams is jointly governed by a Working Group -(WG) -that is responsible for high-level guidance of the project. - -The WG has final authority over this project including: - -* Technical direction -* Project governance and process (including this policy) -* Contribution policy -* GitHub repository hosting -* Conduct guidelines -* Maintaining the list of additional Collaborators - -For the current list of WG members, see the project -[README.md](./README.md#current-project-team-members). - -### Collaborators - -The readable-stream GitHub repository is -maintained by the WG and additional Collaborators who are added by the -WG on an ongoing basis. - -Individuals making significant and valuable contributions are made -Collaborators and given commit-access to the project. These -individuals are identified by the WG and their addition as -Collaborators is discussed during the WG meeting. - -_Note:_ If you make a significant contribution and are not considered -for commit-access log an issue or contact a WG member directly and it -will be brought up in the next WG meeting. - -Modifications of the contents of the readable-stream repository are -made on -a collaborative basis. Anybody with a GitHub account may propose a -modification via pull request and it will be considered by the project -Collaborators. All pull requests must be reviewed and accepted by a -Collaborator with sufficient expertise who is able to take full -responsibility for the change. In the case of pull requests proposed -by an existing Collaborator, an additional Collaborator is required -for sign-off. Consensus should be sought if additional Collaborators -participate and there is disagreement around a particular -modification. See _Consensus Seeking Process_ below for further detail -on the consensus model used for governance. - -Collaborators may opt to elevate significant or controversial -modifications, or modifications that have not found consensus to the -WG for discussion by assigning the ***WG-agenda*** tag to a pull -request or issue. The WG should serve as the final arbiter where -required. - -For the current list of Collaborators, see the project -[README.md](./README.md#members). - -### WG Membership - -WG seats are not time-limited. There is no fixed size of the WG. -However, the expected target is between 6 and 12, to ensure adequate -coverage of important areas of expertise, balanced with the ability to -make decisions efficiently. - -There is no specific set of requirements or qualifications for WG -membership beyond these rules. - -The WG may add additional members to the WG by unanimous consensus. - -A WG member may be removed from the WG by voluntary resignation, or by -unanimous consensus of all other WG members. - -Changes to WG membership should be posted in the agenda, and may be -suggested as any other agenda item (see "WG Meetings" below). - -If an addition or removal is proposed during a meeting, and the full -WG is not in attendance to participate, then the addition or removal -is added to the agenda for the subsequent meeting. This is to ensure -that all members are given the opportunity to participate in all -membership decisions. If a WG member is unable to attend a meeting -where a planned membership decision is being made, then their consent -is assumed. - -No more than 1/3 of the WG members may be affiliated with the same -employer. If removal or resignation of a WG member, or a change of -employment by a WG member, creates a situation where more than 1/3 of -the WG membership shares an employer, then the situation must be -immediately remedied by the resignation or removal of one or more WG -members affiliated with the over-represented employer(s). - -### WG Meetings - -The WG meets occasionally on a Google Hangout On Air. A designated moderator -approved by the WG runs the meeting. Each meeting should be -published to YouTube. - -Items are added to the WG agenda that are considered contentious or -are modifications of governance, contribution policy, WG membership, -or release process. - -The intention of the agenda is not to approve or review all patches; -that should happen continuously on GitHub and be handled by the larger -group of Collaborators. - -Any community member or contributor can ask that something be added to -the next meeting's agenda by logging a GitHub Issue. Any Collaborator, -WG member or the moderator can add the item to the agenda by adding -the ***WG-agenda*** tag to the issue. - -Prior to each WG meeting the moderator will share the Agenda with -members of the WG. WG members can add any items they like to the -agenda at the beginning of each meeting. The moderator and the WG -cannot veto or remove items. - -The WG may invite persons or representatives from certain projects to -participate in a non-voting capacity. - -The moderator is responsible for summarizing the discussion of each -agenda item and sends it as a pull request after the meeting. - -### Consensus Seeking Process - -The WG follows a -[Consensus -Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) -decision-making model. - -When an agenda item has appeared to reach a consensus the moderator -will ask "Does anyone object?" as a final call for dissent from the -consensus. - -If an agenda item cannot reach a consensus a WG member can call for -either a closing vote or a vote to table the issue to the next -meeting. The call for a vote must be seconded by a majority of the WG -or else the discussion will continue. Simple majority wins. - -Note that changes to WG membership require a majority consensus. See -"WG Membership" above. diff --git a/node_modules/readable-stream/LICENSE b/node_modules/readable-stream/LICENSE deleted file mode 100644 index 2873b3b..0000000 --- a/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -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. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -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. -""" diff --git a/node_modules/readable-stream/README.md b/node_modules/readable-stream/README.md deleted file mode 100644 index f1c5a93..0000000 --- a/node_modules/readable-stream/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# readable-stream - -***Node-core v8.17.0 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream) - - -[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) -[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) - - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream) - -```bash -npm install --save readable-stream -``` - -***Node-core streams for userland*** - -This package is a mirror of the Streams2 and Streams3 implementations in -Node-core. - -Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.17.0/docs/api/stream.html). - -If you want to guarantee a stable streams base, regardless of what version of -Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). - -As of version 2.0.0 **readable-stream** uses semantic versioning. - -# Streams Working Group - -`readable-stream` is maintained by the Streams Working Group, which -oversees the development and maintenance of the Streams API within -Node.js. The responsibilities of the Streams Working Group include: - -* Addressing stream issues on the Node.js issue tracker. -* Authoring and editing stream documentation within the Node.js project. -* Reviewing changes to stream subclasses within the Node.js project. -* Redirecting changes to streams from the Node.js project to this - project. -* Assisting in the implementation of stream providers within Node.js. -* Recommending versions of `readable-stream` to be included in Node.js. -* Messaging about the future of streams to give the community advance - notice of changes. - - -## Team Members - -* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> - - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B -* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> - - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 -* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> - - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D -* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> -* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> -* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> -* **Matteo Collina** ([@mcollina](https://github.com/mcollina)) <matteo.collina@gmail.com> - - Release GPG key: 3ABC01543F22DD2239285CDD818674489FBC127E -* **Irina Shestak** ([@lrlna](https://github.com/lrlna)) <shestak.irina@gmail.com> diff --git a/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md b/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md deleted file mode 100644 index 83275f1..0000000 --- a/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +++ /dev/null @@ -1,60 +0,0 @@ -# streams WG Meeting 2015-01-30 - -## Links - -* **Google Hangouts Video**: http://www.youtube.com/watch?v=I9nDOSGfwZg -* **GitHub Issue**: https://github.com/iojs/readable-stream/issues/106 -* **Original Minutes Google Doc**: https://docs.google.com/document/d/17aTgLnjMXIrfjgNaTUnHQO7m3xgzHR2VXBTmi03Qii4/ - -## Agenda - -Extracted from https://github.com/iojs/readable-stream/labels/wg-agenda prior to meeting. - -* adopt a charter [#105](https://github.com/iojs/readable-stream/issues/105) -* release and versioning strategy [#101](https://github.com/iojs/readable-stream/issues/101) -* simpler stream creation [#102](https://github.com/iojs/readable-stream/issues/102) -* proposal: deprecate implicit flowing of streams [#99](https://github.com/iojs/readable-stream/issues/99) - -## Minutes - -### adopt a charter - -* group: +1's all around - -### What versioning scheme should be adopted? -* group: +1’s 3.0.0 -* domenic+group: pulling in patches from other sources where appropriate -* mikeal: version independently, suggesting versions for io.js -* mikeal+domenic: work with TC to notify in advance of changes -simpler stream creation - -### streamline creation of streams -* sam: streamline creation of streams -* domenic: nice simple solution posted - but, we lose the opportunity to change the model - may not be backwards incompatible (double check keys) - - **action item:** domenic will check - -### remove implicit flowing of streams on(‘data’) -* add isFlowing / isPaused -* mikeal: worrying that we’re documenting polyfill methods – confuses users -* domenic: more reflective API is probably good, with warning labels for users -* new section for mad scientists (reflective stream access) -* calvin: name the “third state” -* mikeal: maybe borrow the name from whatwg? -* domenic: we’re missing the “third state” -* consensus: kind of difficult to name the third state -* mikeal: figure out differences in states / compat -* mathias: always flow on data – eliminates third state - * explore what it breaks - -**action items:** -* ask isaac for ability to list packages by what public io.js APIs they use (esp. Stream) -* ask rod/build for infrastructure -* **chris**: explore the “flow on data” approach -* add isPaused/isFlowing -* add new docs section -* move isPaused to that section - - diff --git a/node_modules/readable-stream/duplex-browser.js b/node_modules/readable-stream/duplex-browser.js deleted file mode 100644 index f8b2db8..0000000 --- a/node_modules/readable-stream/duplex-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/_stream_duplex.js'); diff --git a/node_modules/readable-stream/duplex.js b/node_modules/readable-stream/duplex.js deleted file mode 100644 index 46924cb..0000000 --- a/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./readable').Duplex diff --git a/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index 57003c3..0000000 --- a/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. - -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - keys.push(key); - }return keys; -}; -/**/ - -module.exports = Duplex; - -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ - -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); - -util.inherits(Duplex, Readable); - -{ - // avoid scope creep, the keys array can then be collected - var keys = objectKeys(Writable.prototype); - for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; - } -} - -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - - Readable.call(this, options); - Writable.call(this, options); - - if (options && options.readable === false) this.readable = false; - - if (options && options.writable === false) this.writable = false; - - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; - - this.once('end', onend); -} - -Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._writableState.highWaterMark; - } -}); - -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) return; - - // no more data can be written. - // But allow more writes to happen in this tick. - pna.nextTick(onEndNT, this); -} - -function onEndNT(self) { - self.end(); -} - -Object.defineProperty(Duplex.prototype, 'destroyed', { - get: function () { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (this._readableState === undefined || this._writableState === undefined) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - this._writableState.destroyed = value; - } -}); - -Duplex.prototype._destroy = function (err, cb) { - this.push(null); - this.end(); - - pna.nextTick(cb, err); -}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 612edb4..0000000 --- a/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. - -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - -'use strict'; - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ - -util.inherits(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - - Transform.call(this, options); -} - -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 3af95cb..0000000 --- a/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,1019 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. - -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -module.exports = Readable; - -/**/ -var isArray = require('isarray'); -/**/ - -/**/ -var Duplex; -/**/ - -Readable.ReadableState = ReadableState; - -/**/ -var EE = require('events').EventEmitter; - -var EElistenerCount = function (emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -/**/ -var Stream = require('./internal/streams/stream'); -/**/ - -/**/ - -var Buffer = require('safe-buffer').Buffer; -var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -/**/ - -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ - -/**/ -var debugUtil = require('util'); -var debug = void 0; -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function () {}; -} -/**/ - -var BufferList = require('./internal/streams/BufferList'); -var destroyImpl = require('./internal/streams/destroy'); -var StringDecoder; - -util.inherits(Readable, Stream); - -var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; - -function prependListener(emitter, event, fn) { - // Sadly this is not cacheable as some libraries bundle their own - // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); - - // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; -} - -function ReadableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); - - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - var isDuplex = stream instanceof Duplex; - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - var readableHwm = options.readableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; - - // cast to ints. - this.highWaterMark = Math.floor(this.highWaterMark); - - // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // a flag to be able to tell if the event 'readable'/'data' is emitted - // immediately, or on a later tick. We set this to true at first, because - // any actions that shouldn't happen until "later" should generally also - // not happen before the first read call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - - // has it been destroyed - this.destroyed = false; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -function Readable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - if (!(this instanceof Readable)) return new Readable(options); - - this._readableState = new ReadableState(options, this); - - // legacy - this.readable = true; - - if (options) { - if (typeof options.read === 'function') this._read = options.read; - - if (typeof options.destroy === 'function') this._destroy = options.destroy; - } - - Stream.call(this); -} - -Object.defineProperty(Readable.prototype, 'destroyed', { - get: function () { - if (this._readableState === undefined) { - return false; - } - return this._readableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._readableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - } -}); - -Readable.prototype.destroy = destroyImpl.destroy; -Readable.prototype._undestroy = destroyImpl.undestroy; -Readable.prototype._destroy = function (err, cb) { - this.push(null); - cb(err); -}; - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; - - if (!state.objectMode) { - if (typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; - } - skipChunkCheck = true; - } - } else { - skipChunkCheck = true; - } - - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function (chunk) { - return readableAddChunk(this, chunk, null, true, false); -}; - -function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - var state = stream._readableState; - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (addToFront) { - if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); - } else if (state.ended) { - stream.emit('error', new Error('stream.push() after EOF')); - } else { - state.reading = false; - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; - } - } - - return needMoreData(state); -} - -function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - - if (state.needReadable) emitReadable(stream); - } - maybeReadMore(stream, state); -} - -function chunkInvalid(state, chunk) { - var er; - if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); -} - -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; - -// backwards compatibility. -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; - return this; -}; - -// Don't raise the hwm > 8MB -var MAX_HWM = 0x800000; -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - return n; -} - -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } - // If we're asking for more than the current hwm, then raise the hwm. - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; - // Don't have enough - if (!state.ended) { - state.needReadable = true; - return 0; - } - return state.length; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - - if (n !== 0) state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); - - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (!state.reading) n = howMuchToRead(nOrig, state); - } - - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; - - if (ret === null) { - state.needReadable = true; - n = 0; - } else { - state.length -= n; - } - - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; - - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended) endReadable(this); - } - - if (ret !== null) this.emit('data', ret); - - return ret; -}; - -function onEofChunk(stream, state) { - if (state.ended) return; - if (state.decoder) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - - // emit 'readable' now to make sure it gets picked up. - emitReadable(stream); -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); - } -} - -function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - pna.nextTick(maybeReadMore_, stream, state); - } -} - -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break;else len = state.length; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function (n) { - this.emit('error', new Error('_read() is not implemented')); -}; - -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); - - dest.on('unpipe', onunpipe); - function onunpipe(readable, unpipeInfo) { - debug('onunpipe'); - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); - } - } - } - - function onend() { - debug('onend'); - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - - var cleanedUp = false; - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', unpipe); - src.removeListener('data', ondata); - - cleanedUp = true; - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } - - // If the user pushes more data while we're writing to dest then we'll end up - // in ondata again. However, we only want to increase awaitDrain once because - // dest will only emit one 'drain' event for the multiple writes. - // => Introduce a guard on increasing awaitDrain. - var increasedAwaitDrain = false; - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - increasedAwaitDrain = false; - var ret = dest.write(chunk); - if (false === ret && !increasedAwaitDrain) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', state.awaitDrain); - state.awaitDrain++; - increasedAwaitDrain = true; - } - src.pause(); - } - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); - } - - // Make sure our error handler is attached before userland ones. - prependListener(dest, 'error', onerror); - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function () { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - var unpipeInfo = { hasUnpiped: false }; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - - if (!dest) dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this, unpipeInfo); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - - for (var i = 0; i < len; i++) { - dests[i].emit('unpipe', this, { hasUnpiped: false }); - }return this; - } - - // try to find the right one. - var index = indexOf(state.pipes, dest); - if (index === -1) return this; - - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - - dest.emit('unpipe', this, unpipeInfo); - - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - - if (ev === 'data') { - // Start flowing on next tick if stream isn't explicitly paused - if (this._readableState.flowing !== false) this.resume(); - } else if (ev === 'readable') { - var state = this._readableState; - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.emittedReadable = false; - if (!state.reading) { - pna.nextTick(nReadingNextTick, this); - } else if (state.length) { - emitReadable(this); - } - } - } - - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; - -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function () { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - state.flowing = true; - resume(this, state); - } - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - pna.nextTick(resume_, stream, state); - } -} - -function resume_(stream, state) { - if (!state.reading) { - debug('resume read 0'); - stream.read(0); - } - - state.resumeScheduled = false; - state.awaitDrain = 0; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} - -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - while (state.flowing && stream.read() !== null) {} -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function (stream) { - var _this = this; - - var state = this._readableState; - var paused = false; - - stream.on('end', function () { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) _this.push(chunk); - } - - _this.push(null); - }); - - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); - - // don't skip over falsy values in objectMode - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - - var ret = _this.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function (method) { - return function () { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } - - // proxy certain important events. - for (var n = 0; n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - this._read = function (n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); - } - }; - - return this; -}; - -Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._readableState.highWaterMark; - } -}); - -// exposed for testing purposes only. -Readable._fromList = fromList; - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; - - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - // read part of list - ret = fromListPartial(n, state.buffer, state.decoder); - } - - return ret; -} - -// Extracts only enough buffered data to satisfy the amount requested. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromListPartial(n, list, hasStrings) { - var ret; - if (n < list.head.data.length) { - // slice is the same for buffers and strings - ret = list.head.data.slice(0, n); - list.head.data = list.head.data.slice(n); - } else if (n === list.head.data.length) { - // first chunk is a perfect match - ret = list.shift(); - } else { - // result spans more than one buffer - ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); - } - return ret; -} - -// Copies a specified amount of characters from the list of buffered data -// chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBufferString(n, list) { - var p = list.head; - var c = 1; - var ret = p.data; - n -= ret.length; - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = str.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; -} - -// Copies a specified amount of bytes from the list of buffered data chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBuffer(n, list) { - var ret = Buffer.allocUnsafe(n); - var p = list.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = buf.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); - - if (!state.endEmitted) { - state.ended = true; - pna.nextTick(endReadableNT, state, stream); - } -} - -function endReadableNT(state, stream) { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } -} - -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index fcfc105..0000000 --- a/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,214 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. - -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - -'use strict'; - -module.exports = Transform; - -var Duplex = require('./_stream_duplex'); - -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ - -util.inherits(Transform, Duplex); - -function afterTransform(er, data) { - var ts = this._transformState; - ts.transforming = false; - - var cb = ts.writecb; - - if (!cb) { - return this.emit('error', new Error('write callback called multiple times')); - } - - ts.writechunk = null; - ts.writecb = null; - - if (data != null) // single equals check for both `null` and `undefined` - this.push(data); - - cb(er); - - var rs = this._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - this._read(rs.highWaterMark); - } -} - -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); - - Duplex.call(this, options); - - this._transformState = { - afterTransform: afterTransform.bind(this), - needTransform: false, - transforming: false, - writecb: null, - writechunk: null, - writeencoding: null - }; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; - - if (typeof options.flush === 'function') this._flush = options.flush; - } - - // When the writable side finishes, then flush out anything remaining. - this.on('prefinish', prefinish); -} - -function prefinish() { - var _this = this; - - if (typeof this._flush === 'function') { - this._flush(function (er, data) { - done(_this, er, data); - }); - } else { - done(this, null, null); - } -} - -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function (chunk, encoding, cb) { - throw new Error('_transform() is not implemented'); -}; - -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function (n) { - var ts = this._transformState; - - if (ts.writechunk !== null && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - -Transform.prototype._destroy = function (err, cb) { - var _this2 = this; - - Duplex.prototype._destroy.call(this, err, function (err2) { - cb(err2); - _this2.emit('close'); - }); -}; - -function done(stream, er, data) { - if (er) return stream.emit('error', er); - - if (data != null) // single equals check for both `null` and `undefined` - stream.push(data); - - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); - - if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); - - return stream.push(null); -} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index e1e897f..0000000 --- a/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,685 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. - -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. - -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -module.exports = Writable; - -/* */ -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} - -// It seems a linked list but it is not -// there will be only 2 of these for each stream -function CorkedRequest(state) { - var _this = this; - - this.next = null; - this.entry = null; - this.finish = function () { - onCorkedFinish(_this, state); - }; -} -/* */ - -/**/ -var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; -/**/ - -/**/ -var Duplex; -/**/ - -Writable.WritableState = WritableState; - -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ - -/**/ -var internalUtil = { - deprecate: require('util-deprecate') -}; -/**/ - -/**/ -var Stream = require('./internal/streams/stream'); -/**/ - -/**/ - -var Buffer = require('safe-buffer').Buffer; -var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -/**/ - -var destroyImpl = require('./internal/streams/destroy'); - -util.inherits(Writable, Stream); - -function nop() {} - -function WritableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); - - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - var isDuplex = stream instanceof Duplex; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - var writableHwm = options.writableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; - - // cast to ints. - this.highWaterMark = Math.floor(this.highWaterMark); - - // if _final has been called - this.finalCalled = false; - - // drain event flag. - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // has it been destroyed - this.destroyed = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // when true all writes will be buffered until .uncork() call - this.corked = 0; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function (er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - - this.bufferedRequest = null; - this.lastBufferedRequest = null; - - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; - - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; - - // count buffered requests - this.bufferedRequestCount = 0; - - // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two - this.corkedRequestsFree = new CorkedRequest(this); -} - -WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; - while (current) { - out.push(current); - current = current.next; - } - return out; -}; - -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function () { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') - }); - } catch (_) {} -})(); - -// Test _writableState for inheritance to account for Duplex streams, -// whose prototype chain only points to Readable. -var realHasInstance; -if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function (object) { - if (realHasInstance.call(this, object)) return true; - if (this !== Writable) return false; - - return object && object._writableState instanceof WritableState; - } - }); -} else { - realHasInstance = function (object) { - return object instanceof this; - }; -} - -function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - // Writable ctor is applied to Duplexes, too. - // `realHasInstance` is necessary because using plain `instanceof` - // would return false, as no `_writableState` property is attached. - - // Trying to use the custom `instanceof` for Writable here will also break the - // Node.js LazyTransform implementation, which has a non-trivial getter for - // `_writableState` that would lead to infinite recursion. - if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { - return new Writable(options); - } - - this._writableState = new WritableState(options, this); - - // legacy. - this.writable = true; - - if (options) { - if (typeof options.write === 'function') this._write = options.write; - - if (typeof options.writev === 'function') this._writev = options.writev; - - if (typeof options.destroy === 'function') this._destroy = options.destroy; - - if (typeof options.final === 'function') this._final = options.final; - } - - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function () { - this.emit('error', new Error('Cannot pipe, not readable')); -}; - -function writeAfterEnd(stream, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - pna.nextTick(cb, er); -} - -// Checks that a user-supplied chunk is valid, especially for the particular -// mode the stream is in. Currently this means that `null` is never accepted -// and undefined/non-string values are only allowed in object mode. -function validChunk(stream, state, chunk, cb) { - var valid = true; - var er = false; - - if (chunk === null) { - er = new TypeError('May not write null values to stream'); - } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - if (er) { - stream.emit('error', er); - pna.nextTick(cb, er); - valid = false; - } - return valid; -} - -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - var isBuf = !state.objectMode && _isUint8Array(chunk); - - if (isBuf && !Buffer.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - - if (typeof cb !== 'function') cb = nop; - - if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); - } - - return ret; -}; - -Writable.prototype.cork = function () { - var state = this._writableState; - - state.corked++; -}; - -Writable.prototype.uncork = function () { - var state = this._writableState; - - if (state.corked) { - state.corked--; - - if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); - } -}; - -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); - this._writableState.defaultEncoding = encoding; - return this; -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = Buffer.from(chunk, encoding); - } - return chunk; -} - -Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._writableState.highWaterMark; - } -}); - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); - if (chunk !== newChunk) { - isBuf = true; - encoding = 'buffer'; - chunk = newChunk; - } - } - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; - - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) state.needDrain = true; - - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk: chunk, - encoding: encoding, - isBuf: isBuf, - callback: cb, - next: null - }; - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - pna.nextTick(cb, er); - // this can emit finish, and it will always happen - // after error - pna.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - stream.emit('error', er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - stream.emit('error', er); - // this can emit finish, but finish must - // always follow error - finishMaybe(stream, state); - } -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - - onwriteStateUpdate(state); - - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state); - - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - - if (sync) { - /**/ - asyncWrite(afterWrite, stream, state, finished, cb); - /**/ - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - - var count = 0; - var allBuffers = true; - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) allBuffers = false; - entry = entry.next; - count += 1; - } - buffer.allBuffers = allBuffers; - - doWrite(stream, state, true, state.length, buffer, '', holder.finish); - - // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite - state.pendingcb++; - state.lastBufferedRequest = null; - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } - state.bufferedRequestCount = 0; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - break; - } - } - - if (entry === null) state.lastBufferedRequest = null; - } - - state.bufferedRequest = entry; - state.bufferProcessing = false; -} - -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new Error('_write() is not implemented')); -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; - - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); - - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); - } - - // ignore unnecessary end() calls. - if (!state.ending) endWritable(this, state, cb); -}; - -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; -} -function callFinal(stream, state) { - stream._final(function (err) { - state.pendingcb--; - if (err) { - stream.emit('error', err); - } - state.prefinished = true; - stream.emit('prefinish'); - finishMaybe(stream, state); - }); -} -function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function') { - state.pendingcb++; - state.finalCalled = true; - pna.nextTick(callFinal, stream, state); - } else { - state.prefinished = true; - stream.emit('prefinish'); - } - } -} - -function finishMaybe(stream, state) { - var need = needFinish(state); - if (need) { - prefinish(stream, state); - if (state.pendingcb === 0) { - state.finished = true; - stream.emit('finish'); - } - } - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); - } - state.ended = true; - stream.writable = false; -} - -function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } - - // reuse the free corkReq. - state.corkedRequestsFree.next = corkReq; -} - -Object.defineProperty(Writable.prototype, 'destroyed', { - get: function () { - if (this._writableState === undefined) { - return false; - } - return this._writableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._writableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._writableState.destroyed = value; - } -}); - -Writable.prototype.destroy = destroyImpl.destroy; -Writable.prototype._undestroy = destroyImpl.undestroy; -Writable.prototype._destroy = function (err, cb) { - this.end(); - cb(err); -}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/BufferList.js b/node_modules/readable-stream/lib/internal/streams/BufferList.js deleted file mode 100644 index 5e08097..0000000 --- a/node_modules/readable-stream/lib/internal/streams/BufferList.js +++ /dev/null @@ -1,78 +0,0 @@ -'use strict'; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var Buffer = require('safe-buffer').Buffer; -var util = require('util'); - -function copyBuffer(src, target, offset) { - src.copy(target, offset); -} - -module.exports = function () { - function BufferList() { - _classCallCheck(this, BufferList); - - this.head = null; - this.tail = null; - this.length = 0; - } - - BufferList.prototype.push = function push(v) { - var entry = { data: v, next: null }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; - }; - - BufferList.prototype.unshift = function unshift(v) { - var entry = { data: v, next: this.head }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; - }; - - BufferList.prototype.shift = function shift() { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; - }; - - BufferList.prototype.clear = function clear() { - this.head = this.tail = null; - this.length = 0; - }; - - BufferList.prototype.join = function join(s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - while (p = p.next) { - ret += s + p.data; - }return ret; - }; - - BufferList.prototype.concat = function concat(n) { - if (this.length === 0) return Buffer.alloc(0); - var ret = Buffer.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - while (p) { - copyBuffer(p.data, ret, i); - i += p.data.length; - p = p.next; - } - return ret; - }; - - return BufferList; -}(); - -if (util && util.inspect && util.inspect.custom) { - module.exports.prototype[util.inspect.custom] = function () { - var obj = util.inspect({ length: this.length }); - return this.constructor.name + ' ' + obj; - }; -} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/destroy.js b/node_modules/readable-stream/lib/internal/streams/destroy.js deleted file mode 100644 index 85a8214..0000000 --- a/node_modules/readable-stream/lib/internal/streams/destroy.js +++ /dev/null @@ -1,84 +0,0 @@ -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -// undocumented cb() API, needed for core, not for public API -function destroy(err, cb) { - var _this = this; - - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; - - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err) { - if (!this._writableState) { - pna.nextTick(emitErrorNT, this, err); - } else if (!this._writableState.errorEmitted) { - this._writableState.errorEmitted = true; - pna.nextTick(emitErrorNT, this, err); - } - } - - return this; - } - - // we set destroyed to true before firing error callbacks in order - // to make it re-entrance safe in case destroy() is called within callbacks - - if (this._readableState) { - this._readableState.destroyed = true; - } - - // if this is a duplex stream mark the writable part as destroyed as well - if (this._writableState) { - this._writableState.destroyed = true; - } - - this._destroy(err || null, function (err) { - if (!cb && err) { - if (!_this._writableState) { - pna.nextTick(emitErrorNT, _this, err); - } else if (!_this._writableState.errorEmitted) { - _this._writableState.errorEmitted = true; - pna.nextTick(emitErrorNT, _this, err); - } - } else if (cb) { - cb(err); - } - }); - - return this; -} - -function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; - } - - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finalCalled = false; - this._writableState.prefinished = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; - } -} - -function emitErrorNT(self, err) { - self.emit('error', err); -} - -module.exports = { - destroy: destroy, - undestroy: undestroy -}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/stream-browser.js b/node_modules/readable-stream/lib/internal/streams/stream-browser.js deleted file mode 100644 index 9332a3f..0000000 --- a/node_modules/readable-stream/lib/internal/streams/stream-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('events').EventEmitter; diff --git a/node_modules/readable-stream/lib/internal/streams/stream.js b/node_modules/readable-stream/lib/internal/streams/stream.js deleted file mode 100644 index ce2ad5b..0000000 --- a/node_modules/readable-stream/lib/internal/streams/stream.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('stream'); diff --git a/node_modules/readable-stream/node_modules/isarray/.npmignore b/node_modules/readable-stream/node_modules/isarray/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/readable-stream/node_modules/isarray/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/readable-stream/node_modules/isarray/.travis.yml b/node_modules/readable-stream/node_modules/isarray/.travis.yml deleted file mode 100644 index cc4dba2..0000000 --- a/node_modules/readable-stream/node_modules/isarray/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/node_modules/readable-stream/node_modules/isarray/Makefile b/node_modules/readable-stream/node_modules/isarray/Makefile deleted file mode 100644 index 787d56e..0000000 --- a/node_modules/readable-stream/node_modules/isarray/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -test: - @node_modules/.bin/tape test.js - -.PHONY: test - diff --git a/node_modules/readable-stream/node_modules/isarray/README.md b/node_modules/readable-stream/node_modules/isarray/README.md deleted file mode 100644 index 16d2c59..0000000 --- a/node_modules/readable-stream/node_modules/isarray/README.md +++ /dev/null @@ -1,60 +0,0 @@ - -# isarray - -`Array#isArray` for older browsers. - -[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray) -[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray) - -[![browser support](https://ci.testling.com/juliangruber/isarray.png) -](https://ci.testling.com/juliangruber/isarray) - -## Usage - -```js -var isArray = require('isarray'); - -console.log(isArray([])); // => true -console.log(isArray({})); // => false -``` - -## Installation - -With [npm](http://npmjs.org) do - -```bash -$ npm install isarray -``` - -Then bundle for the browser with -[browserify](https://github.com/substack/browserify). - -With [component](http://component.io) do - -```bash -$ component install juliangruber/isarray -``` - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -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. diff --git a/node_modules/readable-stream/node_modules/isarray/component.json b/node_modules/readable-stream/node_modules/isarray/component.json deleted file mode 100644 index 9e31b68..0000000 --- a/node_modules/readable-stream/node_modules/isarray/component.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name" : "isarray", - "description" : "Array#isArray for older browsers", - "version" : "0.0.1", - "repository" : "juliangruber/isarray", - "homepage": "https://github.com/juliangruber/isarray", - "main" : "index.js", - "scripts" : [ - "index.js" - ], - "dependencies" : {}, - "keywords": ["browser","isarray","array"], - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "license": "MIT" -} diff --git a/node_modules/readable-stream/node_modules/isarray/index.js b/node_modules/readable-stream/node_modules/isarray/index.js deleted file mode 100644 index a57f634..0000000 --- a/node_modules/readable-stream/node_modules/isarray/index.js +++ /dev/null @@ -1,5 +0,0 @@ -var toString = {}.toString; - -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; diff --git a/node_modules/readable-stream/node_modules/isarray/package.json b/node_modules/readable-stream/node_modules/isarray/package.json deleted file mode 100644 index 1a4317a..0000000 --- a/node_modules/readable-stream/node_modules/isarray/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "isarray", - "description": "Array#isArray for older browsers", - "version": "1.0.0", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/isarray.git" - }, - "homepage": "https://github.com/juliangruber/isarray", - "main": "index.js", - "dependencies": {}, - "devDependencies": { - "tape": "~2.13.4" - }, - "keywords": [ - "browser", - "isarray", - "array" - ], - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "license": "MIT", - "testling": { - "files": "test.js", - "browsers": [ - "ie/8..latest", - "firefox/17..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ] - }, - "scripts": { - "test": "tape test.js" - } -} diff --git a/node_modules/readable-stream/node_modules/isarray/test.js b/node_modules/readable-stream/node_modules/isarray/test.js deleted file mode 100644 index e0c3444..0000000 --- a/node_modules/readable-stream/node_modules/isarray/test.js +++ /dev/null @@ -1,20 +0,0 @@ -var isArray = require('./'); -var test = require('tape'); - -test('is array', function(t){ - t.ok(isArray([])); - t.notOk(isArray({})); - t.notOk(isArray(null)); - t.notOk(isArray(false)); - - var obj = {}; - obj[0] = true; - t.notOk(isArray(obj)); - - var arr = []; - arr.foo = 'bar'; - t.ok(isArray(arr)); - - t.end(); -}); - diff --git a/node_modules/readable-stream/package.json b/node_modules/readable-stream/package.json deleted file mode 100644 index 514c178..0000000 --- a/node_modules/readable-stream/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "readable-stream", - "version": "2.3.8", - "description": "Streams3, a user-land copy of the stream library from Node.js", - "main": "readable.js", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "devDependencies": { - "assert": "^1.4.0", - "babel-polyfill": "^6.9.1", - "buffer": "^4.9.0", - "lolex": "^2.3.2", - "nyc": "^6.4.0", - "tap": "^0.7.0", - "tape": "^4.8.0" - }, - "scripts": { - "test": "tap test/parallel/*.js test/ours/*.js && node test/verify-dependencies.js", - "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js", - "cover": "nyc npm test", - "report": "nyc report --reporter=lcov" - }, - "repository": { - "type": "git", - "url": "git://github.com/nodejs/readable-stream" - }, - "keywords": [ - "readable", - "stream", - "pipe" - ], - "browser": { - "util": false, - "./readable.js": "./readable-browser.js", - "./writable.js": "./writable-browser.js", - "./duplex.js": "./duplex-browser.js", - "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" - }, - "nyc": { - "include": [ - "lib/**.js" - ] - }, - "license": "MIT" -} diff --git a/node_modules/readable-stream/passthrough.js b/node_modules/readable-stream/passthrough.js deleted file mode 100644 index ffd791d..0000000 --- a/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./readable').PassThrough diff --git a/node_modules/readable-stream/readable-browser.js b/node_modules/readable-stream/readable-browser.js deleted file mode 100644 index e503725..0000000 --- a/node_modules/readable-stream/readable-browser.js +++ /dev/null @@ -1,7 +0,0 @@ -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = exports; -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/node_modules/readable-stream/readable.js b/node_modules/readable-stream/readable.js deleted file mode 100644 index ec89ec5..0000000 --- a/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,19 +0,0 @@ -var Stream = require('stream'); -if (process.env.READABLE_STREAM === 'disable' && Stream) { - module.exports = Stream; - exports = module.exports = Stream.Readable; - exports.Readable = Stream.Readable; - exports.Writable = Stream.Writable; - exports.Duplex = Stream.Duplex; - exports.Transform = Stream.Transform; - exports.PassThrough = Stream.PassThrough; - exports.Stream = Stream; -} else { - exports = module.exports = require('./lib/_stream_readable.js'); - exports.Stream = Stream || exports; - exports.Readable = exports; - exports.Writable = require('./lib/_stream_writable.js'); - exports.Duplex = require('./lib/_stream_duplex.js'); - exports.Transform = require('./lib/_stream_transform.js'); - exports.PassThrough = require('./lib/_stream_passthrough.js'); -} diff --git a/node_modules/readable-stream/transform.js b/node_modules/readable-stream/transform.js deleted file mode 100644 index b1baba2..0000000 --- a/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./readable').Transform diff --git a/node_modules/readable-stream/writable-browser.js b/node_modules/readable-stream/writable-browser.js deleted file mode 100644 index ebdde6a..0000000 --- a/node_modules/readable-stream/writable-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/_stream_writable.js'); diff --git a/node_modules/readable-stream/writable.js b/node_modules/readable-stream/writable.js deleted file mode 100644 index 3211a6f..0000000 --- a/node_modules/readable-stream/writable.js +++ /dev/null @@ -1,8 +0,0 @@ -var Stream = require("stream") -var Writable = require("./lib/_stream_writable.js") - -if (process.env.READABLE_STREAM === 'disable') { - module.exports = Stream && Stream.Writable || Writable -} else { - module.exports = Writable -} diff --git a/node_modules/regexpp/LICENSE b/node_modules/regexpp/LICENSE deleted file mode 100644 index 883ee1f..0000000 --- a/node_modules/regexpp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2018 Toru Nagashima - -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. diff --git a/node_modules/regexpp/README.md b/node_modules/regexpp/README.md deleted file mode 100644 index 7dbefb4..0000000 --- a/node_modules/regexpp/README.md +++ /dev/null @@ -1,149 +0,0 @@ -# regexpp - -[![npm version](https://img.shields.io/npm/v/regexpp.svg)](https://www.npmjs.com/package/regexpp) -[![Downloads/month](https://img.shields.io/npm/dm/regexpp.svg)](http://www.npmtrends.com/regexpp) -[![Build Status](https://travis-ci.org/mysticatea/regexpp.svg?branch=master)](https://travis-ci.org/mysticatea/regexpp) -[![Dependency Status](https://david-dm.org/mysticatea/regexpp.svg)](https://david-dm.org/mysticatea/regexpp) - -The regular expression parser for ECMAScript. - -## 💿 Installation - -```bash -$ npm install regexpp -``` - -- require Node.js 4.0.0 or newer. - -## 📖 Usage - -```ts -import { - AST, - RegExpParser, - RegExpValidator, - parseRegExpLiteral, - validateRegExpLiteral, -} from "regexpp" -``` - -### parseRegExpLiteral(source, options?) - -Parse a given regular expression literal then make AST object. - -This is equivalent to `new RegExpParser(options).parseLiteral(source)`. - -- **Parameters:** - - `source` (`string`) The source code to parse. - - `options?` ([`RegExpParser.Options`]) The options to parse. -- **Return:** - - The AST of the regular expression. - -### validateRegExpLiteral(source, options?) - -Validate a given regular expression literal. - -This is equivalent to `new RegExpValidator(options).validateLiteral(source)`. - -- **Parameters:** - - `source` (`string`) The source code to validate. - - `options?` ([`RegExpValidator.Options`]) The options to validate. - -### RegExpParser - -#### new RegExpParser(options?) - -- **Parameters:** - - `options?` ([`RegExpParser.Options`]) The options to parse. - -#### parser.parseLiteral(source, start?, end?) - -Parse a regular expression literal. - -- **Parameters:** - - `source` (`string`) The source code to parse. E.g. `"/abc/g"`. - - `start?` (`number`) The start index in the source code. Default is `0`. - - `end?` (`number`) The end index in the source code. Default is `source.length`. -- **Return:** - - The AST of the regular expression. - -#### parser.parsePattern(source, start?, end?, uFlag?) - -Parse a regular expression pattern. - -- **Parameters:** - - `source` (`string`) The source code to parse. E.g. `"abc"`. - - `start?` (`number`) The start index in the source code. Default is `0`. - - `end?` (`number`) The end index in the source code. Default is `source.length`. - - `uFlag?` (`boolean`) The flag to enable Unicode mode. -- **Return:** - - The AST of the regular expression pattern. - -#### parser.parseFlags(source, start?, end?) - -Parse a regular expression flags. - -- **Parameters:** - - `source` (`string`) The source code to parse. E.g. `"gim"`. - - `start?` (`number`) The start index in the source code. Default is `0`. - - `end?` (`number`) The end index in the source code. Default is `source.length`. -- **Return:** - - The AST of the regular expression flags. - -### RegExpValidator - -#### new RegExpValidator(options) - -- **Parameters:** - - `options` ([`RegExpValidator.Options`]) The options to validate. - -#### validator.validateLiteral(source, start, end) - -Validate a regular expression literal. - -- **Parameters:** - - `source` (`string`) The source code to validate. - - `start?` (`number`) The start index in the source code. Default is `0`. - - `end?` (`number`) The end index in the source code. Default is `source.length`. - -#### validator.validatePattern(source, start, end, uFlag) - -Validate a regular expression pattern. - -- **Parameters:** - - `source` (`string`) The source code to validate. - - `start?` (`number`) The start index in the source code. Default is `0`. - - `end?` (`number`) The end index in the source code. Default is `source.length`. - - `uFlag?` (`boolean`) The flag to enable Unicode mode. - -#### validator.validateFlags(source, start, end) - -Validate a regular expression flags. - -- **Parameters:** - - `source` (`string`) The source code to validate. - - `start?` (`number`) The start index in the source code. Default is `0`. - - `end?` (`number`) The end index in the source code. Default is `source.length`. - -## 📰 Changelog - -- [GitHub Releases](https://github.com/mysticatea/regexpp/releases) - -## 🍻 Contributing - -Welcome contributing! - -Please use GitHub's Issues/PRs. - -### Development Tools - -- `npm test` runs tests and measures coverage. -- `npm run build` compiles TypeScript source code to `index.js`, `index.js.map`, and `index.d.ts`. -- `npm run clean` removes the temporary files which are created by `npm test` and `npm run build`. -- `npm run lint` runs ESLint. -- `npm run update:test` updates test fixtures. -- `npm run update:ids` updates `src/unicode/ids.ts`. -- `npm run watch` runs tests with `--watch` option. - -[`RegExpParser.Options`]: src/parser.ts#L527 -[`RegExpValidator.Options`]: src/validator.ts#L127 diff --git a/node_modules/regexpp/index.d.ts b/node_modules/regexpp/index.d.ts deleted file mode 100644 index 6dc1763..0000000 --- a/node_modules/regexpp/index.d.ts +++ /dev/null @@ -1,202 +0,0 @@ -// Generated by dts-bundle v0.7.3 - -declare module 'regexpp' { - import * as AST from "regexpp/ast"; - import { RegExpParser } from "regexpp/parser"; - import { RegExpValidator } from "regexpp/validator"; - export { AST, RegExpParser, RegExpValidator }; - export function parseRegExpLiteral(source: string, options?: RegExpParser.Options): AST.RegExpLiteral; - export function validateRegExpLiteral(source: string, options?: RegExpValidator.Options): void; -} - -declare module 'regexpp/ast' { - export type Node = BranchNode | LeafNode; - export type BranchNode = RegExpLiteral | Pattern | Disjunction | Group | CapturingGroup | Quantifier | CharacterClass | LookaroundAssertion | CharacterClassRange; - export type LeafNode = BoundaryAssertion | CharacterSet | Character | Backreference | Flags; - export type Element = Disjunction | Group | CapturingGroup | Quantifier | CharacterClass | Assertion | CharacterSet | Character | Backreference; - export type CharacterClassElement = EscapeCharacterSet | UnicodePropertyCharacterSet | Character | CharacterClassRange; - export type AlternativeElement = Group | CapturingGroup | Quantifier | CharacterClass | Assertion | CharacterSet | Character | Backreference; - export type QuantifiableElement = Group | CapturingGroup | CharacterClass | LookaheadAssertion | CharacterSet | Character | Backreference; - export interface NodeBase { - type: Node["type"]; - parent: Node["parent"]; - start: number; - end: number; - raw: string; - } - export interface RegExpLiteral extends NodeBase { - type: "RegExpLiteral"; - parent: null; - pattern: Pattern; - flags: Flags; - } - export interface Pattern extends NodeBase { - type: "Pattern"; - parent: RegExpLiteral | null; - elements: Element[]; - } - export interface Disjunction extends NodeBase { - type: "Disjunction"; - parent: Pattern | Group | CapturingGroup | LookaroundAssertion; - alternatives: AlternativeElement[][]; - } - export interface Group extends NodeBase { - type: "Group"; - parent: Pattern | Disjunction | Group | CapturingGroup | Quantifier | LookaroundAssertion; - elements: Element[]; - } - export interface CapturingGroup extends NodeBase { - type: "CapturingGroup"; - parent: Pattern | Disjunction | Group | CapturingGroup | Quantifier | LookaroundAssertion; - name: string | null; - elements: Element[]; - references: Backreference[]; - } - export type LookaroundAssertion = LookaheadAssertion | LookbehindAssertion; - export interface LookaheadAssertion extends NodeBase { - type: "Assertion"; - parent: Pattern | Disjunction | Group | CapturingGroup | Quantifier | LookaroundAssertion; - kind: "lookahead"; - negate: boolean; - elements: Element[]; - } - export interface LookbehindAssertion extends NodeBase { - type: "Assertion"; - parent: Pattern | Disjunction | Group | CapturingGroup | LookaroundAssertion; - kind: "lookbehind"; - negate: boolean; - elements: Element[]; - } - export interface Quantifier extends NodeBase { - type: "Quantifier"; - parent: Pattern | Disjunction | Group | CapturingGroup | LookaroundAssertion; - min: number; - max: number; - greedy: boolean; - element: QuantifiableElement; - } - export interface CharacterClass extends NodeBase { - type: "CharacterClass"; - parent: Pattern | Disjunction | Group | CapturingGroup | Quantifier | LookaroundAssertion; - negate: boolean; - elements: CharacterClassElement[]; - } - export interface CharacterClassRange extends NodeBase { - type: "CharacterClassRange"; - parent: CharacterClass; - min: Character; - max: Character; - } - export type Assertion = BoundaryAssertion | LookaroundAssertion; - export type BoundaryAssertion = EdgeAssertion | WordBoundaryAssertion; - export interface EdgeAssertion extends NodeBase { - type: "Assertion"; - parent: Pattern | Disjunction | Group | CapturingGroup | Quantifier | LookaroundAssertion; - kind: "start" | "end"; - } - export interface WordBoundaryAssertion extends NodeBase { - type: "Assertion"; - parent: Pattern | Disjunction | Group | CapturingGroup | Quantifier | LookaroundAssertion; - kind: "word"; - negate: boolean; - } - export type CharacterSet = AnyCharacterSet | EscapeCharacterSet | UnicodePropertyCharacterSet; - export interface AnyCharacterSet extends NodeBase { - type: "CharacterSet"; - parent: Pattern | Disjunction | Group | CapturingGroup | Quantifier | LookaroundAssertion; - kind: "any"; - } - export interface EscapeCharacterSet extends NodeBase { - type: "CharacterSet"; - parent: Pattern | Disjunction | Group | CapturingGroup | Quantifier | CharacterClass | LookaroundAssertion; - kind: "digit" | "space" | "word"; - negate: boolean; - } - export interface UnicodePropertyCharacterSet extends NodeBase { - type: "CharacterSet"; - parent: Pattern | Disjunction | Group | CapturingGroup | Quantifier | CharacterClass | LookaroundAssertion; - kind: "property"; - key: string; - value: string | null; - negate: boolean; - } - export interface Character extends NodeBase { - type: "Character"; - parent: Pattern | Disjunction | Group | CapturingGroup | Quantifier | CharacterClass | LookaroundAssertion | CharacterClassRange; - value: number; - } - export interface Backreference extends NodeBase { - type: "Backreference"; - parent: Pattern | Disjunction | Group | CapturingGroup | Quantifier | LookaroundAssertion; - ref: number | string; - resolved: CapturingGroup; - } - export interface Flags extends NodeBase { - type: "Flags"; - parent: RegExpLiteral | null; - dotAll: boolean; - global: boolean; - ignoreCase: boolean; - multiline: boolean; - sticky: boolean; - unicode: boolean; - } -} - -declare module 'regexpp/parser' { - import { Flags, RegExpLiteral, Pattern } from "regexpp/ast"; - export namespace RegExpParser { - interface Options { - strict?: boolean; - ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018; - } - } - export class RegExpParser { - constructor(options?: RegExpParser.Options); - parseLiteral(source: string, start?: number, end?: number): RegExpLiteral; - parseFlags(source: string, start?: number, end?: number): Flags; - parsePattern(source: string, start?: number, end?: number, uFlag?: boolean): Pattern; - } -} - -declare module 'regexpp/validator' { - export namespace RegExpValidator { - interface Options { - strict?: boolean; - ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018; - onLiteralEnter?(start: number): void; - onLiteralLeave?(start: number, end: number): void; - onFlags?(start: number, end: number, global: boolean, ignoreCase: boolean, multiline: boolean, unicode: boolean, sticky: boolean, dotAll: boolean): void; - onPatternEnter?(start: number): void; - onPatternLeave?(start: number, end: number): void; - onDisjunctionEnter?(start: number): void; - onDisjunctionLeave?(start: number, end: number): void; - onAlternativeEnter?(start: number, index: number): void; - onAlternativeLeave?(start: number, end: number, index: number): void; - onGroupEnter?(start: number): void; - onGroupLeave?(start: number, end: number): void; - onCapturingGroupEnter?(start: number, name: string | null): void; - onCapturingGroupLeave?(start: number, end: number, name: string | null): void; - onQuantifier?(start: number, end: number, min: number, max: number, greedy: boolean): void; - onLookaroundAssertionEnter?(start: number, kind: "lookahead" | "lookbehind", negate: boolean): void; - onLookaroundAssertionLeave?(start: number, end: number, kind: "lookahead" | "lookbehind", negate: boolean): void; - onEdgeAssertion?(start: number, end: number, kind: "start" | "end"): void; - onWordBoundaryAssertion?(start: number, end: number, kind: "word", negate: boolean): void; - onAnyCharacterSet?(start: number, end: number, kind: "any"): void; - onEscapeCharacterSet?(start: number, end: number, kind: "digit" | "space" | "word", negate: boolean): void; - onUnicodePropertyCharacterSet?(start: number, end: number, kind: "property", key: string, value: string | null, negate: boolean): void; - onCharacter?(start: number, end: number, value: number): void; - onBackreference?(start: number, end: number, ref: number | string): void; - onCharacterClassEnter?(start: number, negate: boolean): void; - onCharacterClassLeave?(start: number, end: number, negate: boolean): void; - onCharacterClassRange?(start: number, end: number, min: number, max: number): void; - } - } - export class RegExpValidator { - constructor(options?: RegExpValidator.Options); - validateLiteral(source: string, start?: number, end?: number): void; - validateFlags(source: string, start?: number, end?: number): void; - validatePattern(source: string, start?: number, end?: number, uFlag?: boolean): void; - } -} - diff --git a/node_modules/regexpp/index.js b/node_modules/regexpp/index.js deleted file mode 100644 index b6f8742..0000000 --- a/node_modules/regexpp/index.js +++ /dev/null @@ -1,4264 +0,0 @@ -/*! @author Toru Nagashima */ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - - - -var ast = Object.freeze({ - -}); - -function assert(condition, message) { - if (!condition) { - throw new Error(message || "AssertionError"); - } -} -function last(xs) { - return xs.length === 0 ? undefined : xs[xs.length - 1]; -} - -const legacyImpl = { - at(s, end, i) { - return i < end ? s.charCodeAt(i) : -1; - }, - width(c) { - return 1; - } -}; -const unicodeImpl = { - at(s, end, i) { - return i < end ? s.codePointAt(i) : -1; - }, - width(c) { - return c > 0xffff ? 2 : 1; - } -}; -class Reader { - constructor() { - this._impl = legacyImpl; - this._s = ""; - this._i = 0; - this._end = 0; - this._cp1 = -1; - this._w1 = 1; - this._cp2 = -1; - this._w2 = 1; - this._cp3 = -1; - this._w3 = 1; - this._cp4 = -1; - } - get source() { - return this._s; - } - get index() { - return this._i; - } - get currentCodePoint() { - return this._cp1; - } - get nextCodePoint() { - return this._cp2; - } - get nextCodePoint2() { - return this._cp3; - } - get nextCodePoint3() { - return this._cp4; - } - reset(source, start, end, uFlag) { - this._impl = uFlag ? unicodeImpl : legacyImpl; - this._s = source; - this._end = end; - this.rewind(start); - } - rewind(index) { - const impl = this._impl; - this._i = index; - this._cp1 = impl.at(this._s, this._end, index); - this._w1 = impl.width(this._cp1); - this._cp2 = impl.at(this._s, this._end, index + this._w1); - this._w2 = impl.width(this._cp2); - this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2); - this._w3 = impl.width(this._cp3); - this._cp4 = impl.at(this._s, this._end, index + this._w1 + this._w2 + this._w3); - } - advance() { - if (this._cp1 !== -1) { - const impl = this._impl; - this._i += this._w1; - this._cp1 = this._cp2; - this._w1 = this._w2; - this._cp2 = this._cp3; - this._w2 = impl.width(this._cp2); - this._cp3 = this._cp4; - this._w3 = impl.width(this._cp3); - this._cp4 = impl.at(this._s, this._end, this._i + this._w1 + this._w2 + this._w3); - } - } - eat(cp) { - if (this._cp1 === cp) { - this.advance(); - return true; - } - return false; - } - eat2(cp1, cp2) { - if (this._cp1 === cp1 && this._cp2 === cp2) { - this.advance(); - this.advance(); - return true; - } - return false; - } - eat3(cp1, cp2, cp3) { - if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) { - this.advance(); - this.advance(); - this.advance(); - return true; - } - return false; - } -} - -class RegExpSyntaxError extends SyntaxError { - constructor(source, uFlag, index, message) { - if (source) { - if (source[0] !== "/") { - source = `/${source}/${uFlag ? "u" : ""}`; - } - source = `: ${source}`; - } - super(`Invalid regular expression${source}: ${message}`); - this.index = index; - } -} - -function isIdStart(cp) { - if (cp < 0x41) return false; - if (cp < 0x5b) return true; - if (cp < 0x61) return false; - if (cp < 0x7b) return true; - return isLargeIdStart(cp); -} -function isIdContinue(cp) { - if (cp < 0x30) return false; - if (cp < 0x3a) return true; - if (cp < 0x41) return false; - if (cp < 0x5b) return true; - if (cp === 0x5f) return true; - if (cp < 0x61) return false; - if (cp < 0x7b) return true; - return isLargeIdStart(cp) || isLargeIdContinue(cp); -} -function isLargeIdStart(cp) { - if (cp < 0x303c) { - if (cp < 0xeaa) { - if (cp < 0xa2a) { - if (cp < 0x6d5) { - if (cp < 0x37a) { - if (cp < 0x294) { - if (cp < 0xf8) { - if (cp === 0xaa) return true; - if (cp === 0xb5) return true; - if (cp === 0xba) return true; - if (cp < 0xc0) return false; - if (cp < 0xd7) return true; - if (cp < 0xd8) return false; - if (cp < 0xf7) return true; - return false; - } - if (cp < 0x1bb) return true; - if (cp === 0x1bb) return true; - if (cp < 0x1bc) return false; - if (cp < 0x1c0) return true; - if (cp < 0x1c0) return false; - if (cp < 0x1c4) return true; - if (cp < 0x1c4) return false; - if (cp < 0x294) return true; - return false; - } - if (cp < 0x2ec) { - if (cp === 0x294) return true; - if (cp < 0x295) return false; - if (cp < 0x2b0) return true; - if (cp < 0x2b0) return false; - if (cp < 0x2c2) return true; - if (cp < 0x2c6) return false; - if (cp < 0x2d2) return true; - if (cp < 0x2e0) return false; - if (cp < 0x2e5) return true; - return false; - } - if (cp === 0x2ec) return true; - if (cp === 0x2ee) return true; - if (cp < 0x370) return false; - if (cp < 0x374) return true; - if (cp === 0x374) return true; - if (cp < 0x376) return false; - if (cp < 0x378) return true; - return false; - } - if (cp < 0x531) { - if (cp < 0x38c) { - if (cp === 0x37a) return true; - if (cp < 0x37b) return false; - if (cp < 0x37e) return true; - if (cp === 0x37f) return true; - if (cp === 0x386) return true; - if (cp < 0x388) return false; - if (cp < 0x38b) return true; - return false; - } - if (cp === 0x38c) return true; - if (cp < 0x38e) return false; - if (cp < 0x3a2) return true; - if (cp < 0x3a3) return false; - if (cp < 0x3f6) return true; - if (cp < 0x3f7) return false; - if (cp < 0x482) return true; - if (cp < 0x48a) return false; - if (cp < 0x530) return true; - return false; - } - if (cp < 0x620) { - if (cp < 0x531) return false; - if (cp < 0x557) return true; - if (cp === 0x559) return true; - if (cp < 0x561) return false; - if (cp < 0x588) return true; - if (cp < 0x5d0) return false; - if (cp < 0x5eb) return true; - if (cp < 0x5f0) return false; - if (cp < 0x5f3) return true; - return false; - } - if (cp < 0x640) return true; - if (cp === 0x640) return true; - if (cp < 0x641) return false; - if (cp < 0x64b) return true; - if (cp < 0x66e) return false; - if (cp < 0x670) return true; - if (cp < 0x671) return false; - if (cp < 0x6d4) return true; - return false; - } - if (cp < 0x904) { - if (cp < 0x7f4) { - if (cp < 0x710) { - if (cp === 0x6d5) return true; - if (cp < 0x6e5) return false; - if (cp < 0x6e7) return true; - if (cp < 0x6ee) return false; - if (cp < 0x6f0) return true; - if (cp < 0x6fa) return false; - if (cp < 0x6fd) return true; - if (cp === 0x6ff) return true; - return false; - } - if (cp === 0x710) return true; - if (cp < 0x712) return false; - if (cp < 0x730) return true; - if (cp < 0x74d) return false; - if (cp < 0x7a6) return true; - if (cp === 0x7b1) return true; - if (cp < 0x7ca) return false; - if (cp < 0x7eb) return true; - return false; - } - if (cp < 0x828) { - if (cp < 0x7f4) return false; - if (cp < 0x7f6) return true; - if (cp === 0x7fa) return true; - if (cp < 0x800) return false; - if (cp < 0x816) return true; - if (cp === 0x81a) return true; - if (cp === 0x824) return true; - return false; - } - if (cp === 0x828) return true; - if (cp < 0x840) return false; - if (cp < 0x859) return true; - if (cp < 0x860) return false; - if (cp < 0x86b) return true; - if (cp < 0x8a0) return false; - if (cp < 0x8b5) return true; - if (cp < 0x8b6) return false; - if (cp < 0x8be) return true; - return false; - } - if (cp < 0x9b2) { - if (cp < 0x972) { - if (cp < 0x904) return false; - if (cp < 0x93a) return true; - if (cp === 0x93d) return true; - if (cp === 0x950) return true; - if (cp < 0x958) return false; - if (cp < 0x962) return true; - if (cp === 0x971) return true; - return false; - } - if (cp < 0x981) return true; - if (cp < 0x985) return false; - if (cp < 0x98d) return true; - if (cp < 0x98f) return false; - if (cp < 0x991) return true; - if (cp < 0x993) return false; - if (cp < 0x9a9) return true; - if (cp < 0x9aa) return false; - if (cp < 0x9b1) return true; - return false; - } - if (cp < 0x9df) { - if (cp === 0x9b2) return true; - if (cp < 0x9b6) return false; - if (cp < 0x9ba) return true; - if (cp === 0x9bd) return true; - if (cp === 0x9ce) return true; - if (cp < 0x9dc) return false; - if (cp < 0x9de) return true; - return false; - } - if (cp < 0x9e2) return true; - if (cp < 0x9f0) return false; - if (cp < 0x9f2) return true; - if (cp === 0x9fc) return true; - if (cp < 0xa05) return false; - if (cp < 0xa0b) return true; - if (cp < 0xa0f) return false; - if (cp < 0xa11) return true; - if (cp < 0xa13) return false; - if (cp < 0xa29) return true; - return false; - } - if (cp < 0xc2a) { - if (cp < 0xb2a) { - if (cp < 0xaaa) { - if (cp < 0xa5e) { - if (cp < 0xa2a) return false; - if (cp < 0xa31) return true; - if (cp < 0xa32) return false; - if (cp < 0xa34) return true; - if (cp < 0xa35) return false; - if (cp < 0xa37) return true; - if (cp < 0xa38) return false; - if (cp < 0xa3a) return true; - if (cp < 0xa59) return false; - if (cp < 0xa5d) return true; - return false; - } - if (cp === 0xa5e) return true; - if (cp < 0xa72) return false; - if (cp < 0xa75) return true; - if (cp < 0xa85) return false; - if (cp < 0xa8e) return true; - if (cp < 0xa8f) return false; - if (cp < 0xa92) return true; - if (cp < 0xa93) return false; - if (cp < 0xaa9) return true; - return false; - } - if (cp < 0xae0) { - if (cp < 0xaaa) return false; - if (cp < 0xab1) return true; - if (cp < 0xab2) return false; - if (cp < 0xab4) return true; - if (cp < 0xab5) return false; - if (cp < 0xaba) return true; - if (cp === 0xabd) return true; - if (cp === 0xad0) return true; - return false; - } - if (cp < 0xae2) return true; - if (cp === 0xaf9) return true; - if (cp < 0xb05) return false; - if (cp < 0xb0d) return true; - if (cp < 0xb0f) return false; - if (cp < 0xb11) return true; - if (cp < 0xb13) return false; - if (cp < 0xb29) return true; - return false; - } - if (cp < 0xb92) { - if (cp < 0xb5f) { - if (cp < 0xb2a) return false; - if (cp < 0xb31) return true; - if (cp < 0xb32) return false; - if (cp < 0xb34) return true; - if (cp < 0xb35) return false; - if (cp < 0xb3a) return true; - if (cp === 0xb3d) return true; - if (cp < 0xb5c) return false; - if (cp < 0xb5e) return true; - return false; - } - if (cp < 0xb62) return true; - if (cp === 0xb71) return true; - if (cp === 0xb83) return true; - if (cp < 0xb85) return false; - if (cp < 0xb8b) return true; - if (cp < 0xb8e) return false; - if (cp < 0xb91) return true; - return false; - } - if (cp < 0xba8) { - if (cp < 0xb92) return false; - if (cp < 0xb96) return true; - if (cp < 0xb99) return false; - if (cp < 0xb9b) return true; - if (cp === 0xb9c) return true; - if (cp < 0xb9e) return false; - if (cp < 0xba0) return true; - if (cp < 0xba3) return false; - if (cp < 0xba5) return true; - return false; - } - if (cp < 0xbab) return true; - if (cp < 0xbae) return false; - if (cp < 0xbba) return true; - if (cp === 0xbd0) return true; - if (cp < 0xc05) return false; - if (cp < 0xc0d) return true; - if (cp < 0xc0e) return false; - if (cp < 0xc11) return true; - if (cp < 0xc12) return false; - if (cp < 0xc29) return true; - return false; - } - if (cp < 0xd5f) { - if (cp < 0xcbd) { - if (cp < 0xc85) { - if (cp < 0xc2a) return false; - if (cp < 0xc3a) return true; - if (cp === 0xc3d) return true; - if (cp < 0xc58) return false; - if (cp < 0xc5b) return true; - if (cp < 0xc60) return false; - if (cp < 0xc62) return true; - if (cp === 0xc80) return true; - return false; - } - if (cp < 0xc8d) return true; - if (cp < 0xc8e) return false; - if (cp < 0xc91) return true; - if (cp < 0xc92) return false; - if (cp < 0xca9) return true; - if (cp < 0xcaa) return false; - if (cp < 0xcb4) return true; - if (cp < 0xcb5) return false; - if (cp < 0xcba) return true; - return false; - } - if (cp < 0xd0e) { - if (cp === 0xcbd) return true; - if (cp === 0xcde) return true; - if (cp < 0xce0) return false; - if (cp < 0xce2) return true; - if (cp < 0xcf1) return false; - if (cp < 0xcf3) return true; - if (cp < 0xd05) return false; - if (cp < 0xd0d) return true; - return false; - } - if (cp < 0xd11) return true; - if (cp < 0xd12) return false; - if (cp < 0xd3b) return true; - if (cp === 0xd3d) return true; - if (cp === 0xd4e) return true; - if (cp < 0xd54) return false; - if (cp < 0xd57) return true; - return false; - } - if (cp < 0xe46) { - if (cp < 0xdbd) { - if (cp < 0xd5f) return false; - if (cp < 0xd62) return true; - if (cp < 0xd7a) return false; - if (cp < 0xd80) return true; - if (cp < 0xd85) return false; - if (cp < 0xd97) return true; - if (cp < 0xd9a) return false; - if (cp < 0xdb2) return true; - if (cp < 0xdb3) return false; - if (cp < 0xdbc) return true; - return false; - } - if (cp === 0xdbd) return true; - if (cp < 0xdc0) return false; - if (cp < 0xdc7) return true; - if (cp < 0xe01) return false; - if (cp < 0xe31) return true; - if (cp < 0xe32) return false; - if (cp < 0xe34) return true; - if (cp < 0xe40) return false; - if (cp < 0xe46) return true; - return false; - } - if (cp < 0xe8d) { - if (cp === 0xe46) return true; - if (cp < 0xe81) return false; - if (cp < 0xe83) return true; - if (cp === 0xe84) return true; - if (cp < 0xe87) return false; - if (cp < 0xe89) return true; - if (cp === 0xe8a) return true; - return false; - } - if (cp === 0xe8d) return true; - if (cp < 0xe94) return false; - if (cp < 0xe98) return true; - if (cp < 0xe99) return false; - if (cp < 0xea0) return true; - if (cp < 0xea1) return false; - if (cp < 0xea4) return true; - if (cp === 0xea5) return true; - if (cp === 0xea7) return true; - return false; - } - if (cp < 0x1c5a) { - if (cp < 0x1380) { - if (cp < 0x10a0) { - if (cp < 0xf88) { - if (cp < 0xec6) { - if (cp < 0xeaa) return false; - if (cp < 0xeac) return true; - if (cp < 0xead) return false; - if (cp < 0xeb1) return true; - if (cp < 0xeb2) return false; - if (cp < 0xeb4) return true; - if (cp === 0xebd) return true; - if (cp < 0xec0) return false; - if (cp < 0xec5) return true; - return false; - } - if (cp === 0xec6) return true; - if (cp < 0xedc) return false; - if (cp < 0xee0) return true; - if (cp === 0xf00) return true; - if (cp < 0xf40) return false; - if (cp < 0xf48) return true; - if (cp < 0xf49) return false; - if (cp < 0xf6d) return true; - return false; - } - if (cp < 0x1061) { - if (cp < 0xf88) return false; - if (cp < 0xf8d) return true; - if (cp < 0x1000) return false; - if (cp < 0x102b) return true; - if (cp === 0x103f) return true; - if (cp < 0x1050) return false; - if (cp < 0x1056) return true; - if (cp < 0x105a) return false; - if (cp < 0x105e) return true; - return false; - } - if (cp === 0x1061) return true; - if (cp < 0x1065) return false; - if (cp < 0x1067) return true; - if (cp < 0x106e) return false; - if (cp < 0x1071) return true; - if (cp < 0x1075) return false; - if (cp < 0x1082) return true; - if (cp === 0x108e) return true; - return false; - } - if (cp < 0x1260) { - if (cp < 0x10fd) { - if (cp < 0x10a0) return false; - if (cp < 0x10c6) return true; - if (cp === 0x10c7) return true; - if (cp === 0x10cd) return true; - if (cp < 0x10d0) return false; - if (cp < 0x10fb) return true; - if (cp === 0x10fc) return true; - return false; - } - if (cp < 0x1249) return true; - if (cp < 0x124a) return false; - if (cp < 0x124e) return true; - if (cp < 0x1250) return false; - if (cp < 0x1257) return true; - if (cp === 0x1258) return true; - if (cp < 0x125a) return false; - if (cp < 0x125e) return true; - return false; - } - if (cp < 0x12c0) { - if (cp < 0x1260) return false; - if (cp < 0x1289) return true; - if (cp < 0x128a) return false; - if (cp < 0x128e) return true; - if (cp < 0x1290) return false; - if (cp < 0x12b1) return true; - if (cp < 0x12b2) return false; - if (cp < 0x12b6) return true; - if (cp < 0x12b8) return false; - if (cp < 0x12bf) return true; - return false; - } - if (cp === 0x12c0) return true; - if (cp < 0x12c2) return false; - if (cp < 0x12c6) return true; - if (cp < 0x12c8) return false; - if (cp < 0x12d7) return true; - if (cp < 0x12d8) return false; - if (cp < 0x1311) return true; - if (cp < 0x1312) return false; - if (cp < 0x1316) return true; - if (cp < 0x1318) return false; - if (cp < 0x135b) return true; - return false; - } - if (cp < 0x1844) { - if (cp < 0x170e) { - if (cp < 0x1681) { - if (cp < 0x1380) return false; - if (cp < 0x1390) return true; - if (cp < 0x13a0) return false; - if (cp < 0x13f6) return true; - if (cp < 0x13f8) return false; - if (cp < 0x13fe) return true; - if (cp < 0x1401) return false; - if (cp < 0x166d) return true; - if (cp < 0x166f) return false; - if (cp < 0x1680) return true; - return false; - } - if (cp < 0x169b) return true; - if (cp < 0x16a0) return false; - if (cp < 0x16eb) return true; - if (cp < 0x16ee) return false; - if (cp < 0x16f1) return true; - if (cp < 0x16f1) return false; - if (cp < 0x16f9) return true; - if (cp < 0x1700) return false; - if (cp < 0x170d) return true; - return false; - } - if (cp < 0x1780) { - if (cp < 0x170e) return false; - if (cp < 0x1712) return true; - if (cp < 0x1720) return false; - if (cp < 0x1732) return true; - if (cp < 0x1740) return false; - if (cp < 0x1752) return true; - if (cp < 0x1760) return false; - if (cp < 0x176d) return true; - if (cp < 0x176e) return false; - if (cp < 0x1771) return true; - return false; - } - if (cp < 0x17b4) return true; - if (cp === 0x17d7) return true; - if (cp === 0x17dc) return true; - if (cp < 0x1820) return false; - if (cp < 0x1843) return true; - if (cp === 0x1843) return true; - return false; - } - if (cp < 0x19b0) { - if (cp < 0x18b0) { - if (cp < 0x1844) return false; - if (cp < 0x1878) return true; - if (cp < 0x1880) return false; - if (cp < 0x1885) return true; - if (cp < 0x1885) return false; - if (cp < 0x1887) return true; - if (cp < 0x1887) return false; - if (cp < 0x18a9) return true; - if (cp === 0x18aa) return true; - return false; - } - if (cp < 0x18f6) return true; - if (cp < 0x1900) return false; - if (cp < 0x191f) return true; - if (cp < 0x1950) return false; - if (cp < 0x196e) return true; - if (cp < 0x1970) return false; - if (cp < 0x1975) return true; - if (cp < 0x1980) return false; - if (cp < 0x19ac) return true; - return false; - } - if (cp < 0x1b45) { - if (cp < 0x19b0) return false; - if (cp < 0x19ca) return true; - if (cp < 0x1a00) return false; - if (cp < 0x1a17) return true; - if (cp < 0x1a20) return false; - if (cp < 0x1a55) return true; - if (cp === 0x1aa7) return true; - if (cp < 0x1b05) return false; - if (cp < 0x1b34) return true; - return false; - } - if (cp < 0x1b4c) return true; - if (cp < 0x1b83) return false; - if (cp < 0x1ba1) return true; - if (cp < 0x1bae) return false; - if (cp < 0x1bb0) return true; - if (cp < 0x1bba) return false; - if (cp < 0x1be6) return true; - if (cp < 0x1c00) return false; - if (cp < 0x1c24) return true; - if (cp < 0x1c4d) return false; - if (cp < 0x1c50) return true; - return false; - } - if (cp < 0x2126) { - if (cp < 0x1f5f) { - if (cp < 0x1d79) { - if (cp < 0x1cf5) { - if (cp < 0x1c5a) return false; - if (cp < 0x1c78) return true; - if (cp < 0x1c78) return false; - if (cp < 0x1c7e) return true; - if (cp < 0x1c80) return false; - if (cp < 0x1c89) return true; - if (cp < 0x1ce9) return false; - if (cp < 0x1ced) return true; - if (cp < 0x1cee) return false; - if (cp < 0x1cf2) return true; - return false; - } - if (cp < 0x1cf7) return true; - if (cp < 0x1d00) return false; - if (cp < 0x1d2c) return true; - if (cp < 0x1d2c) return false; - if (cp < 0x1d6b) return true; - if (cp < 0x1d6b) return false; - if (cp < 0x1d78) return true; - if (cp === 0x1d78) return true; - return false; - } - if (cp < 0x1f48) { - if (cp < 0x1d79) return false; - if (cp < 0x1d9b) return true; - if (cp < 0x1d9b) return false; - if (cp < 0x1dc0) return true; - if (cp < 0x1e00) return false; - if (cp < 0x1f16) return true; - if (cp < 0x1f18) return false; - if (cp < 0x1f1e) return true; - if (cp < 0x1f20) return false; - if (cp < 0x1f46) return true; - return false; - } - if (cp < 0x1f4e) return true; - if (cp < 0x1f50) return false; - if (cp < 0x1f58) return true; - if (cp === 0x1f59) return true; - if (cp === 0x1f5b) return true; - if (cp === 0x1f5d) return true; - return false; - } - if (cp < 0x1ff6) { - if (cp < 0x1fc6) { - if (cp < 0x1f5f) return false; - if (cp < 0x1f7e) return true; - if (cp < 0x1f80) return false; - if (cp < 0x1fb5) return true; - if (cp < 0x1fb6) return false; - if (cp < 0x1fbd) return true; - if (cp === 0x1fbe) return true; - if (cp < 0x1fc2) return false; - if (cp < 0x1fc5) return true; - return false; - } - if (cp < 0x1fcd) return true; - if (cp < 0x1fd0) return false; - if (cp < 0x1fd4) return true; - if (cp < 0x1fd6) return false; - if (cp < 0x1fdc) return true; - if (cp < 0x1fe0) return false; - if (cp < 0x1fed) return true; - if (cp < 0x1ff2) return false; - if (cp < 0x1ff5) return true; - return false; - } - if (cp < 0x2107) { - if (cp < 0x1ff6) return false; - if (cp < 0x1ffd) return true; - if (cp === 0x2071) return true; - if (cp === 0x207f) return true; - if (cp < 0x2090) return false; - if (cp < 0x209d) return true; - if (cp === 0x2102) return true; - return false; - } - if (cp === 0x2107) return true; - if (cp < 0x210a) return false; - if (cp < 0x2114) return true; - if (cp === 0x2115) return true; - if (cp === 0x2118) return true; - if (cp < 0x2119) return false; - if (cp < 0x211e) return true; - if (cp === 0x2124) return true; - return false; - } - if (cp < 0x2d00) { - if (cp < 0x2160) { - if (cp < 0x2135) { - if (cp === 0x2126) return true; - if (cp === 0x2128) return true; - if (cp < 0x212a) return false; - if (cp < 0x212e) return true; - if (cp === 0x212e) return true; - if (cp < 0x212f) return false; - if (cp < 0x2135) return true; - return false; - } - if (cp < 0x2139) return true; - if (cp === 0x2139) return true; - if (cp < 0x213c) return false; - if (cp < 0x2140) return true; - if (cp < 0x2145) return false; - if (cp < 0x214a) return true; - if (cp === 0x214e) return true; - return false; - } - if (cp < 0x2c60) { - if (cp < 0x2160) return false; - if (cp < 0x2183) return true; - if (cp < 0x2183) return false; - if (cp < 0x2185) return true; - if (cp < 0x2185) return false; - if (cp < 0x2189) return true; - if (cp < 0x2c00) return false; - if (cp < 0x2c2f) return true; - if (cp < 0x2c30) return false; - if (cp < 0x2c5f) return true; - return false; - } - if (cp < 0x2c7c) return true; - if (cp < 0x2c7c) return false; - if (cp < 0x2c7e) return true; - if (cp < 0x2c7e) return false; - if (cp < 0x2ce5) return true; - if (cp < 0x2ceb) return false; - if (cp < 0x2cef) return true; - if (cp < 0x2cf2) return false; - if (cp < 0x2cf4) return true; - return false; - } - if (cp < 0x2dc0) { - if (cp < 0x2d80) { - if (cp < 0x2d00) return false; - if (cp < 0x2d26) return true; - if (cp === 0x2d27) return true; - if (cp === 0x2d2d) return true; - if (cp < 0x2d30) return false; - if (cp < 0x2d68) return true; - if (cp === 0x2d6f) return true; - return false; - } - if (cp < 0x2d97) return true; - if (cp < 0x2da0) return false; - if (cp < 0x2da7) return true; - if (cp < 0x2da8) return false; - if (cp < 0x2daf) return true; - if (cp < 0x2db0) return false; - if (cp < 0x2db7) return true; - if (cp < 0x2db8) return false; - if (cp < 0x2dbf) return true; - return false; - } - if (cp < 0x3006) { - if (cp < 0x2dc0) return false; - if (cp < 0x2dc7) return true; - if (cp < 0x2dc8) return false; - if (cp < 0x2dcf) return true; - if (cp < 0x2dd0) return false; - if (cp < 0x2dd7) return true; - if (cp < 0x2dd8) return false; - if (cp < 0x2ddf) return true; - if (cp === 0x3005) return true; - return false; - } - if (cp === 0x3006) return true; - if (cp === 0x3007) return true; - if (cp < 0x3021) return false; - if (cp < 0x302a) return true; - if (cp < 0x3031) return false; - if (cp < 0x3036) return true; - if (cp < 0x3038) return false; - if (cp < 0x303b) return true; - if (cp === 0x303b) return true; - return false; - } - if (cp < 0x10a10) { - if (cp < 0xab28) { - if (cp < 0xa7fa) { - if (cp < 0xa60c) { - if (cp < 0x31a0) { - if (cp < 0x30a1) { - if (cp === 0x303c) return true; - if (cp < 0x3041) return false; - if (cp < 0x3097) return true; - if (cp < 0x309b) return false; - if (cp < 0x309d) return true; - if (cp < 0x309d) return false; - if (cp < 0x309f) return true; - if (cp === 0x309f) return true; - return false; - } - if (cp < 0x30fb) return true; - if (cp < 0x30fc) return false; - if (cp < 0x30ff) return true; - if (cp === 0x30ff) return true; - if (cp < 0x3105) return false; - if (cp < 0x312f) return true; - if (cp < 0x3131) return false; - if (cp < 0x318f) return true; - return false; - } - if (cp < 0xa015) { - if (cp < 0x31a0) return false; - if (cp < 0x31bb) return true; - if (cp < 0x31f0) return false; - if (cp < 0x3200) return true; - if (cp < 0x3400) return false; - if (cp < 0x4db6) return true; - if (cp < 0x4e00) return false; - if (cp < 0x9feb) return true; - if (cp < 0xa000) return false; - if (cp < 0xa015) return true; - return false; - } - if (cp === 0xa015) return true; - if (cp < 0xa016) return false; - if (cp < 0xa48d) return true; - if (cp < 0xa4d0) return false; - if (cp < 0xa4f8) return true; - if (cp < 0xa4f8) return false; - if (cp < 0xa4fe) return true; - if (cp < 0xa500) return false; - if (cp < 0xa60c) return true; - return false; - } - if (cp < 0xa717) { - if (cp < 0xa67f) { - if (cp === 0xa60c) return true; - if (cp < 0xa610) return false; - if (cp < 0xa620) return true; - if (cp < 0xa62a) return false; - if (cp < 0xa62c) return true; - if (cp < 0xa640) return false; - if (cp < 0xa66e) return true; - if (cp === 0xa66e) return true; - return false; - } - if (cp === 0xa67f) return true; - if (cp < 0xa680) return false; - if (cp < 0xa69c) return true; - if (cp < 0xa69c) return false; - if (cp < 0xa69e) return true; - if (cp < 0xa6a0) return false; - if (cp < 0xa6e6) return true; - if (cp < 0xa6e6) return false; - if (cp < 0xa6f0) return true; - return false; - } - if (cp < 0xa78b) { - if (cp < 0xa717) return false; - if (cp < 0xa720) return true; - if (cp < 0xa722) return false; - if (cp < 0xa770) return true; - if (cp === 0xa770) return true; - if (cp < 0xa771) return false; - if (cp < 0xa788) return true; - if (cp === 0xa788) return true; - return false; - } - if (cp < 0xa78f) return true; - if (cp === 0xa78f) return true; - if (cp < 0xa790) return false; - if (cp < 0xa7af) return true; - if (cp < 0xa7b0) return false; - if (cp < 0xa7b8) return true; - if (cp === 0xa7f7) return true; - if (cp < 0xa7f8) return false; - if (cp < 0xa7fa) return true; - return false; - } - if (cp < 0xaa40) { - if (cp < 0xa90a) { - if (cp < 0xa840) { - if (cp === 0xa7fa) return true; - if (cp < 0xa7fb) return false; - if (cp < 0xa802) return true; - if (cp < 0xa803) return false; - if (cp < 0xa806) return true; - if (cp < 0xa807) return false; - if (cp < 0xa80b) return true; - if (cp < 0xa80c) return false; - if (cp < 0xa823) return true; - return false; - } - if (cp < 0xa874) return true; - if (cp < 0xa882) return false; - if (cp < 0xa8b4) return true; - if (cp < 0xa8f2) return false; - if (cp < 0xa8f8) return true; - if (cp === 0xa8fb) return true; - if (cp === 0xa8fd) return true; - return false; - } - if (cp < 0xa9e0) { - if (cp < 0xa90a) return false; - if (cp < 0xa926) return true; - if (cp < 0xa930) return false; - if (cp < 0xa947) return true; - if (cp < 0xa960) return false; - if (cp < 0xa97d) return true; - if (cp < 0xa984) return false; - if (cp < 0xa9b3) return true; - if (cp === 0xa9cf) return true; - return false; - } - if (cp < 0xa9e5) return true; - if (cp === 0xa9e6) return true; - if (cp < 0xa9e7) return false; - if (cp < 0xa9f0) return true; - if (cp < 0xa9fa) return false; - if (cp < 0xa9ff) return true; - if (cp < 0xaa00) return false; - if (cp < 0xaa29) return true; - return false; - } - if (cp < 0xaac0) { - if (cp < 0xaa7a) { - if (cp < 0xaa40) return false; - if (cp < 0xaa43) return true; - if (cp < 0xaa44) return false; - if (cp < 0xaa4c) return true; - if (cp < 0xaa60) return false; - if (cp < 0xaa70) return true; - if (cp === 0xaa70) return true; - if (cp < 0xaa71) return false; - if (cp < 0xaa77) return true; - return false; - } - if (cp === 0xaa7a) return true; - if (cp < 0xaa7e) return false; - if (cp < 0xaab0) return true; - if (cp === 0xaab1) return true; - if (cp < 0xaab5) return false; - if (cp < 0xaab7) return true; - if (cp < 0xaab9) return false; - if (cp < 0xaabe) return true; - return false; - } - if (cp < 0xaaf2) { - if (cp === 0xaac0) return true; - if (cp === 0xaac2) return true; - if (cp < 0xaadb) return false; - if (cp < 0xaadd) return true; - if (cp === 0xaadd) return true; - if (cp < 0xaae0) return false; - if (cp < 0xaaeb) return true; - return false; - } - if (cp === 0xaaf2) return true; - if (cp < 0xaaf3) return false; - if (cp < 0xaaf5) return true; - if (cp < 0xab01) return false; - if (cp < 0xab07) return true; - if (cp < 0xab09) return false; - if (cp < 0xab0f) return true; - if (cp < 0xab11) return false; - if (cp < 0xab17) return true; - if (cp < 0xab20) return false; - if (cp < 0xab27) return true; - return false; - } - if (cp < 0x1003c) { - if (cp < 0xfb46) { - if (cp < 0xfa70) { - if (cp < 0xabc0) { - if (cp < 0xab28) return false; - if (cp < 0xab2f) return true; - if (cp < 0xab30) return false; - if (cp < 0xab5b) return true; - if (cp < 0xab5c) return false; - if (cp < 0xab60) return true; - if (cp < 0xab60) return false; - if (cp < 0xab66) return true; - if (cp < 0xab70) return false; - if (cp < 0xabc0) return true; - return false; - } - if (cp < 0xabe3) return true; - if (cp < 0xac00) return false; - if (cp < 0xd7a4) return true; - if (cp < 0xd7b0) return false; - if (cp < 0xd7c7) return true; - if (cp < 0xd7cb) return false; - if (cp < 0xd7fc) return true; - if (cp < 0xf900) return false; - if (cp < 0xfa6e) return true; - return false; - } - if (cp < 0xfb2a) { - if (cp < 0xfa70) return false; - if (cp < 0xfada) return true; - if (cp < 0xfb00) return false; - if (cp < 0xfb07) return true; - if (cp < 0xfb13) return false; - if (cp < 0xfb18) return true; - if (cp === 0xfb1d) return true; - if (cp < 0xfb1f) return false; - if (cp < 0xfb29) return true; - return false; - } - if (cp < 0xfb37) return true; - if (cp < 0xfb38) return false; - if (cp < 0xfb3d) return true; - if (cp === 0xfb3e) return true; - if (cp < 0xfb40) return false; - if (cp < 0xfb42) return true; - if (cp < 0xfb43) return false; - if (cp < 0xfb45) return true; - return false; - } - if (cp < 0xff70) { - if (cp < 0xfe70) { - if (cp < 0xfb46) return false; - if (cp < 0xfbb2) return true; - if (cp < 0xfbd3) return false; - if (cp < 0xfd3e) return true; - if (cp < 0xfd50) return false; - if (cp < 0xfd90) return true; - if (cp < 0xfd92) return false; - if (cp < 0xfdc8) return true; - if (cp < 0xfdf0) return false; - if (cp < 0xfdfc) return true; - return false; - } - if (cp < 0xfe75) return true; - if (cp < 0xfe76) return false; - if (cp < 0xfefd) return true; - if (cp < 0xff21) return false; - if (cp < 0xff3b) return true; - if (cp < 0xff41) return false; - if (cp < 0xff5b) return true; - if (cp < 0xff66) return false; - if (cp < 0xff70) return true; - return false; - } - if (cp < 0xffca) { - if (cp === 0xff70) return true; - if (cp < 0xff71) return false; - if (cp < 0xff9e) return true; - if (cp < 0xff9e) return false; - if (cp < 0xffa0) return true; - if (cp < 0xffa0) return false; - if (cp < 0xffbf) return true; - if (cp < 0xffc2) return false; - if (cp < 0xffc8) return true; - return false; - } - if (cp < 0xffd0) return true; - if (cp < 0xffd2) return false; - if (cp < 0xffd8) return true; - if (cp < 0xffda) return false; - if (cp < 0xffdd) return true; - if (cp < 0x10000) return false; - if (cp < 0x1000c) return true; - if (cp < 0x1000d) return false; - if (cp < 0x10027) return true; - if (cp < 0x10028) return false; - if (cp < 0x1003b) return true; - return false; - } - if (cp < 0x104d8) { - if (cp < 0x10342) { - if (cp < 0x10280) { - if (cp < 0x1003c) return false; - if (cp < 0x1003e) return true; - if (cp < 0x1003f) return false; - if (cp < 0x1004e) return true; - if (cp < 0x10050) return false; - if (cp < 0x1005e) return true; - if (cp < 0x10080) return false; - if (cp < 0x100fb) return true; - if (cp < 0x10140) return false; - if (cp < 0x10175) return true; - return false; - } - if (cp < 0x1029d) return true; - if (cp < 0x102a0) return false; - if (cp < 0x102d1) return true; - if (cp < 0x10300) return false; - if (cp < 0x10320) return true; - if (cp < 0x1032d) return false; - if (cp < 0x10341) return true; - if (cp === 0x10341) return true; - return false; - } - if (cp < 0x103c8) { - if (cp < 0x10342) return false; - if (cp < 0x1034a) return true; - if (cp === 0x1034a) return true; - if (cp < 0x10350) return false; - if (cp < 0x10376) return true; - if (cp < 0x10380) return false; - if (cp < 0x1039e) return true; - if (cp < 0x103a0) return false; - if (cp < 0x103c4) return true; - return false; - } - if (cp < 0x103d0) return true; - if (cp < 0x103d1) return false; - if (cp < 0x103d6) return true; - if (cp < 0x10400) return false; - if (cp < 0x10450) return true; - if (cp < 0x10450) return false; - if (cp < 0x1049e) return true; - if (cp < 0x104b0) return false; - if (cp < 0x104d4) return true; - return false; - } - if (cp < 0x1083c) { - if (cp < 0x10760) { - if (cp < 0x104d8) return false; - if (cp < 0x104fc) return true; - if (cp < 0x10500) return false; - if (cp < 0x10528) return true; - if (cp < 0x10530) return false; - if (cp < 0x10564) return true; - if (cp < 0x10600) return false; - if (cp < 0x10737) return true; - if (cp < 0x10740) return false; - if (cp < 0x10756) return true; - return false; - } - if (cp < 0x10768) return true; - if (cp < 0x10800) return false; - if (cp < 0x10806) return true; - if (cp === 0x10808) return true; - if (cp < 0x1080a) return false; - if (cp < 0x10836) return true; - if (cp < 0x10837) return false; - if (cp < 0x10839) return true; - return false; - } - if (cp < 0x108f4) { - if (cp === 0x1083c) return true; - if (cp < 0x1083f) return false; - if (cp < 0x10856) return true; - if (cp < 0x10860) return false; - if (cp < 0x10877) return true; - if (cp < 0x10880) return false; - if (cp < 0x1089f) return true; - if (cp < 0x108e0) return false; - if (cp < 0x108f3) return true; - return false; - } - if (cp < 0x108f6) return true; - if (cp < 0x10900) return false; - if (cp < 0x10916) return true; - if (cp < 0x10920) return false; - if (cp < 0x1093a) return true; - if (cp < 0x10980) return false; - if (cp < 0x109b8) return true; - if (cp < 0x109be) return false; - if (cp < 0x109c0) return true; - if (cp === 0x10a00) return true; - return false; - } - if (cp < 0x16f50) { - if (cp < 0x11400) { - if (cp < 0x11183) { - if (cp < 0x10b80) { - if (cp < 0x10ac0) { - if (cp < 0x10a10) return false; - if (cp < 0x10a14) return true; - if (cp < 0x10a15) return false; - if (cp < 0x10a18) return true; - if (cp < 0x10a19) return false; - if (cp < 0x10a34) return true; - if (cp < 0x10a60) return false; - if (cp < 0x10a7d) return true; - if (cp < 0x10a80) return false; - if (cp < 0x10a9d) return true; - return false; - } - if (cp < 0x10ac8) return true; - if (cp < 0x10ac9) return false; - if (cp < 0x10ae5) return true; - if (cp < 0x10b00) return false; - if (cp < 0x10b36) return true; - if (cp < 0x10b40) return false; - if (cp < 0x10b56) return true; - if (cp < 0x10b60) return false; - if (cp < 0x10b73) return true; - return false; - } - if (cp < 0x11083) { - if (cp < 0x10b80) return false; - if (cp < 0x10b92) return true; - if (cp < 0x10c00) return false; - if (cp < 0x10c49) return true; - if (cp < 0x10c80) return false; - if (cp < 0x10cb3) return true; - if (cp < 0x10cc0) return false; - if (cp < 0x10cf3) return true; - if (cp < 0x11003) return false; - if (cp < 0x11038) return true; - return false; - } - if (cp < 0x110b0) return true; - if (cp < 0x110d0) return false; - if (cp < 0x110e9) return true; - if (cp < 0x11103) return false; - if (cp < 0x11127) return true; - if (cp < 0x11150) return false; - if (cp < 0x11173) return true; - if (cp === 0x11176) return true; - return false; - } - if (cp < 0x1129f) { - if (cp < 0x11213) { - if (cp < 0x11183) return false; - if (cp < 0x111b3) return true; - if (cp < 0x111c1) return false; - if (cp < 0x111c5) return true; - if (cp === 0x111da) return true; - if (cp === 0x111dc) return true; - if (cp < 0x11200) return false; - if (cp < 0x11212) return true; - return false; - } - if (cp < 0x1122c) return true; - if (cp < 0x11280) return false; - if (cp < 0x11287) return true; - if (cp === 0x11288) return true; - if (cp < 0x1128a) return false; - if (cp < 0x1128e) return true; - if (cp < 0x1128f) return false; - if (cp < 0x1129e) return true; - return false; - } - if (cp < 0x1132a) { - if (cp < 0x1129f) return false; - if (cp < 0x112a9) return true; - if (cp < 0x112b0) return false; - if (cp < 0x112df) return true; - if (cp < 0x11305) return false; - if (cp < 0x1130d) return true; - if (cp < 0x1130f) return false; - if (cp < 0x11311) return true; - if (cp < 0x11313) return false; - if (cp < 0x11329) return true; - return false; - } - if (cp < 0x11331) return true; - if (cp < 0x11332) return false; - if (cp < 0x11334) return true; - if (cp < 0x11335) return false; - if (cp < 0x1133a) return true; - if (cp === 0x1133d) return true; - if (cp === 0x11350) return true; - if (cp < 0x1135d) return false; - if (cp < 0x11362) return true; - return false; - } - if (cp < 0x11c00) { - if (cp < 0x11700) { - if (cp < 0x11580) { - if (cp < 0x11400) return false; - if (cp < 0x11435) return true; - if (cp < 0x11447) return false; - if (cp < 0x1144b) return true; - if (cp < 0x11480) return false; - if (cp < 0x114b0) return true; - if (cp < 0x114c4) return false; - if (cp < 0x114c6) return true; - if (cp === 0x114c7) return true; - return false; - } - if (cp < 0x115af) return true; - if (cp < 0x115d8) return false; - if (cp < 0x115dc) return true; - if (cp < 0x11600) return false; - if (cp < 0x11630) return true; - if (cp === 0x11644) return true; - if (cp < 0x11680) return false; - if (cp < 0x116ab) return true; - return false; - } - if (cp < 0x11a3a) { - if (cp < 0x11700) return false; - if (cp < 0x1171a) return true; - if (cp < 0x118a0) return false; - if (cp < 0x118e0) return true; - if (cp === 0x118ff) return true; - if (cp === 0x11a00) return true; - if (cp < 0x11a0b) return false; - if (cp < 0x11a33) return true; - return false; - } - if (cp === 0x11a3a) return true; - if (cp === 0x11a50) return true; - if (cp < 0x11a5c) return false; - if (cp < 0x11a84) return true; - if (cp < 0x11a86) return false; - if (cp < 0x11a8a) return true; - if (cp < 0x11ac0) return false; - if (cp < 0x11af9) return true; - return false; - } - if (cp < 0x12480) { - if (cp < 0x11d08) { - if (cp < 0x11c00) return false; - if (cp < 0x11c09) return true; - if (cp < 0x11c0a) return false; - if (cp < 0x11c2f) return true; - if (cp === 0x11c40) return true; - if (cp < 0x11c72) return false; - if (cp < 0x11c90) return true; - if (cp < 0x11d00) return false; - if (cp < 0x11d07) return true; - return false; - } - if (cp < 0x11d0a) return true; - if (cp < 0x11d0b) return false; - if (cp < 0x11d31) return true; - if (cp === 0x11d46) return true; - if (cp < 0x12000) return false; - if (cp < 0x1239a) return true; - if (cp < 0x12400) return false; - if (cp < 0x1246f) return true; - return false; - } - if (cp < 0x16ad0) { - if (cp < 0x12480) return false; - if (cp < 0x12544) return true; - if (cp < 0x13000) return false; - if (cp < 0x1342f) return true; - if (cp < 0x14400) return false; - if (cp < 0x14647) return true; - if (cp < 0x16800) return false; - if (cp < 0x16a39) return true; - if (cp < 0x16a40) return false; - if (cp < 0x16a5f) return true; - return false; - } - if (cp < 0x16aee) return true; - if (cp < 0x16b00) return false; - if (cp < 0x16b30) return true; - if (cp < 0x16b40) return false; - if (cp < 0x16b44) return true; - if (cp < 0x16b63) return false; - if (cp < 0x16b78) return true; - if (cp < 0x16b7d) return false; - if (cp < 0x16b90) return true; - if (cp < 0x16f00) return false; - if (cp < 0x16f45) return true; - return false; - } - if (cp < 0x1e800) { - if (cp < 0x1d4c5) { - if (cp < 0x1bc90) { - if (cp < 0x1b000) { - if (cp === 0x16f50) return true; - if (cp < 0x16f93) return false; - if (cp < 0x16fa0) return true; - if (cp < 0x16fe0) return false; - if (cp < 0x16fe2) return true; - if (cp < 0x17000) return false; - if (cp < 0x187ed) return true; - if (cp < 0x18800) return false; - if (cp < 0x18af3) return true; - return false; - } - if (cp < 0x1b11f) return true; - if (cp < 0x1b170) return false; - if (cp < 0x1b2fc) return true; - if (cp < 0x1bc00) return false; - if (cp < 0x1bc6b) return true; - if (cp < 0x1bc70) return false; - if (cp < 0x1bc7d) return true; - if (cp < 0x1bc80) return false; - if (cp < 0x1bc89) return true; - return false; - } - if (cp < 0x1d4a5) { - if (cp < 0x1bc90) return false; - if (cp < 0x1bc9a) return true; - if (cp < 0x1d400) return false; - if (cp < 0x1d455) return true; - if (cp < 0x1d456) return false; - if (cp < 0x1d49d) return true; - if (cp < 0x1d49e) return false; - if (cp < 0x1d4a0) return true; - if (cp === 0x1d4a2) return true; - return false; - } - if (cp < 0x1d4a7) return true; - if (cp < 0x1d4a9) return false; - if (cp < 0x1d4ad) return true; - if (cp < 0x1d4ae) return false; - if (cp < 0x1d4ba) return true; - if (cp === 0x1d4bb) return true; - if (cp < 0x1d4bd) return false; - if (cp < 0x1d4c4) return true; - return false; - } - if (cp < 0x1d6a8) { - if (cp < 0x1d53b) { - if (cp < 0x1d4c5) return false; - if (cp < 0x1d506) return true; - if (cp < 0x1d507) return false; - if (cp < 0x1d50b) return true; - if (cp < 0x1d50d) return false; - if (cp < 0x1d515) return true; - if (cp < 0x1d516) return false; - if (cp < 0x1d51d) return true; - if (cp < 0x1d51e) return false; - if (cp < 0x1d53a) return true; - return false; - } - if (cp < 0x1d53f) return true; - if (cp < 0x1d540) return false; - if (cp < 0x1d545) return true; - if (cp === 0x1d546) return true; - if (cp < 0x1d54a) return false; - if (cp < 0x1d551) return true; - if (cp < 0x1d552) return false; - if (cp < 0x1d6a6) return true; - return false; - } - if (cp < 0x1d736) { - if (cp < 0x1d6a8) return false; - if (cp < 0x1d6c1) return true; - if (cp < 0x1d6c2) return false; - if (cp < 0x1d6db) return true; - if (cp < 0x1d6dc) return false; - if (cp < 0x1d6fb) return true; - if (cp < 0x1d6fc) return false; - if (cp < 0x1d715) return true; - if (cp < 0x1d716) return false; - if (cp < 0x1d735) return true; - return false; - } - if (cp < 0x1d74f) return true; - if (cp < 0x1d750) return false; - if (cp < 0x1d76f) return true; - if (cp < 0x1d770) return false; - if (cp < 0x1d789) return true; - if (cp < 0x1d78a) return false; - if (cp < 0x1d7a9) return true; - if (cp < 0x1d7aa) return false; - if (cp < 0x1d7c3) return true; - if (cp < 0x1d7c4) return false; - if (cp < 0x1d7cc) return true; - return false; - } - if (cp < 0x1ee5b) { - if (cp < 0x1ee3b) { - if (cp < 0x1ee24) { - if (cp < 0x1e800) return false; - if (cp < 0x1e8c5) return true; - if (cp < 0x1e900) return false; - if (cp < 0x1e944) return true; - if (cp < 0x1ee00) return false; - if (cp < 0x1ee04) return true; - if (cp < 0x1ee05) return false; - if (cp < 0x1ee20) return true; - if (cp < 0x1ee21) return false; - if (cp < 0x1ee23) return true; - return false; - } - if (cp === 0x1ee24) return true; - if (cp === 0x1ee27) return true; - if (cp < 0x1ee29) return false; - if (cp < 0x1ee33) return true; - if (cp < 0x1ee34) return false; - if (cp < 0x1ee38) return true; - if (cp === 0x1ee39) return true; - return false; - } - if (cp < 0x1ee4d) { - if (cp === 0x1ee3b) return true; - if (cp === 0x1ee42) return true; - if (cp === 0x1ee47) return true; - if (cp === 0x1ee49) return true; - if (cp === 0x1ee4b) return true; - return false; - } - if (cp < 0x1ee50) return true; - if (cp < 0x1ee51) return false; - if (cp < 0x1ee53) return true; - if (cp === 0x1ee54) return true; - if (cp === 0x1ee57) return true; - if (cp === 0x1ee59) return true; - return false; - } - if (cp < 0x1ee80) { - if (cp < 0x1ee67) { - if (cp === 0x1ee5b) return true; - if (cp === 0x1ee5d) return true; - if (cp === 0x1ee5f) return true; - if (cp < 0x1ee61) return false; - if (cp < 0x1ee63) return true; - if (cp === 0x1ee64) return true; - return false; - } - if (cp < 0x1ee6b) return true; - if (cp < 0x1ee6c) return false; - if (cp < 0x1ee73) return true; - if (cp < 0x1ee74) return false; - if (cp < 0x1ee78) return true; - if (cp < 0x1ee79) return false; - if (cp < 0x1ee7d) return true; - if (cp === 0x1ee7e) return true; - return false; - } - if (cp < 0x20000) { - if (cp < 0x1ee80) return false; - if (cp < 0x1ee8a) return true; - if (cp < 0x1ee8b) return false; - if (cp < 0x1ee9c) return true; - if (cp < 0x1eea1) return false; - if (cp < 0x1eea4) return true; - if (cp < 0x1eea5) return false; - if (cp < 0x1eeaa) return true; - if (cp < 0x1eeab) return false; - if (cp < 0x1eebc) return true; - return false; - } - if (cp < 0x2a6d7) return true; - if (cp < 0x2a700) return false; - if (cp < 0x2b735) return true; - if (cp < 0x2b740) return false; - if (cp < 0x2b81e) return true; - if (cp < 0x2b820) return false; - if (cp < 0x2cea2) return true; - if (cp < 0x2ceb0) return false; - if (cp < 0x2ebe1) return true; - if (cp < 0x2f800) return false; - if (cp < 0x2fa1e) return true; - return false; -} -function isLargeIdContinue(cp) { - if (cp < 0x1bf2) { - if (cp < 0xd62) { - if (cp < 0xa83) { - if (cp < 0x93b) { - if (cp < 0x6ea) { - if (cp < 0x5c7) { - if (cp === 0xb7) return true; - if (cp < 0x300) return false; - if (cp < 0x370) return true; - if (cp === 0x387) return true; - if (cp < 0x483) return false; - if (cp < 0x488) return true; - if (cp < 0x591) return false; - if (cp < 0x5be) return true; - if (cp === 0x5bf) return true; - if (cp < 0x5c1) return false; - if (cp < 0x5c3) return true; - if (cp < 0x5c4) return false; - if (cp < 0x5c6) return true; - return false; - } - if (cp === 0x5c7) return true; - if (cp < 0x610) return false; - if (cp < 0x61b) return true; - if (cp < 0x64b) return false; - if (cp < 0x660) return true; - if (cp < 0x660) return false; - if (cp < 0x66a) return true; - if (cp === 0x670) return true; - if (cp < 0x6d6) return false; - if (cp < 0x6dd) return true; - if (cp < 0x6df) return false; - if (cp < 0x6e5) return true; - if (cp < 0x6e7) return false; - if (cp < 0x6e9) return true; - return false; - } - if (cp < 0x81b) { - if (cp < 0x6ea) return false; - if (cp < 0x6ee) return true; - if (cp < 0x6f0) return false; - if (cp < 0x6fa) return true; - if (cp === 0x711) return true; - if (cp < 0x730) return false; - if (cp < 0x74b) return true; - if (cp < 0x7a6) return false; - if (cp < 0x7b1) return true; - if (cp < 0x7c0) return false; - if (cp < 0x7ca) return true; - if (cp < 0x7eb) return false; - if (cp < 0x7f4) return true; - if (cp < 0x816) return false; - if (cp < 0x81a) return true; - return false; - } - if (cp < 0x824) return true; - if (cp < 0x825) return false; - if (cp < 0x828) return true; - if (cp < 0x829) return false; - if (cp < 0x82e) return true; - if (cp < 0x859) return false; - if (cp < 0x85c) return true; - if (cp < 0x8d4) return false; - if (cp < 0x8e2) return true; - if (cp < 0x8e3) return false; - if (cp < 0x903) return true; - if (cp === 0x903) return true; - if (cp === 0x93a) return true; - return false; - } - if (cp < 0x9cb) { - if (cp < 0x962) { - if (cp === 0x93b) return true; - if (cp === 0x93c) return true; - if (cp < 0x93e) return false; - if (cp < 0x941) return true; - if (cp < 0x941) return false; - if (cp < 0x949) return true; - if (cp < 0x949) return false; - if (cp < 0x94d) return true; - if (cp === 0x94d) return true; - if (cp < 0x94e) return false; - if (cp < 0x950) return true; - if (cp < 0x951) return false; - if (cp < 0x958) return true; - return false; - } - if (cp < 0x964) return true; - if (cp < 0x966) return false; - if (cp < 0x970) return true; - if (cp === 0x981) return true; - if (cp < 0x982) return false; - if (cp < 0x984) return true; - if (cp === 0x9bc) return true; - if (cp < 0x9be) return false; - if (cp < 0x9c1) return true; - if (cp < 0x9c1) return false; - if (cp < 0x9c5) return true; - if (cp < 0x9c7) return false; - if (cp < 0x9c9) return true; - return false; - } - if (cp < 0xa3e) { - if (cp < 0x9cb) return false; - if (cp < 0x9cd) return true; - if (cp === 0x9cd) return true; - if (cp === 0x9d7) return true; - if (cp < 0x9e2) return false; - if (cp < 0x9e4) return true; - if (cp < 0x9e6) return false; - if (cp < 0x9f0) return true; - if (cp < 0xa01) return false; - if (cp < 0xa03) return true; - if (cp === 0xa03) return true; - if (cp === 0xa3c) return true; - return false; - } - if (cp < 0xa41) return true; - if (cp < 0xa41) return false; - if (cp < 0xa43) return true; - if (cp < 0xa47) return false; - if (cp < 0xa49) return true; - if (cp < 0xa4b) return false; - if (cp < 0xa4e) return true; - if (cp === 0xa51) return true; - if (cp < 0xa66) return false; - if (cp < 0xa70) return true; - if (cp < 0xa70) return false; - if (cp < 0xa72) return true; - if (cp === 0xa75) return true; - if (cp < 0xa81) return false; - if (cp < 0xa83) return true; - return false; - } - if (cp < 0xbd7) { - if (cp < 0xb40) { - if (cp < 0xae2) { - if (cp === 0xa83) return true; - if (cp === 0xabc) return true; - if (cp < 0xabe) return false; - if (cp < 0xac1) return true; - if (cp < 0xac1) return false; - if (cp < 0xac6) return true; - if (cp < 0xac7) return false; - if (cp < 0xac9) return true; - if (cp === 0xac9) return true; - if (cp < 0xacb) return false; - if (cp < 0xacd) return true; - if (cp === 0xacd) return true; - return false; - } - if (cp < 0xae4) return true; - if (cp < 0xae6) return false; - if (cp < 0xaf0) return true; - if (cp < 0xafa) return false; - if (cp < 0xb00) return true; - if (cp === 0xb01) return true; - if (cp < 0xb02) return false; - if (cp < 0xb04) return true; - if (cp === 0xb3c) return true; - if (cp === 0xb3e) return true; - if (cp === 0xb3f) return true; - return false; - } - if (cp < 0xb66) { - if (cp === 0xb40) return true; - if (cp < 0xb41) return false; - if (cp < 0xb45) return true; - if (cp < 0xb47) return false; - if (cp < 0xb49) return true; - if (cp < 0xb4b) return false; - if (cp < 0xb4d) return true; - if (cp === 0xb4d) return true; - if (cp === 0xb56) return true; - if (cp === 0xb57) return true; - if (cp < 0xb62) return false; - if (cp < 0xb64) return true; - return false; - } - if (cp < 0xb70) return true; - if (cp === 0xb82) return true; - if (cp < 0xbbe) return false; - if (cp < 0xbc0) return true; - if (cp === 0xbc0) return true; - if (cp < 0xbc1) return false; - if (cp < 0xbc3) return true; - if (cp < 0xbc6) return false; - if (cp < 0xbc9) return true; - if (cp < 0xbca) return false; - if (cp < 0xbcd) return true; - if (cp === 0xbcd) return true; - return false; - } - if (cp < 0xcc0) { - if (cp < 0xc55) { - if (cp === 0xbd7) return true; - if (cp < 0xbe6) return false; - if (cp < 0xbf0) return true; - if (cp === 0xc00) return true; - if (cp < 0xc01) return false; - if (cp < 0xc04) return true; - if (cp < 0xc3e) return false; - if (cp < 0xc41) return true; - if (cp < 0xc41) return false; - if (cp < 0xc45) return true; - if (cp < 0xc46) return false; - if (cp < 0xc49) return true; - if (cp < 0xc4a) return false; - if (cp < 0xc4e) return true; - return false; - } - if (cp < 0xc57) return true; - if (cp < 0xc62) return false; - if (cp < 0xc64) return true; - if (cp < 0xc66) return false; - if (cp < 0xc70) return true; - if (cp === 0xc81) return true; - if (cp < 0xc82) return false; - if (cp < 0xc84) return true; - if (cp === 0xcbc) return true; - if (cp === 0xcbe) return true; - if (cp === 0xcbf) return true; - return false; - } - if (cp < 0xd00) { - if (cp < 0xcc0) return false; - if (cp < 0xcc5) return true; - if (cp === 0xcc6) return true; - if (cp < 0xcc7) return false; - if (cp < 0xcc9) return true; - if (cp < 0xcca) return false; - if (cp < 0xccc) return true; - if (cp < 0xccc) return false; - if (cp < 0xcce) return true; - if (cp < 0xcd5) return false; - if (cp < 0xcd7) return true; - if (cp < 0xce2) return false; - if (cp < 0xce4) return true; - if (cp < 0xce6) return false; - if (cp < 0xcf0) return true; - return false; - } - if (cp < 0xd02) return true; - if (cp < 0xd02) return false; - if (cp < 0xd04) return true; - if (cp < 0xd3b) return false; - if (cp < 0xd3d) return true; - if (cp < 0xd3e) return false; - if (cp < 0xd41) return true; - if (cp < 0xd41) return false; - if (cp < 0xd45) return true; - if (cp < 0xd46) return false; - if (cp < 0xd49) return true; - if (cp < 0xd4a) return false; - if (cp < 0xd4d) return true; - if (cp === 0xd4d) return true; - if (cp === 0xd57) return true; - return false; - } - if (cp < 0x17be) { - if (cp < 0x102b) { - if (cp < 0xebb) { - if (cp < 0xde6) { - if (cp < 0xd62) return false; - if (cp < 0xd64) return true; - if (cp < 0xd66) return false; - if (cp < 0xd70) return true; - if (cp < 0xd82) return false; - if (cp < 0xd84) return true; - if (cp === 0xdca) return true; - if (cp < 0xdcf) return false; - if (cp < 0xdd2) return true; - if (cp < 0xdd2) return false; - if (cp < 0xdd5) return true; - if (cp === 0xdd6) return true; - if (cp < 0xdd8) return false; - if (cp < 0xde0) return true; - return false; - } - if (cp < 0xdf0) return true; - if (cp < 0xdf2) return false; - if (cp < 0xdf4) return true; - if (cp === 0xe31) return true; - if (cp < 0xe34) return false; - if (cp < 0xe3b) return true; - if (cp < 0xe47) return false; - if (cp < 0xe4f) return true; - if (cp < 0xe50) return false; - if (cp < 0xe5a) return true; - if (cp === 0xeb1) return true; - if (cp < 0xeb4) return false; - if (cp < 0xeba) return true; - return false; - } - if (cp < 0xf3e) { - if (cp < 0xebb) return false; - if (cp < 0xebd) return true; - if (cp < 0xec8) return false; - if (cp < 0xece) return true; - if (cp < 0xed0) return false; - if (cp < 0xeda) return true; - if (cp < 0xf18) return false; - if (cp < 0xf1a) return true; - if (cp < 0xf20) return false; - if (cp < 0xf2a) return true; - if (cp === 0xf35) return true; - if (cp === 0xf37) return true; - if (cp === 0xf39) return true; - return false; - } - if (cp < 0xf40) return true; - if (cp < 0xf71) return false; - if (cp < 0xf7f) return true; - if (cp === 0xf7f) return true; - if (cp < 0xf80) return false; - if (cp < 0xf85) return true; - if (cp < 0xf86) return false; - if (cp < 0xf88) return true; - if (cp < 0xf8d) return false; - if (cp < 0xf98) return true; - if (cp < 0xf99) return false; - if (cp < 0xfbd) return true; - if (cp === 0xfc6) return true; - return false; - } - if (cp < 0x1083) { - if (cp < 0x1040) { - if (cp < 0x102b) return false; - if (cp < 0x102d) return true; - if (cp < 0x102d) return false; - if (cp < 0x1031) return true; - if (cp === 0x1031) return true; - if (cp < 0x1032) return false; - if (cp < 0x1038) return true; - if (cp === 0x1038) return true; - if (cp < 0x1039) return false; - if (cp < 0x103b) return true; - if (cp < 0x103b) return false; - if (cp < 0x103d) return true; - if (cp < 0x103d) return false; - if (cp < 0x103f) return true; - return false; - } - if (cp < 0x104a) return true; - if (cp < 0x1056) return false; - if (cp < 0x1058) return true; - if (cp < 0x1058) return false; - if (cp < 0x105a) return true; - if (cp < 0x105e) return false; - if (cp < 0x1061) return true; - if (cp < 0x1062) return false; - if (cp < 0x1065) return true; - if (cp < 0x1067) return false; - if (cp < 0x106e) return true; - if (cp < 0x1071) return false; - if (cp < 0x1075) return true; - if (cp === 0x1082) return true; - return false; - } - if (cp < 0x135d) { - if (cp < 0x1083) return false; - if (cp < 0x1085) return true; - if (cp < 0x1085) return false; - if (cp < 0x1087) return true; - if (cp < 0x1087) return false; - if (cp < 0x108d) return true; - if (cp === 0x108d) return true; - if (cp === 0x108f) return true; - if (cp < 0x1090) return false; - if (cp < 0x109a) return true; - if (cp < 0x109a) return false; - if (cp < 0x109d) return true; - if (cp === 0x109d) return true; - return false; - } - if (cp < 0x1360) return true; - if (cp < 0x1369) return false; - if (cp < 0x1372) return true; - if (cp < 0x1712) return false; - if (cp < 0x1715) return true; - if (cp < 0x1732) return false; - if (cp < 0x1735) return true; - if (cp < 0x1752) return false; - if (cp < 0x1754) return true; - if (cp < 0x1772) return false; - if (cp < 0x1774) return true; - if (cp < 0x17b4) return false; - if (cp < 0x17b6) return true; - if (cp === 0x17b6) return true; - if (cp < 0x17b7) return false; - if (cp < 0x17be) return true; - return false; - } - if (cp < 0x1a73) { - if (cp < 0x1939) { - if (cp < 0x18a9) { - if (cp < 0x17be) return false; - if (cp < 0x17c6) return true; - if (cp === 0x17c6) return true; - if (cp < 0x17c7) return false; - if (cp < 0x17c9) return true; - if (cp < 0x17c9) return false; - if (cp < 0x17d4) return true; - if (cp === 0x17dd) return true; - if (cp < 0x17e0) return false; - if (cp < 0x17ea) return true; - if (cp < 0x180b) return false; - if (cp < 0x180e) return true; - if (cp < 0x1810) return false; - if (cp < 0x181a) return true; - return false; - } - if (cp === 0x18a9) return true; - if (cp < 0x1920) return false; - if (cp < 0x1923) return true; - if (cp < 0x1923) return false; - if (cp < 0x1927) return true; - if (cp < 0x1927) return false; - if (cp < 0x1929) return true; - if (cp < 0x1929) return false; - if (cp < 0x192c) return true; - if (cp < 0x1930) return false; - if (cp < 0x1932) return true; - if (cp === 0x1932) return true; - if (cp < 0x1933) return false; - if (cp < 0x1939) return true; - return false; - } - if (cp < 0x1a56) { - if (cp < 0x1939) return false; - if (cp < 0x193c) return true; - if (cp < 0x1946) return false; - if (cp < 0x1950) return true; - if (cp < 0x19d0) return false; - if (cp < 0x19da) return true; - if (cp === 0x19da) return true; - if (cp < 0x1a17) return false; - if (cp < 0x1a19) return true; - if (cp < 0x1a19) return false; - if (cp < 0x1a1b) return true; - if (cp === 0x1a1b) return true; - if (cp === 0x1a55) return true; - return false; - } - if (cp === 0x1a56) return true; - if (cp === 0x1a57) return true; - if (cp < 0x1a58) return false; - if (cp < 0x1a5f) return true; - if (cp === 0x1a60) return true; - if (cp === 0x1a61) return true; - if (cp === 0x1a62) return true; - if (cp < 0x1a63) return false; - if (cp < 0x1a65) return true; - if (cp < 0x1a65) return false; - if (cp < 0x1a6d) return true; - if (cp < 0x1a6d) return false; - if (cp < 0x1a73) return true; - return false; - } - if (cp < 0x1b6b) { - if (cp < 0x1b35) { - if (cp < 0x1a73) return false; - if (cp < 0x1a7d) return true; - if (cp === 0x1a7f) return true; - if (cp < 0x1a80) return false; - if (cp < 0x1a8a) return true; - if (cp < 0x1a90) return false; - if (cp < 0x1a9a) return true; - if (cp < 0x1ab0) return false; - if (cp < 0x1abe) return true; - if (cp < 0x1b00) return false; - if (cp < 0x1b04) return true; - if (cp === 0x1b04) return true; - if (cp === 0x1b34) return true; - return false; - } - if (cp === 0x1b35) return true; - if (cp < 0x1b36) return false; - if (cp < 0x1b3b) return true; - if (cp === 0x1b3b) return true; - if (cp === 0x1b3c) return true; - if (cp < 0x1b3d) return false; - if (cp < 0x1b42) return true; - if (cp === 0x1b42) return true; - if (cp < 0x1b43) return false; - if (cp < 0x1b45) return true; - if (cp < 0x1b50) return false; - if (cp < 0x1b5a) return true; - return false; - } - if (cp < 0x1bab) { - if (cp < 0x1b6b) return false; - if (cp < 0x1b74) return true; - if (cp < 0x1b80) return false; - if (cp < 0x1b82) return true; - if (cp === 0x1b82) return true; - if (cp === 0x1ba1) return true; - if (cp < 0x1ba2) return false; - if (cp < 0x1ba6) return true; - if (cp < 0x1ba6) return false; - if (cp < 0x1ba8) return true; - if (cp < 0x1ba8) return false; - if (cp < 0x1baa) return true; - if (cp === 0x1baa) return true; - return false; - } - if (cp < 0x1bae) return true; - if (cp < 0x1bb0) return false; - if (cp < 0x1bba) return true; - if (cp === 0x1be6) return true; - if (cp === 0x1be7) return true; - if (cp < 0x1be8) return false; - if (cp < 0x1bea) return true; - if (cp < 0x1bea) return false; - if (cp < 0x1bed) return true; - if (cp === 0x1bed) return true; - if (cp === 0x1bee) return true; - if (cp < 0x1bef) return false; - if (cp < 0x1bf2) return true; - return false; - } - if (cp < 0x111d0) { - if (cp < 0xaa43) { - if (cp < 0xa69e) { - if (cp < 0x1dc0) { - if (cp < 0x1cd4) { - if (cp < 0x1bf2) return false; - if (cp < 0x1bf4) return true; - if (cp < 0x1c24) return false; - if (cp < 0x1c2c) return true; - if (cp < 0x1c2c) return false; - if (cp < 0x1c34) return true; - if (cp < 0x1c34) return false; - if (cp < 0x1c36) return true; - if (cp < 0x1c36) return false; - if (cp < 0x1c38) return true; - if (cp < 0x1c40) return false; - if (cp < 0x1c4a) return true; - if (cp < 0x1c50) return false; - if (cp < 0x1c5a) return true; - if (cp < 0x1cd0) return false; - if (cp < 0x1cd3) return true; - return false; - } - if (cp < 0x1ce1) return true; - if (cp === 0x1ce1) return true; - if (cp < 0x1ce2) return false; - if (cp < 0x1ce9) return true; - if (cp === 0x1ced) return true; - if (cp < 0x1cf2) return false; - if (cp < 0x1cf4) return true; - if (cp === 0x1cf4) return true; - if (cp === 0x1cf7) return true; - if (cp < 0x1cf8) return false; - if (cp < 0x1cfa) return true; - return false; - } - if (cp < 0x2d7f) { - if (cp < 0x1dc0) return false; - if (cp < 0x1dfa) return true; - if (cp < 0x1dfb) return false; - if (cp < 0x1e00) return true; - if (cp < 0x203f) return false; - if (cp < 0x2041) return true; - if (cp === 0x2054) return true; - if (cp < 0x20d0) return false; - if (cp < 0x20dd) return true; - if (cp === 0x20e1) return true; - if (cp < 0x20e5) return false; - if (cp < 0x20f1) return true; - if (cp < 0x2cef) return false; - if (cp < 0x2cf2) return true; - return false; - } - if (cp === 0x2d7f) return true; - if (cp < 0x2de0) return false; - if (cp < 0x2e00) return true; - if (cp < 0x302a) return false; - if (cp < 0x302e) return true; - if (cp < 0x302e) return false; - if (cp < 0x3030) return true; - if (cp < 0x3099) return false; - if (cp < 0x309b) return true; - if (cp < 0xa620) return false; - if (cp < 0xa62a) return true; - if (cp === 0xa66f) return true; - if (cp < 0xa674) return false; - if (cp < 0xa67e) return true; - return false; - } - if (cp < 0xa952) { - if (cp < 0xa880) { - if (cp < 0xa69e) return false; - if (cp < 0xa6a0) return true; - if (cp < 0xa6f0) return false; - if (cp < 0xa6f2) return true; - if (cp === 0xa802) return true; - if (cp === 0xa806) return true; - if (cp === 0xa80b) return true; - if (cp < 0xa823) return false; - if (cp < 0xa825) return true; - if (cp < 0xa825) return false; - if (cp < 0xa827) return true; - if (cp === 0xa827) return true; - return false; - } - if (cp < 0xa882) return true; - if (cp < 0xa8b4) return false; - if (cp < 0xa8c4) return true; - if (cp < 0xa8c4) return false; - if (cp < 0xa8c6) return true; - if (cp < 0xa8d0) return false; - if (cp < 0xa8da) return true; - if (cp < 0xa8e0) return false; - if (cp < 0xa8f2) return true; - if (cp < 0xa900) return false; - if (cp < 0xa90a) return true; - if (cp < 0xa926) return false; - if (cp < 0xa92e) return true; - if (cp < 0xa947) return false; - if (cp < 0xa952) return true; - return false; - } - if (cp < 0xa9bd) { - if (cp < 0xa952) return false; - if (cp < 0xa954) return true; - if (cp < 0xa980) return false; - if (cp < 0xa983) return true; - if (cp === 0xa983) return true; - if (cp === 0xa9b3) return true; - if (cp < 0xa9b4) return false; - if (cp < 0xa9b6) return true; - if (cp < 0xa9b6) return false; - if (cp < 0xa9ba) return true; - if (cp < 0xa9ba) return false; - if (cp < 0xa9bc) return true; - if (cp === 0xa9bc) return true; - return false; - } - if (cp < 0xa9c1) return true; - if (cp < 0xa9d0) return false; - if (cp < 0xa9da) return true; - if (cp === 0xa9e5) return true; - if (cp < 0xa9f0) return false; - if (cp < 0xa9fa) return true; - if (cp < 0xaa29) return false; - if (cp < 0xaa2f) return true; - if (cp < 0xaa2f) return false; - if (cp < 0xaa31) return true; - if (cp < 0xaa31) return false; - if (cp < 0xaa33) return true; - if (cp < 0xaa33) return false; - if (cp < 0xaa35) return true; - if (cp < 0xaa35) return false; - if (cp < 0xaa37) return true; - return false; - } - if (cp < 0x102e0) { - if (cp < 0xaaf6) { - if (cp < 0xaab2) { - if (cp === 0xaa43) return true; - if (cp === 0xaa4c) return true; - if (cp === 0xaa4d) return true; - if (cp < 0xaa50) return false; - if (cp < 0xaa5a) return true; - if (cp === 0xaa7b) return true; - if (cp === 0xaa7c) return true; - if (cp === 0xaa7d) return true; - if (cp === 0xaab0) return true; - return false; - } - if (cp < 0xaab5) return true; - if (cp < 0xaab7) return false; - if (cp < 0xaab9) return true; - if (cp < 0xaabe) return false; - if (cp < 0xaac0) return true; - if (cp === 0xaac1) return true; - if (cp === 0xaaeb) return true; - if (cp < 0xaaec) return false; - if (cp < 0xaaee) return true; - if (cp < 0xaaee) return false; - if (cp < 0xaaf0) return true; - if (cp === 0xaaf5) return true; - return false; - } - if (cp < 0xabf0) { - if (cp === 0xaaf6) return true; - if (cp < 0xabe3) return false; - if (cp < 0xabe5) return true; - if (cp === 0xabe5) return true; - if (cp < 0xabe6) return false; - if (cp < 0xabe8) return true; - if (cp === 0xabe8) return true; - if (cp < 0xabe9) return false; - if (cp < 0xabeb) return true; - if (cp === 0xabec) return true; - if (cp === 0xabed) return true; - return false; - } - if (cp < 0xabfa) return true; - if (cp === 0xfb1e) return true; - if (cp < 0xfe00) return false; - if (cp < 0xfe10) return true; - if (cp < 0xfe20) return false; - if (cp < 0xfe30) return true; - if (cp < 0xfe33) return false; - if (cp < 0xfe35) return true; - if (cp < 0xfe4d) return false; - if (cp < 0xfe50) return true; - if (cp < 0xff10) return false; - if (cp < 0xff1a) return true; - if (cp === 0xff3f) return true; - if (cp === 0x101fd) return true; - return false; - } - if (cp < 0x110b0) { - if (cp < 0x10ae5) { - if (cp === 0x102e0) return true; - if (cp < 0x10376) return false; - if (cp < 0x1037b) return true; - if (cp < 0x104a0) return false; - if (cp < 0x104aa) return true; - if (cp < 0x10a01) return false; - if (cp < 0x10a04) return true; - if (cp < 0x10a05) return false; - if (cp < 0x10a07) return true; - if (cp < 0x10a0c) return false; - if (cp < 0x10a10) return true; - if (cp < 0x10a38) return false; - if (cp < 0x10a3b) return true; - if (cp === 0x10a3f) return true; - return false; - } - if (cp < 0x10ae7) return true; - if (cp === 0x11000) return true; - if (cp === 0x11001) return true; - if (cp === 0x11002) return true; - if (cp < 0x11038) return false; - if (cp < 0x11047) return true; - if (cp < 0x11066) return false; - if (cp < 0x11070) return true; - if (cp < 0x1107f) return false; - if (cp < 0x11082) return true; - if (cp === 0x11082) return true; - return false; - } - if (cp < 0x1112d) { - if (cp < 0x110b0) return false; - if (cp < 0x110b3) return true; - if (cp < 0x110b3) return false; - if (cp < 0x110b7) return true; - if (cp < 0x110b7) return false; - if (cp < 0x110b9) return true; - if (cp < 0x110b9) return false; - if (cp < 0x110bb) return true; - if (cp < 0x110f0) return false; - if (cp < 0x110fa) return true; - if (cp < 0x11100) return false; - if (cp < 0x11103) return true; - if (cp < 0x11127) return false; - if (cp < 0x1112c) return true; - if (cp === 0x1112c) return true; - return false; - } - if (cp < 0x11135) return true; - if (cp < 0x11136) return false; - if (cp < 0x11140) return true; - if (cp === 0x11173) return true; - if (cp < 0x11180) return false; - if (cp < 0x11182) return true; - if (cp === 0x11182) return true; - if (cp < 0x111b3) return false; - if (cp < 0x111b6) return true; - if (cp < 0x111b6) return false; - if (cp < 0x111bf) return true; - if (cp < 0x111bf) return false; - if (cp < 0x111c1) return true; - if (cp < 0x111ca) return false; - if (cp < 0x111cd) return true; - return false; - } - if (cp < 0x11726) { - if (cp < 0x114b3) { - if (cp < 0x11340) { - if (cp < 0x112df) { - if (cp < 0x111d0) return false; - if (cp < 0x111da) return true; - if (cp < 0x1122c) return false; - if (cp < 0x1122f) return true; - if (cp < 0x1122f) return false; - if (cp < 0x11232) return true; - if (cp < 0x11232) return false; - if (cp < 0x11234) return true; - if (cp === 0x11234) return true; - if (cp === 0x11235) return true; - if (cp < 0x11236) return false; - if (cp < 0x11238) return true; - if (cp === 0x1123e) return true; - return false; - } - if (cp === 0x112df) return true; - if (cp < 0x112e0) return false; - if (cp < 0x112e3) return true; - if (cp < 0x112e3) return false; - if (cp < 0x112eb) return true; - if (cp < 0x112f0) return false; - if (cp < 0x112fa) return true; - if (cp < 0x11300) return false; - if (cp < 0x11302) return true; - if (cp < 0x11302) return false; - if (cp < 0x11304) return true; - if (cp === 0x1133c) return true; - if (cp < 0x1133e) return false; - if (cp < 0x11340) return true; - return false; - } - if (cp < 0x11435) { - if (cp === 0x11340) return true; - if (cp < 0x11341) return false; - if (cp < 0x11345) return true; - if (cp < 0x11347) return false; - if (cp < 0x11349) return true; - if (cp < 0x1134b) return false; - if (cp < 0x1134e) return true; - if (cp === 0x11357) return true; - if (cp < 0x11362) return false; - if (cp < 0x11364) return true; - if (cp < 0x11366) return false; - if (cp < 0x1136d) return true; - if (cp < 0x11370) return false; - if (cp < 0x11375) return true; - return false; - } - if (cp < 0x11438) return true; - if (cp < 0x11438) return false; - if (cp < 0x11440) return true; - if (cp < 0x11440) return false; - if (cp < 0x11442) return true; - if (cp < 0x11442) return false; - if (cp < 0x11445) return true; - if (cp === 0x11445) return true; - if (cp === 0x11446) return true; - if (cp < 0x11450) return false; - if (cp < 0x1145a) return true; - if (cp < 0x114b0) return false; - if (cp < 0x114b3) return true; - return false; - } - if (cp < 0x11633) { - if (cp < 0x115af) { - if (cp < 0x114b3) return false; - if (cp < 0x114b9) return true; - if (cp === 0x114b9) return true; - if (cp === 0x114ba) return true; - if (cp < 0x114bb) return false; - if (cp < 0x114bf) return true; - if (cp < 0x114bf) return false; - if (cp < 0x114c1) return true; - if (cp === 0x114c1) return true; - if (cp < 0x114c2) return false; - if (cp < 0x114c4) return true; - if (cp < 0x114d0) return false; - if (cp < 0x114da) return true; - return false; - } - if (cp < 0x115b2) return true; - if (cp < 0x115b2) return false; - if (cp < 0x115b6) return true; - if (cp < 0x115b8) return false; - if (cp < 0x115bc) return true; - if (cp < 0x115bc) return false; - if (cp < 0x115be) return true; - if (cp === 0x115be) return true; - if (cp < 0x115bf) return false; - if (cp < 0x115c1) return true; - if (cp < 0x115dc) return false; - if (cp < 0x115de) return true; - if (cp < 0x11630) return false; - if (cp < 0x11633) return true; - return false; - } - if (cp < 0x116ad) { - if (cp < 0x11633) return false; - if (cp < 0x1163b) return true; - if (cp < 0x1163b) return false; - if (cp < 0x1163d) return true; - if (cp === 0x1163d) return true; - if (cp === 0x1163e) return true; - if (cp < 0x1163f) return false; - if (cp < 0x11641) return true; - if (cp < 0x11650) return false; - if (cp < 0x1165a) return true; - if (cp === 0x116ab) return true; - if (cp === 0x116ac) return true; - return false; - } - if (cp === 0x116ad) return true; - if (cp < 0x116ae) return false; - if (cp < 0x116b0) return true; - if (cp < 0x116b0) return false; - if (cp < 0x116b6) return true; - if (cp === 0x116b6) return true; - if (cp === 0x116b7) return true; - if (cp < 0x116c0) return false; - if (cp < 0x116ca) return true; - if (cp < 0x1171d) return false; - if (cp < 0x11720) return true; - if (cp < 0x11720) return false; - if (cp < 0x11722) return true; - if (cp < 0x11722) return false; - if (cp < 0x11726) return true; - return false; - } - if (cp < 0x11d3f) { - if (cp < 0x11a98) { - if (cp < 0x11a39) { - if (cp === 0x11726) return true; - if (cp < 0x11727) return false; - if (cp < 0x1172c) return true; - if (cp < 0x11730) return false; - if (cp < 0x1173a) return true; - if (cp < 0x118e0) return false; - if (cp < 0x118ea) return true; - if (cp < 0x11a01) return false; - if (cp < 0x11a07) return true; - if (cp < 0x11a07) return false; - if (cp < 0x11a09) return true; - if (cp < 0x11a09) return false; - if (cp < 0x11a0b) return true; - if (cp < 0x11a33) return false; - if (cp < 0x11a39) return true; - return false; - } - if (cp === 0x11a39) return true; - if (cp < 0x11a3b) return false; - if (cp < 0x11a3f) return true; - if (cp === 0x11a47) return true; - if (cp < 0x11a51) return false; - if (cp < 0x11a57) return true; - if (cp < 0x11a57) return false; - if (cp < 0x11a59) return true; - if (cp < 0x11a59) return false; - if (cp < 0x11a5c) return true; - if (cp < 0x11a8a) return false; - if (cp < 0x11a97) return true; - if (cp === 0x11a97) return true; - return false; - } - if (cp < 0x11ca9) { - if (cp < 0x11a98) return false; - if (cp < 0x11a9a) return true; - if (cp === 0x11c2f) return true; - if (cp < 0x11c30) return false; - if (cp < 0x11c37) return true; - if (cp < 0x11c38) return false; - if (cp < 0x11c3e) return true; - if (cp === 0x11c3e) return true; - if (cp === 0x11c3f) return true; - if (cp < 0x11c50) return false; - if (cp < 0x11c5a) return true; - if (cp < 0x11c92) return false; - if (cp < 0x11ca8) return true; - return false; - } - if (cp === 0x11ca9) return true; - if (cp < 0x11caa) return false; - if (cp < 0x11cb1) return true; - if (cp === 0x11cb1) return true; - if (cp < 0x11cb2) return false; - if (cp < 0x11cb4) return true; - if (cp === 0x11cb4) return true; - if (cp < 0x11cb5) return false; - if (cp < 0x11cb7) return true; - if (cp < 0x11d31) return false; - if (cp < 0x11d37) return true; - if (cp === 0x11d3a) return true; - if (cp < 0x11d3c) return false; - if (cp < 0x11d3e) return true; - return false; - } - if (cp < 0x1d242) { - if (cp < 0x16f8f) { - if (cp < 0x11d3f) return false; - if (cp < 0x11d46) return true; - if (cp === 0x11d47) return true; - if (cp < 0x11d50) return false; - if (cp < 0x11d5a) return true; - if (cp < 0x16a60) return false; - if (cp < 0x16a6a) return true; - if (cp < 0x16af0) return false; - if (cp < 0x16af5) return true; - if (cp < 0x16b30) return false; - if (cp < 0x16b37) return true; - if (cp < 0x16b50) return false; - if (cp < 0x16b5a) return true; - if (cp < 0x16f51) return false; - if (cp < 0x16f7f) return true; - return false; - } - if (cp < 0x16f93) return true; - if (cp < 0x1bc9d) return false; - if (cp < 0x1bc9f) return true; - if (cp < 0x1d165) return false; - if (cp < 0x1d167) return true; - if (cp < 0x1d167) return false; - if (cp < 0x1d16a) return true; - if (cp < 0x1d16d) return false; - if (cp < 0x1d173) return true; - if (cp < 0x1d17b) return false; - if (cp < 0x1d183) return true; - if (cp < 0x1d185) return false; - if (cp < 0x1d18c) return true; - if (cp < 0x1d1aa) return false; - if (cp < 0x1d1ae) return true; - return false; - } - if (cp < 0x1e000) { - if (cp < 0x1d242) return false; - if (cp < 0x1d245) return true; - if (cp < 0x1d7ce) return false; - if (cp < 0x1d800) return true; - if (cp < 0x1da00) return false; - if (cp < 0x1da37) return true; - if (cp < 0x1da3b) return false; - if (cp < 0x1da6d) return true; - if (cp === 0x1da75) return true; - if (cp === 0x1da84) return true; - if (cp < 0x1da9b) return false; - if (cp < 0x1daa0) return true; - if (cp < 0x1daa1) return false; - if (cp < 0x1dab0) return true; - return false; - } - if (cp < 0x1e007) return true; - if (cp < 0x1e008) return false; - if (cp < 0x1e019) return true; - if (cp < 0x1e01b) return false; - if (cp < 0x1e022) return true; - if (cp < 0x1e023) return false; - if (cp < 0x1e025) return true; - if (cp < 0x1e026) return false; - if (cp < 0x1e02b) return true; - if (cp < 0x1e8d0) return false; - if (cp < 0x1e8d7) return true; - if (cp < 0x1e944) return false; - if (cp < 0x1e94b) return true; - if (cp < 0x1e950) return false; - if (cp < 0x1e95a) return true; - if (cp < 0xe0100) return false; - if (cp < 0xe01f0) return true; - return false; -} - -const PropertyData = { - $LONE: new Set(["ASCII", "ASCII_Hex_Digit", "AHex", "Alphabetic", "Alpha", "Any", "Assigned", "Bidi_Control", "Bidi_C", "Bidi_Mirrored", "Bidi_M", "Case_Ignorable", "CI", "Cased", "Changes_When_Casefolded", "CWCF", "Changes_When_Casemapped", "CWCM", "Changes_When_Lowercased", "CWL", "Changes_When_NFKC_Casefolded", "CWKCF", "Changes_When_Titlecased", "CWT", "Changes_When_Uppercased", "CWU", "Dash", "Default_Ignorable_Code_Point", "DI", "Deprecated", "Dep", "Diacritic", "Dia", "Emoji", "Emoji_Component", "Emoji_Modifier", "Emoji_Modifier_Base", "Emoji_Presentation", "Extender", "Ext", "Grapheme_Base", "Gr_Base", "Grapheme_Extend", "Gr_Ext", "Hex_Digit", "Hex", "IDS_Binary_Operator", "IDSB", "IDS_Trinary_Operator", "IDST", "ID_Continue", "IDC", "ID_Start", "IDS", "Ideographic", "Ideo", "Join_Control", "Join_C", "Logical_Order_Exception", "LOE", "Lowercase", "Lower", "Math", "Noncharacter_Code_Point", "NChar", "Pattern_Syntax", "Pat_Syn", "Pattern_White_Space", "Pat_WS", "Quotation_Mark", "QMark", "Radical", "Regional_Indicator", "RI", "Sentence_Terminal", "STerm", "Soft_Dotted", "SD", "Terminal_Punctuation", "Term", "Unified_Ideograph", "UIdeo", "Uppercase", "Upper", "Variation_Selector", "VS", "White_Space", "space", "XID_Continue", "XIDC", "XID_Start", "XIDS"]), - General_Category: new Set(["Cased_Letter", "LC", "Close_Punctuation", "Pe", "Connector_Punctuation", "Pc", "Control", "Cc", "cntrl", "Currency_Symbol", "Sc", "Dash_Punctuation", "Pd", "Decimal_Number", "Nd", "digit", "Enclosing_Mark", "Me", "Final_Punctuation", "Pf", "Format", "Cf", "Initial_Punctuation", "Pi", "Letter", "L", "Letter_Number", "Nl", "Line_Separator", "Zl", "Lowercase_Letter", "Ll", "Mark", "M", "Combining_Mark", "Math_Symbol", "Sm", "Modifier_Letter", "Lm", "Modifier_Symbol", "Sk", "Nonspacing_Mark", "Mn", "Number", "N", "Open_Punctuation", "Ps", "Other", "C", "Other_Letter", "Lo", "Other_Number", "No", "Other_Punctuation", "Po", "Other_Symbol", "So", "Paragraph_Separator", "Zp", "Private_Use", "Co", "Punctuation", "P", "punct", "Separator", "Z", "Space_Separator", "Zs", "Spacing_Mark", "Mc", "Surrogate", "Cs", "Symbol", "S", "Titlecase_Letter", "Lt", "Unassigned", "Cn", "Uppercase_Letter", "Lu"]), - Script: new Set(["Adlam", "Adlm", "Ahom", "Anatolian_Hieroglyphs", "Hluw", "Arabic", "Arab", "Armenian", "Armn", "Avestan", "Avst", "Balinese", "Bali", "Bamum", "Bamu", "Bassa_Vah", "Bass", "Batak", "Batk", "Bengali", "Beng", "Bhaiksuki", "Bhks", "Bopomofo", "Bopo", "Brahmi", "Brah", "Braille", "Brai", "Buginese", "Bugi", "Buhid", "Buhd", "Canadian_Aboriginal", "Cans", "Carian", "Cari", "Caucasian_Albanian", "Aghb", "Chakma", "Cakm", "Cham", "Cherokee", "Cher", "Common", "Zyyy", "Coptic", "Copt", "Qaac", "Cuneiform", "Xsux", "Cypriot", "Cprt", "Cyrillic", "Cyrl", "Deseret", "Dsrt", "Devanagari", "Deva", "Duployan", "Dupl", "Egyptian_Hieroglyphs", "Egyp", "Elbasan", "Elba", "Ethiopic", "Ethi", "Georgian", "Geor", "Glagolitic", "Glag", "Gothic", "Goth", "Grantha", "Gran", "Greek", "Grek", "Gujarati", "Gujr", "Gurmukhi", "Guru", "Han", "Hani", "Hangul", "Hang", "Hanunoo", "Hano", "Hatran", "Hatr", "Hebrew", "Hebr", "Hiragana", "Hira", "Imperial_Aramaic", "Armi", "Inherited", "Zinh", "Qaai", "Inscriptional_Pahlavi", "Phli", "Inscriptional_Parthian", "Prti", "Javanese", "Java", "Kaithi", "Kthi", "Kannada", "Knda", "Katakana", "Kana", "Kayah_Li", "Kali", "Kharoshthi", "Khar", "Khmer", "Khmr", "Khojki", "Khoj", "Khudawadi", "Sind", "Lao", "Laoo", "Latin", "Latn", "Lepcha", "Lepc", "Limbu", "Limb", "Linear_A", "Lina", "Linear_B", "Linb", "Lisu", "Lycian", "Lyci", "Lydian", "Lydi", "Mahajani", "Mahj", "Malayalam", "Mlym", "Mandaic", "Mand", "Manichaean", "Mani", "Marchen", "Marc", "Masaram_Gondi", "Gonm", "Meetei_Mayek", "Mtei", "Mende_Kikakui", "Mend", "Meroitic_Cursive", "Merc", "Meroitic_Hieroglyphs", "Mero", "Miao", "Plrd", "Modi", "Mongolian", "Mong", "Mro", "Mroo", "Multani", "Mult", "Myanmar", "Mymr", "Nabataean", "Nbat", "New_Tai_Lue", "Talu", "Newa", "Nko", "Nkoo", "Nushu", "Nshu", "Ogham", "Ogam", "Ol_Chiki", "Olck", "Old_Hungarian", "Hung", "Old_Italic", "Ital", "Old_North_Arabian", "Narb", "Old_Permic", "Perm", "Old_Persian", "Xpeo", "Old_South_Arabian", "Sarb", "Old_Turkic", "Orkh", "Oriya", "Orya", "Osage", "Osge", "Osmanya", "Osma", "Pahawh_Hmong", "Hmng", "Palmyrene", "Palm", "Pau_Cin_Hau", "Pauc", "Phags_Pa", "Phag", "Phoenician", "Phnx", "Psalter_Pahlavi", "Phlp", "Rejang", "Rjng", "Runic", "Runr", "Samaritan", "Samr", "Saurashtra", "Saur", "Sharada", "Shrd", "Shavian", "Shaw", "Siddham", "Sidd", "SignWriting", "Sgnw", "Sinhala", "Sinh", "Sora_Sompeng", "Sora", "Soyombo", "Soyo", "Sundanese", "Sund", "Syloti_Nagri", "Sylo", "Syriac", "Syrc", "Tagalog", "Tglg", "Tagbanwa", "Tagb", "Tai_Le", "Tale", "Tai_Tham", "Lana", "Tai_Viet", "Tavt", "Takri", "Takr", "Tamil", "Taml", "Tangut", "Tang", "Telugu", "Telu", "Thaana", "Thaa", "Thai", "Tibetan", "Tibt", "Tifinagh", "Tfng", "Tirhuta", "Tirh", "Ugaritic", "Ugar", "Vai", "Vaii", "Warang_Citi", "Wara", "Yi", "Yiii", "Zanabazar_Square", "Zanb"]) -}; -PropertyData.gc = PropertyData.General_Category; -PropertyData.sc = PropertyData.Script_Extensions = PropertyData.scx = PropertyData.Script; - -const Backspace = 0x08; -const CharacterTabulation = 0x09; -const LineFeed = 0x0a; -const LineTabulation = 0x0b; -const FormFeed = 0x0c; -const CarriageReturn = 0x0d; -const ExclamationMark = 0x21; -const DollarSign = 0x24; -const LeftParenthesis = 0x28; -const RightParenthesis = 0x29; -const Asterisk = 0x2a; -const PlusSign = 0x2b; -const Comma = 0x2c; -const HyphenMinus = 0x2d; -const FullStop = 0x2e; -const Solidus = 0x2f; -const DigitZero = 0x30; -const DigitOne = 0x31; -const DigitSeven = 0x37; -const DigitNine = 0x39; -const Colon = 0x3a; -const LessThanSign = 0x3c; -const EqualsSign = 0x3d; -const GreaterThanSign = 0x3e; -const QuestionMark = 0x3f; -const LatinCapitalLetterA = 0x41; -const LatinCapitalLetterB = 0x42; -const LatinCapitalLetterD = 0x44; -const LatinCapitalLetterF = 0x46; -const LatinCapitalLetterP = 0x50; -const LatinCapitalLetterS = 0x53; -const LatinCapitalLetterW = 0x57; -const LatinCapitalLetterZ = 0x5a; -const LowLine = 0x5f; -const LatinSmallLetterA = 0x61; -const LatinSmallLetterB = 0x62; -const LatinSmallLetterC = 0x63; -const LatinSmallLetterD = 0x64; -const LatinSmallLetterF = 0x66; -const LatinSmallLetterG = 0x67; -const LatinSmallLetterI = 0x69; -const LatinSmallLetterK = 0x6b; -const LatinSmallLetterM = 0x6d; -const LatinSmallLetterN = 0x6e; -const LatinSmallLetterP = 0x70; -const LatinSmallLetterR = 0x72; -const LatinSmallLetterS = 0x73; -const LatinSmallLetterT = 0x74; -const LatinSmallLetterU = 0x75; -const LatinSmallLetterV = 0x76; -const LatinSmallLetterW = 0x77; -const LatinSmallLetterX = 0x78; -const LatinSmallLetterY = 0x79; -const LatinSmallLetterZ = 0x7a; -const LeftSquareBracket = 0x5b; -const ReverseSolidus = 0x5c; -const RightSquareBracket = 0x5d; -const CircumflexAccent = 0x5e; -const LeftCurlyBracket = 0x7b; -const VerticalLine = 0x7c; -const RightCurlyBracket = 0x7d; -const ZeroWidthNonJoiner = 0x200c; -const ZeroWidthJoiner = 0x200d; -const LineSeparator = 0x2028; -const ParagraphSeparator = 0x2029; -const MinCodePoint = 0x00; -const MaxCodePoint = 0x10ffff; -function isLatinLetter(code) { - return code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ || code >= LatinSmallLetterA && code <= LatinSmallLetterZ; -} -function isDecimalDigit(code) { - return code >= DigitZero && code <= DigitNine; -} -function isOctalDigit(code) { - return code >= DigitZero && code <= DigitSeven; -} -function isHexDigit(code) { - return code >= DigitZero && code <= DigitNine || code >= LatinCapitalLetterA && code <= LatinCapitalLetterF || code >= LatinSmallLetterA && code <= LatinSmallLetterF; -} -function isLineTerminator(code) { - return code === LineFeed || code === CarriageReturn || code === LineSeparator || code === ParagraphSeparator; -} -function isValidUnicode(code) { - return code >= MinCodePoint && code <= MaxCodePoint; -} -function digitToInt(code) { - if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) { - return code - LatinSmallLetterA + 10; - } - if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) { - return code - LatinCapitalLetterA + 10; - } - return code - DigitZero; -} - -function isSyntaxCharacter(cp) { - return cp === CircumflexAccent || cp === DollarSign || cp === ReverseSolidus || cp === FullStop || cp === Asterisk || cp === PlusSign || cp === QuestionMark || cp === LeftParenthesis || cp === RightParenthesis || cp === LeftSquareBracket || cp === RightSquareBracket || cp === LeftCurlyBracket || cp === RightCurlyBracket || cp === VerticalLine; -} -function isRegExpIdentifierStart(cp) { - return isIdStart(cp) || cp === DollarSign || cp === LowLine; -} -function isRegExpIdentifierPart(cp) { - return isIdContinue(cp) || cp === DollarSign || cp === LowLine || cp === ZeroWidthNonJoiner || cp === ZeroWidthJoiner; -} -function isUnicodePropertyNameCharacter(cp) { - return isLatinLetter(cp) || cp === LowLine; -} -function isUnicodePropertyValueCharacter(cp) { - return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp); -} -function isValidUnicodeProperty(name, value) { - return PropertyData.hasOwnProperty(name) && PropertyData[name].has(value); -} -function isValidUnicodePropertyName(name) { - return PropertyData.$LONE.has(name); -} -class RegExpValidator { - constructor(options) { - this._reader = new Reader(); - this._uFlag = false; - this._nFlag = false; - this._lastIntValue = 0; - this._lastMinValue = 0; - this._lastMaxValue = 0; - this._lastStrValue = ""; - this._lastKeyValue = ""; - this._lastValValue = ""; - this._lastAssertionIsQuantifiable = false; - this._numCapturingParens = 0; - this._groupNames = new Set(); - this._backreferenceNames = new Set(); - this._options = options || {}; - } - validateLiteral(source) { - let start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - let end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : source.length; - - this._uFlag = this._nFlag = false; - this.reset(source, start, end); - this.onLiteralEnter(start); - if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) { - const flagStart = this.index; - const uFlag = source.indexOf("u", flagStart) !== -1; - this.validateFlags(source, flagStart, end); - this.validatePattern(source, start + 1, flagStart - 1, uFlag); - } else if (start >= end) { - this.raise("Empty"); - } else { - const c = String.fromCodePoint(this.currentCodePoint); - this.raise(`Unexpected character '${c}'`); - } - this.onLiteralLeave(start, end); - } - validateFlags(source) { - let start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - let end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : source.length; - - const existingFlags = new Set(); - let global = false; - let ignoreCase = false; - let multiline = false; - let sticky = false; - let unicode = false; - let dotAll = false; - for (let i = start; i < end; ++i) { - const flag = source.charCodeAt(i); - if (existingFlags.has(flag)) { - this.raise(`Duplicated flag '${source[i]}'`); - } - existingFlags.add(flag); - if (flag === LatinSmallLetterG) { - global = true; - } else if (flag === LatinSmallLetterI) { - ignoreCase = true; - } else if (flag === LatinSmallLetterM) { - multiline = true; - } else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) { - unicode = true; - } else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) { - sticky = true; - } else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) { - dotAll = true; - } else { - this.raise(`Invalid flag '${source[i]}'`); - } - } - this.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll); - } - validatePattern(source) { - let start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - let end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : source.length; - let uFlag = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - this._uFlag = uFlag && this.ecmaVersion >= 2015; - this._nFlag = uFlag && this.ecmaVersion >= 2018; - this.reset(source, start, end); - this.pattern(); - if (!this._nFlag && this.ecmaVersion >= 2018 && this._groupNames.size > 0) { - this._nFlag = true; - this.rewind(start); - this.pattern(); - } - } - get strict() { - return Boolean(this._options.strict || this._uFlag); - } - get ecmaVersion() { - return this._options.ecmaVersion || 2018; - } - onLiteralEnter(start) { - if (this._options.onLiteralEnter) { - this._options.onLiteralEnter(start); - } - } - onLiteralLeave(start, end) { - if (this._options.onLiteralLeave) { - this._options.onLiteralLeave(start, end); - } - } - onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll) { - if (this._options.onFlags) { - this._options.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll); - } - } - onPatternEnter(start) { - if (this._options.onPatternEnter) { - this._options.onPatternEnter(start); - } - } - onPatternLeave(start, end) { - if (this._options.onPatternLeave) { - this._options.onPatternLeave(start, end); - } - } - onDisjunctionEnter(start) { - if (this._options.onDisjunctionEnter) { - this._options.onDisjunctionEnter(start); - } - } - onDisjunctionLeave(start, end) { - if (this._options.onDisjunctionLeave) { - this._options.onDisjunctionLeave(start, end); - } - } - onAlternativeEnter(start, index) { - if (this._options.onAlternativeEnter) { - this._options.onAlternativeEnter(start, index); - } - } - onAlternativeLeave(start, end, index) { - if (this._options.onAlternativeLeave) { - this._options.onAlternativeLeave(start, end, index); - } - } - onGroupEnter(start) { - if (this._options.onGroupEnter) { - this._options.onGroupEnter(start); - } - } - onGroupLeave(start, end) { - if (this._options.onGroupLeave) { - this._options.onGroupLeave(start, end); - } - } - onCapturingGroupEnter(start, name) { - if (this._options.onCapturingGroupEnter) { - this._options.onCapturingGroupEnter(start, name); - } - } - onCapturingGroupLeave(start, end, name) { - if (this._options.onCapturingGroupLeave) { - this._options.onCapturingGroupLeave(start, end, name); - } - } - onQuantifier(start, end, min, max, greedy) { - if (this._options.onQuantifier) { - this._options.onQuantifier(start, end, min, max, greedy); - } - } - onLookaroundAssertionEnter(start, kind, negate) { - if (this._options.onLookaroundAssertionEnter) { - this._options.onLookaroundAssertionEnter(start, kind, negate); - } - } - onLookaroundAssertionLeave(start, end, kind, negate) { - if (this._options.onLookaroundAssertionLeave) { - this._options.onLookaroundAssertionLeave(start, end, kind, negate); - } - } - onEdgeAssertion(start, end, kind) { - if (this._options.onEdgeAssertion) { - this._options.onEdgeAssertion(start, end, kind); - } - } - onWordBoundaryAssertion(start, end, kind, negate) { - if (this._options.onWordBoundaryAssertion) { - this._options.onWordBoundaryAssertion(start, end, kind, negate); - } - } - onAnyCharacterSet(start, end, kind) { - if (this._options.onAnyCharacterSet) { - this._options.onAnyCharacterSet(start, end, kind); - } - } - onEscapeCharacterSet(start, end, kind, negate) { - if (this._options.onEscapeCharacterSet) { - this._options.onEscapeCharacterSet(start, end, kind, negate); - } - } - onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) { - if (this._options.onUnicodePropertyCharacterSet) { - this._options.onUnicodePropertyCharacterSet(start, end, kind, key, value, negate); - } - } - onCharacter(start, end, value) { - if (this._options.onCharacter) { - this._options.onCharacter(start, end, value); - } - } - onBackreference(start, end, ref) { - if (this._options.onBackreference) { - this._options.onBackreference(start, end, ref); - } - } - onCharacterClassEnter(start, negate) { - if (this._options.onCharacterClassEnter) { - this._options.onCharacterClassEnter(start, negate); - } - } - onCharacterClassLeave(start, end, negate) { - if (this._options.onCharacterClassLeave) { - this._options.onCharacterClassLeave(start, end, negate); - } - } - onCharacterClassRange(start, end, min, max) { - if (this._options.onCharacterClassRange) { - this._options.onCharacterClassRange(start, end, min, max); - } - } - get source() { - return this._reader.source; - } - get index() { - return this._reader.index; - } - get currentCodePoint() { - return this._reader.currentCodePoint; - } - get nextCodePoint() { - return this._reader.nextCodePoint; - } - get nextCodePoint2() { - return this._reader.nextCodePoint2; - } - get nextCodePoint3() { - return this._reader.nextCodePoint3; - } - reset(source, start, end) { - this._reader.reset(source, start, end, this._uFlag); - } - rewind(index) { - this._reader.rewind(index); - } - advance() { - this._reader.advance(); - } - eat(cp) { - return this._reader.eat(cp); - } - eat2(cp1, cp2) { - return this._reader.eat2(cp1, cp2); - } - eat3(cp1, cp2, cp3) { - return this._reader.eat3(cp1, cp2, cp3); - } - raise(message) { - throw new RegExpSyntaxError(this.source, this._uFlag, this.index, message); - } - eatRegExpBody() { - const start = this.index; - let inClass = false; - let escaped = false; - for (;;) { - const cp = this.currentCodePoint; - if (cp === -1 || isLineTerminator(cp)) { - const kind = inClass ? "character class" : "regular expression"; - this.raise(`Unterminated ${kind}`); - } - if (escaped) { - escaped = false; - } else if (cp === ReverseSolidus) { - escaped = true; - } else if (cp === LeftSquareBracket) { - inClass = true; - } else if (cp === RightSquareBracket) { - inClass = false; - } else if (cp === Solidus && !inClass || cp === Asterisk && this.index === start) { - break; - } - this.advance(); - } - return this.index !== start; - } - pattern() { - const start = this.index; - this._numCapturingParens = this.countCapturingParens(); - this._groupNames.clear(); - this._backreferenceNames.clear(); - this.onPatternEnter(start); - this.disjunction(); - const cp = this.currentCodePoint; - if (this.currentCodePoint !== -1) { - if (cp === RightParenthesis) { - this.raise("Unmatched ')'"); - } - if (cp === RightSquareBracket || cp === RightCurlyBracket) { - this.raise("Lone quantifier brackets"); - } - const c = String.fromCodePoint(cp); - this.raise(`Unexpected character '${c}'`); - } - this._backreferenceNames.forEach(name => { - if (!this._groupNames.has(name)) { - this.raise("Invalid named capture referenced"); - } - }); - this.onPatternLeave(start, this.index); - } - countCapturingParens() { - const start = this.index; - let inClass = false; - let escaped = false; - let count = 0; - let cp = 0; - while ((cp = this.currentCodePoint) !== -1) { - if (escaped) { - escaped = false; - } else if (cp === ReverseSolidus) { - escaped = true; - } else if (cp === LeftSquareBracket) { - inClass = true; - } else if (cp === RightSquareBracket) { - inClass = false; - } else if (cp === LeftParenthesis && !inClass && (this.nextCodePoint !== QuestionMark || this.nextCodePoint2 === LessThanSign && this.nextCodePoint3 !== EqualsSign && this.nextCodePoint3 !== ExclamationMark)) { - count += 1; - } - this.advance(); - } - this.rewind(start); - return count; - } - disjunction() { - const start = this.index; - let i = 0; - this.onDisjunctionEnter(start); - this.alternative(i++); - while (this.eat(VerticalLine)) { - this.alternative(i++); - } - if (this.eatQuantifier(true)) { - this.raise("Nothing to repeat"); - } - if (this.eat(LeftCurlyBracket)) { - this.raise("Lone quantifier brackets"); - } - this.onDisjunctionLeave(start, this.index); - } - alternative(i) { - const start = this.index; - this.onAlternativeEnter(start, i); - while (this.currentCodePoint !== -1 && this.eatTerm()); - this.onAlternativeLeave(start, this.index, i); - } - eatTerm() { - if (this.eatAssertion()) { - if (this._lastAssertionIsQuantifiable) { - this.eatQuantifier(); - } - return true; - } - if (this.strict ? this.eatAtom() : this.eatExtendedAtom()) { - this.eatQuantifier(); - return true; - } - return false; - } - eatAssertion() { - const start = this.index; - this._lastAssertionIsQuantifiable = false; - if (this.eat(CircumflexAccent)) { - this.onEdgeAssertion(start, this.index, "start"); - return true; - } - if (this.eat(DollarSign)) { - this.onEdgeAssertion(start, this.index, "end"); - return true; - } - if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) { - this.onWordBoundaryAssertion(start, this.index, "word", true); - return true; - } - if (this.eat2(ReverseSolidus, LatinSmallLetterB)) { - this.onWordBoundaryAssertion(start, this.index, "word", false); - return true; - } - if (this.eat2(LeftParenthesis, QuestionMark)) { - const lookbehind = this.ecmaVersion >= 2018 && this.eat(LessThanSign); - let negate = false; - if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) { - const kind = lookbehind ? "lookbehind" : "lookahead"; - this.onLookaroundAssertionEnter(start, kind, negate); - this.disjunction(); - if (!this.eat(RightParenthesis)) { - this.raise("Unterminated group"); - } - this._lastAssertionIsQuantifiable = !lookbehind && !this.strict; - this.onLookaroundAssertionLeave(start, this.index, kind, negate); - return true; - } - this.rewind(start); - } - return false; - } - eatQuantifier() { - let noError = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - const start = this.index; - let min = 0; - let max = 0; - let greedy = false; - if (this.eat(Asterisk)) { - min = 0; - max = Number.POSITIVE_INFINITY; - } else if (this.eat(PlusSign)) { - min = 1; - max = Number.POSITIVE_INFINITY; - } else if (this.eat(QuestionMark)) { - min = 0; - max = 1; - } else if (this.eatBracedQuantifier(noError)) { - min = this._lastMinValue; - max = this._lastMaxValue; - } else { - return false; - } - greedy = !this.eat(QuestionMark); - if (!noError) { - this.onQuantifier(start, this.index, min, max, greedy); - } - return true; - } - eatBracedQuantifier(noError) { - const start = this.index; - if (this.eat(LeftCurlyBracket)) { - this._lastMinValue = 0; - this._lastMaxValue = Number.POSITIVE_INFINITY; - if (this.eatDecimalDigits()) { - this._lastMinValue = this._lastMaxValue = this._lastIntValue; - if (this.eat(Comma)) { - this._lastMaxValue = this.eatDecimalDigits() ? this._lastIntValue : Number.POSITIVE_INFINITY; - } - if (this.eat(RightCurlyBracket)) { - if (!noError && this._lastMaxValue < this._lastMinValue) { - this.raise("numbers out of order in {} quantifier"); - } - return true; - } - } - if (!noError && this.strict) { - this.raise("Incomplete quantifier"); - } - this.rewind(start); - } - return false; - } - eatAtom() { - return this.eatPatternCharacter() || this.eatDot() || this.eatReverseSolidusAtomEscape() || this.eatCharacterClass() || this.eatUncapturingGroup() || this.eatCapturingGroup(); - } - eatDot() { - if (this.eat(FullStop)) { - this.onAnyCharacterSet(this.index - 1, this.index, "any"); - return true; - } - return false; - } - eatReverseSolidusAtomEscape() { - const start = this.index; - if (this.eat(ReverseSolidus)) { - if (this.eatAtomEscape()) { - return true; - } - this.rewind(start); - } - return false; - } - eatUncapturingGroup() { - const start = this.index; - if (this.eat3(LeftParenthesis, QuestionMark, Colon)) { - this.onGroupEnter(start); - this.disjunction(); - if (!this.eat(RightParenthesis)) { - this.raise("Unterminated group"); - } - this.onGroupLeave(start, this.index); - return true; - } - return false; - } - eatCapturingGroup() { - const start = this.index; - if (this.eat(LeftParenthesis)) { - this._lastStrValue = ""; - if (this.ecmaVersion >= 2018) { - this.groupSpecifier(); - } else if (this.currentCodePoint === QuestionMark) { - this.raise("Invalid group"); - } - const name = this._lastStrValue || null; - this.onCapturingGroupEnter(start, name); - this.disjunction(); - if (!this.eat(RightParenthesis)) { - this.raise("Unterminated group"); - } - this.onCapturingGroupLeave(start, this.index, name); - return true; - } - return false; - } - eatExtendedAtom() { - return this.eatDot() || this.eatReverseSolidusAtomEscape() || this.eatCharacterClass() || this.eatUncapturingGroup() || this.eatCapturingGroup() || this.eatInvalidBracedQuantifier() || this.eatExtendedPatternCharacter(); - } - eatInvalidBracedQuantifier() { - if (this.eatBracedQuantifier(true)) { - this.raise("Nothing to repeat"); - } - return false; - } - eatSyntaxCharacter() { - if (isSyntaxCharacter(this.currentCodePoint)) { - this._lastIntValue = this.currentCodePoint; - this.advance(); - return true; - } - return false; - } - eatPatternCharacter() { - const start = this.index; - const cp = this.currentCodePoint; - if (cp !== -1 && !isSyntaxCharacter(cp)) { - this.advance(); - this.onCharacter(start, this.index, cp); - return true; - } - return false; - } - eatExtendedPatternCharacter() { - const start = this.index; - const cp = this.currentCodePoint; - if (cp !== -1 && cp !== CircumflexAccent && cp !== DollarSign && cp !== FullStop && cp !== Asterisk && cp !== PlusSign && cp !== QuestionMark && cp !== LeftParenthesis && cp !== RightParenthesis && cp !== LeftSquareBracket && cp !== VerticalLine) { - this.advance(); - this.onCharacter(start, this.index, cp); - return true; - } - return false; - } - groupSpecifier() { - this._lastStrValue = ""; - if (this.eat(QuestionMark)) { - if (this.eatGroupName()) { - if (!this._groupNames.has(this._lastStrValue)) { - this._groupNames.add(this._lastStrValue); - return; - } - this.raise("Duplicate capture group name"); - } - this.raise("Invalid group"); - } - } - eatGroupName() { - this._lastStrValue = ""; - if (this.eat(LessThanSign)) { - if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) { - return true; - } - this.raise("Invalid capture group name"); - } - return false; - } - eatRegExpIdentifierName() { - this._lastStrValue = ""; - if (this.eatRegExpIdentifierStart()) { - this._lastStrValue += String.fromCodePoint(this._lastIntValue); - while (this.eatRegExpIdentifierPart()) { - this._lastStrValue += String.fromCodePoint(this._lastIntValue); - } - return true; - } - return false; - } - eatRegExpIdentifierStart() { - const start = this.index; - let cp = this.currentCodePoint; - this.advance(); - if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) { - cp = this._lastIntValue; - } - if (isRegExpIdentifierStart(cp)) { - this._lastIntValue = cp; - return true; - } - if (this.index !== start) { - this.rewind(start); - } - return false; - } - eatRegExpIdentifierPart() { - const start = this.index; - let cp = this.currentCodePoint; - this.advance(); - if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) { - cp = this._lastIntValue; - } - if (isRegExpIdentifierPart(cp)) { - this._lastIntValue = cp; - return true; - } - if (this.index !== start) { - this.rewind(start); - } - return false; - } - eatAtomEscape() { - if (this.eatBackreference() || this.eatCharacterClassEscape() || this.eatCharacterEscape() || this._nFlag && this.eatKGroupName()) { - return true; - } - if (this.strict || this._uFlag) { - this.raise("Invalid escape"); - } - return false; - } - eatBackreference() { - const start = this.index; - if (this.eatDecimalEscape()) { - const n = this._lastIntValue; - if (n <= this._numCapturingParens) { - this.onBackreference(start - 1, this.index, n); - return true; - } - if (this.strict) { - this.raise("Invalid escape"); - } - this.rewind(start); - } - return false; - } - eatKGroupName() { - const start = this.index; - if (this.eat(LatinSmallLetterK)) { - if (this.eatGroupName()) { - const groupName = this._lastStrValue; - this._backreferenceNames.add(groupName); - this.onBackreference(start - 1, this.index, groupName); - return true; - } - this.raise("Invalid named reference"); - } - return false; - } - eatCharacterEscape() { - const start = this.index; - if (this.eatControlEscape() || this.eatCControlLetter() || this.eatZero() || this.eatHexEscapeSequence() || this.eatRegExpUnicodeEscapeSequence() || !this.strict && this.eatLegacyOctalEscapeSequence() || this.eatIdentityEscape()) { - this.onCharacter(start - 1, this.index, this._lastIntValue); - return true; - } - return false; - } - eatCControlLetter() { - const start = this.index; - if (this.eat(LatinSmallLetterC)) { - if (this.eatControlLetter()) { - return true; - } - this.rewind(start); - } - return false; - } - eatZero() { - if (this.currentCodePoint === DigitZero && !isDecimalDigit(this.nextCodePoint)) { - this._lastIntValue = 0; - this.advance(); - return true; - } - return false; - } - eatControlEscape() { - if (this.eat(LatinSmallLetterT)) { - this._lastIntValue = CharacterTabulation; - return true; - } - if (this.eat(LatinSmallLetterN)) { - this._lastIntValue = LineFeed; - return true; - } - if (this.eat(LatinSmallLetterV)) { - this._lastIntValue = LineTabulation; - return true; - } - if (this.eat(LatinSmallLetterF)) { - this._lastIntValue = FormFeed; - return true; - } - if (this.eat(LatinSmallLetterR)) { - this._lastIntValue = CarriageReturn; - return true; - } - return false; - } - eatControlLetter() { - const cp = this.currentCodePoint; - if (isLatinLetter(cp)) { - this.advance(); - this._lastIntValue = cp % 0x20; - return true; - } - return false; - } - eatRegExpUnicodeEscapeSequence() { - const start = this.index; - if (this.eat(LatinSmallLetterU)) { - if (this.eatFixedHexDigits(4)) { - const lead = this._lastIntValue; - if (this._uFlag && lead >= 0xd800 && lead <= 0xdbff) { - const leadSurrogateEnd = this.index; - if (this.eat(ReverseSolidus) && this.eat(LatinSmallLetterU) && this.eatFixedHexDigits(4)) { - const trail = this._lastIntValue; - if (trail >= 0xdc00 && trail <= 0xdfff) { - this._lastIntValue = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000; - return true; - } - } - this.rewind(leadSurrogateEnd); - this._lastIntValue = lead; - } - return true; - } - if (this._uFlag && this.eat(LeftCurlyBracket) && this.eatHexDigits() && this.eat(RightCurlyBracket) && isValidUnicode(this._lastIntValue)) { - return true; - } - if (this.strict || this._uFlag) { - this.raise("Invalid unicode escape"); - } - this.rewind(start); - } - return false; - } - eatIdentityEscape() { - if (this._uFlag) { - if (this.eatSyntaxCharacter()) { - return true; - } - if (this.eat(Solidus)) { - this._lastIntValue = Solidus; - return true; - } - return false; - } - if (this.isValidIdentityEscape(this.currentCodePoint)) { - this._lastIntValue = this.currentCodePoint; - this.advance(); - return true; - } - return false; - } - isValidIdentityEscape(cp) { - if (cp === -1) { - return false; - } - if (this.strict) { - return !isIdContinue(cp); - } - return cp !== LatinSmallLetterC && (!this._nFlag || cp !== LatinSmallLetterK); - } - eatDecimalEscape() { - this._lastIntValue = 0; - let cp = this.currentCodePoint; - if (cp >= DigitOne && cp <= DigitNine) { - do { - this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero); - this.advance(); - } while ((cp = this.currentCodePoint) >= DigitZero && cp <= DigitNine); - return true; - } - return false; - } - eatCharacterClassEscape() { - const start = this.index; - if (this.eat(LatinSmallLetterD)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "digit", false); - return true; - } - if (this.eat(LatinCapitalLetterD)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "digit", true); - return true; - } - if (this.eat(LatinSmallLetterS)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "space", false); - return true; - } - if (this.eat(LatinCapitalLetterS)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "space", true); - return true; - } - if (this.eat(LatinSmallLetterW)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "word", false); - return true; - } - if (this.eat(LatinCapitalLetterW)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "word", true); - return true; - } - let negate = false; - if (this._uFlag && this.ecmaVersion >= 2018 && (this.eat(LatinSmallLetterP) || (negate = this.eat(LatinCapitalLetterP)))) { - this._lastIntValue = -1; - if (this.eat(LeftCurlyBracket) && this.eatUnicodePropertyValueExpression() && this.eat(RightCurlyBracket)) { - this.onUnicodePropertyCharacterSet(start - 1, this.index, "property", this._lastKeyValue, this._lastValValue || null, negate); - return true; - } - this.raise("Invalid property name"); - } - return false; - } - eatUnicodePropertyValueExpression() { - const start = this.index; - if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) { - this._lastKeyValue = this._lastStrValue; - if (this.eatUnicodePropertyValue()) { - this._lastValValue = this._lastStrValue; - if (isValidUnicodeProperty(this._lastKeyValue, this._lastValValue)) { - return true; - } - this.raise("Invalid property name"); - } - } - this.rewind(start); - if (this.eatLoneUnicodePropertyNameOrValue()) { - const nameOrValue = this._lastStrValue; - if (isValidUnicodeProperty("General_Category", nameOrValue)) { - this._lastKeyValue = "General_Category"; - this._lastValValue = nameOrValue; - return true; - } - if (isValidUnicodePropertyName(nameOrValue)) { - this._lastKeyValue = nameOrValue; - this._lastValValue = ""; - return true; - } - this.raise("Invalid property name"); - } - return false; - } - eatUnicodePropertyName() { - this._lastStrValue = ""; - while (isUnicodePropertyNameCharacter(this.currentCodePoint)) { - this._lastStrValue += String.fromCodePoint(this.currentCodePoint); - this.advance(); - } - return this._lastStrValue !== ""; - } - eatUnicodePropertyValue() { - this._lastStrValue = ""; - while (isUnicodePropertyValueCharacter(this.currentCodePoint)) { - this._lastStrValue += String.fromCodePoint(this.currentCodePoint); - this.advance(); - } - return this._lastStrValue !== ""; - } - eatLoneUnicodePropertyNameOrValue() { - return this.eatUnicodePropertyValue(); - } - eatCharacterClass() { - const start = this.index; - if (this.eat(LeftSquareBracket)) { - const negate = this.eat(CircumflexAccent); - this.onCharacterClassEnter(start, negate); - this.classRanges(); - if (!this.eat(RightSquareBracket)) { - this.raise("Unterminated character class"); - } - this.onCharacterClassLeave(start, this.index, negate); - return true; - } - return false; - } - classRanges() { - let start = this.index; - while (this.eatClassAtom()) { - const left = this._lastIntValue; - const hyphenStart = this.index; - if (this.eat(HyphenMinus)) { - this.onCharacter(hyphenStart, this.index, HyphenMinus); - if (this.eatClassAtom()) { - const right = this._lastIntValue; - if (left === -1 || right === -1) { - if (this.strict) { - this.raise("Invalid character class"); - } - } else if (left > right) { - this.raise("Range out of order in character class"); - } else { - this.onCharacterClassRange(start, this.index, left, right); - } - } - } - start = this.index; - } - } - eatClassAtom() { - const start = this.index; - if (this.eat(ReverseSolidus)) { - if (this.eatClassEscape()) { - return true; - } - if (this._uFlag) { - this.raise("Invalid escape"); - } - this.rewind(start); - } - const cp = this.currentCodePoint; - if (cp !== -1 && cp !== RightSquareBracket) { - this.advance(); - this._lastIntValue = cp; - this.onCharacter(start, this.index, cp); - return true; - } - return false; - } - eatClassEscape() { - const start = this.index; - if (this.eat(LatinSmallLetterB)) { - this._lastIntValue = Backspace; - this.onCharacter(start - 1, this.index, Backspace); - return true; - } - if (this._uFlag && this.eat(HyphenMinus)) { - this._lastIntValue = HyphenMinus; - this.onCharacter(start - 1, this.index, HyphenMinus); - return true; - } - if (!this._uFlag && this.eat(LatinSmallLetterC)) { - if (this.eatClassControlLetter()) { - this.onCharacter(start - 1, this.index, this._lastIntValue); - return true; - } - this.rewind(start); - } - return this.eatCharacterClassEscape() || this.eatCharacterEscape(); - } - eatClassControlLetter() { - const cp = this.currentCodePoint; - if (isDecimalDigit(cp) || cp === LowLine) { - this.advance(); - this._lastIntValue = cp % 0x20; - return true; - } - return false; - } - eatHexEscapeSequence() { - const start = this.index; - if (this.eat(LatinSmallLetterX)) { - if (this.eatFixedHexDigits(2)) { - return true; - } - if (this._uFlag) { - this.raise("Invalid escape"); - } - this.rewind(start); - } - return false; - } - eatDecimalDigits() { - const start = this.index; - this._lastIntValue = 0; - while (isDecimalDigit(this.currentCodePoint)) { - this._lastIntValue = 10 * this._lastIntValue + digitToInt(this.currentCodePoint); - this.advance(); - } - return this.index !== start; - } - eatHexDigits() { - const start = this.index; - this._lastIntValue = 0; - while (isHexDigit(this.currentCodePoint)) { - this._lastIntValue = 16 * this._lastIntValue + digitToInt(this.currentCodePoint); - this.advance(); - } - return this.index !== start; - } - eatLegacyOctalEscapeSequence() { - if (this.eatOctalDigit()) { - const n1 = this._lastIntValue; - if (this.eatOctalDigit()) { - const n2 = this._lastIntValue; - if (n1 <= 3 && this.eatOctalDigit()) { - this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue; - } else { - this._lastIntValue = n1 * 8 + n2; - } - } else { - this._lastIntValue = n1; - } - return true; - } - return false; - } - eatOctalDigit() { - const cp = this.currentCodePoint; - if (isOctalDigit(cp)) { - this.advance(); - this._lastIntValue = cp - DigitZero; - return true; - } - this._lastIntValue = 0; - return false; - } - eatFixedHexDigits(length) { - const start = this.index; - this._lastIntValue = 0; - for (let i = 0; i < length; ++i) { - const cp = this.currentCodePoint; - if (!isHexDigit(cp)) { - this.rewind(start); - return false; - } - this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp); - this.advance(); - } - return true; - } -} - -const DummyPattern = {}; -const DummyFlags = {}; -const DummyCapturingGroup = {}; -function elementsToAlternative(elements, parent) { - for (const element of elements) { - assert(element.type !== "Disjunction"); - element.parent = parent; - } - return elements; -} -function addAlternativeElement(parent, node) { - if (parent.type === "Disjunction") { - last(parent.alternatives).push(node); - } else { - parent.elements.push(node); - } -} -function addCommonElement(parent, node) { - if (parent.type === "Disjunction") { - last(parent.alternatives).push(node); - } else if (parent.type === "CharacterClass") { - parent.elements.push(node); - } else { - parent.elements.push(node); - } -} -class RegExpParserState { - constructor(options) { - this._node = DummyPattern; - this._flags = DummyFlags; - this._disjunctionStartStack = []; - this._backreferences = []; - this._capturingGroups = []; - this.source = ""; - this.strict = Boolean(options && options.strict); - this.ecmaVersion = options && options.ecmaVersion || 2018; - } - get pattern() { - if (this._node.type !== "Pattern") { - throw new Error("UnknownError"); - } - return this._node; - } - get flags() { - if (this._flags.type !== "Flags") { - throw new Error("UnknownError"); - } - return this._flags; - } - onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll) { - this._flags = { - type: "Flags", - parent: null, - start, - end, - raw: this.source.slice(start, end), - global, - ignoreCase, - multiline, - unicode, - sticky, - dotAll - }; - } - onPatternEnter(start) { - this._node = { - type: "Pattern", - parent: null, - start, - end: start, - raw: "", - elements: [] - }; - this._backreferences.length = 0; - this._capturingGroups.length = 0; - } - onPatternLeave(start, end) { - this._node.end = end; - this._node.raw = this.source.slice(start, end); - for (const reference of this._backreferences) { - const ref = reference.ref; - const group = typeof ref === "number" ? this._capturingGroups[ref - 1] : this._capturingGroups.find(g => g.name === ref); - reference.resolved = group; - group.references.push(reference); - } - } - onDisjunctionEnter(start) { - this._disjunctionStartStack.push(start); - } - onDisjunctionLeave(start, end) { - this._disjunctionStartStack.pop(); - } - onAlternativeEnter(start, index) { - if (index === 0) { - return; - } - const parentNode = this._node; - if (parentNode.type === "Disjunction" || parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - const prevNode = last(parentNode.elements); - if (prevNode != null && prevNode.type === "Disjunction") { - this._node = prevNode; - prevNode.alternatives.push([]); - } else { - this._node = { - type: "Disjunction", - parent: parentNode, - start: last(this._disjunctionStartStack), - end: start, - raw: "", - alternatives: [] - }; - const elements = elementsToAlternative(parentNode.elements, this._node); - this._node.alternatives.push(elements, []); - parentNode.elements = [this._node]; - } - } - onAlternativeLeave(start, end, index) { - if (index === 0) { - return; - } - this._node.end = end; - this._node.raw = this.source.slice(this._node.start, end); - this._node = this._node.parent; - } - onGroupEnter(start) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - this._node = { - type: "Group", - parent: parentNode, - start, - end: start, - raw: "", - elements: [] - }; - addAlternativeElement(parentNode, this._node); - } - onGroupLeave(start, end) { - this._node.end = end; - this._node.raw = this.source.slice(start, end); - this._node = this._node.parent; - } - onCapturingGroupEnter(start, name) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - this._node = { - type: "CapturingGroup", - parent: parentNode, - start, - end: start, - raw: "", - name, - elements: [], - references: [] - }; - addAlternativeElement(parentNode, this._node); - this._capturingGroups.push(this._node); - } - onCapturingGroupLeave(start, end, name) { - this._node.end = end; - this._node.raw = this.source.slice(start, end); - this._node = this._node.parent; - } - onQuantifier(start, end, min, max, greedy) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - const elements = parentNode.type === "Disjunction" ? last(parentNode.alternatives) : parentNode.elements; - const prevNode = elements.pop(); - const node = { - type: "Quantifier", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - min, - max, - greedy, - element: prevNode - }; - elements.push(node); - prevNode.parent = node; - } - onLookaroundAssertionEnter(start, kind, negate) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - this._node = { - type: "Assertion", - parent: parentNode, - start, - end: start, - raw: "", - kind, - negate, - elements: [] - }; - addAlternativeElement(parentNode, this._node); - } - onLookaroundAssertionLeave(start, end, kind, negate) { - this._node.end = end; - this._node.raw = this.source.slice(start, end); - this._node = this._node.parent; - } - onEdgeAssertion(start, end, kind) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - addAlternativeElement(parentNode, { - type: "Assertion", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - kind - }); - } - onWordBoundaryAssertion(start, end, kind, negate) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - addAlternativeElement(parentNode, { - type: "Assertion", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - kind, - negate - }); - } - onAnyCharacterSet(start, end, kind) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - addAlternativeElement(parentNode, { - type: "CharacterSet", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - kind - }); - } - onEscapeCharacterSet(start, end, kind, negate) { - addCommonElement(this._node, { - type: "CharacterSet", - parent: this._node, - start, - end, - raw: this.source.slice(start, end), - kind, - negate - }); - } - onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) { - addCommonElement(this._node, { - type: "CharacterSet", - parent: this._node, - start, - end, - raw: this.source.slice(start, end), - kind, - key, - value, - negate - }); - } - onCharacter(start, end, value) { - addCommonElement(this._node, { - type: "Character", - parent: this._node, - start, - end, - raw: this.source.slice(start, end), - value - }); - } - onBackreference(start, end, ref) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - const node = { - type: "Backreference", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - ref, - resolved: DummyCapturingGroup - }; - addAlternativeElement(parentNode, node); - this._backreferences.push(node); - } - onCharacterClassEnter(start, negate) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - this._node = { - type: "CharacterClass", - parent: parentNode, - start, - end: start, - raw: "", - negate, - elements: [] - }; - addAlternativeElement(parentNode, this._node); - } - onCharacterClassLeave(start, end, negate) { - this._node.end = end; - this._node.raw = this.source.slice(start, end); - this._node = this._node.parent; - } - onCharacterClassRange(start, end, min, max) { - const parentNode = this._node; - if (parentNode.type !== "CharacterClass") { - throw new Error("UnknownError"); - } - const elements = parentNode.elements; - const rightNode = elements.pop(); - elements.pop(); - const leftNode = elements.pop(); - const node = { - type: "CharacterClassRange", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - min: leftNode, - max: rightNode - }; - assert(leftNode != null && leftNode.type === "Character"); - assert(rightNode != null && rightNode.type === "Character"); - leftNode.parent = node; - rightNode.parent = node; - elements.push(node); - } -} -class RegExpParser { - constructor(options) { - this._state = new RegExpParserState(options); - this._validator = new RegExpValidator(this._state); - } - parseLiteral(source) { - let start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - let end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : source.length; - - this._state.source = source; - this._validator.validateLiteral(source, start, end); - const pattern = this._state.pattern; - const flags = this._state.flags; - const literal = { - type: "RegExpLiteral", - parent: null, - start, - end, - raw: source, - pattern, - flags - }; - pattern.parent = literal; - flags.parent = literal; - return literal; - } - parseFlags(source) { - let start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - let end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : source.length; - - this._state.source = source; - this._validator.validateFlags(source, start, end); - return this._state.flags; - } - parsePattern(source) { - let start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - let end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : source.length; - let uFlag = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - this._state.source = source; - this._validator.validatePattern(source, start, end, uFlag); - return this._state.pattern; - } -} - -function parseRegExpLiteral(source, options) { - return new RegExpParser(options).parseLiteral(source); -} -function validateRegExpLiteral(source, options) { - return new RegExpValidator(options).validateLiteral(source); -} - -exports.AST = ast; -exports.RegExpParser = RegExpParser; -exports.RegExpValidator = RegExpValidator; -exports.parseRegExpLiteral = parseRegExpLiteral; -exports.validateRegExpLiteral = validateRegExpLiteral; -//# sourceMappingURL=index.js.map diff --git a/node_modules/regexpp/index.js.map b/node_modules/regexpp/index.js.map deleted file mode 100644 index 6cc2a01..0000000 --- a/node_modules/regexpp/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js.map","sources":["src/util.ts","src/reader.ts","src/regexp-syntax-error.ts","src/unicode/ids.ts","src/unicode/property-data.ts","src/unicode/index.ts","src/validator.ts","src/parser.ts","src/index.ts"],"sourcesContent":["export function assert(condition: boolean, message?: string): void {\n if (!condition) {\n throw new Error(message || \"AssertionError\")\n }\n}\n\nexport function last(xs: T[]): T | undefined {\n return xs.length === 0 ? undefined : xs[xs.length - 1]\n}\n","const legacyImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.charCodeAt(i) : -1\n },\n width(c: number): number {\n return 1\n },\n}\nconst unicodeImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.codePointAt(i)! : -1\n },\n width(c: number): number {\n return c > 0xffff ? 2 : 1\n },\n}\n\nexport class Reader {\n private _impl = legacyImpl\n private _s: string = \"\"\n private _i: number = 0\n private _end: number = 0\n private _cp1: number = -1\n private _w1: number = 1\n private _cp2: number = -1\n private _w2: number = 1\n private _cp3: number = -1\n private _w3: number = 1\n private _cp4: number = -1\n\n get source(): string {\n return this._s\n }\n\n get index(): number {\n return this._i\n }\n\n get currentCodePoint(): number {\n return this._cp1\n }\n\n get nextCodePoint(): number {\n return this._cp2\n }\n\n get nextCodePoint2(): number {\n return this._cp3\n }\n\n get nextCodePoint3(): number {\n return this._cp4\n }\n\n reset(source: string, start: number, end: number, uFlag: boolean): void {\n this._impl = uFlag ? unicodeImpl : legacyImpl\n this._s = source\n this._end = end\n this.rewind(start)\n }\n\n rewind(index: number): void {\n const impl = this._impl\n this._i = index\n this._cp1 = impl.at(this._s, this._end, index)\n this._w1 = impl.width(this._cp1)\n this._cp2 = impl.at(this._s, this._end, index + this._w1)\n this._w2 = impl.width(this._cp2)\n this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2)\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n index + this._w1 + this._w2 + this._w3,\n )\n }\n\n advance(): void {\n if (this._cp1 !== -1) {\n const impl = this._impl\n this._i += this._w1\n this._cp1 = this._cp2\n this._w1 = this._w2\n this._cp2 = this._cp3\n this._w2 = impl.width(this._cp2)\n this._cp3 = this._cp4\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n this._i + this._w1 + this._w2 + this._w3,\n )\n }\n }\n\n eat(cp: number): boolean {\n if (this._cp1 === cp) {\n this.advance()\n return true\n }\n return false\n }\n\n eat2(cp1: number, cp2: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2) {\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n\n eat3(cp1: number, cp2: number, cp3: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) {\n this.advance()\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n}\n","export class RegExpSyntaxError extends SyntaxError {\n public index: number\n constructor(\n source: string,\n uFlag: boolean,\n index: number,\n message: string,\n ) {\n /*eslint-disable no-param-reassign */\n if (source) {\n if (source[0] !== \"/\") {\n source = `/${source}/${uFlag ? \"u\" : \"\"}`\n }\n source = `: ${source}`\n }\n /*eslint-enable no-param-reassign */\n\n super(`Invalid regular expression${source}: ${message}`)\n this.index = index\n }\n}\n","/* Generated from DerivedCoreProperties-10.0.0.txt */\nexport function isIdStart(cp: number): boolean {\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp)\n}\nexport function isIdContinue(cp: number): boolean {\n if (cp < 0x30) return false\n if (cp < 0x3a) return true\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp === 0x5f) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp) || isLargeIdContinue(cp)\n}\n\nfunction isLargeIdStart(cp: number): boolean {\n if (cp < 0x303c) {\n if (cp < 0xeaa) {\n if (cp < 0xa2a) {\n if (cp < 0x6d5) {\n if (cp < 0x37a) {\n if (cp < 0x294) {\n if (cp < 0xf8) {\n if (cp === 0xaa) return true\n if (cp === 0xb5) return true\n if (cp === 0xba) return true\n if (cp < 0xc0) return false\n if (cp < 0xd7) return true\n if (cp < 0xd8) return false\n if (cp < 0xf7) return true\n return false\n }\n if (cp < 0x1bb) return true\n if (cp === 0x1bb) return true\n if (cp < 0x1bc) return false\n if (cp < 0x1c0) return true\n if (cp < 0x1c0) return false\n if (cp < 0x1c4) return true\n if (cp < 0x1c4) return false\n if (cp < 0x294) return true\n return false\n }\n if (cp < 0x2ec) {\n if (cp === 0x294) return true\n if (cp < 0x295) return false\n if (cp < 0x2b0) return true\n if (cp < 0x2b0) return false\n if (cp < 0x2c2) return true\n if (cp < 0x2c6) return false\n if (cp < 0x2d2) return true\n if (cp < 0x2e0) return false\n if (cp < 0x2e5) return true\n return false\n }\n if (cp === 0x2ec) return true\n if (cp === 0x2ee) return true\n if (cp < 0x370) return false\n if (cp < 0x374) return true\n if (cp === 0x374) return true\n if (cp < 0x376) return false\n if (cp < 0x378) return true\n return false\n }\n if (cp < 0x531) {\n if (cp < 0x38c) {\n if (cp === 0x37a) return true\n if (cp < 0x37b) return false\n if (cp < 0x37e) return true\n if (cp === 0x37f) return true\n if (cp === 0x386) return true\n if (cp < 0x388) return false\n if (cp < 0x38b) return true\n return false\n }\n if (cp === 0x38c) return true\n if (cp < 0x38e) return false\n if (cp < 0x3a2) return true\n if (cp < 0x3a3) return false\n if (cp < 0x3f6) return true\n if (cp < 0x3f7) return false\n if (cp < 0x482) return true\n if (cp < 0x48a) return false\n if (cp < 0x530) return true\n return false\n }\n if (cp < 0x620) {\n if (cp < 0x531) return false\n if (cp < 0x557) return true\n if (cp === 0x559) return true\n if (cp < 0x561) return false\n if (cp < 0x588) return true\n if (cp < 0x5d0) return false\n if (cp < 0x5eb) return true\n if (cp < 0x5f0) return false\n if (cp < 0x5f3) return true\n return false\n }\n if (cp < 0x640) return true\n if (cp === 0x640) return true\n if (cp < 0x641) return false\n if (cp < 0x64b) return true\n if (cp < 0x66e) return false\n if (cp < 0x670) return true\n if (cp < 0x671) return false\n if (cp < 0x6d4) return true\n return false\n }\n if (cp < 0x904) {\n if (cp < 0x7f4) {\n if (cp < 0x710) {\n if (cp === 0x6d5) return true\n if (cp < 0x6e5) return false\n if (cp < 0x6e7) return true\n if (cp < 0x6ee) return false\n if (cp < 0x6f0) return true\n if (cp < 0x6fa) return false\n if (cp < 0x6fd) return true\n if (cp === 0x6ff) return true\n return false\n }\n if (cp === 0x710) return true\n if (cp < 0x712) return false\n if (cp < 0x730) return true\n if (cp < 0x74d) return false\n if (cp < 0x7a6) return true\n if (cp === 0x7b1) return true\n if (cp < 0x7ca) return false\n if (cp < 0x7eb) return true\n return false\n }\n if (cp < 0x828) {\n if (cp < 0x7f4) return false\n if (cp < 0x7f6) return true\n if (cp === 0x7fa) return true\n if (cp < 0x800) return false\n if (cp < 0x816) return true\n if (cp === 0x81a) return true\n if (cp === 0x824) return true\n return false\n }\n if (cp === 0x828) return true\n if (cp < 0x840) return false\n if (cp < 0x859) return true\n if (cp < 0x860) return false\n if (cp < 0x86b) return true\n if (cp < 0x8a0) return false\n if (cp < 0x8b5) return true\n if (cp < 0x8b6) return false\n if (cp < 0x8be) return true\n return false\n }\n if (cp < 0x9b2) {\n if (cp < 0x972) {\n if (cp < 0x904) return false\n if (cp < 0x93a) return true\n if (cp === 0x93d) return true\n if (cp === 0x950) return true\n if (cp < 0x958) return false\n if (cp < 0x962) return true\n if (cp === 0x971) return true\n return false\n }\n if (cp < 0x981) return true\n if (cp < 0x985) return false\n if (cp < 0x98d) return true\n if (cp < 0x98f) return false\n if (cp < 0x991) return true\n if (cp < 0x993) return false\n if (cp < 0x9a9) return true\n if (cp < 0x9aa) return false\n if (cp < 0x9b1) return true\n return false\n }\n if (cp < 0x9df) {\n if (cp === 0x9b2) return true\n if (cp < 0x9b6) return false\n if (cp < 0x9ba) return true\n if (cp === 0x9bd) return true\n if (cp === 0x9ce) return true\n if (cp < 0x9dc) return false\n if (cp < 0x9de) return true\n return false\n }\n if (cp < 0x9e2) return true\n if (cp < 0x9f0) return false\n if (cp < 0x9f2) return true\n if (cp === 0x9fc) return true\n if (cp < 0xa05) return false\n if (cp < 0xa0b) return true\n if (cp < 0xa0f) return false\n if (cp < 0xa11) return true\n if (cp < 0xa13) return false\n if (cp < 0xa29) return true\n return false\n }\n if (cp < 0xc2a) {\n if (cp < 0xb2a) {\n if (cp < 0xaaa) {\n if (cp < 0xa5e) {\n if (cp < 0xa2a) return false\n if (cp < 0xa31) return true\n if (cp < 0xa32) return false\n if (cp < 0xa34) return true\n if (cp < 0xa35) return false\n if (cp < 0xa37) return true\n if (cp < 0xa38) return false\n if (cp < 0xa3a) return true\n if (cp < 0xa59) return false\n if (cp < 0xa5d) return true\n return false\n }\n if (cp === 0xa5e) return true\n if (cp < 0xa72) return false\n if (cp < 0xa75) return true\n if (cp < 0xa85) return false\n if (cp < 0xa8e) return true\n if (cp < 0xa8f) return false\n if (cp < 0xa92) return true\n if (cp < 0xa93) return false\n if (cp < 0xaa9) return true\n return false\n }\n if (cp < 0xae0) {\n if (cp < 0xaaa) return false\n if (cp < 0xab1) return true\n if (cp < 0xab2) return false\n if (cp < 0xab4) return true\n if (cp < 0xab5) return false\n if (cp < 0xaba) return true\n if (cp === 0xabd) return true\n if (cp === 0xad0) return true\n return false\n }\n if (cp < 0xae2) return true\n if (cp === 0xaf9) return true\n if (cp < 0xb05) return false\n if (cp < 0xb0d) return true\n if (cp < 0xb0f) return false\n if (cp < 0xb11) return true\n if (cp < 0xb13) return false\n if (cp < 0xb29) return true\n return false\n }\n if (cp < 0xb92) {\n if (cp < 0xb5f) {\n if (cp < 0xb2a) return false\n if (cp < 0xb31) return true\n if (cp < 0xb32) return false\n if (cp < 0xb34) return true\n if (cp < 0xb35) return false\n if (cp < 0xb3a) return true\n if (cp === 0xb3d) return true\n if (cp < 0xb5c) return false\n if (cp < 0xb5e) return true\n return false\n }\n if (cp < 0xb62) return true\n if (cp === 0xb71) return true\n if (cp === 0xb83) return true\n if (cp < 0xb85) return false\n if (cp < 0xb8b) return true\n if (cp < 0xb8e) return false\n if (cp < 0xb91) return true\n return false\n }\n if (cp < 0xba8) {\n if (cp < 0xb92) return false\n if (cp < 0xb96) return true\n if (cp < 0xb99) return false\n if (cp < 0xb9b) return true\n if (cp === 0xb9c) return true\n if (cp < 0xb9e) return false\n if (cp < 0xba0) return true\n if (cp < 0xba3) return false\n if (cp < 0xba5) return true\n return false\n }\n if (cp < 0xbab) return true\n if (cp < 0xbae) return false\n if (cp < 0xbba) return true\n if (cp === 0xbd0) return true\n if (cp < 0xc05) return false\n if (cp < 0xc0d) return true\n if (cp < 0xc0e) return false\n if (cp < 0xc11) return true\n if (cp < 0xc12) return false\n if (cp < 0xc29) return true\n return false\n }\n if (cp < 0xd5f) {\n if (cp < 0xcbd) {\n if (cp < 0xc85) {\n if (cp < 0xc2a) return false\n if (cp < 0xc3a) return true\n if (cp === 0xc3d) return true\n if (cp < 0xc58) return false\n if (cp < 0xc5b) return true\n if (cp < 0xc60) return false\n if (cp < 0xc62) return true\n if (cp === 0xc80) return true\n return false\n }\n if (cp < 0xc8d) return true\n if (cp < 0xc8e) return false\n if (cp < 0xc91) return true\n if (cp < 0xc92) return false\n if (cp < 0xca9) return true\n if (cp < 0xcaa) return false\n if (cp < 0xcb4) return true\n if (cp < 0xcb5) return false\n if (cp < 0xcba) return true\n return false\n }\n if (cp < 0xd0e) {\n if (cp === 0xcbd) return true\n if (cp === 0xcde) return true\n if (cp < 0xce0) return false\n if (cp < 0xce2) return true\n if (cp < 0xcf1) return false\n if (cp < 0xcf3) return true\n if (cp < 0xd05) return false\n if (cp < 0xd0d) return true\n return false\n }\n if (cp < 0xd11) return true\n if (cp < 0xd12) return false\n if (cp < 0xd3b) return true\n if (cp === 0xd3d) return true\n if (cp === 0xd4e) return true\n if (cp < 0xd54) return false\n if (cp < 0xd57) return true\n return false\n }\n if (cp < 0xe46) {\n if (cp < 0xdbd) {\n if (cp < 0xd5f) return false\n if (cp < 0xd62) return true\n if (cp < 0xd7a) return false\n if (cp < 0xd80) return true\n if (cp < 0xd85) return false\n if (cp < 0xd97) return true\n if (cp < 0xd9a) return false\n if (cp < 0xdb2) return true\n if (cp < 0xdb3) return false\n if (cp < 0xdbc) return true\n return false\n }\n if (cp === 0xdbd) return true\n if (cp < 0xdc0) return false\n if (cp < 0xdc7) return true\n if (cp < 0xe01) return false\n if (cp < 0xe31) return true\n if (cp < 0xe32) return false\n if (cp < 0xe34) return true\n if (cp < 0xe40) return false\n if (cp < 0xe46) return true\n return false\n }\n if (cp < 0xe8d) {\n if (cp === 0xe46) return true\n if (cp < 0xe81) return false\n if (cp < 0xe83) return true\n if (cp === 0xe84) return true\n if (cp < 0xe87) return false\n if (cp < 0xe89) return true\n if (cp === 0xe8a) return true\n return false\n }\n if (cp === 0xe8d) return true\n if (cp < 0xe94) return false\n if (cp < 0xe98) return true\n if (cp < 0xe99) return false\n if (cp < 0xea0) return true\n if (cp < 0xea1) return false\n if (cp < 0xea4) return true\n if (cp === 0xea5) return true\n if (cp === 0xea7) return true\n return false\n }\n if (cp < 0x1c5a) {\n if (cp < 0x1380) {\n if (cp < 0x10a0) {\n if (cp < 0xf88) {\n if (cp < 0xec6) {\n if (cp < 0xeaa) return false\n if (cp < 0xeac) return true\n if (cp < 0xead) return false\n if (cp < 0xeb1) return true\n if (cp < 0xeb2) return false\n if (cp < 0xeb4) return true\n if (cp === 0xebd) return true\n if (cp < 0xec0) return false\n if (cp < 0xec5) return true\n return false\n }\n if (cp === 0xec6) return true\n if (cp < 0xedc) return false\n if (cp < 0xee0) return true\n if (cp === 0xf00) return true\n if (cp < 0xf40) return false\n if (cp < 0xf48) return true\n if (cp < 0xf49) return false\n if (cp < 0xf6d) return true\n return false\n }\n if (cp < 0x1061) {\n if (cp < 0xf88) return false\n if (cp < 0xf8d) return true\n if (cp < 0x1000) return false\n if (cp < 0x102b) return true\n if (cp === 0x103f) return true\n if (cp < 0x1050) return false\n if (cp < 0x1056) return true\n if (cp < 0x105a) return false\n if (cp < 0x105e) return true\n return false\n }\n if (cp === 0x1061) return true\n if (cp < 0x1065) return false\n if (cp < 0x1067) return true\n if (cp < 0x106e) return false\n if (cp < 0x1071) return true\n if (cp < 0x1075) return false\n if (cp < 0x1082) return true\n if (cp === 0x108e) return true\n return false\n }\n if (cp < 0x1260) {\n if (cp < 0x10fd) {\n if (cp < 0x10a0) return false\n if (cp < 0x10c6) return true\n if (cp === 0x10c7) return true\n if (cp === 0x10cd) return true\n if (cp < 0x10d0) return false\n if (cp < 0x10fb) return true\n if (cp === 0x10fc) return true\n return false\n }\n if (cp < 0x1249) return true\n if (cp < 0x124a) return false\n if (cp < 0x124e) return true\n if (cp < 0x1250) return false\n if (cp < 0x1257) return true\n if (cp === 0x1258) return true\n if (cp < 0x125a) return false\n if (cp < 0x125e) return true\n return false\n }\n if (cp < 0x12c0) {\n if (cp < 0x1260) return false\n if (cp < 0x1289) return true\n if (cp < 0x128a) return false\n if (cp < 0x128e) return true\n if (cp < 0x1290) return false\n if (cp < 0x12b1) return true\n if (cp < 0x12b2) return false\n if (cp < 0x12b6) return true\n if (cp < 0x12b8) return false\n if (cp < 0x12bf) return true\n return false\n }\n if (cp === 0x12c0) return true\n if (cp < 0x12c2) return false\n if (cp < 0x12c6) return true\n if (cp < 0x12c8) return false\n if (cp < 0x12d7) return true\n if (cp < 0x12d8) return false\n if (cp < 0x1311) return true\n if (cp < 0x1312) return false\n if (cp < 0x1316) return true\n if (cp < 0x1318) return false\n if (cp < 0x135b) return true\n return false\n }\n if (cp < 0x1844) {\n if (cp < 0x170e) {\n if (cp < 0x1681) {\n if (cp < 0x1380) return false\n if (cp < 0x1390) return true\n if (cp < 0x13a0) return false\n if (cp < 0x13f6) return true\n if (cp < 0x13f8) return false\n if (cp < 0x13fe) return true\n if (cp < 0x1401) return false\n if (cp < 0x166d) return true\n if (cp < 0x166f) return false\n if (cp < 0x1680) return true\n return false\n }\n if (cp < 0x169b) return true\n if (cp < 0x16a0) return false\n if (cp < 0x16eb) return true\n if (cp < 0x16ee) return false\n if (cp < 0x16f1) return true\n if (cp < 0x16f1) return false\n if (cp < 0x16f9) return true\n if (cp < 0x1700) return false\n if (cp < 0x170d) return true\n return false\n }\n if (cp < 0x1780) {\n if (cp < 0x170e) return false\n if (cp < 0x1712) return true\n if (cp < 0x1720) return false\n if (cp < 0x1732) return true\n if (cp < 0x1740) return false\n if (cp < 0x1752) return true\n if (cp < 0x1760) return false\n if (cp < 0x176d) return true\n if (cp < 0x176e) return false\n if (cp < 0x1771) return true\n return false\n }\n if (cp < 0x17b4) return true\n if (cp === 0x17d7) return true\n if (cp === 0x17dc) return true\n if (cp < 0x1820) return false\n if (cp < 0x1843) return true\n if (cp === 0x1843) return true\n return false\n }\n if (cp < 0x19b0) {\n if (cp < 0x18b0) {\n if (cp < 0x1844) return false\n if (cp < 0x1878) return true\n if (cp < 0x1880) return false\n if (cp < 0x1885) return true\n if (cp < 0x1885) return false\n if (cp < 0x1887) return true\n if (cp < 0x1887) return false\n if (cp < 0x18a9) return true\n if (cp === 0x18aa) return true\n return false\n }\n if (cp < 0x18f6) return true\n if (cp < 0x1900) return false\n if (cp < 0x191f) return true\n if (cp < 0x1950) return false\n if (cp < 0x196e) return true\n if (cp < 0x1970) return false\n if (cp < 0x1975) return true\n if (cp < 0x1980) return false\n if (cp < 0x19ac) return true\n return false\n }\n if (cp < 0x1b45) {\n if (cp < 0x19b0) return false\n if (cp < 0x19ca) return true\n if (cp < 0x1a00) return false\n if (cp < 0x1a17) return true\n if (cp < 0x1a20) return false\n if (cp < 0x1a55) return true\n if (cp === 0x1aa7) return true\n if (cp < 0x1b05) return false\n if (cp < 0x1b34) return true\n return false\n }\n if (cp < 0x1b4c) return true\n if (cp < 0x1b83) return false\n if (cp < 0x1ba1) return true\n if (cp < 0x1bae) return false\n if (cp < 0x1bb0) return true\n if (cp < 0x1bba) return false\n if (cp < 0x1be6) return true\n if (cp < 0x1c00) return false\n if (cp < 0x1c24) return true\n if (cp < 0x1c4d) return false\n if (cp < 0x1c50) return true\n return false\n }\n if (cp < 0x2126) {\n if (cp < 0x1f5f) {\n if (cp < 0x1d79) {\n if (cp < 0x1cf5) {\n if (cp < 0x1c5a) return false\n if (cp < 0x1c78) return true\n if (cp < 0x1c78) return false\n if (cp < 0x1c7e) return true\n if (cp < 0x1c80) return false\n if (cp < 0x1c89) return true\n if (cp < 0x1ce9) return false\n if (cp < 0x1ced) return true\n if (cp < 0x1cee) return false\n if (cp < 0x1cf2) return true\n return false\n }\n if (cp < 0x1cf7) return true\n if (cp < 0x1d00) return false\n if (cp < 0x1d2c) return true\n if (cp < 0x1d2c) return false\n if (cp < 0x1d6b) return true\n if (cp < 0x1d6b) return false\n if (cp < 0x1d78) return true\n if (cp === 0x1d78) return true\n return false\n }\n if (cp < 0x1f48) {\n if (cp < 0x1d79) return false\n if (cp < 0x1d9b) return true\n if (cp < 0x1d9b) return false\n if (cp < 0x1dc0) return true\n if (cp < 0x1e00) return false\n if (cp < 0x1f16) return true\n if (cp < 0x1f18) return false\n if (cp < 0x1f1e) return true\n if (cp < 0x1f20) return false\n if (cp < 0x1f46) return true\n return false\n }\n if (cp < 0x1f4e) return true\n if (cp < 0x1f50) return false\n if (cp < 0x1f58) return true\n if (cp === 0x1f59) return true\n if (cp === 0x1f5b) return true\n if (cp === 0x1f5d) return true\n return false\n }\n if (cp < 0x1ff6) {\n if (cp < 0x1fc6) {\n if (cp < 0x1f5f) return false\n if (cp < 0x1f7e) return true\n if (cp < 0x1f80) return false\n if (cp < 0x1fb5) return true\n if (cp < 0x1fb6) return false\n if (cp < 0x1fbd) return true\n if (cp === 0x1fbe) return true\n if (cp < 0x1fc2) return false\n if (cp < 0x1fc5) return true\n return false\n }\n if (cp < 0x1fcd) return true\n if (cp < 0x1fd0) return false\n if (cp < 0x1fd4) return true\n if (cp < 0x1fd6) return false\n if (cp < 0x1fdc) return true\n if (cp < 0x1fe0) return false\n if (cp < 0x1fed) return true\n if (cp < 0x1ff2) return false\n if (cp < 0x1ff5) return true\n return false\n }\n if (cp < 0x2107) {\n if (cp < 0x1ff6) return false\n if (cp < 0x1ffd) return true\n if (cp === 0x2071) return true\n if (cp === 0x207f) return true\n if (cp < 0x2090) return false\n if (cp < 0x209d) return true\n if (cp === 0x2102) return true\n return false\n }\n if (cp === 0x2107) return true\n if (cp < 0x210a) return false\n if (cp < 0x2114) return true\n if (cp === 0x2115) return true\n if (cp === 0x2118) return true\n if (cp < 0x2119) return false\n if (cp < 0x211e) return true\n if (cp === 0x2124) return true\n return false\n }\n if (cp < 0x2d00) {\n if (cp < 0x2160) {\n if (cp < 0x2135) {\n if (cp === 0x2126) return true\n if (cp === 0x2128) return true\n if (cp < 0x212a) return false\n if (cp < 0x212e) return true\n if (cp === 0x212e) return true\n if (cp < 0x212f) return false\n if (cp < 0x2135) return true\n return false\n }\n if (cp < 0x2139) return true\n if (cp === 0x2139) return true\n if (cp < 0x213c) return false\n if (cp < 0x2140) return true\n if (cp < 0x2145) return false\n if (cp < 0x214a) return true\n if (cp === 0x214e) return true\n return false\n }\n if (cp < 0x2c60) {\n if (cp < 0x2160) return false\n if (cp < 0x2183) return true\n if (cp < 0x2183) return false\n if (cp < 0x2185) return true\n if (cp < 0x2185) return false\n if (cp < 0x2189) return true\n if (cp < 0x2c00) return false\n if (cp < 0x2c2f) return true\n if (cp < 0x2c30) return false\n if (cp < 0x2c5f) return true\n return false\n }\n if (cp < 0x2c7c) return true\n if (cp < 0x2c7c) return false\n if (cp < 0x2c7e) return true\n if (cp < 0x2c7e) return false\n if (cp < 0x2ce5) return true\n if (cp < 0x2ceb) return false\n if (cp < 0x2cef) return true\n if (cp < 0x2cf2) return false\n if (cp < 0x2cf4) return true\n return false\n }\n if (cp < 0x2dc0) {\n if (cp < 0x2d80) {\n if (cp < 0x2d00) return false\n if (cp < 0x2d26) return true\n if (cp === 0x2d27) return true\n if (cp === 0x2d2d) return true\n if (cp < 0x2d30) return false\n if (cp < 0x2d68) return true\n if (cp === 0x2d6f) return true\n return false\n }\n if (cp < 0x2d97) return true\n if (cp < 0x2da0) return false\n if (cp < 0x2da7) return true\n if (cp < 0x2da8) return false\n if (cp < 0x2daf) return true\n if (cp < 0x2db0) return false\n if (cp < 0x2db7) return true\n if (cp < 0x2db8) return false\n if (cp < 0x2dbf) return true\n return false\n }\n if (cp < 0x3006) {\n if (cp < 0x2dc0) return false\n if (cp < 0x2dc7) return true\n if (cp < 0x2dc8) return false\n if (cp < 0x2dcf) return true\n if (cp < 0x2dd0) return false\n if (cp < 0x2dd7) return true\n if (cp < 0x2dd8) return false\n if (cp < 0x2ddf) return true\n if (cp === 0x3005) return true\n return false\n }\n if (cp === 0x3006) return true\n if (cp === 0x3007) return true\n if (cp < 0x3021) return false\n if (cp < 0x302a) return true\n if (cp < 0x3031) return false\n if (cp < 0x3036) return true\n if (cp < 0x3038) return false\n if (cp < 0x303b) return true\n if (cp === 0x303b) return true\n return false\n }\n if (cp < 0x10a10) {\n if (cp < 0xab28) {\n if (cp < 0xa7fa) {\n if (cp < 0xa60c) {\n if (cp < 0x31a0) {\n if (cp < 0x30a1) {\n if (cp === 0x303c) return true\n if (cp < 0x3041) return false\n if (cp < 0x3097) return true\n if (cp < 0x309b) return false\n if (cp < 0x309d) return true\n if (cp < 0x309d) return false\n if (cp < 0x309f) return true\n if (cp === 0x309f) return true\n return false\n }\n if (cp < 0x30fb) return true\n if (cp < 0x30fc) return false\n if (cp < 0x30ff) return true\n if (cp === 0x30ff) return true\n if (cp < 0x3105) return false\n if (cp < 0x312f) return true\n if (cp < 0x3131) return false\n if (cp < 0x318f) return true\n return false\n }\n if (cp < 0xa015) {\n if (cp < 0x31a0) return false\n if (cp < 0x31bb) return true\n if (cp < 0x31f0) return false\n if (cp < 0x3200) return true\n if (cp < 0x3400) return false\n if (cp < 0x4db6) return true\n if (cp < 0x4e00) return false\n if (cp < 0x9feb) return true\n if (cp < 0xa000) return false\n if (cp < 0xa015) return true\n return false\n }\n if (cp === 0xa015) return true\n if (cp < 0xa016) return false\n if (cp < 0xa48d) return true\n if (cp < 0xa4d0) return false\n if (cp < 0xa4f8) return true\n if (cp < 0xa4f8) return false\n if (cp < 0xa4fe) return true\n if (cp < 0xa500) return false\n if (cp < 0xa60c) return true\n return false\n }\n if (cp < 0xa717) {\n if (cp < 0xa67f) {\n if (cp === 0xa60c) return true\n if (cp < 0xa610) return false\n if (cp < 0xa620) return true\n if (cp < 0xa62a) return false\n if (cp < 0xa62c) return true\n if (cp < 0xa640) return false\n if (cp < 0xa66e) return true\n if (cp === 0xa66e) return true\n return false\n }\n if (cp === 0xa67f) return true\n if (cp < 0xa680) return false\n if (cp < 0xa69c) return true\n if (cp < 0xa69c) return false\n if (cp < 0xa69e) return true\n if (cp < 0xa6a0) return false\n if (cp < 0xa6e6) return true\n if (cp < 0xa6e6) return false\n if (cp < 0xa6f0) return true\n return false\n }\n if (cp < 0xa78b) {\n if (cp < 0xa717) return false\n if (cp < 0xa720) return true\n if (cp < 0xa722) return false\n if (cp < 0xa770) return true\n if (cp === 0xa770) return true\n if (cp < 0xa771) return false\n if (cp < 0xa788) return true\n if (cp === 0xa788) return true\n return false\n }\n if (cp < 0xa78f) return true\n if (cp === 0xa78f) return true\n if (cp < 0xa790) return false\n if (cp < 0xa7af) return true\n if (cp < 0xa7b0) return false\n if (cp < 0xa7b8) return true\n if (cp === 0xa7f7) return true\n if (cp < 0xa7f8) return false\n if (cp < 0xa7fa) return true\n return false\n }\n if (cp < 0xaa40) {\n if (cp < 0xa90a) {\n if (cp < 0xa840) {\n if (cp === 0xa7fa) return true\n if (cp < 0xa7fb) return false\n if (cp < 0xa802) return true\n if (cp < 0xa803) return false\n if (cp < 0xa806) return true\n if (cp < 0xa807) return false\n if (cp < 0xa80b) return true\n if (cp < 0xa80c) return false\n if (cp < 0xa823) return true\n return false\n }\n if (cp < 0xa874) return true\n if (cp < 0xa882) return false\n if (cp < 0xa8b4) return true\n if (cp < 0xa8f2) return false\n if (cp < 0xa8f8) return true\n if (cp === 0xa8fb) return true\n if (cp === 0xa8fd) return true\n return false\n }\n if (cp < 0xa9e0) {\n if (cp < 0xa90a) return false\n if (cp < 0xa926) return true\n if (cp < 0xa930) return false\n if (cp < 0xa947) return true\n if (cp < 0xa960) return false\n if (cp < 0xa97d) return true\n if (cp < 0xa984) return false\n if (cp < 0xa9b3) return true\n if (cp === 0xa9cf) return true\n return false\n }\n if (cp < 0xa9e5) return true\n if (cp === 0xa9e6) return true\n if (cp < 0xa9e7) return false\n if (cp < 0xa9f0) return true\n if (cp < 0xa9fa) return false\n if (cp < 0xa9ff) return true\n if (cp < 0xaa00) return false\n if (cp < 0xaa29) return true\n return false\n }\n if (cp < 0xaac0) {\n if (cp < 0xaa7a) {\n if (cp < 0xaa40) return false\n if (cp < 0xaa43) return true\n if (cp < 0xaa44) return false\n if (cp < 0xaa4c) return true\n if (cp < 0xaa60) return false\n if (cp < 0xaa70) return true\n if (cp === 0xaa70) return true\n if (cp < 0xaa71) return false\n if (cp < 0xaa77) return true\n return false\n }\n if (cp === 0xaa7a) return true\n if (cp < 0xaa7e) return false\n if (cp < 0xaab0) return true\n if (cp === 0xaab1) return true\n if (cp < 0xaab5) return false\n if (cp < 0xaab7) return true\n if (cp < 0xaab9) return false\n if (cp < 0xaabe) return true\n return false\n }\n if (cp < 0xaaf2) {\n if (cp === 0xaac0) return true\n if (cp === 0xaac2) return true\n if (cp < 0xaadb) return false\n if (cp < 0xaadd) return true\n if (cp === 0xaadd) return true\n if (cp < 0xaae0) return false\n if (cp < 0xaaeb) return true\n return false\n }\n if (cp === 0xaaf2) return true\n if (cp < 0xaaf3) return false\n if (cp < 0xaaf5) return true\n if (cp < 0xab01) return false\n if (cp < 0xab07) return true\n if (cp < 0xab09) return false\n if (cp < 0xab0f) return true\n if (cp < 0xab11) return false\n if (cp < 0xab17) return true\n if (cp < 0xab20) return false\n if (cp < 0xab27) return true\n return false\n }\n if (cp < 0x1003c) {\n if (cp < 0xfb46) {\n if (cp < 0xfa70) {\n if (cp < 0xabc0) {\n if (cp < 0xab28) return false\n if (cp < 0xab2f) return true\n if (cp < 0xab30) return false\n if (cp < 0xab5b) return true\n if (cp < 0xab5c) return false\n if (cp < 0xab60) return true\n if (cp < 0xab60) return false\n if (cp < 0xab66) return true\n if (cp < 0xab70) return false\n if (cp < 0xabc0) return true\n return false\n }\n if (cp < 0xabe3) return true\n if (cp < 0xac00) return false\n if (cp < 0xd7a4) return true\n if (cp < 0xd7b0) return false\n if (cp < 0xd7c7) return true\n if (cp < 0xd7cb) return false\n if (cp < 0xd7fc) return true\n if (cp < 0xf900) return false\n if (cp < 0xfa6e) return true\n return false\n }\n if (cp < 0xfb2a) {\n if (cp < 0xfa70) return false\n if (cp < 0xfada) return true\n if (cp < 0xfb00) return false\n if (cp < 0xfb07) return true\n if (cp < 0xfb13) return false\n if (cp < 0xfb18) return true\n if (cp === 0xfb1d) return true\n if (cp < 0xfb1f) return false\n if (cp < 0xfb29) return true\n return false\n }\n if (cp < 0xfb37) return true\n if (cp < 0xfb38) return false\n if (cp < 0xfb3d) return true\n if (cp === 0xfb3e) return true\n if (cp < 0xfb40) return false\n if (cp < 0xfb42) return true\n if (cp < 0xfb43) return false\n if (cp < 0xfb45) return true\n return false\n }\n if (cp < 0xff70) {\n if (cp < 0xfe70) {\n if (cp < 0xfb46) return false\n if (cp < 0xfbb2) return true\n if (cp < 0xfbd3) return false\n if (cp < 0xfd3e) return true\n if (cp < 0xfd50) return false\n if (cp < 0xfd90) return true\n if (cp < 0xfd92) return false\n if (cp < 0xfdc8) return true\n if (cp < 0xfdf0) return false\n if (cp < 0xfdfc) return true\n return false\n }\n if (cp < 0xfe75) return true\n if (cp < 0xfe76) return false\n if (cp < 0xfefd) return true\n if (cp < 0xff21) return false\n if (cp < 0xff3b) return true\n if (cp < 0xff41) return false\n if (cp < 0xff5b) return true\n if (cp < 0xff66) return false\n if (cp < 0xff70) return true\n return false\n }\n if (cp < 0xffca) {\n if (cp === 0xff70) return true\n if (cp < 0xff71) return false\n if (cp < 0xff9e) return true\n if (cp < 0xff9e) return false\n if (cp < 0xffa0) return true\n if (cp < 0xffa0) return false\n if (cp < 0xffbf) return true\n if (cp < 0xffc2) return false\n if (cp < 0xffc8) return true\n return false\n }\n if (cp < 0xffd0) return true\n if (cp < 0xffd2) return false\n if (cp < 0xffd8) return true\n if (cp < 0xffda) return false\n if (cp < 0xffdd) return true\n if (cp < 0x10000) return false\n if (cp < 0x1000c) return true\n if (cp < 0x1000d) return false\n if (cp < 0x10027) return true\n if (cp < 0x10028) return false\n if (cp < 0x1003b) return true\n return false\n }\n if (cp < 0x104d8) {\n if (cp < 0x10342) {\n if (cp < 0x10280) {\n if (cp < 0x1003c) return false\n if (cp < 0x1003e) return true\n if (cp < 0x1003f) return false\n if (cp < 0x1004e) return true\n if (cp < 0x10050) return false\n if (cp < 0x1005e) return true\n if (cp < 0x10080) return false\n if (cp < 0x100fb) return true\n if (cp < 0x10140) return false\n if (cp < 0x10175) return true\n return false\n }\n if (cp < 0x1029d) return true\n if (cp < 0x102a0) return false\n if (cp < 0x102d1) return true\n if (cp < 0x10300) return false\n if (cp < 0x10320) return true\n if (cp < 0x1032d) return false\n if (cp < 0x10341) return true\n if (cp === 0x10341) return true\n return false\n }\n if (cp < 0x103c8) {\n if (cp < 0x10342) return false\n if (cp < 0x1034a) return true\n if (cp === 0x1034a) return true\n if (cp < 0x10350) return false\n if (cp < 0x10376) return true\n if (cp < 0x10380) return false\n if (cp < 0x1039e) return true\n if (cp < 0x103a0) return false\n if (cp < 0x103c4) return true\n return false\n }\n if (cp < 0x103d0) return true\n if (cp < 0x103d1) return false\n if (cp < 0x103d6) return true\n if (cp < 0x10400) return false\n if (cp < 0x10450) return true\n if (cp < 0x10450) return false\n if (cp < 0x1049e) return true\n if (cp < 0x104b0) return false\n if (cp < 0x104d4) return true\n return false\n }\n if (cp < 0x1083c) {\n if (cp < 0x10760) {\n if (cp < 0x104d8) return false\n if (cp < 0x104fc) return true\n if (cp < 0x10500) return false\n if (cp < 0x10528) return true\n if (cp < 0x10530) return false\n if (cp < 0x10564) return true\n if (cp < 0x10600) return false\n if (cp < 0x10737) return true\n if (cp < 0x10740) return false\n if (cp < 0x10756) return true\n return false\n }\n if (cp < 0x10768) return true\n if (cp < 0x10800) return false\n if (cp < 0x10806) return true\n if (cp === 0x10808) return true\n if (cp < 0x1080a) return false\n if (cp < 0x10836) return true\n if (cp < 0x10837) return false\n if (cp < 0x10839) return true\n return false\n }\n if (cp < 0x108f4) {\n if (cp === 0x1083c) return true\n if (cp < 0x1083f) return false\n if (cp < 0x10856) return true\n if (cp < 0x10860) return false\n if (cp < 0x10877) return true\n if (cp < 0x10880) return false\n if (cp < 0x1089f) return true\n if (cp < 0x108e0) return false\n if (cp < 0x108f3) return true\n return false\n }\n if (cp < 0x108f6) return true\n if (cp < 0x10900) return false\n if (cp < 0x10916) return true\n if (cp < 0x10920) return false\n if (cp < 0x1093a) return true\n if (cp < 0x10980) return false\n if (cp < 0x109b8) return true\n if (cp < 0x109be) return false\n if (cp < 0x109c0) return true\n if (cp === 0x10a00) return true\n return false\n }\n if (cp < 0x16f50) {\n if (cp < 0x11400) {\n if (cp < 0x11183) {\n if (cp < 0x10b80) {\n if (cp < 0x10ac0) {\n if (cp < 0x10a10) return false\n if (cp < 0x10a14) return true\n if (cp < 0x10a15) return false\n if (cp < 0x10a18) return true\n if (cp < 0x10a19) return false\n if (cp < 0x10a34) return true\n if (cp < 0x10a60) return false\n if (cp < 0x10a7d) return true\n if (cp < 0x10a80) return false\n if (cp < 0x10a9d) return true\n return false\n }\n if (cp < 0x10ac8) return true\n if (cp < 0x10ac9) return false\n if (cp < 0x10ae5) return true\n if (cp < 0x10b00) return false\n if (cp < 0x10b36) return true\n if (cp < 0x10b40) return false\n if (cp < 0x10b56) return true\n if (cp < 0x10b60) return false\n if (cp < 0x10b73) return true\n return false\n }\n if (cp < 0x11083) {\n if (cp < 0x10b80) return false\n if (cp < 0x10b92) return true\n if (cp < 0x10c00) return false\n if (cp < 0x10c49) return true\n if (cp < 0x10c80) return false\n if (cp < 0x10cb3) return true\n if (cp < 0x10cc0) return false\n if (cp < 0x10cf3) return true\n if (cp < 0x11003) return false\n if (cp < 0x11038) return true\n return false\n }\n if (cp < 0x110b0) return true\n if (cp < 0x110d0) return false\n if (cp < 0x110e9) return true\n if (cp < 0x11103) return false\n if (cp < 0x11127) return true\n if (cp < 0x11150) return false\n if (cp < 0x11173) return true\n if (cp === 0x11176) return true\n return false\n }\n if (cp < 0x1129f) {\n if (cp < 0x11213) {\n if (cp < 0x11183) return false\n if (cp < 0x111b3) return true\n if (cp < 0x111c1) return false\n if (cp < 0x111c5) return true\n if (cp === 0x111da) return true\n if (cp === 0x111dc) return true\n if (cp < 0x11200) return false\n if (cp < 0x11212) return true\n return false\n }\n if (cp < 0x1122c) return true\n if (cp < 0x11280) return false\n if (cp < 0x11287) return true\n if (cp === 0x11288) return true\n if (cp < 0x1128a) return false\n if (cp < 0x1128e) return true\n if (cp < 0x1128f) return false\n if (cp < 0x1129e) return true\n return false\n }\n if (cp < 0x1132a) {\n if (cp < 0x1129f) return false\n if (cp < 0x112a9) return true\n if (cp < 0x112b0) return false\n if (cp < 0x112df) return true\n if (cp < 0x11305) return false\n if (cp < 0x1130d) return true\n if (cp < 0x1130f) return false\n if (cp < 0x11311) return true\n if (cp < 0x11313) return false\n if (cp < 0x11329) return true\n return false\n }\n if (cp < 0x11331) return true\n if (cp < 0x11332) return false\n if (cp < 0x11334) return true\n if (cp < 0x11335) return false\n if (cp < 0x1133a) return true\n if (cp === 0x1133d) return true\n if (cp === 0x11350) return true\n if (cp < 0x1135d) return false\n if (cp < 0x11362) return true\n return false\n }\n if (cp < 0x11c00) {\n if (cp < 0x11700) {\n if (cp < 0x11580) {\n if (cp < 0x11400) return false\n if (cp < 0x11435) return true\n if (cp < 0x11447) return false\n if (cp < 0x1144b) return true\n if (cp < 0x11480) return false\n if (cp < 0x114b0) return true\n if (cp < 0x114c4) return false\n if (cp < 0x114c6) return true\n if (cp === 0x114c7) return true\n return false\n }\n if (cp < 0x115af) return true\n if (cp < 0x115d8) return false\n if (cp < 0x115dc) return true\n if (cp < 0x11600) return false\n if (cp < 0x11630) return true\n if (cp === 0x11644) return true\n if (cp < 0x11680) return false\n if (cp < 0x116ab) return true\n return false\n }\n if (cp < 0x11a3a) {\n if (cp < 0x11700) return false\n if (cp < 0x1171a) return true\n if (cp < 0x118a0) return false\n if (cp < 0x118e0) return true\n if (cp === 0x118ff) return true\n if (cp === 0x11a00) return true\n if (cp < 0x11a0b) return false\n if (cp < 0x11a33) return true\n return false\n }\n if (cp === 0x11a3a) return true\n if (cp === 0x11a50) return true\n if (cp < 0x11a5c) return false\n if (cp < 0x11a84) return true\n if (cp < 0x11a86) return false\n if (cp < 0x11a8a) return true\n if (cp < 0x11ac0) return false\n if (cp < 0x11af9) return true\n return false\n }\n if (cp < 0x12480) {\n if (cp < 0x11d08) {\n if (cp < 0x11c00) return false\n if (cp < 0x11c09) return true\n if (cp < 0x11c0a) return false\n if (cp < 0x11c2f) return true\n if (cp === 0x11c40) return true\n if (cp < 0x11c72) return false\n if (cp < 0x11c90) return true\n if (cp < 0x11d00) return false\n if (cp < 0x11d07) return true\n return false\n }\n if (cp < 0x11d0a) return true\n if (cp < 0x11d0b) return false\n if (cp < 0x11d31) return true\n if (cp === 0x11d46) return true\n if (cp < 0x12000) return false\n if (cp < 0x1239a) return true\n if (cp < 0x12400) return false\n if (cp < 0x1246f) return true\n return false\n }\n if (cp < 0x16ad0) {\n if (cp < 0x12480) return false\n if (cp < 0x12544) return true\n if (cp < 0x13000) return false\n if (cp < 0x1342f) return true\n if (cp < 0x14400) return false\n if (cp < 0x14647) return true\n if (cp < 0x16800) return false\n if (cp < 0x16a39) return true\n if (cp < 0x16a40) return false\n if (cp < 0x16a5f) return true\n return false\n }\n if (cp < 0x16aee) return true\n if (cp < 0x16b00) return false\n if (cp < 0x16b30) return true\n if (cp < 0x16b40) return false\n if (cp < 0x16b44) return true\n if (cp < 0x16b63) return false\n if (cp < 0x16b78) return true\n if (cp < 0x16b7d) return false\n if (cp < 0x16b90) return true\n if (cp < 0x16f00) return false\n if (cp < 0x16f45) return true\n return false\n }\n if (cp < 0x1e800) {\n if (cp < 0x1d4c5) {\n if (cp < 0x1bc90) {\n if (cp < 0x1b000) {\n if (cp === 0x16f50) return true\n if (cp < 0x16f93) return false\n if (cp < 0x16fa0) return true\n if (cp < 0x16fe0) return false\n if (cp < 0x16fe2) return true\n if (cp < 0x17000) return false\n if (cp < 0x187ed) return true\n if (cp < 0x18800) return false\n if (cp < 0x18af3) return true\n return false\n }\n if (cp < 0x1b11f) return true\n if (cp < 0x1b170) return false\n if (cp < 0x1b2fc) return true\n if (cp < 0x1bc00) return false\n if (cp < 0x1bc6b) return true\n if (cp < 0x1bc70) return false\n if (cp < 0x1bc7d) return true\n if (cp < 0x1bc80) return false\n if (cp < 0x1bc89) return true\n return false\n }\n if (cp < 0x1d4a5) {\n if (cp < 0x1bc90) return false\n if (cp < 0x1bc9a) return true\n if (cp < 0x1d400) return false\n if (cp < 0x1d455) return true\n if (cp < 0x1d456) return false\n if (cp < 0x1d49d) return true\n if (cp < 0x1d49e) return false\n if (cp < 0x1d4a0) return true\n if (cp === 0x1d4a2) return true\n return false\n }\n if (cp < 0x1d4a7) return true\n if (cp < 0x1d4a9) return false\n if (cp < 0x1d4ad) return true\n if (cp < 0x1d4ae) return false\n if (cp < 0x1d4ba) return true\n if (cp === 0x1d4bb) return true\n if (cp < 0x1d4bd) return false\n if (cp < 0x1d4c4) return true\n return false\n }\n if (cp < 0x1d6a8) {\n if (cp < 0x1d53b) {\n if (cp < 0x1d4c5) return false\n if (cp < 0x1d506) return true\n if (cp < 0x1d507) return false\n if (cp < 0x1d50b) return true\n if (cp < 0x1d50d) return false\n if (cp < 0x1d515) return true\n if (cp < 0x1d516) return false\n if (cp < 0x1d51d) return true\n if (cp < 0x1d51e) return false\n if (cp < 0x1d53a) return true\n return false\n }\n if (cp < 0x1d53f) return true\n if (cp < 0x1d540) return false\n if (cp < 0x1d545) return true\n if (cp === 0x1d546) return true\n if (cp < 0x1d54a) return false\n if (cp < 0x1d551) return true\n if (cp < 0x1d552) return false\n if (cp < 0x1d6a6) return true\n return false\n }\n if (cp < 0x1d736) {\n if (cp < 0x1d6a8) return false\n if (cp < 0x1d6c1) return true\n if (cp < 0x1d6c2) return false\n if (cp < 0x1d6db) return true\n if (cp < 0x1d6dc) return false\n if (cp < 0x1d6fb) return true\n if (cp < 0x1d6fc) return false\n if (cp < 0x1d715) return true\n if (cp < 0x1d716) return false\n if (cp < 0x1d735) return true\n return false\n }\n if (cp < 0x1d74f) return true\n if (cp < 0x1d750) return false\n if (cp < 0x1d76f) return true\n if (cp < 0x1d770) return false\n if (cp < 0x1d789) return true\n if (cp < 0x1d78a) return false\n if (cp < 0x1d7a9) return true\n if (cp < 0x1d7aa) return false\n if (cp < 0x1d7c3) return true\n if (cp < 0x1d7c4) return false\n if (cp < 0x1d7cc) return true\n return false\n }\n if (cp < 0x1ee5b) {\n if (cp < 0x1ee3b) {\n if (cp < 0x1ee24) {\n if (cp < 0x1e800) return false\n if (cp < 0x1e8c5) return true\n if (cp < 0x1e900) return false\n if (cp < 0x1e944) return true\n if (cp < 0x1ee00) return false\n if (cp < 0x1ee04) return true\n if (cp < 0x1ee05) return false\n if (cp < 0x1ee20) return true\n if (cp < 0x1ee21) return false\n if (cp < 0x1ee23) return true\n return false\n }\n if (cp === 0x1ee24) return true\n if (cp === 0x1ee27) return true\n if (cp < 0x1ee29) return false\n if (cp < 0x1ee33) return true\n if (cp < 0x1ee34) return false\n if (cp < 0x1ee38) return true\n if (cp === 0x1ee39) return true\n return false\n }\n if (cp < 0x1ee4d) {\n if (cp === 0x1ee3b) return true\n if (cp === 0x1ee42) return true\n if (cp === 0x1ee47) return true\n if (cp === 0x1ee49) return true\n if (cp === 0x1ee4b) return true\n return false\n }\n if (cp < 0x1ee50) return true\n if (cp < 0x1ee51) return false\n if (cp < 0x1ee53) return true\n if (cp === 0x1ee54) return true\n if (cp === 0x1ee57) return true\n if (cp === 0x1ee59) return true\n return false\n }\n if (cp < 0x1ee80) {\n if (cp < 0x1ee67) {\n if (cp === 0x1ee5b) return true\n if (cp === 0x1ee5d) return true\n if (cp === 0x1ee5f) return true\n if (cp < 0x1ee61) return false\n if (cp < 0x1ee63) return true\n if (cp === 0x1ee64) return true\n return false\n }\n if (cp < 0x1ee6b) return true\n if (cp < 0x1ee6c) return false\n if (cp < 0x1ee73) return true\n if (cp < 0x1ee74) return false\n if (cp < 0x1ee78) return true\n if (cp < 0x1ee79) return false\n if (cp < 0x1ee7d) return true\n if (cp === 0x1ee7e) return true\n return false\n }\n if (cp < 0x20000) {\n if (cp < 0x1ee80) return false\n if (cp < 0x1ee8a) return true\n if (cp < 0x1ee8b) return false\n if (cp < 0x1ee9c) return true\n if (cp < 0x1eea1) return false\n if (cp < 0x1eea4) return true\n if (cp < 0x1eea5) return false\n if (cp < 0x1eeaa) return true\n if (cp < 0x1eeab) return false\n if (cp < 0x1eebc) return true\n return false\n }\n if (cp < 0x2a6d7) return true\n if (cp < 0x2a700) return false\n if (cp < 0x2b735) return true\n if (cp < 0x2b740) return false\n if (cp < 0x2b81e) return true\n if (cp < 0x2b820) return false\n if (cp < 0x2cea2) return true\n if (cp < 0x2ceb0) return false\n if (cp < 0x2ebe1) return true\n if (cp < 0x2f800) return false\n if (cp < 0x2fa1e) return true\n return false\n}\n\nfunction isLargeIdContinue(cp: number): boolean {\n if (cp < 0x1bf2) {\n if (cp < 0xd62) {\n if (cp < 0xa83) {\n if (cp < 0x93b) {\n if (cp < 0x6ea) {\n if (cp < 0x5c7) {\n if (cp === 0xb7) return true\n if (cp < 0x300) return false\n if (cp < 0x370) return true\n if (cp === 0x387) return true\n if (cp < 0x483) return false\n if (cp < 0x488) return true\n if (cp < 0x591) return false\n if (cp < 0x5be) return true\n if (cp === 0x5bf) return true\n if (cp < 0x5c1) return false\n if (cp < 0x5c3) return true\n if (cp < 0x5c4) return false\n if (cp < 0x5c6) return true\n return false\n }\n if (cp === 0x5c7) return true\n if (cp < 0x610) return false\n if (cp < 0x61b) return true\n if (cp < 0x64b) return false\n if (cp < 0x660) return true\n if (cp < 0x660) return false\n if (cp < 0x66a) return true\n if (cp === 0x670) return true\n if (cp < 0x6d6) return false\n if (cp < 0x6dd) return true\n if (cp < 0x6df) return false\n if (cp < 0x6e5) return true\n if (cp < 0x6e7) return false\n if (cp < 0x6e9) return true\n return false\n }\n if (cp < 0x81b) {\n if (cp < 0x6ea) return false\n if (cp < 0x6ee) return true\n if (cp < 0x6f0) return false\n if (cp < 0x6fa) return true\n if (cp === 0x711) return true\n if (cp < 0x730) return false\n if (cp < 0x74b) return true\n if (cp < 0x7a6) return false\n if (cp < 0x7b1) return true\n if (cp < 0x7c0) return false\n if (cp < 0x7ca) return true\n if (cp < 0x7eb) return false\n if (cp < 0x7f4) return true\n if (cp < 0x816) return false\n if (cp < 0x81a) return true\n return false\n }\n if (cp < 0x824) return true\n if (cp < 0x825) return false\n if (cp < 0x828) return true\n if (cp < 0x829) return false\n if (cp < 0x82e) return true\n if (cp < 0x859) return false\n if (cp < 0x85c) return true\n if (cp < 0x8d4) return false\n if (cp < 0x8e2) return true\n if (cp < 0x8e3) return false\n if (cp < 0x903) return true\n if (cp === 0x903) return true\n if (cp === 0x93a) return true\n return false\n }\n if (cp < 0x9cb) {\n if (cp < 0x962) {\n if (cp === 0x93b) return true\n if (cp === 0x93c) return true\n if (cp < 0x93e) return false\n if (cp < 0x941) return true\n if (cp < 0x941) return false\n if (cp < 0x949) return true\n if (cp < 0x949) return false\n if (cp < 0x94d) return true\n if (cp === 0x94d) return true\n if (cp < 0x94e) return false\n if (cp < 0x950) return true\n if (cp < 0x951) return false\n if (cp < 0x958) return true\n return false\n }\n if (cp < 0x964) return true\n if (cp < 0x966) return false\n if (cp < 0x970) return true\n if (cp === 0x981) return true\n if (cp < 0x982) return false\n if (cp < 0x984) return true\n if (cp === 0x9bc) return true\n if (cp < 0x9be) return false\n if (cp < 0x9c1) return true\n if (cp < 0x9c1) return false\n if (cp < 0x9c5) return true\n if (cp < 0x9c7) return false\n if (cp < 0x9c9) return true\n return false\n }\n if (cp < 0xa3e) {\n if (cp < 0x9cb) return false\n if (cp < 0x9cd) return true\n if (cp === 0x9cd) return true\n if (cp === 0x9d7) return true\n if (cp < 0x9e2) return false\n if (cp < 0x9e4) return true\n if (cp < 0x9e6) return false\n if (cp < 0x9f0) return true\n if (cp < 0xa01) return false\n if (cp < 0xa03) return true\n if (cp === 0xa03) return true\n if (cp === 0xa3c) return true\n return false\n }\n if (cp < 0xa41) return true\n if (cp < 0xa41) return false\n if (cp < 0xa43) return true\n if (cp < 0xa47) return false\n if (cp < 0xa49) return true\n if (cp < 0xa4b) return false\n if (cp < 0xa4e) return true\n if (cp === 0xa51) return true\n if (cp < 0xa66) return false\n if (cp < 0xa70) return true\n if (cp < 0xa70) return false\n if (cp < 0xa72) return true\n if (cp === 0xa75) return true\n if (cp < 0xa81) return false\n if (cp < 0xa83) return true\n return false\n }\n if (cp < 0xbd7) {\n if (cp < 0xb40) {\n if (cp < 0xae2) {\n if (cp === 0xa83) return true\n if (cp === 0xabc) return true\n if (cp < 0xabe) return false\n if (cp < 0xac1) return true\n if (cp < 0xac1) return false\n if (cp < 0xac6) return true\n if (cp < 0xac7) return false\n if (cp < 0xac9) return true\n if (cp === 0xac9) return true\n if (cp < 0xacb) return false\n if (cp < 0xacd) return true\n if (cp === 0xacd) return true\n return false\n }\n if (cp < 0xae4) return true\n if (cp < 0xae6) return false\n if (cp < 0xaf0) return true\n if (cp < 0xafa) return false\n if (cp < 0xb00) return true\n if (cp === 0xb01) return true\n if (cp < 0xb02) return false\n if (cp < 0xb04) return true\n if (cp === 0xb3c) return true\n if (cp === 0xb3e) return true\n if (cp === 0xb3f) return true\n return false\n }\n if (cp < 0xb66) {\n if (cp === 0xb40) return true\n if (cp < 0xb41) return false\n if (cp < 0xb45) return true\n if (cp < 0xb47) return false\n if (cp < 0xb49) return true\n if (cp < 0xb4b) return false\n if (cp < 0xb4d) return true\n if (cp === 0xb4d) return true\n if (cp === 0xb56) return true\n if (cp === 0xb57) return true\n if (cp < 0xb62) return false\n if (cp < 0xb64) return true\n return false\n }\n if (cp < 0xb70) return true\n if (cp === 0xb82) return true\n if (cp < 0xbbe) return false\n if (cp < 0xbc0) return true\n if (cp === 0xbc0) return true\n if (cp < 0xbc1) return false\n if (cp < 0xbc3) return true\n if (cp < 0xbc6) return false\n if (cp < 0xbc9) return true\n if (cp < 0xbca) return false\n if (cp < 0xbcd) return true\n if (cp === 0xbcd) return true\n return false\n }\n if (cp < 0xcc0) {\n if (cp < 0xc55) {\n if (cp === 0xbd7) return true\n if (cp < 0xbe6) return false\n if (cp < 0xbf0) return true\n if (cp === 0xc00) return true\n if (cp < 0xc01) return false\n if (cp < 0xc04) return true\n if (cp < 0xc3e) return false\n if (cp < 0xc41) return true\n if (cp < 0xc41) return false\n if (cp < 0xc45) return true\n if (cp < 0xc46) return false\n if (cp < 0xc49) return true\n if (cp < 0xc4a) return false\n if (cp < 0xc4e) return true\n return false\n }\n if (cp < 0xc57) return true\n if (cp < 0xc62) return false\n if (cp < 0xc64) return true\n if (cp < 0xc66) return false\n if (cp < 0xc70) return true\n if (cp === 0xc81) return true\n if (cp < 0xc82) return false\n if (cp < 0xc84) return true\n if (cp === 0xcbc) return true\n if (cp === 0xcbe) return true\n if (cp === 0xcbf) return true\n return false\n }\n if (cp < 0xd00) {\n if (cp < 0xcc0) return false\n if (cp < 0xcc5) return true\n if (cp === 0xcc6) return true\n if (cp < 0xcc7) return false\n if (cp < 0xcc9) return true\n if (cp < 0xcca) return false\n if (cp < 0xccc) return true\n if (cp < 0xccc) return false\n if (cp < 0xcce) return true\n if (cp < 0xcd5) return false\n if (cp < 0xcd7) return true\n if (cp < 0xce2) return false\n if (cp < 0xce4) return true\n if (cp < 0xce6) return false\n if (cp < 0xcf0) return true\n return false\n }\n if (cp < 0xd02) return true\n if (cp < 0xd02) return false\n if (cp < 0xd04) return true\n if (cp < 0xd3b) return false\n if (cp < 0xd3d) return true\n if (cp < 0xd3e) return false\n if (cp < 0xd41) return true\n if (cp < 0xd41) return false\n if (cp < 0xd45) return true\n if (cp < 0xd46) return false\n if (cp < 0xd49) return true\n if (cp < 0xd4a) return false\n if (cp < 0xd4d) return true\n if (cp === 0xd4d) return true\n if (cp === 0xd57) return true\n return false\n }\n if (cp < 0x17be) {\n if (cp < 0x102b) {\n if (cp < 0xebb) {\n if (cp < 0xde6) {\n if (cp < 0xd62) return false\n if (cp < 0xd64) return true\n if (cp < 0xd66) return false\n if (cp < 0xd70) return true\n if (cp < 0xd82) return false\n if (cp < 0xd84) return true\n if (cp === 0xdca) return true\n if (cp < 0xdcf) return false\n if (cp < 0xdd2) return true\n if (cp < 0xdd2) return false\n if (cp < 0xdd5) return true\n if (cp === 0xdd6) return true\n if (cp < 0xdd8) return false\n if (cp < 0xde0) return true\n return false\n }\n if (cp < 0xdf0) return true\n if (cp < 0xdf2) return false\n if (cp < 0xdf4) return true\n if (cp === 0xe31) return true\n if (cp < 0xe34) return false\n if (cp < 0xe3b) return true\n if (cp < 0xe47) return false\n if (cp < 0xe4f) return true\n if (cp < 0xe50) return false\n if (cp < 0xe5a) return true\n if (cp === 0xeb1) return true\n if (cp < 0xeb4) return false\n if (cp < 0xeba) return true\n return false\n }\n if (cp < 0xf3e) {\n if (cp < 0xebb) return false\n if (cp < 0xebd) return true\n if (cp < 0xec8) return false\n if (cp < 0xece) return true\n if (cp < 0xed0) return false\n if (cp < 0xeda) return true\n if (cp < 0xf18) return false\n if (cp < 0xf1a) return true\n if (cp < 0xf20) return false\n if (cp < 0xf2a) return true\n if (cp === 0xf35) return true\n if (cp === 0xf37) return true\n if (cp === 0xf39) return true\n return false\n }\n if (cp < 0xf40) return true\n if (cp < 0xf71) return false\n if (cp < 0xf7f) return true\n if (cp === 0xf7f) return true\n if (cp < 0xf80) return false\n if (cp < 0xf85) return true\n if (cp < 0xf86) return false\n if (cp < 0xf88) return true\n if (cp < 0xf8d) return false\n if (cp < 0xf98) return true\n if (cp < 0xf99) return false\n if (cp < 0xfbd) return true\n if (cp === 0xfc6) return true\n return false\n }\n if (cp < 0x1083) {\n if (cp < 0x1040) {\n if (cp < 0x102b) return false\n if (cp < 0x102d) return true\n if (cp < 0x102d) return false\n if (cp < 0x1031) return true\n if (cp === 0x1031) return true\n if (cp < 0x1032) return false\n if (cp < 0x1038) return true\n if (cp === 0x1038) return true\n if (cp < 0x1039) return false\n if (cp < 0x103b) return true\n if (cp < 0x103b) return false\n if (cp < 0x103d) return true\n if (cp < 0x103d) return false\n if (cp < 0x103f) return true\n return false\n }\n if (cp < 0x104a) return true\n if (cp < 0x1056) return false\n if (cp < 0x1058) return true\n if (cp < 0x1058) return false\n if (cp < 0x105a) return true\n if (cp < 0x105e) return false\n if (cp < 0x1061) return true\n if (cp < 0x1062) return false\n if (cp < 0x1065) return true\n if (cp < 0x1067) return false\n if (cp < 0x106e) return true\n if (cp < 0x1071) return false\n if (cp < 0x1075) return true\n if (cp === 0x1082) return true\n return false\n }\n if (cp < 0x135d) {\n if (cp < 0x1083) return false\n if (cp < 0x1085) return true\n if (cp < 0x1085) return false\n if (cp < 0x1087) return true\n if (cp < 0x1087) return false\n if (cp < 0x108d) return true\n if (cp === 0x108d) return true\n if (cp === 0x108f) return true\n if (cp < 0x1090) return false\n if (cp < 0x109a) return true\n if (cp < 0x109a) return false\n if (cp < 0x109d) return true\n if (cp === 0x109d) return true\n return false\n }\n if (cp < 0x1360) return true\n if (cp < 0x1369) return false\n if (cp < 0x1372) return true\n if (cp < 0x1712) return false\n if (cp < 0x1715) return true\n if (cp < 0x1732) return false\n if (cp < 0x1735) return true\n if (cp < 0x1752) return false\n if (cp < 0x1754) return true\n if (cp < 0x1772) return false\n if (cp < 0x1774) return true\n if (cp < 0x17b4) return false\n if (cp < 0x17b6) return true\n if (cp === 0x17b6) return true\n if (cp < 0x17b7) return false\n if (cp < 0x17be) return true\n return false\n }\n if (cp < 0x1a73) {\n if (cp < 0x1939) {\n if (cp < 0x18a9) {\n if (cp < 0x17be) return false\n if (cp < 0x17c6) return true\n if (cp === 0x17c6) return true\n if (cp < 0x17c7) return false\n if (cp < 0x17c9) return true\n if (cp < 0x17c9) return false\n if (cp < 0x17d4) return true\n if (cp === 0x17dd) return true\n if (cp < 0x17e0) return false\n if (cp < 0x17ea) return true\n if (cp < 0x180b) return false\n if (cp < 0x180e) return true\n if (cp < 0x1810) return false\n if (cp < 0x181a) return true\n return false\n }\n if (cp === 0x18a9) return true\n if (cp < 0x1920) return false\n if (cp < 0x1923) return true\n if (cp < 0x1923) return false\n if (cp < 0x1927) return true\n if (cp < 0x1927) return false\n if (cp < 0x1929) return true\n if (cp < 0x1929) return false\n if (cp < 0x192c) return true\n if (cp < 0x1930) return false\n if (cp < 0x1932) return true\n if (cp === 0x1932) return true\n if (cp < 0x1933) return false\n if (cp < 0x1939) return true\n return false\n }\n if (cp < 0x1a56) {\n if (cp < 0x1939) return false\n if (cp < 0x193c) return true\n if (cp < 0x1946) return false\n if (cp < 0x1950) return true\n if (cp < 0x19d0) return false\n if (cp < 0x19da) return true\n if (cp === 0x19da) return true\n if (cp < 0x1a17) return false\n if (cp < 0x1a19) return true\n if (cp < 0x1a19) return false\n if (cp < 0x1a1b) return true\n if (cp === 0x1a1b) return true\n if (cp === 0x1a55) return true\n return false\n }\n if (cp === 0x1a56) return true\n if (cp === 0x1a57) return true\n if (cp < 0x1a58) return false\n if (cp < 0x1a5f) return true\n if (cp === 0x1a60) return true\n if (cp === 0x1a61) return true\n if (cp === 0x1a62) return true\n if (cp < 0x1a63) return false\n if (cp < 0x1a65) return true\n if (cp < 0x1a65) return false\n if (cp < 0x1a6d) return true\n if (cp < 0x1a6d) return false\n if (cp < 0x1a73) return true\n return false\n }\n if (cp < 0x1b6b) {\n if (cp < 0x1b35) {\n if (cp < 0x1a73) return false\n if (cp < 0x1a7d) return true\n if (cp === 0x1a7f) return true\n if (cp < 0x1a80) return false\n if (cp < 0x1a8a) return true\n if (cp < 0x1a90) return false\n if (cp < 0x1a9a) return true\n if (cp < 0x1ab0) return false\n if (cp < 0x1abe) return true\n if (cp < 0x1b00) return false\n if (cp < 0x1b04) return true\n if (cp === 0x1b04) return true\n if (cp === 0x1b34) return true\n return false\n }\n if (cp === 0x1b35) return true\n if (cp < 0x1b36) return false\n if (cp < 0x1b3b) return true\n if (cp === 0x1b3b) return true\n if (cp === 0x1b3c) return true\n if (cp < 0x1b3d) return false\n if (cp < 0x1b42) return true\n if (cp === 0x1b42) return true\n if (cp < 0x1b43) return false\n if (cp < 0x1b45) return true\n if (cp < 0x1b50) return false\n if (cp < 0x1b5a) return true\n return false\n }\n if (cp < 0x1bab) {\n if (cp < 0x1b6b) return false\n if (cp < 0x1b74) return true\n if (cp < 0x1b80) return false\n if (cp < 0x1b82) return true\n if (cp === 0x1b82) return true\n if (cp === 0x1ba1) return true\n if (cp < 0x1ba2) return false\n if (cp < 0x1ba6) return true\n if (cp < 0x1ba6) return false\n if (cp < 0x1ba8) return true\n if (cp < 0x1ba8) return false\n if (cp < 0x1baa) return true\n if (cp === 0x1baa) return true\n return false\n }\n if (cp < 0x1bae) return true\n if (cp < 0x1bb0) return false\n if (cp < 0x1bba) return true\n if (cp === 0x1be6) return true\n if (cp === 0x1be7) return true\n if (cp < 0x1be8) return false\n if (cp < 0x1bea) return true\n if (cp < 0x1bea) return false\n if (cp < 0x1bed) return true\n if (cp === 0x1bed) return true\n if (cp === 0x1bee) return true\n if (cp < 0x1bef) return false\n if (cp < 0x1bf2) return true\n return false\n }\n if (cp < 0x111d0) {\n if (cp < 0xaa43) {\n if (cp < 0xa69e) {\n if (cp < 0x1dc0) {\n if (cp < 0x1cd4) {\n if (cp < 0x1bf2) return false\n if (cp < 0x1bf4) return true\n if (cp < 0x1c24) return false\n if (cp < 0x1c2c) return true\n if (cp < 0x1c2c) return false\n if (cp < 0x1c34) return true\n if (cp < 0x1c34) return false\n if (cp < 0x1c36) return true\n if (cp < 0x1c36) return false\n if (cp < 0x1c38) return true\n if (cp < 0x1c40) return false\n if (cp < 0x1c4a) return true\n if (cp < 0x1c50) return false\n if (cp < 0x1c5a) return true\n if (cp < 0x1cd0) return false\n if (cp < 0x1cd3) return true\n return false\n }\n if (cp < 0x1ce1) return true\n if (cp === 0x1ce1) return true\n if (cp < 0x1ce2) return false\n if (cp < 0x1ce9) return true\n if (cp === 0x1ced) return true\n if (cp < 0x1cf2) return false\n if (cp < 0x1cf4) return true\n if (cp === 0x1cf4) return true\n if (cp === 0x1cf7) return true\n if (cp < 0x1cf8) return false\n if (cp < 0x1cfa) return true\n return false\n }\n if (cp < 0x2d7f) {\n if (cp < 0x1dc0) return false\n if (cp < 0x1dfa) return true\n if (cp < 0x1dfb) return false\n if (cp < 0x1e00) return true\n if (cp < 0x203f) return false\n if (cp < 0x2041) return true\n if (cp === 0x2054) return true\n if (cp < 0x20d0) return false\n if (cp < 0x20dd) return true\n if (cp === 0x20e1) return true\n if (cp < 0x20e5) return false\n if (cp < 0x20f1) return true\n if (cp < 0x2cef) return false\n if (cp < 0x2cf2) return true\n return false\n }\n if (cp === 0x2d7f) return true\n if (cp < 0x2de0) return false\n if (cp < 0x2e00) return true\n if (cp < 0x302a) return false\n if (cp < 0x302e) return true\n if (cp < 0x302e) return false\n if (cp < 0x3030) return true\n if (cp < 0x3099) return false\n if (cp < 0x309b) return true\n if (cp < 0xa620) return false\n if (cp < 0xa62a) return true\n if (cp === 0xa66f) return true\n if (cp < 0xa674) return false\n if (cp < 0xa67e) return true\n return false\n }\n if (cp < 0xa952) {\n if (cp < 0xa880) {\n if (cp < 0xa69e) return false\n if (cp < 0xa6a0) return true\n if (cp < 0xa6f0) return false\n if (cp < 0xa6f2) return true\n if (cp === 0xa802) return true\n if (cp === 0xa806) return true\n if (cp === 0xa80b) return true\n if (cp < 0xa823) return false\n if (cp < 0xa825) return true\n if (cp < 0xa825) return false\n if (cp < 0xa827) return true\n if (cp === 0xa827) return true\n return false\n }\n if (cp < 0xa882) return true\n if (cp < 0xa8b4) return false\n if (cp < 0xa8c4) return true\n if (cp < 0xa8c4) return false\n if (cp < 0xa8c6) return true\n if (cp < 0xa8d0) return false\n if (cp < 0xa8da) return true\n if (cp < 0xa8e0) return false\n if (cp < 0xa8f2) return true\n if (cp < 0xa900) return false\n if (cp < 0xa90a) return true\n if (cp < 0xa926) return false\n if (cp < 0xa92e) return true\n if (cp < 0xa947) return false\n if (cp < 0xa952) return true\n return false\n }\n if (cp < 0xa9bd) {\n if (cp < 0xa952) return false\n if (cp < 0xa954) return true\n if (cp < 0xa980) return false\n if (cp < 0xa983) return true\n if (cp === 0xa983) return true\n if (cp === 0xa9b3) return true\n if (cp < 0xa9b4) return false\n if (cp < 0xa9b6) return true\n if (cp < 0xa9b6) return false\n if (cp < 0xa9ba) return true\n if (cp < 0xa9ba) return false\n if (cp < 0xa9bc) return true\n if (cp === 0xa9bc) return true\n return false\n }\n if (cp < 0xa9c1) return true\n if (cp < 0xa9d0) return false\n if (cp < 0xa9da) return true\n if (cp === 0xa9e5) return true\n if (cp < 0xa9f0) return false\n if (cp < 0xa9fa) return true\n if (cp < 0xaa29) return false\n if (cp < 0xaa2f) return true\n if (cp < 0xaa2f) return false\n if (cp < 0xaa31) return true\n if (cp < 0xaa31) return false\n if (cp < 0xaa33) return true\n if (cp < 0xaa33) return false\n if (cp < 0xaa35) return true\n if (cp < 0xaa35) return false\n if (cp < 0xaa37) return true\n return false\n }\n if (cp < 0x102e0) {\n if (cp < 0xaaf6) {\n if (cp < 0xaab2) {\n if (cp === 0xaa43) return true\n if (cp === 0xaa4c) return true\n if (cp === 0xaa4d) return true\n if (cp < 0xaa50) return false\n if (cp < 0xaa5a) return true\n if (cp === 0xaa7b) return true\n if (cp === 0xaa7c) return true\n if (cp === 0xaa7d) return true\n if (cp === 0xaab0) return true\n return false\n }\n if (cp < 0xaab5) return true\n if (cp < 0xaab7) return false\n if (cp < 0xaab9) return true\n if (cp < 0xaabe) return false\n if (cp < 0xaac0) return true\n if (cp === 0xaac1) return true\n if (cp === 0xaaeb) return true\n if (cp < 0xaaec) return false\n if (cp < 0xaaee) return true\n if (cp < 0xaaee) return false\n if (cp < 0xaaf0) return true\n if (cp === 0xaaf5) return true\n return false\n }\n if (cp < 0xabf0) {\n if (cp === 0xaaf6) return true\n if (cp < 0xabe3) return false\n if (cp < 0xabe5) return true\n if (cp === 0xabe5) return true\n if (cp < 0xabe6) return false\n if (cp < 0xabe8) return true\n if (cp === 0xabe8) return true\n if (cp < 0xabe9) return false\n if (cp < 0xabeb) return true\n if (cp === 0xabec) return true\n if (cp === 0xabed) return true\n return false\n }\n if (cp < 0xabfa) return true\n if (cp === 0xfb1e) return true\n if (cp < 0xfe00) return false\n if (cp < 0xfe10) return true\n if (cp < 0xfe20) return false\n if (cp < 0xfe30) return true\n if (cp < 0xfe33) return false\n if (cp < 0xfe35) return true\n if (cp < 0xfe4d) return false\n if (cp < 0xfe50) return true\n if (cp < 0xff10) return false\n if (cp < 0xff1a) return true\n if (cp === 0xff3f) return true\n if (cp === 0x101fd) return true\n return false\n }\n if (cp < 0x110b0) {\n if (cp < 0x10ae5) {\n if (cp === 0x102e0) return true\n if (cp < 0x10376) return false\n if (cp < 0x1037b) return true\n if (cp < 0x104a0) return false\n if (cp < 0x104aa) return true\n if (cp < 0x10a01) return false\n if (cp < 0x10a04) return true\n if (cp < 0x10a05) return false\n if (cp < 0x10a07) return true\n if (cp < 0x10a0c) return false\n if (cp < 0x10a10) return true\n if (cp < 0x10a38) return false\n if (cp < 0x10a3b) return true\n if (cp === 0x10a3f) return true\n return false\n }\n if (cp < 0x10ae7) return true\n if (cp === 0x11000) return true\n if (cp === 0x11001) return true\n if (cp === 0x11002) return true\n if (cp < 0x11038) return false\n if (cp < 0x11047) return true\n if (cp < 0x11066) return false\n if (cp < 0x11070) return true\n if (cp < 0x1107f) return false\n if (cp < 0x11082) return true\n if (cp === 0x11082) return true\n return false\n }\n if (cp < 0x1112d) {\n if (cp < 0x110b0) return false\n if (cp < 0x110b3) return true\n if (cp < 0x110b3) return false\n if (cp < 0x110b7) return true\n if (cp < 0x110b7) return false\n if (cp < 0x110b9) return true\n if (cp < 0x110b9) return false\n if (cp < 0x110bb) return true\n if (cp < 0x110f0) return false\n if (cp < 0x110fa) return true\n if (cp < 0x11100) return false\n if (cp < 0x11103) return true\n if (cp < 0x11127) return false\n if (cp < 0x1112c) return true\n if (cp === 0x1112c) return true\n return false\n }\n if (cp < 0x11135) return true\n if (cp < 0x11136) return false\n if (cp < 0x11140) return true\n if (cp === 0x11173) return true\n if (cp < 0x11180) return false\n if (cp < 0x11182) return true\n if (cp === 0x11182) return true\n if (cp < 0x111b3) return false\n if (cp < 0x111b6) return true\n if (cp < 0x111b6) return false\n if (cp < 0x111bf) return true\n if (cp < 0x111bf) return false\n if (cp < 0x111c1) return true\n if (cp < 0x111ca) return false\n if (cp < 0x111cd) return true\n return false\n }\n if (cp < 0x11726) {\n if (cp < 0x114b3) {\n if (cp < 0x11340) {\n if (cp < 0x112df) {\n if (cp < 0x111d0) return false\n if (cp < 0x111da) return true\n if (cp < 0x1122c) return false\n if (cp < 0x1122f) return true\n if (cp < 0x1122f) return false\n if (cp < 0x11232) return true\n if (cp < 0x11232) return false\n if (cp < 0x11234) return true\n if (cp === 0x11234) return true\n if (cp === 0x11235) return true\n if (cp < 0x11236) return false\n if (cp < 0x11238) return true\n if (cp === 0x1123e) return true\n return false\n }\n if (cp === 0x112df) return true\n if (cp < 0x112e0) return false\n if (cp < 0x112e3) return true\n if (cp < 0x112e3) return false\n if (cp < 0x112eb) return true\n if (cp < 0x112f0) return false\n if (cp < 0x112fa) return true\n if (cp < 0x11300) return false\n if (cp < 0x11302) return true\n if (cp < 0x11302) return false\n if (cp < 0x11304) return true\n if (cp === 0x1133c) return true\n if (cp < 0x1133e) return false\n if (cp < 0x11340) return true\n return false\n }\n if (cp < 0x11435) {\n if (cp === 0x11340) return true\n if (cp < 0x11341) return false\n if (cp < 0x11345) return true\n if (cp < 0x11347) return false\n if (cp < 0x11349) return true\n if (cp < 0x1134b) return false\n if (cp < 0x1134e) return true\n if (cp === 0x11357) return true\n if (cp < 0x11362) return false\n if (cp < 0x11364) return true\n if (cp < 0x11366) return false\n if (cp < 0x1136d) return true\n if (cp < 0x11370) return false\n if (cp < 0x11375) return true\n return false\n }\n if (cp < 0x11438) return true\n if (cp < 0x11438) return false\n if (cp < 0x11440) return true\n if (cp < 0x11440) return false\n if (cp < 0x11442) return true\n if (cp < 0x11442) return false\n if (cp < 0x11445) return true\n if (cp === 0x11445) return true\n if (cp === 0x11446) return true\n if (cp < 0x11450) return false\n if (cp < 0x1145a) return true\n if (cp < 0x114b0) return false\n if (cp < 0x114b3) return true\n return false\n }\n if (cp < 0x11633) {\n if (cp < 0x115af) {\n if (cp < 0x114b3) return false\n if (cp < 0x114b9) return true\n if (cp === 0x114b9) return true\n if (cp === 0x114ba) return true\n if (cp < 0x114bb) return false\n if (cp < 0x114bf) return true\n if (cp < 0x114bf) return false\n if (cp < 0x114c1) return true\n if (cp === 0x114c1) return true\n if (cp < 0x114c2) return false\n if (cp < 0x114c4) return true\n if (cp < 0x114d0) return false\n if (cp < 0x114da) return true\n return false\n }\n if (cp < 0x115b2) return true\n if (cp < 0x115b2) return false\n if (cp < 0x115b6) return true\n if (cp < 0x115b8) return false\n if (cp < 0x115bc) return true\n if (cp < 0x115bc) return false\n if (cp < 0x115be) return true\n if (cp === 0x115be) return true\n if (cp < 0x115bf) return false\n if (cp < 0x115c1) return true\n if (cp < 0x115dc) return false\n if (cp < 0x115de) return true\n if (cp < 0x11630) return false\n if (cp < 0x11633) return true\n return false\n }\n if (cp < 0x116ad) {\n if (cp < 0x11633) return false\n if (cp < 0x1163b) return true\n if (cp < 0x1163b) return false\n if (cp < 0x1163d) return true\n if (cp === 0x1163d) return true\n if (cp === 0x1163e) return true\n if (cp < 0x1163f) return false\n if (cp < 0x11641) return true\n if (cp < 0x11650) return false\n if (cp < 0x1165a) return true\n if (cp === 0x116ab) return true\n if (cp === 0x116ac) return true\n return false\n }\n if (cp === 0x116ad) return true\n if (cp < 0x116ae) return false\n if (cp < 0x116b0) return true\n if (cp < 0x116b0) return false\n if (cp < 0x116b6) return true\n if (cp === 0x116b6) return true\n if (cp === 0x116b7) return true\n if (cp < 0x116c0) return false\n if (cp < 0x116ca) return true\n if (cp < 0x1171d) return false\n if (cp < 0x11720) return true\n if (cp < 0x11720) return false\n if (cp < 0x11722) return true\n if (cp < 0x11722) return false\n if (cp < 0x11726) return true\n return false\n }\n if (cp < 0x11d3f) {\n if (cp < 0x11a98) {\n if (cp < 0x11a39) {\n if (cp === 0x11726) return true\n if (cp < 0x11727) return false\n if (cp < 0x1172c) return true\n if (cp < 0x11730) return false\n if (cp < 0x1173a) return true\n if (cp < 0x118e0) return false\n if (cp < 0x118ea) return true\n if (cp < 0x11a01) return false\n if (cp < 0x11a07) return true\n if (cp < 0x11a07) return false\n if (cp < 0x11a09) return true\n if (cp < 0x11a09) return false\n if (cp < 0x11a0b) return true\n if (cp < 0x11a33) return false\n if (cp < 0x11a39) return true\n return false\n }\n if (cp === 0x11a39) return true\n if (cp < 0x11a3b) return false\n if (cp < 0x11a3f) return true\n if (cp === 0x11a47) return true\n if (cp < 0x11a51) return false\n if (cp < 0x11a57) return true\n if (cp < 0x11a57) return false\n if (cp < 0x11a59) return true\n if (cp < 0x11a59) return false\n if (cp < 0x11a5c) return true\n if (cp < 0x11a8a) return false\n if (cp < 0x11a97) return true\n if (cp === 0x11a97) return true\n return false\n }\n if (cp < 0x11ca9) {\n if (cp < 0x11a98) return false\n if (cp < 0x11a9a) return true\n if (cp === 0x11c2f) return true\n if (cp < 0x11c30) return false\n if (cp < 0x11c37) return true\n if (cp < 0x11c38) return false\n if (cp < 0x11c3e) return true\n if (cp === 0x11c3e) return true\n if (cp === 0x11c3f) return true\n if (cp < 0x11c50) return false\n if (cp < 0x11c5a) return true\n if (cp < 0x11c92) return false\n if (cp < 0x11ca8) return true\n return false\n }\n if (cp === 0x11ca9) return true\n if (cp < 0x11caa) return false\n if (cp < 0x11cb1) return true\n if (cp === 0x11cb1) return true\n if (cp < 0x11cb2) return false\n if (cp < 0x11cb4) return true\n if (cp === 0x11cb4) return true\n if (cp < 0x11cb5) return false\n if (cp < 0x11cb7) return true\n if (cp < 0x11d31) return false\n if (cp < 0x11d37) return true\n if (cp === 0x11d3a) return true\n if (cp < 0x11d3c) return false\n if (cp < 0x11d3e) return true\n return false\n }\n if (cp < 0x1d242) {\n if (cp < 0x16f8f) {\n if (cp < 0x11d3f) return false\n if (cp < 0x11d46) return true\n if (cp === 0x11d47) return true\n if (cp < 0x11d50) return false\n if (cp < 0x11d5a) return true\n if (cp < 0x16a60) return false\n if (cp < 0x16a6a) return true\n if (cp < 0x16af0) return false\n if (cp < 0x16af5) return true\n if (cp < 0x16b30) return false\n if (cp < 0x16b37) return true\n if (cp < 0x16b50) return false\n if (cp < 0x16b5a) return true\n if (cp < 0x16f51) return false\n if (cp < 0x16f7f) return true\n return false\n }\n if (cp < 0x16f93) return true\n if (cp < 0x1bc9d) return false\n if (cp < 0x1bc9f) return true\n if (cp < 0x1d165) return false\n if (cp < 0x1d167) return true\n if (cp < 0x1d167) return false\n if (cp < 0x1d16a) return true\n if (cp < 0x1d16d) return false\n if (cp < 0x1d173) return true\n if (cp < 0x1d17b) return false\n if (cp < 0x1d183) return true\n if (cp < 0x1d185) return false\n if (cp < 0x1d18c) return true\n if (cp < 0x1d1aa) return false\n if (cp < 0x1d1ae) return true\n return false\n }\n if (cp < 0x1e000) {\n if (cp < 0x1d242) return false\n if (cp < 0x1d245) return true\n if (cp < 0x1d7ce) return false\n if (cp < 0x1d800) return true\n if (cp < 0x1da00) return false\n if (cp < 0x1da37) return true\n if (cp < 0x1da3b) return false\n if (cp < 0x1da6d) return true\n if (cp === 0x1da75) return true\n if (cp === 0x1da84) return true\n if (cp < 0x1da9b) return false\n if (cp < 0x1daa0) return true\n if (cp < 0x1daa1) return false\n if (cp < 0x1dab0) return true\n return false\n }\n if (cp < 0x1e007) return true\n if (cp < 0x1e008) return false\n if (cp < 0x1e019) return true\n if (cp < 0x1e01b) return false\n if (cp < 0x1e022) return true\n if (cp < 0x1e023) return false\n if (cp < 0x1e025) return true\n if (cp < 0x1e026) return false\n if (cp < 0x1e02b) return true\n if (cp < 0x1e8d0) return false\n if (cp < 0x1e8d7) return true\n if (cp < 0x1e944) return false\n if (cp < 0x1e94b) return true\n if (cp < 0x1e950) return false\n if (cp < 0x1e95a) return true\n if (cp < 0xe0100) return false\n if (cp < 0xe01f0) return true\n return false\n}\n","const PropertyData: Object & { [key: string]: Set } = {\n $LONE: new Set([\n \"ASCII\",\n \"ASCII_Hex_Digit\",\n \"AHex\",\n \"Alphabetic\",\n \"Alpha\",\n \"Any\",\n \"Assigned\",\n \"Bidi_Control\",\n \"Bidi_C\",\n \"Bidi_Mirrored\",\n \"Bidi_M\",\n \"Case_Ignorable\",\n \"CI\",\n \"Cased\",\n \"Changes_When_Casefolded\",\n \"CWCF\",\n \"Changes_When_Casemapped\",\n \"CWCM\",\n \"Changes_When_Lowercased\",\n \"CWL\",\n \"Changes_When_NFKC_Casefolded\",\n \"CWKCF\",\n \"Changes_When_Titlecased\",\n \"CWT\",\n \"Changes_When_Uppercased\",\n \"CWU\",\n \"Dash\",\n \"Default_Ignorable_Code_Point\",\n \"DI\",\n \"Deprecated\",\n \"Dep\",\n \"Diacritic\",\n \"Dia\",\n \"Emoji\",\n \"Emoji_Component\",\n \"Emoji_Modifier\",\n \"Emoji_Modifier_Base\",\n \"Emoji_Presentation\",\n \"Extender\",\n \"Ext\",\n \"Grapheme_Base\",\n \"Gr_Base\",\n \"Grapheme_Extend\",\n \"Gr_Ext\",\n \"Hex_Digit\",\n \"Hex\",\n \"IDS_Binary_Operator\",\n \"IDSB\",\n \"IDS_Trinary_Operator\",\n \"IDST\",\n \"ID_Continue\",\n \"IDC\",\n \"ID_Start\",\n \"IDS\",\n \"Ideographic\",\n \"Ideo\",\n \"Join_Control\",\n \"Join_C\",\n \"Logical_Order_Exception\",\n \"LOE\",\n \"Lowercase\",\n \"Lower\",\n \"Math\",\n \"Noncharacter_Code_Point\",\n \"NChar\",\n \"Pattern_Syntax\",\n \"Pat_Syn\",\n \"Pattern_White_Space\",\n \"Pat_WS\",\n \"Quotation_Mark\",\n \"QMark\",\n \"Radical\",\n \"Regional_Indicator\",\n \"RI\",\n \"Sentence_Terminal\",\n \"STerm\",\n \"Soft_Dotted\",\n \"SD\",\n \"Terminal_Punctuation\",\n \"Term\",\n \"Unified_Ideograph\",\n \"UIdeo\",\n \"Uppercase\",\n \"Upper\",\n \"Variation_Selector\",\n \"VS\",\n \"White_Space\",\n \"space\",\n \"XID_Continue\",\n \"XIDC\",\n \"XID_Start\",\n \"XIDS\",\n ]),\n General_Category: new Set([\n \"Cased_Letter\",\n \"LC\",\n \"Close_Punctuation\",\n \"Pe\",\n \"Connector_Punctuation\",\n \"Pc\",\n \"Control\",\n \"Cc\",\n \"cntrl\",\n \"Currency_Symbol\",\n \"Sc\",\n \"Dash_Punctuation\",\n \"Pd\",\n \"Decimal_Number\",\n \"Nd\",\n \"digit\",\n \"Enclosing_Mark\",\n \"Me\",\n \"Final_Punctuation\",\n \"Pf\",\n \"Format\",\n \"Cf\",\n \"Initial_Punctuation\",\n \"Pi\",\n \"Letter\",\n \"L\",\n \"Letter_Number\",\n \"Nl\",\n \"Line_Separator\",\n \"Zl\",\n \"Lowercase_Letter\",\n \"Ll\",\n \"Mark\",\n \"M\",\n \"Combining_Mark\",\n \"Math_Symbol\",\n \"Sm\",\n \"Modifier_Letter\",\n \"Lm\",\n \"Modifier_Symbol\",\n \"Sk\",\n \"Nonspacing_Mark\",\n \"Mn\",\n \"Number\",\n \"N\",\n \"Open_Punctuation\",\n \"Ps\",\n \"Other\",\n \"C\",\n \"Other_Letter\",\n \"Lo\",\n \"Other_Number\",\n \"No\",\n \"Other_Punctuation\",\n \"Po\",\n \"Other_Symbol\",\n \"So\",\n \"Paragraph_Separator\",\n \"Zp\",\n \"Private_Use\",\n \"Co\",\n \"Punctuation\",\n \"P\",\n \"punct\",\n \"Separator\",\n \"Z\",\n \"Space_Separator\",\n \"Zs\",\n \"Spacing_Mark\",\n \"Mc\",\n \"Surrogate\",\n \"Cs\",\n \"Symbol\",\n \"S\",\n \"Titlecase_Letter\",\n \"Lt\",\n \"Unassigned\",\n \"Cn\",\n \"Uppercase_Letter\",\n \"Lu\",\n ]),\n Script: new Set([\n \"Adlam\",\n \"Adlm\",\n \"Ahom\",\n \"Anatolian_Hieroglyphs\",\n \"Hluw\",\n \"Arabic\",\n \"Arab\",\n \"Armenian\",\n \"Armn\",\n \"Avestan\",\n \"Avst\",\n \"Balinese\",\n \"Bali\",\n \"Bamum\",\n \"Bamu\",\n \"Bassa_Vah\",\n \"Bass\",\n \"Batak\",\n \"Batk\",\n \"Bengali\",\n \"Beng\",\n \"Bhaiksuki\",\n \"Bhks\",\n \"Bopomofo\",\n \"Bopo\",\n \"Brahmi\",\n \"Brah\",\n \"Braille\",\n \"Brai\",\n \"Buginese\",\n \"Bugi\",\n \"Buhid\",\n \"Buhd\",\n \"Canadian_Aboriginal\",\n \"Cans\",\n \"Carian\",\n \"Cari\",\n \"Caucasian_Albanian\",\n \"Aghb\",\n \"Chakma\",\n \"Cakm\",\n \"Cham\",\n \"Cherokee\",\n \"Cher\",\n \"Common\",\n \"Zyyy\",\n \"Coptic\",\n \"Copt\",\n \"Qaac\",\n \"Cuneiform\",\n \"Xsux\",\n \"Cypriot\",\n \"Cprt\",\n \"Cyrillic\",\n \"Cyrl\",\n \"Deseret\",\n \"Dsrt\",\n \"Devanagari\",\n \"Deva\",\n \"Duployan\",\n \"Dupl\",\n \"Egyptian_Hieroglyphs\",\n \"Egyp\",\n \"Elbasan\",\n \"Elba\",\n \"Ethiopic\",\n \"Ethi\",\n \"Georgian\",\n \"Geor\",\n \"Glagolitic\",\n \"Glag\",\n \"Gothic\",\n \"Goth\",\n \"Grantha\",\n \"Gran\",\n \"Greek\",\n \"Grek\",\n \"Gujarati\",\n \"Gujr\",\n \"Gurmukhi\",\n \"Guru\",\n \"Han\",\n \"Hani\",\n \"Hangul\",\n \"Hang\",\n \"Hanunoo\",\n \"Hano\",\n \"Hatran\",\n \"Hatr\",\n \"Hebrew\",\n \"Hebr\",\n \"Hiragana\",\n \"Hira\",\n \"Imperial_Aramaic\",\n \"Armi\",\n \"Inherited\",\n \"Zinh\",\n \"Qaai\",\n \"Inscriptional_Pahlavi\",\n \"Phli\",\n \"Inscriptional_Parthian\",\n \"Prti\",\n \"Javanese\",\n \"Java\",\n \"Kaithi\",\n \"Kthi\",\n \"Kannada\",\n \"Knda\",\n \"Katakana\",\n \"Kana\",\n \"Kayah_Li\",\n \"Kali\",\n \"Kharoshthi\",\n \"Khar\",\n \"Khmer\",\n \"Khmr\",\n \"Khojki\",\n \"Khoj\",\n \"Khudawadi\",\n \"Sind\",\n \"Lao\",\n \"Laoo\",\n \"Latin\",\n \"Latn\",\n \"Lepcha\",\n \"Lepc\",\n \"Limbu\",\n \"Limb\",\n \"Linear_A\",\n \"Lina\",\n \"Linear_B\",\n \"Linb\",\n \"Lisu\",\n \"Lycian\",\n \"Lyci\",\n \"Lydian\",\n \"Lydi\",\n \"Mahajani\",\n \"Mahj\",\n \"Malayalam\",\n \"Mlym\",\n \"Mandaic\",\n \"Mand\",\n \"Manichaean\",\n \"Mani\",\n \"Marchen\",\n \"Marc\",\n \"Masaram_Gondi\",\n \"Gonm\",\n \"Meetei_Mayek\",\n \"Mtei\",\n \"Mende_Kikakui\",\n \"Mend\",\n \"Meroitic_Cursive\",\n \"Merc\",\n \"Meroitic_Hieroglyphs\",\n \"Mero\",\n \"Miao\",\n \"Plrd\",\n \"Modi\",\n \"Mongolian\",\n \"Mong\",\n \"Mro\",\n \"Mroo\",\n \"Multani\",\n \"Mult\",\n \"Myanmar\",\n \"Mymr\",\n \"Nabataean\",\n \"Nbat\",\n \"New_Tai_Lue\",\n \"Talu\",\n \"Newa\",\n \"Nko\",\n \"Nkoo\",\n \"Nushu\",\n \"Nshu\",\n \"Ogham\",\n \"Ogam\",\n \"Ol_Chiki\",\n \"Olck\",\n \"Old_Hungarian\",\n \"Hung\",\n \"Old_Italic\",\n \"Ital\",\n \"Old_North_Arabian\",\n \"Narb\",\n \"Old_Permic\",\n \"Perm\",\n \"Old_Persian\",\n \"Xpeo\",\n \"Old_South_Arabian\",\n \"Sarb\",\n \"Old_Turkic\",\n \"Orkh\",\n \"Oriya\",\n \"Orya\",\n \"Osage\",\n \"Osge\",\n \"Osmanya\",\n \"Osma\",\n \"Pahawh_Hmong\",\n \"Hmng\",\n \"Palmyrene\",\n \"Palm\",\n \"Pau_Cin_Hau\",\n \"Pauc\",\n \"Phags_Pa\",\n \"Phag\",\n \"Phoenician\",\n \"Phnx\",\n \"Psalter_Pahlavi\",\n \"Phlp\",\n \"Rejang\",\n \"Rjng\",\n \"Runic\",\n \"Runr\",\n \"Samaritan\",\n \"Samr\",\n \"Saurashtra\",\n \"Saur\",\n \"Sharada\",\n \"Shrd\",\n \"Shavian\",\n \"Shaw\",\n \"Siddham\",\n \"Sidd\",\n \"SignWriting\",\n \"Sgnw\",\n \"Sinhala\",\n \"Sinh\",\n \"Sora_Sompeng\",\n \"Sora\",\n \"Soyombo\",\n \"Soyo\",\n \"Sundanese\",\n \"Sund\",\n \"Syloti_Nagri\",\n \"Sylo\",\n \"Syriac\",\n \"Syrc\",\n \"Tagalog\",\n \"Tglg\",\n \"Tagbanwa\",\n \"Tagb\",\n \"Tai_Le\",\n \"Tale\",\n \"Tai_Tham\",\n \"Lana\",\n \"Tai_Viet\",\n \"Tavt\",\n \"Takri\",\n \"Takr\",\n \"Tamil\",\n \"Taml\",\n \"Tangut\",\n \"Tang\",\n \"Telugu\",\n \"Telu\",\n \"Thaana\",\n \"Thaa\",\n \"Thai\",\n \"Tibetan\",\n \"Tibt\",\n \"Tifinagh\",\n \"Tfng\",\n \"Tirhuta\",\n \"Tirh\",\n \"Ugaritic\",\n \"Ugar\",\n \"Vai\",\n \"Vaii\",\n \"Warang_Citi\",\n \"Wara\",\n \"Yi\",\n \"Yiii\",\n \"Zanabazar_Square\",\n \"Zanb\",\n ]),\n}\n\nPropertyData.gc = PropertyData.General_Category\nPropertyData.sc = PropertyData.Script_Extensions = PropertyData.scx =\n PropertyData.Script\n\nexport { PropertyData }\n","export { isIdContinue, isIdStart } from \"./ids\"\nexport { PropertyData } from \"./property-data\"\n\nexport const Null = 0x00\nexport const Backspace = 0x08\nexport const CharacterTabulation = 0x09\nexport const LineFeed = 0x0a\nexport const LineTabulation = 0x0b\nexport const FormFeed = 0x0c\nexport const CarriageReturn = 0x0d\nexport const ExclamationMark = 0x21\nexport const DollarSign = 0x24\nexport const LeftParenthesis = 0x28\nexport const RightParenthesis = 0x29\nexport const Asterisk = 0x2a\nexport const PlusSign = 0x2b\nexport const Comma = 0x2c\nexport const HyphenMinus = 0x2d\nexport const FullStop = 0x2e\nexport const Solidus = 0x2f\nexport const DigitZero = 0x30\nexport const DigitOne = 0x31\nexport const DigitSeven = 0x37\nexport const DigitNine = 0x39\nexport const Colon = 0x3a\nexport const LessThanSign = 0x3c\nexport const EqualsSign = 0x3d\nexport const GreaterThanSign = 0x3e\nexport const QuestionMark = 0x3f\nexport const LatinCapitalLetterA = 0x41\nexport const LatinCapitalLetterB = 0x42\nexport const LatinCapitalLetterD = 0x44\nexport const LatinCapitalLetterF = 0x46\nexport const LatinCapitalLetterP = 0x50\nexport const LatinCapitalLetterS = 0x53\nexport const LatinCapitalLetterW = 0x57\nexport const LatinCapitalLetterZ = 0x5a\nexport const LowLine = 0x5f\nexport const LatinSmallLetterA = 0x61\nexport const LatinSmallLetterB = 0x62\nexport const LatinSmallLetterC = 0x63\nexport const LatinSmallLetterD = 0x64\nexport const LatinSmallLetterF = 0x66\nexport const LatinSmallLetterG = 0x67\nexport const LatinSmallLetterI = 0x69\nexport const LatinSmallLetterK = 0x6b\nexport const LatinSmallLetterM = 0x6d\nexport const LatinSmallLetterN = 0x6e\nexport const LatinSmallLetterP = 0x70\nexport const LatinSmallLetterR = 0x72\nexport const LatinSmallLetterS = 0x73\nexport const LatinSmallLetterT = 0x74\nexport const LatinSmallLetterU = 0x75\nexport const LatinSmallLetterV = 0x76\nexport const LatinSmallLetterW = 0x77\nexport const LatinSmallLetterX = 0x78\nexport const LatinSmallLetterY = 0x79\nexport const LatinSmallLetterZ = 0x7a\nexport const LeftSquareBracket = 0x5b\nexport const ReverseSolidus = 0x5c\nexport const RightSquareBracket = 0x5d\nexport const CircumflexAccent = 0x5e\nexport const LeftCurlyBracket = 0x7b\nexport const VerticalLine = 0x7c\nexport const RightCurlyBracket = 0x7d\nexport const ZeroWidthNonJoiner = 0x200c\nexport const ZeroWidthJoiner = 0x200d\nexport const LineSeparator = 0x2028\nexport const ParagraphSeparator = 0x2029\n\nexport const MinCodePoint = 0x00\nexport const MaxCodePoint = 0x10ffff\n\nexport function isLatinLetter(code: number): boolean {\n return (\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterZ)\n )\n}\n\nexport function isDecimalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitNine\n}\n\nexport function isOctalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitSeven\n}\n\nexport function isHexDigit(code: number): boolean {\n return (\n (code >= DigitZero && code <= DigitNine) ||\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterF)\n )\n}\n\nexport function isLineTerminator(code: number): boolean {\n return (\n code === LineFeed ||\n code === CarriageReturn ||\n code === LineSeparator ||\n code === ParagraphSeparator\n )\n}\n\nexport function isValidUnicode(code: number): boolean {\n return code >= MinCodePoint && code <= MaxCodePoint\n}\n\nexport function digitToInt(code: number): number {\n if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) {\n return code - LatinSmallLetterA + 10\n }\n if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) {\n return code - LatinCapitalLetterA + 10\n }\n return code - DigitZero\n}\n","import { Reader } from \"./reader\"\nimport { RegExpSyntaxError } from \"./regexp-syntax-error\"\nimport {\n Asterisk,\n Backspace,\n CarriageReturn,\n CharacterTabulation,\n CircumflexAccent,\n Colon,\n Comma,\n DigitNine,\n DigitOne,\n digitToInt,\n DigitZero,\n DollarSign,\n EqualsSign,\n ExclamationMark,\n FormFeed,\n FullStop,\n GreaterThanSign,\n HyphenMinus,\n isDecimalDigit,\n isHexDigit,\n isIdContinue,\n isIdStart,\n isLatinLetter,\n isLineTerminator,\n isOctalDigit,\n isValidUnicode,\n LatinCapitalLetterB,\n LatinCapitalLetterD,\n LatinCapitalLetterP,\n LatinCapitalLetterS,\n LatinCapitalLetterW,\n LatinSmallLetterB,\n LatinSmallLetterC,\n LatinSmallLetterD,\n LatinSmallLetterF,\n LatinSmallLetterG,\n LatinSmallLetterI,\n LatinSmallLetterK,\n LatinSmallLetterM,\n LatinSmallLetterN,\n LatinSmallLetterP,\n LatinSmallLetterR,\n LatinSmallLetterS,\n LatinSmallLetterT,\n LatinSmallLetterU,\n LatinSmallLetterV,\n LatinSmallLetterW,\n LatinSmallLetterX,\n LatinSmallLetterY,\n LeftCurlyBracket,\n LeftParenthesis,\n LeftSquareBracket,\n LessThanSign,\n LineFeed,\n LineTabulation,\n LowLine,\n PlusSign,\n PropertyData,\n QuestionMark,\n ReverseSolidus,\n RightCurlyBracket,\n RightParenthesis,\n RightSquareBracket,\n Solidus,\n VerticalLine,\n ZeroWidthJoiner,\n ZeroWidthNonJoiner,\n} from \"./unicode\"\n\nfunction isSyntaxCharacter(cp: number): boolean {\n return (\n cp === CircumflexAccent ||\n cp === DollarSign ||\n cp === ReverseSolidus ||\n cp === FullStop ||\n cp === Asterisk ||\n cp === PlusSign ||\n cp === QuestionMark ||\n cp === LeftParenthesis ||\n cp === RightParenthesis ||\n cp === LeftSquareBracket ||\n cp === RightSquareBracket ||\n cp === LeftCurlyBracket ||\n cp === RightCurlyBracket ||\n cp === VerticalLine\n )\n}\n\nfunction isRegExpIdentifierStart(cp: number): boolean {\n return isIdStart(cp) || cp === DollarSign || cp === LowLine\n}\n\nfunction isRegExpIdentifierPart(cp: number): boolean {\n return (\n isIdContinue(cp) ||\n cp === DollarSign ||\n cp === LowLine ||\n cp === ZeroWidthNonJoiner ||\n cp === ZeroWidthJoiner\n )\n}\n\nfunction isUnicodePropertyNameCharacter(cp: number): boolean {\n return isLatinLetter(cp) || cp === LowLine\n}\n\nfunction isUnicodePropertyValueCharacter(cp: number): boolean {\n return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp)\n}\n\nfunction isValidUnicodeProperty(name: string, value: string): boolean {\n //eslint-disable-next-line no-prototype-builtins\n return PropertyData.hasOwnProperty(name) && PropertyData[name].has(value)\n}\n\nfunction isValidUnicodePropertyName(name: string): boolean {\n return PropertyData.$LONE.has(name)\n}\n\nexport namespace RegExpValidator {\n /**\n * The options for RegExpValidator construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n\n /**\n * A function that is called when the validator entered a RegExp literal.\n * @param start The 0-based index of the first character.\n */\n onLiteralEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a RegExp literal.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onLiteralLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator found flags.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param global `g` flag.\n * @param ignoreCase `i` flag.\n * @param multiline `m` flag.\n * @param unicode `u` flag.\n * @param sticky `y` flag.\n * @param dotAll `s` flag.\n */\n onFlags?(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a pattern.\n * @param start The 0-based index of the first character.\n */\n onPatternEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a pattern.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onPatternLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a disjunction.\n * @param start The 0-based index of the first character.\n */\n onDisjunctionEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a disjunction.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onDisjunctionLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered an alternative.\n * @param start The 0-based index of the first character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeEnter?(start: number, index: number): void\n\n /**\n * A function that is called when the validator left an alternative.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeLeave?(start: number, end: number, index: number): void\n\n /**\n * A function that is called when the validator entered an uncapturing group.\n * @param start The 0-based index of the first character.\n */\n onGroupEnter?(start: number): void\n\n /**\n * A function that is called when the validator left an uncapturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onGroupLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a capturing group.\n * @param start The 0-based index of the first character.\n * @param name The group name.\n */\n onCapturingGroupEnter?(start: number, name: string | null): void\n\n /**\n * A function that is called when the validator left a capturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param name The group name.\n */\n onCapturingGroupLeave?(\n start: number,\n end: number,\n name: string | null,\n ): void\n\n /**\n * A function that is called when the validator found a quantifier.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum number of repeating.\n * @param max The maximum number of repeating.\n * @param greedy The flag to choose the longest matching.\n */\n onQuantifier?(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionEnter?(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator left a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionLeave?(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found an edge boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n */\n onEdgeAssertion?(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void\n\n /**\n * A function that is called when the validator found a word boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onWordBoundaryAssertion?(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a dot.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n */\n onAnyCharacterSet?(start: number, end: number, kind: \"any\"): void\n\n /**\n * A function that is called when the validator found a character set escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param negate The flag which represents that the character set is negative.\n */\n onEscapeCharacterSet?(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a Unicode proerty escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param key The property name.\n * @param value The property value.\n * @param negate The flag which represents that the character set is negative.\n */\n onUnicodePropertyCharacterSet?(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param value The code point of the character.\n */\n onCharacter?(start: number, end: number, value: number): void\n\n /**\n * A function that is called when the validator found a backreference.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param ref The key of the referred capturing group.\n */\n onBackreference?(start: number, end: number, ref: number | string): void\n\n /**\n * A function that is called when the validator entered a character class.\n * @param start The 0-based index of the first character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassEnter?(start: number, negate: boolean): void\n\n /**\n * A function that is called when the validator left a character class.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassLeave?(\n start: number,\n end: number,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character class range.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum code point of the range.\n * @param max The maximum code point of the range.\n */\n onCharacterClassRange?(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void\n }\n}\n\n/**\n * The regular expression validator.\n */\nexport class RegExpValidator {\n private readonly _options: RegExpValidator.Options\n private readonly _reader = new Reader()\n private _uFlag = false\n private _nFlag = false\n private _lastIntValue = 0\n private _lastMinValue = 0\n private _lastMaxValue = 0\n private _lastStrValue = \"\"\n private _lastKeyValue = \"\"\n private _lastValValue = \"\"\n private _lastAssertionIsQuantifiable = false\n private _numCapturingParens = 0\n private _groupNames = new Set()\n private _backreferenceNames = new Set()\n\n /**\n * Initialize this validator.\n * @param options The options of validator.\n */\n constructor(options?: RegExpValidator.Options) {\n this._options = options || {}\n }\n\n /**\n * Validate a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n validateLiteral(\n source: string,\n start: number = 0,\n end: number = source.length,\n ): void {\n this._uFlag = this._nFlag = false\n this.reset(source, start, end)\n\n this.onLiteralEnter(start)\n if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) {\n const flagStart = this.index\n const uFlag = source.indexOf(\"u\", flagStart) !== -1\n this.validateFlags(source, flagStart, end)\n this.validatePattern(source, start + 1, flagStart - 1, uFlag)\n } else if (start >= end) {\n this.raise(\"Empty\")\n } else {\n const c = String.fromCodePoint(this.currentCodePoint)\n this.raise(`Unexpected character '${c}'`)\n }\n this.onLiteralLeave(start, end)\n }\n\n /**\n * Validate a regular expression flags. E.g. \"gim\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n validateFlags(\n source: string,\n start: number = 0,\n end: number = source.length,\n ): void {\n const existingFlags = new Set()\n let global = false\n let ignoreCase = false\n let multiline = false\n let sticky = false\n let unicode = false\n let dotAll = false\n for (let i = start; i < end; ++i) {\n const flag = source.charCodeAt(i)\n\n if (existingFlags.has(flag)) {\n this.raise(`Duplicated flag '${source[i]}'`)\n }\n existingFlags.add(flag)\n\n if (flag === LatinSmallLetterG) {\n global = true\n } else if (flag === LatinSmallLetterI) {\n ignoreCase = true\n } else if (flag === LatinSmallLetterM) {\n multiline = true\n } else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) {\n unicode = true\n } else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) {\n sticky = true\n } else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) {\n dotAll = true\n } else {\n this.raise(`Invalid flag '${source[i]}'`)\n }\n }\n this.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n\n /**\n * Validate a regular expression pattern. E.g. \"abc\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n */\n validatePattern(\n source: string,\n start: number = 0,\n end: number = source.length,\n uFlag: boolean = false,\n ): void {\n this._uFlag = uFlag && this.ecmaVersion >= 2015\n this._nFlag = uFlag && this.ecmaVersion >= 2018\n this.reset(source, start, end)\n this.pattern()\n\n if (\n !this._nFlag &&\n this.ecmaVersion >= 2018 &&\n this._groupNames.size > 0\n ) {\n this._nFlag = true\n this.rewind(start)\n this.pattern()\n }\n }\n\n // #region Delegate for Options\n\n private get strict() {\n return Boolean(this._options.strict || this._uFlag)\n }\n\n private get ecmaVersion() {\n return this._options.ecmaVersion || 2018\n }\n\n private onLiteralEnter(start: number): void {\n if (this._options.onLiteralEnter) {\n this._options.onLiteralEnter(start)\n }\n }\n\n private onLiteralLeave(start: number, end: number): void {\n if (this._options.onLiteralLeave) {\n this._options.onLiteralLeave(start, end)\n }\n }\n\n private onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n if (this._options.onFlags) {\n this._options.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n }\n\n private onPatternEnter(start: number): void {\n if (this._options.onPatternEnter) {\n this._options.onPatternEnter(start)\n }\n }\n\n private onPatternLeave(start: number, end: number): void {\n if (this._options.onPatternLeave) {\n this._options.onPatternLeave(start, end)\n }\n }\n\n private onDisjunctionEnter(start: number): void {\n if (this._options.onDisjunctionEnter) {\n this._options.onDisjunctionEnter(start)\n }\n }\n\n private onDisjunctionLeave(start: number, end: number): void {\n if (this._options.onDisjunctionLeave) {\n this._options.onDisjunctionLeave(start, end)\n }\n }\n\n private onAlternativeEnter(start: number, index: number): void {\n if (this._options.onAlternativeEnter) {\n this._options.onAlternativeEnter(start, index)\n }\n }\n\n private onAlternativeLeave(\n start: number,\n end: number,\n index: number,\n ): void {\n if (this._options.onAlternativeLeave) {\n this._options.onAlternativeLeave(start, end, index)\n }\n }\n\n private onGroupEnter(start: number): void {\n if (this._options.onGroupEnter) {\n this._options.onGroupEnter(start)\n }\n }\n\n private onGroupLeave(start: number, end: number): void {\n if (this._options.onGroupLeave) {\n this._options.onGroupLeave(start, end)\n }\n }\n\n private onCapturingGroupEnter(start: number, name: string | null): void {\n if (this._options.onCapturingGroupEnter) {\n this._options.onCapturingGroupEnter(start, name)\n }\n }\n\n private onCapturingGroupLeave(\n start: number,\n end: number,\n name: string | null,\n ): void {\n if (this._options.onCapturingGroupLeave) {\n this._options.onCapturingGroupLeave(start, end, name)\n }\n }\n\n private onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n if (this._options.onQuantifier) {\n this._options.onQuantifier(start, end, min, max, greedy)\n }\n }\n\n private onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionEnter) {\n this._options.onLookaroundAssertionEnter(start, kind, negate)\n }\n }\n\n private onLookaroundAssertionLeave(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionLeave) {\n this._options.onLookaroundAssertionLeave(start, end, kind, negate)\n }\n }\n\n private onEdgeAssertion(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void {\n if (this._options.onEdgeAssertion) {\n this._options.onEdgeAssertion(start, end, kind)\n }\n }\n\n private onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n if (this._options.onWordBoundaryAssertion) {\n this._options.onWordBoundaryAssertion(start, end, kind, negate)\n }\n }\n\n private onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n if (this._options.onAnyCharacterSet) {\n this._options.onAnyCharacterSet(start, end, kind)\n }\n }\n\n private onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n if (this._options.onEscapeCharacterSet) {\n this._options.onEscapeCharacterSet(start, end, kind, negate)\n }\n }\n\n private onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n if (this._options.onUnicodePropertyCharacterSet) {\n this._options.onUnicodePropertyCharacterSet(\n start,\n end,\n kind,\n key,\n value,\n negate,\n )\n }\n }\n\n private onCharacter(start: number, end: number, value: number): void {\n if (this._options.onCharacter) {\n this._options.onCharacter(start, end, value)\n }\n }\n\n private onBackreference(\n start: number,\n end: number,\n ref: number | string,\n ): void {\n if (this._options.onBackreference) {\n this._options.onBackreference(start, end, ref)\n }\n }\n\n private onCharacterClassEnter(start: number, negate: boolean): void {\n if (this._options.onCharacterClassEnter) {\n this._options.onCharacterClassEnter(start, negate)\n }\n }\n\n private onCharacterClassLeave(\n start: number,\n end: number,\n negate: boolean,\n ): void {\n if (this._options.onCharacterClassLeave) {\n this._options.onCharacterClassLeave(start, end, negate)\n }\n }\n\n private onCharacterClassRange(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void {\n if (this._options.onCharacterClassRange) {\n this._options.onCharacterClassRange(start, end, min, max)\n }\n }\n\n // #endregion\n\n // #region Delegate for Reader\n\n private get source(): string {\n return this._reader.source\n }\n\n private get index(): number {\n return this._reader.index\n }\n\n private get currentCodePoint(): number {\n return this._reader.currentCodePoint\n }\n\n private get nextCodePoint(): number {\n return this._reader.nextCodePoint\n }\n\n private get nextCodePoint2(): number {\n return this._reader.nextCodePoint2\n }\n\n private get nextCodePoint3(): number {\n return this._reader.nextCodePoint3\n }\n\n private reset(source: string, start: number, end: number): void {\n this._reader.reset(source, start, end, this._uFlag)\n }\n\n private rewind(index: number): void {\n this._reader.rewind(index)\n }\n\n private advance(): void {\n this._reader.advance()\n }\n\n private eat(cp: number): boolean {\n return this._reader.eat(cp)\n }\n\n private eat2(cp1: number, cp2: number): boolean {\n return this._reader.eat2(cp1, cp2)\n }\n\n private eat3(cp1: number, cp2: number, cp3: number): boolean {\n return this._reader.eat3(cp1, cp2, cp3)\n }\n\n // #endregion\n\n private raise(message: string): never {\n throw new RegExpSyntaxError(\n this.source,\n this._uFlag,\n this.index,\n message,\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegularExpressionBody\n private eatRegExpBody(): boolean {\n const start = this.index\n let inClass = false\n let escaped = false\n\n for (;;) {\n const cp = this.currentCodePoint\n if (cp === -1 || isLineTerminator(cp)) {\n const kind = inClass ? \"character class\" : \"regular expression\"\n this.raise(`Unterminated ${kind}`)\n }\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n (cp === Solidus && !inClass) ||\n (cp === Asterisk && this.index === start)\n ) {\n break\n }\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n private pattern(): void {\n const start = this.index\n this._numCapturingParens = this.countCapturingParens()\n this._groupNames.clear()\n this._backreferenceNames.clear()\n\n this.onPatternEnter(start)\n this.disjunction()\n\n const cp = this.currentCodePoint\n if (this.currentCodePoint !== -1) {\n if (cp === RightParenthesis) {\n this.raise(\"Unmatched ')'\")\n }\n if (cp === RightSquareBracket || cp === RightCurlyBracket) {\n this.raise(\"Lone quantifier brackets\")\n }\n const c = String.fromCodePoint(cp)\n this.raise(`Unexpected character '${c}'`)\n }\n this._backreferenceNames.forEach(name => {\n if (!this._groupNames.has(name)) {\n this.raise(\"Invalid named capture referenced\")\n }\n })\n this.onPatternLeave(start, this.index)\n }\n\n private countCapturingParens(): number {\n const start = this.index\n let inClass = false\n let escaped = false\n let count = 0\n let cp = 0\n\n while ((cp = this.currentCodePoint) !== -1) {\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n cp === LeftParenthesis &&\n !inClass &&\n (this.nextCodePoint !== QuestionMark ||\n (this.nextCodePoint2 === LessThanSign &&\n this.nextCodePoint3 !== EqualsSign &&\n this.nextCodePoint3 !== ExclamationMark))\n ) {\n count += 1\n }\n this.advance()\n }\n\n this.rewind(start)\n return count\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n private disjunction(): void {\n const start = this.index\n let i = 0\n\n this.onDisjunctionEnter(start)\n this.alternative(i++)\n while (this.eat(VerticalLine)) {\n this.alternative(i++)\n }\n\n if (this.eatQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n if (this.eat(LeftCurlyBracket)) {\n this.raise(\"Lone quantifier brackets\")\n }\n this.onDisjunctionLeave(start, this.index)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n private alternative(i: number): void {\n const start = this.index\n\n this.onAlternativeEnter(start, i)\n while (this.currentCodePoint !== -1 && this.eatTerm());\n this.onAlternativeLeave(start, this.index, i)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Term\n private eatTerm(): boolean {\n if (this.eatAssertion()) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `this.lastAssertionIsQuantifiable` is true if the last eaten\n // Assertion is a QuantifiableAssertion.\n if (this._lastAssertionIsQuantifiable) {\n this.eatQuantifier()\n }\n return true\n }\n\n if (this.strict ? this.eatAtom() : this.eatExtendedAtom()) {\n this.eatQuantifier()\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Assertion\n private eatAssertion(): boolean {\n const start = this.index\n this._lastAssertionIsQuantifiable = false\n\n // ^, $, \\B \\b\n if (this.eat(CircumflexAccent)) {\n this.onEdgeAssertion(start, this.index, \"start\")\n return true\n }\n if (this.eat(DollarSign)) {\n this.onEdgeAssertion(start, this.index, \"end\")\n return true\n }\n if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", true)\n return true\n }\n if (this.eat2(ReverseSolidus, LatinSmallLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", false)\n return true\n }\n\n // Lookahead / Lookbehind\n if (this.eat2(LeftParenthesis, QuestionMark)) {\n const lookbehind =\n this.ecmaVersion >= 2018 && this.eat(LessThanSign)\n let negate = false\n if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {\n const kind = lookbehind ? \"lookbehind\" : \"lookahead\"\n this.onLookaroundAssertionEnter(start, kind, negate)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this._lastAssertionIsQuantifiable = !lookbehind && !this.strict\n this.onLookaroundAssertionLeave(start, this.index, kind, negate)\n return true\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n private eatQuantifier(noError = false): boolean {\n const start = this.index\n let min = 0\n let max = 0\n let greedy = false\n\n if (this.eat(Asterisk)) {\n min = 0\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(PlusSign)) {\n min = 1\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(QuestionMark)) {\n min = 0\n max = 1\n } else if (this.eatBracedQuantifier(noError)) {\n min = this._lastMinValue\n max = this._lastMaxValue\n } else {\n return false\n }\n greedy = !this.eat(QuestionMark)\n\n if (!noError) {\n this.onQuantifier(start, this.index, min, max, greedy)\n }\n return true\n }\n\n private eatBracedQuantifier(noError: boolean): boolean {\n const start = this.index\n if (this.eat(LeftCurlyBracket)) {\n this._lastMinValue = 0\n this._lastMaxValue = Number.POSITIVE_INFINITY\n if (this.eatDecimalDigits()) {\n this._lastMinValue = this._lastMaxValue = this._lastIntValue\n if (this.eat(Comma)) {\n this._lastMaxValue = this.eatDecimalDigits()\n ? this._lastIntValue\n : Number.POSITIVE_INFINITY\n }\n if (this.eat(RightCurlyBracket)) {\n if (!noError && this._lastMaxValue < this._lastMinValue) {\n this.raise(\"numbers out of order in {} quantifier\")\n }\n return true\n }\n }\n if (!noError && this.strict) {\n this.raise(\"Incomplete quantifier\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n private eatAtom(): boolean {\n return (\n this.eatPatternCharacter() ||\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup()\n )\n }\n\n private eatDot(): boolean {\n if (this.eat(FullStop)) {\n this.onAnyCharacterSet(this.index - 1, this.index, \"any\")\n return true\n }\n return false\n }\n\n private eatReverseSolidusAtomEscape(): boolean {\n const start = this.index\n if (this.eat(ReverseSolidus)) {\n if (this.eatAtomEscape()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatUncapturingGroup(): boolean {\n const start = this.index\n if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {\n this.onGroupEnter(start)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onGroupLeave(start, this.index)\n return true\n }\n return false\n }\n\n private eatCapturingGroup(): boolean {\n const start = this.index\n if (this.eat(LeftParenthesis)) {\n this._lastStrValue = \"\"\n if (this.ecmaVersion >= 2018) {\n this.groupSpecifier()\n } else if (this.currentCodePoint === QuestionMark) {\n this.raise(\"Invalid group\")\n }\n const name = this._lastStrValue || null\n\n this.onCapturingGroupEnter(start, name)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onCapturingGroupLeave(start, this.index, name)\n\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedAtom\n private eatExtendedAtom(): boolean {\n return (\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup() ||\n this.eatInvalidBracedQuantifier() ||\n this.eatExtendedPatternCharacter()\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-InvalidBracedQuantifier\n private eatInvalidBracedQuantifier(): boolean {\n if (this.eatBracedQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n private eatSyntaxCharacter(): boolean {\n if (isSyntaxCharacter(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n private eatPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (cp !== -1 && !isSyntaxCharacter(cp)) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedPatternCharacter\n private eatExtendedPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (\n cp !== -1 &&\n cp !== CircumflexAccent &&\n cp !== DollarSign &&\n cp !== FullStop &&\n cp !== Asterisk &&\n cp !== PlusSign &&\n cp !== QuestionMark &&\n cp !== LeftParenthesis &&\n cp !== RightParenthesis &&\n cp !== LeftSquareBracket &&\n cp !== VerticalLine\n ) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // GroupSpecifier[U] ::\n // [empty]\n // `?` GroupName[?U]\n private groupSpecifier(): void {\n this._lastStrValue = \"\"\n if (this.eat(QuestionMark)) {\n if (this.eatGroupName()) {\n if (!this._groupNames.has(this._lastStrValue)) {\n this._groupNames.add(this._lastStrValue)\n return\n }\n this.raise(\"Duplicate capture group name\")\n }\n this.raise(\"Invalid group\")\n }\n }\n\n // GroupName[U] ::\n // `<` RegExpIdentifierName[?U] `>`\n private eatGroupName(): boolean {\n this._lastStrValue = \"\"\n if (this.eat(LessThanSign)) {\n if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {\n return true\n }\n this.raise(\"Invalid capture group name\")\n }\n return false\n }\n\n // RegExpIdentifierName[U] ::\n // RegExpIdentifierStart[?U]\n // RegExpIdentifierName[?U] RegExpIdentifierPart[?U]\n private eatRegExpIdentifierName(): boolean {\n this._lastStrValue = \"\"\n if (this.eatRegExpIdentifierStart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n while (this.eatRegExpIdentifierPart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n }\n return true\n }\n return false\n }\n\n // RegExpIdentifierStart[U] ::\n // UnicodeIDStart\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n private eatRegExpIdentifierStart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierStart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // RegExpIdentifierPart[U] ::\n // UnicodeIDContinue\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n // \n // \n private eatRegExpIdentifierPart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierPart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-AtomEscape\n private eatAtomEscape(): boolean {\n if (\n this.eatBackreference() ||\n this.eatCharacterClassEscape() ||\n this.eatCharacterEscape() ||\n (this._nFlag && this.eatKGroupName())\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n return false\n }\n\n private eatBackreference(): boolean {\n const start = this.index\n if (this.eatDecimalEscape()) {\n const n = this._lastIntValue\n if (n <= this._numCapturingParens) {\n this.onBackreference(start - 1, this.index, n)\n return true\n }\n if (this.strict) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatKGroupName(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterK)) {\n if (this.eatGroupName()) {\n const groupName = this._lastStrValue\n this._backreferenceNames.add(groupName)\n this.onBackreference(start - 1, this.index, groupName)\n return true\n }\n this.raise(\"Invalid named reference\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-CharacterEscape\n private eatCharacterEscape(): boolean {\n const start = this.index\n if (\n this.eatControlEscape() ||\n this.eatCControlLetter() ||\n this.eatZero() ||\n this.eatHexEscapeSequence() ||\n this.eatRegExpUnicodeEscapeSequence() ||\n (!this.strict && this.eatLegacyOctalEscapeSequence()) ||\n this.eatIdentityEscape()\n ) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n return false\n }\n\n private eatCControlLetter(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterC)) {\n if (this.eatControlLetter()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatZero(): boolean {\n if (\n this.currentCodePoint === DigitZero &&\n !isDecimalDigit(this.nextCodePoint)\n ) {\n this._lastIntValue = 0\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n private eatControlEscape(): boolean {\n if (this.eat(LatinSmallLetterT)) {\n this._lastIntValue = CharacterTabulation\n return true\n }\n if (this.eat(LatinSmallLetterN)) {\n this._lastIntValue = LineFeed\n return true\n }\n if (this.eat(LatinSmallLetterV)) {\n this._lastIntValue = LineTabulation\n return true\n }\n if (this.eat(LatinSmallLetterF)) {\n this._lastIntValue = FormFeed\n return true\n }\n if (this.eat(LatinSmallLetterR)) {\n this._lastIntValue = CarriageReturn\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n private eatControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isLatinLetter(cp)) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n private eatRegExpUnicodeEscapeSequence(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterU)) {\n if (this.eatFixedHexDigits(4)) {\n const lead = this._lastIntValue\n if (this._uFlag && lead >= 0xd800 && lead <= 0xdbff) {\n const leadSurrogateEnd = this.index\n if (\n this.eat(ReverseSolidus) &&\n this.eat(LatinSmallLetterU) &&\n this.eatFixedHexDigits(4)\n ) {\n const trail = this._lastIntValue\n if (trail >= 0xdc00 && trail <= 0xdfff) {\n this._lastIntValue =\n (lead - 0xd800) * 0x400 +\n (trail - 0xdc00) +\n 0x10000\n return true\n }\n }\n this.rewind(leadSurrogateEnd)\n this._lastIntValue = lead\n }\n return true\n }\n if (\n this._uFlag &&\n this.eat(LeftCurlyBracket) &&\n this.eatHexDigits() &&\n this.eat(RightCurlyBracket) &&\n isValidUnicode(this._lastIntValue)\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid unicode escape\")\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-IdentityEscape\n private eatIdentityEscape(): boolean {\n if (this._uFlag) {\n if (this.eatSyntaxCharacter()) {\n return true\n }\n if (this.eat(Solidus)) {\n this._lastIntValue = Solidus\n return true\n }\n return false\n }\n\n if (this.isValidIdentityEscape(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n\n return false\n }\n private isValidIdentityEscape(cp: number): boolean {\n if (cp === -1) {\n return false\n }\n if (this.strict) {\n return !isIdContinue(cp)\n }\n return (\n cp !== LatinSmallLetterC &&\n (!this._nFlag || cp !== LatinSmallLetterK)\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n private eatDecimalEscape(): boolean {\n this._lastIntValue = 0\n let cp = this.currentCodePoint\n if (cp >= DigitOne && cp <= DigitNine) {\n do {\n this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero)\n this.advance()\n } while (\n (cp = this.currentCodePoint) >= DigitZero &&\n cp <= DigitNine\n )\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n private eatCharacterClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", true)\n return true\n }\n if (this.eat(LatinSmallLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", true)\n return true\n }\n if (this.eat(LatinSmallLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", true)\n return true\n }\n\n let negate = false\n if (\n this._uFlag &&\n this.ecmaVersion >= 2018 &&\n (this.eat(LatinSmallLetterP) ||\n (negate = this.eat(LatinCapitalLetterP)))\n ) {\n this._lastIntValue = -1\n if (\n this.eat(LeftCurlyBracket) &&\n this.eatUnicodePropertyValueExpression() &&\n this.eat(RightCurlyBracket)\n ) {\n this.onUnicodePropertyCharacterSet(\n start - 1,\n this.index,\n \"property\",\n this._lastKeyValue,\n this._lastValValue || null,\n negate,\n )\n return true\n }\n this.raise(\"Invalid property name\")\n }\n\n return false\n }\n\n // UnicodePropertyValueExpression ::\n // UnicodePropertyName `=` UnicodePropertyValue\n // LoneUnicodePropertyNameOrValue\n private eatUnicodePropertyValueExpression(): boolean {\n const start = this.index\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) {\n this._lastKeyValue = this._lastStrValue\n if (this.eatUnicodePropertyValue()) {\n this._lastValValue = this._lastStrValue\n if (\n isValidUnicodeProperty(\n this._lastKeyValue,\n this._lastValValue,\n )\n ) {\n return true\n }\n this.raise(\"Invalid property name\")\n }\n }\n this.rewind(start)\n\n // LoneUnicodePropertyNameOrValue\n if (this.eatLoneUnicodePropertyNameOrValue()) {\n const nameOrValue = this._lastStrValue\n if (isValidUnicodeProperty(\"General_Category\", nameOrValue)) {\n this._lastKeyValue = \"General_Category\"\n this._lastValValue = nameOrValue\n return true\n }\n if (isValidUnicodePropertyName(nameOrValue)) {\n this._lastKeyValue = nameOrValue\n this._lastValValue = \"\"\n return true\n }\n this.raise(\"Invalid property name\")\n }\n return false\n }\n\n // UnicodePropertyName ::\n // UnicodePropertyNameCharacters\n private eatUnicodePropertyName(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyNameCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // UnicodePropertyValue ::\n // UnicodePropertyValueCharacters\n private eatUnicodePropertyValue(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyValueCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // LoneUnicodePropertyNameOrValue ::\n // UnicodePropertyValueCharacters\n private eatLoneUnicodePropertyNameOrValue(): boolean {\n return this.eatUnicodePropertyValue()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n private eatCharacterClass(): boolean {\n const start = this.index\n if (this.eat(LeftSquareBracket)) {\n const negate = this.eat(CircumflexAccent)\n this.onCharacterClassEnter(start, negate)\n this.classRanges()\n if (!this.eat(RightSquareBracket)) {\n this.raise(\"Unterminated character class\")\n }\n this.onCharacterClassLeave(start, this.index, negate)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n private classRanges(): void {\n let start = this.index\n while (this.eatClassAtom()) {\n const left = this._lastIntValue\n const hyphenStart = this.index\n if (this.eat(HyphenMinus)) {\n this.onCharacter(hyphenStart, this.index, HyphenMinus)\n\n if (this.eatClassAtom()) {\n const right = this._lastIntValue\n\n if (left === -1 || right === -1) {\n if (this.strict) {\n this.raise(\"Invalid character class\")\n }\n } else if (left > right) {\n this.raise(\"Range out of order in character class\")\n } else {\n this.onCharacterClassRange(\n start,\n this.index,\n left,\n right,\n )\n }\n }\n }\n\n start = this.index\n }\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n private eatClassAtom(): boolean {\n const start = this.index\n\n if (this.eat(ReverseSolidus)) {\n if (this.eatClassEscape()) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n\n const cp = this.currentCodePoint\n if (cp !== -1 && cp !== RightSquareBracket) {\n this.advance()\n this._lastIntValue = cp\n this.onCharacter(start, this.index, cp)\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassEscape\n private eatClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterB)) {\n this._lastIntValue = Backspace\n this.onCharacter(start - 1, this.index, Backspace)\n return true\n }\n\n if (this._uFlag && this.eat(HyphenMinus)) {\n this._lastIntValue = HyphenMinus\n this.onCharacter(start - 1, this.index, HyphenMinus)\n return true\n }\n\n if (!this._uFlag && this.eat(LatinSmallLetterC)) {\n if (this.eatClassControlLetter()) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n this.rewind(start)\n }\n\n return this.eatCharacterClassEscape() || this.eatCharacterEscape()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassControlLetter\n private eatClassControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isDecimalDigit(cp) || cp === LowLine) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatHexEscapeSequence(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterX)) {\n if (this.eatFixedHexDigits(2)) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n private eatDecimalDigits(): boolean {\n const start = this.index\n\n this._lastIntValue = 0\n while (isDecimalDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 10 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n private eatHexDigits(): boolean {\n const start = this.index\n this._lastIntValue = 0\n while (isHexDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 16 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-LegacyOctalEscapeSequence\n // Allows only 0-377(octal) i.e. 0-255(decimal).\n private eatLegacyOctalEscapeSequence(): boolean {\n if (this.eatOctalDigit()) {\n const n1 = this._lastIntValue\n if (this.eatOctalDigit()) {\n const n2 = this._lastIntValue\n if (n1 <= 3 && this.eatOctalDigit()) {\n this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue\n } else {\n this._lastIntValue = n1 * 8 + n2\n }\n } else {\n this._lastIntValue = n1\n }\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n private eatOctalDigit(): boolean {\n const cp = this.currentCodePoint\n if (isOctalDigit(cp)) {\n this.advance()\n this._lastIntValue = cp - DigitZero\n return true\n }\n this._lastIntValue = 0\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatFixedHexDigits(length: number): boolean {\n const start = this.index\n this._lastIntValue = 0\n for (let i = 0; i < length; ++i) {\n const cp = this.currentCodePoint\n if (!isHexDigit(cp)) {\n this.rewind(start)\n return false\n }\n this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp)\n this.advance()\n }\n return true\n }\n}\n","import {\n AlternativeElement,\n AnyCharacterSet,\n Assertion,\n Backreference,\n CapturingGroup,\n Character,\n CharacterClass,\n CharacterClassRange,\n Disjunction,\n Element,\n EscapeCharacterSet,\n Flags,\n Group,\n RegExpLiteral,\n LookaroundAssertion,\n Pattern,\n QuantifiableElement,\n Quantifier,\n UnicodePropertyCharacterSet,\n} from \"./ast\"\nimport { assert, last } from \"./util\"\nimport { RegExpValidator } from \"./validator\"\n\ntype AppendableNode =\n | Pattern\n | Disjunction\n | Group\n | CapturingGroup\n | CharacterClass\n | LookaroundAssertion\n\nconst DummyPattern = {} as Pattern\nconst DummyFlags = {} as Flags\nconst DummyCapturingGroup = {} as CapturingGroup\n\n/**\n * Convert given elements to an alternative.\n * This doesn't clone the array, so the return value is `elements` itself.\n * @param elements Elements to convert.\n */\nfunction elementsToAlternative(\n elements: Element[],\n parent: Disjunction,\n): AlternativeElement[] {\n for (const element of elements) {\n assert(element.type !== \"Disjunction\")\n element.parent = parent\n }\n return elements as AlternativeElement[]\n}\n\nfunction addAlternativeElement(\n parent:\n | Pattern\n | Disjunction\n | Group\n | CapturingGroup\n | LookaroundAssertion,\n node:\n | Group\n | CapturingGroup\n | Quantifier\n | CharacterClass\n | Assertion\n | AnyCharacterSet\n | Backreference,\n): void {\n if (parent.type === \"Disjunction\") {\n last(parent.alternatives)!.push(node)\n } else {\n parent.elements.push(node)\n }\n}\n\nfunction addCommonElement(\n parent: AppendableNode,\n node: EscapeCharacterSet | UnicodePropertyCharacterSet | Character,\n): void {\n if (parent.type === \"Disjunction\") {\n last(parent.alternatives)!.push(node)\n } else if (parent.type === \"CharacterClass\") {\n parent.elements.push(node)\n } else {\n parent.elements.push(node)\n }\n}\n\nclass RegExpParserState {\n readonly strict: boolean\n readonly ecmaVersion: 5 | 2015 | 2016 | 2017 | 2018\n private _node: AppendableNode = DummyPattern\n private _flags: Flags = DummyFlags\n private _disjunctionStartStack: number[] = []\n private _backreferences: Backreference[] = []\n private _capturingGroups: CapturingGroup[] = []\n\n source: string = \"\"\n\n constructor(options?: RegExpParser.Options) {\n this.strict = Boolean(options && options.strict)\n this.ecmaVersion = (options && options.ecmaVersion) || 2018\n }\n\n get pattern(): Pattern {\n if (this._node.type !== \"Pattern\") {\n throw new Error(\"UnknownError\")\n }\n return this._node\n }\n\n get flags(): Flags {\n if (this._flags.type !== \"Flags\") {\n throw new Error(\"UnknownError\")\n }\n return this._flags\n }\n\n onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n this._flags = {\n type: \"Flags\",\n parent: null,\n start,\n end,\n raw: this.source.slice(start, end),\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n }\n }\n\n onPatternEnter(start: number): void {\n this._node = {\n type: \"Pattern\",\n parent: null,\n start,\n end: start,\n raw: \"\",\n elements: [],\n }\n this._backreferences.length = 0\n this._capturingGroups.length = 0\n }\n\n onPatternLeave(start: number, end: number): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n\n for (const reference of this._backreferences) {\n const ref = reference.ref\n const group =\n typeof ref === \"number\"\n ? this._capturingGroups[ref - 1]\n : this._capturingGroups.find(g => g.name === ref)!\n reference.resolved = group\n group.references.push(reference)\n }\n }\n\n onDisjunctionEnter(start: number): void {\n this._disjunctionStartStack.push(start)\n }\n\n onDisjunctionLeave(start: number, end: number): void {\n this._disjunctionStartStack.pop()\n }\n\n onAlternativeEnter(start: number, index: number): void {\n if (index === 0) {\n return\n }\n\n const parentNode = this._node\n if (\n parentNode.type === \"Disjunction\" ||\n parentNode.type === \"CharacterClass\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n const prevNode = last(parentNode.elements)\n if (prevNode != null && prevNode.type === \"Disjunction\") {\n this._node = prevNode\n prevNode.alternatives.push([])\n } else {\n this._node = {\n type: \"Disjunction\",\n parent: parentNode,\n start: last(this._disjunctionStartStack)!,\n end: start,\n raw: \"\",\n alternatives: [],\n }\n const elements = elementsToAlternative(\n parentNode.elements,\n this._node,\n )\n this._node.alternatives.push(elements, [])\n parentNode.elements = [this._node]\n }\n }\n\n onAlternativeLeave(start: number, end: number, index: number): void {\n if (index === 0) {\n return\n }\n this._node.end = end\n this._node.raw = this.source.slice(this._node.start, end)\n this._node = this._node.parent as AppendableNode\n }\n\n onGroupEnter(start: number): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Group\",\n parent: parentNode,\n start,\n end: start,\n raw: \"\",\n elements: [],\n }\n addAlternativeElement(parentNode, this._node)\n }\n\n onGroupLeave(start: number, end: number): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n this._node = this._node.parent as AppendableNode\n }\n\n onCapturingGroupEnter(start: number, name: string | null): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CapturingGroup\",\n parent: parentNode,\n start,\n end: start,\n raw: \"\",\n name,\n elements: [],\n references: [],\n }\n addAlternativeElement(parentNode, this._node)\n this._capturingGroups.push(this._node)\n }\n\n onCapturingGroupLeave(\n start: number,\n end: number,\n name: string | null,\n ): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n this._node = this._node.parent as AppendableNode\n }\n\n onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last element.\n const elements =\n parentNode.type === \"Disjunction\"\n ? last(parentNode.alternatives)!\n : parentNode.elements\n const prevNode = elements.pop()!\n const node: Quantifier = {\n type: \"Quantifier\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n min,\n max,\n greedy,\n element: prevNode as QuantifiableElement,\n }\n elements.push(node)\n prevNode.parent = node\n }\n\n onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Assertion\",\n parent: parentNode,\n start,\n end: start,\n raw: \"\",\n kind,\n negate,\n elements: [],\n } as LookaroundAssertion\n addAlternativeElement(parentNode, this._node)\n }\n\n onLookaroundAssertionLeave(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n this._node = this._node.parent as AppendableNode\n }\n\n onEdgeAssertion(start: number, end: number, kind: \"start\" | \"end\"): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n addAlternativeElement(parentNode, {\n type: \"Assertion\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n addAlternativeElement(parentNode, {\n type: \"Assertion\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n addAlternativeElement(parentNode, {\n type: \"CharacterSet\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n addCommonElement(this._node, {\n type: \"CharacterSet\",\n parent: this._node,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n addCommonElement(this._node, {\n type: \"CharacterSet\",\n parent: this._node,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n key,\n value,\n negate,\n })\n }\n\n onCharacter(start: number, end: number, value: number): void {\n addCommonElement(this._node, {\n type: \"Character\",\n parent: this._node,\n start,\n end,\n raw: this.source.slice(start, end),\n value,\n })\n }\n\n onBackreference(start: number, end: number, ref: number | string): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n const node: Backreference = {\n type: \"Backreference\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n ref,\n resolved: DummyCapturingGroup,\n }\n addAlternativeElement(parentNode, node)\n this._backreferences.push(node)\n }\n\n onCharacterClassEnter(start: number, negate: boolean): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CharacterClass\",\n parent: parentNode,\n start,\n end: start,\n raw: \"\",\n negate,\n elements: [],\n }\n addAlternativeElement(parentNode, this._node)\n }\n\n onCharacterClassLeave(start: number, end: number, negate: boolean): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n this._node = this._node.parent as AppendableNode\n }\n\n onCharacterClassRange(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void {\n const parentNode = this._node\n if (parentNode.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last three elements.\n const elements = parentNode.elements\n const rightNode = elements.pop() as Character\n elements.pop() // hyphen\n const leftNode = elements.pop() as Character\n const node: CharacterClassRange = {\n type: \"CharacterClassRange\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n min: leftNode,\n max: rightNode,\n }\n assert(leftNode != null && leftNode.type === \"Character\")\n assert(rightNode != null && rightNode.type === \"Character\")\n leftNode.parent = node\n rightNode.parent = node\n elements.push(node)\n }\n}\n\nexport namespace RegExpParser {\n /**\n * The options for RegExpParser construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n }\n}\n\nexport class RegExpParser {\n private _state: RegExpParserState\n private _validator: RegExpValidator\n\n /**\n * Initialize this parser.\n * @param options The options of parser.\n */\n constructor(options?: RegExpParser.Options) {\n this._state = new RegExpParserState(options)\n this._validator = new RegExpValidator(this._state)\n }\n\n /**\n * Parse a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given regular expression.\n */\n parseLiteral(\n source: string,\n start: number = 0,\n end: number = source.length,\n ): RegExpLiteral {\n this._state.source = source\n this._validator.validateLiteral(source, start, end)\n const pattern = this._state.pattern\n const flags = this._state.flags\n const literal: RegExpLiteral = {\n type: \"RegExpLiteral\",\n parent: null,\n start,\n end,\n raw: source,\n pattern,\n flags,\n }\n pattern.parent = literal\n flags.parent = literal\n return literal\n }\n\n /**\n * Parse a regular expression flags. E.g. \"gim\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given flags.\n */\n parseFlags(\n source: string,\n start: number = 0,\n end: number = source.length,\n ): Flags {\n this._state.source = source\n this._validator.validateFlags(source, start, end)\n return this._state.flags\n }\n\n /**\n * Parse a regular expression pattern. E.g. \"abc\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n * @returns The AST of the given pattern.\n */\n parsePattern(\n source: string,\n start: number = 0,\n end: number = source.length,\n uFlag: boolean = false,\n ): Pattern {\n this._state.source = source\n this._validator.validatePattern(source, start, end, uFlag)\n return this._state.pattern\n }\n}\n","import * as AST from \"./ast\"\nimport { RegExpParser } from \"./parser\"\nimport { RegExpValidator } from \"./validator\"\n\nexport { AST, RegExpParser, RegExpValidator }\n\n/**\n * Parse a given regular expression literal then make AST object.\n * @param source The source code to parse.\n * @param options The options to parse.\n * @returns The AST of the regular expression.\n */\nexport function parseRegExpLiteral(\n source: string,\n options?: RegExpParser.Options,\n): AST.RegExpLiteral {\n return new RegExpParser(options).parseLiteral(source)\n}\n\n/**\n * Validate a given regular expression literal.\n * @param source The source code to validate.\n * @param options The options to validate.\n */\nexport function validateRegExpLiteral(\n source: string,\n options?: RegExpValidator.Options,\n): void {\n return new RegExpValidator(options).validateLiteral(source)\n}\n"],"names":["condition","message","Error","xs","length","undefined","legacyImpl","s","end","i","charCodeAt","c","unicodeImpl","codePointAt","source","_s","index","_i","currentCodePoint","_cp1","nextCodePoint","_cp2","nextCodePoint2","_cp3","nextCodePoint3","_cp4","start","uFlag","_impl","_end","rewind","impl","at","_w1","width","_w2","_w3","cp","advance","cp1","cp2","cp3","SyntaxError","isLargeIdStart","isLargeIdContinue","PropertyData","Set","gc","General_Category","sc","Script_Extensions","scx","Script","Backspace","CharacterTabulation","LineFeed","LineTabulation","FormFeed","CarriageReturn","ExclamationMark","DollarSign","LeftParenthesis","RightParenthesis","Asterisk","PlusSign","Comma","HyphenMinus","FullStop","Solidus","DigitZero","DigitOne","DigitSeven","DigitNine","Colon","LessThanSign","EqualsSign","GreaterThanSign","QuestionMark","LatinCapitalLetterA","LatinCapitalLetterB","LatinCapitalLetterD","LatinCapitalLetterF","LatinCapitalLetterP","LatinCapitalLetterS","LatinCapitalLetterW","LatinCapitalLetterZ","LowLine","LatinSmallLetterA","LatinSmallLetterB","LatinSmallLetterC","LatinSmallLetterD","LatinSmallLetterF","LatinSmallLetterG","LatinSmallLetterI","LatinSmallLetterK","LatinSmallLetterM","LatinSmallLetterN","LatinSmallLetterP","LatinSmallLetterR","LatinSmallLetterS","LatinSmallLetterT","LatinSmallLetterU","LatinSmallLetterV","LatinSmallLetterW","LatinSmallLetterX","LatinSmallLetterY","LatinSmallLetterZ","LeftSquareBracket","ReverseSolidus","RightSquareBracket","CircumflexAccent","LeftCurlyBracket","VerticalLine","RightCurlyBracket","ZeroWidthNonJoiner","ZeroWidthJoiner","LineSeparator","ParagraphSeparator","MinCodePoint","MaxCodePoint","code","isIdStart","isIdContinue","isLatinLetter","isUnicodePropertyNameCharacter","isDecimalDigit","name","value","hasOwnProperty","has","$LONE","options","Reader","_options","_uFlag","_nFlag","reset","onLiteralEnter","eat","eatRegExpBody","flagStart","indexOf","validateFlags","validatePattern","raise","String","fromCodePoint","onLiteralLeave","existingFlags","global","ignoreCase","multiline","sticky","unicode","dotAll","flag","add","ecmaVersion","onFlags","pattern","_groupNames","size","strict","Boolean","onPatternEnter","onPatternLeave","onDisjunctionEnter","onDisjunctionLeave","onAlternativeEnter","onAlternativeLeave","onGroupEnter","onGroupLeave","onCapturingGroupEnter","onCapturingGroupLeave","min","max","greedy","onQuantifier","kind","negate","onLookaroundAssertionEnter","onLookaroundAssertionLeave","onEdgeAssertion","onWordBoundaryAssertion","onAnyCharacterSet","onEscapeCharacterSet","key","onUnicodePropertyCharacterSet","onCharacter","ref","onBackreference","onCharacterClassEnter","onCharacterClassLeave","onCharacterClassRange","_reader","eat2","eat3","RegExpSyntaxError","inClass","escaped","isLineTerminator","_numCapturingParens","countCapturingParens","clear","_backreferenceNames","disjunction","forEach","count","alternative","eatQuantifier","eatTerm","eatAssertion","_lastAssertionIsQuantifiable","eatAtom","eatExtendedAtom","lookbehind","noError","Number","POSITIVE_INFINITY","eatBracedQuantifier","_lastMinValue","_lastMaxValue","eatDecimalDigits","_lastIntValue","eatPatternCharacter","eatDot","eatReverseSolidusAtomEscape","eatCharacterClass","eatUncapturingGroup","eatCapturingGroup","eatAtomEscape","_lastStrValue","groupSpecifier","eatInvalidBracedQuantifier","eatExtendedPatternCharacter","isSyntaxCharacter","eatGroupName","eatRegExpIdentifierName","eatRegExpIdentifierStart","eatRegExpIdentifierPart","eatRegExpUnicodeEscapeSequence","isRegExpIdentifierStart","isRegExpIdentifierPart","eatBackreference","eatCharacterClassEscape","eatCharacterEscape","eatKGroupName","eatDecimalEscape","n","groupName","eatControlEscape","eatCControlLetter","eatZero","eatHexEscapeSequence","eatLegacyOctalEscapeSequence","eatIdentityEscape","eatControlLetter","eatFixedHexDigits","lead","leadSurrogateEnd","trail","eatHexDigits","isValidUnicode","eatSyntaxCharacter","isValidIdentityEscape","eatUnicodePropertyValueExpression","_lastKeyValue","_lastValValue","eatUnicodePropertyName","eatUnicodePropertyValue","isValidUnicodeProperty","eatLoneUnicodePropertyNameOrValue","nameOrValue","isValidUnicodePropertyName","isUnicodePropertyValueCharacter","classRanges","eatClassAtom","left","hyphenStart","right","eatClassEscape","eatClassControlLetter","digitToInt","isHexDigit","eatOctalDigit","n1","n2","isOctalDigit","DummyPattern","DummyFlags","DummyCapturingGroup","elements","parent","element","type","node","alternatives","push","_node","flags","_flags","slice","_backreferences","_capturingGroups","raw","reference","group","find","g","resolved","references","_disjunctionStartStack","pop","parentNode","prevNode","last","elementsToAlternative","rightNode","leftNode","_state","RegExpParserState","_validator","RegExpValidator","validateLiteral","literal","RegExpParser","parseLiteral"],"mappings":";;;;;;;;;;;gBAAuBA,WAAoBC;QACnC,CAACD,SAAL,EAAgB;cACN,IAAIE,KAAJ,CAAUD,WAAW,gBAArB,CAAN;;;AAIR,cAAwBE;WACbA,GAAGC,MAAH,KAAc,CAAd,GAAkBC,SAAlB,GAA8BF,GAAGA,GAAGC,MAAH,GAAY,CAAf,CAArC;;;ACPJ,MAAME,aAAa;OACZC,CAAH,EAAcC,GAAd,EAA2BC,CAA3B;eACWA,IAAID,GAAJ,GAAUD,EAAEG,UAAF,CAAaD,CAAb,CAAV,GAA4B,CAAC,CAApC;KAFW;UAITE,CAAN;eACW,CAAP;;CALR;AAQA,MAAMC,cAAc;OACbL,CAAH,EAAcC,GAAd,EAA2BC,CAA3B;eACWA,IAAID,GAAJ,GAAUD,EAAEM,WAAF,CAAcJ,CAAd,CAAV,GAA8B,CAAC,CAAtC;KAFY;UAIVE,CAAN;eACWA,IAAI,MAAJ,GAAa,CAAb,GAAiB,CAAxB;;CALR;AASA;;kBACY,GAAQL,UAAR;eACA,GAAa,EAAb;eACA,GAAa,CAAb;iBACA,GAAe,CAAf;iBACA,GAAe,CAAC,CAAhB;gBACA,GAAc,CAAd;iBACA,GAAe,CAAC,CAAhB;gBACA,GAAc,CAAd;iBACA,GAAe,CAAC,CAAhB;gBACA,GAAc,CAAd;iBACA,GAAe,CAAC,CAAhB;;QAEJQ,MAAJ;eACW,KAAKC,EAAZ;;QAGAC,KAAJ;eACW,KAAKC,EAAZ;;QAGAC,gBAAJ;eACW,KAAKC,IAAZ;;QAGAC,aAAJ;eACW,KAAKC,IAAZ;;QAGAC,cAAJ;eACW,KAAKC,IAAZ;;QAGAC,cAAJ;eACW,KAAKC,IAAZ;;UAGEX,MAAN,EAAsBY,KAAtB,EAAqClB,GAArC,EAAkDmB,KAAlD;aACSC,KAAL,GAAaD,QAAQf,WAAR,GAAsBN,UAAnC;aACKS,EAAL,GAAUD,MAAV;aACKe,IAAL,GAAYrB,GAAZ;aACKsB,MAAL,CAAYJ,KAAZ;;WAGGV,KAAP;cACUe,OAAO,KAAKH,KAAlB;aACKX,EAAL,GAAUD,KAAV;aACKG,IAAL,GAAYY,KAAKC,EAAL,CAAQ,KAAKjB,EAAb,EAAiB,KAAKc,IAAtB,EAA4Bb,KAA5B,CAAZ;aACKiB,GAAL,GAAWF,KAAKG,KAAL,CAAW,KAAKf,IAAhB,CAAX;aACKE,IAAL,GAAYU,KAAKC,EAAL,CAAQ,KAAKjB,EAAb,EAAiB,KAAKc,IAAtB,EAA4Bb,QAAQ,KAAKiB,GAAzC,CAAZ;aACKE,GAAL,GAAWJ,KAAKG,KAAL,CAAW,KAAKb,IAAhB,CAAX;aACKE,IAAL,GAAYQ,KAAKC,EAAL,CAAQ,KAAKjB,EAAb,EAAiB,KAAKc,IAAtB,EAA4Bb,QAAQ,KAAKiB,GAAb,GAAmB,KAAKE,GAApD,CAAZ;aACKC,GAAL,GAAWL,KAAKG,KAAL,CAAW,KAAKX,IAAhB,CAAX;aACKE,IAAL,GAAYM,KAAKC,EAAL,CACR,KAAKjB,EADG,EAER,KAAKc,IAFG,EAGRb,QAAQ,KAAKiB,GAAb,GAAmB,KAAKE,GAAxB,GAA8B,KAAKC,GAH3B,CAAZ;;;YAQI,KAAKjB,IAAL,KAAc,CAAC,CAAnB,EAAsB;kBACZY,OAAO,KAAKH,KAAlB;iBACKX,EAAL,IAAW,KAAKgB,GAAhB;iBACKd,IAAL,GAAY,KAAKE,IAAjB;iBACKY,GAAL,GAAW,KAAKE,GAAhB;iBACKd,IAAL,GAAY,KAAKE,IAAjB;iBACKY,GAAL,GAAWJ,KAAKG,KAAL,CAAW,KAAKb,IAAhB,CAAX;iBACKE,IAAL,GAAY,KAAKE,IAAjB;iBACKW,GAAL,GAAWL,KAAKG,KAAL,CAAW,KAAKX,IAAhB,CAAX;iBACKE,IAAL,GAAYM,KAAKC,EAAL,CACR,KAAKjB,EADG,EAER,KAAKc,IAFG,EAGR,KAAKZ,EAAL,GAAU,KAAKgB,GAAf,GAAqB,KAAKE,GAA1B,GAAgC,KAAKC,GAH7B,CAAZ;;;QAQJC,EAAJ;YACQ,KAAKlB,IAAL,KAAckB,EAAlB,EAAsB;iBACbC,OAAL;mBACO,IAAP;;eAEG,KAAP;;SAGCC,GAAL,EAAkBC,GAAlB;YACQ,KAAKrB,IAAL,KAAcoB,GAAd,IAAqB,KAAKlB,IAAL,KAAcmB,GAAvC,EAA4C;iBACnCF,OAAL;iBACKA,OAAL;mBACO,IAAP;;eAEG,KAAP;;SAGCC,GAAL,EAAkBC,GAAlB,EAA+BC,GAA/B;YACQ,KAAKtB,IAAL,KAAcoB,GAAd,IAAqB,KAAKlB,IAAL,KAAcmB,GAAnC,IAA0C,KAAKjB,IAAL,KAAckB,GAA5D,EAAiE;iBACxDH,OAAL;iBACKA,OAAL;iBACKA,OAAL;mBACO,IAAP;;eAEG,KAAP;;;;gCCvH+BI;gBAG/B5B,MADJ,EAEIa,KAFJ,EAGIX,KAHJ,EAIIf,OAJJ;YAOQa,MAAJ,EAAY;gBACJA,OAAO,CAAP,MAAc,GAAlB,EAAuB;6BACNA,UAAUa,QAAQ,GAAR,GAAc,IAArC;;0BAEUb,QAAd;;2CAI+BA,WAAWb,SAA9C;aACKe,KAAL,GAAaA,KAAb;;;;mBCjBkBqB;QAClBA,KAAK,IAAT,EAAe,OAAO,KAAP;QACXA,KAAK,IAAT,EAAe,OAAO,IAAP;QACXA,KAAK,IAAT,EAAe,OAAO,KAAP;QACXA,KAAK,IAAT,EAAe,OAAO,IAAP;WACRM,eAAeN,EAAf,CAAP;;AAEJ,sBAA6BA;QACrBA,KAAK,IAAT,EAAe,OAAO,KAAP;QACXA,KAAK,IAAT,EAAe,OAAO,IAAP;QACXA,KAAK,IAAT,EAAe,OAAO,KAAP;QACXA,KAAK,IAAT,EAAe,OAAO,IAAP;QACXA,OAAO,IAAX,EAAiB,OAAO,IAAP;QACbA,KAAK,IAAT,EAAe,OAAO,KAAP;QACXA,KAAK,IAAT,EAAe,OAAO,IAAP;WACRM,eAAeN,EAAf,KAAsBO,kBAAkBP,EAAlB,CAA7B;;AAGJ,uBAAA,CAAwBA,EAAxB;QACQA,KAAK,MAAT,EAAiB;YACTA,KAAK,KAAT,EAAgB;gBACRA,KAAK,KAAT,EAAgB;oBACRA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB;gCACRA,KAAK,IAAT,EAAe;oCACPA,OAAO,IAAX,EAAiB,OAAO,IAAP;oCACbA,OAAO,IAAX,EAAiB,OAAO,IAAP;oCACbA,OAAO,IAAX,EAAiB,OAAO,IAAP;oCACbA,KAAK,IAAT,EAAe,OAAO,KAAP;oCACXA,KAAK,IAAT,EAAe,OAAO,IAAP;oCACXA,KAAK,IAAT,EAAe,OAAO,KAAP;oCACXA,KAAK,IAAT,EAAe,OAAO,IAAP;uCACR,KAAP;;gCAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;gCACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;mCACT,KAAP;;4BAEAA,KAAK,KAAT,EAAgB;gCACRA,OAAO,KAAX,EAAkB,OAAO,IAAP;gCACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;mCACT,KAAP;;4BAEAA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;+BACT,KAAP;;wBAEAA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB;gCACRA,OAAO,KAAX,EAAkB,OAAO,IAAP;gCACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;gCACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;gCACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;mCACT,KAAP;;4BAEAA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;+BACT,KAAP;;wBAEAA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;+BACT,KAAP;;wBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB;gCACRA,OAAO,KAAX,EAAkB,OAAO,IAAP;gCACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;mCACX,KAAP;;4BAEAA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;+BACT,KAAP;;wBAEAA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;+BACX,KAAP;;wBAEAA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;+BACX,KAAP;;wBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB;wBACRA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;uBACT,KAAP;;gBAEAA,KAAK,KAAT,EAAgB;oBACRA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB;gCACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;mCACT,KAAP;;4BAEAA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;+BACT,KAAP;;wBAEAA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;+BACX,KAAP;;wBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;+BACT,KAAP;;wBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;uBACT,KAAP;;gBAEAA,KAAK,KAAT,EAAgB;oBACRA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;+BACX,KAAP;;wBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB;wBACRA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;uBACT,KAAP;;gBAEAA,KAAK,KAAT,EAAgB;oBACRA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;uBACT,KAAP;;gBAEAA,KAAK,KAAT,EAAgB;oBACRA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,OAAO,KAAX,EAAkB,OAAO,IAAP;gBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;gBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,MAAT,EAAiB;gBACTA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB;gCACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;gCACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;mCACT,KAAP;;4BAEAA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;+BACT,KAAP;;wBAEAA,KAAK,MAAT,EAAiB;4BACTA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;4BACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;+BACV,KAAP;;wBAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;2BACZ,KAAP;;oBAEAA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB;4BACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;4BACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;4BACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;+BACZ,KAAP;;wBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB;4BACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;+BACV,KAAP;;wBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;2BACZ,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;mBACV,KAAP;;YAEAA,KAAK,MAAT,EAAiB;gBACTA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB;4BACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;+BACV,KAAP;;wBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;2BACZ,KAAP;;oBAEAA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;mBACZ,KAAP;;YAEAA,KAAK,MAAT,EAAiB;gBACTA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;mBACV,KAAP;;YAEAA,KAAK,MAAT,EAAiB;gBACTA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;mBACV,KAAP;;YAEAA,KAAK,MAAT,EAAiB;gBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;mBACZ,KAAP;;YAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;YACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;YACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;YACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;YACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;YACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;YACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;YACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;YACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;eACZ,KAAP;;QAEAA,KAAK,OAAT,EAAkB;YACVA,KAAK,MAAT,EAAiB;gBACTA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB;4BACTA,KAAK,MAAT,EAAiB;gCACTA,OAAO,MAAX,EAAmB,OAAO,IAAP;gCACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gCACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gCACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gCACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gCACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gCACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gCACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;mCACZ,KAAP;;4BAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;4BACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;+BACV,KAAP;;wBAEAA,KAAK,MAAT,EAAiB;4BACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;+BACV,KAAP;;wBAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB;4BACTA,OAAO,MAAX,EAAmB,OAAO,IAAP;4BACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;+BACZ,KAAP;;wBAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;2BACZ,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB;4BACTA,OAAO,MAAX,EAAmB,OAAO,IAAP;4BACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;+BACV,KAAP;;wBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;2BACZ,KAAP;;oBAEAA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;2BACZ,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;mBACV,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB;4BACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;+BACV,KAAP;;wBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB;wBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;2BACX,KAAP;;oBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;uBACb,KAAP;;gBAEAA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;eACb,KAAP;;QAEAA,KAAK,OAAT,EAAkB;YACVA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB;wBACVA,KAAK,OAAT,EAAkB;4BACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;4BACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;4BACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;4BACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;4BACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;4BACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;4BACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;4BACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;4BACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;4BACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;+BACX,KAAP;;wBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;2BACX,KAAP;;oBAEAA,KAAK,OAAT,EAAkB;wBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;2BACX,KAAP;;oBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;uBACb,KAAP;;gBAEAA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB;wBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;wBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;wBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;2BACX,KAAP;;oBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB;wBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;2BACb,KAAP;;oBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;eACX,KAAP;;QAEAA,KAAK,OAAT,EAAkB;YACVA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB;wBACVA,OAAO,OAAX,EAAoB,OAAO,IAAP;wBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;2BACX,KAAP;;oBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;uBACb,KAAP;;gBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;eACX,KAAP;;QAEAA,KAAK,OAAT,EAAkB;YACVA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;mBACb,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;mBACb,KAAP;;YAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;eACb,KAAP;;QAEAA,KAAK,OAAT,EAAkB;YACVA,KAAK,OAAT,EAAkB;gBACVA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;mBACb,KAAP;;YAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;eACb,KAAP;;QAEAA,KAAK,OAAT,EAAkB;YACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;eACX,KAAP;;QAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;WACX,KAAP;;AAGJ,0BAAA,CAA2BA,EAA3B;QACQA,KAAK,MAAT,EAAiB;YACTA,KAAK,KAAT,EAAgB;gBACRA,KAAK,KAAT,EAAgB;oBACRA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB;gCACRA,OAAO,IAAX,EAAiB,OAAO,IAAP;gCACbA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;gCACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;gCACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gCACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;mCACT,KAAP;;4BAEAA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;+BACT,KAAP;;wBAEAA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;+BACT,KAAP;;wBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;2BACX,KAAP;;oBAEAA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB;4BACRA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;+BACT,KAAP;;wBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;2BACX,KAAP;;oBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;uBACT,KAAP;;gBAEAA,KAAK,KAAT,EAAgB;oBACRA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB;4BACRA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;+BACX,KAAP;;wBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;2BACX,KAAP;;oBAEAA,KAAK,KAAT,EAAgB;wBACRA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,KAAT,EAAgB;oBACRA,KAAK,KAAT,EAAgB;wBACRA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,KAAT,EAAgB;oBACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;uBACT,KAAP;;gBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;gBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;gBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;gBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,MAAT,EAAiB;gBACTA,KAAK,MAAT,EAAiB;oBACTA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB;4BACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;4BACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;4BACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;4BACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;+BACT,KAAP;;wBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;2BACT,KAAP;;oBAEAA,KAAK,KAAT,EAAgB;wBACRA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;wBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;wBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;wBACdA,OAAO,KAAX,EAAkB,OAAO,IAAP;2BACX,KAAP;;oBAEAA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;oBACdA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,KAAP;oBACZA,KAAK,KAAT,EAAgB,OAAO,IAAP;oBACZA,OAAO,KAAX,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;mBACV,KAAP;;YAEAA,KAAK,MAAT,EAAiB;gBACTA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;mBACV,KAAP;;YAEAA,KAAK,MAAT,EAAiB;gBACTA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;mBACV,KAAP;;YAEAA,KAAK,MAAT,EAAiB;gBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;mBACZ,KAAP;;YAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;YACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;YACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;YACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;YACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;YACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;YACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;YACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;YACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;YACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;YACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;YACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;YACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;eACV,KAAP;;QAEAA,KAAK,OAAT,EAAkB;YACVA,KAAK,MAAT,EAAiB;gBACTA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB;4BACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;4BACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;+BACV,KAAP;;wBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;2BACV,KAAP;;oBAEAA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;2BACZ,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;uBACV,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;mBACV,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,MAAT,EAAiB;oBACTA,KAAK,MAAT,EAAiB;wBACTA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;wBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;wBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;wBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;2BACZ,KAAP;;oBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,KAAK,MAAT,EAAiB;oBACTA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;oBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;oBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;oBACfA,OAAO,MAAX,EAAmB,OAAO,IAAP;uBACZ,KAAP;;gBAEAA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,KAAP;gBACbA,KAAK,MAAT,EAAiB,OAAO,IAAP;gBACbA,OAAO,MAAX,EAAmB,OAAO,IAAP;gBACfA,OAAO,OAAX,EAAoB,OAAO,IAAP;mBACb,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;uBACb,KAAP;;gBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;mBACb,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;mBACb,KAAP;;YAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;eACX,KAAP;;QAEAA,KAAK,OAAT,EAAkB;YACVA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB;wBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;wBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;wBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;wBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;wBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;2BACb,KAAP;;oBAEAA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,OAAT,EAAkB;oBACVA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;mBACb,KAAP;;YAEAA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;eACX,KAAP;;QAEAA,KAAK,OAAT,EAAkB;YACVA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB;oBACVA,OAAO,OAAX,EAAoB,OAAO,IAAP;oBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;oBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;uBACX,KAAP;;gBAEAA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;mBACb,KAAP;;YAEAA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;eACX,KAAP;;QAEAA,KAAK,OAAT,EAAkB;YACVA,KAAK,OAAT,EAAkB;gBACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;gBAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;gBACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;mBACX,KAAP;;YAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;eACX,KAAP;;QAEAA,KAAK,OAAT,EAAkB;YACVA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,OAAO,OAAX,EAAoB,OAAO,IAAP;YAChBA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;YACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;eACX,KAAP;;QAEAA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,KAAP;QACdA,KAAK,OAAT,EAAkB,OAAO,IAAP;WACX,KAAP;;;ACngFJ,MAAMQ,eAAwD;WACnD,IAAIC,GAAJ,CAAQ,CACX,OADW,EAEX,iBAFW,EAGX,MAHW,EAIX,YAJW,EAKX,OALW,EAMX,KANW,EAOX,UAPW,EAQX,cARW,EASX,QATW,EAUX,eAVW,EAWX,QAXW,EAYX,gBAZW,EAaX,IAbW,EAcX,OAdW,EAeX,yBAfW,EAgBX,MAhBW,EAiBX,yBAjBW,EAkBX,MAlBW,EAmBX,yBAnBW,EAoBX,KApBW,EAqBX,8BArBW,EAsBX,OAtBW,EAuBX,yBAvBW,EAwBX,KAxBW,EAyBX,yBAzBW,EA0BX,KA1BW,EA2BX,MA3BW,EA4BX,8BA5BW,EA6BX,IA7BW,EA8BX,YA9BW,EA+BX,KA/BW,EAgCX,WAhCW,EAiCX,KAjCW,EAkCX,OAlCW,EAmCX,iBAnCW,EAoCX,gBApCW,EAqCX,qBArCW,EAsCX,oBAtCW,EAuCX,UAvCW,EAwCX,KAxCW,EAyCX,eAzCW,EA0CX,SA1CW,EA2CX,iBA3CW,EA4CX,QA5CW,EA6CX,WA7CW,EA8CX,KA9CW,EA+CX,qBA/CW,EAgDX,MAhDW,EAiDX,sBAjDW,EAkDX,MAlDW,EAmDX,aAnDW,EAoDX,KApDW,EAqDX,UArDW,EAsDX,KAtDW,EAuDX,aAvDW,EAwDX,MAxDW,EAyDX,cAzDW,EA0DX,QA1DW,EA2DX,yBA3DW,EA4DX,KA5DW,EA6DX,WA7DW,EA8DX,OA9DW,EA+DX,MA/DW,EAgEX,yBAhEW,EAiEX,OAjEW,EAkEX,gBAlEW,EAmEX,SAnEW,EAoEX,qBApEW,EAqEX,QArEW,EAsEX,gBAtEW,EAuEX,OAvEW,EAwEX,SAxEW,EAyEX,oBAzEW,EA0EX,IA1EW,EA2EX,mBA3EW,EA4EX,OA5EW,EA6EX,aA7EW,EA8EX,IA9EW,EA+EX,sBA/EW,EAgFX,MAhFW,EAiFX,mBAjFW,EAkFX,OAlFW,EAmFX,WAnFW,EAoFX,OApFW,EAqFX,oBArFW,EAsFX,IAtFW,EAuFX,aAvFW,EAwFX,OAxFW,EAyFX,cAzFW,EA0FX,MA1FW,EA2FX,WA3FW,EA4FX,MA5FW,CAAR,CADmD;sBA+FxC,IAAIA,GAAJ,CAAQ,CACtB,cADsB,EAEtB,IAFsB,EAGtB,mBAHsB,EAItB,IAJsB,EAKtB,uBALsB,EAMtB,IANsB,EAOtB,SAPsB,EAQtB,IARsB,EAStB,OATsB,EAUtB,iBAVsB,EAWtB,IAXsB,EAYtB,kBAZsB,EAatB,IAbsB,EActB,gBAdsB,EAetB,IAfsB,EAgBtB,OAhBsB,EAiBtB,gBAjBsB,EAkBtB,IAlBsB,EAmBtB,mBAnBsB,EAoBtB,IApBsB,EAqBtB,QArBsB,EAsBtB,IAtBsB,EAuBtB,qBAvBsB,EAwBtB,IAxBsB,EAyBtB,QAzBsB,EA0BtB,GA1BsB,EA2BtB,eA3BsB,EA4BtB,IA5BsB,EA6BtB,gBA7BsB,EA8BtB,IA9BsB,EA+BtB,kBA/BsB,EAgCtB,IAhCsB,EAiCtB,MAjCsB,EAkCtB,GAlCsB,EAmCtB,gBAnCsB,EAoCtB,aApCsB,EAqCtB,IArCsB,EAsCtB,iBAtCsB,EAuCtB,IAvCsB,EAwCtB,iBAxCsB,EAyCtB,IAzCsB,EA0CtB,iBA1CsB,EA2CtB,IA3CsB,EA4CtB,QA5CsB,EA6CtB,GA7CsB,EA8CtB,kBA9CsB,EA+CtB,IA/CsB,EAgDtB,OAhDsB,EAiDtB,GAjDsB,EAkDtB,cAlDsB,EAmDtB,IAnDsB,EAoDtB,cApDsB,EAqDtB,IArDsB,EAsDtB,mBAtDsB,EAuDtB,IAvDsB,EAwDtB,cAxDsB,EAyDtB,IAzDsB,EA0DtB,qBA1DsB,EA2DtB,IA3DsB,EA4DtB,aA5DsB,EA6DtB,IA7DsB,EA8DtB,aA9DsB,EA+DtB,GA/DsB,EAgEtB,OAhEsB,EAiEtB,WAjEsB,EAkEtB,GAlEsB,EAmEtB,iBAnEsB,EAoEtB,IApEsB,EAqEtB,cArEsB,EAsEtB,IAtEsB,EAuEtB,WAvEsB,EAwEtB,IAxEsB,EAyEtB,QAzEsB,EA0EtB,GA1EsB,EA2EtB,kBA3EsB,EA4EtB,IA5EsB,EA6EtB,YA7EsB,EA8EtB,IA9EsB,EA+EtB,kBA/EsB,EAgFtB,IAhFsB,CAAR,CA/FwC;YAiLlD,IAAIA,GAAJ,CAAQ,CACZ,OADY,EAEZ,MAFY,EAGZ,MAHY,EAIZ,uBAJY,EAKZ,MALY,EAMZ,QANY,EAOZ,MAPY,EAQZ,UARY,EASZ,MATY,EAUZ,SAVY,EAWZ,MAXY,EAYZ,UAZY,EAaZ,MAbY,EAcZ,OAdY,EAeZ,MAfY,EAgBZ,WAhBY,EAiBZ,MAjBY,EAkBZ,OAlBY,EAmBZ,MAnBY,EAoBZ,SApBY,EAqBZ,MArBY,EAsBZ,WAtBY,EAuBZ,MAvBY,EAwBZ,UAxBY,EAyBZ,MAzBY,EA0BZ,QA1BY,EA2BZ,MA3BY,EA4BZ,SA5BY,EA6BZ,MA7BY,EA8BZ,UA9BY,EA+BZ,MA/BY,EAgCZ,OAhCY,EAiCZ,MAjCY,EAkCZ,qBAlCY,EAmCZ,MAnCY,EAoCZ,QApCY,EAqCZ,MArCY,EAsCZ,oBAtCY,EAuCZ,MAvCY,EAwCZ,QAxCY,EAyCZ,MAzCY,EA0CZ,MA1CY,EA2CZ,UA3CY,EA4CZ,MA5CY,EA6CZ,QA7CY,EA8CZ,MA9CY,EA+CZ,QA/CY,EAgDZ,MAhDY,EAiDZ,MAjDY,EAkDZ,WAlDY,EAmDZ,MAnDY,EAoDZ,SApDY,EAqDZ,MArDY,EAsDZ,UAtDY,EAuDZ,MAvDY,EAwDZ,SAxDY,EAyDZ,MAzDY,EA0DZ,YA1DY,EA2DZ,MA3DY,EA4DZ,UA5DY,EA6DZ,MA7DY,EA8DZ,sBA9DY,EA+DZ,MA/DY,EAgEZ,SAhEY,EAiEZ,MAjEY,EAkEZ,UAlEY,EAmEZ,MAnEY,EAoEZ,UApEY,EAqEZ,MArEY,EAsEZ,YAtEY,EAuEZ,MAvEY,EAwEZ,QAxEY,EAyEZ,MAzEY,EA0EZ,SA1EY,EA2EZ,MA3EY,EA4EZ,OA5EY,EA6EZ,MA7EY,EA8EZ,UA9EY,EA+EZ,MA/EY,EAgFZ,UAhFY,EAiFZ,MAjFY,EAkFZ,KAlFY,EAmFZ,MAnFY,EAoFZ,QApFY,EAqFZ,MArFY,EAsFZ,SAtFY,EAuFZ,MAvFY,EAwFZ,QAxFY,EAyFZ,MAzFY,EA0FZ,QA1FY,EA2FZ,MA3FY,EA4FZ,UA5FY,EA6FZ,MA7FY,EA8FZ,kBA9FY,EA+FZ,MA/FY,EAgGZ,WAhGY,EAiGZ,MAjGY,EAkGZ,MAlGY,EAmGZ,uBAnGY,EAoGZ,MApGY,EAqGZ,wBArGY,EAsGZ,MAtGY,EAuGZ,UAvGY,EAwGZ,MAxGY,EAyGZ,QAzGY,EA0GZ,MA1GY,EA2GZ,SA3GY,EA4GZ,MA5GY,EA6GZ,UA7GY,EA8GZ,MA9GY,EA+GZ,UA/GY,EAgHZ,MAhHY,EAiHZ,YAjHY,EAkHZ,MAlHY,EAmHZ,OAnHY,EAoHZ,MApHY,EAqHZ,QArHY,EAsHZ,MAtHY,EAuHZ,WAvHY,EAwHZ,MAxHY,EAyHZ,KAzHY,EA0HZ,MA1HY,EA2HZ,OA3HY,EA4HZ,MA5HY,EA6HZ,QA7HY,EA8HZ,MA9HY,EA+HZ,OA/HY,EAgIZ,MAhIY,EAiIZ,UAjIY,EAkIZ,MAlIY,EAmIZ,UAnIY,EAoIZ,MApIY,EAqIZ,MArIY,EAsIZ,QAtIY,EAuIZ,MAvIY,EAwIZ,QAxIY,EAyIZ,MAzIY,EA0IZ,UA1IY,EA2IZ,MA3IY,EA4IZ,WA5IY,EA6IZ,MA7IY,EA8IZ,SA9IY,EA+IZ,MA/IY,EAgJZ,YAhJY,EAiJZ,MAjJY,EAkJZ,SAlJY,EAmJZ,MAnJY,EAoJZ,eApJY,EAqJZ,MArJY,EAsJZ,cAtJY,EAuJZ,MAvJY,EAwJZ,eAxJY,EAyJZ,MAzJY,EA0JZ,kBA1JY,EA2JZ,MA3JY,EA4JZ,sBA5JY,EA6JZ,MA7JY,EA8JZ,MA9JY,EA+JZ,MA/JY,EAgKZ,MAhKY,EAiKZ,WAjKY,EAkKZ,MAlKY,EAmKZ,KAnKY,EAoKZ,MApKY,EAqKZ,SArKY,EAsKZ,MAtKY,EAuKZ,SAvKY,EAwKZ,MAxKY,EAyKZ,WAzKY,EA0KZ,MA1KY,EA2KZ,aA3KY,EA4KZ,MA5KY,EA6KZ,MA7KY,EA8KZ,KA9KY,EA+KZ,MA/KY,EAgLZ,OAhLY,EAiLZ,MAjLY,EAkLZ,OAlLY,EAmLZ,MAnLY,EAoLZ,UApLY,EAqLZ,MArLY,EAsLZ,eAtLY,EAuLZ,MAvLY,EAwLZ,YAxLY,EAyLZ,MAzLY,EA0LZ,mBA1LY,EA2LZ,MA3LY,EA4LZ,YA5LY,EA6LZ,MA7LY,EA8LZ,aA9LY,EA+LZ,MA/LY,EAgMZ,mBAhMY,EAiMZ,MAjMY,EAkMZ,YAlMY,EAmMZ,MAnMY,EAoMZ,OApMY,EAqMZ,MArMY,EAsMZ,OAtMY,EAuMZ,MAvMY,EAwMZ,SAxMY,EAyMZ,MAzMY,EA0MZ,cA1MY,EA2MZ,MA3MY,EA4MZ,WA5MY,EA6MZ,MA7MY,EA8MZ,aA9MY,EA+MZ,MA/MY,EAgNZ,UAhNY,EAiNZ,MAjNY,EAkNZ,YAlNY,EAmNZ,MAnNY,EAoNZ,iBApNY,EAqNZ,MArNY,EAsNZ,QAtNY,EAuNZ,MAvNY,EAwNZ,OAxNY,EAyNZ,MAzNY,EA0NZ,WA1NY,EA2NZ,MA3NY,EA4NZ,YA5NY,EA6NZ,MA7NY,EA8NZ,SA9NY,EA+NZ,MA/NY,EAgOZ,SAhOY,EAiOZ,MAjOY,EAkOZ,SAlOY,EAmOZ,MAnOY,EAoOZ,aApOY,EAqOZ,MArOY,EAsOZ,SAtOY,EAuOZ,MAvOY,EAwOZ,cAxOY,EAyOZ,MAzOY,EA0OZ,SA1OY,EA2OZ,MA3OY,EA4OZ,WA5OY,EA6OZ,MA7OY,EA8OZ,cA9OY,EA+OZ,MA/OY,EAgPZ,QAhPY,EAiPZ,MAjPY,EAkPZ,SAlPY,EAmPZ,MAnPY,EAoPZ,UApPY,EAqPZ,MArPY,EAsPZ,QAtPY,EAuPZ,MAvPY,EAwPZ,UAxPY,EAyPZ,MAzPY,EA0PZ,UA1PY,EA2PZ,MA3PY,EA4PZ,OA5PY,EA6PZ,MA7PY,EA8PZ,OA9PY,EA+PZ,MA/PY,EAgQZ,QAhQY,EAiQZ,MAjQY,EAkQZ,QAlQY,EAmQZ,MAnQY,EAoQZ,QApQY,EAqQZ,MArQY,EAsQZ,MAtQY,EAuQZ,SAvQY,EAwQZ,MAxQY,EAyQZ,UAzQY,EA0QZ,MA1QY,EA2QZ,SA3QY,EA4QZ,MA5QY,EA6QZ,UA7QY,EA8QZ,MA9QY,EA+QZ,KA/QY,EAgRZ,MAhRY,EAiRZ,aAjRY,EAkRZ,MAlRY,EAmRZ,IAnRY,EAoRZ,MApRY,EAqRZ,kBArRY,EAsRZ,MAtRY,CAAR;CAjLZ;AA2cAD,aAAaE,EAAb,GAAkBF,aAAaG,gBAA/B;AACAH,aAAaI,EAAb,GAAkBJ,aAAaK,iBAAb,GAAiCL,aAAaM,GAAb,GAC/CN,aAAaO,MADjB;;ACxcO,MAAMC,YAAY,IAAlB;AACP,AAAO,MAAMC,sBAAsB,IAA5B;AACP,AAAO,MAAMC,WAAW,IAAjB;AACP,AAAO,MAAMC,iBAAiB,IAAvB;AACP,AAAO,MAAMC,WAAW,IAAjB;AACP,AAAO,MAAMC,iBAAiB,IAAvB;AACP,AAAO,MAAMC,kBAAkB,IAAxB;AACP,AAAO,MAAMC,aAAa,IAAnB;AACP,AAAO,MAAMC,kBAAkB,IAAxB;AACP,AAAO,MAAMC,mBAAmB,IAAzB;AACP,AAAO,MAAMC,WAAW,IAAjB;AACP,AAAO,MAAMC,WAAW,IAAjB;AACP,AAAO,MAAMC,QAAQ,IAAd;AACP,AAAO,MAAMC,cAAc,IAApB;AACP,AAAO,MAAMC,WAAW,IAAjB;AACP,AAAO,MAAMC,UAAU,IAAhB;AACP,AAAO,MAAMC,YAAY,IAAlB;AACP,AAAO,MAAMC,WAAW,IAAjB;AACP,AAAO,MAAMC,aAAa,IAAnB;AACP,AAAO,MAAMC,YAAY,IAAlB;AACP,AAAO,MAAMC,QAAQ,IAAd;AACP,AAAO,MAAMC,eAAe,IAArB;AACP,AAAO,MAAMC,aAAa,IAAnB;AACP,AAAO,MAAMC,kBAAkB,IAAxB;AACP,AAAO,MAAMC,eAAe,IAArB;AACP,AAAO,MAAMC,sBAAsB,IAA5B;AACP,AAAO,MAAMC,sBAAsB,IAA5B;AACP,AAAO,MAAMC,sBAAsB,IAA5B;AACP,AAAO,MAAMC,sBAAsB,IAA5B;AACP,AAAO,MAAMC,sBAAsB,IAA5B;AACP,AAAO,MAAMC,sBAAsB,IAA5B;AACP,AAAO,MAAMC,sBAAsB,IAA5B;AACP,AAAO,MAAMC,sBAAsB,IAA5B;AACP,AAAO,MAAMC,UAAU,IAAhB;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,iBAAiB,IAAvB;AACP,AAAO,MAAMC,qBAAqB,IAA3B;AACP,AAAO,MAAMC,mBAAmB,IAAzB;AACP,AAAO,MAAMC,mBAAmB,IAAzB;AACP,AAAO,MAAMC,eAAe,IAArB;AACP,AAAO,MAAMC,oBAAoB,IAA1B;AACP,AAAO,MAAMC,qBAAqB,MAA3B;AACP,AAAO,MAAMC,kBAAkB,MAAxB;AACP,AAAO,MAAMC,gBAAgB,MAAtB;AACP,AAAO,MAAMC,qBAAqB,MAA3B;AAEP,AAAO,MAAMC,eAAe,IAArB;AACP,AAAO,MAAMC,eAAe,QAArB;AAEP,uBAA8BC;WAErBA,QAAQ1C,mBAAR,IAA+B0C,QAAQnC,mBAAxC,IACCmC,QAAQjC,iBAAR,IAA6BiC,QAAQd,iBAF1C;;AAMJ,wBAA+Bc;WACpBA,QAAQnD,SAAR,IAAqBmD,QAAQhD,SAApC;;AAGJ,sBAA6BgD;WAClBA,QAAQnD,SAAR,IAAqBmD,QAAQjD,UAApC;;AAGJ,oBAA2BiD;WAElBA,QAAQnD,SAAR,IAAqBmD,QAAQhD,SAA9B,IACCgD,QAAQ1C,mBAAR,IAA+B0C,QAAQvC,mBADxC,IAECuC,QAAQjC,iBAAR,IAA6BiC,QAAQ7B,iBAH1C;;AAOJ,0BAAiC6B;WAEzBA,SAASjE,QAAT,IACAiE,SAAS9D,cADT,IAEA8D,SAASJ,aAFT,IAGAI,SAASH,kBAJb;;AAQJ,wBAA+BG;WACpBA,QAAQF,YAAR,IAAwBE,QAAQD,YAAvC;;AAGJ,oBAA2BC;QACnBA,QAAQjC,iBAAR,IAA6BiC,QAAQ7B,iBAAzC,EAA4D;eACjD6B,OAAOjC,iBAAP,GAA2B,EAAlC;;QAEAiC,QAAQ1C,mBAAR,IAA+B0C,QAAQvC,mBAA3C,EAAgE;eACrDuC,OAAO1C,mBAAP,GAA6B,EAApC;;WAEG0C,OAAOnD,SAAd;;;AC5CJ,0BAAA,CAA2BhC,EAA3B;WAEQA,OAAOyE,gBAAP,IACAzE,OAAOuB,UADP,IAEAvB,OAAOuE,cAFP,IAGAvE,OAAO8B,QAHP,IAIA9B,OAAO0B,QAJP,IAKA1B,OAAO2B,QALP,IAMA3B,OAAOwC,YANP,IAOAxC,OAAOwB,eAPP,IAQAxB,OAAOyB,gBARP,IASAzB,OAAOsE,iBATP,IAUAtE,OAAOwE,kBAVP,IAWAxE,OAAO0E,gBAXP,IAYA1E,OAAO4E,iBAZP,IAaA5E,OAAO2E,YAdX;;AAkBJ,gCAAA,CAAiC3E,EAAjC;WACWoF,UAAUpF,EAAV,KAAiBA,OAAOuB,UAAxB,IAAsCvB,OAAOiD,OAApD;;AAGJ,+BAAA,CAAgCjD,EAAhC;WAEQqF,aAAarF,EAAb,KACAA,OAAOuB,UADP,IAEAvB,OAAOiD,OAFP,IAGAjD,OAAO6E,kBAHP,IAIA7E,OAAO8E,eALX;;AASJ,uCAAA,CAAwC9E,EAAxC;WACWsF,cAActF,EAAd,KAAqBA,OAAOiD,OAAnC;;AAGJ,wCAAA,CAAyCjD,EAAzC;WACWuF,+BAA+BvF,EAA/B,KAAsCwF,eAAexF,EAAf,CAA7C;;AAGJ,+BAAA,CAAgCyF,IAAhC,EAA8CC,KAA9C;WAEWlF,aAAamF,cAAb,CAA4BF,IAA5B,KAAqCjF,aAAaiF,IAAb,EAAmBG,GAAnB,CAAuBF,KAAvB,CAA5C;;AAGJ,mCAAA,CAAoCD,IAApC;WACWjF,aAAaqF,KAAb,CAAmBD,GAAnB,CAAuBH,IAAvB,CAAP;;AAmSJ;gBAoBgBK,OAAZ;oBAlBiB,GAAU,IAAIC,MAAJ,EAAV;mBACT,GAAS,KAAT;mBACA,GAAS,KAAT;0BACA,GAAgB,CAAhB;0BACA,GAAgB,CAAhB;0BACA,GAAgB,CAAhB;0BACA,GAAgB,EAAhB;0BACA,GAAgB,EAAhB;0BACA,GAAgB,EAAhB;yCACA,GAA+B,KAA/B;gCACA,GAAsB,CAAtB;wBACA,GAAc,IAAItF,GAAJ,EAAd;gCACA,GAAsB,IAAIA,GAAJ,EAAtB;aAOCuF,QAAL,GAAgBF,WAAW,EAA3B;;oBAUArH,MADJ;YAEIY,4EAAgB;YAChBlB,0EAAcM,OAAOV;;aAEhBkI,MAAL,GAAc,KAAKC,MAAL,GAAc,KAA5B;aACKC,KAAL,CAAW1H,MAAX,EAAmBY,KAAnB,EAA0BlB,GAA1B;aAEKiI,cAAL,CAAoB/G,KAApB;YACI,KAAKgH,GAAL,CAAStE,OAAT,KAAqB,KAAKuE,aAAL,EAArB,IAA6C,KAAKD,GAAL,CAAStE,OAAT,CAAjD,EAAoE;kBAC1DwE,YAAY,KAAK5H,KAAvB;kBACMW,QAAQb,OAAO+H,OAAP,CAAe,GAAf,EAAoBD,SAApB,MAAmC,CAAC,CAAlD;iBACKE,aAAL,CAAmBhI,MAAnB,EAA2B8H,SAA3B,EAAsCpI,GAAtC;iBACKuI,eAAL,CAAqBjI,MAArB,EAA6BY,QAAQ,CAArC,EAAwCkH,YAAY,CAApD,EAAuDjH,KAAvD;SAJJ,MAKO,IAAID,SAASlB,GAAb,EAAkB;iBAChBwI,KAAL,CAAW,OAAX;SADG,MAEA;kBACGrI,IAAIsI,OAAOC,aAAP,CAAqB,KAAKhI,gBAA1B,CAAV;iBACK8H,KAAL,0BAAoCrI,IAApC;;aAECwI,cAAL,CAAoBzH,KAApB,EAA2BlB,GAA3B;;kBAUAM,MADJ;YAEIY,4EAAgB;YAChBlB,0EAAcM,OAAOV;;cAEfgJ,gBAAgB,IAAItG,GAAJ,EAAtB;YACIuG,SAAS,KAAb;YACIC,aAAa,KAAjB;YACIC,YAAY,KAAhB;YACIC,SAAS,KAAb;YACIC,UAAU,KAAd;YACIC,SAAS,KAAb;aACK,IAAIjJ,IAAIiB,KAAb,EAAoBjB,IAAID,GAAxB,EAA6B,EAAEC,CAA/B,EAAkC;kBACxBkJ,OAAO7I,OAAOJ,UAAP,CAAkBD,CAAlB,CAAb;gBAEI2I,cAAcnB,GAAd,CAAkB0B,IAAlB,CAAJ,EAA6B;qBACpBX,KAAL,qBAA+BlI,OAAOL,CAAP,IAA/B;;0BAEUmJ,GAAd,CAAkBD,IAAlB;gBAEIA,SAAS/D,iBAAb,EAAgC;yBACnB,IAAT;aADJ,MAEO,IAAI+D,SAAS9D,iBAAb,EAAgC;6BACtB,IAAb;aADG,MAEA,IAAI8D,SAAS5D,iBAAb,EAAgC;4BACvB,IAAZ;aADG,MAEA,IAAI4D,SAAStD,iBAAT,IAA8B,KAAKwD,WAAL,IAAoB,IAAtD,EAA4D;0BACrD,IAAV;aADG,MAEA,IAAIF,SAASlD,iBAAT,IAA8B,KAAKoD,WAAL,IAAoB,IAAtD,EAA4D;yBACtD,IAAT;aADG,MAEA,IAAIF,SAASxD,iBAAT,IAA8B,KAAK0D,WAAL,IAAoB,IAAtD,EAA4D;yBACtD,IAAT;aADG,MAEA;qBACEb,KAAL,kBAA4BlI,OAAOL,CAAP,IAA5B;;;aAGHqJ,OAAL,CACIpI,KADJ,EAEIlB,GAFJ,EAGI6I,MAHJ,EAIIC,UAJJ,EAKIC,SALJ,EAMIE,OANJ,EAOID,MAPJ,EAQIE,MARJ;;oBAoBA5I,MADJ;YAEIY,4EAAgB;YAChBlB,0EAAcM,OAAOV;YACrBuB,4EAAiB;;aAEZ2G,MAAL,GAAc3G,SAAS,KAAKkI,WAAL,IAAoB,IAA3C;aACKtB,MAAL,GAAc5G,SAAS,KAAKkI,WAAL,IAAoB,IAA3C;aACKrB,KAAL,CAAW1H,MAAX,EAAmBY,KAAnB,EAA0BlB,GAA1B;aACKuJ,OAAL;YAGI,CAAC,KAAKxB,MAAN,IACA,KAAKsB,WAAL,IAAoB,IADpB,IAEA,KAAKG,WAAL,CAAiBC,IAAjB,GAAwB,CAH5B,EAIE;iBACO1B,MAAL,GAAc,IAAd;iBACKzG,MAAL,CAAYJ,KAAZ;iBACKqI,OAAL;;;QAMIG,MAAZ;eACWC,QAAQ,KAAK9B,QAAL,CAAc6B,MAAd,IAAwB,KAAK5B,MAArC,CAAP;;QAGQuB,WAAZ;eACW,KAAKxB,QAAL,CAAcwB,WAAd,IAA6B,IAApC;;mBAGmBnI,KAAf;YACA,KAAK2G,QAAL,CAAcI,cAAlB,EAAkC;iBACzBJ,QAAL,CAAcI,cAAd,CAA6B/G,KAA7B;;;mBAIeA,KAAf,EAA8BlB,GAA9B;YACA,KAAK6H,QAAL,CAAcc,cAAlB,EAAkC;iBACzBd,QAAL,CAAcc,cAAd,CAA6BzH,KAA7B,EAAoClB,GAApC;;;YAKJkB,KADI,EAEJlB,GAFI,EAGJ6I,MAHI,EAIJC,UAJI,EAKJC,SALI,EAMJE,OANI,EAOJD,MAPI,EAQJE,MARI;YAUA,KAAKrB,QAAL,CAAcyB,OAAlB,EAA2B;iBAClBzB,QAAL,CAAcyB,OAAd,CACIpI,KADJ,EAEIlB,GAFJ,EAGI6I,MAHJ,EAIIC,UAJJ,EAKIC,SALJ,EAMIE,OANJ,EAOID,MAPJ,EAQIE,MARJ;;;mBAaehI,KAAf;YACA,KAAK2G,QAAL,CAAc+B,cAAlB,EAAkC;iBACzB/B,QAAL,CAAc+B,cAAd,CAA6B1I,KAA7B;;;mBAIeA,KAAf,EAA8BlB,GAA9B;YACA,KAAK6H,QAAL,CAAcgC,cAAlB,EAAkC;iBACzBhC,QAAL,CAAcgC,cAAd,CAA6B3I,KAA7B,EAAoClB,GAApC;;;uBAImBkB,KAAnB;YACA,KAAK2G,QAAL,CAAciC,kBAAlB,EAAsC;iBAC7BjC,QAAL,CAAciC,kBAAd,CAAiC5I,KAAjC;;;uBAImBA,KAAnB,EAAkClB,GAAlC;YACA,KAAK6H,QAAL,CAAckC,kBAAlB,EAAsC;iBAC7BlC,QAAL,CAAckC,kBAAd,CAAiC7I,KAAjC,EAAwClB,GAAxC;;;uBAImBkB,KAAnB,EAAkCV,KAAlC;YACA,KAAKqH,QAAL,CAAcmC,kBAAlB,EAAsC;iBAC7BnC,QAAL,CAAcmC,kBAAd,CAAiC9I,KAAjC,EAAwCV,KAAxC;;;uBAKJU,KADI,EAEJlB,GAFI,EAGJQ,KAHI;YAKA,KAAKqH,QAAL,CAAcoC,kBAAlB,EAAsC;iBAC7BpC,QAAL,CAAcoC,kBAAd,CAAiC/I,KAAjC,EAAwClB,GAAxC,EAA6CQ,KAA7C;;;iBAIaU,KAAb;YACA,KAAK2G,QAAL,CAAcqC,YAAlB,EAAgC;iBACvBrC,QAAL,CAAcqC,YAAd,CAA2BhJ,KAA3B;;;iBAIaA,KAAb,EAA4BlB,GAA5B;YACA,KAAK6H,QAAL,CAAcsC,YAAlB,EAAgC;iBACvBtC,QAAL,CAAcsC,YAAd,CAA2BjJ,KAA3B,EAAkClB,GAAlC;;;0BAIsBkB,KAAtB,EAAqCoG,IAArC;YACA,KAAKO,QAAL,CAAcuC,qBAAlB,EAAyC;iBAChCvC,QAAL,CAAcuC,qBAAd,CAAoClJ,KAApC,EAA2CoG,IAA3C;;;0BAKJpG,KADI,EAEJlB,GAFI,EAGJsH,IAHI;YAKA,KAAKO,QAAL,CAAcwC,qBAAlB,EAAyC;iBAChCxC,QAAL,CAAcwC,qBAAd,CAAoCnJ,KAApC,EAA2ClB,GAA3C,EAAgDsH,IAAhD;;;iBAKJpG,KADI,EAEJlB,GAFI,EAGJsK,GAHI,EAIJC,GAJI,EAKJC,MALI;YAOA,KAAK3C,QAAL,CAAc4C,YAAlB,EAAgC;iBACvB5C,QAAL,CAAc4C,YAAd,CAA2BvJ,KAA3B,EAAkClB,GAAlC,EAAuCsK,GAAvC,EAA4CC,GAA5C,EAAiDC,MAAjD;;;+BAKJtJ,KADI,EAEJwJ,IAFI,EAGJC,MAHI;YAKA,KAAK9C,QAAL,CAAc+C,0BAAlB,EAA8C;iBACrC/C,QAAL,CAAc+C,0BAAd,CAAyC1J,KAAzC,EAAgDwJ,IAAhD,EAAsDC,MAAtD;;;+BAKJzJ,KADI,EAEJlB,GAFI,EAGJ0K,IAHI,EAIJC,MAJI;YAMA,KAAK9C,QAAL,CAAcgD,0BAAlB,EAA8C;iBACrChD,QAAL,CAAcgD,0BAAd,CAAyC3J,KAAzC,EAAgDlB,GAAhD,EAAqD0K,IAArD,EAA2DC,MAA3D;;;oBAKJzJ,KADI,EAEJlB,GAFI,EAGJ0K,IAHI;YAKA,KAAK7C,QAAL,CAAciD,eAAlB,EAAmC;iBAC1BjD,QAAL,CAAciD,eAAd,CAA8B5J,KAA9B,EAAqClB,GAArC,EAA0C0K,IAA1C;;;4BAKJxJ,KADI,EAEJlB,GAFI,EAGJ0K,IAHI,EAIJC,MAJI;YAMA,KAAK9C,QAAL,CAAckD,uBAAlB,EAA2C;iBAClClD,QAAL,CAAckD,uBAAd,CAAsC7J,KAAtC,EAA6ClB,GAA7C,EAAkD0K,IAAlD,EAAwDC,MAAxD;;;sBAIkBzJ,KAAlB,EAAiClB,GAAjC,EAA8C0K,IAA9C;YACA,KAAK7C,QAAL,CAAcmD,iBAAlB,EAAqC;iBAC5BnD,QAAL,CAAcmD,iBAAd,CAAgC9J,KAAhC,EAAuClB,GAAvC,EAA4C0K,IAA5C;;;yBAKJxJ,KADI,EAEJlB,GAFI,EAGJ0K,IAHI,EAIJC,MAJI;YAMA,KAAK9C,QAAL,CAAcoD,oBAAlB,EAAwC;iBAC/BpD,QAAL,CAAcoD,oBAAd,CAAmC/J,KAAnC,EAA0ClB,GAA1C,EAA+C0K,IAA/C,EAAqDC,MAArD;;;kCAKJzJ,KADI,EAEJlB,GAFI,EAGJ0K,IAHI,EAIJQ,GAJI,EAKJ3D,KALI,EAMJoD,MANI;YAQA,KAAK9C,QAAL,CAAcsD,6BAAlB,EAAiD;iBACxCtD,QAAL,CAAcsD,6BAAd,CACIjK,KADJ,EAEIlB,GAFJ,EAGI0K,IAHJ,EAIIQ,GAJJ,EAKI3D,KALJ,EAMIoD,MANJ;;;gBAWYzJ,KAAZ,EAA2BlB,GAA3B,EAAwCuH,KAAxC;YACA,KAAKM,QAAL,CAAcuD,WAAlB,EAA+B;iBACtBvD,QAAL,CAAcuD,WAAd,CAA0BlK,KAA1B,EAAiClB,GAAjC,EAAsCuH,KAAtC;;;oBAKJrG,KADI,EAEJlB,GAFI,EAGJqL,GAHI;YAKA,KAAKxD,QAAL,CAAcyD,eAAlB,EAAmC;iBAC1BzD,QAAL,CAAcyD,eAAd,CAA8BpK,KAA9B,EAAqClB,GAArC,EAA0CqL,GAA1C;;;0BAIsBnK,KAAtB,EAAqCyJ,MAArC;YACA,KAAK9C,QAAL,CAAc0D,qBAAlB,EAAyC;iBAChC1D,QAAL,CAAc0D,qBAAd,CAAoCrK,KAApC,EAA2CyJ,MAA3C;;;0BAKJzJ,KADI,EAEJlB,GAFI,EAGJ2K,MAHI;YAKA,KAAK9C,QAAL,CAAc2D,qBAAlB,EAAyC;iBAChC3D,QAAL,CAAc2D,qBAAd,CAAoCtK,KAApC,EAA2ClB,GAA3C,EAAgD2K,MAAhD;;;0BAKJzJ,KADI,EAEJlB,GAFI,EAGJsK,GAHI,EAIJC,GAJI;YAMA,KAAK1C,QAAL,CAAc4D,qBAAlB,EAAyC;iBAChC5D,QAAL,CAAc4D,qBAAd,CAAoCvK,KAApC,EAA2ClB,GAA3C,EAAgDsK,GAAhD,EAAqDC,GAArD;;;QAQIjK,MAAZ;eACW,KAAKoL,OAAL,CAAapL,MAApB;;QAGQE,KAAZ;eACW,KAAKkL,OAAL,CAAalL,KAApB;;QAGQE,gBAAZ;eACW,KAAKgL,OAAL,CAAahL,gBAApB;;QAGQE,aAAZ;eACW,KAAK8K,OAAL,CAAa9K,aAApB;;QAGQE,cAAZ;eACW,KAAK4K,OAAL,CAAa5K,cAApB;;QAGQE,cAAZ;eACW,KAAK0K,OAAL,CAAa1K,cAApB;;UAGUV,MAAN,EAAsBY,KAAtB,EAAqClB,GAArC;aACC0L,OAAL,CAAa1D,KAAb,CAAmB1H,MAAnB,EAA2BY,KAA3B,EAAkClB,GAAlC,EAAuC,KAAK8H,MAA5C;;WAGWtH,KAAP;aACCkL,OAAL,CAAapK,MAAb,CAAoBd,KAApB;;;aAIKkL,OAAL,CAAa5J,OAAb;;QAGQD,EAAJ;eACG,KAAK6J,OAAL,CAAaxD,GAAb,CAAiBrG,EAAjB,CAAP;;SAGSE,GAAL,EAAkBC,GAAlB;eACG,KAAK0J,OAAL,CAAaC,IAAb,CAAkB5J,GAAlB,EAAuBC,GAAvB,CAAP;;SAGSD,GAAL,EAAkBC,GAAlB,EAA+BC,GAA/B;eACG,KAAKyJ,OAAL,CAAaE,IAAb,CAAkB7J,GAAlB,EAAuBC,GAAvB,EAA4BC,GAA5B,CAAP;;UAKUxC,OAAN;cACE,IAAIoM,iBAAJ,CACF,KAAKvL,MADH,EAEF,KAAKwH,MAFH,EAGF,KAAKtH,KAHH,EAIFf,OAJE,CAAN;;;cAUMyB,QAAQ,KAAKV,KAAnB;YACIsL,UAAU,KAAd;YACIC,UAAU,KAAd;iBAES;kBACClK,KAAK,KAAKnB,gBAAhB;gBACImB,OAAO,CAAC,CAAR,IAAamK,iBAAiBnK,EAAjB,CAAjB,EAAuC;sBAC7B6I,OAAOoB,UAAU,iBAAV,GAA8B,oBAA3C;qBACKtD,KAAL,iBAA2BkC,MAA3B;;gBAEAqB,OAAJ,EAAa;0BACC,KAAV;aADJ,MAEO,IAAIlK,OAAOuE,cAAX,EAA2B;0BACpB,IAAV;aADG,MAEA,IAAIvE,OAAOsE,iBAAX,EAA8B;0BACvB,IAAV;aADG,MAEA,IAAItE,OAAOwE,kBAAX,EAA+B;0BACxB,KAAV;aADG,MAEA,IACFxE,OAAO+B,OAAP,IAAkB,CAACkI,OAApB,IACCjK,OAAO0B,QAAP,IAAmB,KAAK/C,KAAL,KAAeU,KAFhC,EAGL;;;iBAGGY,OAAL;;eAGG,KAAKtB,KAAL,KAAeU,KAAtB;;;cAKMA,QAAQ,KAAKV,KAAnB;aACKyL,mBAAL,GAA2B,KAAKC,oBAAL,EAA3B;aACK1C,WAAL,CAAiB2C,KAAjB;aACKC,mBAAL,CAAyBD,KAAzB;aAEKvC,cAAL,CAAoB1I,KAApB;aACKmL,WAAL;cAEMxK,KAAK,KAAKnB,gBAAhB;YACI,KAAKA,gBAAL,KAA0B,CAAC,CAA/B,EAAkC;gBAC1BmB,OAAOyB,gBAAX,EAA6B;qBACpBkF,KAAL,CAAW,eAAX;;gBAEA3G,OAAOwE,kBAAP,IAA6BxE,OAAO4E,iBAAxC,EAA2D;qBAClD+B,KAAL,CAAW,0BAAX;;kBAEErI,IAAIsI,OAAOC,aAAP,CAAqB7G,EAArB,CAAV;iBACK2G,KAAL,0BAAoCrI,IAApC;;aAECiM,mBAAL,CAAyBE,OAAzB,CAAiChF;gBACzB,CAAC,KAAKkC,WAAL,CAAiB/B,GAAjB,CAAqBH,IAArB,CAAL,EAAiC;qBACxBkB,KAAL,CAAW,kCAAX;;SAFR;aAKKqB,cAAL,CAAoB3I,KAApB,EAA2B,KAAKV,KAAhC;;;cAIMU,QAAQ,KAAKV,KAAnB;YACIsL,UAAU,KAAd;YACIC,UAAU,KAAd;YACIQ,QAAQ,CAAZ;YACI1K,KAAK,CAAT;eAEO,CAACA,KAAK,KAAKnB,gBAAX,MAAiC,CAAC,CAAzC,EAA4C;gBACpCqL,OAAJ,EAAa;0BACC,KAAV;aADJ,MAEO,IAAIlK,OAAOuE,cAAX,EAA2B;0BACpB,IAAV;aADG,MAEA,IAAIvE,OAAOsE,iBAAX,EAA8B;0BACvB,IAAV;aADG,MAEA,IAAItE,OAAOwE,kBAAX,EAA+B;0BACxB,KAAV;aADG,MAEA,IACHxE,OAAOwB,eAAP,IACA,CAACyI,OADD,KAEC,KAAKlL,aAAL,KAAuByD,YAAvB,IACI,KAAKvD,cAAL,KAAwBoD,YAAxB,IACG,KAAKlD,cAAL,KAAwBmD,UAD3B,IAEG,KAAKnD,cAAL,KAAwBmC,eALhC,CADG,EAOL;yBACW,CAAT;;iBAECrB,OAAL;;aAGCR,MAAL,CAAYJ,KAAZ;eACOqL,KAAP;;;cAKMrL,QAAQ,KAAKV,KAAnB;YACIP,IAAI,CAAR;aAEK6J,kBAAL,CAAwB5I,KAAxB;aACKsL,WAAL,CAAiBvM,GAAjB;eACO,KAAKiI,GAAL,CAAS1B,YAAT,CAAP,EAA+B;iBACtBgG,WAAL,CAAiBvM,GAAjB;;YAGA,KAAKwM,aAAL,CAAmB,IAAnB,CAAJ,EAA8B;iBACrBjE,KAAL,CAAW,mBAAX;;YAEA,KAAKN,GAAL,CAAS3B,gBAAT,CAAJ,EAAgC;iBACvBiC,KAAL,CAAW,0BAAX;;aAECuB,kBAAL,CAAwB7I,KAAxB,EAA+B,KAAKV,KAApC;;gBAIgBP,CAAZ;cACEiB,QAAQ,KAAKV,KAAnB;aAEKwJ,kBAAL,CAAwB9I,KAAxB,EAA+BjB,CAA/B;eACO,KAAKS,gBAAL,KAA0B,CAAC,CAA3B,IAAgC,KAAKgM,OAAL,EAAvC,CAAsD;aACjDzC,kBAAL,CAAwB/I,KAAxB,EAA+B,KAAKV,KAApC,EAA2CP,CAA3C;;;YAKI,KAAK0M,YAAL,EAAJ,EAAyB;gBAIjB,KAAKC,4BAAT,EAAuC;qBAC9BH,aAAL;;mBAEG,IAAP;;YAGA,KAAK/C,MAAL,GAAc,KAAKmD,OAAL,EAAd,GAA+B,KAAKC,eAAL,EAAnC,EAA2D;iBAClDL,aAAL;mBACO,IAAP;;eAGG,KAAP;;;cAKMvL,QAAQ,KAAKV,KAAnB;aACKoM,4BAAL,GAAoC,KAApC;YAGI,KAAK1E,GAAL,CAAS5B,gBAAT,CAAJ,EAAgC;iBACvBwE,eAAL,CAAqB5J,KAArB,EAA4B,KAAKV,KAAjC,EAAwC,OAAxC;mBACO,IAAP;;YAEA,KAAK0H,GAAL,CAAS9E,UAAT,CAAJ,EAA0B;iBACjB0H,eAAL,CAAqB5J,KAArB,EAA4B,KAAKV,KAAjC,EAAwC,KAAxC;mBACO,IAAP;;YAEA,KAAKmL,IAAL,CAAUvF,cAAV,EAA0B7B,mBAA1B,CAAJ,EAAoD;iBAC3CwG,uBAAL,CAA6B7J,KAA7B,EAAoC,KAAKV,KAAzC,EAAgD,MAAhD,EAAwD,IAAxD;mBACO,IAAP;;YAEA,KAAKmL,IAAL,CAAUvF,cAAV,EAA0BpB,iBAA1B,CAAJ,EAAkD;iBACzC+F,uBAAL,CAA6B7J,KAA7B,EAAoC,KAAKV,KAAzC,EAAgD,MAAhD,EAAwD,KAAxD;mBACO,IAAP;;YAIA,KAAKmL,IAAL,CAAUtI,eAAV,EAA2BgB,YAA3B,CAAJ,EAA8C;kBACpC0I,aACF,KAAK1D,WAAL,IAAoB,IAApB,IAA4B,KAAKnB,GAAL,CAAShE,YAAT,CADhC;gBAEIyG,SAAS,KAAb;gBACI,KAAKzC,GAAL,CAAS/D,UAAT,MAAyBwG,SAAS,KAAKzC,GAAL,CAAS/E,eAAT,CAAlC,CAAJ,EAAkE;sBACxDuH,OAAOqC,aAAa,YAAb,GAA4B,WAAzC;qBACKnC,0BAAL,CAAgC1J,KAAhC,EAAuCwJ,IAAvC,EAA6CC,MAA7C;qBACK0B,WAAL;oBACI,CAAC,KAAKnE,GAAL,CAAS5E,gBAAT,CAAL,EAAiC;yBACxBkF,KAAL,CAAW,oBAAX;;qBAECoE,4BAAL,GAAoC,CAACG,UAAD,IAAe,CAAC,KAAKrD,MAAzD;qBACKmB,0BAAL,CAAgC3J,KAAhC,EAAuC,KAAKV,KAA5C,EAAmDkK,IAAnD,EAAyDC,MAAzD;uBACO,IAAP;;iBAECrJ,MAAL,CAAYJ,KAAZ;;eAGG,KAAP;;;YAKkB8L,8EAAU;;cACtB9L,QAAQ,KAAKV,KAAnB;YACI8J,MAAM,CAAV;YACIC,MAAM,CAAV;YACIC,SAAS,KAAb;YAEI,KAAKtC,GAAL,CAAS3E,QAAT,CAAJ,EAAwB;kBACd,CAAN;kBACM0J,OAAOC,iBAAb;SAFJ,MAGO,IAAI,KAAKhF,GAAL,CAAS1E,QAAT,CAAJ,EAAwB;kBACrB,CAAN;kBACMyJ,OAAOC,iBAAb;SAFG,MAGA,IAAI,KAAKhF,GAAL,CAAS7D,YAAT,CAAJ,EAA4B;kBACzB,CAAN;kBACM,CAAN;SAFG,MAGA,IAAI,KAAK8I,mBAAL,CAAyBH,OAAzB,CAAJ,EAAuC;kBACpC,KAAKI,aAAX;kBACM,KAAKC,aAAX;SAFG,MAGA;mBACI,KAAP;;iBAEK,CAAC,KAAKnF,GAAL,CAAS7D,YAAT,CAAV;YAEI,CAAC2I,OAAL,EAAc;iBACLvC,YAAL,CAAkBvJ,KAAlB,EAAyB,KAAKV,KAA9B,EAAqC8J,GAArC,EAA0CC,GAA1C,EAA+CC,MAA/C;;eAEG,IAAP;;wBAGwBwC,OAApB;cACE9L,QAAQ,KAAKV,KAAnB;YACI,KAAK0H,GAAL,CAAS3B,gBAAT,CAAJ,EAAgC;iBACvB6G,aAAL,GAAqB,CAArB;iBACKC,aAAL,GAAqBJ,OAAOC,iBAA5B;gBACI,KAAKI,gBAAL,EAAJ,EAA6B;qBACpBF,aAAL,GAAqB,KAAKC,aAAL,GAAqB,KAAKE,aAA/C;oBACI,KAAKrF,GAAL,CAASzE,KAAT,CAAJ,EAAqB;yBACZ4J,aAAL,GAAqB,KAAKC,gBAAL,KACf,KAAKC,aADU,GAEfN,OAAOC,iBAFb;;oBAIA,KAAKhF,GAAL,CAASzB,iBAAT,CAAJ,EAAiC;wBACzB,CAACuG,OAAD,IAAY,KAAKK,aAAL,GAAqB,KAAKD,aAA1C,EAAyD;6BAChD5E,KAAL,CAAW,uCAAX;;2BAEG,IAAP;;;gBAGJ,CAACwE,OAAD,IAAY,KAAKtD,MAArB,EAA6B;qBACpBlB,KAAL,CAAW,uBAAX;;iBAEClH,MAAL,CAAYJ,KAAZ;;eAEG,KAAP;;;eAMI,KAAKsM,mBAAL,MACA,KAAKC,MAAL,EADA,IAEA,KAAKC,2BAAL,EAFA,IAGA,KAAKC,iBAAL,EAHA,IAIA,KAAKC,mBAAL,EAJA,IAKA,KAAKC,iBAAL,EANJ;;;YAWI,KAAK3F,GAAL,CAASvE,QAAT,CAAJ,EAAwB;iBACfqH,iBAAL,CAAuB,KAAKxK,KAAL,GAAa,CAApC,EAAuC,KAAKA,KAA5C,EAAmD,KAAnD;mBACO,IAAP;;eAEG,KAAP;;;cAIMU,QAAQ,KAAKV,KAAnB;YACI,KAAK0H,GAAL,CAAS9B,cAAT,CAAJ,EAA8B;gBACtB,KAAK0H,aAAL,EAAJ,EAA0B;uBACf,IAAP;;iBAECxM,MAAL,CAAYJ,KAAZ;;eAEG,KAAP;;;cAIMA,QAAQ,KAAKV,KAAnB;YACI,KAAKoL,IAAL,CAAUvI,eAAV,EAA2BgB,YAA3B,EAAyCJ,KAAzC,CAAJ,EAAqD;iBAC5CiG,YAAL,CAAkBhJ,KAAlB;iBACKmL,WAAL;gBACI,CAAC,KAAKnE,GAAL,CAAS5E,gBAAT,CAAL,EAAiC;qBACxBkF,KAAL,CAAW,oBAAX;;iBAEC2B,YAAL,CAAkBjJ,KAAlB,EAAyB,KAAKV,KAA9B;mBACO,IAAP;;eAEG,KAAP;;;cAIMU,QAAQ,KAAKV,KAAnB;YACI,KAAK0H,GAAL,CAAS7E,eAAT,CAAJ,EAA+B;iBACtB0K,aAAL,GAAqB,EAArB;gBACI,KAAK1E,WAAL,IAAoB,IAAxB,EAA8B;qBACrB2E,cAAL;aADJ,MAEO,IAAI,KAAKtN,gBAAL,KAA0B2D,YAA9B,EAA4C;qBAC1CmE,KAAL,CAAW,eAAX;;kBAEElB,OAAO,KAAKyG,aAAL,IAAsB,IAAnC;iBAEK3D,qBAAL,CAA2BlJ,KAA3B,EAAkCoG,IAAlC;iBACK+E,WAAL;gBACI,CAAC,KAAKnE,GAAL,CAAS5E,gBAAT,CAAL,EAAiC;qBACxBkF,KAAL,CAAW,oBAAX;;iBAEC6B,qBAAL,CAA2BnJ,KAA3B,EAAkC,KAAKV,KAAvC,EAA8C8G,IAA9C;mBAEO,IAAP;;eAEG,KAAP;;;eAMI,KAAKmG,MAAL,MACA,KAAKC,2BAAL,EADA,IAEA,KAAKC,iBAAL,EAFA,IAGA,KAAKC,mBAAL,EAHA,IAIA,KAAKC,iBAAL,EAJA,IAKA,KAAKI,0BAAL,EALA,IAMA,KAAKC,2BAAL,EAPJ;;;YAaI,KAAKf,mBAAL,CAAyB,IAAzB,CAAJ,EAAoC;iBAC3B3E,KAAL,CAAW,mBAAX;;eAEG,KAAP;;;YAKI2F,kBAAkB,KAAKzN,gBAAvB,CAAJ,EAA8C;iBACrC6M,aAAL,GAAqB,KAAK7M,gBAA1B;iBACKoB,OAAL;mBACO,IAAP;;eAEG,KAAP;;;cAKMZ,QAAQ,KAAKV,KAAnB;cACMqB,KAAK,KAAKnB,gBAAhB;YACImB,OAAO,CAAC,CAAR,IAAa,CAACsM,kBAAkBtM,EAAlB,CAAlB,EAAyC;iBAChCC,OAAL;iBACKsJ,WAAL,CAAiBlK,KAAjB,EAAwB,KAAKV,KAA7B,EAAoCqB,EAApC;mBACO,IAAP;;eAEG,KAAP;;;cAKMX,QAAQ,KAAKV,KAAnB;cACMqB,KAAK,KAAKnB,gBAAhB;YAEImB,OAAO,CAAC,CAAR,IACAA,OAAOyE,gBADP,IAEAzE,OAAOuB,UAFP,IAGAvB,OAAO8B,QAHP,IAIA9B,OAAO0B,QAJP,IAKA1B,OAAO2B,QALP,IAMA3B,OAAOwC,YANP,IAOAxC,OAAOwB,eAPP,IAQAxB,OAAOyB,gBARP,IASAzB,OAAOsE,iBATP,IAUAtE,OAAO2E,YAXX,EAYE;iBACO1E,OAAL;iBACKsJ,WAAL,CAAiBlK,KAAjB,EAAwB,KAAKV,KAA7B,EAAoCqB,EAApC;mBACO,IAAP;;eAEG,KAAP;;;aAOKkM,aAAL,GAAqB,EAArB;YACI,KAAK7F,GAAL,CAAS7D,YAAT,CAAJ,EAA4B;gBACpB,KAAK+J,YAAL,EAAJ,EAAyB;oBACjB,CAAC,KAAK5E,WAAL,CAAiB/B,GAAjB,CAAqB,KAAKsG,aAA1B,CAAL,EAA+C;yBACtCvE,WAAL,CAAiBJ,GAAjB,CAAqB,KAAK2E,aAA1B;;;qBAGCvF,KAAL,CAAW,8BAAX;;iBAECA,KAAL,CAAW,eAAX;;;;aAOCuF,aAAL,GAAqB,EAArB;YACI,KAAK7F,GAAL,CAAShE,YAAT,CAAJ,EAA4B;gBACpB,KAAKmK,uBAAL,MAAkC,KAAKnG,GAAL,CAAS9D,eAAT,CAAtC,EAAiE;uBACtD,IAAP;;iBAECoE,KAAL,CAAW,4BAAX;;eAEG,KAAP;;;aAOKuF,aAAL,GAAqB,EAArB;YACI,KAAKO,wBAAL,EAAJ,EAAqC;iBAC5BP,aAAL,IAAsBtF,OAAOC,aAAP,CAAqB,KAAK6E,aAA1B,CAAtB;mBACO,KAAKgB,uBAAL,EAAP,EAAuC;qBAC9BR,aAAL,IAAsBtF,OAAOC,aAAP,CAAqB,KAAK6E,aAA1B,CAAtB;;mBAEG,IAAP;;eAEG,KAAP;;;cASMrM,QAAQ,KAAKV,KAAnB;YACIqB,KAAK,KAAKnB,gBAAd;aACKoB,OAAL;YAEID,OAAOuE,cAAP,IAAyB,KAAKoI,8BAAL,EAA7B,EAAoE;iBAC3D,KAAKjB,aAAV;;YAEAkB,wBAAwB5M,EAAxB,CAAJ,EAAiC;iBACxB0L,aAAL,GAAqB1L,EAArB;mBACO,IAAP;;YAGA,KAAKrB,KAAL,KAAeU,KAAnB,EAA0B;iBACjBI,MAAL,CAAYJ,KAAZ;;eAEG,KAAP;;;cAWMA,QAAQ,KAAKV,KAAnB;YACIqB,KAAK,KAAKnB,gBAAd;aACKoB,OAAL;YAEID,OAAOuE,cAAP,IAAyB,KAAKoI,8BAAL,EAA7B,EAAoE;iBAC3D,KAAKjB,aAAV;;YAEAmB,uBAAuB7M,EAAvB,CAAJ,EAAgC;iBACvB0L,aAAL,GAAqB1L,EAArB;mBACO,IAAP;;YAGA,KAAKrB,KAAL,KAAeU,KAAnB,EAA0B;iBACjBI,MAAL,CAAYJ,KAAZ;;eAEG,KAAP;;;YAMI,KAAKyN,gBAAL,MACA,KAAKC,uBAAL,EADA,IAEA,KAAKC,kBAAL,EAFA,IAGC,KAAK9G,MAAL,IAAe,KAAK+G,aAAL,EAJpB,EAKE;mBACS,IAAP;;YAEA,KAAKpF,MAAL,IAAe,KAAK5B,MAAxB,EAAgC;iBACvBU,KAAL,CAAW,gBAAX;;eAEG,KAAP;;;cAIMtH,QAAQ,KAAKV,KAAnB;YACI,KAAKuO,gBAAL,EAAJ,EAA6B;kBACnBC,IAAI,KAAKzB,aAAf;gBACIyB,KAAK,KAAK/C,mBAAd,EAAmC;qBAC1BX,eAAL,CAAqBpK,QAAQ,CAA7B,EAAgC,KAAKV,KAArC,EAA4CwO,CAA5C;uBACO,IAAP;;gBAEA,KAAKtF,MAAT,EAAiB;qBACRlB,KAAL,CAAW,gBAAX;;iBAEClH,MAAL,CAAYJ,KAAZ;;eAEG,KAAP;;;cAIMA,QAAQ,KAAKV,KAAnB;YACI,KAAK0H,GAAL,CAAS5C,iBAAT,CAAJ,EAAiC;gBACzB,KAAK8I,YAAL,EAAJ,EAAyB;sBACfa,YAAY,KAAKlB,aAAvB;qBACK3B,mBAAL,CAAyBhD,GAAzB,CAA6B6F,SAA7B;qBACK3D,eAAL,CAAqBpK,QAAQ,CAA7B,EAAgC,KAAKV,KAArC,EAA4CyO,SAA5C;uBACO,IAAP;;iBAECzG,KAAL,CAAW,yBAAX;;eAEG,KAAP;;;cAKMtH,QAAQ,KAAKV,KAAnB;YAEI,KAAK0O,gBAAL,MACA,KAAKC,iBAAL,EADA,IAEA,KAAKC,OAAL,EAFA,IAGA,KAAKC,oBAAL,EAHA,IAIA,KAAKb,8BAAL,EAJA,IAKC,CAAC,KAAK9E,MAAN,IAAgB,KAAK4F,4BAAL,EALjB,IAMA,KAAKC,iBAAL,EAPJ,EAQE;iBACOnE,WAAL,CAAiBlK,QAAQ,CAAzB,EAA4B,KAAKV,KAAjC,EAAwC,KAAK+M,aAA7C;mBACO,IAAP;;eAEG,KAAP;;;cAIMrM,QAAQ,KAAKV,KAAnB;YACI,KAAK0H,GAAL,CAASjD,iBAAT,CAAJ,EAAiC;gBACzB,KAAKuK,gBAAL,EAAJ,EAA6B;uBAClB,IAAP;;iBAEClO,MAAL,CAAYJ,KAAZ;;eAEG,KAAP;;;YAKI,KAAKR,gBAAL,KAA0BmD,SAA1B,IACA,CAACwD,eAAe,KAAKzG,aAApB,CAFL,EAGE;iBACO2M,aAAL,GAAqB,CAArB;iBACKzL,OAAL;mBACO,IAAP;;eAEG,KAAP;;;YAKI,KAAKoG,GAAL,CAAStC,iBAAT,CAAJ,EAAiC;iBACxB2H,aAAL,GAAqBzK,mBAArB;mBACO,IAAP;;YAEA,KAAKoF,GAAL,CAAS1C,iBAAT,CAAJ,EAAiC;iBACxB+H,aAAL,GAAqBxK,QAArB;mBACO,IAAP;;YAEA,KAAKmF,GAAL,CAASpC,iBAAT,CAAJ,EAAiC;iBACxByH,aAAL,GAAqBvK,cAArB;mBACO,IAAP;;YAEA,KAAKkF,GAAL,CAAS/C,iBAAT,CAAJ,EAAiC;iBACxBoI,aAAL,GAAqBtK,QAArB;mBACO,IAAP;;YAEA,KAAKiF,GAAL,CAASxC,iBAAT,CAAJ,EAAiC;iBACxB6H,aAAL,GAAqBrK,cAArB;mBACO,IAAP;;eAEG,KAAP;;;cAKMrB,KAAK,KAAKnB,gBAAhB;YACIyG,cAActF,EAAd,CAAJ,EAAuB;iBACdC,OAAL;iBACKyL,aAAL,GAAqB1L,KAAK,IAA1B;mBACO,IAAP;;eAEG,KAAP;;;cAKMX,QAAQ,KAAKV,KAAnB;YAEI,KAAK0H,GAAL,CAASrC,iBAAT,CAAJ,EAAiC;gBACzB,KAAK4J,iBAAL,CAAuB,CAAvB,CAAJ,EAA+B;sBACrBC,OAAO,KAAKnC,aAAlB;oBACI,KAAKzF,MAAL,IAAe4H,QAAQ,MAAvB,IAAiCA,QAAQ,MAA7C,EAAqD;0BAC3CC,mBAAmB,KAAKnP,KAA9B;wBAEI,KAAK0H,GAAL,CAAS9B,cAAT,KACA,KAAK8B,GAAL,CAASrC,iBAAT,CADA,IAEA,KAAK4J,iBAAL,CAAuB,CAAvB,CAHJ,EAIE;8BACQG,QAAQ,KAAKrC,aAAnB;4BACIqC,SAAS,MAAT,IAAmBA,SAAS,MAAhC,EAAwC;iCAC/BrC,aAAL,GACI,CAACmC,OAAO,MAAR,IAAkB,KAAlB,IACCE,QAAQ,MADT,IAEA,OAHJ;mCAIO,IAAP;;;yBAGHtO,MAAL,CAAYqO,gBAAZ;yBACKpC,aAAL,GAAqBmC,IAArB;;uBAEG,IAAP;;gBAGA,KAAK5H,MAAL,IACA,KAAKI,GAAL,CAAS3B,gBAAT,CADA,IAEA,KAAKsJ,YAAL,EAFA,IAGA,KAAK3H,GAAL,CAASzB,iBAAT,CAHA,IAIAqJ,eAAe,KAAKvC,aAApB,CALJ,EAME;uBACS,IAAP;;gBAEA,KAAK7D,MAAL,IAAe,KAAK5B,MAAxB,EAAgC;qBACvBU,KAAL,CAAW,wBAAX;;iBAEClH,MAAL,CAAYJ,KAAZ;;eAGG,KAAP;;;YAKI,KAAK4G,MAAT,EAAiB;gBACT,KAAKiI,kBAAL,EAAJ,EAA+B;uBACpB,IAAP;;gBAEA,KAAK7H,GAAL,CAAStE,OAAT,CAAJ,EAAuB;qBACd2J,aAAL,GAAqB3J,OAArB;uBACO,IAAP;;mBAEG,KAAP;;YAGA,KAAKoM,qBAAL,CAA2B,KAAKtP,gBAAhC,CAAJ,EAAuD;iBAC9C6M,aAAL,GAAqB,KAAK7M,gBAA1B;iBACKoB,OAAL;mBACO,IAAP;;eAGG,KAAP;;0BAE0BD,EAAtB;YACAA,OAAO,CAAC,CAAZ,EAAe;mBACJ,KAAP;;YAEA,KAAK6H,MAAT,EAAiB;mBACN,CAACxC,aAAarF,EAAb,CAAR;;eAGAA,OAAOoD,iBAAP,KACC,CAAC,KAAK8C,MAAN,IAAgBlG,OAAOyD,iBADxB,CADJ;;;aAQKiI,aAAL,GAAqB,CAArB;YACI1L,KAAK,KAAKnB,gBAAd;YACImB,MAAMiC,QAAN,IAAkBjC,MAAMmC,SAA5B,EAAuC;eAChC;qBACMuJ,aAAL,GAAqB,KAAK,KAAKA,aAAV,IAA2B1L,KAAKgC,SAAhC,CAArB;qBACK/B,OAAL;aAFJ,QAII,CAACD,KAAK,KAAKnB,gBAAX,KAAgCmD,SAAhC,IACAhC,MAAMmC,SALV;mBAOO,IAAP;;eAEG,KAAP;;;cAKM9C,QAAQ,KAAKV,KAAnB;YAEI,KAAK0H,GAAL,CAAShD,iBAAT,CAAJ,EAAiC;iBACxBqI,aAAL,GAAqB,CAAC,CAAtB;iBACKtC,oBAAL,CAA0B/J,QAAQ,CAAlC,EAAqC,KAAKV,KAA1C,EAAiD,OAAjD,EAA0D,KAA1D;mBACO,IAAP;;YAEA,KAAK0H,GAAL,CAAS1D,mBAAT,CAAJ,EAAmC;iBAC1B+I,aAAL,GAAqB,CAAC,CAAtB;iBACKtC,oBAAL,CAA0B/J,QAAQ,CAAlC,EAAqC,KAAKV,KAA1C,EAAiD,OAAjD,EAA0D,IAA1D;mBACO,IAAP;;YAEA,KAAK0H,GAAL,CAASvC,iBAAT,CAAJ,EAAiC;iBACxB4H,aAAL,GAAqB,CAAC,CAAtB;iBACKtC,oBAAL,CAA0B/J,QAAQ,CAAlC,EAAqC,KAAKV,KAA1C,EAAiD,OAAjD,EAA0D,KAA1D;mBACO,IAAP;;YAEA,KAAK0H,GAAL,CAASvD,mBAAT,CAAJ,EAAmC;iBAC1B4I,aAAL,GAAqB,CAAC,CAAtB;iBACKtC,oBAAL,CAA0B/J,QAAQ,CAAlC,EAAqC,KAAKV,KAA1C,EAAiD,OAAjD,EAA0D,IAA1D;mBACO,IAAP;;YAEA,KAAK0H,GAAL,CAASnC,iBAAT,CAAJ,EAAiC;iBACxBwH,aAAL,GAAqB,CAAC,CAAtB;iBACKtC,oBAAL,CAA0B/J,QAAQ,CAAlC,EAAqC,KAAKV,KAA1C,EAAiD,MAAjD,EAAyD,KAAzD;mBACO,IAAP;;YAEA,KAAK0H,GAAL,CAAStD,mBAAT,CAAJ,EAAmC;iBAC1B2I,aAAL,GAAqB,CAAC,CAAtB;iBACKtC,oBAAL,CAA0B/J,QAAQ,CAAlC,EAAqC,KAAKV,KAA1C,EAAiD,MAAjD,EAAyD,IAAzD;mBACO,IAAP;;YAGAmK,SAAS,KAAb;YAEI,KAAK7C,MAAL,IACA,KAAKuB,WAAL,IAAoB,IADpB,KAEC,KAAKnB,GAAL,CAASzC,iBAAT,MACIkF,SAAS,KAAKzC,GAAL,CAASxD,mBAAT,CADb,CAFD,CADJ,EAKE;iBACO6I,aAAL,GAAqB,CAAC,CAAtB;gBAEI,KAAKrF,GAAL,CAAS3B,gBAAT,KACA,KAAK0J,iCAAL,EADA,IAEA,KAAK/H,GAAL,CAASzB,iBAAT,CAHJ,EAIE;qBACO0E,6BAAL,CACIjK,QAAQ,CADZ,EAEI,KAAKV,KAFT,EAGI,UAHJ,EAII,KAAK0P,aAJT,EAKI,KAAKC,aAAL,IAAsB,IAL1B,EAMIxF,MANJ;uBAQO,IAAP;;iBAECnC,KAAL,CAAW,uBAAX;;eAGG,KAAP;;;cAOMtH,QAAQ,KAAKV,KAAnB;YAGI,KAAK4P,sBAAL,MAAiC,KAAKlI,GAAL,CAAS/D,UAAT,CAArC,EAA2D;iBAClD+L,aAAL,GAAqB,KAAKnC,aAA1B;gBACI,KAAKsC,uBAAL,EAAJ,EAAoC;qBAC3BF,aAAL,GAAqB,KAAKpC,aAA1B;oBAEIuC,uBACI,KAAKJ,aADT,EAEI,KAAKC,aAFT,CADJ,EAKE;2BACS,IAAP;;qBAEC3H,KAAL,CAAW,uBAAX;;;aAGHlH,MAAL,CAAYJ,KAAZ;YAGI,KAAKqP,iCAAL,EAAJ,EAA8C;kBACpCC,cAAc,KAAKzC,aAAzB;gBACIuC,uBAAuB,kBAAvB,EAA2CE,WAA3C,CAAJ,EAA6D;qBACpDN,aAAL,GAAqB,kBAArB;qBACKC,aAAL,GAAqBK,WAArB;uBACO,IAAP;;gBAEAC,2BAA2BD,WAA3B,CAAJ,EAA6C;qBACpCN,aAAL,GAAqBM,WAArB;qBACKL,aAAL,GAAqB,EAArB;uBACO,IAAP;;iBAEC3H,KAAL,CAAW,uBAAX;;eAEG,KAAP;;;aAMKuF,aAAL,GAAqB,EAArB;eACO3G,+BAA+B,KAAK1G,gBAApC,CAAP,EAA8D;iBACrDqN,aAAL,IAAsBtF,OAAOC,aAAP,CAAqB,KAAKhI,gBAA1B,CAAtB;iBACKoB,OAAL;;eAEG,KAAKiM,aAAL,KAAuB,EAA9B;;;aAMKA,aAAL,GAAqB,EAArB;eACO2C,gCAAgC,KAAKhQ,gBAArC,CAAP,EAA+D;iBACtDqN,aAAL,IAAsBtF,OAAOC,aAAP,CAAqB,KAAKhI,gBAA1B,CAAtB;iBACKoB,OAAL;;eAEG,KAAKiM,aAAL,KAAuB,EAA9B;;;eAMO,KAAKsC,uBAAL,EAAP;;;cAKMnP,QAAQ,KAAKV,KAAnB;YACI,KAAK0H,GAAL,CAAS/B,iBAAT,CAAJ,EAAiC;kBACvBwE,SAAS,KAAKzC,GAAL,CAAS5B,gBAAT,CAAf;iBACKiF,qBAAL,CAA2BrK,KAA3B,EAAkCyJ,MAAlC;iBACKgG,WAAL;gBACI,CAAC,KAAKzI,GAAL,CAAS7B,kBAAT,CAAL,EAAmC;qBAC1BmC,KAAL,CAAW,8BAAX;;iBAECgD,qBAAL,CAA2BtK,KAA3B,EAAkC,KAAKV,KAAvC,EAA8CmK,MAA9C;mBACO,IAAP;;eAEG,KAAP;;;YAOIzJ,QAAQ,KAAKV,KAAjB;eACO,KAAKoQ,YAAL,EAAP,EAA4B;kBAClBC,OAAO,KAAKtD,aAAlB;kBACMuD,cAAc,KAAKtQ,KAAzB;gBACI,KAAK0H,GAAL,CAASxE,WAAT,CAAJ,EAA2B;qBAClB0H,WAAL,CAAiB0F,WAAjB,EAA8B,KAAKtQ,KAAnC,EAA0CkD,WAA1C;oBAEI,KAAKkN,YAAL,EAAJ,EAAyB;0BACfG,QAAQ,KAAKxD,aAAnB;wBAEIsD,SAAS,CAAC,CAAV,IAAeE,UAAU,CAAC,CAA9B,EAAiC;4BACzB,KAAKrH,MAAT,EAAiB;iCACRlB,KAAL,CAAW,yBAAX;;qBAFR,MAIO,IAAIqI,OAAOE,KAAX,EAAkB;6BAChBvI,KAAL,CAAW,uCAAX;qBADG,MAEA;6BACEiD,qBAAL,CACIvK,KADJ,EAEI,KAAKV,KAFT,EAGIqQ,IAHJ,EAIIE,KAJJ;;;;oBAUJ,KAAKvQ,KAAb;;;;cAOEU,QAAQ,KAAKV,KAAnB;YAEI,KAAK0H,GAAL,CAAS9B,cAAT,CAAJ,EAA8B;gBACtB,KAAK4K,cAAL,EAAJ,EAA2B;uBAChB,IAAP;;gBAEA,KAAKlJ,MAAT,EAAiB;qBACRU,KAAL,CAAW,gBAAX;;iBAEClH,MAAL,CAAYJ,KAAZ;;cAGEW,KAAK,KAAKnB,gBAAhB;YACImB,OAAO,CAAC,CAAR,IAAaA,OAAOwE,kBAAxB,EAA4C;iBACnCvE,OAAL;iBACKyL,aAAL,GAAqB1L,EAArB;iBACKuJ,WAAL,CAAiBlK,KAAjB,EAAwB,KAAKV,KAA7B,EAAoCqB,EAApC;mBACO,IAAP;;eAGG,KAAP;;;cAKMX,QAAQ,KAAKV,KAAnB;YAEI,KAAK0H,GAAL,CAASlD,iBAAT,CAAJ,EAAiC;iBACxBuI,aAAL,GAAqB1K,SAArB;iBACKuI,WAAL,CAAiBlK,QAAQ,CAAzB,EAA4B,KAAKV,KAAjC,EAAwCqC,SAAxC;mBACO,IAAP;;YAGA,KAAKiF,MAAL,IAAe,KAAKI,GAAL,CAASxE,WAAT,CAAnB,EAA0C;iBACjC6J,aAAL,GAAqB7J,WAArB;iBACK0H,WAAL,CAAiBlK,QAAQ,CAAzB,EAA4B,KAAKV,KAAjC,EAAwCkD,WAAxC;mBACO,IAAP;;YAGA,CAAC,KAAKoE,MAAN,IAAgB,KAAKI,GAAL,CAASjD,iBAAT,CAApB,EAAiD;gBACzC,KAAKgM,qBAAL,EAAJ,EAAkC;qBACzB7F,WAAL,CAAiBlK,QAAQ,CAAzB,EAA4B,KAAKV,KAAjC,EAAwC,KAAK+M,aAA7C;uBACO,IAAP;;iBAECjM,MAAL,CAAYJ,KAAZ;;eAGG,KAAK0N,uBAAL,MAAkC,KAAKC,kBAAL,EAAzC;;;cAKMhN,KAAK,KAAKnB,gBAAhB;YACI2G,eAAexF,EAAf,KAAsBA,OAAOiD,OAAjC,EAA0C;iBACjChD,OAAL;iBACKyL,aAAL,GAAqB1L,KAAK,IAA1B;mBACO,IAAP;;eAEG,KAAP;;;cAKMX,QAAQ,KAAKV,KAAnB;YACI,KAAK0H,GAAL,CAASlC,iBAAT,CAAJ,EAAiC;gBACzB,KAAKyJ,iBAAL,CAAuB,CAAvB,CAAJ,EAA+B;uBACpB,IAAP;;gBAEA,KAAK3H,MAAT,EAAiB;qBACRU,KAAL,CAAW,gBAAX;;iBAEClH,MAAL,CAAYJ,KAAZ;;eAEG,KAAP;;;cAKMA,QAAQ,KAAKV,KAAnB;aAEK+M,aAAL,GAAqB,CAArB;eACOlG,eAAe,KAAK3G,gBAApB,CAAP,EAA8C;iBACrC6M,aAAL,GACI,KAAK,KAAKA,aAAV,GAA0B2D,WAAW,KAAKxQ,gBAAhB,CAD9B;iBAEKoB,OAAL;;eAGG,KAAKtB,KAAL,KAAeU,KAAtB;;;cAKMA,QAAQ,KAAKV,KAAnB;aACK+M,aAAL,GAAqB,CAArB;eACO4D,WAAW,KAAKzQ,gBAAhB,CAAP,EAA0C;iBACjC6M,aAAL,GACI,KAAK,KAAKA,aAAV,GAA0B2D,WAAW,KAAKxQ,gBAAhB,CAD9B;iBAEKoB,OAAL;;eAEG,KAAKtB,KAAL,KAAeU,KAAtB;;;YAMI,KAAKkQ,aAAL,EAAJ,EAA0B;kBAChBC,KAAK,KAAK9D,aAAhB;gBACI,KAAK6D,aAAL,EAAJ,EAA0B;sBAChBE,KAAK,KAAK/D,aAAhB;oBACI8D,MAAM,CAAN,IAAW,KAAKD,aAAL,EAAf,EAAqC;yBAC5B7D,aAAL,GAAqB8D,KAAK,EAAL,GAAUC,KAAK,CAAf,GAAmB,KAAK/D,aAA7C;iBADJ,MAEO;yBACEA,aAAL,GAAqB8D,KAAK,CAAL,GAASC,EAA9B;;aALR,MAOO;qBACE/D,aAAL,GAAqB8D,EAArB;;mBAEG,IAAP;;eAEG,KAAP;;;cAKMxP,KAAK,KAAKnB,gBAAhB;YACI6Q,aAAa1P,EAAb,CAAJ,EAAsB;iBACbC,OAAL;iBACKyL,aAAL,GAAqB1L,KAAKgC,SAA1B;mBACO,IAAP;;aAEC0J,aAAL,GAAqB,CAArB;eACO,KAAP;;sBAMsB3N,MAAlB;cACEsB,QAAQ,KAAKV,KAAnB;aACK+M,aAAL,GAAqB,CAArB;aACK,IAAItN,IAAI,CAAb,EAAgBA,IAAIL,MAApB,EAA4B,EAAEK,CAA9B,EAAiC;kBACvB4B,KAAK,KAAKnB,gBAAhB;gBACI,CAACyQ,WAAWtP,EAAX,CAAL,EAAqB;qBACZP,MAAL,CAAYJ,KAAZ;uBACO,KAAP;;iBAECqM,aAAL,GAAqB,KAAK,KAAKA,aAAV,GAA0B2D,WAAWrP,EAAX,CAA/C;iBACKC,OAAL;;eAEG,IAAP;;;;ACl0DR,MAAM0P,eAAe,EAArB;AACA,MAAMC,aAAa,EAAnB;AACA,MAAMC,sBAAsB,EAA5B;AAOA,8BAAA,CACIC,QADJ,EAEIC,MAFJ;SAIS,MAAMC,OAAX,IAAsBF,QAAtB,EAAgC;eACrBE,QAAQC,IAAR,KAAiB,aAAxB;gBACQF,MAAR,GAAiBA,MAAjB;;WAEGD,QAAP;;AAGJ,8BAAA,CACIC,MADJ,EAOIG,IAPJ;QAgBQH,OAAOE,IAAP,KAAgB,aAApB,EAAmC;aAC1BF,OAAOI,YAAZ,EAA2BC,IAA3B,CAAgCF,IAAhC;KADJ,MAEO;eACIJ,QAAP,CAAgBM,IAAhB,CAAqBF,IAArB;;;AAIR,yBAAA,CACIH,MADJ,EAEIG,IAFJ;QAIQH,OAAOE,IAAP,KAAgB,aAApB,EAAmC;aAC1BF,OAAOI,YAAZ,EAA2BC,IAA3B,CAAgCF,IAAhC;KADJ,MAEO,IAAIH,OAAOE,IAAP,KAAgB,gBAApB,EAAsC;eAClCH,QAAP,CAAgBM,IAAhB,CAAqBF,IAArB;KADG,MAEA;eACIJ,QAAP,CAAgBM,IAAhB,CAAqBF,IAArB;;;AAIR,uBAAA;gBAWgBpK,OAAZ;kBARQ,GAAwB6J,YAAxB;mBACA,GAAgBC,UAAhB;mCACA,GAAmC,EAAnC;4BACA,GAAmC,EAAnC;6BACA,GAAqC,EAArC;mBAER,GAAiB,EAAjB;aAGS/H,MAAL,GAAcC,QAAQhC,WAAWA,QAAQ+B,MAA3B,CAAd;aACKL,WAAL,GAAoB1B,WAAWA,QAAQ0B,WAApB,IAAoC,IAAvD;;QAGAE,OAAJ;YACQ,KAAK2I,KAAL,CAAWJ,IAAX,KAAoB,SAAxB,EAAmC;kBACzB,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;eAEG,KAAKwS,KAAZ;;QAGAC,KAAJ;YACQ,KAAKC,MAAL,CAAYN,IAAZ,KAAqB,OAAzB,EAAkC;kBACxB,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;eAEG,KAAK0S,MAAZ;;YAIAlR,KADJ,EAEIlB,GAFJ,EAGI6I,MAHJ,EAIIC,UAJJ,EAKIC,SALJ,EAMIE,OANJ,EAOID,MAPJ,EAQIE,MARJ;aAUSkJ,MAAL,GAAc;kBACJ,OADI;oBAEF,IAFE;iBAAA;eAAA;iBAKL,KAAK9R,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CALK;kBAAA;sBAAA;qBAAA;mBAAA;kBAAA;;SAAd;;mBAeWkB,KAAf;aACSgR,KAAL,GAAa;kBACH,SADG;oBAED,IAFC;iBAAA;iBAIJhR,KAJI;iBAKJ,EALI;sBAMC;SANd;aAQKoR,eAAL,CAAqB1S,MAArB,GAA8B,CAA9B;aACK2S,gBAAL,CAAsB3S,MAAtB,GAA+B,CAA/B;;mBAGWsB,KAAf,EAA8BlB,GAA9B;aACSkS,KAAL,CAAWlS,GAAX,GAAiBA,GAAjB;aACKkS,KAAL,CAAWM,GAAX,GAAiB,KAAKlS,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CAAjB;aAEK,MAAMyS,SAAX,IAAwB,KAAKH,eAA7B,EAA8C;kBACpCjH,MAAMoH,UAAUpH,GAAtB;kBACMqH,QACF,OAAOrH,GAAP,KAAe,QAAf,GACM,KAAKkH,gBAAL,CAAsBlH,MAAM,CAA5B,CADN,GAEM,KAAKkH,gBAAL,CAAsBI,IAAtB,CAA2BC,KAAKA,EAAEtL,IAAF,KAAW+D,GAA3C,CAHV;sBAIUwH,QAAV,GAAqBH,KAArB;kBACMI,UAAN,CAAiBb,IAAjB,CAAsBQ,SAAtB;;;uBAIWvR,KAAnB;aACS6R,sBAAL,CAA4Bd,IAA5B,CAAiC/Q,KAAjC;;uBAGeA,KAAnB,EAAkClB,GAAlC;aACS+S,sBAAL,CAA4BC,GAA5B;;uBAGe9R,KAAnB,EAAkCV,KAAlC;YACQA,UAAU,CAAd,EAAiB;;;cAIXyS,aAAa,KAAKf,KAAxB;YAEIe,WAAWnB,IAAX,KAAoB,aAApB,IACAmB,WAAWnB,IAAX,KAAoB,gBAFxB,EAGE;kBACQ,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;cAGEwT,WAAWC,KAAKF,WAAWtB,QAAhB,CAAjB;YACIuB,YAAY,IAAZ,IAAoBA,SAASpB,IAAT,KAAkB,aAA1C,EAAyD;iBAChDI,KAAL,GAAagB,QAAb;qBACSlB,YAAT,CAAsBC,IAAtB,CAA2B,EAA3B;SAFJ,MAGO;iBACEC,KAAL,GAAa;sBACH,aADG;wBAEDe,UAFC;uBAGFE,KAAK,KAAKJ,sBAAV,CAHE;qBAIJ7R,KAJI;qBAKJ,EALI;8BAMK;aANlB;kBAQMyQ,WAAWyB,sBACbH,WAAWtB,QADE,EAEb,KAAKO,KAFQ,CAAjB;iBAIKA,KAAL,CAAWF,YAAX,CAAwBC,IAAxB,CAA6BN,QAA7B,EAAuC,EAAvC;uBACWA,QAAX,GAAsB,CAAC,KAAKO,KAAN,CAAtB;;;uBAIWhR,KAAnB,EAAkClB,GAAlC,EAA+CQ,KAA/C;YACQA,UAAU,CAAd,EAAiB;;;aAGZ0R,KAAL,CAAWlS,GAAX,GAAiBA,GAAjB;aACKkS,KAAL,CAAWM,GAAX,GAAiB,KAAKlS,MAAL,CAAY+R,KAAZ,CAAkB,KAAKH,KAAL,CAAWhR,KAA7B,EAAoClB,GAApC,CAAjB;aACKkS,KAAL,GAAa,KAAKA,KAAL,CAAWN,MAAxB;;iBAGS1Q,KAAb;cACU+R,aAAa,KAAKf,KAAxB;YACIe,WAAWnB,IAAX,KAAoB,gBAAxB,EAA0C;kBAChC,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;aAGCwS,KAAL,GAAa;kBACH,OADG;oBAEDe,UAFC;iBAAA;iBAIJ/R,KAJI;iBAKJ,EALI;sBAMC;SANd;8BAQsB+R,UAAtB,EAAkC,KAAKf,KAAvC;;iBAGShR,KAAb,EAA4BlB,GAA5B;aACSkS,KAAL,CAAWlS,GAAX,GAAiBA,GAAjB;aACKkS,KAAL,CAAWM,GAAX,GAAiB,KAAKlS,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CAAjB;aACKkS,KAAL,GAAa,KAAKA,KAAL,CAAWN,MAAxB;;0BAGkB1Q,KAAtB,EAAqCoG,IAArC;cACU2L,aAAa,KAAKf,KAAxB;YACIe,WAAWnB,IAAX,KAAoB,gBAAxB,EAA0C;kBAChC,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;aAGCwS,KAAL,GAAa;kBACH,gBADG;oBAEDe,UAFC;iBAAA;iBAIJ/R,KAJI;iBAKJ,EALI;gBAAA;sBAOC,EAPD;wBAQG;SARhB;8BAUsB+R,UAAtB,EAAkC,KAAKf,KAAvC;aACKK,gBAAL,CAAsBN,IAAtB,CAA2B,KAAKC,KAAhC;;0BAIAhR,KADJ,EAEIlB,GAFJ,EAGIsH,IAHJ;aAKS4K,KAAL,CAAWlS,GAAX,GAAiBA,GAAjB;aACKkS,KAAL,CAAWM,GAAX,GAAiB,KAAKlS,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CAAjB;aACKkS,KAAL,GAAa,KAAKA,KAAL,CAAWN,MAAxB;;iBAIA1Q,KADJ,EAEIlB,GAFJ,EAGIsK,GAHJ,EAIIC,GAJJ,EAKIC,MALJ;cAOUyI,aAAa,KAAKf,KAAxB;YACIe,WAAWnB,IAAX,KAAoB,gBAAxB,EAA0C;kBAChC,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;cAIEiS,WACFsB,WAAWnB,IAAX,KAAoB,aAApB,GACMqB,KAAKF,WAAWjB,YAAhB,CADN,GAEMiB,WAAWtB,QAHrB;cAIMuB,WAAWvB,SAASqB,GAAT,EAAjB;cACMjB,OAAmB;kBACf,YADe;oBAEbkB,UAFa;iBAAA;eAAA;iBAKhB,KAAK3S,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CALgB;eAAA;eAAA;kBAAA;qBASZkT;SATb;iBAWSjB,IAAT,CAAcF,IAAd;iBACSH,MAAT,GAAkBG,IAAlB;;+BAIA7Q,KADJ,EAEIwJ,IAFJ,EAGIC,MAHJ;cAKUsI,aAAa,KAAKf,KAAxB;YACIe,WAAWnB,IAAX,KAAoB,gBAAxB,EAA0C;kBAChC,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;aAGCwS,KAAL,GAAa;kBACH,WADG;oBAEDe,UAFC;iBAAA;iBAIJ/R,KAJI;iBAKJ,EALI;gBAAA;kBAAA;sBAQC;SARd;8BAUsB+R,UAAtB,EAAkC,KAAKf,KAAvC;;+BAIAhR,KADJ,EAEIlB,GAFJ,EAGI0K,IAHJ,EAIIC,MAJJ;aAMSuH,KAAL,CAAWlS,GAAX,GAAiBA,GAAjB;aACKkS,KAAL,CAAWM,GAAX,GAAiB,KAAKlS,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CAAjB;aACKkS,KAAL,GAAa,KAAKA,KAAL,CAAWN,MAAxB;;oBAGY1Q,KAAhB,EAA+BlB,GAA/B,EAA4C0K,IAA5C;cACUuI,aAAa,KAAKf,KAAxB;YACIe,WAAWnB,IAAX,KAAoB,gBAAxB,EAA0C;kBAChC,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;8BAGkBuT,UAAtB,EAAkC;kBACxB,WADwB;oBAEtBA,UAFsB;iBAAA;eAAA;iBAKzB,KAAK3S,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CALyB;;SAAlC;;4BAWAkB,KADJ,EAEIlB,GAFJ,EAGI0K,IAHJ,EAIIC,MAJJ;cAMUsI,aAAa,KAAKf,KAAxB;YACIe,WAAWnB,IAAX,KAAoB,gBAAxB,EAA0C;kBAChC,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;8BAGkBuT,UAAtB,EAAkC;kBACxB,WADwB;oBAEtBA,UAFsB;iBAAA;eAAA;iBAKzB,KAAK3S,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CALyB;gBAAA;;SAAlC;;sBAWckB,KAAlB,EAAiClB,GAAjC,EAA8C0K,IAA9C;cACUuI,aAAa,KAAKf,KAAxB;YACIe,WAAWnB,IAAX,KAAoB,gBAAxB,EAA0C;kBAChC,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;8BAGkBuT,UAAtB,EAAkC;kBACxB,cADwB;oBAEtBA,UAFsB;iBAAA;eAAA;iBAKzB,KAAK3S,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CALyB;;SAAlC;;yBAWAkB,KADJ,EAEIlB,GAFJ,EAGI0K,IAHJ,EAIIC,MAJJ;yBAMqB,KAAKuH,KAAtB,EAA6B;kBACnB,cADmB;oBAEjB,KAAKA,KAFY;iBAAA;eAAA;iBAKpB,KAAK5R,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CALoB;gBAAA;;SAA7B;;kCAYAkB,KADJ,EAEIlB,GAFJ,EAGI0K,IAHJ,EAIIQ,GAJJ,EAKI3D,KALJ,EAMIoD,MANJ;yBAQqB,KAAKuH,KAAtB,EAA6B;kBACnB,cADmB;oBAEjB,KAAKA,KAFY;iBAAA;eAAA;iBAKpB,KAAK5R,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CALoB;gBAAA;eAAA;iBAAA;;SAA7B;;gBAaQkB,KAAZ,EAA2BlB,GAA3B,EAAwCuH,KAAxC;yBACqB,KAAK2K,KAAtB,EAA6B;kBACnB,WADmB;oBAEjB,KAAKA,KAFY;iBAAA;eAAA;iBAKpB,KAAK5R,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CALoB;;SAA7B;;oBAUYkB,KAAhB,EAA+BlB,GAA/B,EAA4CqL,GAA5C;cACU4H,aAAa,KAAKf,KAAxB;YACIe,WAAWnB,IAAX,KAAoB,gBAAxB,EAA0C;kBAChC,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;cAGEqS,OAAsB;kBAClB,eADkB;oBAEhBkB,UAFgB;iBAAA;eAAA;iBAKnB,KAAK3S,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CALmB;eAAA;sBAOd0R;SAPd;8BASsBuB,UAAtB,EAAkClB,IAAlC;aACKO,eAAL,CAAqBL,IAArB,CAA0BF,IAA1B;;0BAGkB7Q,KAAtB,EAAqCyJ,MAArC;cACUsI,aAAa,KAAKf,KAAxB;YACIe,WAAWnB,IAAX,KAAoB,gBAAxB,EAA0C;kBAChC,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;aAGCwS,KAAL,GAAa;kBACH,gBADG;oBAEDe,UAFC;iBAAA;iBAIJ/R,KAJI;iBAKJ,EALI;kBAAA;sBAOC;SAPd;8BASsB+R,UAAtB,EAAkC,KAAKf,KAAvC;;0BAGkBhR,KAAtB,EAAqClB,GAArC,EAAkD2K,MAAlD;aACSuH,KAAL,CAAWlS,GAAX,GAAiBA,GAAjB;aACKkS,KAAL,CAAWM,GAAX,GAAiB,KAAKlS,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CAAjB;aACKkS,KAAL,GAAa,KAAKA,KAAL,CAAWN,MAAxB;;0BAIA1Q,KADJ,EAEIlB,GAFJ,EAGIsK,GAHJ,EAIIC,GAJJ;cAMU0I,aAAa,KAAKf,KAAxB;YACIe,WAAWnB,IAAX,KAAoB,gBAAxB,EAA0C;kBAChC,IAAIpS,KAAJ,CAAU,cAAV,CAAN;;cAIEiS,WAAWsB,WAAWtB,QAA5B;cACM0B,YAAY1B,SAASqB,GAAT,EAAlB;iBACSA,GAAT;cACMM,WAAW3B,SAASqB,GAAT,EAAjB;cACMjB,OAA4B;kBACxB,qBADwB;oBAEtBkB,UAFsB;iBAAA;eAAA;iBAKzB,KAAK3S,MAAL,CAAY+R,KAAZ,CAAkBnR,KAAlB,EAAyBlB,GAAzB,CALyB;iBAMzBsT,QANyB;iBAOzBD;SAPT;eASOC,YAAY,IAAZ,IAAoBA,SAASxB,IAAT,KAAkB,WAA7C;eACOuB,aAAa,IAAb,IAAqBA,UAAUvB,IAAV,KAAmB,WAA/C;iBACSF,MAAT,GAAkBG,IAAlB;kBACUH,MAAV,GAAmBG,IAAnB;iBACSE,IAAT,CAAcF,IAAd;;;AAwBR;gBAQgBpK,OAAZ;aACS4L,MAAL,GAAc,IAAIC,iBAAJ,CAAsB7L,OAAtB,CAAd;aACK8L,UAAL,GAAkB,IAAIC,eAAJ,CAAoB,KAAKH,MAAzB,CAAlB;;iBAWAjT,MADJ;YAEIY,4EAAgB;YAChBlB,0EAAcM,OAAOV;;aAEhB2T,MAAL,CAAYjT,MAAZ,GAAqBA,MAArB;aACKmT,UAAL,CAAgBE,eAAhB,CAAgCrT,MAAhC,EAAwCY,KAAxC,EAA+ClB,GAA/C;cACMuJ,UAAU,KAAKgK,MAAL,CAAYhK,OAA5B;cACM4I,QAAQ,KAAKoB,MAAL,CAAYpB,KAA1B;cACMyB,UAAyB;kBACrB,eADqB;oBAEnB,IAFmB;iBAAA;eAAA;iBAKtBtT,MALsB;mBAAA;;SAA/B;gBASQsR,MAAR,GAAiBgC,OAAjB;cACMhC,MAAN,GAAegC,OAAf;eACOA,OAAP;;eAWAtT,MADJ;YAEIY,4EAAgB;YAChBlB,0EAAcM,OAAOV;;aAEhB2T,MAAL,CAAYjT,MAAZ,GAAqBA,MAArB;aACKmT,UAAL,CAAgBnL,aAAhB,CAA8BhI,MAA9B,EAAsCY,KAAtC,EAA6ClB,GAA7C;eACO,KAAKuT,MAAL,CAAYpB,KAAnB;;iBAYA7R,MADJ;YAEIY,4EAAgB;YAChBlB,0EAAcM,OAAOV;YACrBuB,4EAAiB;;aAEZoS,MAAL,CAAYjT,MAAZ,GAAqBA,MAArB;aACKmT,UAAL,CAAgBlL,eAAhB,CAAgCjI,MAAhC,EAAwCY,KAAxC,EAA+ClB,GAA/C,EAAoDmB,KAApD;eACO,KAAKoS,MAAL,CAAYhK,OAAnB;;;;4BC7lBJjJ,QACAqH;WAEO,IAAIkM,YAAJ,CAAiBlM,OAAjB,EAA0BmM,YAA1B,CAAuCxT,MAAvC,CAAP;;AAQJ,+BACIA,QACAqH;WAEO,IAAI+L,eAAJ,CAAoB/L,OAApB,EAA6BgM,eAA7B,CAA6CrT,MAA7C,CAAP;;;;;;;;;"} \ No newline at end of file diff --git a/node_modules/regexpp/index.mjs b/node_modules/regexpp/index.mjs deleted file mode 100644 index 7095305..0000000 --- a/node_modules/regexpp/index.mjs +++ /dev/null @@ -1,6785 +0,0 @@ -/*! @author Toru Nagashima */ - - -var ast = Object.freeze({ - -}); - -function assert(condition, message) { - if (!condition) { - throw new Error(message || "AssertionError"); - } -} -function last(xs) { - return xs.length === 0 ? undefined : xs[xs.length - 1]; -} - -const legacyImpl = { - at(s, end, i) { - return i < end ? s.charCodeAt(i) : -1; - }, - width(c) { - return 1; - }, -}; -const unicodeImpl = { - at(s, end, i) { - return i < end ? s.codePointAt(i) : -1; - }, - width(c) { - return c > 0xffff ? 2 : 1; - }, -}; -class Reader { - constructor() { - this._impl = legacyImpl; - this._s = ""; - this._i = 0; - this._end = 0; - this._cp1 = -1; - this._w1 = 1; - this._cp2 = -1; - this._w2 = 1; - this._cp3 = -1; - this._w3 = 1; - this._cp4 = -1; - } - get source() { - return this._s; - } - get index() { - return this._i; - } - get currentCodePoint() { - return this._cp1; - } - get nextCodePoint() { - return this._cp2; - } - get nextCodePoint2() { - return this._cp3; - } - get nextCodePoint3() { - return this._cp4; - } - reset(source, start, end, uFlag) { - this._impl = uFlag ? unicodeImpl : legacyImpl; - this._s = source; - this._end = end; - this.rewind(start); - } - rewind(index) { - const impl = this._impl; - this._i = index; - this._cp1 = impl.at(this._s, this._end, index); - this._w1 = impl.width(this._cp1); - this._cp2 = impl.at(this._s, this._end, index + this._w1); - this._w2 = impl.width(this._cp2); - this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2); - this._w3 = impl.width(this._cp3); - this._cp4 = impl.at(this._s, this._end, index + this._w1 + this._w2 + this._w3); - } - advance() { - if (this._cp1 !== -1) { - const impl = this._impl; - this._i += this._w1; - this._cp1 = this._cp2; - this._w1 = this._w2; - this._cp2 = this._cp3; - this._w2 = impl.width(this._cp2); - this._cp3 = this._cp4; - this._w3 = impl.width(this._cp3); - this._cp4 = impl.at(this._s, this._end, this._i + this._w1 + this._w2 + this._w3); - } - } - eat(cp) { - if (this._cp1 === cp) { - this.advance(); - return true; - } - return false; - } - eat2(cp1, cp2) { - if (this._cp1 === cp1 && this._cp2 === cp2) { - this.advance(); - this.advance(); - return true; - } - return false; - } - eat3(cp1, cp2, cp3) { - if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) { - this.advance(); - this.advance(); - this.advance(); - return true; - } - return false; - } -} - -class RegExpSyntaxError extends SyntaxError { - constructor(source, uFlag, index, message) { - if (source) { - if (source[0] !== "/") { - source = `/${source}/${uFlag ? "u" : ""}`; - } - source = `: ${source}`; - } - super(`Invalid regular expression${source}: ${message}`); - this.index = index; - } -} - -function isIdStart(cp) { - if (cp < 0x41) - return false; - if (cp < 0x5b) - return true; - if (cp < 0x61) - return false; - if (cp < 0x7b) - return true; - return isLargeIdStart(cp); -} -function isIdContinue(cp) { - if (cp < 0x30) - return false; - if (cp < 0x3a) - return true; - if (cp < 0x41) - return false; - if (cp < 0x5b) - return true; - if (cp === 0x5f) - return true; - if (cp < 0x61) - return false; - if (cp < 0x7b) - return true; - return isLargeIdStart(cp) || isLargeIdContinue(cp); -} -function isLargeIdStart(cp) { - if (cp < 0x303c) { - if (cp < 0xeaa) { - if (cp < 0xa2a) { - if (cp < 0x6d5) { - if (cp < 0x37a) { - if (cp < 0x294) { - if (cp < 0xf8) { - if (cp === 0xaa) - return true; - if (cp === 0xb5) - return true; - if (cp === 0xba) - return true; - if (cp < 0xc0) - return false; - if (cp < 0xd7) - return true; - if (cp < 0xd8) - return false; - if (cp < 0xf7) - return true; - return false; - } - if (cp < 0x1bb) - return true; - if (cp === 0x1bb) - return true; - if (cp < 0x1bc) - return false; - if (cp < 0x1c0) - return true; - if (cp < 0x1c0) - return false; - if (cp < 0x1c4) - return true; - if (cp < 0x1c4) - return false; - if (cp < 0x294) - return true; - return false; - } - if (cp < 0x2ec) { - if (cp === 0x294) - return true; - if (cp < 0x295) - return false; - if (cp < 0x2b0) - return true; - if (cp < 0x2b0) - return false; - if (cp < 0x2c2) - return true; - if (cp < 0x2c6) - return false; - if (cp < 0x2d2) - return true; - if (cp < 0x2e0) - return false; - if (cp < 0x2e5) - return true; - return false; - } - if (cp === 0x2ec) - return true; - if (cp === 0x2ee) - return true; - if (cp < 0x370) - return false; - if (cp < 0x374) - return true; - if (cp === 0x374) - return true; - if (cp < 0x376) - return false; - if (cp < 0x378) - return true; - return false; - } - if (cp < 0x531) { - if (cp < 0x38c) { - if (cp === 0x37a) - return true; - if (cp < 0x37b) - return false; - if (cp < 0x37e) - return true; - if (cp === 0x37f) - return true; - if (cp === 0x386) - return true; - if (cp < 0x388) - return false; - if (cp < 0x38b) - return true; - return false; - } - if (cp === 0x38c) - return true; - if (cp < 0x38e) - return false; - if (cp < 0x3a2) - return true; - if (cp < 0x3a3) - return false; - if (cp < 0x3f6) - return true; - if (cp < 0x3f7) - return false; - if (cp < 0x482) - return true; - if (cp < 0x48a) - return false; - if (cp < 0x530) - return true; - return false; - } - if (cp < 0x620) { - if (cp < 0x531) - return false; - if (cp < 0x557) - return true; - if (cp === 0x559) - return true; - if (cp < 0x561) - return false; - if (cp < 0x588) - return true; - if (cp < 0x5d0) - return false; - if (cp < 0x5eb) - return true; - if (cp < 0x5f0) - return false; - if (cp < 0x5f3) - return true; - return false; - } - if (cp < 0x640) - return true; - if (cp === 0x640) - return true; - if (cp < 0x641) - return false; - if (cp < 0x64b) - return true; - if (cp < 0x66e) - return false; - if (cp < 0x670) - return true; - if (cp < 0x671) - return false; - if (cp < 0x6d4) - return true; - return false; - } - if (cp < 0x904) { - if (cp < 0x7f4) { - if (cp < 0x710) { - if (cp === 0x6d5) - return true; - if (cp < 0x6e5) - return false; - if (cp < 0x6e7) - return true; - if (cp < 0x6ee) - return false; - if (cp < 0x6f0) - return true; - if (cp < 0x6fa) - return false; - if (cp < 0x6fd) - return true; - if (cp === 0x6ff) - return true; - return false; - } - if (cp === 0x710) - return true; - if (cp < 0x712) - return false; - if (cp < 0x730) - return true; - if (cp < 0x74d) - return false; - if (cp < 0x7a6) - return true; - if (cp === 0x7b1) - return true; - if (cp < 0x7ca) - return false; - if (cp < 0x7eb) - return true; - return false; - } - if (cp < 0x828) { - if (cp < 0x7f4) - return false; - if (cp < 0x7f6) - return true; - if (cp === 0x7fa) - return true; - if (cp < 0x800) - return false; - if (cp < 0x816) - return true; - if (cp === 0x81a) - return true; - if (cp === 0x824) - return true; - return false; - } - if (cp === 0x828) - return true; - if (cp < 0x840) - return false; - if (cp < 0x859) - return true; - if (cp < 0x860) - return false; - if (cp < 0x86b) - return true; - if (cp < 0x8a0) - return false; - if (cp < 0x8b5) - return true; - if (cp < 0x8b6) - return false; - if (cp < 0x8be) - return true; - return false; - } - if (cp < 0x9b2) { - if (cp < 0x972) { - if (cp < 0x904) - return false; - if (cp < 0x93a) - return true; - if (cp === 0x93d) - return true; - if (cp === 0x950) - return true; - if (cp < 0x958) - return false; - if (cp < 0x962) - return true; - if (cp === 0x971) - return true; - return false; - } - if (cp < 0x981) - return true; - if (cp < 0x985) - return false; - if (cp < 0x98d) - return true; - if (cp < 0x98f) - return false; - if (cp < 0x991) - return true; - if (cp < 0x993) - return false; - if (cp < 0x9a9) - return true; - if (cp < 0x9aa) - return false; - if (cp < 0x9b1) - return true; - return false; - } - if (cp < 0x9df) { - if (cp === 0x9b2) - return true; - if (cp < 0x9b6) - return false; - if (cp < 0x9ba) - return true; - if (cp === 0x9bd) - return true; - if (cp === 0x9ce) - return true; - if (cp < 0x9dc) - return false; - if (cp < 0x9de) - return true; - return false; - } - if (cp < 0x9e2) - return true; - if (cp < 0x9f0) - return false; - if (cp < 0x9f2) - return true; - if (cp === 0x9fc) - return true; - if (cp < 0xa05) - return false; - if (cp < 0xa0b) - return true; - if (cp < 0xa0f) - return false; - if (cp < 0xa11) - return true; - if (cp < 0xa13) - return false; - if (cp < 0xa29) - return true; - return false; - } - if (cp < 0xc2a) { - if (cp < 0xb2a) { - if (cp < 0xaaa) { - if (cp < 0xa5e) { - if (cp < 0xa2a) - return false; - if (cp < 0xa31) - return true; - if (cp < 0xa32) - return false; - if (cp < 0xa34) - return true; - if (cp < 0xa35) - return false; - if (cp < 0xa37) - return true; - if (cp < 0xa38) - return false; - if (cp < 0xa3a) - return true; - if (cp < 0xa59) - return false; - if (cp < 0xa5d) - return true; - return false; - } - if (cp === 0xa5e) - return true; - if (cp < 0xa72) - return false; - if (cp < 0xa75) - return true; - if (cp < 0xa85) - return false; - if (cp < 0xa8e) - return true; - if (cp < 0xa8f) - return false; - if (cp < 0xa92) - return true; - if (cp < 0xa93) - return false; - if (cp < 0xaa9) - return true; - return false; - } - if (cp < 0xae0) { - if (cp < 0xaaa) - return false; - if (cp < 0xab1) - return true; - if (cp < 0xab2) - return false; - if (cp < 0xab4) - return true; - if (cp < 0xab5) - return false; - if (cp < 0xaba) - return true; - if (cp === 0xabd) - return true; - if (cp === 0xad0) - return true; - return false; - } - if (cp < 0xae2) - return true; - if (cp === 0xaf9) - return true; - if (cp < 0xb05) - return false; - if (cp < 0xb0d) - return true; - if (cp < 0xb0f) - return false; - if (cp < 0xb11) - return true; - if (cp < 0xb13) - return false; - if (cp < 0xb29) - return true; - return false; - } - if (cp < 0xb92) { - if (cp < 0xb5f) { - if (cp < 0xb2a) - return false; - if (cp < 0xb31) - return true; - if (cp < 0xb32) - return false; - if (cp < 0xb34) - return true; - if (cp < 0xb35) - return false; - if (cp < 0xb3a) - return true; - if (cp === 0xb3d) - return true; - if (cp < 0xb5c) - return false; - if (cp < 0xb5e) - return true; - return false; - } - if (cp < 0xb62) - return true; - if (cp === 0xb71) - return true; - if (cp === 0xb83) - return true; - if (cp < 0xb85) - return false; - if (cp < 0xb8b) - return true; - if (cp < 0xb8e) - return false; - if (cp < 0xb91) - return true; - return false; - } - if (cp < 0xba8) { - if (cp < 0xb92) - return false; - if (cp < 0xb96) - return true; - if (cp < 0xb99) - return false; - if (cp < 0xb9b) - return true; - if (cp === 0xb9c) - return true; - if (cp < 0xb9e) - return false; - if (cp < 0xba0) - return true; - if (cp < 0xba3) - return false; - if (cp < 0xba5) - return true; - return false; - } - if (cp < 0xbab) - return true; - if (cp < 0xbae) - return false; - if (cp < 0xbba) - return true; - if (cp === 0xbd0) - return true; - if (cp < 0xc05) - return false; - if (cp < 0xc0d) - return true; - if (cp < 0xc0e) - return false; - if (cp < 0xc11) - return true; - if (cp < 0xc12) - return false; - if (cp < 0xc29) - return true; - return false; - } - if (cp < 0xd5f) { - if (cp < 0xcbd) { - if (cp < 0xc85) { - if (cp < 0xc2a) - return false; - if (cp < 0xc3a) - return true; - if (cp === 0xc3d) - return true; - if (cp < 0xc58) - return false; - if (cp < 0xc5b) - return true; - if (cp < 0xc60) - return false; - if (cp < 0xc62) - return true; - if (cp === 0xc80) - return true; - return false; - } - if (cp < 0xc8d) - return true; - if (cp < 0xc8e) - return false; - if (cp < 0xc91) - return true; - if (cp < 0xc92) - return false; - if (cp < 0xca9) - return true; - if (cp < 0xcaa) - return false; - if (cp < 0xcb4) - return true; - if (cp < 0xcb5) - return false; - if (cp < 0xcba) - return true; - return false; - } - if (cp < 0xd0e) { - if (cp === 0xcbd) - return true; - if (cp === 0xcde) - return true; - if (cp < 0xce0) - return false; - if (cp < 0xce2) - return true; - if (cp < 0xcf1) - return false; - if (cp < 0xcf3) - return true; - if (cp < 0xd05) - return false; - if (cp < 0xd0d) - return true; - return false; - } - if (cp < 0xd11) - return true; - if (cp < 0xd12) - return false; - if (cp < 0xd3b) - return true; - if (cp === 0xd3d) - return true; - if (cp === 0xd4e) - return true; - if (cp < 0xd54) - return false; - if (cp < 0xd57) - return true; - return false; - } - if (cp < 0xe46) { - if (cp < 0xdbd) { - if (cp < 0xd5f) - return false; - if (cp < 0xd62) - return true; - if (cp < 0xd7a) - return false; - if (cp < 0xd80) - return true; - if (cp < 0xd85) - return false; - if (cp < 0xd97) - return true; - if (cp < 0xd9a) - return false; - if (cp < 0xdb2) - return true; - if (cp < 0xdb3) - return false; - if (cp < 0xdbc) - return true; - return false; - } - if (cp === 0xdbd) - return true; - if (cp < 0xdc0) - return false; - if (cp < 0xdc7) - return true; - if (cp < 0xe01) - return false; - if (cp < 0xe31) - return true; - if (cp < 0xe32) - return false; - if (cp < 0xe34) - return true; - if (cp < 0xe40) - return false; - if (cp < 0xe46) - return true; - return false; - } - if (cp < 0xe8d) { - if (cp === 0xe46) - return true; - if (cp < 0xe81) - return false; - if (cp < 0xe83) - return true; - if (cp === 0xe84) - return true; - if (cp < 0xe87) - return false; - if (cp < 0xe89) - return true; - if (cp === 0xe8a) - return true; - return false; - } - if (cp === 0xe8d) - return true; - if (cp < 0xe94) - return false; - if (cp < 0xe98) - return true; - if (cp < 0xe99) - return false; - if (cp < 0xea0) - return true; - if (cp < 0xea1) - return false; - if (cp < 0xea4) - return true; - if (cp === 0xea5) - return true; - if (cp === 0xea7) - return true; - return false; - } - if (cp < 0x1c5a) { - if (cp < 0x1380) { - if (cp < 0x10a0) { - if (cp < 0xf88) { - if (cp < 0xec6) { - if (cp < 0xeaa) - return false; - if (cp < 0xeac) - return true; - if (cp < 0xead) - return false; - if (cp < 0xeb1) - return true; - if (cp < 0xeb2) - return false; - if (cp < 0xeb4) - return true; - if (cp === 0xebd) - return true; - if (cp < 0xec0) - return false; - if (cp < 0xec5) - return true; - return false; - } - if (cp === 0xec6) - return true; - if (cp < 0xedc) - return false; - if (cp < 0xee0) - return true; - if (cp === 0xf00) - return true; - if (cp < 0xf40) - return false; - if (cp < 0xf48) - return true; - if (cp < 0xf49) - return false; - if (cp < 0xf6d) - return true; - return false; - } - if (cp < 0x1061) { - if (cp < 0xf88) - return false; - if (cp < 0xf8d) - return true; - if (cp < 0x1000) - return false; - if (cp < 0x102b) - return true; - if (cp === 0x103f) - return true; - if (cp < 0x1050) - return false; - if (cp < 0x1056) - return true; - if (cp < 0x105a) - return false; - if (cp < 0x105e) - return true; - return false; - } - if (cp === 0x1061) - return true; - if (cp < 0x1065) - return false; - if (cp < 0x1067) - return true; - if (cp < 0x106e) - return false; - if (cp < 0x1071) - return true; - if (cp < 0x1075) - return false; - if (cp < 0x1082) - return true; - if (cp === 0x108e) - return true; - return false; - } - if (cp < 0x1260) { - if (cp < 0x10fd) { - if (cp < 0x10a0) - return false; - if (cp < 0x10c6) - return true; - if (cp === 0x10c7) - return true; - if (cp === 0x10cd) - return true; - if (cp < 0x10d0) - return false; - if (cp < 0x10fb) - return true; - if (cp === 0x10fc) - return true; - return false; - } - if (cp < 0x1249) - return true; - if (cp < 0x124a) - return false; - if (cp < 0x124e) - return true; - if (cp < 0x1250) - return false; - if (cp < 0x1257) - return true; - if (cp === 0x1258) - return true; - if (cp < 0x125a) - return false; - if (cp < 0x125e) - return true; - return false; - } - if (cp < 0x12c0) { - if (cp < 0x1260) - return false; - if (cp < 0x1289) - return true; - if (cp < 0x128a) - return false; - if (cp < 0x128e) - return true; - if (cp < 0x1290) - return false; - if (cp < 0x12b1) - return true; - if (cp < 0x12b2) - return false; - if (cp < 0x12b6) - return true; - if (cp < 0x12b8) - return false; - if (cp < 0x12bf) - return true; - return false; - } - if (cp === 0x12c0) - return true; - if (cp < 0x12c2) - return false; - if (cp < 0x12c6) - return true; - if (cp < 0x12c8) - return false; - if (cp < 0x12d7) - return true; - if (cp < 0x12d8) - return false; - if (cp < 0x1311) - return true; - if (cp < 0x1312) - return false; - if (cp < 0x1316) - return true; - if (cp < 0x1318) - return false; - if (cp < 0x135b) - return true; - return false; - } - if (cp < 0x1844) { - if (cp < 0x170e) { - if (cp < 0x1681) { - if (cp < 0x1380) - return false; - if (cp < 0x1390) - return true; - if (cp < 0x13a0) - return false; - if (cp < 0x13f6) - return true; - if (cp < 0x13f8) - return false; - if (cp < 0x13fe) - return true; - if (cp < 0x1401) - return false; - if (cp < 0x166d) - return true; - if (cp < 0x166f) - return false; - if (cp < 0x1680) - return true; - return false; - } - if (cp < 0x169b) - return true; - if (cp < 0x16a0) - return false; - if (cp < 0x16eb) - return true; - if (cp < 0x16ee) - return false; - if (cp < 0x16f1) - return true; - if (cp < 0x16f1) - return false; - if (cp < 0x16f9) - return true; - if (cp < 0x1700) - return false; - if (cp < 0x170d) - return true; - return false; - } - if (cp < 0x1780) { - if (cp < 0x170e) - return false; - if (cp < 0x1712) - return true; - if (cp < 0x1720) - return false; - if (cp < 0x1732) - return true; - if (cp < 0x1740) - return false; - if (cp < 0x1752) - return true; - if (cp < 0x1760) - return false; - if (cp < 0x176d) - return true; - if (cp < 0x176e) - return false; - if (cp < 0x1771) - return true; - return false; - } - if (cp < 0x17b4) - return true; - if (cp === 0x17d7) - return true; - if (cp === 0x17dc) - return true; - if (cp < 0x1820) - return false; - if (cp < 0x1843) - return true; - if (cp === 0x1843) - return true; - return false; - } - if (cp < 0x19b0) { - if (cp < 0x18b0) { - if (cp < 0x1844) - return false; - if (cp < 0x1878) - return true; - if (cp < 0x1880) - return false; - if (cp < 0x1885) - return true; - if (cp < 0x1885) - return false; - if (cp < 0x1887) - return true; - if (cp < 0x1887) - return false; - if (cp < 0x18a9) - return true; - if (cp === 0x18aa) - return true; - return false; - } - if (cp < 0x18f6) - return true; - if (cp < 0x1900) - return false; - if (cp < 0x191f) - return true; - if (cp < 0x1950) - return false; - if (cp < 0x196e) - return true; - if (cp < 0x1970) - return false; - if (cp < 0x1975) - return true; - if (cp < 0x1980) - return false; - if (cp < 0x19ac) - return true; - return false; - } - if (cp < 0x1b45) { - if (cp < 0x19b0) - return false; - if (cp < 0x19ca) - return true; - if (cp < 0x1a00) - return false; - if (cp < 0x1a17) - return true; - if (cp < 0x1a20) - return false; - if (cp < 0x1a55) - return true; - if (cp === 0x1aa7) - return true; - if (cp < 0x1b05) - return false; - if (cp < 0x1b34) - return true; - return false; - } - if (cp < 0x1b4c) - return true; - if (cp < 0x1b83) - return false; - if (cp < 0x1ba1) - return true; - if (cp < 0x1bae) - return false; - if (cp < 0x1bb0) - return true; - if (cp < 0x1bba) - return false; - if (cp < 0x1be6) - return true; - if (cp < 0x1c00) - return false; - if (cp < 0x1c24) - return true; - if (cp < 0x1c4d) - return false; - if (cp < 0x1c50) - return true; - return false; - } - if (cp < 0x2126) { - if (cp < 0x1f5f) { - if (cp < 0x1d79) { - if (cp < 0x1cf5) { - if (cp < 0x1c5a) - return false; - if (cp < 0x1c78) - return true; - if (cp < 0x1c78) - return false; - if (cp < 0x1c7e) - return true; - if (cp < 0x1c80) - return false; - if (cp < 0x1c89) - return true; - if (cp < 0x1ce9) - return false; - if (cp < 0x1ced) - return true; - if (cp < 0x1cee) - return false; - if (cp < 0x1cf2) - return true; - return false; - } - if (cp < 0x1cf7) - return true; - if (cp < 0x1d00) - return false; - if (cp < 0x1d2c) - return true; - if (cp < 0x1d2c) - return false; - if (cp < 0x1d6b) - return true; - if (cp < 0x1d6b) - return false; - if (cp < 0x1d78) - return true; - if (cp === 0x1d78) - return true; - return false; - } - if (cp < 0x1f48) { - if (cp < 0x1d79) - return false; - if (cp < 0x1d9b) - return true; - if (cp < 0x1d9b) - return false; - if (cp < 0x1dc0) - return true; - if (cp < 0x1e00) - return false; - if (cp < 0x1f16) - return true; - if (cp < 0x1f18) - return false; - if (cp < 0x1f1e) - return true; - if (cp < 0x1f20) - return false; - if (cp < 0x1f46) - return true; - return false; - } - if (cp < 0x1f4e) - return true; - if (cp < 0x1f50) - return false; - if (cp < 0x1f58) - return true; - if (cp === 0x1f59) - return true; - if (cp === 0x1f5b) - return true; - if (cp === 0x1f5d) - return true; - return false; - } - if (cp < 0x1ff6) { - if (cp < 0x1fc6) { - if (cp < 0x1f5f) - return false; - if (cp < 0x1f7e) - return true; - if (cp < 0x1f80) - return false; - if (cp < 0x1fb5) - return true; - if (cp < 0x1fb6) - return false; - if (cp < 0x1fbd) - return true; - if (cp === 0x1fbe) - return true; - if (cp < 0x1fc2) - return false; - if (cp < 0x1fc5) - return true; - return false; - } - if (cp < 0x1fcd) - return true; - if (cp < 0x1fd0) - return false; - if (cp < 0x1fd4) - return true; - if (cp < 0x1fd6) - return false; - if (cp < 0x1fdc) - return true; - if (cp < 0x1fe0) - return false; - if (cp < 0x1fed) - return true; - if (cp < 0x1ff2) - return false; - if (cp < 0x1ff5) - return true; - return false; - } - if (cp < 0x2107) { - if (cp < 0x1ff6) - return false; - if (cp < 0x1ffd) - return true; - if (cp === 0x2071) - return true; - if (cp === 0x207f) - return true; - if (cp < 0x2090) - return false; - if (cp < 0x209d) - return true; - if (cp === 0x2102) - return true; - return false; - } - if (cp === 0x2107) - return true; - if (cp < 0x210a) - return false; - if (cp < 0x2114) - return true; - if (cp === 0x2115) - return true; - if (cp === 0x2118) - return true; - if (cp < 0x2119) - return false; - if (cp < 0x211e) - return true; - if (cp === 0x2124) - return true; - return false; - } - if (cp < 0x2d00) { - if (cp < 0x2160) { - if (cp < 0x2135) { - if (cp === 0x2126) - return true; - if (cp === 0x2128) - return true; - if (cp < 0x212a) - return false; - if (cp < 0x212e) - return true; - if (cp === 0x212e) - return true; - if (cp < 0x212f) - return false; - if (cp < 0x2135) - return true; - return false; - } - if (cp < 0x2139) - return true; - if (cp === 0x2139) - return true; - if (cp < 0x213c) - return false; - if (cp < 0x2140) - return true; - if (cp < 0x2145) - return false; - if (cp < 0x214a) - return true; - if (cp === 0x214e) - return true; - return false; - } - if (cp < 0x2c60) { - if (cp < 0x2160) - return false; - if (cp < 0x2183) - return true; - if (cp < 0x2183) - return false; - if (cp < 0x2185) - return true; - if (cp < 0x2185) - return false; - if (cp < 0x2189) - return true; - if (cp < 0x2c00) - return false; - if (cp < 0x2c2f) - return true; - if (cp < 0x2c30) - return false; - if (cp < 0x2c5f) - return true; - return false; - } - if (cp < 0x2c7c) - return true; - if (cp < 0x2c7c) - return false; - if (cp < 0x2c7e) - return true; - if (cp < 0x2c7e) - return false; - if (cp < 0x2ce5) - return true; - if (cp < 0x2ceb) - return false; - if (cp < 0x2cef) - return true; - if (cp < 0x2cf2) - return false; - if (cp < 0x2cf4) - return true; - return false; - } - if (cp < 0x2dc0) { - if (cp < 0x2d80) { - if (cp < 0x2d00) - return false; - if (cp < 0x2d26) - return true; - if (cp === 0x2d27) - return true; - if (cp === 0x2d2d) - return true; - if (cp < 0x2d30) - return false; - if (cp < 0x2d68) - return true; - if (cp === 0x2d6f) - return true; - return false; - } - if (cp < 0x2d97) - return true; - if (cp < 0x2da0) - return false; - if (cp < 0x2da7) - return true; - if (cp < 0x2da8) - return false; - if (cp < 0x2daf) - return true; - if (cp < 0x2db0) - return false; - if (cp < 0x2db7) - return true; - if (cp < 0x2db8) - return false; - if (cp < 0x2dbf) - return true; - return false; - } - if (cp < 0x3006) { - if (cp < 0x2dc0) - return false; - if (cp < 0x2dc7) - return true; - if (cp < 0x2dc8) - return false; - if (cp < 0x2dcf) - return true; - if (cp < 0x2dd0) - return false; - if (cp < 0x2dd7) - return true; - if (cp < 0x2dd8) - return false; - if (cp < 0x2ddf) - return true; - if (cp === 0x3005) - return true; - return false; - } - if (cp === 0x3006) - return true; - if (cp === 0x3007) - return true; - if (cp < 0x3021) - return false; - if (cp < 0x302a) - return true; - if (cp < 0x3031) - return false; - if (cp < 0x3036) - return true; - if (cp < 0x3038) - return false; - if (cp < 0x303b) - return true; - if (cp === 0x303b) - return true; - return false; - } - if (cp < 0x10a10) { - if (cp < 0xab28) { - if (cp < 0xa7fa) { - if (cp < 0xa60c) { - if (cp < 0x31a0) { - if (cp < 0x30a1) { - if (cp === 0x303c) - return true; - if (cp < 0x3041) - return false; - if (cp < 0x3097) - return true; - if (cp < 0x309b) - return false; - if (cp < 0x309d) - return true; - if (cp < 0x309d) - return false; - if (cp < 0x309f) - return true; - if (cp === 0x309f) - return true; - return false; - } - if (cp < 0x30fb) - return true; - if (cp < 0x30fc) - return false; - if (cp < 0x30ff) - return true; - if (cp === 0x30ff) - return true; - if (cp < 0x3105) - return false; - if (cp < 0x312f) - return true; - if (cp < 0x3131) - return false; - if (cp < 0x318f) - return true; - return false; - } - if (cp < 0xa015) { - if (cp < 0x31a0) - return false; - if (cp < 0x31bb) - return true; - if (cp < 0x31f0) - return false; - if (cp < 0x3200) - return true; - if (cp < 0x3400) - return false; - if (cp < 0x4db6) - return true; - if (cp < 0x4e00) - return false; - if (cp < 0x9feb) - return true; - if (cp < 0xa000) - return false; - if (cp < 0xa015) - return true; - return false; - } - if (cp === 0xa015) - return true; - if (cp < 0xa016) - return false; - if (cp < 0xa48d) - return true; - if (cp < 0xa4d0) - return false; - if (cp < 0xa4f8) - return true; - if (cp < 0xa4f8) - return false; - if (cp < 0xa4fe) - return true; - if (cp < 0xa500) - return false; - if (cp < 0xa60c) - return true; - return false; - } - if (cp < 0xa717) { - if (cp < 0xa67f) { - if (cp === 0xa60c) - return true; - if (cp < 0xa610) - return false; - if (cp < 0xa620) - return true; - if (cp < 0xa62a) - return false; - if (cp < 0xa62c) - return true; - if (cp < 0xa640) - return false; - if (cp < 0xa66e) - return true; - if (cp === 0xa66e) - return true; - return false; - } - if (cp === 0xa67f) - return true; - if (cp < 0xa680) - return false; - if (cp < 0xa69c) - return true; - if (cp < 0xa69c) - return false; - if (cp < 0xa69e) - return true; - if (cp < 0xa6a0) - return false; - if (cp < 0xa6e6) - return true; - if (cp < 0xa6e6) - return false; - if (cp < 0xa6f0) - return true; - return false; - } - if (cp < 0xa78b) { - if (cp < 0xa717) - return false; - if (cp < 0xa720) - return true; - if (cp < 0xa722) - return false; - if (cp < 0xa770) - return true; - if (cp === 0xa770) - return true; - if (cp < 0xa771) - return false; - if (cp < 0xa788) - return true; - if (cp === 0xa788) - return true; - return false; - } - if (cp < 0xa78f) - return true; - if (cp === 0xa78f) - return true; - if (cp < 0xa790) - return false; - if (cp < 0xa7af) - return true; - if (cp < 0xa7b0) - return false; - if (cp < 0xa7b8) - return true; - if (cp === 0xa7f7) - return true; - if (cp < 0xa7f8) - return false; - if (cp < 0xa7fa) - return true; - return false; - } - if (cp < 0xaa40) { - if (cp < 0xa90a) { - if (cp < 0xa840) { - if (cp === 0xa7fa) - return true; - if (cp < 0xa7fb) - return false; - if (cp < 0xa802) - return true; - if (cp < 0xa803) - return false; - if (cp < 0xa806) - return true; - if (cp < 0xa807) - return false; - if (cp < 0xa80b) - return true; - if (cp < 0xa80c) - return false; - if (cp < 0xa823) - return true; - return false; - } - if (cp < 0xa874) - return true; - if (cp < 0xa882) - return false; - if (cp < 0xa8b4) - return true; - if (cp < 0xa8f2) - return false; - if (cp < 0xa8f8) - return true; - if (cp === 0xa8fb) - return true; - if (cp === 0xa8fd) - return true; - return false; - } - if (cp < 0xa9e0) { - if (cp < 0xa90a) - return false; - if (cp < 0xa926) - return true; - if (cp < 0xa930) - return false; - if (cp < 0xa947) - return true; - if (cp < 0xa960) - return false; - if (cp < 0xa97d) - return true; - if (cp < 0xa984) - return false; - if (cp < 0xa9b3) - return true; - if (cp === 0xa9cf) - return true; - return false; - } - if (cp < 0xa9e5) - return true; - if (cp === 0xa9e6) - return true; - if (cp < 0xa9e7) - return false; - if (cp < 0xa9f0) - return true; - if (cp < 0xa9fa) - return false; - if (cp < 0xa9ff) - return true; - if (cp < 0xaa00) - return false; - if (cp < 0xaa29) - return true; - return false; - } - if (cp < 0xaac0) { - if (cp < 0xaa7a) { - if (cp < 0xaa40) - return false; - if (cp < 0xaa43) - return true; - if (cp < 0xaa44) - return false; - if (cp < 0xaa4c) - return true; - if (cp < 0xaa60) - return false; - if (cp < 0xaa70) - return true; - if (cp === 0xaa70) - return true; - if (cp < 0xaa71) - return false; - if (cp < 0xaa77) - return true; - return false; - } - if (cp === 0xaa7a) - return true; - if (cp < 0xaa7e) - return false; - if (cp < 0xaab0) - return true; - if (cp === 0xaab1) - return true; - if (cp < 0xaab5) - return false; - if (cp < 0xaab7) - return true; - if (cp < 0xaab9) - return false; - if (cp < 0xaabe) - return true; - return false; - } - if (cp < 0xaaf2) { - if (cp === 0xaac0) - return true; - if (cp === 0xaac2) - return true; - if (cp < 0xaadb) - return false; - if (cp < 0xaadd) - return true; - if (cp === 0xaadd) - return true; - if (cp < 0xaae0) - return false; - if (cp < 0xaaeb) - return true; - return false; - } - if (cp === 0xaaf2) - return true; - if (cp < 0xaaf3) - return false; - if (cp < 0xaaf5) - return true; - if (cp < 0xab01) - return false; - if (cp < 0xab07) - return true; - if (cp < 0xab09) - return false; - if (cp < 0xab0f) - return true; - if (cp < 0xab11) - return false; - if (cp < 0xab17) - return true; - if (cp < 0xab20) - return false; - if (cp < 0xab27) - return true; - return false; - } - if (cp < 0x1003c) { - if (cp < 0xfb46) { - if (cp < 0xfa70) { - if (cp < 0xabc0) { - if (cp < 0xab28) - return false; - if (cp < 0xab2f) - return true; - if (cp < 0xab30) - return false; - if (cp < 0xab5b) - return true; - if (cp < 0xab5c) - return false; - if (cp < 0xab60) - return true; - if (cp < 0xab60) - return false; - if (cp < 0xab66) - return true; - if (cp < 0xab70) - return false; - if (cp < 0xabc0) - return true; - return false; - } - if (cp < 0xabe3) - return true; - if (cp < 0xac00) - return false; - if (cp < 0xd7a4) - return true; - if (cp < 0xd7b0) - return false; - if (cp < 0xd7c7) - return true; - if (cp < 0xd7cb) - return false; - if (cp < 0xd7fc) - return true; - if (cp < 0xf900) - return false; - if (cp < 0xfa6e) - return true; - return false; - } - if (cp < 0xfb2a) { - if (cp < 0xfa70) - return false; - if (cp < 0xfada) - return true; - if (cp < 0xfb00) - return false; - if (cp < 0xfb07) - return true; - if (cp < 0xfb13) - return false; - if (cp < 0xfb18) - return true; - if (cp === 0xfb1d) - return true; - if (cp < 0xfb1f) - return false; - if (cp < 0xfb29) - return true; - return false; - } - if (cp < 0xfb37) - return true; - if (cp < 0xfb38) - return false; - if (cp < 0xfb3d) - return true; - if (cp === 0xfb3e) - return true; - if (cp < 0xfb40) - return false; - if (cp < 0xfb42) - return true; - if (cp < 0xfb43) - return false; - if (cp < 0xfb45) - return true; - return false; - } - if (cp < 0xff70) { - if (cp < 0xfe70) { - if (cp < 0xfb46) - return false; - if (cp < 0xfbb2) - return true; - if (cp < 0xfbd3) - return false; - if (cp < 0xfd3e) - return true; - if (cp < 0xfd50) - return false; - if (cp < 0xfd90) - return true; - if (cp < 0xfd92) - return false; - if (cp < 0xfdc8) - return true; - if (cp < 0xfdf0) - return false; - if (cp < 0xfdfc) - return true; - return false; - } - if (cp < 0xfe75) - return true; - if (cp < 0xfe76) - return false; - if (cp < 0xfefd) - return true; - if (cp < 0xff21) - return false; - if (cp < 0xff3b) - return true; - if (cp < 0xff41) - return false; - if (cp < 0xff5b) - return true; - if (cp < 0xff66) - return false; - if (cp < 0xff70) - return true; - return false; - } - if (cp < 0xffca) { - if (cp === 0xff70) - return true; - if (cp < 0xff71) - return false; - if (cp < 0xff9e) - return true; - if (cp < 0xff9e) - return false; - if (cp < 0xffa0) - return true; - if (cp < 0xffa0) - return false; - if (cp < 0xffbf) - return true; - if (cp < 0xffc2) - return false; - if (cp < 0xffc8) - return true; - return false; - } - if (cp < 0xffd0) - return true; - if (cp < 0xffd2) - return false; - if (cp < 0xffd8) - return true; - if (cp < 0xffda) - return false; - if (cp < 0xffdd) - return true; - if (cp < 0x10000) - return false; - if (cp < 0x1000c) - return true; - if (cp < 0x1000d) - return false; - if (cp < 0x10027) - return true; - if (cp < 0x10028) - return false; - if (cp < 0x1003b) - return true; - return false; - } - if (cp < 0x104d8) { - if (cp < 0x10342) { - if (cp < 0x10280) { - if (cp < 0x1003c) - return false; - if (cp < 0x1003e) - return true; - if (cp < 0x1003f) - return false; - if (cp < 0x1004e) - return true; - if (cp < 0x10050) - return false; - if (cp < 0x1005e) - return true; - if (cp < 0x10080) - return false; - if (cp < 0x100fb) - return true; - if (cp < 0x10140) - return false; - if (cp < 0x10175) - return true; - return false; - } - if (cp < 0x1029d) - return true; - if (cp < 0x102a0) - return false; - if (cp < 0x102d1) - return true; - if (cp < 0x10300) - return false; - if (cp < 0x10320) - return true; - if (cp < 0x1032d) - return false; - if (cp < 0x10341) - return true; - if (cp === 0x10341) - return true; - return false; - } - if (cp < 0x103c8) { - if (cp < 0x10342) - return false; - if (cp < 0x1034a) - return true; - if (cp === 0x1034a) - return true; - if (cp < 0x10350) - return false; - if (cp < 0x10376) - return true; - if (cp < 0x10380) - return false; - if (cp < 0x1039e) - return true; - if (cp < 0x103a0) - return false; - if (cp < 0x103c4) - return true; - return false; - } - if (cp < 0x103d0) - return true; - if (cp < 0x103d1) - return false; - if (cp < 0x103d6) - return true; - if (cp < 0x10400) - return false; - if (cp < 0x10450) - return true; - if (cp < 0x10450) - return false; - if (cp < 0x1049e) - return true; - if (cp < 0x104b0) - return false; - if (cp < 0x104d4) - return true; - return false; - } - if (cp < 0x1083c) { - if (cp < 0x10760) { - if (cp < 0x104d8) - return false; - if (cp < 0x104fc) - return true; - if (cp < 0x10500) - return false; - if (cp < 0x10528) - return true; - if (cp < 0x10530) - return false; - if (cp < 0x10564) - return true; - if (cp < 0x10600) - return false; - if (cp < 0x10737) - return true; - if (cp < 0x10740) - return false; - if (cp < 0x10756) - return true; - return false; - } - if (cp < 0x10768) - return true; - if (cp < 0x10800) - return false; - if (cp < 0x10806) - return true; - if (cp === 0x10808) - return true; - if (cp < 0x1080a) - return false; - if (cp < 0x10836) - return true; - if (cp < 0x10837) - return false; - if (cp < 0x10839) - return true; - return false; - } - if (cp < 0x108f4) { - if (cp === 0x1083c) - return true; - if (cp < 0x1083f) - return false; - if (cp < 0x10856) - return true; - if (cp < 0x10860) - return false; - if (cp < 0x10877) - return true; - if (cp < 0x10880) - return false; - if (cp < 0x1089f) - return true; - if (cp < 0x108e0) - return false; - if (cp < 0x108f3) - return true; - return false; - } - if (cp < 0x108f6) - return true; - if (cp < 0x10900) - return false; - if (cp < 0x10916) - return true; - if (cp < 0x10920) - return false; - if (cp < 0x1093a) - return true; - if (cp < 0x10980) - return false; - if (cp < 0x109b8) - return true; - if (cp < 0x109be) - return false; - if (cp < 0x109c0) - return true; - if (cp === 0x10a00) - return true; - return false; - } - if (cp < 0x16f50) { - if (cp < 0x11400) { - if (cp < 0x11183) { - if (cp < 0x10b80) { - if (cp < 0x10ac0) { - if (cp < 0x10a10) - return false; - if (cp < 0x10a14) - return true; - if (cp < 0x10a15) - return false; - if (cp < 0x10a18) - return true; - if (cp < 0x10a19) - return false; - if (cp < 0x10a34) - return true; - if (cp < 0x10a60) - return false; - if (cp < 0x10a7d) - return true; - if (cp < 0x10a80) - return false; - if (cp < 0x10a9d) - return true; - return false; - } - if (cp < 0x10ac8) - return true; - if (cp < 0x10ac9) - return false; - if (cp < 0x10ae5) - return true; - if (cp < 0x10b00) - return false; - if (cp < 0x10b36) - return true; - if (cp < 0x10b40) - return false; - if (cp < 0x10b56) - return true; - if (cp < 0x10b60) - return false; - if (cp < 0x10b73) - return true; - return false; - } - if (cp < 0x11083) { - if (cp < 0x10b80) - return false; - if (cp < 0x10b92) - return true; - if (cp < 0x10c00) - return false; - if (cp < 0x10c49) - return true; - if (cp < 0x10c80) - return false; - if (cp < 0x10cb3) - return true; - if (cp < 0x10cc0) - return false; - if (cp < 0x10cf3) - return true; - if (cp < 0x11003) - return false; - if (cp < 0x11038) - return true; - return false; - } - if (cp < 0x110b0) - return true; - if (cp < 0x110d0) - return false; - if (cp < 0x110e9) - return true; - if (cp < 0x11103) - return false; - if (cp < 0x11127) - return true; - if (cp < 0x11150) - return false; - if (cp < 0x11173) - return true; - if (cp === 0x11176) - return true; - return false; - } - if (cp < 0x1129f) { - if (cp < 0x11213) { - if (cp < 0x11183) - return false; - if (cp < 0x111b3) - return true; - if (cp < 0x111c1) - return false; - if (cp < 0x111c5) - return true; - if (cp === 0x111da) - return true; - if (cp === 0x111dc) - return true; - if (cp < 0x11200) - return false; - if (cp < 0x11212) - return true; - return false; - } - if (cp < 0x1122c) - return true; - if (cp < 0x11280) - return false; - if (cp < 0x11287) - return true; - if (cp === 0x11288) - return true; - if (cp < 0x1128a) - return false; - if (cp < 0x1128e) - return true; - if (cp < 0x1128f) - return false; - if (cp < 0x1129e) - return true; - return false; - } - if (cp < 0x1132a) { - if (cp < 0x1129f) - return false; - if (cp < 0x112a9) - return true; - if (cp < 0x112b0) - return false; - if (cp < 0x112df) - return true; - if (cp < 0x11305) - return false; - if (cp < 0x1130d) - return true; - if (cp < 0x1130f) - return false; - if (cp < 0x11311) - return true; - if (cp < 0x11313) - return false; - if (cp < 0x11329) - return true; - return false; - } - if (cp < 0x11331) - return true; - if (cp < 0x11332) - return false; - if (cp < 0x11334) - return true; - if (cp < 0x11335) - return false; - if (cp < 0x1133a) - return true; - if (cp === 0x1133d) - return true; - if (cp === 0x11350) - return true; - if (cp < 0x1135d) - return false; - if (cp < 0x11362) - return true; - return false; - } - if (cp < 0x11c00) { - if (cp < 0x11700) { - if (cp < 0x11580) { - if (cp < 0x11400) - return false; - if (cp < 0x11435) - return true; - if (cp < 0x11447) - return false; - if (cp < 0x1144b) - return true; - if (cp < 0x11480) - return false; - if (cp < 0x114b0) - return true; - if (cp < 0x114c4) - return false; - if (cp < 0x114c6) - return true; - if (cp === 0x114c7) - return true; - return false; - } - if (cp < 0x115af) - return true; - if (cp < 0x115d8) - return false; - if (cp < 0x115dc) - return true; - if (cp < 0x11600) - return false; - if (cp < 0x11630) - return true; - if (cp === 0x11644) - return true; - if (cp < 0x11680) - return false; - if (cp < 0x116ab) - return true; - return false; - } - if (cp < 0x11a3a) { - if (cp < 0x11700) - return false; - if (cp < 0x1171a) - return true; - if (cp < 0x118a0) - return false; - if (cp < 0x118e0) - return true; - if (cp === 0x118ff) - return true; - if (cp === 0x11a00) - return true; - if (cp < 0x11a0b) - return false; - if (cp < 0x11a33) - return true; - return false; - } - if (cp === 0x11a3a) - return true; - if (cp === 0x11a50) - return true; - if (cp < 0x11a5c) - return false; - if (cp < 0x11a84) - return true; - if (cp < 0x11a86) - return false; - if (cp < 0x11a8a) - return true; - if (cp < 0x11ac0) - return false; - if (cp < 0x11af9) - return true; - return false; - } - if (cp < 0x12480) { - if (cp < 0x11d08) { - if (cp < 0x11c00) - return false; - if (cp < 0x11c09) - return true; - if (cp < 0x11c0a) - return false; - if (cp < 0x11c2f) - return true; - if (cp === 0x11c40) - return true; - if (cp < 0x11c72) - return false; - if (cp < 0x11c90) - return true; - if (cp < 0x11d00) - return false; - if (cp < 0x11d07) - return true; - return false; - } - if (cp < 0x11d0a) - return true; - if (cp < 0x11d0b) - return false; - if (cp < 0x11d31) - return true; - if (cp === 0x11d46) - return true; - if (cp < 0x12000) - return false; - if (cp < 0x1239a) - return true; - if (cp < 0x12400) - return false; - if (cp < 0x1246f) - return true; - return false; - } - if (cp < 0x16ad0) { - if (cp < 0x12480) - return false; - if (cp < 0x12544) - return true; - if (cp < 0x13000) - return false; - if (cp < 0x1342f) - return true; - if (cp < 0x14400) - return false; - if (cp < 0x14647) - return true; - if (cp < 0x16800) - return false; - if (cp < 0x16a39) - return true; - if (cp < 0x16a40) - return false; - if (cp < 0x16a5f) - return true; - return false; - } - if (cp < 0x16aee) - return true; - if (cp < 0x16b00) - return false; - if (cp < 0x16b30) - return true; - if (cp < 0x16b40) - return false; - if (cp < 0x16b44) - return true; - if (cp < 0x16b63) - return false; - if (cp < 0x16b78) - return true; - if (cp < 0x16b7d) - return false; - if (cp < 0x16b90) - return true; - if (cp < 0x16f00) - return false; - if (cp < 0x16f45) - return true; - return false; - } - if (cp < 0x1e800) { - if (cp < 0x1d4c5) { - if (cp < 0x1bc90) { - if (cp < 0x1b000) { - if (cp === 0x16f50) - return true; - if (cp < 0x16f93) - return false; - if (cp < 0x16fa0) - return true; - if (cp < 0x16fe0) - return false; - if (cp < 0x16fe2) - return true; - if (cp < 0x17000) - return false; - if (cp < 0x187ed) - return true; - if (cp < 0x18800) - return false; - if (cp < 0x18af3) - return true; - return false; - } - if (cp < 0x1b11f) - return true; - if (cp < 0x1b170) - return false; - if (cp < 0x1b2fc) - return true; - if (cp < 0x1bc00) - return false; - if (cp < 0x1bc6b) - return true; - if (cp < 0x1bc70) - return false; - if (cp < 0x1bc7d) - return true; - if (cp < 0x1bc80) - return false; - if (cp < 0x1bc89) - return true; - return false; - } - if (cp < 0x1d4a5) { - if (cp < 0x1bc90) - return false; - if (cp < 0x1bc9a) - return true; - if (cp < 0x1d400) - return false; - if (cp < 0x1d455) - return true; - if (cp < 0x1d456) - return false; - if (cp < 0x1d49d) - return true; - if (cp < 0x1d49e) - return false; - if (cp < 0x1d4a0) - return true; - if (cp === 0x1d4a2) - return true; - return false; - } - if (cp < 0x1d4a7) - return true; - if (cp < 0x1d4a9) - return false; - if (cp < 0x1d4ad) - return true; - if (cp < 0x1d4ae) - return false; - if (cp < 0x1d4ba) - return true; - if (cp === 0x1d4bb) - return true; - if (cp < 0x1d4bd) - return false; - if (cp < 0x1d4c4) - return true; - return false; - } - if (cp < 0x1d6a8) { - if (cp < 0x1d53b) { - if (cp < 0x1d4c5) - return false; - if (cp < 0x1d506) - return true; - if (cp < 0x1d507) - return false; - if (cp < 0x1d50b) - return true; - if (cp < 0x1d50d) - return false; - if (cp < 0x1d515) - return true; - if (cp < 0x1d516) - return false; - if (cp < 0x1d51d) - return true; - if (cp < 0x1d51e) - return false; - if (cp < 0x1d53a) - return true; - return false; - } - if (cp < 0x1d53f) - return true; - if (cp < 0x1d540) - return false; - if (cp < 0x1d545) - return true; - if (cp === 0x1d546) - return true; - if (cp < 0x1d54a) - return false; - if (cp < 0x1d551) - return true; - if (cp < 0x1d552) - return false; - if (cp < 0x1d6a6) - return true; - return false; - } - if (cp < 0x1d736) { - if (cp < 0x1d6a8) - return false; - if (cp < 0x1d6c1) - return true; - if (cp < 0x1d6c2) - return false; - if (cp < 0x1d6db) - return true; - if (cp < 0x1d6dc) - return false; - if (cp < 0x1d6fb) - return true; - if (cp < 0x1d6fc) - return false; - if (cp < 0x1d715) - return true; - if (cp < 0x1d716) - return false; - if (cp < 0x1d735) - return true; - return false; - } - if (cp < 0x1d74f) - return true; - if (cp < 0x1d750) - return false; - if (cp < 0x1d76f) - return true; - if (cp < 0x1d770) - return false; - if (cp < 0x1d789) - return true; - if (cp < 0x1d78a) - return false; - if (cp < 0x1d7a9) - return true; - if (cp < 0x1d7aa) - return false; - if (cp < 0x1d7c3) - return true; - if (cp < 0x1d7c4) - return false; - if (cp < 0x1d7cc) - return true; - return false; - } - if (cp < 0x1ee5b) { - if (cp < 0x1ee3b) { - if (cp < 0x1ee24) { - if (cp < 0x1e800) - return false; - if (cp < 0x1e8c5) - return true; - if (cp < 0x1e900) - return false; - if (cp < 0x1e944) - return true; - if (cp < 0x1ee00) - return false; - if (cp < 0x1ee04) - return true; - if (cp < 0x1ee05) - return false; - if (cp < 0x1ee20) - return true; - if (cp < 0x1ee21) - return false; - if (cp < 0x1ee23) - return true; - return false; - } - if (cp === 0x1ee24) - return true; - if (cp === 0x1ee27) - return true; - if (cp < 0x1ee29) - return false; - if (cp < 0x1ee33) - return true; - if (cp < 0x1ee34) - return false; - if (cp < 0x1ee38) - return true; - if (cp === 0x1ee39) - return true; - return false; - } - if (cp < 0x1ee4d) { - if (cp === 0x1ee3b) - return true; - if (cp === 0x1ee42) - return true; - if (cp === 0x1ee47) - return true; - if (cp === 0x1ee49) - return true; - if (cp === 0x1ee4b) - return true; - return false; - } - if (cp < 0x1ee50) - return true; - if (cp < 0x1ee51) - return false; - if (cp < 0x1ee53) - return true; - if (cp === 0x1ee54) - return true; - if (cp === 0x1ee57) - return true; - if (cp === 0x1ee59) - return true; - return false; - } - if (cp < 0x1ee80) { - if (cp < 0x1ee67) { - if (cp === 0x1ee5b) - return true; - if (cp === 0x1ee5d) - return true; - if (cp === 0x1ee5f) - return true; - if (cp < 0x1ee61) - return false; - if (cp < 0x1ee63) - return true; - if (cp === 0x1ee64) - return true; - return false; - } - if (cp < 0x1ee6b) - return true; - if (cp < 0x1ee6c) - return false; - if (cp < 0x1ee73) - return true; - if (cp < 0x1ee74) - return false; - if (cp < 0x1ee78) - return true; - if (cp < 0x1ee79) - return false; - if (cp < 0x1ee7d) - return true; - if (cp === 0x1ee7e) - return true; - return false; - } - if (cp < 0x20000) { - if (cp < 0x1ee80) - return false; - if (cp < 0x1ee8a) - return true; - if (cp < 0x1ee8b) - return false; - if (cp < 0x1ee9c) - return true; - if (cp < 0x1eea1) - return false; - if (cp < 0x1eea4) - return true; - if (cp < 0x1eea5) - return false; - if (cp < 0x1eeaa) - return true; - if (cp < 0x1eeab) - return false; - if (cp < 0x1eebc) - return true; - return false; - } - if (cp < 0x2a6d7) - return true; - if (cp < 0x2a700) - return false; - if (cp < 0x2b735) - return true; - if (cp < 0x2b740) - return false; - if (cp < 0x2b81e) - return true; - if (cp < 0x2b820) - return false; - if (cp < 0x2cea2) - return true; - if (cp < 0x2ceb0) - return false; - if (cp < 0x2ebe1) - return true; - if (cp < 0x2f800) - return false; - if (cp < 0x2fa1e) - return true; - return false; -} -function isLargeIdContinue(cp) { - if (cp < 0x1bf2) { - if (cp < 0xd62) { - if (cp < 0xa83) { - if (cp < 0x93b) { - if (cp < 0x6ea) { - if (cp < 0x5c7) { - if (cp === 0xb7) - return true; - if (cp < 0x300) - return false; - if (cp < 0x370) - return true; - if (cp === 0x387) - return true; - if (cp < 0x483) - return false; - if (cp < 0x488) - return true; - if (cp < 0x591) - return false; - if (cp < 0x5be) - return true; - if (cp === 0x5bf) - return true; - if (cp < 0x5c1) - return false; - if (cp < 0x5c3) - return true; - if (cp < 0x5c4) - return false; - if (cp < 0x5c6) - return true; - return false; - } - if (cp === 0x5c7) - return true; - if (cp < 0x610) - return false; - if (cp < 0x61b) - return true; - if (cp < 0x64b) - return false; - if (cp < 0x660) - return true; - if (cp < 0x660) - return false; - if (cp < 0x66a) - return true; - if (cp === 0x670) - return true; - if (cp < 0x6d6) - return false; - if (cp < 0x6dd) - return true; - if (cp < 0x6df) - return false; - if (cp < 0x6e5) - return true; - if (cp < 0x6e7) - return false; - if (cp < 0x6e9) - return true; - return false; - } - if (cp < 0x81b) { - if (cp < 0x6ea) - return false; - if (cp < 0x6ee) - return true; - if (cp < 0x6f0) - return false; - if (cp < 0x6fa) - return true; - if (cp === 0x711) - return true; - if (cp < 0x730) - return false; - if (cp < 0x74b) - return true; - if (cp < 0x7a6) - return false; - if (cp < 0x7b1) - return true; - if (cp < 0x7c0) - return false; - if (cp < 0x7ca) - return true; - if (cp < 0x7eb) - return false; - if (cp < 0x7f4) - return true; - if (cp < 0x816) - return false; - if (cp < 0x81a) - return true; - return false; - } - if (cp < 0x824) - return true; - if (cp < 0x825) - return false; - if (cp < 0x828) - return true; - if (cp < 0x829) - return false; - if (cp < 0x82e) - return true; - if (cp < 0x859) - return false; - if (cp < 0x85c) - return true; - if (cp < 0x8d4) - return false; - if (cp < 0x8e2) - return true; - if (cp < 0x8e3) - return false; - if (cp < 0x903) - return true; - if (cp === 0x903) - return true; - if (cp === 0x93a) - return true; - return false; - } - if (cp < 0x9cb) { - if (cp < 0x962) { - if (cp === 0x93b) - return true; - if (cp === 0x93c) - return true; - if (cp < 0x93e) - return false; - if (cp < 0x941) - return true; - if (cp < 0x941) - return false; - if (cp < 0x949) - return true; - if (cp < 0x949) - return false; - if (cp < 0x94d) - return true; - if (cp === 0x94d) - return true; - if (cp < 0x94e) - return false; - if (cp < 0x950) - return true; - if (cp < 0x951) - return false; - if (cp < 0x958) - return true; - return false; - } - if (cp < 0x964) - return true; - if (cp < 0x966) - return false; - if (cp < 0x970) - return true; - if (cp === 0x981) - return true; - if (cp < 0x982) - return false; - if (cp < 0x984) - return true; - if (cp === 0x9bc) - return true; - if (cp < 0x9be) - return false; - if (cp < 0x9c1) - return true; - if (cp < 0x9c1) - return false; - if (cp < 0x9c5) - return true; - if (cp < 0x9c7) - return false; - if (cp < 0x9c9) - return true; - return false; - } - if (cp < 0xa3e) { - if (cp < 0x9cb) - return false; - if (cp < 0x9cd) - return true; - if (cp === 0x9cd) - return true; - if (cp === 0x9d7) - return true; - if (cp < 0x9e2) - return false; - if (cp < 0x9e4) - return true; - if (cp < 0x9e6) - return false; - if (cp < 0x9f0) - return true; - if (cp < 0xa01) - return false; - if (cp < 0xa03) - return true; - if (cp === 0xa03) - return true; - if (cp === 0xa3c) - return true; - return false; - } - if (cp < 0xa41) - return true; - if (cp < 0xa41) - return false; - if (cp < 0xa43) - return true; - if (cp < 0xa47) - return false; - if (cp < 0xa49) - return true; - if (cp < 0xa4b) - return false; - if (cp < 0xa4e) - return true; - if (cp === 0xa51) - return true; - if (cp < 0xa66) - return false; - if (cp < 0xa70) - return true; - if (cp < 0xa70) - return false; - if (cp < 0xa72) - return true; - if (cp === 0xa75) - return true; - if (cp < 0xa81) - return false; - if (cp < 0xa83) - return true; - return false; - } - if (cp < 0xbd7) { - if (cp < 0xb40) { - if (cp < 0xae2) { - if (cp === 0xa83) - return true; - if (cp === 0xabc) - return true; - if (cp < 0xabe) - return false; - if (cp < 0xac1) - return true; - if (cp < 0xac1) - return false; - if (cp < 0xac6) - return true; - if (cp < 0xac7) - return false; - if (cp < 0xac9) - return true; - if (cp === 0xac9) - return true; - if (cp < 0xacb) - return false; - if (cp < 0xacd) - return true; - if (cp === 0xacd) - return true; - return false; - } - if (cp < 0xae4) - return true; - if (cp < 0xae6) - return false; - if (cp < 0xaf0) - return true; - if (cp < 0xafa) - return false; - if (cp < 0xb00) - return true; - if (cp === 0xb01) - return true; - if (cp < 0xb02) - return false; - if (cp < 0xb04) - return true; - if (cp === 0xb3c) - return true; - if (cp === 0xb3e) - return true; - if (cp === 0xb3f) - return true; - return false; - } - if (cp < 0xb66) { - if (cp === 0xb40) - return true; - if (cp < 0xb41) - return false; - if (cp < 0xb45) - return true; - if (cp < 0xb47) - return false; - if (cp < 0xb49) - return true; - if (cp < 0xb4b) - return false; - if (cp < 0xb4d) - return true; - if (cp === 0xb4d) - return true; - if (cp === 0xb56) - return true; - if (cp === 0xb57) - return true; - if (cp < 0xb62) - return false; - if (cp < 0xb64) - return true; - return false; - } - if (cp < 0xb70) - return true; - if (cp === 0xb82) - return true; - if (cp < 0xbbe) - return false; - if (cp < 0xbc0) - return true; - if (cp === 0xbc0) - return true; - if (cp < 0xbc1) - return false; - if (cp < 0xbc3) - return true; - if (cp < 0xbc6) - return false; - if (cp < 0xbc9) - return true; - if (cp < 0xbca) - return false; - if (cp < 0xbcd) - return true; - if (cp === 0xbcd) - return true; - return false; - } - if (cp < 0xcc0) { - if (cp < 0xc55) { - if (cp === 0xbd7) - return true; - if (cp < 0xbe6) - return false; - if (cp < 0xbf0) - return true; - if (cp === 0xc00) - return true; - if (cp < 0xc01) - return false; - if (cp < 0xc04) - return true; - if (cp < 0xc3e) - return false; - if (cp < 0xc41) - return true; - if (cp < 0xc41) - return false; - if (cp < 0xc45) - return true; - if (cp < 0xc46) - return false; - if (cp < 0xc49) - return true; - if (cp < 0xc4a) - return false; - if (cp < 0xc4e) - return true; - return false; - } - if (cp < 0xc57) - return true; - if (cp < 0xc62) - return false; - if (cp < 0xc64) - return true; - if (cp < 0xc66) - return false; - if (cp < 0xc70) - return true; - if (cp === 0xc81) - return true; - if (cp < 0xc82) - return false; - if (cp < 0xc84) - return true; - if (cp === 0xcbc) - return true; - if (cp === 0xcbe) - return true; - if (cp === 0xcbf) - return true; - return false; - } - if (cp < 0xd00) { - if (cp < 0xcc0) - return false; - if (cp < 0xcc5) - return true; - if (cp === 0xcc6) - return true; - if (cp < 0xcc7) - return false; - if (cp < 0xcc9) - return true; - if (cp < 0xcca) - return false; - if (cp < 0xccc) - return true; - if (cp < 0xccc) - return false; - if (cp < 0xcce) - return true; - if (cp < 0xcd5) - return false; - if (cp < 0xcd7) - return true; - if (cp < 0xce2) - return false; - if (cp < 0xce4) - return true; - if (cp < 0xce6) - return false; - if (cp < 0xcf0) - return true; - return false; - } - if (cp < 0xd02) - return true; - if (cp < 0xd02) - return false; - if (cp < 0xd04) - return true; - if (cp < 0xd3b) - return false; - if (cp < 0xd3d) - return true; - if (cp < 0xd3e) - return false; - if (cp < 0xd41) - return true; - if (cp < 0xd41) - return false; - if (cp < 0xd45) - return true; - if (cp < 0xd46) - return false; - if (cp < 0xd49) - return true; - if (cp < 0xd4a) - return false; - if (cp < 0xd4d) - return true; - if (cp === 0xd4d) - return true; - if (cp === 0xd57) - return true; - return false; - } - if (cp < 0x17be) { - if (cp < 0x102b) { - if (cp < 0xebb) { - if (cp < 0xde6) { - if (cp < 0xd62) - return false; - if (cp < 0xd64) - return true; - if (cp < 0xd66) - return false; - if (cp < 0xd70) - return true; - if (cp < 0xd82) - return false; - if (cp < 0xd84) - return true; - if (cp === 0xdca) - return true; - if (cp < 0xdcf) - return false; - if (cp < 0xdd2) - return true; - if (cp < 0xdd2) - return false; - if (cp < 0xdd5) - return true; - if (cp === 0xdd6) - return true; - if (cp < 0xdd8) - return false; - if (cp < 0xde0) - return true; - return false; - } - if (cp < 0xdf0) - return true; - if (cp < 0xdf2) - return false; - if (cp < 0xdf4) - return true; - if (cp === 0xe31) - return true; - if (cp < 0xe34) - return false; - if (cp < 0xe3b) - return true; - if (cp < 0xe47) - return false; - if (cp < 0xe4f) - return true; - if (cp < 0xe50) - return false; - if (cp < 0xe5a) - return true; - if (cp === 0xeb1) - return true; - if (cp < 0xeb4) - return false; - if (cp < 0xeba) - return true; - return false; - } - if (cp < 0xf3e) { - if (cp < 0xebb) - return false; - if (cp < 0xebd) - return true; - if (cp < 0xec8) - return false; - if (cp < 0xece) - return true; - if (cp < 0xed0) - return false; - if (cp < 0xeda) - return true; - if (cp < 0xf18) - return false; - if (cp < 0xf1a) - return true; - if (cp < 0xf20) - return false; - if (cp < 0xf2a) - return true; - if (cp === 0xf35) - return true; - if (cp === 0xf37) - return true; - if (cp === 0xf39) - return true; - return false; - } - if (cp < 0xf40) - return true; - if (cp < 0xf71) - return false; - if (cp < 0xf7f) - return true; - if (cp === 0xf7f) - return true; - if (cp < 0xf80) - return false; - if (cp < 0xf85) - return true; - if (cp < 0xf86) - return false; - if (cp < 0xf88) - return true; - if (cp < 0xf8d) - return false; - if (cp < 0xf98) - return true; - if (cp < 0xf99) - return false; - if (cp < 0xfbd) - return true; - if (cp === 0xfc6) - return true; - return false; - } - if (cp < 0x1083) { - if (cp < 0x1040) { - if (cp < 0x102b) - return false; - if (cp < 0x102d) - return true; - if (cp < 0x102d) - return false; - if (cp < 0x1031) - return true; - if (cp === 0x1031) - return true; - if (cp < 0x1032) - return false; - if (cp < 0x1038) - return true; - if (cp === 0x1038) - return true; - if (cp < 0x1039) - return false; - if (cp < 0x103b) - return true; - if (cp < 0x103b) - return false; - if (cp < 0x103d) - return true; - if (cp < 0x103d) - return false; - if (cp < 0x103f) - return true; - return false; - } - if (cp < 0x104a) - return true; - if (cp < 0x1056) - return false; - if (cp < 0x1058) - return true; - if (cp < 0x1058) - return false; - if (cp < 0x105a) - return true; - if (cp < 0x105e) - return false; - if (cp < 0x1061) - return true; - if (cp < 0x1062) - return false; - if (cp < 0x1065) - return true; - if (cp < 0x1067) - return false; - if (cp < 0x106e) - return true; - if (cp < 0x1071) - return false; - if (cp < 0x1075) - return true; - if (cp === 0x1082) - return true; - return false; - } - if (cp < 0x135d) { - if (cp < 0x1083) - return false; - if (cp < 0x1085) - return true; - if (cp < 0x1085) - return false; - if (cp < 0x1087) - return true; - if (cp < 0x1087) - return false; - if (cp < 0x108d) - return true; - if (cp === 0x108d) - return true; - if (cp === 0x108f) - return true; - if (cp < 0x1090) - return false; - if (cp < 0x109a) - return true; - if (cp < 0x109a) - return false; - if (cp < 0x109d) - return true; - if (cp === 0x109d) - return true; - return false; - } - if (cp < 0x1360) - return true; - if (cp < 0x1369) - return false; - if (cp < 0x1372) - return true; - if (cp < 0x1712) - return false; - if (cp < 0x1715) - return true; - if (cp < 0x1732) - return false; - if (cp < 0x1735) - return true; - if (cp < 0x1752) - return false; - if (cp < 0x1754) - return true; - if (cp < 0x1772) - return false; - if (cp < 0x1774) - return true; - if (cp < 0x17b4) - return false; - if (cp < 0x17b6) - return true; - if (cp === 0x17b6) - return true; - if (cp < 0x17b7) - return false; - if (cp < 0x17be) - return true; - return false; - } - if (cp < 0x1a73) { - if (cp < 0x1939) { - if (cp < 0x18a9) { - if (cp < 0x17be) - return false; - if (cp < 0x17c6) - return true; - if (cp === 0x17c6) - return true; - if (cp < 0x17c7) - return false; - if (cp < 0x17c9) - return true; - if (cp < 0x17c9) - return false; - if (cp < 0x17d4) - return true; - if (cp === 0x17dd) - return true; - if (cp < 0x17e0) - return false; - if (cp < 0x17ea) - return true; - if (cp < 0x180b) - return false; - if (cp < 0x180e) - return true; - if (cp < 0x1810) - return false; - if (cp < 0x181a) - return true; - return false; - } - if (cp === 0x18a9) - return true; - if (cp < 0x1920) - return false; - if (cp < 0x1923) - return true; - if (cp < 0x1923) - return false; - if (cp < 0x1927) - return true; - if (cp < 0x1927) - return false; - if (cp < 0x1929) - return true; - if (cp < 0x1929) - return false; - if (cp < 0x192c) - return true; - if (cp < 0x1930) - return false; - if (cp < 0x1932) - return true; - if (cp === 0x1932) - return true; - if (cp < 0x1933) - return false; - if (cp < 0x1939) - return true; - return false; - } - if (cp < 0x1a56) { - if (cp < 0x1939) - return false; - if (cp < 0x193c) - return true; - if (cp < 0x1946) - return false; - if (cp < 0x1950) - return true; - if (cp < 0x19d0) - return false; - if (cp < 0x19da) - return true; - if (cp === 0x19da) - return true; - if (cp < 0x1a17) - return false; - if (cp < 0x1a19) - return true; - if (cp < 0x1a19) - return false; - if (cp < 0x1a1b) - return true; - if (cp === 0x1a1b) - return true; - if (cp === 0x1a55) - return true; - return false; - } - if (cp === 0x1a56) - return true; - if (cp === 0x1a57) - return true; - if (cp < 0x1a58) - return false; - if (cp < 0x1a5f) - return true; - if (cp === 0x1a60) - return true; - if (cp === 0x1a61) - return true; - if (cp === 0x1a62) - return true; - if (cp < 0x1a63) - return false; - if (cp < 0x1a65) - return true; - if (cp < 0x1a65) - return false; - if (cp < 0x1a6d) - return true; - if (cp < 0x1a6d) - return false; - if (cp < 0x1a73) - return true; - return false; - } - if (cp < 0x1b6b) { - if (cp < 0x1b35) { - if (cp < 0x1a73) - return false; - if (cp < 0x1a7d) - return true; - if (cp === 0x1a7f) - return true; - if (cp < 0x1a80) - return false; - if (cp < 0x1a8a) - return true; - if (cp < 0x1a90) - return false; - if (cp < 0x1a9a) - return true; - if (cp < 0x1ab0) - return false; - if (cp < 0x1abe) - return true; - if (cp < 0x1b00) - return false; - if (cp < 0x1b04) - return true; - if (cp === 0x1b04) - return true; - if (cp === 0x1b34) - return true; - return false; - } - if (cp === 0x1b35) - return true; - if (cp < 0x1b36) - return false; - if (cp < 0x1b3b) - return true; - if (cp === 0x1b3b) - return true; - if (cp === 0x1b3c) - return true; - if (cp < 0x1b3d) - return false; - if (cp < 0x1b42) - return true; - if (cp === 0x1b42) - return true; - if (cp < 0x1b43) - return false; - if (cp < 0x1b45) - return true; - if (cp < 0x1b50) - return false; - if (cp < 0x1b5a) - return true; - return false; - } - if (cp < 0x1bab) { - if (cp < 0x1b6b) - return false; - if (cp < 0x1b74) - return true; - if (cp < 0x1b80) - return false; - if (cp < 0x1b82) - return true; - if (cp === 0x1b82) - return true; - if (cp === 0x1ba1) - return true; - if (cp < 0x1ba2) - return false; - if (cp < 0x1ba6) - return true; - if (cp < 0x1ba6) - return false; - if (cp < 0x1ba8) - return true; - if (cp < 0x1ba8) - return false; - if (cp < 0x1baa) - return true; - if (cp === 0x1baa) - return true; - return false; - } - if (cp < 0x1bae) - return true; - if (cp < 0x1bb0) - return false; - if (cp < 0x1bba) - return true; - if (cp === 0x1be6) - return true; - if (cp === 0x1be7) - return true; - if (cp < 0x1be8) - return false; - if (cp < 0x1bea) - return true; - if (cp < 0x1bea) - return false; - if (cp < 0x1bed) - return true; - if (cp === 0x1bed) - return true; - if (cp === 0x1bee) - return true; - if (cp < 0x1bef) - return false; - if (cp < 0x1bf2) - return true; - return false; - } - if (cp < 0x111d0) { - if (cp < 0xaa43) { - if (cp < 0xa69e) { - if (cp < 0x1dc0) { - if (cp < 0x1cd4) { - if (cp < 0x1bf2) - return false; - if (cp < 0x1bf4) - return true; - if (cp < 0x1c24) - return false; - if (cp < 0x1c2c) - return true; - if (cp < 0x1c2c) - return false; - if (cp < 0x1c34) - return true; - if (cp < 0x1c34) - return false; - if (cp < 0x1c36) - return true; - if (cp < 0x1c36) - return false; - if (cp < 0x1c38) - return true; - if (cp < 0x1c40) - return false; - if (cp < 0x1c4a) - return true; - if (cp < 0x1c50) - return false; - if (cp < 0x1c5a) - return true; - if (cp < 0x1cd0) - return false; - if (cp < 0x1cd3) - return true; - return false; - } - if (cp < 0x1ce1) - return true; - if (cp === 0x1ce1) - return true; - if (cp < 0x1ce2) - return false; - if (cp < 0x1ce9) - return true; - if (cp === 0x1ced) - return true; - if (cp < 0x1cf2) - return false; - if (cp < 0x1cf4) - return true; - if (cp === 0x1cf4) - return true; - if (cp === 0x1cf7) - return true; - if (cp < 0x1cf8) - return false; - if (cp < 0x1cfa) - return true; - return false; - } - if (cp < 0x2d7f) { - if (cp < 0x1dc0) - return false; - if (cp < 0x1dfa) - return true; - if (cp < 0x1dfb) - return false; - if (cp < 0x1e00) - return true; - if (cp < 0x203f) - return false; - if (cp < 0x2041) - return true; - if (cp === 0x2054) - return true; - if (cp < 0x20d0) - return false; - if (cp < 0x20dd) - return true; - if (cp === 0x20e1) - return true; - if (cp < 0x20e5) - return false; - if (cp < 0x20f1) - return true; - if (cp < 0x2cef) - return false; - if (cp < 0x2cf2) - return true; - return false; - } - if (cp === 0x2d7f) - return true; - if (cp < 0x2de0) - return false; - if (cp < 0x2e00) - return true; - if (cp < 0x302a) - return false; - if (cp < 0x302e) - return true; - if (cp < 0x302e) - return false; - if (cp < 0x3030) - return true; - if (cp < 0x3099) - return false; - if (cp < 0x309b) - return true; - if (cp < 0xa620) - return false; - if (cp < 0xa62a) - return true; - if (cp === 0xa66f) - return true; - if (cp < 0xa674) - return false; - if (cp < 0xa67e) - return true; - return false; - } - if (cp < 0xa952) { - if (cp < 0xa880) { - if (cp < 0xa69e) - return false; - if (cp < 0xa6a0) - return true; - if (cp < 0xa6f0) - return false; - if (cp < 0xa6f2) - return true; - if (cp === 0xa802) - return true; - if (cp === 0xa806) - return true; - if (cp === 0xa80b) - return true; - if (cp < 0xa823) - return false; - if (cp < 0xa825) - return true; - if (cp < 0xa825) - return false; - if (cp < 0xa827) - return true; - if (cp === 0xa827) - return true; - return false; - } - if (cp < 0xa882) - return true; - if (cp < 0xa8b4) - return false; - if (cp < 0xa8c4) - return true; - if (cp < 0xa8c4) - return false; - if (cp < 0xa8c6) - return true; - if (cp < 0xa8d0) - return false; - if (cp < 0xa8da) - return true; - if (cp < 0xa8e0) - return false; - if (cp < 0xa8f2) - return true; - if (cp < 0xa900) - return false; - if (cp < 0xa90a) - return true; - if (cp < 0xa926) - return false; - if (cp < 0xa92e) - return true; - if (cp < 0xa947) - return false; - if (cp < 0xa952) - return true; - return false; - } - if (cp < 0xa9bd) { - if (cp < 0xa952) - return false; - if (cp < 0xa954) - return true; - if (cp < 0xa980) - return false; - if (cp < 0xa983) - return true; - if (cp === 0xa983) - return true; - if (cp === 0xa9b3) - return true; - if (cp < 0xa9b4) - return false; - if (cp < 0xa9b6) - return true; - if (cp < 0xa9b6) - return false; - if (cp < 0xa9ba) - return true; - if (cp < 0xa9ba) - return false; - if (cp < 0xa9bc) - return true; - if (cp === 0xa9bc) - return true; - return false; - } - if (cp < 0xa9c1) - return true; - if (cp < 0xa9d0) - return false; - if (cp < 0xa9da) - return true; - if (cp === 0xa9e5) - return true; - if (cp < 0xa9f0) - return false; - if (cp < 0xa9fa) - return true; - if (cp < 0xaa29) - return false; - if (cp < 0xaa2f) - return true; - if (cp < 0xaa2f) - return false; - if (cp < 0xaa31) - return true; - if (cp < 0xaa31) - return false; - if (cp < 0xaa33) - return true; - if (cp < 0xaa33) - return false; - if (cp < 0xaa35) - return true; - if (cp < 0xaa35) - return false; - if (cp < 0xaa37) - return true; - return false; - } - if (cp < 0x102e0) { - if (cp < 0xaaf6) { - if (cp < 0xaab2) { - if (cp === 0xaa43) - return true; - if (cp === 0xaa4c) - return true; - if (cp === 0xaa4d) - return true; - if (cp < 0xaa50) - return false; - if (cp < 0xaa5a) - return true; - if (cp === 0xaa7b) - return true; - if (cp === 0xaa7c) - return true; - if (cp === 0xaa7d) - return true; - if (cp === 0xaab0) - return true; - return false; - } - if (cp < 0xaab5) - return true; - if (cp < 0xaab7) - return false; - if (cp < 0xaab9) - return true; - if (cp < 0xaabe) - return false; - if (cp < 0xaac0) - return true; - if (cp === 0xaac1) - return true; - if (cp === 0xaaeb) - return true; - if (cp < 0xaaec) - return false; - if (cp < 0xaaee) - return true; - if (cp < 0xaaee) - return false; - if (cp < 0xaaf0) - return true; - if (cp === 0xaaf5) - return true; - return false; - } - if (cp < 0xabf0) { - if (cp === 0xaaf6) - return true; - if (cp < 0xabe3) - return false; - if (cp < 0xabe5) - return true; - if (cp === 0xabe5) - return true; - if (cp < 0xabe6) - return false; - if (cp < 0xabe8) - return true; - if (cp === 0xabe8) - return true; - if (cp < 0xabe9) - return false; - if (cp < 0xabeb) - return true; - if (cp === 0xabec) - return true; - if (cp === 0xabed) - return true; - return false; - } - if (cp < 0xabfa) - return true; - if (cp === 0xfb1e) - return true; - if (cp < 0xfe00) - return false; - if (cp < 0xfe10) - return true; - if (cp < 0xfe20) - return false; - if (cp < 0xfe30) - return true; - if (cp < 0xfe33) - return false; - if (cp < 0xfe35) - return true; - if (cp < 0xfe4d) - return false; - if (cp < 0xfe50) - return true; - if (cp < 0xff10) - return false; - if (cp < 0xff1a) - return true; - if (cp === 0xff3f) - return true; - if (cp === 0x101fd) - return true; - return false; - } - if (cp < 0x110b0) { - if (cp < 0x10ae5) { - if (cp === 0x102e0) - return true; - if (cp < 0x10376) - return false; - if (cp < 0x1037b) - return true; - if (cp < 0x104a0) - return false; - if (cp < 0x104aa) - return true; - if (cp < 0x10a01) - return false; - if (cp < 0x10a04) - return true; - if (cp < 0x10a05) - return false; - if (cp < 0x10a07) - return true; - if (cp < 0x10a0c) - return false; - if (cp < 0x10a10) - return true; - if (cp < 0x10a38) - return false; - if (cp < 0x10a3b) - return true; - if (cp === 0x10a3f) - return true; - return false; - } - if (cp < 0x10ae7) - return true; - if (cp === 0x11000) - return true; - if (cp === 0x11001) - return true; - if (cp === 0x11002) - return true; - if (cp < 0x11038) - return false; - if (cp < 0x11047) - return true; - if (cp < 0x11066) - return false; - if (cp < 0x11070) - return true; - if (cp < 0x1107f) - return false; - if (cp < 0x11082) - return true; - if (cp === 0x11082) - return true; - return false; - } - if (cp < 0x1112d) { - if (cp < 0x110b0) - return false; - if (cp < 0x110b3) - return true; - if (cp < 0x110b3) - return false; - if (cp < 0x110b7) - return true; - if (cp < 0x110b7) - return false; - if (cp < 0x110b9) - return true; - if (cp < 0x110b9) - return false; - if (cp < 0x110bb) - return true; - if (cp < 0x110f0) - return false; - if (cp < 0x110fa) - return true; - if (cp < 0x11100) - return false; - if (cp < 0x11103) - return true; - if (cp < 0x11127) - return false; - if (cp < 0x1112c) - return true; - if (cp === 0x1112c) - return true; - return false; - } - if (cp < 0x11135) - return true; - if (cp < 0x11136) - return false; - if (cp < 0x11140) - return true; - if (cp === 0x11173) - return true; - if (cp < 0x11180) - return false; - if (cp < 0x11182) - return true; - if (cp === 0x11182) - return true; - if (cp < 0x111b3) - return false; - if (cp < 0x111b6) - return true; - if (cp < 0x111b6) - return false; - if (cp < 0x111bf) - return true; - if (cp < 0x111bf) - return false; - if (cp < 0x111c1) - return true; - if (cp < 0x111ca) - return false; - if (cp < 0x111cd) - return true; - return false; - } - if (cp < 0x11726) { - if (cp < 0x114b3) { - if (cp < 0x11340) { - if (cp < 0x112df) { - if (cp < 0x111d0) - return false; - if (cp < 0x111da) - return true; - if (cp < 0x1122c) - return false; - if (cp < 0x1122f) - return true; - if (cp < 0x1122f) - return false; - if (cp < 0x11232) - return true; - if (cp < 0x11232) - return false; - if (cp < 0x11234) - return true; - if (cp === 0x11234) - return true; - if (cp === 0x11235) - return true; - if (cp < 0x11236) - return false; - if (cp < 0x11238) - return true; - if (cp === 0x1123e) - return true; - return false; - } - if (cp === 0x112df) - return true; - if (cp < 0x112e0) - return false; - if (cp < 0x112e3) - return true; - if (cp < 0x112e3) - return false; - if (cp < 0x112eb) - return true; - if (cp < 0x112f0) - return false; - if (cp < 0x112fa) - return true; - if (cp < 0x11300) - return false; - if (cp < 0x11302) - return true; - if (cp < 0x11302) - return false; - if (cp < 0x11304) - return true; - if (cp === 0x1133c) - return true; - if (cp < 0x1133e) - return false; - if (cp < 0x11340) - return true; - return false; - } - if (cp < 0x11435) { - if (cp === 0x11340) - return true; - if (cp < 0x11341) - return false; - if (cp < 0x11345) - return true; - if (cp < 0x11347) - return false; - if (cp < 0x11349) - return true; - if (cp < 0x1134b) - return false; - if (cp < 0x1134e) - return true; - if (cp === 0x11357) - return true; - if (cp < 0x11362) - return false; - if (cp < 0x11364) - return true; - if (cp < 0x11366) - return false; - if (cp < 0x1136d) - return true; - if (cp < 0x11370) - return false; - if (cp < 0x11375) - return true; - return false; - } - if (cp < 0x11438) - return true; - if (cp < 0x11438) - return false; - if (cp < 0x11440) - return true; - if (cp < 0x11440) - return false; - if (cp < 0x11442) - return true; - if (cp < 0x11442) - return false; - if (cp < 0x11445) - return true; - if (cp === 0x11445) - return true; - if (cp === 0x11446) - return true; - if (cp < 0x11450) - return false; - if (cp < 0x1145a) - return true; - if (cp < 0x114b0) - return false; - if (cp < 0x114b3) - return true; - return false; - } - if (cp < 0x11633) { - if (cp < 0x115af) { - if (cp < 0x114b3) - return false; - if (cp < 0x114b9) - return true; - if (cp === 0x114b9) - return true; - if (cp === 0x114ba) - return true; - if (cp < 0x114bb) - return false; - if (cp < 0x114bf) - return true; - if (cp < 0x114bf) - return false; - if (cp < 0x114c1) - return true; - if (cp === 0x114c1) - return true; - if (cp < 0x114c2) - return false; - if (cp < 0x114c4) - return true; - if (cp < 0x114d0) - return false; - if (cp < 0x114da) - return true; - return false; - } - if (cp < 0x115b2) - return true; - if (cp < 0x115b2) - return false; - if (cp < 0x115b6) - return true; - if (cp < 0x115b8) - return false; - if (cp < 0x115bc) - return true; - if (cp < 0x115bc) - return false; - if (cp < 0x115be) - return true; - if (cp === 0x115be) - return true; - if (cp < 0x115bf) - return false; - if (cp < 0x115c1) - return true; - if (cp < 0x115dc) - return false; - if (cp < 0x115de) - return true; - if (cp < 0x11630) - return false; - if (cp < 0x11633) - return true; - return false; - } - if (cp < 0x116ad) { - if (cp < 0x11633) - return false; - if (cp < 0x1163b) - return true; - if (cp < 0x1163b) - return false; - if (cp < 0x1163d) - return true; - if (cp === 0x1163d) - return true; - if (cp === 0x1163e) - return true; - if (cp < 0x1163f) - return false; - if (cp < 0x11641) - return true; - if (cp < 0x11650) - return false; - if (cp < 0x1165a) - return true; - if (cp === 0x116ab) - return true; - if (cp === 0x116ac) - return true; - return false; - } - if (cp === 0x116ad) - return true; - if (cp < 0x116ae) - return false; - if (cp < 0x116b0) - return true; - if (cp < 0x116b0) - return false; - if (cp < 0x116b6) - return true; - if (cp === 0x116b6) - return true; - if (cp === 0x116b7) - return true; - if (cp < 0x116c0) - return false; - if (cp < 0x116ca) - return true; - if (cp < 0x1171d) - return false; - if (cp < 0x11720) - return true; - if (cp < 0x11720) - return false; - if (cp < 0x11722) - return true; - if (cp < 0x11722) - return false; - if (cp < 0x11726) - return true; - return false; - } - if (cp < 0x11d3f) { - if (cp < 0x11a98) { - if (cp < 0x11a39) { - if (cp === 0x11726) - return true; - if (cp < 0x11727) - return false; - if (cp < 0x1172c) - return true; - if (cp < 0x11730) - return false; - if (cp < 0x1173a) - return true; - if (cp < 0x118e0) - return false; - if (cp < 0x118ea) - return true; - if (cp < 0x11a01) - return false; - if (cp < 0x11a07) - return true; - if (cp < 0x11a07) - return false; - if (cp < 0x11a09) - return true; - if (cp < 0x11a09) - return false; - if (cp < 0x11a0b) - return true; - if (cp < 0x11a33) - return false; - if (cp < 0x11a39) - return true; - return false; - } - if (cp === 0x11a39) - return true; - if (cp < 0x11a3b) - return false; - if (cp < 0x11a3f) - return true; - if (cp === 0x11a47) - return true; - if (cp < 0x11a51) - return false; - if (cp < 0x11a57) - return true; - if (cp < 0x11a57) - return false; - if (cp < 0x11a59) - return true; - if (cp < 0x11a59) - return false; - if (cp < 0x11a5c) - return true; - if (cp < 0x11a8a) - return false; - if (cp < 0x11a97) - return true; - if (cp === 0x11a97) - return true; - return false; - } - if (cp < 0x11ca9) { - if (cp < 0x11a98) - return false; - if (cp < 0x11a9a) - return true; - if (cp === 0x11c2f) - return true; - if (cp < 0x11c30) - return false; - if (cp < 0x11c37) - return true; - if (cp < 0x11c38) - return false; - if (cp < 0x11c3e) - return true; - if (cp === 0x11c3e) - return true; - if (cp === 0x11c3f) - return true; - if (cp < 0x11c50) - return false; - if (cp < 0x11c5a) - return true; - if (cp < 0x11c92) - return false; - if (cp < 0x11ca8) - return true; - return false; - } - if (cp === 0x11ca9) - return true; - if (cp < 0x11caa) - return false; - if (cp < 0x11cb1) - return true; - if (cp === 0x11cb1) - return true; - if (cp < 0x11cb2) - return false; - if (cp < 0x11cb4) - return true; - if (cp === 0x11cb4) - return true; - if (cp < 0x11cb5) - return false; - if (cp < 0x11cb7) - return true; - if (cp < 0x11d31) - return false; - if (cp < 0x11d37) - return true; - if (cp === 0x11d3a) - return true; - if (cp < 0x11d3c) - return false; - if (cp < 0x11d3e) - return true; - return false; - } - if (cp < 0x1d242) { - if (cp < 0x16f8f) { - if (cp < 0x11d3f) - return false; - if (cp < 0x11d46) - return true; - if (cp === 0x11d47) - return true; - if (cp < 0x11d50) - return false; - if (cp < 0x11d5a) - return true; - if (cp < 0x16a60) - return false; - if (cp < 0x16a6a) - return true; - if (cp < 0x16af0) - return false; - if (cp < 0x16af5) - return true; - if (cp < 0x16b30) - return false; - if (cp < 0x16b37) - return true; - if (cp < 0x16b50) - return false; - if (cp < 0x16b5a) - return true; - if (cp < 0x16f51) - return false; - if (cp < 0x16f7f) - return true; - return false; - } - if (cp < 0x16f93) - return true; - if (cp < 0x1bc9d) - return false; - if (cp < 0x1bc9f) - return true; - if (cp < 0x1d165) - return false; - if (cp < 0x1d167) - return true; - if (cp < 0x1d167) - return false; - if (cp < 0x1d16a) - return true; - if (cp < 0x1d16d) - return false; - if (cp < 0x1d173) - return true; - if (cp < 0x1d17b) - return false; - if (cp < 0x1d183) - return true; - if (cp < 0x1d185) - return false; - if (cp < 0x1d18c) - return true; - if (cp < 0x1d1aa) - return false; - if (cp < 0x1d1ae) - return true; - return false; - } - if (cp < 0x1e000) { - if (cp < 0x1d242) - return false; - if (cp < 0x1d245) - return true; - if (cp < 0x1d7ce) - return false; - if (cp < 0x1d800) - return true; - if (cp < 0x1da00) - return false; - if (cp < 0x1da37) - return true; - if (cp < 0x1da3b) - return false; - if (cp < 0x1da6d) - return true; - if (cp === 0x1da75) - return true; - if (cp === 0x1da84) - return true; - if (cp < 0x1da9b) - return false; - if (cp < 0x1daa0) - return true; - if (cp < 0x1daa1) - return false; - if (cp < 0x1dab0) - return true; - return false; - } - if (cp < 0x1e007) - return true; - if (cp < 0x1e008) - return false; - if (cp < 0x1e019) - return true; - if (cp < 0x1e01b) - return false; - if (cp < 0x1e022) - return true; - if (cp < 0x1e023) - return false; - if (cp < 0x1e025) - return true; - if (cp < 0x1e026) - return false; - if (cp < 0x1e02b) - return true; - if (cp < 0x1e8d0) - return false; - if (cp < 0x1e8d7) - return true; - if (cp < 0x1e944) - return false; - if (cp < 0x1e94b) - return true; - if (cp < 0x1e950) - return false; - if (cp < 0x1e95a) - return true; - if (cp < 0xe0100) - return false; - if (cp < 0xe01f0) - return true; - return false; -} - -const PropertyData = { - $LONE: new Set([ - "ASCII", - "ASCII_Hex_Digit", - "AHex", - "Alphabetic", - "Alpha", - "Any", - "Assigned", - "Bidi_Control", - "Bidi_C", - "Bidi_Mirrored", - "Bidi_M", - "Case_Ignorable", - "CI", - "Cased", - "Changes_When_Casefolded", - "CWCF", - "Changes_When_Casemapped", - "CWCM", - "Changes_When_Lowercased", - "CWL", - "Changes_When_NFKC_Casefolded", - "CWKCF", - "Changes_When_Titlecased", - "CWT", - "Changes_When_Uppercased", - "CWU", - "Dash", - "Default_Ignorable_Code_Point", - "DI", - "Deprecated", - "Dep", - "Diacritic", - "Dia", - "Emoji", - "Emoji_Component", - "Emoji_Modifier", - "Emoji_Modifier_Base", - "Emoji_Presentation", - "Extender", - "Ext", - "Grapheme_Base", - "Gr_Base", - "Grapheme_Extend", - "Gr_Ext", - "Hex_Digit", - "Hex", - "IDS_Binary_Operator", - "IDSB", - "IDS_Trinary_Operator", - "IDST", - "ID_Continue", - "IDC", - "ID_Start", - "IDS", - "Ideographic", - "Ideo", - "Join_Control", - "Join_C", - "Logical_Order_Exception", - "LOE", - "Lowercase", - "Lower", - "Math", - "Noncharacter_Code_Point", - "NChar", - "Pattern_Syntax", - "Pat_Syn", - "Pattern_White_Space", - "Pat_WS", - "Quotation_Mark", - "QMark", - "Radical", - "Regional_Indicator", - "RI", - "Sentence_Terminal", - "STerm", - "Soft_Dotted", - "SD", - "Terminal_Punctuation", - "Term", - "Unified_Ideograph", - "UIdeo", - "Uppercase", - "Upper", - "Variation_Selector", - "VS", - "White_Space", - "space", - "XID_Continue", - "XIDC", - "XID_Start", - "XIDS", - ]), - General_Category: new Set([ - "Cased_Letter", - "LC", - "Close_Punctuation", - "Pe", - "Connector_Punctuation", - "Pc", - "Control", - "Cc", - "cntrl", - "Currency_Symbol", - "Sc", - "Dash_Punctuation", - "Pd", - "Decimal_Number", - "Nd", - "digit", - "Enclosing_Mark", - "Me", - "Final_Punctuation", - "Pf", - "Format", - "Cf", - "Initial_Punctuation", - "Pi", - "Letter", - "L", - "Letter_Number", - "Nl", - "Line_Separator", - "Zl", - "Lowercase_Letter", - "Ll", - "Mark", - "M", - "Combining_Mark", - "Math_Symbol", - "Sm", - "Modifier_Letter", - "Lm", - "Modifier_Symbol", - "Sk", - "Nonspacing_Mark", - "Mn", - "Number", - "N", - "Open_Punctuation", - "Ps", - "Other", - "C", - "Other_Letter", - "Lo", - "Other_Number", - "No", - "Other_Punctuation", - "Po", - "Other_Symbol", - "So", - "Paragraph_Separator", - "Zp", - "Private_Use", - "Co", - "Punctuation", - "P", - "punct", - "Separator", - "Z", - "Space_Separator", - "Zs", - "Spacing_Mark", - "Mc", - "Surrogate", - "Cs", - "Symbol", - "S", - "Titlecase_Letter", - "Lt", - "Unassigned", - "Cn", - "Uppercase_Letter", - "Lu", - ]), - Script: new Set([ - "Adlam", - "Adlm", - "Ahom", - "Anatolian_Hieroglyphs", - "Hluw", - "Arabic", - "Arab", - "Armenian", - "Armn", - "Avestan", - "Avst", - "Balinese", - "Bali", - "Bamum", - "Bamu", - "Bassa_Vah", - "Bass", - "Batak", - "Batk", - "Bengali", - "Beng", - "Bhaiksuki", - "Bhks", - "Bopomofo", - "Bopo", - "Brahmi", - "Brah", - "Braille", - "Brai", - "Buginese", - "Bugi", - "Buhid", - "Buhd", - "Canadian_Aboriginal", - "Cans", - "Carian", - "Cari", - "Caucasian_Albanian", - "Aghb", - "Chakma", - "Cakm", - "Cham", - "Cherokee", - "Cher", - "Common", - "Zyyy", - "Coptic", - "Copt", - "Qaac", - "Cuneiform", - "Xsux", - "Cypriot", - "Cprt", - "Cyrillic", - "Cyrl", - "Deseret", - "Dsrt", - "Devanagari", - "Deva", - "Duployan", - "Dupl", - "Egyptian_Hieroglyphs", - "Egyp", - "Elbasan", - "Elba", - "Ethiopic", - "Ethi", - "Georgian", - "Geor", - "Glagolitic", - "Glag", - "Gothic", - "Goth", - "Grantha", - "Gran", - "Greek", - "Grek", - "Gujarati", - "Gujr", - "Gurmukhi", - "Guru", - "Han", - "Hani", - "Hangul", - "Hang", - "Hanunoo", - "Hano", - "Hatran", - "Hatr", - "Hebrew", - "Hebr", - "Hiragana", - "Hira", - "Imperial_Aramaic", - "Armi", - "Inherited", - "Zinh", - "Qaai", - "Inscriptional_Pahlavi", - "Phli", - "Inscriptional_Parthian", - "Prti", - "Javanese", - "Java", - "Kaithi", - "Kthi", - "Kannada", - "Knda", - "Katakana", - "Kana", - "Kayah_Li", - "Kali", - "Kharoshthi", - "Khar", - "Khmer", - "Khmr", - "Khojki", - "Khoj", - "Khudawadi", - "Sind", - "Lao", - "Laoo", - "Latin", - "Latn", - "Lepcha", - "Lepc", - "Limbu", - "Limb", - "Linear_A", - "Lina", - "Linear_B", - "Linb", - "Lisu", - "Lycian", - "Lyci", - "Lydian", - "Lydi", - "Mahajani", - "Mahj", - "Malayalam", - "Mlym", - "Mandaic", - "Mand", - "Manichaean", - "Mani", - "Marchen", - "Marc", - "Masaram_Gondi", - "Gonm", - "Meetei_Mayek", - "Mtei", - "Mende_Kikakui", - "Mend", - "Meroitic_Cursive", - "Merc", - "Meroitic_Hieroglyphs", - "Mero", - "Miao", - "Plrd", - "Modi", - "Mongolian", - "Mong", - "Mro", - "Mroo", - "Multani", - "Mult", - "Myanmar", - "Mymr", - "Nabataean", - "Nbat", - "New_Tai_Lue", - "Talu", - "Newa", - "Nko", - "Nkoo", - "Nushu", - "Nshu", - "Ogham", - "Ogam", - "Ol_Chiki", - "Olck", - "Old_Hungarian", - "Hung", - "Old_Italic", - "Ital", - "Old_North_Arabian", - "Narb", - "Old_Permic", - "Perm", - "Old_Persian", - "Xpeo", - "Old_South_Arabian", - "Sarb", - "Old_Turkic", - "Orkh", - "Oriya", - "Orya", - "Osage", - "Osge", - "Osmanya", - "Osma", - "Pahawh_Hmong", - "Hmng", - "Palmyrene", - "Palm", - "Pau_Cin_Hau", - "Pauc", - "Phags_Pa", - "Phag", - "Phoenician", - "Phnx", - "Psalter_Pahlavi", - "Phlp", - "Rejang", - "Rjng", - "Runic", - "Runr", - "Samaritan", - "Samr", - "Saurashtra", - "Saur", - "Sharada", - "Shrd", - "Shavian", - "Shaw", - "Siddham", - "Sidd", - "SignWriting", - "Sgnw", - "Sinhala", - "Sinh", - "Sora_Sompeng", - "Sora", - "Soyombo", - "Soyo", - "Sundanese", - "Sund", - "Syloti_Nagri", - "Sylo", - "Syriac", - "Syrc", - "Tagalog", - "Tglg", - "Tagbanwa", - "Tagb", - "Tai_Le", - "Tale", - "Tai_Tham", - "Lana", - "Tai_Viet", - "Tavt", - "Takri", - "Takr", - "Tamil", - "Taml", - "Tangut", - "Tang", - "Telugu", - "Telu", - "Thaana", - "Thaa", - "Thai", - "Tibetan", - "Tibt", - "Tifinagh", - "Tfng", - "Tirhuta", - "Tirh", - "Ugaritic", - "Ugar", - "Vai", - "Vaii", - "Warang_Citi", - "Wara", - "Yi", - "Yiii", - "Zanabazar_Square", - "Zanb", - ]), -}; -PropertyData.gc = PropertyData.General_Category; -PropertyData.sc = PropertyData.Script_Extensions = PropertyData.scx = - PropertyData.Script; - -const Backspace = 0x08; -const CharacterTabulation = 0x09; -const LineFeed = 0x0a; -const LineTabulation = 0x0b; -const FormFeed = 0x0c; -const CarriageReturn = 0x0d; -const ExclamationMark = 0x21; -const DollarSign = 0x24; -const LeftParenthesis = 0x28; -const RightParenthesis = 0x29; -const Asterisk = 0x2a; -const PlusSign = 0x2b; -const Comma = 0x2c; -const HyphenMinus = 0x2d; -const FullStop = 0x2e; -const Solidus = 0x2f; -const DigitZero = 0x30; -const DigitOne = 0x31; -const DigitSeven = 0x37; -const DigitNine = 0x39; -const Colon = 0x3a; -const LessThanSign = 0x3c; -const EqualsSign = 0x3d; -const GreaterThanSign = 0x3e; -const QuestionMark = 0x3f; -const LatinCapitalLetterA = 0x41; -const LatinCapitalLetterB = 0x42; -const LatinCapitalLetterD = 0x44; -const LatinCapitalLetterF = 0x46; -const LatinCapitalLetterP = 0x50; -const LatinCapitalLetterS = 0x53; -const LatinCapitalLetterW = 0x57; -const LatinCapitalLetterZ = 0x5a; -const LowLine = 0x5f; -const LatinSmallLetterA = 0x61; -const LatinSmallLetterB = 0x62; -const LatinSmallLetterC = 0x63; -const LatinSmallLetterD = 0x64; -const LatinSmallLetterF = 0x66; -const LatinSmallLetterG = 0x67; -const LatinSmallLetterI = 0x69; -const LatinSmallLetterK = 0x6b; -const LatinSmallLetterM = 0x6d; -const LatinSmallLetterN = 0x6e; -const LatinSmallLetterP = 0x70; -const LatinSmallLetterR = 0x72; -const LatinSmallLetterS = 0x73; -const LatinSmallLetterT = 0x74; -const LatinSmallLetterU = 0x75; -const LatinSmallLetterV = 0x76; -const LatinSmallLetterW = 0x77; -const LatinSmallLetterX = 0x78; -const LatinSmallLetterY = 0x79; -const LatinSmallLetterZ = 0x7a; -const LeftSquareBracket = 0x5b; -const ReverseSolidus = 0x5c; -const RightSquareBracket = 0x5d; -const CircumflexAccent = 0x5e; -const LeftCurlyBracket = 0x7b; -const VerticalLine = 0x7c; -const RightCurlyBracket = 0x7d; -const ZeroWidthNonJoiner = 0x200c; -const ZeroWidthJoiner = 0x200d; -const LineSeparator = 0x2028; -const ParagraphSeparator = 0x2029; -const MinCodePoint = 0x00; -const MaxCodePoint = 0x10ffff; -function isLatinLetter(code) { - return ((code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ) || - (code >= LatinSmallLetterA && code <= LatinSmallLetterZ)); -} -function isDecimalDigit(code) { - return code >= DigitZero && code <= DigitNine; -} -function isOctalDigit(code) { - return code >= DigitZero && code <= DigitSeven; -} -function isHexDigit(code) { - return ((code >= DigitZero && code <= DigitNine) || - (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) || - (code >= LatinSmallLetterA && code <= LatinSmallLetterF)); -} -function isLineTerminator(code) { - return (code === LineFeed || - code === CarriageReturn || - code === LineSeparator || - code === ParagraphSeparator); -} -function isValidUnicode(code) { - return code >= MinCodePoint && code <= MaxCodePoint; -} -function digitToInt(code) { - if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) { - return code - LatinSmallLetterA + 10; - } - if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) { - return code - LatinCapitalLetterA + 10; - } - return code - DigitZero; -} - -function isSyntaxCharacter(cp) { - return (cp === CircumflexAccent || - cp === DollarSign || - cp === ReverseSolidus || - cp === FullStop || - cp === Asterisk || - cp === PlusSign || - cp === QuestionMark || - cp === LeftParenthesis || - cp === RightParenthesis || - cp === LeftSquareBracket || - cp === RightSquareBracket || - cp === LeftCurlyBracket || - cp === RightCurlyBracket || - cp === VerticalLine); -} -function isRegExpIdentifierStart(cp) { - return isIdStart(cp) || cp === DollarSign || cp === LowLine; -} -function isRegExpIdentifierPart(cp) { - return (isIdContinue(cp) || - cp === DollarSign || - cp === LowLine || - cp === ZeroWidthNonJoiner || - cp === ZeroWidthJoiner); -} -function isUnicodePropertyNameCharacter(cp) { - return isLatinLetter(cp) || cp === LowLine; -} -function isUnicodePropertyValueCharacter(cp) { - return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp); -} -function isValidUnicodeProperty(name, value) { - return PropertyData.hasOwnProperty(name) && PropertyData[name].has(value); -} -function isValidUnicodePropertyName(name) { - return PropertyData.$LONE.has(name); -} -class RegExpValidator { - constructor(options) { - this._reader = new Reader(); - this._uFlag = false; - this._nFlag = false; - this._lastIntValue = 0; - this._lastMinValue = 0; - this._lastMaxValue = 0; - this._lastStrValue = ""; - this._lastKeyValue = ""; - this._lastValValue = ""; - this._lastAssertionIsQuantifiable = false; - this._numCapturingParens = 0; - this._groupNames = new Set(); - this._backreferenceNames = new Set(); - this._options = options || {}; - } - validateLiteral(source, start = 0, end = source.length) { - this._uFlag = this._nFlag = false; - this.reset(source, start, end); - this.onLiteralEnter(start); - if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) { - const flagStart = this.index; - const uFlag = source.indexOf("u", flagStart) !== -1; - this.validateFlags(source, flagStart, end); - this.validatePattern(source, start + 1, flagStart - 1, uFlag); - } - else if (start >= end) { - this.raise("Empty"); - } - else { - const c = String.fromCodePoint(this.currentCodePoint); - this.raise(`Unexpected character '${c}'`); - } - this.onLiteralLeave(start, end); - } - validateFlags(source, start = 0, end = source.length) { - const existingFlags = new Set(); - let global = false; - let ignoreCase = false; - let multiline = false; - let sticky = false; - let unicode = false; - let dotAll = false; - for (let i = start; i < end; ++i) { - const flag = source.charCodeAt(i); - if (existingFlags.has(flag)) { - this.raise(`Duplicated flag '${source[i]}'`); - } - existingFlags.add(flag); - if (flag === LatinSmallLetterG) { - global = true; - } - else if (flag === LatinSmallLetterI) { - ignoreCase = true; - } - else if (flag === LatinSmallLetterM) { - multiline = true; - } - else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) { - unicode = true; - } - else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) { - sticky = true; - } - else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) { - dotAll = true; - } - else { - this.raise(`Invalid flag '${source[i]}'`); - } - } - this.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll); - } - validatePattern(source, start = 0, end = source.length, uFlag = false) { - this._uFlag = uFlag && this.ecmaVersion >= 2015; - this._nFlag = uFlag && this.ecmaVersion >= 2018; - this.reset(source, start, end); - this.pattern(); - if (!this._nFlag && - this.ecmaVersion >= 2018 && - this._groupNames.size > 0) { - this._nFlag = true; - this.rewind(start); - this.pattern(); - } - } - get strict() { - return Boolean(this._options.strict || this._uFlag); - } - get ecmaVersion() { - return this._options.ecmaVersion || 2018; - } - onLiteralEnter(start) { - if (this._options.onLiteralEnter) { - this._options.onLiteralEnter(start); - } - } - onLiteralLeave(start, end) { - if (this._options.onLiteralLeave) { - this._options.onLiteralLeave(start, end); - } - } - onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll) { - if (this._options.onFlags) { - this._options.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll); - } - } - onPatternEnter(start) { - if (this._options.onPatternEnter) { - this._options.onPatternEnter(start); - } - } - onPatternLeave(start, end) { - if (this._options.onPatternLeave) { - this._options.onPatternLeave(start, end); - } - } - onDisjunctionEnter(start) { - if (this._options.onDisjunctionEnter) { - this._options.onDisjunctionEnter(start); - } - } - onDisjunctionLeave(start, end) { - if (this._options.onDisjunctionLeave) { - this._options.onDisjunctionLeave(start, end); - } - } - onAlternativeEnter(start, index) { - if (this._options.onAlternativeEnter) { - this._options.onAlternativeEnter(start, index); - } - } - onAlternativeLeave(start, end, index) { - if (this._options.onAlternativeLeave) { - this._options.onAlternativeLeave(start, end, index); - } - } - onGroupEnter(start) { - if (this._options.onGroupEnter) { - this._options.onGroupEnter(start); - } - } - onGroupLeave(start, end) { - if (this._options.onGroupLeave) { - this._options.onGroupLeave(start, end); - } - } - onCapturingGroupEnter(start, name) { - if (this._options.onCapturingGroupEnter) { - this._options.onCapturingGroupEnter(start, name); - } - } - onCapturingGroupLeave(start, end, name) { - if (this._options.onCapturingGroupLeave) { - this._options.onCapturingGroupLeave(start, end, name); - } - } - onQuantifier(start, end, min, max, greedy) { - if (this._options.onQuantifier) { - this._options.onQuantifier(start, end, min, max, greedy); - } - } - onLookaroundAssertionEnter(start, kind, negate) { - if (this._options.onLookaroundAssertionEnter) { - this._options.onLookaroundAssertionEnter(start, kind, negate); - } - } - onLookaroundAssertionLeave(start, end, kind, negate) { - if (this._options.onLookaroundAssertionLeave) { - this._options.onLookaroundAssertionLeave(start, end, kind, negate); - } - } - onEdgeAssertion(start, end, kind) { - if (this._options.onEdgeAssertion) { - this._options.onEdgeAssertion(start, end, kind); - } - } - onWordBoundaryAssertion(start, end, kind, negate) { - if (this._options.onWordBoundaryAssertion) { - this._options.onWordBoundaryAssertion(start, end, kind, negate); - } - } - onAnyCharacterSet(start, end, kind) { - if (this._options.onAnyCharacterSet) { - this._options.onAnyCharacterSet(start, end, kind); - } - } - onEscapeCharacterSet(start, end, kind, negate) { - if (this._options.onEscapeCharacterSet) { - this._options.onEscapeCharacterSet(start, end, kind, negate); - } - } - onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) { - if (this._options.onUnicodePropertyCharacterSet) { - this._options.onUnicodePropertyCharacterSet(start, end, kind, key, value, negate); - } - } - onCharacter(start, end, value) { - if (this._options.onCharacter) { - this._options.onCharacter(start, end, value); - } - } - onBackreference(start, end, ref) { - if (this._options.onBackreference) { - this._options.onBackreference(start, end, ref); - } - } - onCharacterClassEnter(start, negate) { - if (this._options.onCharacterClassEnter) { - this._options.onCharacterClassEnter(start, negate); - } - } - onCharacterClassLeave(start, end, negate) { - if (this._options.onCharacterClassLeave) { - this._options.onCharacterClassLeave(start, end, negate); - } - } - onCharacterClassRange(start, end, min, max) { - if (this._options.onCharacterClassRange) { - this._options.onCharacterClassRange(start, end, min, max); - } - } - get source() { - return this._reader.source; - } - get index() { - return this._reader.index; - } - get currentCodePoint() { - return this._reader.currentCodePoint; - } - get nextCodePoint() { - return this._reader.nextCodePoint; - } - get nextCodePoint2() { - return this._reader.nextCodePoint2; - } - get nextCodePoint3() { - return this._reader.nextCodePoint3; - } - reset(source, start, end) { - this._reader.reset(source, start, end, this._uFlag); - } - rewind(index) { - this._reader.rewind(index); - } - advance() { - this._reader.advance(); - } - eat(cp) { - return this._reader.eat(cp); - } - eat2(cp1, cp2) { - return this._reader.eat2(cp1, cp2); - } - eat3(cp1, cp2, cp3) { - return this._reader.eat3(cp1, cp2, cp3); - } - raise(message) { - throw new RegExpSyntaxError(this.source, this._uFlag, this.index, message); - } - eatRegExpBody() { - const start = this.index; - let inClass = false; - let escaped = false; - for (;;) { - const cp = this.currentCodePoint; - if (cp === -1 || isLineTerminator(cp)) { - const kind = inClass ? "character class" : "regular expression"; - this.raise(`Unterminated ${kind}`); - } - if (escaped) { - escaped = false; - } - else if (cp === ReverseSolidus) { - escaped = true; - } - else if (cp === LeftSquareBracket) { - inClass = true; - } - else if (cp === RightSquareBracket) { - inClass = false; - } - else if ((cp === Solidus && !inClass) || - (cp === Asterisk && this.index === start)) { - break; - } - this.advance(); - } - return this.index !== start; - } - pattern() { - const start = this.index; - this._numCapturingParens = this.countCapturingParens(); - this._groupNames.clear(); - this._backreferenceNames.clear(); - this.onPatternEnter(start); - this.disjunction(); - const cp = this.currentCodePoint; - if (this.currentCodePoint !== -1) { - if (cp === RightParenthesis) { - this.raise("Unmatched ')'"); - } - if (cp === RightSquareBracket || cp === RightCurlyBracket) { - this.raise("Lone quantifier brackets"); - } - const c = String.fromCodePoint(cp); - this.raise(`Unexpected character '${c}'`); - } - this._backreferenceNames.forEach(name => { - if (!this._groupNames.has(name)) { - this.raise("Invalid named capture referenced"); - } - }); - this.onPatternLeave(start, this.index); - } - countCapturingParens() { - const start = this.index; - let inClass = false; - let escaped = false; - let count = 0; - let cp = 0; - while ((cp = this.currentCodePoint) !== -1) { - if (escaped) { - escaped = false; - } - else if (cp === ReverseSolidus) { - escaped = true; - } - else if (cp === LeftSquareBracket) { - inClass = true; - } - else if (cp === RightSquareBracket) { - inClass = false; - } - else if (cp === LeftParenthesis && - !inClass && - (this.nextCodePoint !== QuestionMark || - (this.nextCodePoint2 === LessThanSign && - this.nextCodePoint3 !== EqualsSign && - this.nextCodePoint3 !== ExclamationMark))) { - count += 1; - } - this.advance(); - } - this.rewind(start); - return count; - } - disjunction() { - const start = this.index; - let i = 0; - this.onDisjunctionEnter(start); - this.alternative(i++); - while (this.eat(VerticalLine)) { - this.alternative(i++); - } - if (this.eatQuantifier(true)) { - this.raise("Nothing to repeat"); - } - if (this.eat(LeftCurlyBracket)) { - this.raise("Lone quantifier brackets"); - } - this.onDisjunctionLeave(start, this.index); - } - alternative(i) { - const start = this.index; - this.onAlternativeEnter(start, i); - while (this.currentCodePoint !== -1 && this.eatTerm()) - ; - this.onAlternativeLeave(start, this.index, i); - } - eatTerm() { - if (this.eatAssertion()) { - if (this._lastAssertionIsQuantifiable) { - this.eatQuantifier(); - } - return true; - } - if (this.strict ? this.eatAtom() : this.eatExtendedAtom()) { - this.eatQuantifier(); - return true; - } - return false; - } - eatAssertion() { - const start = this.index; - this._lastAssertionIsQuantifiable = false; - if (this.eat(CircumflexAccent)) { - this.onEdgeAssertion(start, this.index, "start"); - return true; - } - if (this.eat(DollarSign)) { - this.onEdgeAssertion(start, this.index, "end"); - return true; - } - if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) { - this.onWordBoundaryAssertion(start, this.index, "word", true); - return true; - } - if (this.eat2(ReverseSolidus, LatinSmallLetterB)) { - this.onWordBoundaryAssertion(start, this.index, "word", false); - return true; - } - if (this.eat2(LeftParenthesis, QuestionMark)) { - const lookbehind = this.ecmaVersion >= 2018 && this.eat(LessThanSign); - let negate = false; - if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) { - const kind = lookbehind ? "lookbehind" : "lookahead"; - this.onLookaroundAssertionEnter(start, kind, negate); - this.disjunction(); - if (!this.eat(RightParenthesis)) { - this.raise("Unterminated group"); - } - this._lastAssertionIsQuantifiable = !lookbehind && !this.strict; - this.onLookaroundAssertionLeave(start, this.index, kind, negate); - return true; - } - this.rewind(start); - } - return false; - } - eatQuantifier(noError = false) { - const start = this.index; - let min = 0; - let max = 0; - let greedy = false; - if (this.eat(Asterisk)) { - min = 0; - max = Number.POSITIVE_INFINITY; - } - else if (this.eat(PlusSign)) { - min = 1; - max = Number.POSITIVE_INFINITY; - } - else if (this.eat(QuestionMark)) { - min = 0; - max = 1; - } - else if (this.eatBracedQuantifier(noError)) { - min = this._lastMinValue; - max = this._lastMaxValue; - } - else { - return false; - } - greedy = !this.eat(QuestionMark); - if (!noError) { - this.onQuantifier(start, this.index, min, max, greedy); - } - return true; - } - eatBracedQuantifier(noError) { - const start = this.index; - if (this.eat(LeftCurlyBracket)) { - this._lastMinValue = 0; - this._lastMaxValue = Number.POSITIVE_INFINITY; - if (this.eatDecimalDigits()) { - this._lastMinValue = this._lastMaxValue = this._lastIntValue; - if (this.eat(Comma)) { - this._lastMaxValue = this.eatDecimalDigits() - ? this._lastIntValue - : Number.POSITIVE_INFINITY; - } - if (this.eat(RightCurlyBracket)) { - if (!noError && this._lastMaxValue < this._lastMinValue) { - this.raise("numbers out of order in {} quantifier"); - } - return true; - } - } - if (!noError && this.strict) { - this.raise("Incomplete quantifier"); - } - this.rewind(start); - } - return false; - } - eatAtom() { - return (this.eatPatternCharacter() || - this.eatDot() || - this.eatReverseSolidusAtomEscape() || - this.eatCharacterClass() || - this.eatUncapturingGroup() || - this.eatCapturingGroup()); - } - eatDot() { - if (this.eat(FullStop)) { - this.onAnyCharacterSet(this.index - 1, this.index, "any"); - return true; - } - return false; - } - eatReverseSolidusAtomEscape() { - const start = this.index; - if (this.eat(ReverseSolidus)) { - if (this.eatAtomEscape()) { - return true; - } - this.rewind(start); - } - return false; - } - eatUncapturingGroup() { - const start = this.index; - if (this.eat3(LeftParenthesis, QuestionMark, Colon)) { - this.onGroupEnter(start); - this.disjunction(); - if (!this.eat(RightParenthesis)) { - this.raise("Unterminated group"); - } - this.onGroupLeave(start, this.index); - return true; - } - return false; - } - eatCapturingGroup() { - const start = this.index; - if (this.eat(LeftParenthesis)) { - this._lastStrValue = ""; - if (this.ecmaVersion >= 2018) { - this.groupSpecifier(); - } - else if (this.currentCodePoint === QuestionMark) { - this.raise("Invalid group"); - } - const name = this._lastStrValue || null; - this.onCapturingGroupEnter(start, name); - this.disjunction(); - if (!this.eat(RightParenthesis)) { - this.raise("Unterminated group"); - } - this.onCapturingGroupLeave(start, this.index, name); - return true; - } - return false; - } - eatExtendedAtom() { - return (this.eatDot() || - this.eatReverseSolidusAtomEscape() || - this.eatCharacterClass() || - this.eatUncapturingGroup() || - this.eatCapturingGroup() || - this.eatInvalidBracedQuantifier() || - this.eatExtendedPatternCharacter()); - } - eatInvalidBracedQuantifier() { - if (this.eatBracedQuantifier(true)) { - this.raise("Nothing to repeat"); - } - return false; - } - eatSyntaxCharacter() { - if (isSyntaxCharacter(this.currentCodePoint)) { - this._lastIntValue = this.currentCodePoint; - this.advance(); - return true; - } - return false; - } - eatPatternCharacter() { - const start = this.index; - const cp = this.currentCodePoint; - if (cp !== -1 && !isSyntaxCharacter(cp)) { - this.advance(); - this.onCharacter(start, this.index, cp); - return true; - } - return false; - } - eatExtendedPatternCharacter() { - const start = this.index; - const cp = this.currentCodePoint; - if (cp !== -1 && - cp !== CircumflexAccent && - cp !== DollarSign && - cp !== FullStop && - cp !== Asterisk && - cp !== PlusSign && - cp !== QuestionMark && - cp !== LeftParenthesis && - cp !== RightParenthesis && - cp !== LeftSquareBracket && - cp !== VerticalLine) { - this.advance(); - this.onCharacter(start, this.index, cp); - return true; - } - return false; - } - groupSpecifier() { - this._lastStrValue = ""; - if (this.eat(QuestionMark)) { - if (this.eatGroupName()) { - if (!this._groupNames.has(this._lastStrValue)) { - this._groupNames.add(this._lastStrValue); - return; - } - this.raise("Duplicate capture group name"); - } - this.raise("Invalid group"); - } - } - eatGroupName() { - this._lastStrValue = ""; - if (this.eat(LessThanSign)) { - if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) { - return true; - } - this.raise("Invalid capture group name"); - } - return false; - } - eatRegExpIdentifierName() { - this._lastStrValue = ""; - if (this.eatRegExpIdentifierStart()) { - this._lastStrValue += String.fromCodePoint(this._lastIntValue); - while (this.eatRegExpIdentifierPart()) { - this._lastStrValue += String.fromCodePoint(this._lastIntValue); - } - return true; - } - return false; - } - eatRegExpIdentifierStart() { - const start = this.index; - let cp = this.currentCodePoint; - this.advance(); - if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) { - cp = this._lastIntValue; - } - if (isRegExpIdentifierStart(cp)) { - this._lastIntValue = cp; - return true; - } - if (this.index !== start) { - this.rewind(start); - } - return false; - } - eatRegExpIdentifierPart() { - const start = this.index; - let cp = this.currentCodePoint; - this.advance(); - if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) { - cp = this._lastIntValue; - } - if (isRegExpIdentifierPart(cp)) { - this._lastIntValue = cp; - return true; - } - if (this.index !== start) { - this.rewind(start); - } - return false; - } - eatAtomEscape() { - if (this.eatBackreference() || - this.eatCharacterClassEscape() || - this.eatCharacterEscape() || - (this._nFlag && this.eatKGroupName())) { - return true; - } - if (this.strict || this._uFlag) { - this.raise("Invalid escape"); - } - return false; - } - eatBackreference() { - const start = this.index; - if (this.eatDecimalEscape()) { - const n = this._lastIntValue; - if (n <= this._numCapturingParens) { - this.onBackreference(start - 1, this.index, n); - return true; - } - if (this.strict) { - this.raise("Invalid escape"); - } - this.rewind(start); - } - return false; - } - eatKGroupName() { - const start = this.index; - if (this.eat(LatinSmallLetterK)) { - if (this.eatGroupName()) { - const groupName = this._lastStrValue; - this._backreferenceNames.add(groupName); - this.onBackreference(start - 1, this.index, groupName); - return true; - } - this.raise("Invalid named reference"); - } - return false; - } - eatCharacterEscape() { - const start = this.index; - if (this.eatControlEscape() || - this.eatCControlLetter() || - this.eatZero() || - this.eatHexEscapeSequence() || - this.eatRegExpUnicodeEscapeSequence() || - (!this.strict && this.eatLegacyOctalEscapeSequence()) || - this.eatIdentityEscape()) { - this.onCharacter(start - 1, this.index, this._lastIntValue); - return true; - } - return false; - } - eatCControlLetter() { - const start = this.index; - if (this.eat(LatinSmallLetterC)) { - if (this.eatControlLetter()) { - return true; - } - this.rewind(start); - } - return false; - } - eatZero() { - if (this.currentCodePoint === DigitZero && - !isDecimalDigit(this.nextCodePoint)) { - this._lastIntValue = 0; - this.advance(); - return true; - } - return false; - } - eatControlEscape() { - if (this.eat(LatinSmallLetterT)) { - this._lastIntValue = CharacterTabulation; - return true; - } - if (this.eat(LatinSmallLetterN)) { - this._lastIntValue = LineFeed; - return true; - } - if (this.eat(LatinSmallLetterV)) { - this._lastIntValue = LineTabulation; - return true; - } - if (this.eat(LatinSmallLetterF)) { - this._lastIntValue = FormFeed; - return true; - } - if (this.eat(LatinSmallLetterR)) { - this._lastIntValue = CarriageReturn; - return true; - } - return false; - } - eatControlLetter() { - const cp = this.currentCodePoint; - if (isLatinLetter(cp)) { - this.advance(); - this._lastIntValue = cp % 0x20; - return true; - } - return false; - } - eatRegExpUnicodeEscapeSequence() { - const start = this.index; - if (this.eat(LatinSmallLetterU)) { - if (this.eatFixedHexDigits(4)) { - const lead = this._lastIntValue; - if (this._uFlag && lead >= 0xd800 && lead <= 0xdbff) { - const leadSurrogateEnd = this.index; - if (this.eat(ReverseSolidus) && - this.eat(LatinSmallLetterU) && - this.eatFixedHexDigits(4)) { - const trail = this._lastIntValue; - if (trail >= 0xdc00 && trail <= 0xdfff) { - this._lastIntValue = - (lead - 0xd800) * 0x400 + - (trail - 0xdc00) + - 0x10000; - return true; - } - } - this.rewind(leadSurrogateEnd); - this._lastIntValue = lead; - } - return true; - } - if (this._uFlag && - this.eat(LeftCurlyBracket) && - this.eatHexDigits() && - this.eat(RightCurlyBracket) && - isValidUnicode(this._lastIntValue)) { - return true; - } - if (this.strict || this._uFlag) { - this.raise("Invalid unicode escape"); - } - this.rewind(start); - } - return false; - } - eatIdentityEscape() { - if (this._uFlag) { - if (this.eatSyntaxCharacter()) { - return true; - } - if (this.eat(Solidus)) { - this._lastIntValue = Solidus; - return true; - } - return false; - } - if (this.isValidIdentityEscape(this.currentCodePoint)) { - this._lastIntValue = this.currentCodePoint; - this.advance(); - return true; - } - return false; - } - isValidIdentityEscape(cp) { - if (cp === -1) { - return false; - } - if (this.strict) { - return !isIdContinue(cp); - } - return (cp !== LatinSmallLetterC && - (!this._nFlag || cp !== LatinSmallLetterK)); - } - eatDecimalEscape() { - this._lastIntValue = 0; - let cp = this.currentCodePoint; - if (cp >= DigitOne && cp <= DigitNine) { - do { - this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero); - this.advance(); - } while ((cp = this.currentCodePoint) >= DigitZero && - cp <= DigitNine); - return true; - } - return false; - } - eatCharacterClassEscape() { - const start = this.index; - if (this.eat(LatinSmallLetterD)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "digit", false); - return true; - } - if (this.eat(LatinCapitalLetterD)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "digit", true); - return true; - } - if (this.eat(LatinSmallLetterS)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "space", false); - return true; - } - if (this.eat(LatinCapitalLetterS)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "space", true); - return true; - } - if (this.eat(LatinSmallLetterW)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "word", false); - return true; - } - if (this.eat(LatinCapitalLetterW)) { - this._lastIntValue = -1; - this.onEscapeCharacterSet(start - 1, this.index, "word", true); - return true; - } - let negate = false; - if (this._uFlag && - this.ecmaVersion >= 2018 && - (this.eat(LatinSmallLetterP) || - (negate = this.eat(LatinCapitalLetterP)))) { - this._lastIntValue = -1; - if (this.eat(LeftCurlyBracket) && - this.eatUnicodePropertyValueExpression() && - this.eat(RightCurlyBracket)) { - this.onUnicodePropertyCharacterSet(start - 1, this.index, "property", this._lastKeyValue, this._lastValValue || null, negate); - return true; - } - this.raise("Invalid property name"); - } - return false; - } - eatUnicodePropertyValueExpression() { - const start = this.index; - if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) { - this._lastKeyValue = this._lastStrValue; - if (this.eatUnicodePropertyValue()) { - this._lastValValue = this._lastStrValue; - if (isValidUnicodeProperty(this._lastKeyValue, this._lastValValue)) { - return true; - } - this.raise("Invalid property name"); - } - } - this.rewind(start); - if (this.eatLoneUnicodePropertyNameOrValue()) { - const nameOrValue = this._lastStrValue; - if (isValidUnicodeProperty("General_Category", nameOrValue)) { - this._lastKeyValue = "General_Category"; - this._lastValValue = nameOrValue; - return true; - } - if (isValidUnicodePropertyName(nameOrValue)) { - this._lastKeyValue = nameOrValue; - this._lastValValue = ""; - return true; - } - this.raise("Invalid property name"); - } - return false; - } - eatUnicodePropertyName() { - this._lastStrValue = ""; - while (isUnicodePropertyNameCharacter(this.currentCodePoint)) { - this._lastStrValue += String.fromCodePoint(this.currentCodePoint); - this.advance(); - } - return this._lastStrValue !== ""; - } - eatUnicodePropertyValue() { - this._lastStrValue = ""; - while (isUnicodePropertyValueCharacter(this.currentCodePoint)) { - this._lastStrValue += String.fromCodePoint(this.currentCodePoint); - this.advance(); - } - return this._lastStrValue !== ""; - } - eatLoneUnicodePropertyNameOrValue() { - return this.eatUnicodePropertyValue(); - } - eatCharacterClass() { - const start = this.index; - if (this.eat(LeftSquareBracket)) { - const negate = this.eat(CircumflexAccent); - this.onCharacterClassEnter(start, negate); - this.classRanges(); - if (!this.eat(RightSquareBracket)) { - this.raise("Unterminated character class"); - } - this.onCharacterClassLeave(start, this.index, negate); - return true; - } - return false; - } - classRanges() { - let start = this.index; - while (this.eatClassAtom()) { - const left = this._lastIntValue; - const hyphenStart = this.index; - if (this.eat(HyphenMinus)) { - this.onCharacter(hyphenStart, this.index, HyphenMinus); - if (this.eatClassAtom()) { - const right = this._lastIntValue; - if (left === -1 || right === -1) { - if (this.strict) { - this.raise("Invalid character class"); - } - } - else if (left > right) { - this.raise("Range out of order in character class"); - } - else { - this.onCharacterClassRange(start, this.index, left, right); - } - } - } - start = this.index; - } - } - eatClassAtom() { - const start = this.index; - if (this.eat(ReverseSolidus)) { - if (this.eatClassEscape()) { - return true; - } - if (this._uFlag) { - this.raise("Invalid escape"); - } - this.rewind(start); - } - const cp = this.currentCodePoint; - if (cp !== -1 && cp !== RightSquareBracket) { - this.advance(); - this._lastIntValue = cp; - this.onCharacter(start, this.index, cp); - return true; - } - return false; - } - eatClassEscape() { - const start = this.index; - if (this.eat(LatinSmallLetterB)) { - this._lastIntValue = Backspace; - this.onCharacter(start - 1, this.index, Backspace); - return true; - } - if (this._uFlag && this.eat(HyphenMinus)) { - this._lastIntValue = HyphenMinus; - this.onCharacter(start - 1, this.index, HyphenMinus); - return true; - } - if (!this._uFlag && this.eat(LatinSmallLetterC)) { - if (this.eatClassControlLetter()) { - this.onCharacter(start - 1, this.index, this._lastIntValue); - return true; - } - this.rewind(start); - } - return this.eatCharacterClassEscape() || this.eatCharacterEscape(); - } - eatClassControlLetter() { - const cp = this.currentCodePoint; - if (isDecimalDigit(cp) || cp === LowLine) { - this.advance(); - this._lastIntValue = cp % 0x20; - return true; - } - return false; - } - eatHexEscapeSequence() { - const start = this.index; - if (this.eat(LatinSmallLetterX)) { - if (this.eatFixedHexDigits(2)) { - return true; - } - if (this._uFlag) { - this.raise("Invalid escape"); - } - this.rewind(start); - } - return false; - } - eatDecimalDigits() { - const start = this.index; - this._lastIntValue = 0; - while (isDecimalDigit(this.currentCodePoint)) { - this._lastIntValue = - 10 * this._lastIntValue + digitToInt(this.currentCodePoint); - this.advance(); - } - return this.index !== start; - } - eatHexDigits() { - const start = this.index; - this._lastIntValue = 0; - while (isHexDigit(this.currentCodePoint)) { - this._lastIntValue = - 16 * this._lastIntValue + digitToInt(this.currentCodePoint); - this.advance(); - } - return this.index !== start; - } - eatLegacyOctalEscapeSequence() { - if (this.eatOctalDigit()) { - const n1 = this._lastIntValue; - if (this.eatOctalDigit()) { - const n2 = this._lastIntValue; - if (n1 <= 3 && this.eatOctalDigit()) { - this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue; - } - else { - this._lastIntValue = n1 * 8 + n2; - } - } - else { - this._lastIntValue = n1; - } - return true; - } - return false; - } - eatOctalDigit() { - const cp = this.currentCodePoint; - if (isOctalDigit(cp)) { - this.advance(); - this._lastIntValue = cp - DigitZero; - return true; - } - this._lastIntValue = 0; - return false; - } - eatFixedHexDigits(length) { - const start = this.index; - this._lastIntValue = 0; - for (let i = 0; i < length; ++i) { - const cp = this.currentCodePoint; - if (!isHexDigit(cp)) { - this.rewind(start); - return false; - } - this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp); - this.advance(); - } - return true; - } -} - -const DummyPattern = {}; -const DummyFlags = {}; -const DummyCapturingGroup = {}; -function elementsToAlternative(elements, parent) { - for (const element of elements) { - assert(element.type !== "Disjunction"); - element.parent = parent; - } - return elements; -} -function addAlternativeElement(parent, node) { - if (parent.type === "Disjunction") { - last(parent.alternatives).push(node); - } - else { - parent.elements.push(node); - } -} -function addCommonElement(parent, node) { - if (parent.type === "Disjunction") { - last(parent.alternatives).push(node); - } - else if (parent.type === "CharacterClass") { - parent.elements.push(node); - } - else { - parent.elements.push(node); - } -} -class RegExpParserState { - constructor(options) { - this._node = DummyPattern; - this._flags = DummyFlags; - this._disjunctionStartStack = []; - this._backreferences = []; - this._capturingGroups = []; - this.source = ""; - this.strict = Boolean(options && options.strict); - this.ecmaVersion = (options && options.ecmaVersion) || 2018; - } - get pattern() { - if (this._node.type !== "Pattern") { - throw new Error("UnknownError"); - } - return this._node; - } - get flags() { - if (this._flags.type !== "Flags") { - throw new Error("UnknownError"); - } - return this._flags; - } - onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll) { - this._flags = { - type: "Flags", - parent: null, - start, - end, - raw: this.source.slice(start, end), - global, - ignoreCase, - multiline, - unicode, - sticky, - dotAll, - }; - } - onPatternEnter(start) { - this._node = { - type: "Pattern", - parent: null, - start, - end: start, - raw: "", - elements: [], - }; - this._backreferences.length = 0; - this._capturingGroups.length = 0; - } - onPatternLeave(start, end) { - this._node.end = end; - this._node.raw = this.source.slice(start, end); - for (const reference of this._backreferences) { - const ref = reference.ref; - const group = typeof ref === "number" - ? this._capturingGroups[ref - 1] - : this._capturingGroups.find(g => g.name === ref); - reference.resolved = group; - group.references.push(reference); - } - } - onDisjunctionEnter(start) { - this._disjunctionStartStack.push(start); - } - onDisjunctionLeave(start, end) { - this._disjunctionStartStack.pop(); - } - onAlternativeEnter(start, index) { - if (index === 0) { - return; - } - const parentNode = this._node; - if (parentNode.type === "Disjunction" || - parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - const prevNode = last(parentNode.elements); - if (prevNode != null && prevNode.type === "Disjunction") { - this._node = prevNode; - prevNode.alternatives.push([]); - } - else { - this._node = { - type: "Disjunction", - parent: parentNode, - start: last(this._disjunctionStartStack), - end: start, - raw: "", - alternatives: [], - }; - const elements = elementsToAlternative(parentNode.elements, this._node); - this._node.alternatives.push(elements, []); - parentNode.elements = [this._node]; - } - } - onAlternativeLeave(start, end, index) { - if (index === 0) { - return; - } - this._node.end = end; - this._node.raw = this.source.slice(this._node.start, end); - this._node = this._node.parent; - } - onGroupEnter(start) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - this._node = { - type: "Group", - parent: parentNode, - start, - end: start, - raw: "", - elements: [], - }; - addAlternativeElement(parentNode, this._node); - } - onGroupLeave(start, end) { - this._node.end = end; - this._node.raw = this.source.slice(start, end); - this._node = this._node.parent; - } - onCapturingGroupEnter(start, name) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - this._node = { - type: "CapturingGroup", - parent: parentNode, - start, - end: start, - raw: "", - name, - elements: [], - references: [], - }; - addAlternativeElement(parentNode, this._node); - this._capturingGroups.push(this._node); - } - onCapturingGroupLeave(start, end, name) { - this._node.end = end; - this._node.raw = this.source.slice(start, end); - this._node = this._node.parent; - } - onQuantifier(start, end, min, max, greedy) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - const elements = parentNode.type === "Disjunction" - ? last(parentNode.alternatives) - : parentNode.elements; - const prevNode = elements.pop(); - const node = { - type: "Quantifier", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - min, - max, - greedy, - element: prevNode, - }; - elements.push(node); - prevNode.parent = node; - } - onLookaroundAssertionEnter(start, kind, negate) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - this._node = { - type: "Assertion", - parent: parentNode, - start, - end: start, - raw: "", - kind, - negate, - elements: [], - }; - addAlternativeElement(parentNode, this._node); - } - onLookaroundAssertionLeave(start, end, kind, negate) { - this._node.end = end; - this._node.raw = this.source.slice(start, end); - this._node = this._node.parent; - } - onEdgeAssertion(start, end, kind) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - addAlternativeElement(parentNode, { - type: "Assertion", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - kind, - }); - } - onWordBoundaryAssertion(start, end, kind, negate) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - addAlternativeElement(parentNode, { - type: "Assertion", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - kind, - negate, - }); - } - onAnyCharacterSet(start, end, kind) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - addAlternativeElement(parentNode, { - type: "CharacterSet", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - kind, - }); - } - onEscapeCharacterSet(start, end, kind, negate) { - addCommonElement(this._node, { - type: "CharacterSet", - parent: this._node, - start, - end, - raw: this.source.slice(start, end), - kind, - negate, - }); - } - onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) { - addCommonElement(this._node, { - type: "CharacterSet", - parent: this._node, - start, - end, - raw: this.source.slice(start, end), - kind, - key, - value, - negate, - }); - } - onCharacter(start, end, value) { - addCommonElement(this._node, { - type: "Character", - parent: this._node, - start, - end, - raw: this.source.slice(start, end), - value, - }); - } - onBackreference(start, end, ref) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - const node = { - type: "Backreference", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - ref, - resolved: DummyCapturingGroup, - }; - addAlternativeElement(parentNode, node); - this._backreferences.push(node); - } - onCharacterClassEnter(start, negate) { - const parentNode = this._node; - if (parentNode.type === "CharacterClass") { - throw new Error("UnknownError"); - } - this._node = { - type: "CharacterClass", - parent: parentNode, - start, - end: start, - raw: "", - negate, - elements: [], - }; - addAlternativeElement(parentNode, this._node); - } - onCharacterClassLeave(start, end, negate) { - this._node.end = end; - this._node.raw = this.source.slice(start, end); - this._node = this._node.parent; - } - onCharacterClassRange(start, end, min, max) { - const parentNode = this._node; - if (parentNode.type !== "CharacterClass") { - throw new Error("UnknownError"); - } - const elements = parentNode.elements; - const rightNode = elements.pop(); - elements.pop(); - const leftNode = elements.pop(); - const node = { - type: "CharacterClassRange", - parent: parentNode, - start, - end, - raw: this.source.slice(start, end), - min: leftNode, - max: rightNode, - }; - assert(leftNode != null && leftNode.type === "Character"); - assert(rightNode != null && rightNode.type === "Character"); - leftNode.parent = node; - rightNode.parent = node; - elements.push(node); - } -} -class RegExpParser { - constructor(options) { - this._state = new RegExpParserState(options); - this._validator = new RegExpValidator(this._state); - } - parseLiteral(source, start = 0, end = source.length) { - this._state.source = source; - this._validator.validateLiteral(source, start, end); - const pattern = this._state.pattern; - const flags = this._state.flags; - const literal = { - type: "RegExpLiteral", - parent: null, - start, - end, - raw: source, - pattern, - flags, - }; - pattern.parent = literal; - flags.parent = literal; - return literal; - } - parseFlags(source, start = 0, end = source.length) { - this._state.source = source; - this._validator.validateFlags(source, start, end); - return this._state.flags; - } - parsePattern(source, start = 0, end = source.length, uFlag = false) { - this._state.source = source; - this._validator.validatePattern(source, start, end, uFlag); - return this._state.pattern; - } -} - -function parseRegExpLiteral(source, options) { - return new RegExpParser(options).parseLiteral(source); -} -function validateRegExpLiteral(source, options) { - return new RegExpValidator(options).validateLiteral(source); -} - -export { ast as AST, RegExpParser, RegExpValidator, parseRegExpLiteral, validateRegExpLiteral }; -//# sourceMappingURL=index.mjs.map diff --git a/node_modules/regexpp/index.mjs.map b/node_modules/regexpp/index.mjs.map deleted file mode 100644 index 7d09e5b..0000000 --- a/node_modules/regexpp/index.mjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.mjs.map","sources":["src/util.ts","src/reader.ts","src/regexp-syntax-error.ts","src/unicode/ids.ts","src/unicode/property-data.ts","src/unicode/index.ts","src/validator.ts","src/parser.ts","src/index.ts"],"sourcesContent":["export function assert(condition: boolean, message?: string): void {\n if (!condition) {\n throw new Error(message || \"AssertionError\")\n }\n}\n\nexport function last(xs: T[]): T | undefined {\n return xs.length === 0 ? undefined : xs[xs.length - 1]\n}\n","const legacyImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.charCodeAt(i) : -1\n },\n width(c: number): number {\n return 1\n },\n}\nconst unicodeImpl = {\n at(s: string, end: number, i: number): number {\n return i < end ? s.codePointAt(i)! : -1\n },\n width(c: number): number {\n return c > 0xffff ? 2 : 1\n },\n}\n\nexport class Reader {\n private _impl = legacyImpl\n private _s: string = \"\"\n private _i: number = 0\n private _end: number = 0\n private _cp1: number = -1\n private _w1: number = 1\n private _cp2: number = -1\n private _w2: number = 1\n private _cp3: number = -1\n private _w3: number = 1\n private _cp4: number = -1\n\n get source(): string {\n return this._s\n }\n\n get index(): number {\n return this._i\n }\n\n get currentCodePoint(): number {\n return this._cp1\n }\n\n get nextCodePoint(): number {\n return this._cp2\n }\n\n get nextCodePoint2(): number {\n return this._cp3\n }\n\n get nextCodePoint3(): number {\n return this._cp4\n }\n\n reset(source: string, start: number, end: number, uFlag: boolean): void {\n this._impl = uFlag ? unicodeImpl : legacyImpl\n this._s = source\n this._end = end\n this.rewind(start)\n }\n\n rewind(index: number): void {\n const impl = this._impl\n this._i = index\n this._cp1 = impl.at(this._s, this._end, index)\n this._w1 = impl.width(this._cp1)\n this._cp2 = impl.at(this._s, this._end, index + this._w1)\n this._w2 = impl.width(this._cp2)\n this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2)\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n index + this._w1 + this._w2 + this._w3,\n )\n }\n\n advance(): void {\n if (this._cp1 !== -1) {\n const impl = this._impl\n this._i += this._w1\n this._cp1 = this._cp2\n this._w1 = this._w2\n this._cp2 = this._cp3\n this._w2 = impl.width(this._cp2)\n this._cp3 = this._cp4\n this._w3 = impl.width(this._cp3)\n this._cp4 = impl.at(\n this._s,\n this._end,\n this._i + this._w1 + this._w2 + this._w3,\n )\n }\n }\n\n eat(cp: number): boolean {\n if (this._cp1 === cp) {\n this.advance()\n return true\n }\n return false\n }\n\n eat2(cp1: number, cp2: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2) {\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n\n eat3(cp1: number, cp2: number, cp3: number): boolean {\n if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) {\n this.advance()\n this.advance()\n this.advance()\n return true\n }\n return false\n }\n}\n","export class RegExpSyntaxError extends SyntaxError {\n public index: number\n constructor(\n source: string,\n uFlag: boolean,\n index: number,\n message: string,\n ) {\n /*eslint-disable no-param-reassign */\n if (source) {\n if (source[0] !== \"/\") {\n source = `/${source}/${uFlag ? \"u\" : \"\"}`\n }\n source = `: ${source}`\n }\n /*eslint-enable no-param-reassign */\n\n super(`Invalid regular expression${source}: ${message}`)\n this.index = index\n }\n}\n","/* Generated from DerivedCoreProperties-10.0.0.txt */\nexport function isIdStart(cp: number): boolean {\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp)\n}\nexport function isIdContinue(cp: number): boolean {\n if (cp < 0x30) return false\n if (cp < 0x3a) return true\n if (cp < 0x41) return false\n if (cp < 0x5b) return true\n if (cp === 0x5f) return true\n if (cp < 0x61) return false\n if (cp < 0x7b) return true\n return isLargeIdStart(cp) || isLargeIdContinue(cp)\n}\n\nfunction isLargeIdStart(cp: number): boolean {\n if (cp < 0x303c) {\n if (cp < 0xeaa) {\n if (cp < 0xa2a) {\n if (cp < 0x6d5) {\n if (cp < 0x37a) {\n if (cp < 0x294) {\n if (cp < 0xf8) {\n if (cp === 0xaa) return true\n if (cp === 0xb5) return true\n if (cp === 0xba) return true\n if (cp < 0xc0) return false\n if (cp < 0xd7) return true\n if (cp < 0xd8) return false\n if (cp < 0xf7) return true\n return false\n }\n if (cp < 0x1bb) return true\n if (cp === 0x1bb) return true\n if (cp < 0x1bc) return false\n if (cp < 0x1c0) return true\n if (cp < 0x1c0) return false\n if (cp < 0x1c4) return true\n if (cp < 0x1c4) return false\n if (cp < 0x294) return true\n return false\n }\n if (cp < 0x2ec) {\n if (cp === 0x294) return true\n if (cp < 0x295) return false\n if (cp < 0x2b0) return true\n if (cp < 0x2b0) return false\n if (cp < 0x2c2) return true\n if (cp < 0x2c6) return false\n if (cp < 0x2d2) return true\n if (cp < 0x2e0) return false\n if (cp < 0x2e5) return true\n return false\n }\n if (cp === 0x2ec) return true\n if (cp === 0x2ee) return true\n if (cp < 0x370) return false\n if (cp < 0x374) return true\n if (cp === 0x374) return true\n if (cp < 0x376) return false\n if (cp < 0x378) return true\n return false\n }\n if (cp < 0x531) {\n if (cp < 0x38c) {\n if (cp === 0x37a) return true\n if (cp < 0x37b) return false\n if (cp < 0x37e) return true\n if (cp === 0x37f) return true\n if (cp === 0x386) return true\n if (cp < 0x388) return false\n if (cp < 0x38b) return true\n return false\n }\n if (cp === 0x38c) return true\n if (cp < 0x38e) return false\n if (cp < 0x3a2) return true\n if (cp < 0x3a3) return false\n if (cp < 0x3f6) return true\n if (cp < 0x3f7) return false\n if (cp < 0x482) return true\n if (cp < 0x48a) return false\n if (cp < 0x530) return true\n return false\n }\n if (cp < 0x620) {\n if (cp < 0x531) return false\n if (cp < 0x557) return true\n if (cp === 0x559) return true\n if (cp < 0x561) return false\n if (cp < 0x588) return true\n if (cp < 0x5d0) return false\n if (cp < 0x5eb) return true\n if (cp < 0x5f0) return false\n if (cp < 0x5f3) return true\n return false\n }\n if (cp < 0x640) return true\n if (cp === 0x640) return true\n if (cp < 0x641) return false\n if (cp < 0x64b) return true\n if (cp < 0x66e) return false\n if (cp < 0x670) return true\n if (cp < 0x671) return false\n if (cp < 0x6d4) return true\n return false\n }\n if (cp < 0x904) {\n if (cp < 0x7f4) {\n if (cp < 0x710) {\n if (cp === 0x6d5) return true\n if (cp < 0x6e5) return false\n if (cp < 0x6e7) return true\n if (cp < 0x6ee) return false\n if (cp < 0x6f0) return true\n if (cp < 0x6fa) return false\n if (cp < 0x6fd) return true\n if (cp === 0x6ff) return true\n return false\n }\n if (cp === 0x710) return true\n if (cp < 0x712) return false\n if (cp < 0x730) return true\n if (cp < 0x74d) return false\n if (cp < 0x7a6) return true\n if (cp === 0x7b1) return true\n if (cp < 0x7ca) return false\n if (cp < 0x7eb) return true\n return false\n }\n if (cp < 0x828) {\n if (cp < 0x7f4) return false\n if (cp < 0x7f6) return true\n if (cp === 0x7fa) return true\n if (cp < 0x800) return false\n if (cp < 0x816) return true\n if (cp === 0x81a) return true\n if (cp === 0x824) return true\n return false\n }\n if (cp === 0x828) return true\n if (cp < 0x840) return false\n if (cp < 0x859) return true\n if (cp < 0x860) return false\n if (cp < 0x86b) return true\n if (cp < 0x8a0) return false\n if (cp < 0x8b5) return true\n if (cp < 0x8b6) return false\n if (cp < 0x8be) return true\n return false\n }\n if (cp < 0x9b2) {\n if (cp < 0x972) {\n if (cp < 0x904) return false\n if (cp < 0x93a) return true\n if (cp === 0x93d) return true\n if (cp === 0x950) return true\n if (cp < 0x958) return false\n if (cp < 0x962) return true\n if (cp === 0x971) return true\n return false\n }\n if (cp < 0x981) return true\n if (cp < 0x985) return false\n if (cp < 0x98d) return true\n if (cp < 0x98f) return false\n if (cp < 0x991) return true\n if (cp < 0x993) return false\n if (cp < 0x9a9) return true\n if (cp < 0x9aa) return false\n if (cp < 0x9b1) return true\n return false\n }\n if (cp < 0x9df) {\n if (cp === 0x9b2) return true\n if (cp < 0x9b6) return false\n if (cp < 0x9ba) return true\n if (cp === 0x9bd) return true\n if (cp === 0x9ce) return true\n if (cp < 0x9dc) return false\n if (cp < 0x9de) return true\n return false\n }\n if (cp < 0x9e2) return true\n if (cp < 0x9f0) return false\n if (cp < 0x9f2) return true\n if (cp === 0x9fc) return true\n if (cp < 0xa05) return false\n if (cp < 0xa0b) return true\n if (cp < 0xa0f) return false\n if (cp < 0xa11) return true\n if (cp < 0xa13) return false\n if (cp < 0xa29) return true\n return false\n }\n if (cp < 0xc2a) {\n if (cp < 0xb2a) {\n if (cp < 0xaaa) {\n if (cp < 0xa5e) {\n if (cp < 0xa2a) return false\n if (cp < 0xa31) return true\n if (cp < 0xa32) return false\n if (cp < 0xa34) return true\n if (cp < 0xa35) return false\n if (cp < 0xa37) return true\n if (cp < 0xa38) return false\n if (cp < 0xa3a) return true\n if (cp < 0xa59) return false\n if (cp < 0xa5d) return true\n return false\n }\n if (cp === 0xa5e) return true\n if (cp < 0xa72) return false\n if (cp < 0xa75) return true\n if (cp < 0xa85) return false\n if (cp < 0xa8e) return true\n if (cp < 0xa8f) return false\n if (cp < 0xa92) return true\n if (cp < 0xa93) return false\n if (cp < 0xaa9) return true\n return false\n }\n if (cp < 0xae0) {\n if (cp < 0xaaa) return false\n if (cp < 0xab1) return true\n if (cp < 0xab2) return false\n if (cp < 0xab4) return true\n if (cp < 0xab5) return false\n if (cp < 0xaba) return true\n if (cp === 0xabd) return true\n if (cp === 0xad0) return true\n return false\n }\n if (cp < 0xae2) return true\n if (cp === 0xaf9) return true\n if (cp < 0xb05) return false\n if (cp < 0xb0d) return true\n if (cp < 0xb0f) return false\n if (cp < 0xb11) return true\n if (cp < 0xb13) return false\n if (cp < 0xb29) return true\n return false\n }\n if (cp < 0xb92) {\n if (cp < 0xb5f) {\n if (cp < 0xb2a) return false\n if (cp < 0xb31) return true\n if (cp < 0xb32) return false\n if (cp < 0xb34) return true\n if (cp < 0xb35) return false\n if (cp < 0xb3a) return true\n if (cp === 0xb3d) return true\n if (cp < 0xb5c) return false\n if (cp < 0xb5e) return true\n return false\n }\n if (cp < 0xb62) return true\n if (cp === 0xb71) return true\n if (cp === 0xb83) return true\n if (cp < 0xb85) return false\n if (cp < 0xb8b) return true\n if (cp < 0xb8e) return false\n if (cp < 0xb91) return true\n return false\n }\n if (cp < 0xba8) {\n if (cp < 0xb92) return false\n if (cp < 0xb96) return true\n if (cp < 0xb99) return false\n if (cp < 0xb9b) return true\n if (cp === 0xb9c) return true\n if (cp < 0xb9e) return false\n if (cp < 0xba0) return true\n if (cp < 0xba3) return false\n if (cp < 0xba5) return true\n return false\n }\n if (cp < 0xbab) return true\n if (cp < 0xbae) return false\n if (cp < 0xbba) return true\n if (cp === 0xbd0) return true\n if (cp < 0xc05) return false\n if (cp < 0xc0d) return true\n if (cp < 0xc0e) return false\n if (cp < 0xc11) return true\n if (cp < 0xc12) return false\n if (cp < 0xc29) return true\n return false\n }\n if (cp < 0xd5f) {\n if (cp < 0xcbd) {\n if (cp < 0xc85) {\n if (cp < 0xc2a) return false\n if (cp < 0xc3a) return true\n if (cp === 0xc3d) return true\n if (cp < 0xc58) return false\n if (cp < 0xc5b) return true\n if (cp < 0xc60) return false\n if (cp < 0xc62) return true\n if (cp === 0xc80) return true\n return false\n }\n if (cp < 0xc8d) return true\n if (cp < 0xc8e) return false\n if (cp < 0xc91) return true\n if (cp < 0xc92) return false\n if (cp < 0xca9) return true\n if (cp < 0xcaa) return false\n if (cp < 0xcb4) return true\n if (cp < 0xcb5) return false\n if (cp < 0xcba) return true\n return false\n }\n if (cp < 0xd0e) {\n if (cp === 0xcbd) return true\n if (cp === 0xcde) return true\n if (cp < 0xce0) return false\n if (cp < 0xce2) return true\n if (cp < 0xcf1) return false\n if (cp < 0xcf3) return true\n if (cp < 0xd05) return false\n if (cp < 0xd0d) return true\n return false\n }\n if (cp < 0xd11) return true\n if (cp < 0xd12) return false\n if (cp < 0xd3b) return true\n if (cp === 0xd3d) return true\n if (cp === 0xd4e) return true\n if (cp < 0xd54) return false\n if (cp < 0xd57) return true\n return false\n }\n if (cp < 0xe46) {\n if (cp < 0xdbd) {\n if (cp < 0xd5f) return false\n if (cp < 0xd62) return true\n if (cp < 0xd7a) return false\n if (cp < 0xd80) return true\n if (cp < 0xd85) return false\n if (cp < 0xd97) return true\n if (cp < 0xd9a) return false\n if (cp < 0xdb2) return true\n if (cp < 0xdb3) return false\n if (cp < 0xdbc) return true\n return false\n }\n if (cp === 0xdbd) return true\n if (cp < 0xdc0) return false\n if (cp < 0xdc7) return true\n if (cp < 0xe01) return false\n if (cp < 0xe31) return true\n if (cp < 0xe32) return false\n if (cp < 0xe34) return true\n if (cp < 0xe40) return false\n if (cp < 0xe46) return true\n return false\n }\n if (cp < 0xe8d) {\n if (cp === 0xe46) return true\n if (cp < 0xe81) return false\n if (cp < 0xe83) return true\n if (cp === 0xe84) return true\n if (cp < 0xe87) return false\n if (cp < 0xe89) return true\n if (cp === 0xe8a) return true\n return false\n }\n if (cp === 0xe8d) return true\n if (cp < 0xe94) return false\n if (cp < 0xe98) return true\n if (cp < 0xe99) return false\n if (cp < 0xea0) return true\n if (cp < 0xea1) return false\n if (cp < 0xea4) return true\n if (cp === 0xea5) return true\n if (cp === 0xea7) return true\n return false\n }\n if (cp < 0x1c5a) {\n if (cp < 0x1380) {\n if (cp < 0x10a0) {\n if (cp < 0xf88) {\n if (cp < 0xec6) {\n if (cp < 0xeaa) return false\n if (cp < 0xeac) return true\n if (cp < 0xead) return false\n if (cp < 0xeb1) return true\n if (cp < 0xeb2) return false\n if (cp < 0xeb4) return true\n if (cp === 0xebd) return true\n if (cp < 0xec0) return false\n if (cp < 0xec5) return true\n return false\n }\n if (cp === 0xec6) return true\n if (cp < 0xedc) return false\n if (cp < 0xee0) return true\n if (cp === 0xf00) return true\n if (cp < 0xf40) return false\n if (cp < 0xf48) return true\n if (cp < 0xf49) return false\n if (cp < 0xf6d) return true\n return false\n }\n if (cp < 0x1061) {\n if (cp < 0xf88) return false\n if (cp < 0xf8d) return true\n if (cp < 0x1000) return false\n if (cp < 0x102b) return true\n if (cp === 0x103f) return true\n if (cp < 0x1050) return false\n if (cp < 0x1056) return true\n if (cp < 0x105a) return false\n if (cp < 0x105e) return true\n return false\n }\n if (cp === 0x1061) return true\n if (cp < 0x1065) return false\n if (cp < 0x1067) return true\n if (cp < 0x106e) return false\n if (cp < 0x1071) return true\n if (cp < 0x1075) return false\n if (cp < 0x1082) return true\n if (cp === 0x108e) return true\n return false\n }\n if (cp < 0x1260) {\n if (cp < 0x10fd) {\n if (cp < 0x10a0) return false\n if (cp < 0x10c6) return true\n if (cp === 0x10c7) return true\n if (cp === 0x10cd) return true\n if (cp < 0x10d0) return false\n if (cp < 0x10fb) return true\n if (cp === 0x10fc) return true\n return false\n }\n if (cp < 0x1249) return true\n if (cp < 0x124a) return false\n if (cp < 0x124e) return true\n if (cp < 0x1250) return false\n if (cp < 0x1257) return true\n if (cp === 0x1258) return true\n if (cp < 0x125a) return false\n if (cp < 0x125e) return true\n return false\n }\n if (cp < 0x12c0) {\n if (cp < 0x1260) return false\n if (cp < 0x1289) return true\n if (cp < 0x128a) return false\n if (cp < 0x128e) return true\n if (cp < 0x1290) return false\n if (cp < 0x12b1) return true\n if (cp < 0x12b2) return false\n if (cp < 0x12b6) return true\n if (cp < 0x12b8) return false\n if (cp < 0x12bf) return true\n return false\n }\n if (cp === 0x12c0) return true\n if (cp < 0x12c2) return false\n if (cp < 0x12c6) return true\n if (cp < 0x12c8) return false\n if (cp < 0x12d7) return true\n if (cp < 0x12d8) return false\n if (cp < 0x1311) return true\n if (cp < 0x1312) return false\n if (cp < 0x1316) return true\n if (cp < 0x1318) return false\n if (cp < 0x135b) return true\n return false\n }\n if (cp < 0x1844) {\n if (cp < 0x170e) {\n if (cp < 0x1681) {\n if (cp < 0x1380) return false\n if (cp < 0x1390) return true\n if (cp < 0x13a0) return false\n if (cp < 0x13f6) return true\n if (cp < 0x13f8) return false\n if (cp < 0x13fe) return true\n if (cp < 0x1401) return false\n if (cp < 0x166d) return true\n if (cp < 0x166f) return false\n if (cp < 0x1680) return true\n return false\n }\n if (cp < 0x169b) return true\n if (cp < 0x16a0) return false\n if (cp < 0x16eb) return true\n if (cp < 0x16ee) return false\n if (cp < 0x16f1) return true\n if (cp < 0x16f1) return false\n if (cp < 0x16f9) return true\n if (cp < 0x1700) return false\n if (cp < 0x170d) return true\n return false\n }\n if (cp < 0x1780) {\n if (cp < 0x170e) return false\n if (cp < 0x1712) return true\n if (cp < 0x1720) return false\n if (cp < 0x1732) return true\n if (cp < 0x1740) return false\n if (cp < 0x1752) return true\n if (cp < 0x1760) return false\n if (cp < 0x176d) return true\n if (cp < 0x176e) return false\n if (cp < 0x1771) return true\n return false\n }\n if (cp < 0x17b4) return true\n if (cp === 0x17d7) return true\n if (cp === 0x17dc) return true\n if (cp < 0x1820) return false\n if (cp < 0x1843) return true\n if (cp === 0x1843) return true\n return false\n }\n if (cp < 0x19b0) {\n if (cp < 0x18b0) {\n if (cp < 0x1844) return false\n if (cp < 0x1878) return true\n if (cp < 0x1880) return false\n if (cp < 0x1885) return true\n if (cp < 0x1885) return false\n if (cp < 0x1887) return true\n if (cp < 0x1887) return false\n if (cp < 0x18a9) return true\n if (cp === 0x18aa) return true\n return false\n }\n if (cp < 0x18f6) return true\n if (cp < 0x1900) return false\n if (cp < 0x191f) return true\n if (cp < 0x1950) return false\n if (cp < 0x196e) return true\n if (cp < 0x1970) return false\n if (cp < 0x1975) return true\n if (cp < 0x1980) return false\n if (cp < 0x19ac) return true\n return false\n }\n if (cp < 0x1b45) {\n if (cp < 0x19b0) return false\n if (cp < 0x19ca) return true\n if (cp < 0x1a00) return false\n if (cp < 0x1a17) return true\n if (cp < 0x1a20) return false\n if (cp < 0x1a55) return true\n if (cp === 0x1aa7) return true\n if (cp < 0x1b05) return false\n if (cp < 0x1b34) return true\n return false\n }\n if (cp < 0x1b4c) return true\n if (cp < 0x1b83) return false\n if (cp < 0x1ba1) return true\n if (cp < 0x1bae) return false\n if (cp < 0x1bb0) return true\n if (cp < 0x1bba) return false\n if (cp < 0x1be6) return true\n if (cp < 0x1c00) return false\n if (cp < 0x1c24) return true\n if (cp < 0x1c4d) return false\n if (cp < 0x1c50) return true\n return false\n }\n if (cp < 0x2126) {\n if (cp < 0x1f5f) {\n if (cp < 0x1d79) {\n if (cp < 0x1cf5) {\n if (cp < 0x1c5a) return false\n if (cp < 0x1c78) return true\n if (cp < 0x1c78) return false\n if (cp < 0x1c7e) return true\n if (cp < 0x1c80) return false\n if (cp < 0x1c89) return true\n if (cp < 0x1ce9) return false\n if (cp < 0x1ced) return true\n if (cp < 0x1cee) return false\n if (cp < 0x1cf2) return true\n return false\n }\n if (cp < 0x1cf7) return true\n if (cp < 0x1d00) return false\n if (cp < 0x1d2c) return true\n if (cp < 0x1d2c) return false\n if (cp < 0x1d6b) return true\n if (cp < 0x1d6b) return false\n if (cp < 0x1d78) return true\n if (cp === 0x1d78) return true\n return false\n }\n if (cp < 0x1f48) {\n if (cp < 0x1d79) return false\n if (cp < 0x1d9b) return true\n if (cp < 0x1d9b) return false\n if (cp < 0x1dc0) return true\n if (cp < 0x1e00) return false\n if (cp < 0x1f16) return true\n if (cp < 0x1f18) return false\n if (cp < 0x1f1e) return true\n if (cp < 0x1f20) return false\n if (cp < 0x1f46) return true\n return false\n }\n if (cp < 0x1f4e) return true\n if (cp < 0x1f50) return false\n if (cp < 0x1f58) return true\n if (cp === 0x1f59) return true\n if (cp === 0x1f5b) return true\n if (cp === 0x1f5d) return true\n return false\n }\n if (cp < 0x1ff6) {\n if (cp < 0x1fc6) {\n if (cp < 0x1f5f) return false\n if (cp < 0x1f7e) return true\n if (cp < 0x1f80) return false\n if (cp < 0x1fb5) return true\n if (cp < 0x1fb6) return false\n if (cp < 0x1fbd) return true\n if (cp === 0x1fbe) return true\n if (cp < 0x1fc2) return false\n if (cp < 0x1fc5) return true\n return false\n }\n if (cp < 0x1fcd) return true\n if (cp < 0x1fd0) return false\n if (cp < 0x1fd4) return true\n if (cp < 0x1fd6) return false\n if (cp < 0x1fdc) return true\n if (cp < 0x1fe0) return false\n if (cp < 0x1fed) return true\n if (cp < 0x1ff2) return false\n if (cp < 0x1ff5) return true\n return false\n }\n if (cp < 0x2107) {\n if (cp < 0x1ff6) return false\n if (cp < 0x1ffd) return true\n if (cp === 0x2071) return true\n if (cp === 0x207f) return true\n if (cp < 0x2090) return false\n if (cp < 0x209d) return true\n if (cp === 0x2102) return true\n return false\n }\n if (cp === 0x2107) return true\n if (cp < 0x210a) return false\n if (cp < 0x2114) return true\n if (cp === 0x2115) return true\n if (cp === 0x2118) return true\n if (cp < 0x2119) return false\n if (cp < 0x211e) return true\n if (cp === 0x2124) return true\n return false\n }\n if (cp < 0x2d00) {\n if (cp < 0x2160) {\n if (cp < 0x2135) {\n if (cp === 0x2126) return true\n if (cp === 0x2128) return true\n if (cp < 0x212a) return false\n if (cp < 0x212e) return true\n if (cp === 0x212e) return true\n if (cp < 0x212f) return false\n if (cp < 0x2135) return true\n return false\n }\n if (cp < 0x2139) return true\n if (cp === 0x2139) return true\n if (cp < 0x213c) return false\n if (cp < 0x2140) return true\n if (cp < 0x2145) return false\n if (cp < 0x214a) return true\n if (cp === 0x214e) return true\n return false\n }\n if (cp < 0x2c60) {\n if (cp < 0x2160) return false\n if (cp < 0x2183) return true\n if (cp < 0x2183) return false\n if (cp < 0x2185) return true\n if (cp < 0x2185) return false\n if (cp < 0x2189) return true\n if (cp < 0x2c00) return false\n if (cp < 0x2c2f) return true\n if (cp < 0x2c30) return false\n if (cp < 0x2c5f) return true\n return false\n }\n if (cp < 0x2c7c) return true\n if (cp < 0x2c7c) return false\n if (cp < 0x2c7e) return true\n if (cp < 0x2c7e) return false\n if (cp < 0x2ce5) return true\n if (cp < 0x2ceb) return false\n if (cp < 0x2cef) return true\n if (cp < 0x2cf2) return false\n if (cp < 0x2cf4) return true\n return false\n }\n if (cp < 0x2dc0) {\n if (cp < 0x2d80) {\n if (cp < 0x2d00) return false\n if (cp < 0x2d26) return true\n if (cp === 0x2d27) return true\n if (cp === 0x2d2d) return true\n if (cp < 0x2d30) return false\n if (cp < 0x2d68) return true\n if (cp === 0x2d6f) return true\n return false\n }\n if (cp < 0x2d97) return true\n if (cp < 0x2da0) return false\n if (cp < 0x2da7) return true\n if (cp < 0x2da8) return false\n if (cp < 0x2daf) return true\n if (cp < 0x2db0) return false\n if (cp < 0x2db7) return true\n if (cp < 0x2db8) return false\n if (cp < 0x2dbf) return true\n return false\n }\n if (cp < 0x3006) {\n if (cp < 0x2dc0) return false\n if (cp < 0x2dc7) return true\n if (cp < 0x2dc8) return false\n if (cp < 0x2dcf) return true\n if (cp < 0x2dd0) return false\n if (cp < 0x2dd7) return true\n if (cp < 0x2dd8) return false\n if (cp < 0x2ddf) return true\n if (cp === 0x3005) return true\n return false\n }\n if (cp === 0x3006) return true\n if (cp === 0x3007) return true\n if (cp < 0x3021) return false\n if (cp < 0x302a) return true\n if (cp < 0x3031) return false\n if (cp < 0x3036) return true\n if (cp < 0x3038) return false\n if (cp < 0x303b) return true\n if (cp === 0x303b) return true\n return false\n }\n if (cp < 0x10a10) {\n if (cp < 0xab28) {\n if (cp < 0xa7fa) {\n if (cp < 0xa60c) {\n if (cp < 0x31a0) {\n if (cp < 0x30a1) {\n if (cp === 0x303c) return true\n if (cp < 0x3041) return false\n if (cp < 0x3097) return true\n if (cp < 0x309b) return false\n if (cp < 0x309d) return true\n if (cp < 0x309d) return false\n if (cp < 0x309f) return true\n if (cp === 0x309f) return true\n return false\n }\n if (cp < 0x30fb) return true\n if (cp < 0x30fc) return false\n if (cp < 0x30ff) return true\n if (cp === 0x30ff) return true\n if (cp < 0x3105) return false\n if (cp < 0x312f) return true\n if (cp < 0x3131) return false\n if (cp < 0x318f) return true\n return false\n }\n if (cp < 0xa015) {\n if (cp < 0x31a0) return false\n if (cp < 0x31bb) return true\n if (cp < 0x31f0) return false\n if (cp < 0x3200) return true\n if (cp < 0x3400) return false\n if (cp < 0x4db6) return true\n if (cp < 0x4e00) return false\n if (cp < 0x9feb) return true\n if (cp < 0xa000) return false\n if (cp < 0xa015) return true\n return false\n }\n if (cp === 0xa015) return true\n if (cp < 0xa016) return false\n if (cp < 0xa48d) return true\n if (cp < 0xa4d0) return false\n if (cp < 0xa4f8) return true\n if (cp < 0xa4f8) return false\n if (cp < 0xa4fe) return true\n if (cp < 0xa500) return false\n if (cp < 0xa60c) return true\n return false\n }\n if (cp < 0xa717) {\n if (cp < 0xa67f) {\n if (cp === 0xa60c) return true\n if (cp < 0xa610) return false\n if (cp < 0xa620) return true\n if (cp < 0xa62a) return false\n if (cp < 0xa62c) return true\n if (cp < 0xa640) return false\n if (cp < 0xa66e) return true\n if (cp === 0xa66e) return true\n return false\n }\n if (cp === 0xa67f) return true\n if (cp < 0xa680) return false\n if (cp < 0xa69c) return true\n if (cp < 0xa69c) return false\n if (cp < 0xa69e) return true\n if (cp < 0xa6a0) return false\n if (cp < 0xa6e6) return true\n if (cp < 0xa6e6) return false\n if (cp < 0xa6f0) return true\n return false\n }\n if (cp < 0xa78b) {\n if (cp < 0xa717) return false\n if (cp < 0xa720) return true\n if (cp < 0xa722) return false\n if (cp < 0xa770) return true\n if (cp === 0xa770) return true\n if (cp < 0xa771) return false\n if (cp < 0xa788) return true\n if (cp === 0xa788) return true\n return false\n }\n if (cp < 0xa78f) return true\n if (cp === 0xa78f) return true\n if (cp < 0xa790) return false\n if (cp < 0xa7af) return true\n if (cp < 0xa7b0) return false\n if (cp < 0xa7b8) return true\n if (cp === 0xa7f7) return true\n if (cp < 0xa7f8) return false\n if (cp < 0xa7fa) return true\n return false\n }\n if (cp < 0xaa40) {\n if (cp < 0xa90a) {\n if (cp < 0xa840) {\n if (cp === 0xa7fa) return true\n if (cp < 0xa7fb) return false\n if (cp < 0xa802) return true\n if (cp < 0xa803) return false\n if (cp < 0xa806) return true\n if (cp < 0xa807) return false\n if (cp < 0xa80b) return true\n if (cp < 0xa80c) return false\n if (cp < 0xa823) return true\n return false\n }\n if (cp < 0xa874) return true\n if (cp < 0xa882) return false\n if (cp < 0xa8b4) return true\n if (cp < 0xa8f2) return false\n if (cp < 0xa8f8) return true\n if (cp === 0xa8fb) return true\n if (cp === 0xa8fd) return true\n return false\n }\n if (cp < 0xa9e0) {\n if (cp < 0xa90a) return false\n if (cp < 0xa926) return true\n if (cp < 0xa930) return false\n if (cp < 0xa947) return true\n if (cp < 0xa960) return false\n if (cp < 0xa97d) return true\n if (cp < 0xa984) return false\n if (cp < 0xa9b3) return true\n if (cp === 0xa9cf) return true\n return false\n }\n if (cp < 0xa9e5) return true\n if (cp === 0xa9e6) return true\n if (cp < 0xa9e7) return false\n if (cp < 0xa9f0) return true\n if (cp < 0xa9fa) return false\n if (cp < 0xa9ff) return true\n if (cp < 0xaa00) return false\n if (cp < 0xaa29) return true\n return false\n }\n if (cp < 0xaac0) {\n if (cp < 0xaa7a) {\n if (cp < 0xaa40) return false\n if (cp < 0xaa43) return true\n if (cp < 0xaa44) return false\n if (cp < 0xaa4c) return true\n if (cp < 0xaa60) return false\n if (cp < 0xaa70) return true\n if (cp === 0xaa70) return true\n if (cp < 0xaa71) return false\n if (cp < 0xaa77) return true\n return false\n }\n if (cp === 0xaa7a) return true\n if (cp < 0xaa7e) return false\n if (cp < 0xaab0) return true\n if (cp === 0xaab1) return true\n if (cp < 0xaab5) return false\n if (cp < 0xaab7) return true\n if (cp < 0xaab9) return false\n if (cp < 0xaabe) return true\n return false\n }\n if (cp < 0xaaf2) {\n if (cp === 0xaac0) return true\n if (cp === 0xaac2) return true\n if (cp < 0xaadb) return false\n if (cp < 0xaadd) return true\n if (cp === 0xaadd) return true\n if (cp < 0xaae0) return false\n if (cp < 0xaaeb) return true\n return false\n }\n if (cp === 0xaaf2) return true\n if (cp < 0xaaf3) return false\n if (cp < 0xaaf5) return true\n if (cp < 0xab01) return false\n if (cp < 0xab07) return true\n if (cp < 0xab09) return false\n if (cp < 0xab0f) return true\n if (cp < 0xab11) return false\n if (cp < 0xab17) return true\n if (cp < 0xab20) return false\n if (cp < 0xab27) return true\n return false\n }\n if (cp < 0x1003c) {\n if (cp < 0xfb46) {\n if (cp < 0xfa70) {\n if (cp < 0xabc0) {\n if (cp < 0xab28) return false\n if (cp < 0xab2f) return true\n if (cp < 0xab30) return false\n if (cp < 0xab5b) return true\n if (cp < 0xab5c) return false\n if (cp < 0xab60) return true\n if (cp < 0xab60) return false\n if (cp < 0xab66) return true\n if (cp < 0xab70) return false\n if (cp < 0xabc0) return true\n return false\n }\n if (cp < 0xabe3) return true\n if (cp < 0xac00) return false\n if (cp < 0xd7a4) return true\n if (cp < 0xd7b0) return false\n if (cp < 0xd7c7) return true\n if (cp < 0xd7cb) return false\n if (cp < 0xd7fc) return true\n if (cp < 0xf900) return false\n if (cp < 0xfa6e) return true\n return false\n }\n if (cp < 0xfb2a) {\n if (cp < 0xfa70) return false\n if (cp < 0xfada) return true\n if (cp < 0xfb00) return false\n if (cp < 0xfb07) return true\n if (cp < 0xfb13) return false\n if (cp < 0xfb18) return true\n if (cp === 0xfb1d) return true\n if (cp < 0xfb1f) return false\n if (cp < 0xfb29) return true\n return false\n }\n if (cp < 0xfb37) return true\n if (cp < 0xfb38) return false\n if (cp < 0xfb3d) return true\n if (cp === 0xfb3e) return true\n if (cp < 0xfb40) return false\n if (cp < 0xfb42) return true\n if (cp < 0xfb43) return false\n if (cp < 0xfb45) return true\n return false\n }\n if (cp < 0xff70) {\n if (cp < 0xfe70) {\n if (cp < 0xfb46) return false\n if (cp < 0xfbb2) return true\n if (cp < 0xfbd3) return false\n if (cp < 0xfd3e) return true\n if (cp < 0xfd50) return false\n if (cp < 0xfd90) return true\n if (cp < 0xfd92) return false\n if (cp < 0xfdc8) return true\n if (cp < 0xfdf0) return false\n if (cp < 0xfdfc) return true\n return false\n }\n if (cp < 0xfe75) return true\n if (cp < 0xfe76) return false\n if (cp < 0xfefd) return true\n if (cp < 0xff21) return false\n if (cp < 0xff3b) return true\n if (cp < 0xff41) return false\n if (cp < 0xff5b) return true\n if (cp < 0xff66) return false\n if (cp < 0xff70) return true\n return false\n }\n if (cp < 0xffca) {\n if (cp === 0xff70) return true\n if (cp < 0xff71) return false\n if (cp < 0xff9e) return true\n if (cp < 0xff9e) return false\n if (cp < 0xffa0) return true\n if (cp < 0xffa0) return false\n if (cp < 0xffbf) return true\n if (cp < 0xffc2) return false\n if (cp < 0xffc8) return true\n return false\n }\n if (cp < 0xffd0) return true\n if (cp < 0xffd2) return false\n if (cp < 0xffd8) return true\n if (cp < 0xffda) return false\n if (cp < 0xffdd) return true\n if (cp < 0x10000) return false\n if (cp < 0x1000c) return true\n if (cp < 0x1000d) return false\n if (cp < 0x10027) return true\n if (cp < 0x10028) return false\n if (cp < 0x1003b) return true\n return false\n }\n if (cp < 0x104d8) {\n if (cp < 0x10342) {\n if (cp < 0x10280) {\n if (cp < 0x1003c) return false\n if (cp < 0x1003e) return true\n if (cp < 0x1003f) return false\n if (cp < 0x1004e) return true\n if (cp < 0x10050) return false\n if (cp < 0x1005e) return true\n if (cp < 0x10080) return false\n if (cp < 0x100fb) return true\n if (cp < 0x10140) return false\n if (cp < 0x10175) return true\n return false\n }\n if (cp < 0x1029d) return true\n if (cp < 0x102a0) return false\n if (cp < 0x102d1) return true\n if (cp < 0x10300) return false\n if (cp < 0x10320) return true\n if (cp < 0x1032d) return false\n if (cp < 0x10341) return true\n if (cp === 0x10341) return true\n return false\n }\n if (cp < 0x103c8) {\n if (cp < 0x10342) return false\n if (cp < 0x1034a) return true\n if (cp === 0x1034a) return true\n if (cp < 0x10350) return false\n if (cp < 0x10376) return true\n if (cp < 0x10380) return false\n if (cp < 0x1039e) return true\n if (cp < 0x103a0) return false\n if (cp < 0x103c4) return true\n return false\n }\n if (cp < 0x103d0) return true\n if (cp < 0x103d1) return false\n if (cp < 0x103d6) return true\n if (cp < 0x10400) return false\n if (cp < 0x10450) return true\n if (cp < 0x10450) return false\n if (cp < 0x1049e) return true\n if (cp < 0x104b0) return false\n if (cp < 0x104d4) return true\n return false\n }\n if (cp < 0x1083c) {\n if (cp < 0x10760) {\n if (cp < 0x104d8) return false\n if (cp < 0x104fc) return true\n if (cp < 0x10500) return false\n if (cp < 0x10528) return true\n if (cp < 0x10530) return false\n if (cp < 0x10564) return true\n if (cp < 0x10600) return false\n if (cp < 0x10737) return true\n if (cp < 0x10740) return false\n if (cp < 0x10756) return true\n return false\n }\n if (cp < 0x10768) return true\n if (cp < 0x10800) return false\n if (cp < 0x10806) return true\n if (cp === 0x10808) return true\n if (cp < 0x1080a) return false\n if (cp < 0x10836) return true\n if (cp < 0x10837) return false\n if (cp < 0x10839) return true\n return false\n }\n if (cp < 0x108f4) {\n if (cp === 0x1083c) return true\n if (cp < 0x1083f) return false\n if (cp < 0x10856) return true\n if (cp < 0x10860) return false\n if (cp < 0x10877) return true\n if (cp < 0x10880) return false\n if (cp < 0x1089f) return true\n if (cp < 0x108e0) return false\n if (cp < 0x108f3) return true\n return false\n }\n if (cp < 0x108f6) return true\n if (cp < 0x10900) return false\n if (cp < 0x10916) return true\n if (cp < 0x10920) return false\n if (cp < 0x1093a) return true\n if (cp < 0x10980) return false\n if (cp < 0x109b8) return true\n if (cp < 0x109be) return false\n if (cp < 0x109c0) return true\n if (cp === 0x10a00) return true\n return false\n }\n if (cp < 0x16f50) {\n if (cp < 0x11400) {\n if (cp < 0x11183) {\n if (cp < 0x10b80) {\n if (cp < 0x10ac0) {\n if (cp < 0x10a10) return false\n if (cp < 0x10a14) return true\n if (cp < 0x10a15) return false\n if (cp < 0x10a18) return true\n if (cp < 0x10a19) return false\n if (cp < 0x10a34) return true\n if (cp < 0x10a60) return false\n if (cp < 0x10a7d) return true\n if (cp < 0x10a80) return false\n if (cp < 0x10a9d) return true\n return false\n }\n if (cp < 0x10ac8) return true\n if (cp < 0x10ac9) return false\n if (cp < 0x10ae5) return true\n if (cp < 0x10b00) return false\n if (cp < 0x10b36) return true\n if (cp < 0x10b40) return false\n if (cp < 0x10b56) return true\n if (cp < 0x10b60) return false\n if (cp < 0x10b73) return true\n return false\n }\n if (cp < 0x11083) {\n if (cp < 0x10b80) return false\n if (cp < 0x10b92) return true\n if (cp < 0x10c00) return false\n if (cp < 0x10c49) return true\n if (cp < 0x10c80) return false\n if (cp < 0x10cb3) return true\n if (cp < 0x10cc0) return false\n if (cp < 0x10cf3) return true\n if (cp < 0x11003) return false\n if (cp < 0x11038) return true\n return false\n }\n if (cp < 0x110b0) return true\n if (cp < 0x110d0) return false\n if (cp < 0x110e9) return true\n if (cp < 0x11103) return false\n if (cp < 0x11127) return true\n if (cp < 0x11150) return false\n if (cp < 0x11173) return true\n if (cp === 0x11176) return true\n return false\n }\n if (cp < 0x1129f) {\n if (cp < 0x11213) {\n if (cp < 0x11183) return false\n if (cp < 0x111b3) return true\n if (cp < 0x111c1) return false\n if (cp < 0x111c5) return true\n if (cp === 0x111da) return true\n if (cp === 0x111dc) return true\n if (cp < 0x11200) return false\n if (cp < 0x11212) return true\n return false\n }\n if (cp < 0x1122c) return true\n if (cp < 0x11280) return false\n if (cp < 0x11287) return true\n if (cp === 0x11288) return true\n if (cp < 0x1128a) return false\n if (cp < 0x1128e) return true\n if (cp < 0x1128f) return false\n if (cp < 0x1129e) return true\n return false\n }\n if (cp < 0x1132a) {\n if (cp < 0x1129f) return false\n if (cp < 0x112a9) return true\n if (cp < 0x112b0) return false\n if (cp < 0x112df) return true\n if (cp < 0x11305) return false\n if (cp < 0x1130d) return true\n if (cp < 0x1130f) return false\n if (cp < 0x11311) return true\n if (cp < 0x11313) return false\n if (cp < 0x11329) return true\n return false\n }\n if (cp < 0x11331) return true\n if (cp < 0x11332) return false\n if (cp < 0x11334) return true\n if (cp < 0x11335) return false\n if (cp < 0x1133a) return true\n if (cp === 0x1133d) return true\n if (cp === 0x11350) return true\n if (cp < 0x1135d) return false\n if (cp < 0x11362) return true\n return false\n }\n if (cp < 0x11c00) {\n if (cp < 0x11700) {\n if (cp < 0x11580) {\n if (cp < 0x11400) return false\n if (cp < 0x11435) return true\n if (cp < 0x11447) return false\n if (cp < 0x1144b) return true\n if (cp < 0x11480) return false\n if (cp < 0x114b0) return true\n if (cp < 0x114c4) return false\n if (cp < 0x114c6) return true\n if (cp === 0x114c7) return true\n return false\n }\n if (cp < 0x115af) return true\n if (cp < 0x115d8) return false\n if (cp < 0x115dc) return true\n if (cp < 0x11600) return false\n if (cp < 0x11630) return true\n if (cp === 0x11644) return true\n if (cp < 0x11680) return false\n if (cp < 0x116ab) return true\n return false\n }\n if (cp < 0x11a3a) {\n if (cp < 0x11700) return false\n if (cp < 0x1171a) return true\n if (cp < 0x118a0) return false\n if (cp < 0x118e0) return true\n if (cp === 0x118ff) return true\n if (cp === 0x11a00) return true\n if (cp < 0x11a0b) return false\n if (cp < 0x11a33) return true\n return false\n }\n if (cp === 0x11a3a) return true\n if (cp === 0x11a50) return true\n if (cp < 0x11a5c) return false\n if (cp < 0x11a84) return true\n if (cp < 0x11a86) return false\n if (cp < 0x11a8a) return true\n if (cp < 0x11ac0) return false\n if (cp < 0x11af9) return true\n return false\n }\n if (cp < 0x12480) {\n if (cp < 0x11d08) {\n if (cp < 0x11c00) return false\n if (cp < 0x11c09) return true\n if (cp < 0x11c0a) return false\n if (cp < 0x11c2f) return true\n if (cp === 0x11c40) return true\n if (cp < 0x11c72) return false\n if (cp < 0x11c90) return true\n if (cp < 0x11d00) return false\n if (cp < 0x11d07) return true\n return false\n }\n if (cp < 0x11d0a) return true\n if (cp < 0x11d0b) return false\n if (cp < 0x11d31) return true\n if (cp === 0x11d46) return true\n if (cp < 0x12000) return false\n if (cp < 0x1239a) return true\n if (cp < 0x12400) return false\n if (cp < 0x1246f) return true\n return false\n }\n if (cp < 0x16ad0) {\n if (cp < 0x12480) return false\n if (cp < 0x12544) return true\n if (cp < 0x13000) return false\n if (cp < 0x1342f) return true\n if (cp < 0x14400) return false\n if (cp < 0x14647) return true\n if (cp < 0x16800) return false\n if (cp < 0x16a39) return true\n if (cp < 0x16a40) return false\n if (cp < 0x16a5f) return true\n return false\n }\n if (cp < 0x16aee) return true\n if (cp < 0x16b00) return false\n if (cp < 0x16b30) return true\n if (cp < 0x16b40) return false\n if (cp < 0x16b44) return true\n if (cp < 0x16b63) return false\n if (cp < 0x16b78) return true\n if (cp < 0x16b7d) return false\n if (cp < 0x16b90) return true\n if (cp < 0x16f00) return false\n if (cp < 0x16f45) return true\n return false\n }\n if (cp < 0x1e800) {\n if (cp < 0x1d4c5) {\n if (cp < 0x1bc90) {\n if (cp < 0x1b000) {\n if (cp === 0x16f50) return true\n if (cp < 0x16f93) return false\n if (cp < 0x16fa0) return true\n if (cp < 0x16fe0) return false\n if (cp < 0x16fe2) return true\n if (cp < 0x17000) return false\n if (cp < 0x187ed) return true\n if (cp < 0x18800) return false\n if (cp < 0x18af3) return true\n return false\n }\n if (cp < 0x1b11f) return true\n if (cp < 0x1b170) return false\n if (cp < 0x1b2fc) return true\n if (cp < 0x1bc00) return false\n if (cp < 0x1bc6b) return true\n if (cp < 0x1bc70) return false\n if (cp < 0x1bc7d) return true\n if (cp < 0x1bc80) return false\n if (cp < 0x1bc89) return true\n return false\n }\n if (cp < 0x1d4a5) {\n if (cp < 0x1bc90) return false\n if (cp < 0x1bc9a) return true\n if (cp < 0x1d400) return false\n if (cp < 0x1d455) return true\n if (cp < 0x1d456) return false\n if (cp < 0x1d49d) return true\n if (cp < 0x1d49e) return false\n if (cp < 0x1d4a0) return true\n if (cp === 0x1d4a2) return true\n return false\n }\n if (cp < 0x1d4a7) return true\n if (cp < 0x1d4a9) return false\n if (cp < 0x1d4ad) return true\n if (cp < 0x1d4ae) return false\n if (cp < 0x1d4ba) return true\n if (cp === 0x1d4bb) return true\n if (cp < 0x1d4bd) return false\n if (cp < 0x1d4c4) return true\n return false\n }\n if (cp < 0x1d6a8) {\n if (cp < 0x1d53b) {\n if (cp < 0x1d4c5) return false\n if (cp < 0x1d506) return true\n if (cp < 0x1d507) return false\n if (cp < 0x1d50b) return true\n if (cp < 0x1d50d) return false\n if (cp < 0x1d515) return true\n if (cp < 0x1d516) return false\n if (cp < 0x1d51d) return true\n if (cp < 0x1d51e) return false\n if (cp < 0x1d53a) return true\n return false\n }\n if (cp < 0x1d53f) return true\n if (cp < 0x1d540) return false\n if (cp < 0x1d545) return true\n if (cp === 0x1d546) return true\n if (cp < 0x1d54a) return false\n if (cp < 0x1d551) return true\n if (cp < 0x1d552) return false\n if (cp < 0x1d6a6) return true\n return false\n }\n if (cp < 0x1d736) {\n if (cp < 0x1d6a8) return false\n if (cp < 0x1d6c1) return true\n if (cp < 0x1d6c2) return false\n if (cp < 0x1d6db) return true\n if (cp < 0x1d6dc) return false\n if (cp < 0x1d6fb) return true\n if (cp < 0x1d6fc) return false\n if (cp < 0x1d715) return true\n if (cp < 0x1d716) return false\n if (cp < 0x1d735) return true\n return false\n }\n if (cp < 0x1d74f) return true\n if (cp < 0x1d750) return false\n if (cp < 0x1d76f) return true\n if (cp < 0x1d770) return false\n if (cp < 0x1d789) return true\n if (cp < 0x1d78a) return false\n if (cp < 0x1d7a9) return true\n if (cp < 0x1d7aa) return false\n if (cp < 0x1d7c3) return true\n if (cp < 0x1d7c4) return false\n if (cp < 0x1d7cc) return true\n return false\n }\n if (cp < 0x1ee5b) {\n if (cp < 0x1ee3b) {\n if (cp < 0x1ee24) {\n if (cp < 0x1e800) return false\n if (cp < 0x1e8c5) return true\n if (cp < 0x1e900) return false\n if (cp < 0x1e944) return true\n if (cp < 0x1ee00) return false\n if (cp < 0x1ee04) return true\n if (cp < 0x1ee05) return false\n if (cp < 0x1ee20) return true\n if (cp < 0x1ee21) return false\n if (cp < 0x1ee23) return true\n return false\n }\n if (cp === 0x1ee24) return true\n if (cp === 0x1ee27) return true\n if (cp < 0x1ee29) return false\n if (cp < 0x1ee33) return true\n if (cp < 0x1ee34) return false\n if (cp < 0x1ee38) return true\n if (cp === 0x1ee39) return true\n return false\n }\n if (cp < 0x1ee4d) {\n if (cp === 0x1ee3b) return true\n if (cp === 0x1ee42) return true\n if (cp === 0x1ee47) return true\n if (cp === 0x1ee49) return true\n if (cp === 0x1ee4b) return true\n return false\n }\n if (cp < 0x1ee50) return true\n if (cp < 0x1ee51) return false\n if (cp < 0x1ee53) return true\n if (cp === 0x1ee54) return true\n if (cp === 0x1ee57) return true\n if (cp === 0x1ee59) return true\n return false\n }\n if (cp < 0x1ee80) {\n if (cp < 0x1ee67) {\n if (cp === 0x1ee5b) return true\n if (cp === 0x1ee5d) return true\n if (cp === 0x1ee5f) return true\n if (cp < 0x1ee61) return false\n if (cp < 0x1ee63) return true\n if (cp === 0x1ee64) return true\n return false\n }\n if (cp < 0x1ee6b) return true\n if (cp < 0x1ee6c) return false\n if (cp < 0x1ee73) return true\n if (cp < 0x1ee74) return false\n if (cp < 0x1ee78) return true\n if (cp < 0x1ee79) return false\n if (cp < 0x1ee7d) return true\n if (cp === 0x1ee7e) return true\n return false\n }\n if (cp < 0x20000) {\n if (cp < 0x1ee80) return false\n if (cp < 0x1ee8a) return true\n if (cp < 0x1ee8b) return false\n if (cp < 0x1ee9c) return true\n if (cp < 0x1eea1) return false\n if (cp < 0x1eea4) return true\n if (cp < 0x1eea5) return false\n if (cp < 0x1eeaa) return true\n if (cp < 0x1eeab) return false\n if (cp < 0x1eebc) return true\n return false\n }\n if (cp < 0x2a6d7) return true\n if (cp < 0x2a700) return false\n if (cp < 0x2b735) return true\n if (cp < 0x2b740) return false\n if (cp < 0x2b81e) return true\n if (cp < 0x2b820) return false\n if (cp < 0x2cea2) return true\n if (cp < 0x2ceb0) return false\n if (cp < 0x2ebe1) return true\n if (cp < 0x2f800) return false\n if (cp < 0x2fa1e) return true\n return false\n}\n\nfunction isLargeIdContinue(cp: number): boolean {\n if (cp < 0x1bf2) {\n if (cp < 0xd62) {\n if (cp < 0xa83) {\n if (cp < 0x93b) {\n if (cp < 0x6ea) {\n if (cp < 0x5c7) {\n if (cp === 0xb7) return true\n if (cp < 0x300) return false\n if (cp < 0x370) return true\n if (cp === 0x387) return true\n if (cp < 0x483) return false\n if (cp < 0x488) return true\n if (cp < 0x591) return false\n if (cp < 0x5be) return true\n if (cp === 0x5bf) return true\n if (cp < 0x5c1) return false\n if (cp < 0x5c3) return true\n if (cp < 0x5c4) return false\n if (cp < 0x5c6) return true\n return false\n }\n if (cp === 0x5c7) return true\n if (cp < 0x610) return false\n if (cp < 0x61b) return true\n if (cp < 0x64b) return false\n if (cp < 0x660) return true\n if (cp < 0x660) return false\n if (cp < 0x66a) return true\n if (cp === 0x670) return true\n if (cp < 0x6d6) return false\n if (cp < 0x6dd) return true\n if (cp < 0x6df) return false\n if (cp < 0x6e5) return true\n if (cp < 0x6e7) return false\n if (cp < 0x6e9) return true\n return false\n }\n if (cp < 0x81b) {\n if (cp < 0x6ea) return false\n if (cp < 0x6ee) return true\n if (cp < 0x6f0) return false\n if (cp < 0x6fa) return true\n if (cp === 0x711) return true\n if (cp < 0x730) return false\n if (cp < 0x74b) return true\n if (cp < 0x7a6) return false\n if (cp < 0x7b1) return true\n if (cp < 0x7c0) return false\n if (cp < 0x7ca) return true\n if (cp < 0x7eb) return false\n if (cp < 0x7f4) return true\n if (cp < 0x816) return false\n if (cp < 0x81a) return true\n return false\n }\n if (cp < 0x824) return true\n if (cp < 0x825) return false\n if (cp < 0x828) return true\n if (cp < 0x829) return false\n if (cp < 0x82e) return true\n if (cp < 0x859) return false\n if (cp < 0x85c) return true\n if (cp < 0x8d4) return false\n if (cp < 0x8e2) return true\n if (cp < 0x8e3) return false\n if (cp < 0x903) return true\n if (cp === 0x903) return true\n if (cp === 0x93a) return true\n return false\n }\n if (cp < 0x9cb) {\n if (cp < 0x962) {\n if (cp === 0x93b) return true\n if (cp === 0x93c) return true\n if (cp < 0x93e) return false\n if (cp < 0x941) return true\n if (cp < 0x941) return false\n if (cp < 0x949) return true\n if (cp < 0x949) return false\n if (cp < 0x94d) return true\n if (cp === 0x94d) return true\n if (cp < 0x94e) return false\n if (cp < 0x950) return true\n if (cp < 0x951) return false\n if (cp < 0x958) return true\n return false\n }\n if (cp < 0x964) return true\n if (cp < 0x966) return false\n if (cp < 0x970) return true\n if (cp === 0x981) return true\n if (cp < 0x982) return false\n if (cp < 0x984) return true\n if (cp === 0x9bc) return true\n if (cp < 0x9be) return false\n if (cp < 0x9c1) return true\n if (cp < 0x9c1) return false\n if (cp < 0x9c5) return true\n if (cp < 0x9c7) return false\n if (cp < 0x9c9) return true\n return false\n }\n if (cp < 0xa3e) {\n if (cp < 0x9cb) return false\n if (cp < 0x9cd) return true\n if (cp === 0x9cd) return true\n if (cp === 0x9d7) return true\n if (cp < 0x9e2) return false\n if (cp < 0x9e4) return true\n if (cp < 0x9e6) return false\n if (cp < 0x9f0) return true\n if (cp < 0xa01) return false\n if (cp < 0xa03) return true\n if (cp === 0xa03) return true\n if (cp === 0xa3c) return true\n return false\n }\n if (cp < 0xa41) return true\n if (cp < 0xa41) return false\n if (cp < 0xa43) return true\n if (cp < 0xa47) return false\n if (cp < 0xa49) return true\n if (cp < 0xa4b) return false\n if (cp < 0xa4e) return true\n if (cp === 0xa51) return true\n if (cp < 0xa66) return false\n if (cp < 0xa70) return true\n if (cp < 0xa70) return false\n if (cp < 0xa72) return true\n if (cp === 0xa75) return true\n if (cp < 0xa81) return false\n if (cp < 0xa83) return true\n return false\n }\n if (cp < 0xbd7) {\n if (cp < 0xb40) {\n if (cp < 0xae2) {\n if (cp === 0xa83) return true\n if (cp === 0xabc) return true\n if (cp < 0xabe) return false\n if (cp < 0xac1) return true\n if (cp < 0xac1) return false\n if (cp < 0xac6) return true\n if (cp < 0xac7) return false\n if (cp < 0xac9) return true\n if (cp === 0xac9) return true\n if (cp < 0xacb) return false\n if (cp < 0xacd) return true\n if (cp === 0xacd) return true\n return false\n }\n if (cp < 0xae4) return true\n if (cp < 0xae6) return false\n if (cp < 0xaf0) return true\n if (cp < 0xafa) return false\n if (cp < 0xb00) return true\n if (cp === 0xb01) return true\n if (cp < 0xb02) return false\n if (cp < 0xb04) return true\n if (cp === 0xb3c) return true\n if (cp === 0xb3e) return true\n if (cp === 0xb3f) return true\n return false\n }\n if (cp < 0xb66) {\n if (cp === 0xb40) return true\n if (cp < 0xb41) return false\n if (cp < 0xb45) return true\n if (cp < 0xb47) return false\n if (cp < 0xb49) return true\n if (cp < 0xb4b) return false\n if (cp < 0xb4d) return true\n if (cp === 0xb4d) return true\n if (cp === 0xb56) return true\n if (cp === 0xb57) return true\n if (cp < 0xb62) return false\n if (cp < 0xb64) return true\n return false\n }\n if (cp < 0xb70) return true\n if (cp === 0xb82) return true\n if (cp < 0xbbe) return false\n if (cp < 0xbc0) return true\n if (cp === 0xbc0) return true\n if (cp < 0xbc1) return false\n if (cp < 0xbc3) return true\n if (cp < 0xbc6) return false\n if (cp < 0xbc9) return true\n if (cp < 0xbca) return false\n if (cp < 0xbcd) return true\n if (cp === 0xbcd) return true\n return false\n }\n if (cp < 0xcc0) {\n if (cp < 0xc55) {\n if (cp === 0xbd7) return true\n if (cp < 0xbe6) return false\n if (cp < 0xbf0) return true\n if (cp === 0xc00) return true\n if (cp < 0xc01) return false\n if (cp < 0xc04) return true\n if (cp < 0xc3e) return false\n if (cp < 0xc41) return true\n if (cp < 0xc41) return false\n if (cp < 0xc45) return true\n if (cp < 0xc46) return false\n if (cp < 0xc49) return true\n if (cp < 0xc4a) return false\n if (cp < 0xc4e) return true\n return false\n }\n if (cp < 0xc57) return true\n if (cp < 0xc62) return false\n if (cp < 0xc64) return true\n if (cp < 0xc66) return false\n if (cp < 0xc70) return true\n if (cp === 0xc81) return true\n if (cp < 0xc82) return false\n if (cp < 0xc84) return true\n if (cp === 0xcbc) return true\n if (cp === 0xcbe) return true\n if (cp === 0xcbf) return true\n return false\n }\n if (cp < 0xd00) {\n if (cp < 0xcc0) return false\n if (cp < 0xcc5) return true\n if (cp === 0xcc6) return true\n if (cp < 0xcc7) return false\n if (cp < 0xcc9) return true\n if (cp < 0xcca) return false\n if (cp < 0xccc) return true\n if (cp < 0xccc) return false\n if (cp < 0xcce) return true\n if (cp < 0xcd5) return false\n if (cp < 0xcd7) return true\n if (cp < 0xce2) return false\n if (cp < 0xce4) return true\n if (cp < 0xce6) return false\n if (cp < 0xcf0) return true\n return false\n }\n if (cp < 0xd02) return true\n if (cp < 0xd02) return false\n if (cp < 0xd04) return true\n if (cp < 0xd3b) return false\n if (cp < 0xd3d) return true\n if (cp < 0xd3e) return false\n if (cp < 0xd41) return true\n if (cp < 0xd41) return false\n if (cp < 0xd45) return true\n if (cp < 0xd46) return false\n if (cp < 0xd49) return true\n if (cp < 0xd4a) return false\n if (cp < 0xd4d) return true\n if (cp === 0xd4d) return true\n if (cp === 0xd57) return true\n return false\n }\n if (cp < 0x17be) {\n if (cp < 0x102b) {\n if (cp < 0xebb) {\n if (cp < 0xde6) {\n if (cp < 0xd62) return false\n if (cp < 0xd64) return true\n if (cp < 0xd66) return false\n if (cp < 0xd70) return true\n if (cp < 0xd82) return false\n if (cp < 0xd84) return true\n if (cp === 0xdca) return true\n if (cp < 0xdcf) return false\n if (cp < 0xdd2) return true\n if (cp < 0xdd2) return false\n if (cp < 0xdd5) return true\n if (cp === 0xdd6) return true\n if (cp < 0xdd8) return false\n if (cp < 0xde0) return true\n return false\n }\n if (cp < 0xdf0) return true\n if (cp < 0xdf2) return false\n if (cp < 0xdf4) return true\n if (cp === 0xe31) return true\n if (cp < 0xe34) return false\n if (cp < 0xe3b) return true\n if (cp < 0xe47) return false\n if (cp < 0xe4f) return true\n if (cp < 0xe50) return false\n if (cp < 0xe5a) return true\n if (cp === 0xeb1) return true\n if (cp < 0xeb4) return false\n if (cp < 0xeba) return true\n return false\n }\n if (cp < 0xf3e) {\n if (cp < 0xebb) return false\n if (cp < 0xebd) return true\n if (cp < 0xec8) return false\n if (cp < 0xece) return true\n if (cp < 0xed0) return false\n if (cp < 0xeda) return true\n if (cp < 0xf18) return false\n if (cp < 0xf1a) return true\n if (cp < 0xf20) return false\n if (cp < 0xf2a) return true\n if (cp === 0xf35) return true\n if (cp === 0xf37) return true\n if (cp === 0xf39) return true\n return false\n }\n if (cp < 0xf40) return true\n if (cp < 0xf71) return false\n if (cp < 0xf7f) return true\n if (cp === 0xf7f) return true\n if (cp < 0xf80) return false\n if (cp < 0xf85) return true\n if (cp < 0xf86) return false\n if (cp < 0xf88) return true\n if (cp < 0xf8d) return false\n if (cp < 0xf98) return true\n if (cp < 0xf99) return false\n if (cp < 0xfbd) return true\n if (cp === 0xfc6) return true\n return false\n }\n if (cp < 0x1083) {\n if (cp < 0x1040) {\n if (cp < 0x102b) return false\n if (cp < 0x102d) return true\n if (cp < 0x102d) return false\n if (cp < 0x1031) return true\n if (cp === 0x1031) return true\n if (cp < 0x1032) return false\n if (cp < 0x1038) return true\n if (cp === 0x1038) return true\n if (cp < 0x1039) return false\n if (cp < 0x103b) return true\n if (cp < 0x103b) return false\n if (cp < 0x103d) return true\n if (cp < 0x103d) return false\n if (cp < 0x103f) return true\n return false\n }\n if (cp < 0x104a) return true\n if (cp < 0x1056) return false\n if (cp < 0x1058) return true\n if (cp < 0x1058) return false\n if (cp < 0x105a) return true\n if (cp < 0x105e) return false\n if (cp < 0x1061) return true\n if (cp < 0x1062) return false\n if (cp < 0x1065) return true\n if (cp < 0x1067) return false\n if (cp < 0x106e) return true\n if (cp < 0x1071) return false\n if (cp < 0x1075) return true\n if (cp === 0x1082) return true\n return false\n }\n if (cp < 0x135d) {\n if (cp < 0x1083) return false\n if (cp < 0x1085) return true\n if (cp < 0x1085) return false\n if (cp < 0x1087) return true\n if (cp < 0x1087) return false\n if (cp < 0x108d) return true\n if (cp === 0x108d) return true\n if (cp === 0x108f) return true\n if (cp < 0x1090) return false\n if (cp < 0x109a) return true\n if (cp < 0x109a) return false\n if (cp < 0x109d) return true\n if (cp === 0x109d) return true\n return false\n }\n if (cp < 0x1360) return true\n if (cp < 0x1369) return false\n if (cp < 0x1372) return true\n if (cp < 0x1712) return false\n if (cp < 0x1715) return true\n if (cp < 0x1732) return false\n if (cp < 0x1735) return true\n if (cp < 0x1752) return false\n if (cp < 0x1754) return true\n if (cp < 0x1772) return false\n if (cp < 0x1774) return true\n if (cp < 0x17b4) return false\n if (cp < 0x17b6) return true\n if (cp === 0x17b6) return true\n if (cp < 0x17b7) return false\n if (cp < 0x17be) return true\n return false\n }\n if (cp < 0x1a73) {\n if (cp < 0x1939) {\n if (cp < 0x18a9) {\n if (cp < 0x17be) return false\n if (cp < 0x17c6) return true\n if (cp === 0x17c6) return true\n if (cp < 0x17c7) return false\n if (cp < 0x17c9) return true\n if (cp < 0x17c9) return false\n if (cp < 0x17d4) return true\n if (cp === 0x17dd) return true\n if (cp < 0x17e0) return false\n if (cp < 0x17ea) return true\n if (cp < 0x180b) return false\n if (cp < 0x180e) return true\n if (cp < 0x1810) return false\n if (cp < 0x181a) return true\n return false\n }\n if (cp === 0x18a9) return true\n if (cp < 0x1920) return false\n if (cp < 0x1923) return true\n if (cp < 0x1923) return false\n if (cp < 0x1927) return true\n if (cp < 0x1927) return false\n if (cp < 0x1929) return true\n if (cp < 0x1929) return false\n if (cp < 0x192c) return true\n if (cp < 0x1930) return false\n if (cp < 0x1932) return true\n if (cp === 0x1932) return true\n if (cp < 0x1933) return false\n if (cp < 0x1939) return true\n return false\n }\n if (cp < 0x1a56) {\n if (cp < 0x1939) return false\n if (cp < 0x193c) return true\n if (cp < 0x1946) return false\n if (cp < 0x1950) return true\n if (cp < 0x19d0) return false\n if (cp < 0x19da) return true\n if (cp === 0x19da) return true\n if (cp < 0x1a17) return false\n if (cp < 0x1a19) return true\n if (cp < 0x1a19) return false\n if (cp < 0x1a1b) return true\n if (cp === 0x1a1b) return true\n if (cp === 0x1a55) return true\n return false\n }\n if (cp === 0x1a56) return true\n if (cp === 0x1a57) return true\n if (cp < 0x1a58) return false\n if (cp < 0x1a5f) return true\n if (cp === 0x1a60) return true\n if (cp === 0x1a61) return true\n if (cp === 0x1a62) return true\n if (cp < 0x1a63) return false\n if (cp < 0x1a65) return true\n if (cp < 0x1a65) return false\n if (cp < 0x1a6d) return true\n if (cp < 0x1a6d) return false\n if (cp < 0x1a73) return true\n return false\n }\n if (cp < 0x1b6b) {\n if (cp < 0x1b35) {\n if (cp < 0x1a73) return false\n if (cp < 0x1a7d) return true\n if (cp === 0x1a7f) return true\n if (cp < 0x1a80) return false\n if (cp < 0x1a8a) return true\n if (cp < 0x1a90) return false\n if (cp < 0x1a9a) return true\n if (cp < 0x1ab0) return false\n if (cp < 0x1abe) return true\n if (cp < 0x1b00) return false\n if (cp < 0x1b04) return true\n if (cp === 0x1b04) return true\n if (cp === 0x1b34) return true\n return false\n }\n if (cp === 0x1b35) return true\n if (cp < 0x1b36) return false\n if (cp < 0x1b3b) return true\n if (cp === 0x1b3b) return true\n if (cp === 0x1b3c) return true\n if (cp < 0x1b3d) return false\n if (cp < 0x1b42) return true\n if (cp === 0x1b42) return true\n if (cp < 0x1b43) return false\n if (cp < 0x1b45) return true\n if (cp < 0x1b50) return false\n if (cp < 0x1b5a) return true\n return false\n }\n if (cp < 0x1bab) {\n if (cp < 0x1b6b) return false\n if (cp < 0x1b74) return true\n if (cp < 0x1b80) return false\n if (cp < 0x1b82) return true\n if (cp === 0x1b82) return true\n if (cp === 0x1ba1) return true\n if (cp < 0x1ba2) return false\n if (cp < 0x1ba6) return true\n if (cp < 0x1ba6) return false\n if (cp < 0x1ba8) return true\n if (cp < 0x1ba8) return false\n if (cp < 0x1baa) return true\n if (cp === 0x1baa) return true\n return false\n }\n if (cp < 0x1bae) return true\n if (cp < 0x1bb0) return false\n if (cp < 0x1bba) return true\n if (cp === 0x1be6) return true\n if (cp === 0x1be7) return true\n if (cp < 0x1be8) return false\n if (cp < 0x1bea) return true\n if (cp < 0x1bea) return false\n if (cp < 0x1bed) return true\n if (cp === 0x1bed) return true\n if (cp === 0x1bee) return true\n if (cp < 0x1bef) return false\n if (cp < 0x1bf2) return true\n return false\n }\n if (cp < 0x111d0) {\n if (cp < 0xaa43) {\n if (cp < 0xa69e) {\n if (cp < 0x1dc0) {\n if (cp < 0x1cd4) {\n if (cp < 0x1bf2) return false\n if (cp < 0x1bf4) return true\n if (cp < 0x1c24) return false\n if (cp < 0x1c2c) return true\n if (cp < 0x1c2c) return false\n if (cp < 0x1c34) return true\n if (cp < 0x1c34) return false\n if (cp < 0x1c36) return true\n if (cp < 0x1c36) return false\n if (cp < 0x1c38) return true\n if (cp < 0x1c40) return false\n if (cp < 0x1c4a) return true\n if (cp < 0x1c50) return false\n if (cp < 0x1c5a) return true\n if (cp < 0x1cd0) return false\n if (cp < 0x1cd3) return true\n return false\n }\n if (cp < 0x1ce1) return true\n if (cp === 0x1ce1) return true\n if (cp < 0x1ce2) return false\n if (cp < 0x1ce9) return true\n if (cp === 0x1ced) return true\n if (cp < 0x1cf2) return false\n if (cp < 0x1cf4) return true\n if (cp === 0x1cf4) return true\n if (cp === 0x1cf7) return true\n if (cp < 0x1cf8) return false\n if (cp < 0x1cfa) return true\n return false\n }\n if (cp < 0x2d7f) {\n if (cp < 0x1dc0) return false\n if (cp < 0x1dfa) return true\n if (cp < 0x1dfb) return false\n if (cp < 0x1e00) return true\n if (cp < 0x203f) return false\n if (cp < 0x2041) return true\n if (cp === 0x2054) return true\n if (cp < 0x20d0) return false\n if (cp < 0x20dd) return true\n if (cp === 0x20e1) return true\n if (cp < 0x20e5) return false\n if (cp < 0x20f1) return true\n if (cp < 0x2cef) return false\n if (cp < 0x2cf2) return true\n return false\n }\n if (cp === 0x2d7f) return true\n if (cp < 0x2de0) return false\n if (cp < 0x2e00) return true\n if (cp < 0x302a) return false\n if (cp < 0x302e) return true\n if (cp < 0x302e) return false\n if (cp < 0x3030) return true\n if (cp < 0x3099) return false\n if (cp < 0x309b) return true\n if (cp < 0xa620) return false\n if (cp < 0xa62a) return true\n if (cp === 0xa66f) return true\n if (cp < 0xa674) return false\n if (cp < 0xa67e) return true\n return false\n }\n if (cp < 0xa952) {\n if (cp < 0xa880) {\n if (cp < 0xa69e) return false\n if (cp < 0xa6a0) return true\n if (cp < 0xa6f0) return false\n if (cp < 0xa6f2) return true\n if (cp === 0xa802) return true\n if (cp === 0xa806) return true\n if (cp === 0xa80b) return true\n if (cp < 0xa823) return false\n if (cp < 0xa825) return true\n if (cp < 0xa825) return false\n if (cp < 0xa827) return true\n if (cp === 0xa827) return true\n return false\n }\n if (cp < 0xa882) return true\n if (cp < 0xa8b4) return false\n if (cp < 0xa8c4) return true\n if (cp < 0xa8c4) return false\n if (cp < 0xa8c6) return true\n if (cp < 0xa8d0) return false\n if (cp < 0xa8da) return true\n if (cp < 0xa8e0) return false\n if (cp < 0xa8f2) return true\n if (cp < 0xa900) return false\n if (cp < 0xa90a) return true\n if (cp < 0xa926) return false\n if (cp < 0xa92e) return true\n if (cp < 0xa947) return false\n if (cp < 0xa952) return true\n return false\n }\n if (cp < 0xa9bd) {\n if (cp < 0xa952) return false\n if (cp < 0xa954) return true\n if (cp < 0xa980) return false\n if (cp < 0xa983) return true\n if (cp === 0xa983) return true\n if (cp === 0xa9b3) return true\n if (cp < 0xa9b4) return false\n if (cp < 0xa9b6) return true\n if (cp < 0xa9b6) return false\n if (cp < 0xa9ba) return true\n if (cp < 0xa9ba) return false\n if (cp < 0xa9bc) return true\n if (cp === 0xa9bc) return true\n return false\n }\n if (cp < 0xa9c1) return true\n if (cp < 0xa9d0) return false\n if (cp < 0xa9da) return true\n if (cp === 0xa9e5) return true\n if (cp < 0xa9f0) return false\n if (cp < 0xa9fa) return true\n if (cp < 0xaa29) return false\n if (cp < 0xaa2f) return true\n if (cp < 0xaa2f) return false\n if (cp < 0xaa31) return true\n if (cp < 0xaa31) return false\n if (cp < 0xaa33) return true\n if (cp < 0xaa33) return false\n if (cp < 0xaa35) return true\n if (cp < 0xaa35) return false\n if (cp < 0xaa37) return true\n return false\n }\n if (cp < 0x102e0) {\n if (cp < 0xaaf6) {\n if (cp < 0xaab2) {\n if (cp === 0xaa43) return true\n if (cp === 0xaa4c) return true\n if (cp === 0xaa4d) return true\n if (cp < 0xaa50) return false\n if (cp < 0xaa5a) return true\n if (cp === 0xaa7b) return true\n if (cp === 0xaa7c) return true\n if (cp === 0xaa7d) return true\n if (cp === 0xaab0) return true\n return false\n }\n if (cp < 0xaab5) return true\n if (cp < 0xaab7) return false\n if (cp < 0xaab9) return true\n if (cp < 0xaabe) return false\n if (cp < 0xaac0) return true\n if (cp === 0xaac1) return true\n if (cp === 0xaaeb) return true\n if (cp < 0xaaec) return false\n if (cp < 0xaaee) return true\n if (cp < 0xaaee) return false\n if (cp < 0xaaf0) return true\n if (cp === 0xaaf5) return true\n return false\n }\n if (cp < 0xabf0) {\n if (cp === 0xaaf6) return true\n if (cp < 0xabe3) return false\n if (cp < 0xabe5) return true\n if (cp === 0xabe5) return true\n if (cp < 0xabe6) return false\n if (cp < 0xabe8) return true\n if (cp === 0xabe8) return true\n if (cp < 0xabe9) return false\n if (cp < 0xabeb) return true\n if (cp === 0xabec) return true\n if (cp === 0xabed) return true\n return false\n }\n if (cp < 0xabfa) return true\n if (cp === 0xfb1e) return true\n if (cp < 0xfe00) return false\n if (cp < 0xfe10) return true\n if (cp < 0xfe20) return false\n if (cp < 0xfe30) return true\n if (cp < 0xfe33) return false\n if (cp < 0xfe35) return true\n if (cp < 0xfe4d) return false\n if (cp < 0xfe50) return true\n if (cp < 0xff10) return false\n if (cp < 0xff1a) return true\n if (cp === 0xff3f) return true\n if (cp === 0x101fd) return true\n return false\n }\n if (cp < 0x110b0) {\n if (cp < 0x10ae5) {\n if (cp === 0x102e0) return true\n if (cp < 0x10376) return false\n if (cp < 0x1037b) return true\n if (cp < 0x104a0) return false\n if (cp < 0x104aa) return true\n if (cp < 0x10a01) return false\n if (cp < 0x10a04) return true\n if (cp < 0x10a05) return false\n if (cp < 0x10a07) return true\n if (cp < 0x10a0c) return false\n if (cp < 0x10a10) return true\n if (cp < 0x10a38) return false\n if (cp < 0x10a3b) return true\n if (cp === 0x10a3f) return true\n return false\n }\n if (cp < 0x10ae7) return true\n if (cp === 0x11000) return true\n if (cp === 0x11001) return true\n if (cp === 0x11002) return true\n if (cp < 0x11038) return false\n if (cp < 0x11047) return true\n if (cp < 0x11066) return false\n if (cp < 0x11070) return true\n if (cp < 0x1107f) return false\n if (cp < 0x11082) return true\n if (cp === 0x11082) return true\n return false\n }\n if (cp < 0x1112d) {\n if (cp < 0x110b0) return false\n if (cp < 0x110b3) return true\n if (cp < 0x110b3) return false\n if (cp < 0x110b7) return true\n if (cp < 0x110b7) return false\n if (cp < 0x110b9) return true\n if (cp < 0x110b9) return false\n if (cp < 0x110bb) return true\n if (cp < 0x110f0) return false\n if (cp < 0x110fa) return true\n if (cp < 0x11100) return false\n if (cp < 0x11103) return true\n if (cp < 0x11127) return false\n if (cp < 0x1112c) return true\n if (cp === 0x1112c) return true\n return false\n }\n if (cp < 0x11135) return true\n if (cp < 0x11136) return false\n if (cp < 0x11140) return true\n if (cp === 0x11173) return true\n if (cp < 0x11180) return false\n if (cp < 0x11182) return true\n if (cp === 0x11182) return true\n if (cp < 0x111b3) return false\n if (cp < 0x111b6) return true\n if (cp < 0x111b6) return false\n if (cp < 0x111bf) return true\n if (cp < 0x111bf) return false\n if (cp < 0x111c1) return true\n if (cp < 0x111ca) return false\n if (cp < 0x111cd) return true\n return false\n }\n if (cp < 0x11726) {\n if (cp < 0x114b3) {\n if (cp < 0x11340) {\n if (cp < 0x112df) {\n if (cp < 0x111d0) return false\n if (cp < 0x111da) return true\n if (cp < 0x1122c) return false\n if (cp < 0x1122f) return true\n if (cp < 0x1122f) return false\n if (cp < 0x11232) return true\n if (cp < 0x11232) return false\n if (cp < 0x11234) return true\n if (cp === 0x11234) return true\n if (cp === 0x11235) return true\n if (cp < 0x11236) return false\n if (cp < 0x11238) return true\n if (cp === 0x1123e) return true\n return false\n }\n if (cp === 0x112df) return true\n if (cp < 0x112e0) return false\n if (cp < 0x112e3) return true\n if (cp < 0x112e3) return false\n if (cp < 0x112eb) return true\n if (cp < 0x112f0) return false\n if (cp < 0x112fa) return true\n if (cp < 0x11300) return false\n if (cp < 0x11302) return true\n if (cp < 0x11302) return false\n if (cp < 0x11304) return true\n if (cp === 0x1133c) return true\n if (cp < 0x1133e) return false\n if (cp < 0x11340) return true\n return false\n }\n if (cp < 0x11435) {\n if (cp === 0x11340) return true\n if (cp < 0x11341) return false\n if (cp < 0x11345) return true\n if (cp < 0x11347) return false\n if (cp < 0x11349) return true\n if (cp < 0x1134b) return false\n if (cp < 0x1134e) return true\n if (cp === 0x11357) return true\n if (cp < 0x11362) return false\n if (cp < 0x11364) return true\n if (cp < 0x11366) return false\n if (cp < 0x1136d) return true\n if (cp < 0x11370) return false\n if (cp < 0x11375) return true\n return false\n }\n if (cp < 0x11438) return true\n if (cp < 0x11438) return false\n if (cp < 0x11440) return true\n if (cp < 0x11440) return false\n if (cp < 0x11442) return true\n if (cp < 0x11442) return false\n if (cp < 0x11445) return true\n if (cp === 0x11445) return true\n if (cp === 0x11446) return true\n if (cp < 0x11450) return false\n if (cp < 0x1145a) return true\n if (cp < 0x114b0) return false\n if (cp < 0x114b3) return true\n return false\n }\n if (cp < 0x11633) {\n if (cp < 0x115af) {\n if (cp < 0x114b3) return false\n if (cp < 0x114b9) return true\n if (cp === 0x114b9) return true\n if (cp === 0x114ba) return true\n if (cp < 0x114bb) return false\n if (cp < 0x114bf) return true\n if (cp < 0x114bf) return false\n if (cp < 0x114c1) return true\n if (cp === 0x114c1) return true\n if (cp < 0x114c2) return false\n if (cp < 0x114c4) return true\n if (cp < 0x114d0) return false\n if (cp < 0x114da) return true\n return false\n }\n if (cp < 0x115b2) return true\n if (cp < 0x115b2) return false\n if (cp < 0x115b6) return true\n if (cp < 0x115b8) return false\n if (cp < 0x115bc) return true\n if (cp < 0x115bc) return false\n if (cp < 0x115be) return true\n if (cp === 0x115be) return true\n if (cp < 0x115bf) return false\n if (cp < 0x115c1) return true\n if (cp < 0x115dc) return false\n if (cp < 0x115de) return true\n if (cp < 0x11630) return false\n if (cp < 0x11633) return true\n return false\n }\n if (cp < 0x116ad) {\n if (cp < 0x11633) return false\n if (cp < 0x1163b) return true\n if (cp < 0x1163b) return false\n if (cp < 0x1163d) return true\n if (cp === 0x1163d) return true\n if (cp === 0x1163e) return true\n if (cp < 0x1163f) return false\n if (cp < 0x11641) return true\n if (cp < 0x11650) return false\n if (cp < 0x1165a) return true\n if (cp === 0x116ab) return true\n if (cp === 0x116ac) return true\n return false\n }\n if (cp === 0x116ad) return true\n if (cp < 0x116ae) return false\n if (cp < 0x116b0) return true\n if (cp < 0x116b0) return false\n if (cp < 0x116b6) return true\n if (cp === 0x116b6) return true\n if (cp === 0x116b7) return true\n if (cp < 0x116c0) return false\n if (cp < 0x116ca) return true\n if (cp < 0x1171d) return false\n if (cp < 0x11720) return true\n if (cp < 0x11720) return false\n if (cp < 0x11722) return true\n if (cp < 0x11722) return false\n if (cp < 0x11726) return true\n return false\n }\n if (cp < 0x11d3f) {\n if (cp < 0x11a98) {\n if (cp < 0x11a39) {\n if (cp === 0x11726) return true\n if (cp < 0x11727) return false\n if (cp < 0x1172c) return true\n if (cp < 0x11730) return false\n if (cp < 0x1173a) return true\n if (cp < 0x118e0) return false\n if (cp < 0x118ea) return true\n if (cp < 0x11a01) return false\n if (cp < 0x11a07) return true\n if (cp < 0x11a07) return false\n if (cp < 0x11a09) return true\n if (cp < 0x11a09) return false\n if (cp < 0x11a0b) return true\n if (cp < 0x11a33) return false\n if (cp < 0x11a39) return true\n return false\n }\n if (cp === 0x11a39) return true\n if (cp < 0x11a3b) return false\n if (cp < 0x11a3f) return true\n if (cp === 0x11a47) return true\n if (cp < 0x11a51) return false\n if (cp < 0x11a57) return true\n if (cp < 0x11a57) return false\n if (cp < 0x11a59) return true\n if (cp < 0x11a59) return false\n if (cp < 0x11a5c) return true\n if (cp < 0x11a8a) return false\n if (cp < 0x11a97) return true\n if (cp === 0x11a97) return true\n return false\n }\n if (cp < 0x11ca9) {\n if (cp < 0x11a98) return false\n if (cp < 0x11a9a) return true\n if (cp === 0x11c2f) return true\n if (cp < 0x11c30) return false\n if (cp < 0x11c37) return true\n if (cp < 0x11c38) return false\n if (cp < 0x11c3e) return true\n if (cp === 0x11c3e) return true\n if (cp === 0x11c3f) return true\n if (cp < 0x11c50) return false\n if (cp < 0x11c5a) return true\n if (cp < 0x11c92) return false\n if (cp < 0x11ca8) return true\n return false\n }\n if (cp === 0x11ca9) return true\n if (cp < 0x11caa) return false\n if (cp < 0x11cb1) return true\n if (cp === 0x11cb1) return true\n if (cp < 0x11cb2) return false\n if (cp < 0x11cb4) return true\n if (cp === 0x11cb4) return true\n if (cp < 0x11cb5) return false\n if (cp < 0x11cb7) return true\n if (cp < 0x11d31) return false\n if (cp < 0x11d37) return true\n if (cp === 0x11d3a) return true\n if (cp < 0x11d3c) return false\n if (cp < 0x11d3e) return true\n return false\n }\n if (cp < 0x1d242) {\n if (cp < 0x16f8f) {\n if (cp < 0x11d3f) return false\n if (cp < 0x11d46) return true\n if (cp === 0x11d47) return true\n if (cp < 0x11d50) return false\n if (cp < 0x11d5a) return true\n if (cp < 0x16a60) return false\n if (cp < 0x16a6a) return true\n if (cp < 0x16af0) return false\n if (cp < 0x16af5) return true\n if (cp < 0x16b30) return false\n if (cp < 0x16b37) return true\n if (cp < 0x16b50) return false\n if (cp < 0x16b5a) return true\n if (cp < 0x16f51) return false\n if (cp < 0x16f7f) return true\n return false\n }\n if (cp < 0x16f93) return true\n if (cp < 0x1bc9d) return false\n if (cp < 0x1bc9f) return true\n if (cp < 0x1d165) return false\n if (cp < 0x1d167) return true\n if (cp < 0x1d167) return false\n if (cp < 0x1d16a) return true\n if (cp < 0x1d16d) return false\n if (cp < 0x1d173) return true\n if (cp < 0x1d17b) return false\n if (cp < 0x1d183) return true\n if (cp < 0x1d185) return false\n if (cp < 0x1d18c) return true\n if (cp < 0x1d1aa) return false\n if (cp < 0x1d1ae) return true\n return false\n }\n if (cp < 0x1e000) {\n if (cp < 0x1d242) return false\n if (cp < 0x1d245) return true\n if (cp < 0x1d7ce) return false\n if (cp < 0x1d800) return true\n if (cp < 0x1da00) return false\n if (cp < 0x1da37) return true\n if (cp < 0x1da3b) return false\n if (cp < 0x1da6d) return true\n if (cp === 0x1da75) return true\n if (cp === 0x1da84) return true\n if (cp < 0x1da9b) return false\n if (cp < 0x1daa0) return true\n if (cp < 0x1daa1) return false\n if (cp < 0x1dab0) return true\n return false\n }\n if (cp < 0x1e007) return true\n if (cp < 0x1e008) return false\n if (cp < 0x1e019) return true\n if (cp < 0x1e01b) return false\n if (cp < 0x1e022) return true\n if (cp < 0x1e023) return false\n if (cp < 0x1e025) return true\n if (cp < 0x1e026) return false\n if (cp < 0x1e02b) return true\n if (cp < 0x1e8d0) return false\n if (cp < 0x1e8d7) return true\n if (cp < 0x1e944) return false\n if (cp < 0x1e94b) return true\n if (cp < 0x1e950) return false\n if (cp < 0x1e95a) return true\n if (cp < 0xe0100) return false\n if (cp < 0xe01f0) return true\n return false\n}\n","const PropertyData: Object & { [key: string]: Set } = {\n $LONE: new Set([\n \"ASCII\",\n \"ASCII_Hex_Digit\",\n \"AHex\",\n \"Alphabetic\",\n \"Alpha\",\n \"Any\",\n \"Assigned\",\n \"Bidi_Control\",\n \"Bidi_C\",\n \"Bidi_Mirrored\",\n \"Bidi_M\",\n \"Case_Ignorable\",\n \"CI\",\n \"Cased\",\n \"Changes_When_Casefolded\",\n \"CWCF\",\n \"Changes_When_Casemapped\",\n \"CWCM\",\n \"Changes_When_Lowercased\",\n \"CWL\",\n \"Changes_When_NFKC_Casefolded\",\n \"CWKCF\",\n \"Changes_When_Titlecased\",\n \"CWT\",\n \"Changes_When_Uppercased\",\n \"CWU\",\n \"Dash\",\n \"Default_Ignorable_Code_Point\",\n \"DI\",\n \"Deprecated\",\n \"Dep\",\n \"Diacritic\",\n \"Dia\",\n \"Emoji\",\n \"Emoji_Component\",\n \"Emoji_Modifier\",\n \"Emoji_Modifier_Base\",\n \"Emoji_Presentation\",\n \"Extender\",\n \"Ext\",\n \"Grapheme_Base\",\n \"Gr_Base\",\n \"Grapheme_Extend\",\n \"Gr_Ext\",\n \"Hex_Digit\",\n \"Hex\",\n \"IDS_Binary_Operator\",\n \"IDSB\",\n \"IDS_Trinary_Operator\",\n \"IDST\",\n \"ID_Continue\",\n \"IDC\",\n \"ID_Start\",\n \"IDS\",\n \"Ideographic\",\n \"Ideo\",\n \"Join_Control\",\n \"Join_C\",\n \"Logical_Order_Exception\",\n \"LOE\",\n \"Lowercase\",\n \"Lower\",\n \"Math\",\n \"Noncharacter_Code_Point\",\n \"NChar\",\n \"Pattern_Syntax\",\n \"Pat_Syn\",\n \"Pattern_White_Space\",\n \"Pat_WS\",\n \"Quotation_Mark\",\n \"QMark\",\n \"Radical\",\n \"Regional_Indicator\",\n \"RI\",\n \"Sentence_Terminal\",\n \"STerm\",\n \"Soft_Dotted\",\n \"SD\",\n \"Terminal_Punctuation\",\n \"Term\",\n \"Unified_Ideograph\",\n \"UIdeo\",\n \"Uppercase\",\n \"Upper\",\n \"Variation_Selector\",\n \"VS\",\n \"White_Space\",\n \"space\",\n \"XID_Continue\",\n \"XIDC\",\n \"XID_Start\",\n \"XIDS\",\n ]),\n General_Category: new Set([\n \"Cased_Letter\",\n \"LC\",\n \"Close_Punctuation\",\n \"Pe\",\n \"Connector_Punctuation\",\n \"Pc\",\n \"Control\",\n \"Cc\",\n \"cntrl\",\n \"Currency_Symbol\",\n \"Sc\",\n \"Dash_Punctuation\",\n \"Pd\",\n \"Decimal_Number\",\n \"Nd\",\n \"digit\",\n \"Enclosing_Mark\",\n \"Me\",\n \"Final_Punctuation\",\n \"Pf\",\n \"Format\",\n \"Cf\",\n \"Initial_Punctuation\",\n \"Pi\",\n \"Letter\",\n \"L\",\n \"Letter_Number\",\n \"Nl\",\n \"Line_Separator\",\n \"Zl\",\n \"Lowercase_Letter\",\n \"Ll\",\n \"Mark\",\n \"M\",\n \"Combining_Mark\",\n \"Math_Symbol\",\n \"Sm\",\n \"Modifier_Letter\",\n \"Lm\",\n \"Modifier_Symbol\",\n \"Sk\",\n \"Nonspacing_Mark\",\n \"Mn\",\n \"Number\",\n \"N\",\n \"Open_Punctuation\",\n \"Ps\",\n \"Other\",\n \"C\",\n \"Other_Letter\",\n \"Lo\",\n \"Other_Number\",\n \"No\",\n \"Other_Punctuation\",\n \"Po\",\n \"Other_Symbol\",\n \"So\",\n \"Paragraph_Separator\",\n \"Zp\",\n \"Private_Use\",\n \"Co\",\n \"Punctuation\",\n \"P\",\n \"punct\",\n \"Separator\",\n \"Z\",\n \"Space_Separator\",\n \"Zs\",\n \"Spacing_Mark\",\n \"Mc\",\n \"Surrogate\",\n \"Cs\",\n \"Symbol\",\n \"S\",\n \"Titlecase_Letter\",\n \"Lt\",\n \"Unassigned\",\n \"Cn\",\n \"Uppercase_Letter\",\n \"Lu\",\n ]),\n Script: new Set([\n \"Adlam\",\n \"Adlm\",\n \"Ahom\",\n \"Anatolian_Hieroglyphs\",\n \"Hluw\",\n \"Arabic\",\n \"Arab\",\n \"Armenian\",\n \"Armn\",\n \"Avestan\",\n \"Avst\",\n \"Balinese\",\n \"Bali\",\n \"Bamum\",\n \"Bamu\",\n \"Bassa_Vah\",\n \"Bass\",\n \"Batak\",\n \"Batk\",\n \"Bengali\",\n \"Beng\",\n \"Bhaiksuki\",\n \"Bhks\",\n \"Bopomofo\",\n \"Bopo\",\n \"Brahmi\",\n \"Brah\",\n \"Braille\",\n \"Brai\",\n \"Buginese\",\n \"Bugi\",\n \"Buhid\",\n \"Buhd\",\n \"Canadian_Aboriginal\",\n \"Cans\",\n \"Carian\",\n \"Cari\",\n \"Caucasian_Albanian\",\n \"Aghb\",\n \"Chakma\",\n \"Cakm\",\n \"Cham\",\n \"Cherokee\",\n \"Cher\",\n \"Common\",\n \"Zyyy\",\n \"Coptic\",\n \"Copt\",\n \"Qaac\",\n \"Cuneiform\",\n \"Xsux\",\n \"Cypriot\",\n \"Cprt\",\n \"Cyrillic\",\n \"Cyrl\",\n \"Deseret\",\n \"Dsrt\",\n \"Devanagari\",\n \"Deva\",\n \"Duployan\",\n \"Dupl\",\n \"Egyptian_Hieroglyphs\",\n \"Egyp\",\n \"Elbasan\",\n \"Elba\",\n \"Ethiopic\",\n \"Ethi\",\n \"Georgian\",\n \"Geor\",\n \"Glagolitic\",\n \"Glag\",\n \"Gothic\",\n \"Goth\",\n \"Grantha\",\n \"Gran\",\n \"Greek\",\n \"Grek\",\n \"Gujarati\",\n \"Gujr\",\n \"Gurmukhi\",\n \"Guru\",\n \"Han\",\n \"Hani\",\n \"Hangul\",\n \"Hang\",\n \"Hanunoo\",\n \"Hano\",\n \"Hatran\",\n \"Hatr\",\n \"Hebrew\",\n \"Hebr\",\n \"Hiragana\",\n \"Hira\",\n \"Imperial_Aramaic\",\n \"Armi\",\n \"Inherited\",\n \"Zinh\",\n \"Qaai\",\n \"Inscriptional_Pahlavi\",\n \"Phli\",\n \"Inscriptional_Parthian\",\n \"Prti\",\n \"Javanese\",\n \"Java\",\n \"Kaithi\",\n \"Kthi\",\n \"Kannada\",\n \"Knda\",\n \"Katakana\",\n \"Kana\",\n \"Kayah_Li\",\n \"Kali\",\n \"Kharoshthi\",\n \"Khar\",\n \"Khmer\",\n \"Khmr\",\n \"Khojki\",\n \"Khoj\",\n \"Khudawadi\",\n \"Sind\",\n \"Lao\",\n \"Laoo\",\n \"Latin\",\n \"Latn\",\n \"Lepcha\",\n \"Lepc\",\n \"Limbu\",\n \"Limb\",\n \"Linear_A\",\n \"Lina\",\n \"Linear_B\",\n \"Linb\",\n \"Lisu\",\n \"Lycian\",\n \"Lyci\",\n \"Lydian\",\n \"Lydi\",\n \"Mahajani\",\n \"Mahj\",\n \"Malayalam\",\n \"Mlym\",\n \"Mandaic\",\n \"Mand\",\n \"Manichaean\",\n \"Mani\",\n \"Marchen\",\n \"Marc\",\n \"Masaram_Gondi\",\n \"Gonm\",\n \"Meetei_Mayek\",\n \"Mtei\",\n \"Mende_Kikakui\",\n \"Mend\",\n \"Meroitic_Cursive\",\n \"Merc\",\n \"Meroitic_Hieroglyphs\",\n \"Mero\",\n \"Miao\",\n \"Plrd\",\n \"Modi\",\n \"Mongolian\",\n \"Mong\",\n \"Mro\",\n \"Mroo\",\n \"Multani\",\n \"Mult\",\n \"Myanmar\",\n \"Mymr\",\n \"Nabataean\",\n \"Nbat\",\n \"New_Tai_Lue\",\n \"Talu\",\n \"Newa\",\n \"Nko\",\n \"Nkoo\",\n \"Nushu\",\n \"Nshu\",\n \"Ogham\",\n \"Ogam\",\n \"Ol_Chiki\",\n \"Olck\",\n \"Old_Hungarian\",\n \"Hung\",\n \"Old_Italic\",\n \"Ital\",\n \"Old_North_Arabian\",\n \"Narb\",\n \"Old_Permic\",\n \"Perm\",\n \"Old_Persian\",\n \"Xpeo\",\n \"Old_South_Arabian\",\n \"Sarb\",\n \"Old_Turkic\",\n \"Orkh\",\n \"Oriya\",\n \"Orya\",\n \"Osage\",\n \"Osge\",\n \"Osmanya\",\n \"Osma\",\n \"Pahawh_Hmong\",\n \"Hmng\",\n \"Palmyrene\",\n \"Palm\",\n \"Pau_Cin_Hau\",\n \"Pauc\",\n \"Phags_Pa\",\n \"Phag\",\n \"Phoenician\",\n \"Phnx\",\n \"Psalter_Pahlavi\",\n \"Phlp\",\n \"Rejang\",\n \"Rjng\",\n \"Runic\",\n \"Runr\",\n \"Samaritan\",\n \"Samr\",\n \"Saurashtra\",\n \"Saur\",\n \"Sharada\",\n \"Shrd\",\n \"Shavian\",\n \"Shaw\",\n \"Siddham\",\n \"Sidd\",\n \"SignWriting\",\n \"Sgnw\",\n \"Sinhala\",\n \"Sinh\",\n \"Sora_Sompeng\",\n \"Sora\",\n \"Soyombo\",\n \"Soyo\",\n \"Sundanese\",\n \"Sund\",\n \"Syloti_Nagri\",\n \"Sylo\",\n \"Syriac\",\n \"Syrc\",\n \"Tagalog\",\n \"Tglg\",\n \"Tagbanwa\",\n \"Tagb\",\n \"Tai_Le\",\n \"Tale\",\n \"Tai_Tham\",\n \"Lana\",\n \"Tai_Viet\",\n \"Tavt\",\n \"Takri\",\n \"Takr\",\n \"Tamil\",\n \"Taml\",\n \"Tangut\",\n \"Tang\",\n \"Telugu\",\n \"Telu\",\n \"Thaana\",\n \"Thaa\",\n \"Thai\",\n \"Tibetan\",\n \"Tibt\",\n \"Tifinagh\",\n \"Tfng\",\n \"Tirhuta\",\n \"Tirh\",\n \"Ugaritic\",\n \"Ugar\",\n \"Vai\",\n \"Vaii\",\n \"Warang_Citi\",\n \"Wara\",\n \"Yi\",\n \"Yiii\",\n \"Zanabazar_Square\",\n \"Zanb\",\n ]),\n}\n\nPropertyData.gc = PropertyData.General_Category\nPropertyData.sc = PropertyData.Script_Extensions = PropertyData.scx =\n PropertyData.Script\n\nexport { PropertyData }\n","export { isIdContinue, isIdStart } from \"./ids\"\nexport { PropertyData } from \"./property-data\"\n\nexport const Null = 0x00\nexport const Backspace = 0x08\nexport const CharacterTabulation = 0x09\nexport const LineFeed = 0x0a\nexport const LineTabulation = 0x0b\nexport const FormFeed = 0x0c\nexport const CarriageReturn = 0x0d\nexport const ExclamationMark = 0x21\nexport const DollarSign = 0x24\nexport const LeftParenthesis = 0x28\nexport const RightParenthesis = 0x29\nexport const Asterisk = 0x2a\nexport const PlusSign = 0x2b\nexport const Comma = 0x2c\nexport const HyphenMinus = 0x2d\nexport const FullStop = 0x2e\nexport const Solidus = 0x2f\nexport const DigitZero = 0x30\nexport const DigitOne = 0x31\nexport const DigitSeven = 0x37\nexport const DigitNine = 0x39\nexport const Colon = 0x3a\nexport const LessThanSign = 0x3c\nexport const EqualsSign = 0x3d\nexport const GreaterThanSign = 0x3e\nexport const QuestionMark = 0x3f\nexport const LatinCapitalLetterA = 0x41\nexport const LatinCapitalLetterB = 0x42\nexport const LatinCapitalLetterD = 0x44\nexport const LatinCapitalLetterF = 0x46\nexport const LatinCapitalLetterP = 0x50\nexport const LatinCapitalLetterS = 0x53\nexport const LatinCapitalLetterW = 0x57\nexport const LatinCapitalLetterZ = 0x5a\nexport const LowLine = 0x5f\nexport const LatinSmallLetterA = 0x61\nexport const LatinSmallLetterB = 0x62\nexport const LatinSmallLetterC = 0x63\nexport const LatinSmallLetterD = 0x64\nexport const LatinSmallLetterF = 0x66\nexport const LatinSmallLetterG = 0x67\nexport const LatinSmallLetterI = 0x69\nexport const LatinSmallLetterK = 0x6b\nexport const LatinSmallLetterM = 0x6d\nexport const LatinSmallLetterN = 0x6e\nexport const LatinSmallLetterP = 0x70\nexport const LatinSmallLetterR = 0x72\nexport const LatinSmallLetterS = 0x73\nexport const LatinSmallLetterT = 0x74\nexport const LatinSmallLetterU = 0x75\nexport const LatinSmallLetterV = 0x76\nexport const LatinSmallLetterW = 0x77\nexport const LatinSmallLetterX = 0x78\nexport const LatinSmallLetterY = 0x79\nexport const LatinSmallLetterZ = 0x7a\nexport const LeftSquareBracket = 0x5b\nexport const ReverseSolidus = 0x5c\nexport const RightSquareBracket = 0x5d\nexport const CircumflexAccent = 0x5e\nexport const LeftCurlyBracket = 0x7b\nexport const VerticalLine = 0x7c\nexport const RightCurlyBracket = 0x7d\nexport const ZeroWidthNonJoiner = 0x200c\nexport const ZeroWidthJoiner = 0x200d\nexport const LineSeparator = 0x2028\nexport const ParagraphSeparator = 0x2029\n\nexport const MinCodePoint = 0x00\nexport const MaxCodePoint = 0x10ffff\n\nexport function isLatinLetter(code: number): boolean {\n return (\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterZ)\n )\n}\n\nexport function isDecimalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitNine\n}\n\nexport function isOctalDigit(code: number): boolean {\n return code >= DigitZero && code <= DigitSeven\n}\n\nexport function isHexDigit(code: number): boolean {\n return (\n (code >= DigitZero && code <= DigitNine) ||\n (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) ||\n (code >= LatinSmallLetterA && code <= LatinSmallLetterF)\n )\n}\n\nexport function isLineTerminator(code: number): boolean {\n return (\n code === LineFeed ||\n code === CarriageReturn ||\n code === LineSeparator ||\n code === ParagraphSeparator\n )\n}\n\nexport function isValidUnicode(code: number): boolean {\n return code >= MinCodePoint && code <= MaxCodePoint\n}\n\nexport function digitToInt(code: number): number {\n if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) {\n return code - LatinSmallLetterA + 10\n }\n if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) {\n return code - LatinCapitalLetterA + 10\n }\n return code - DigitZero\n}\n","import { Reader } from \"./reader\"\nimport { RegExpSyntaxError } from \"./regexp-syntax-error\"\nimport {\n Asterisk,\n Backspace,\n CarriageReturn,\n CharacterTabulation,\n CircumflexAccent,\n Colon,\n Comma,\n DigitNine,\n DigitOne,\n digitToInt,\n DigitZero,\n DollarSign,\n EqualsSign,\n ExclamationMark,\n FormFeed,\n FullStop,\n GreaterThanSign,\n HyphenMinus,\n isDecimalDigit,\n isHexDigit,\n isIdContinue,\n isIdStart,\n isLatinLetter,\n isLineTerminator,\n isOctalDigit,\n isValidUnicode,\n LatinCapitalLetterB,\n LatinCapitalLetterD,\n LatinCapitalLetterP,\n LatinCapitalLetterS,\n LatinCapitalLetterW,\n LatinSmallLetterB,\n LatinSmallLetterC,\n LatinSmallLetterD,\n LatinSmallLetterF,\n LatinSmallLetterG,\n LatinSmallLetterI,\n LatinSmallLetterK,\n LatinSmallLetterM,\n LatinSmallLetterN,\n LatinSmallLetterP,\n LatinSmallLetterR,\n LatinSmallLetterS,\n LatinSmallLetterT,\n LatinSmallLetterU,\n LatinSmallLetterV,\n LatinSmallLetterW,\n LatinSmallLetterX,\n LatinSmallLetterY,\n LeftCurlyBracket,\n LeftParenthesis,\n LeftSquareBracket,\n LessThanSign,\n LineFeed,\n LineTabulation,\n LowLine,\n PlusSign,\n PropertyData,\n QuestionMark,\n ReverseSolidus,\n RightCurlyBracket,\n RightParenthesis,\n RightSquareBracket,\n Solidus,\n VerticalLine,\n ZeroWidthJoiner,\n ZeroWidthNonJoiner,\n} from \"./unicode\"\n\nfunction isSyntaxCharacter(cp: number): boolean {\n return (\n cp === CircumflexAccent ||\n cp === DollarSign ||\n cp === ReverseSolidus ||\n cp === FullStop ||\n cp === Asterisk ||\n cp === PlusSign ||\n cp === QuestionMark ||\n cp === LeftParenthesis ||\n cp === RightParenthesis ||\n cp === LeftSquareBracket ||\n cp === RightSquareBracket ||\n cp === LeftCurlyBracket ||\n cp === RightCurlyBracket ||\n cp === VerticalLine\n )\n}\n\nfunction isRegExpIdentifierStart(cp: number): boolean {\n return isIdStart(cp) || cp === DollarSign || cp === LowLine\n}\n\nfunction isRegExpIdentifierPart(cp: number): boolean {\n return (\n isIdContinue(cp) ||\n cp === DollarSign ||\n cp === LowLine ||\n cp === ZeroWidthNonJoiner ||\n cp === ZeroWidthJoiner\n )\n}\n\nfunction isUnicodePropertyNameCharacter(cp: number): boolean {\n return isLatinLetter(cp) || cp === LowLine\n}\n\nfunction isUnicodePropertyValueCharacter(cp: number): boolean {\n return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp)\n}\n\nfunction isValidUnicodeProperty(name: string, value: string): boolean {\n //eslint-disable-next-line no-prototype-builtins\n return PropertyData.hasOwnProperty(name) && PropertyData[name].has(value)\n}\n\nfunction isValidUnicodePropertyName(name: string): boolean {\n return PropertyData.$LONE.has(name)\n}\n\nexport namespace RegExpValidator {\n /**\n * The options for RegExpValidator construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n\n /**\n * A function that is called when the validator entered a RegExp literal.\n * @param start The 0-based index of the first character.\n */\n onLiteralEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a RegExp literal.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onLiteralLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator found flags.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param global `g` flag.\n * @param ignoreCase `i` flag.\n * @param multiline `m` flag.\n * @param unicode `u` flag.\n * @param sticky `y` flag.\n * @param dotAll `s` flag.\n */\n onFlags?(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a pattern.\n * @param start The 0-based index of the first character.\n */\n onPatternEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a pattern.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onPatternLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a disjunction.\n * @param start The 0-based index of the first character.\n */\n onDisjunctionEnter?(start: number): void\n\n /**\n * A function that is called when the validator left a disjunction.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onDisjunctionLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered an alternative.\n * @param start The 0-based index of the first character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeEnter?(start: number, index: number): void\n\n /**\n * A function that is called when the validator left an alternative.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param index The 0-based index of alternatives in a disjunction.\n */\n onAlternativeLeave?(start: number, end: number, index: number): void\n\n /**\n * A function that is called when the validator entered an uncapturing group.\n * @param start The 0-based index of the first character.\n */\n onGroupEnter?(start: number): void\n\n /**\n * A function that is called when the validator left an uncapturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n */\n onGroupLeave?(start: number, end: number): void\n\n /**\n * A function that is called when the validator entered a capturing group.\n * @param start The 0-based index of the first character.\n * @param name The group name.\n */\n onCapturingGroupEnter?(start: number, name: string | null): void\n\n /**\n * A function that is called when the validator left a capturing group.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param name The group name.\n */\n onCapturingGroupLeave?(\n start: number,\n end: number,\n name: string | null,\n ): void\n\n /**\n * A function that is called when the validator found a quantifier.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum number of repeating.\n * @param max The maximum number of repeating.\n * @param greedy The flag to choose the longest matching.\n */\n onQuantifier?(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void\n\n /**\n * A function that is called when the validator entered a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionEnter?(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator left a lookahead/lookbehind assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onLookaroundAssertionLeave?(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found an edge boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n */\n onEdgeAssertion?(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void\n\n /**\n * A function that is called when the validator found a word boundary assertion.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the assertion.\n * @param negate The flag which represents that the assertion is negative.\n */\n onWordBoundaryAssertion?(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a dot.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n */\n onAnyCharacterSet?(start: number, end: number, kind: \"any\"): void\n\n /**\n * A function that is called when the validator found a character set escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param negate The flag which represents that the character set is negative.\n */\n onEscapeCharacterSet?(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a Unicode proerty escape.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param kind The kind of the character set.\n * @param key The property name.\n * @param value The property value.\n * @param negate The flag which represents that the character set is negative.\n */\n onUnicodePropertyCharacterSet?(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param value The code point of the character.\n */\n onCharacter?(start: number, end: number, value: number): void\n\n /**\n * A function that is called when the validator found a backreference.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param ref The key of the referred capturing group.\n */\n onBackreference?(start: number, end: number, ref: number | string): void\n\n /**\n * A function that is called when the validator entered a character class.\n * @param start The 0-based index of the first character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassEnter?(start: number, negate: boolean): void\n\n /**\n * A function that is called when the validator left a character class.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param negate The flag which represents that the character class is negative.\n */\n onCharacterClassLeave?(\n start: number,\n end: number,\n negate: boolean,\n ): void\n\n /**\n * A function that is called when the validator found a character class range.\n * @param start The 0-based index of the first character.\n * @param end The next 0-based index of the last character.\n * @param min The minimum code point of the range.\n * @param max The maximum code point of the range.\n */\n onCharacterClassRange?(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void\n }\n}\n\n/**\n * The regular expression validator.\n */\nexport class RegExpValidator {\n private readonly _options: RegExpValidator.Options\n private readonly _reader = new Reader()\n private _uFlag = false\n private _nFlag = false\n private _lastIntValue = 0\n private _lastMinValue = 0\n private _lastMaxValue = 0\n private _lastStrValue = \"\"\n private _lastKeyValue = \"\"\n private _lastValValue = \"\"\n private _lastAssertionIsQuantifiable = false\n private _numCapturingParens = 0\n private _groupNames = new Set()\n private _backreferenceNames = new Set()\n\n /**\n * Initialize this validator.\n * @param options The options of validator.\n */\n constructor(options?: RegExpValidator.Options) {\n this._options = options || {}\n }\n\n /**\n * Validate a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n validateLiteral(\n source: string,\n start: number = 0,\n end: number = source.length,\n ): void {\n this._uFlag = this._nFlag = false\n this.reset(source, start, end)\n\n this.onLiteralEnter(start)\n if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) {\n const flagStart = this.index\n const uFlag = source.indexOf(\"u\", flagStart) !== -1\n this.validateFlags(source, flagStart, end)\n this.validatePattern(source, start + 1, flagStart - 1, uFlag)\n } else if (start >= end) {\n this.raise(\"Empty\")\n } else {\n const c = String.fromCodePoint(this.currentCodePoint)\n this.raise(`Unexpected character '${c}'`)\n }\n this.onLiteralLeave(start, end)\n }\n\n /**\n * Validate a regular expression flags. E.g. \"gim\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n */\n validateFlags(\n source: string,\n start: number = 0,\n end: number = source.length,\n ): void {\n const existingFlags = new Set()\n let global = false\n let ignoreCase = false\n let multiline = false\n let sticky = false\n let unicode = false\n let dotAll = false\n for (let i = start; i < end; ++i) {\n const flag = source.charCodeAt(i)\n\n if (existingFlags.has(flag)) {\n this.raise(`Duplicated flag '${source[i]}'`)\n }\n existingFlags.add(flag)\n\n if (flag === LatinSmallLetterG) {\n global = true\n } else if (flag === LatinSmallLetterI) {\n ignoreCase = true\n } else if (flag === LatinSmallLetterM) {\n multiline = true\n } else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) {\n unicode = true\n } else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) {\n sticky = true\n } else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) {\n dotAll = true\n } else {\n this.raise(`Invalid flag '${source[i]}'`)\n }\n }\n this.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n\n /**\n * Validate a regular expression pattern. E.g. \"abc\"\n * @param source The source code to validate.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n */\n validatePattern(\n source: string,\n start: number = 0,\n end: number = source.length,\n uFlag: boolean = false,\n ): void {\n this._uFlag = uFlag && this.ecmaVersion >= 2015\n this._nFlag = uFlag && this.ecmaVersion >= 2018\n this.reset(source, start, end)\n this.pattern()\n\n if (\n !this._nFlag &&\n this.ecmaVersion >= 2018 &&\n this._groupNames.size > 0\n ) {\n this._nFlag = true\n this.rewind(start)\n this.pattern()\n }\n }\n\n // #region Delegate for Options\n\n private get strict() {\n return Boolean(this._options.strict || this._uFlag)\n }\n\n private get ecmaVersion() {\n return this._options.ecmaVersion || 2018\n }\n\n private onLiteralEnter(start: number): void {\n if (this._options.onLiteralEnter) {\n this._options.onLiteralEnter(start)\n }\n }\n\n private onLiteralLeave(start: number, end: number): void {\n if (this._options.onLiteralLeave) {\n this._options.onLiteralLeave(start, end)\n }\n }\n\n private onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n if (this._options.onFlags) {\n this._options.onFlags(\n start,\n end,\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n )\n }\n }\n\n private onPatternEnter(start: number): void {\n if (this._options.onPatternEnter) {\n this._options.onPatternEnter(start)\n }\n }\n\n private onPatternLeave(start: number, end: number): void {\n if (this._options.onPatternLeave) {\n this._options.onPatternLeave(start, end)\n }\n }\n\n private onDisjunctionEnter(start: number): void {\n if (this._options.onDisjunctionEnter) {\n this._options.onDisjunctionEnter(start)\n }\n }\n\n private onDisjunctionLeave(start: number, end: number): void {\n if (this._options.onDisjunctionLeave) {\n this._options.onDisjunctionLeave(start, end)\n }\n }\n\n private onAlternativeEnter(start: number, index: number): void {\n if (this._options.onAlternativeEnter) {\n this._options.onAlternativeEnter(start, index)\n }\n }\n\n private onAlternativeLeave(\n start: number,\n end: number,\n index: number,\n ): void {\n if (this._options.onAlternativeLeave) {\n this._options.onAlternativeLeave(start, end, index)\n }\n }\n\n private onGroupEnter(start: number): void {\n if (this._options.onGroupEnter) {\n this._options.onGroupEnter(start)\n }\n }\n\n private onGroupLeave(start: number, end: number): void {\n if (this._options.onGroupLeave) {\n this._options.onGroupLeave(start, end)\n }\n }\n\n private onCapturingGroupEnter(start: number, name: string | null): void {\n if (this._options.onCapturingGroupEnter) {\n this._options.onCapturingGroupEnter(start, name)\n }\n }\n\n private onCapturingGroupLeave(\n start: number,\n end: number,\n name: string | null,\n ): void {\n if (this._options.onCapturingGroupLeave) {\n this._options.onCapturingGroupLeave(start, end, name)\n }\n }\n\n private onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n if (this._options.onQuantifier) {\n this._options.onQuantifier(start, end, min, max, greedy)\n }\n }\n\n private onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionEnter) {\n this._options.onLookaroundAssertionEnter(start, kind, negate)\n }\n }\n\n private onLookaroundAssertionLeave(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n if (this._options.onLookaroundAssertionLeave) {\n this._options.onLookaroundAssertionLeave(start, end, kind, negate)\n }\n }\n\n private onEdgeAssertion(\n start: number,\n end: number,\n kind: \"start\" | \"end\",\n ): void {\n if (this._options.onEdgeAssertion) {\n this._options.onEdgeAssertion(start, end, kind)\n }\n }\n\n private onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n if (this._options.onWordBoundaryAssertion) {\n this._options.onWordBoundaryAssertion(start, end, kind, negate)\n }\n }\n\n private onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n if (this._options.onAnyCharacterSet) {\n this._options.onAnyCharacterSet(start, end, kind)\n }\n }\n\n private onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n if (this._options.onEscapeCharacterSet) {\n this._options.onEscapeCharacterSet(start, end, kind, negate)\n }\n }\n\n private onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n if (this._options.onUnicodePropertyCharacterSet) {\n this._options.onUnicodePropertyCharacterSet(\n start,\n end,\n kind,\n key,\n value,\n negate,\n )\n }\n }\n\n private onCharacter(start: number, end: number, value: number): void {\n if (this._options.onCharacter) {\n this._options.onCharacter(start, end, value)\n }\n }\n\n private onBackreference(\n start: number,\n end: number,\n ref: number | string,\n ): void {\n if (this._options.onBackreference) {\n this._options.onBackreference(start, end, ref)\n }\n }\n\n private onCharacterClassEnter(start: number, negate: boolean): void {\n if (this._options.onCharacterClassEnter) {\n this._options.onCharacterClassEnter(start, negate)\n }\n }\n\n private onCharacterClassLeave(\n start: number,\n end: number,\n negate: boolean,\n ): void {\n if (this._options.onCharacterClassLeave) {\n this._options.onCharacterClassLeave(start, end, negate)\n }\n }\n\n private onCharacterClassRange(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void {\n if (this._options.onCharacterClassRange) {\n this._options.onCharacterClassRange(start, end, min, max)\n }\n }\n\n // #endregion\n\n // #region Delegate for Reader\n\n private get source(): string {\n return this._reader.source\n }\n\n private get index(): number {\n return this._reader.index\n }\n\n private get currentCodePoint(): number {\n return this._reader.currentCodePoint\n }\n\n private get nextCodePoint(): number {\n return this._reader.nextCodePoint\n }\n\n private get nextCodePoint2(): number {\n return this._reader.nextCodePoint2\n }\n\n private get nextCodePoint3(): number {\n return this._reader.nextCodePoint3\n }\n\n private reset(source: string, start: number, end: number): void {\n this._reader.reset(source, start, end, this._uFlag)\n }\n\n private rewind(index: number): void {\n this._reader.rewind(index)\n }\n\n private advance(): void {\n this._reader.advance()\n }\n\n private eat(cp: number): boolean {\n return this._reader.eat(cp)\n }\n\n private eat2(cp1: number, cp2: number): boolean {\n return this._reader.eat2(cp1, cp2)\n }\n\n private eat3(cp1: number, cp2: number, cp3: number): boolean {\n return this._reader.eat3(cp1, cp2, cp3)\n }\n\n // #endregion\n\n private raise(message: string): never {\n throw new RegExpSyntaxError(\n this.source,\n this._uFlag,\n this.index,\n message,\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegularExpressionBody\n private eatRegExpBody(): boolean {\n const start = this.index\n let inClass = false\n let escaped = false\n\n for (;;) {\n const cp = this.currentCodePoint\n if (cp === -1 || isLineTerminator(cp)) {\n const kind = inClass ? \"character class\" : \"regular expression\"\n this.raise(`Unterminated ${kind}`)\n }\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n (cp === Solidus && !inClass) ||\n (cp === Asterisk && this.index === start)\n ) {\n break\n }\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n private pattern(): void {\n const start = this.index\n this._numCapturingParens = this.countCapturingParens()\n this._groupNames.clear()\n this._backreferenceNames.clear()\n\n this.onPatternEnter(start)\n this.disjunction()\n\n const cp = this.currentCodePoint\n if (this.currentCodePoint !== -1) {\n if (cp === RightParenthesis) {\n this.raise(\"Unmatched ')'\")\n }\n if (cp === RightSquareBracket || cp === RightCurlyBracket) {\n this.raise(\"Lone quantifier brackets\")\n }\n const c = String.fromCodePoint(cp)\n this.raise(`Unexpected character '${c}'`)\n }\n this._backreferenceNames.forEach(name => {\n if (!this._groupNames.has(name)) {\n this.raise(\"Invalid named capture referenced\")\n }\n })\n this.onPatternLeave(start, this.index)\n }\n\n private countCapturingParens(): number {\n const start = this.index\n let inClass = false\n let escaped = false\n let count = 0\n let cp = 0\n\n while ((cp = this.currentCodePoint) !== -1) {\n if (escaped) {\n escaped = false\n } else if (cp === ReverseSolidus) {\n escaped = true\n } else if (cp === LeftSquareBracket) {\n inClass = true\n } else if (cp === RightSquareBracket) {\n inClass = false\n } else if (\n cp === LeftParenthesis &&\n !inClass &&\n (this.nextCodePoint !== QuestionMark ||\n (this.nextCodePoint2 === LessThanSign &&\n this.nextCodePoint3 !== EqualsSign &&\n this.nextCodePoint3 !== ExclamationMark))\n ) {\n count += 1\n }\n this.advance()\n }\n\n this.rewind(start)\n return count\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n private disjunction(): void {\n const start = this.index\n let i = 0\n\n this.onDisjunctionEnter(start)\n this.alternative(i++)\n while (this.eat(VerticalLine)) {\n this.alternative(i++)\n }\n\n if (this.eatQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n if (this.eat(LeftCurlyBracket)) {\n this.raise(\"Lone quantifier brackets\")\n }\n this.onDisjunctionLeave(start, this.index)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n private alternative(i: number): void {\n const start = this.index\n\n this.onAlternativeEnter(start, i)\n while (this.currentCodePoint !== -1 && this.eatTerm());\n this.onAlternativeLeave(start, this.index, i)\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Term\n private eatTerm(): boolean {\n if (this.eatAssertion()) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `this.lastAssertionIsQuantifiable` is true if the last eaten\n // Assertion is a QuantifiableAssertion.\n if (this._lastAssertionIsQuantifiable) {\n this.eatQuantifier()\n }\n return true\n }\n\n if (this.strict ? this.eatAtom() : this.eatExtendedAtom()) {\n this.eatQuantifier()\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-Assertion\n private eatAssertion(): boolean {\n const start = this.index\n this._lastAssertionIsQuantifiable = false\n\n // ^, $, \\B \\b\n if (this.eat(CircumflexAccent)) {\n this.onEdgeAssertion(start, this.index, \"start\")\n return true\n }\n if (this.eat(DollarSign)) {\n this.onEdgeAssertion(start, this.index, \"end\")\n return true\n }\n if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", true)\n return true\n }\n if (this.eat2(ReverseSolidus, LatinSmallLetterB)) {\n this.onWordBoundaryAssertion(start, this.index, \"word\", false)\n return true\n }\n\n // Lookahead / Lookbehind\n if (this.eat2(LeftParenthesis, QuestionMark)) {\n const lookbehind =\n this.ecmaVersion >= 2018 && this.eat(LessThanSign)\n let negate = false\n if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {\n const kind = lookbehind ? \"lookbehind\" : \"lookahead\"\n this.onLookaroundAssertionEnter(start, kind, negate)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this._lastAssertionIsQuantifiable = !lookbehind && !this.strict\n this.onLookaroundAssertionLeave(start, this.index, kind, negate)\n return true\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n private eatQuantifier(noError = false): boolean {\n const start = this.index\n let min = 0\n let max = 0\n let greedy = false\n\n if (this.eat(Asterisk)) {\n min = 0\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(PlusSign)) {\n min = 1\n max = Number.POSITIVE_INFINITY\n } else if (this.eat(QuestionMark)) {\n min = 0\n max = 1\n } else if (this.eatBracedQuantifier(noError)) {\n min = this._lastMinValue\n max = this._lastMaxValue\n } else {\n return false\n }\n greedy = !this.eat(QuestionMark)\n\n if (!noError) {\n this.onQuantifier(start, this.index, min, max, greedy)\n }\n return true\n }\n\n private eatBracedQuantifier(noError: boolean): boolean {\n const start = this.index\n if (this.eat(LeftCurlyBracket)) {\n this._lastMinValue = 0\n this._lastMaxValue = Number.POSITIVE_INFINITY\n if (this.eatDecimalDigits()) {\n this._lastMinValue = this._lastMaxValue = this._lastIntValue\n if (this.eat(Comma)) {\n this._lastMaxValue = this.eatDecimalDigits()\n ? this._lastIntValue\n : Number.POSITIVE_INFINITY\n }\n if (this.eat(RightCurlyBracket)) {\n if (!noError && this._lastMaxValue < this._lastMinValue) {\n this.raise(\"numbers out of order in {} quantifier\")\n }\n return true\n }\n }\n if (!noError && this.strict) {\n this.raise(\"Incomplete quantifier\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n private eatAtom(): boolean {\n return (\n this.eatPatternCharacter() ||\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup()\n )\n }\n\n private eatDot(): boolean {\n if (this.eat(FullStop)) {\n this.onAnyCharacterSet(this.index - 1, this.index, \"any\")\n return true\n }\n return false\n }\n\n private eatReverseSolidusAtomEscape(): boolean {\n const start = this.index\n if (this.eat(ReverseSolidus)) {\n if (this.eatAtomEscape()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatUncapturingGroup(): boolean {\n const start = this.index\n if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {\n this.onGroupEnter(start)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onGroupLeave(start, this.index)\n return true\n }\n return false\n }\n\n private eatCapturingGroup(): boolean {\n const start = this.index\n if (this.eat(LeftParenthesis)) {\n this._lastStrValue = \"\"\n if (this.ecmaVersion >= 2018) {\n this.groupSpecifier()\n } else if (this.currentCodePoint === QuestionMark) {\n this.raise(\"Invalid group\")\n }\n const name = this._lastStrValue || null\n\n this.onCapturingGroupEnter(start, name)\n this.disjunction()\n if (!this.eat(RightParenthesis)) {\n this.raise(\"Unterminated group\")\n }\n this.onCapturingGroupLeave(start, this.index, name)\n\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedAtom\n private eatExtendedAtom(): boolean {\n return (\n this.eatDot() ||\n this.eatReverseSolidusAtomEscape() ||\n this.eatCharacterClass() ||\n this.eatUncapturingGroup() ||\n this.eatCapturingGroup() ||\n this.eatInvalidBracedQuantifier() ||\n this.eatExtendedPatternCharacter()\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-InvalidBracedQuantifier\n private eatInvalidBracedQuantifier(): boolean {\n if (this.eatBracedQuantifier(true)) {\n this.raise(\"Nothing to repeat\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n private eatSyntaxCharacter(): boolean {\n if (isSyntaxCharacter(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n private eatPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (cp !== -1 && !isSyntaxCharacter(cp)) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ExtendedPatternCharacter\n private eatExtendedPatternCharacter(): boolean {\n const start = this.index\n const cp = this.currentCodePoint\n if (\n cp !== -1 &&\n cp !== CircumflexAccent &&\n cp !== DollarSign &&\n cp !== FullStop &&\n cp !== Asterisk &&\n cp !== PlusSign &&\n cp !== QuestionMark &&\n cp !== LeftParenthesis &&\n cp !== RightParenthesis &&\n cp !== LeftSquareBracket &&\n cp !== VerticalLine\n ) {\n this.advance()\n this.onCharacter(start, this.index, cp)\n return true\n }\n return false\n }\n\n // GroupSpecifier[U] ::\n // [empty]\n // `?` GroupName[?U]\n private groupSpecifier(): void {\n this._lastStrValue = \"\"\n if (this.eat(QuestionMark)) {\n if (this.eatGroupName()) {\n if (!this._groupNames.has(this._lastStrValue)) {\n this._groupNames.add(this._lastStrValue)\n return\n }\n this.raise(\"Duplicate capture group name\")\n }\n this.raise(\"Invalid group\")\n }\n }\n\n // GroupName[U] ::\n // `<` RegExpIdentifierName[?U] `>`\n private eatGroupName(): boolean {\n this._lastStrValue = \"\"\n if (this.eat(LessThanSign)) {\n if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {\n return true\n }\n this.raise(\"Invalid capture group name\")\n }\n return false\n }\n\n // RegExpIdentifierName[U] ::\n // RegExpIdentifierStart[?U]\n // RegExpIdentifierName[?U] RegExpIdentifierPart[?U]\n private eatRegExpIdentifierName(): boolean {\n this._lastStrValue = \"\"\n if (this.eatRegExpIdentifierStart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n while (this.eatRegExpIdentifierPart()) {\n this._lastStrValue += String.fromCodePoint(this._lastIntValue)\n }\n return true\n }\n return false\n }\n\n // RegExpIdentifierStart[U] ::\n // UnicodeIDStart\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n private eatRegExpIdentifierStart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierStart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // RegExpIdentifierPart[U] ::\n // UnicodeIDContinue\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[?U]\n // \n // \n private eatRegExpIdentifierPart(): boolean {\n const start = this.index\n let cp = this.currentCodePoint\n this.advance()\n\n if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {\n cp = this._lastIntValue\n }\n if (isRegExpIdentifierPart(cp)) {\n this._lastIntValue = cp\n return true\n }\n\n if (this.index !== start) {\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-AtomEscape\n private eatAtomEscape(): boolean {\n if (\n this.eatBackreference() ||\n this.eatCharacterClassEscape() ||\n this.eatCharacterEscape() ||\n (this._nFlag && this.eatKGroupName())\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n return false\n }\n\n private eatBackreference(): boolean {\n const start = this.index\n if (this.eatDecimalEscape()) {\n const n = this._lastIntValue\n if (n <= this._numCapturingParens) {\n this.onBackreference(start - 1, this.index, n)\n return true\n }\n if (this.strict) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatKGroupName(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterK)) {\n if (this.eatGroupName()) {\n const groupName = this._lastStrValue\n this._backreferenceNames.add(groupName)\n this.onBackreference(start - 1, this.index, groupName)\n return true\n }\n this.raise(\"Invalid named reference\")\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-CharacterEscape\n private eatCharacterEscape(): boolean {\n const start = this.index\n if (\n this.eatControlEscape() ||\n this.eatCControlLetter() ||\n this.eatZero() ||\n this.eatHexEscapeSequence() ||\n this.eatRegExpUnicodeEscapeSequence() ||\n (!this.strict && this.eatLegacyOctalEscapeSequence()) ||\n this.eatIdentityEscape()\n ) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n return false\n }\n\n private eatCControlLetter(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterC)) {\n if (this.eatControlLetter()) {\n return true\n }\n this.rewind(start)\n }\n return false\n }\n\n private eatZero(): boolean {\n if (\n this.currentCodePoint === DigitZero &&\n !isDecimalDigit(this.nextCodePoint)\n ) {\n this._lastIntValue = 0\n this.advance()\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n private eatControlEscape(): boolean {\n if (this.eat(LatinSmallLetterT)) {\n this._lastIntValue = CharacterTabulation\n return true\n }\n if (this.eat(LatinSmallLetterN)) {\n this._lastIntValue = LineFeed\n return true\n }\n if (this.eat(LatinSmallLetterV)) {\n this._lastIntValue = LineTabulation\n return true\n }\n if (this.eat(LatinSmallLetterF)) {\n this._lastIntValue = FormFeed\n return true\n }\n if (this.eat(LatinSmallLetterR)) {\n this._lastIntValue = CarriageReturn\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n private eatControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isLatinLetter(cp)) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n private eatRegExpUnicodeEscapeSequence(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterU)) {\n if (this.eatFixedHexDigits(4)) {\n const lead = this._lastIntValue\n if (this._uFlag && lead >= 0xd800 && lead <= 0xdbff) {\n const leadSurrogateEnd = this.index\n if (\n this.eat(ReverseSolidus) &&\n this.eat(LatinSmallLetterU) &&\n this.eatFixedHexDigits(4)\n ) {\n const trail = this._lastIntValue\n if (trail >= 0xdc00 && trail <= 0xdfff) {\n this._lastIntValue =\n (lead - 0xd800) * 0x400 +\n (trail - 0xdc00) +\n 0x10000\n return true\n }\n }\n this.rewind(leadSurrogateEnd)\n this._lastIntValue = lead\n }\n return true\n }\n if (\n this._uFlag &&\n this.eat(LeftCurlyBracket) &&\n this.eatHexDigits() &&\n this.eat(RightCurlyBracket) &&\n isValidUnicode(this._lastIntValue)\n ) {\n return true\n }\n if (this.strict || this._uFlag) {\n this.raise(\"Invalid unicode escape\")\n }\n this.rewind(start)\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-IdentityEscape\n private eatIdentityEscape(): boolean {\n if (this._uFlag) {\n if (this.eatSyntaxCharacter()) {\n return true\n }\n if (this.eat(Solidus)) {\n this._lastIntValue = Solidus\n return true\n }\n return false\n }\n\n if (this.isValidIdentityEscape(this.currentCodePoint)) {\n this._lastIntValue = this.currentCodePoint\n this.advance()\n return true\n }\n\n return false\n }\n private isValidIdentityEscape(cp: number): boolean {\n if (cp === -1) {\n return false\n }\n if (this.strict) {\n return !isIdContinue(cp)\n }\n return (\n cp !== LatinSmallLetterC &&\n (!this._nFlag || cp !== LatinSmallLetterK)\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n private eatDecimalEscape(): boolean {\n this._lastIntValue = 0\n let cp = this.currentCodePoint\n if (cp >= DigitOne && cp <= DigitNine) {\n do {\n this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero)\n this.advance()\n } while (\n (cp = this.currentCodePoint) >= DigitZero &&\n cp <= DigitNine\n )\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n private eatCharacterClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterD)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"digit\", true)\n return true\n }\n if (this.eat(LatinSmallLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterS)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"space\", true)\n return true\n }\n if (this.eat(LatinSmallLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", false)\n return true\n }\n if (this.eat(LatinCapitalLetterW)) {\n this._lastIntValue = -1\n this.onEscapeCharacterSet(start - 1, this.index, \"word\", true)\n return true\n }\n\n let negate = false\n if (\n this._uFlag &&\n this.ecmaVersion >= 2018 &&\n (this.eat(LatinSmallLetterP) ||\n (negate = this.eat(LatinCapitalLetterP)))\n ) {\n this._lastIntValue = -1\n if (\n this.eat(LeftCurlyBracket) &&\n this.eatUnicodePropertyValueExpression() &&\n this.eat(RightCurlyBracket)\n ) {\n this.onUnicodePropertyCharacterSet(\n start - 1,\n this.index,\n \"property\",\n this._lastKeyValue,\n this._lastValValue || null,\n negate,\n )\n return true\n }\n this.raise(\"Invalid property name\")\n }\n\n return false\n }\n\n // UnicodePropertyValueExpression ::\n // UnicodePropertyName `=` UnicodePropertyValue\n // LoneUnicodePropertyNameOrValue\n private eatUnicodePropertyValueExpression(): boolean {\n const start = this.index\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) {\n this._lastKeyValue = this._lastStrValue\n if (this.eatUnicodePropertyValue()) {\n this._lastValValue = this._lastStrValue\n if (\n isValidUnicodeProperty(\n this._lastKeyValue,\n this._lastValValue,\n )\n ) {\n return true\n }\n this.raise(\"Invalid property name\")\n }\n }\n this.rewind(start)\n\n // LoneUnicodePropertyNameOrValue\n if (this.eatLoneUnicodePropertyNameOrValue()) {\n const nameOrValue = this._lastStrValue\n if (isValidUnicodeProperty(\"General_Category\", nameOrValue)) {\n this._lastKeyValue = \"General_Category\"\n this._lastValValue = nameOrValue\n return true\n }\n if (isValidUnicodePropertyName(nameOrValue)) {\n this._lastKeyValue = nameOrValue\n this._lastValValue = \"\"\n return true\n }\n this.raise(\"Invalid property name\")\n }\n return false\n }\n\n // UnicodePropertyName ::\n // UnicodePropertyNameCharacters\n private eatUnicodePropertyName(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyNameCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // UnicodePropertyValue ::\n // UnicodePropertyValueCharacters\n private eatUnicodePropertyValue(): boolean {\n this._lastStrValue = \"\"\n while (isUnicodePropertyValueCharacter(this.currentCodePoint)) {\n this._lastStrValue += String.fromCodePoint(this.currentCodePoint)\n this.advance()\n }\n return this._lastStrValue !== \"\"\n }\n\n // LoneUnicodePropertyNameOrValue ::\n // UnicodePropertyValueCharacters\n private eatLoneUnicodePropertyNameOrValue(): boolean {\n return this.eatUnicodePropertyValue()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n private eatCharacterClass(): boolean {\n const start = this.index\n if (this.eat(LeftSquareBracket)) {\n const negate = this.eat(CircumflexAccent)\n this.onCharacterClassEnter(start, negate)\n this.classRanges()\n if (!this.eat(RightSquareBracket)) {\n this.raise(\"Unterminated character class\")\n }\n this.onCharacterClassLeave(start, this.index, negate)\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n private classRanges(): void {\n let start = this.index\n while (this.eatClassAtom()) {\n const left = this._lastIntValue\n const hyphenStart = this.index\n if (this.eat(HyphenMinus)) {\n this.onCharacter(hyphenStart, this.index, HyphenMinus)\n\n if (this.eatClassAtom()) {\n const right = this._lastIntValue\n\n if (left === -1 || right === -1) {\n if (this.strict) {\n this.raise(\"Invalid character class\")\n }\n } else if (left > right) {\n this.raise(\"Range out of order in character class\")\n } else {\n this.onCharacterClassRange(\n start,\n this.index,\n left,\n right,\n )\n }\n }\n }\n\n start = this.index\n }\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n private eatClassAtom(): boolean {\n const start = this.index\n\n if (this.eat(ReverseSolidus)) {\n if (this.eatClassEscape()) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n\n const cp = this.currentCodePoint\n if (cp !== -1 && cp !== RightSquareBracket) {\n this.advance()\n this._lastIntValue = cp\n this.onCharacter(start, this.index, cp)\n return true\n }\n\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassEscape\n private eatClassEscape(): boolean {\n const start = this.index\n\n if (this.eat(LatinSmallLetterB)) {\n this._lastIntValue = Backspace\n this.onCharacter(start - 1, this.index, Backspace)\n return true\n }\n\n if (this._uFlag && this.eat(HyphenMinus)) {\n this._lastIntValue = HyphenMinus\n this.onCharacter(start - 1, this.index, HyphenMinus)\n return true\n }\n\n if (!this._uFlag && this.eat(LatinSmallLetterC)) {\n if (this.eatClassControlLetter()) {\n this.onCharacter(start - 1, this.index, this._lastIntValue)\n return true\n }\n this.rewind(start)\n }\n\n return this.eatCharacterClassEscape() || this.eatCharacterEscape()\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-ClassControlLetter\n private eatClassControlLetter(): boolean {\n const cp = this.currentCodePoint\n if (isDecimalDigit(cp) || cp === LowLine) {\n this.advance()\n this._lastIntValue = cp % 0x20\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatHexEscapeSequence(): boolean {\n const start = this.index\n if (this.eat(LatinSmallLetterX)) {\n if (this.eatFixedHexDigits(2)) {\n return true\n }\n if (this._uFlag) {\n this.raise(\"Invalid escape\")\n }\n this.rewind(start)\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n private eatDecimalDigits(): boolean {\n const start = this.index\n\n this._lastIntValue = 0\n while (isDecimalDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 10 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n private eatHexDigits(): boolean {\n const start = this.index\n this._lastIntValue = 0\n while (isHexDigit(this.currentCodePoint)) {\n this._lastIntValue =\n 16 * this._lastIntValue + digitToInt(this.currentCodePoint)\n this.advance()\n }\n return this.index !== start\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-strict-LegacyOctalEscapeSequence\n // Allows only 0-377(octal) i.e. 0-255(decimal).\n private eatLegacyOctalEscapeSequence(): boolean {\n if (this.eatOctalDigit()) {\n const n1 = this._lastIntValue\n if (this.eatOctalDigit()) {\n const n2 = this._lastIntValue\n if (n1 <= 3 && this.eatOctalDigit()) {\n this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue\n } else {\n this._lastIntValue = n1 * 8 + n2\n }\n } else {\n this._lastIntValue = n1\n }\n return true\n }\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n private eatOctalDigit(): boolean {\n const cp = this.currentCodePoint\n if (isOctalDigit(cp)) {\n this.advance()\n this._lastIntValue = cp - DigitZero\n return true\n }\n this._lastIntValue = 0\n return false\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n private eatFixedHexDigits(length: number): boolean {\n const start = this.index\n this._lastIntValue = 0\n for (let i = 0; i < length; ++i) {\n const cp = this.currentCodePoint\n if (!isHexDigit(cp)) {\n this.rewind(start)\n return false\n }\n this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp)\n this.advance()\n }\n return true\n }\n}\n","import {\n AlternativeElement,\n AnyCharacterSet,\n Assertion,\n Backreference,\n CapturingGroup,\n Character,\n CharacterClass,\n CharacterClassRange,\n Disjunction,\n Element,\n EscapeCharacterSet,\n Flags,\n Group,\n RegExpLiteral,\n LookaroundAssertion,\n Pattern,\n QuantifiableElement,\n Quantifier,\n UnicodePropertyCharacterSet,\n} from \"./ast\"\nimport { assert, last } from \"./util\"\nimport { RegExpValidator } from \"./validator\"\n\ntype AppendableNode =\n | Pattern\n | Disjunction\n | Group\n | CapturingGroup\n | CharacterClass\n | LookaroundAssertion\n\nconst DummyPattern = {} as Pattern\nconst DummyFlags = {} as Flags\nconst DummyCapturingGroup = {} as CapturingGroup\n\n/**\n * Convert given elements to an alternative.\n * This doesn't clone the array, so the return value is `elements` itself.\n * @param elements Elements to convert.\n */\nfunction elementsToAlternative(\n elements: Element[],\n parent: Disjunction,\n): AlternativeElement[] {\n for (const element of elements) {\n assert(element.type !== \"Disjunction\")\n element.parent = parent\n }\n return elements as AlternativeElement[]\n}\n\nfunction addAlternativeElement(\n parent:\n | Pattern\n | Disjunction\n | Group\n | CapturingGroup\n | LookaroundAssertion,\n node:\n | Group\n | CapturingGroup\n | Quantifier\n | CharacterClass\n | Assertion\n | AnyCharacterSet\n | Backreference,\n): void {\n if (parent.type === \"Disjunction\") {\n last(parent.alternatives)!.push(node)\n } else {\n parent.elements.push(node)\n }\n}\n\nfunction addCommonElement(\n parent: AppendableNode,\n node: EscapeCharacterSet | UnicodePropertyCharacterSet | Character,\n): void {\n if (parent.type === \"Disjunction\") {\n last(parent.alternatives)!.push(node)\n } else if (parent.type === \"CharacterClass\") {\n parent.elements.push(node)\n } else {\n parent.elements.push(node)\n }\n}\n\nclass RegExpParserState {\n readonly strict: boolean\n readonly ecmaVersion: 5 | 2015 | 2016 | 2017 | 2018\n private _node: AppendableNode = DummyPattern\n private _flags: Flags = DummyFlags\n private _disjunctionStartStack: number[] = []\n private _backreferences: Backreference[] = []\n private _capturingGroups: CapturingGroup[] = []\n\n source: string = \"\"\n\n constructor(options?: RegExpParser.Options) {\n this.strict = Boolean(options && options.strict)\n this.ecmaVersion = (options && options.ecmaVersion) || 2018\n }\n\n get pattern(): Pattern {\n if (this._node.type !== \"Pattern\") {\n throw new Error(\"UnknownError\")\n }\n return this._node\n }\n\n get flags(): Flags {\n if (this._flags.type !== \"Flags\") {\n throw new Error(\"UnknownError\")\n }\n return this._flags\n }\n\n onFlags(\n start: number,\n end: number,\n global: boolean,\n ignoreCase: boolean,\n multiline: boolean,\n unicode: boolean,\n sticky: boolean,\n dotAll: boolean,\n ): void {\n this._flags = {\n type: \"Flags\",\n parent: null,\n start,\n end,\n raw: this.source.slice(start, end),\n global,\n ignoreCase,\n multiline,\n unicode,\n sticky,\n dotAll,\n }\n }\n\n onPatternEnter(start: number): void {\n this._node = {\n type: \"Pattern\",\n parent: null,\n start,\n end: start,\n raw: \"\",\n elements: [],\n }\n this._backreferences.length = 0\n this._capturingGroups.length = 0\n }\n\n onPatternLeave(start: number, end: number): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n\n for (const reference of this._backreferences) {\n const ref = reference.ref\n const group =\n typeof ref === \"number\"\n ? this._capturingGroups[ref - 1]\n : this._capturingGroups.find(g => g.name === ref)!\n reference.resolved = group\n group.references.push(reference)\n }\n }\n\n onDisjunctionEnter(start: number): void {\n this._disjunctionStartStack.push(start)\n }\n\n onDisjunctionLeave(start: number, end: number): void {\n this._disjunctionStartStack.pop()\n }\n\n onAlternativeEnter(start: number, index: number): void {\n if (index === 0) {\n return\n }\n\n const parentNode = this._node\n if (\n parentNode.type === \"Disjunction\" ||\n parentNode.type === \"CharacterClass\"\n ) {\n throw new Error(\"UnknownError\")\n }\n\n const prevNode = last(parentNode.elements)\n if (prevNode != null && prevNode.type === \"Disjunction\") {\n this._node = prevNode\n prevNode.alternatives.push([])\n } else {\n this._node = {\n type: \"Disjunction\",\n parent: parentNode,\n start: last(this._disjunctionStartStack)!,\n end: start,\n raw: \"\",\n alternatives: [],\n }\n const elements = elementsToAlternative(\n parentNode.elements,\n this._node,\n )\n this._node.alternatives.push(elements, [])\n parentNode.elements = [this._node]\n }\n }\n\n onAlternativeLeave(start: number, end: number, index: number): void {\n if (index === 0) {\n return\n }\n this._node.end = end\n this._node.raw = this.source.slice(this._node.start, end)\n this._node = this._node.parent as AppendableNode\n }\n\n onGroupEnter(start: number): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Group\",\n parent: parentNode,\n start,\n end: start,\n raw: \"\",\n elements: [],\n }\n addAlternativeElement(parentNode, this._node)\n }\n\n onGroupLeave(start: number, end: number): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n this._node = this._node.parent as AppendableNode\n }\n\n onCapturingGroupEnter(start: number, name: string | null): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CapturingGroup\",\n parent: parentNode,\n start,\n end: start,\n raw: \"\",\n name,\n elements: [],\n references: [],\n }\n addAlternativeElement(parentNode, this._node)\n this._capturingGroups.push(this._node)\n }\n\n onCapturingGroupLeave(\n start: number,\n end: number,\n name: string | null,\n ): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n this._node = this._node.parent as AppendableNode\n }\n\n onQuantifier(\n start: number,\n end: number,\n min: number,\n max: number,\n greedy: boolean,\n ): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last element.\n const elements =\n parentNode.type === \"Disjunction\"\n ? last(parentNode.alternatives)!\n : parentNode.elements\n const prevNode = elements.pop()!\n const node: Quantifier = {\n type: \"Quantifier\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n min,\n max,\n greedy,\n element: prevNode as QuantifiableElement,\n }\n elements.push(node)\n prevNode.parent = node\n }\n\n onLookaroundAssertionEnter(\n start: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"Assertion\",\n parent: parentNode,\n start,\n end: start,\n raw: \"\",\n kind,\n negate,\n elements: [],\n } as LookaroundAssertion\n addAlternativeElement(parentNode, this._node)\n }\n\n onLookaroundAssertionLeave(\n start: number,\n end: number,\n kind: \"lookahead\" | \"lookbehind\",\n negate: boolean,\n ): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n this._node = this._node.parent as AppendableNode\n }\n\n onEdgeAssertion(start: number, end: number, kind: \"start\" | \"end\"): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n addAlternativeElement(parentNode, {\n type: \"Assertion\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n onWordBoundaryAssertion(\n start: number,\n end: number,\n kind: \"word\",\n negate: boolean,\n ): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n addAlternativeElement(parentNode, {\n type: \"Assertion\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n onAnyCharacterSet(start: number, end: number, kind: \"any\"): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n addAlternativeElement(parentNode, {\n type: \"CharacterSet\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n })\n }\n\n onEscapeCharacterSet(\n start: number,\n end: number,\n kind: \"digit\" | \"space\" | \"word\",\n negate: boolean,\n ): void {\n addCommonElement(this._node, {\n type: \"CharacterSet\",\n parent: this._node,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n negate,\n })\n }\n\n onUnicodePropertyCharacterSet(\n start: number,\n end: number,\n kind: \"property\",\n key: string,\n value: string | null,\n negate: boolean,\n ): void {\n addCommonElement(this._node, {\n type: \"CharacterSet\",\n parent: this._node,\n start,\n end,\n raw: this.source.slice(start, end),\n kind,\n key,\n value,\n negate,\n })\n }\n\n onCharacter(start: number, end: number, value: number): void {\n addCommonElement(this._node, {\n type: \"Character\",\n parent: this._node,\n start,\n end,\n raw: this.source.slice(start, end),\n value,\n })\n }\n\n onBackreference(start: number, end: number, ref: number | string): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n const node: Backreference = {\n type: \"Backreference\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n ref,\n resolved: DummyCapturingGroup,\n }\n addAlternativeElement(parentNode, node)\n this._backreferences.push(node)\n }\n\n onCharacterClassEnter(start: number, negate: boolean): void {\n const parentNode = this._node\n if (parentNode.type === \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n this._node = {\n type: \"CharacterClass\",\n parent: parentNode,\n start,\n end: start,\n raw: \"\",\n negate,\n elements: [],\n }\n addAlternativeElement(parentNode, this._node)\n }\n\n onCharacterClassLeave(start: number, end: number, negate: boolean): void {\n this._node.end = end\n this._node.raw = this.source.slice(start, end)\n this._node = this._node.parent as AppendableNode\n }\n\n onCharacterClassRange(\n start: number,\n end: number,\n min: number,\n max: number,\n ): void {\n const parentNode = this._node\n if (parentNode.type !== \"CharacterClass\") {\n throw new Error(\"UnknownError\")\n }\n\n // Replace the last three elements.\n const elements = parentNode.elements\n const rightNode = elements.pop() as Character\n elements.pop() // hyphen\n const leftNode = elements.pop() as Character\n const node: CharacterClassRange = {\n type: \"CharacterClassRange\",\n parent: parentNode,\n start,\n end,\n raw: this.source.slice(start, end),\n min: leftNode,\n max: rightNode,\n }\n assert(leftNode != null && leftNode.type === \"Character\")\n assert(rightNode != null && rightNode.type === \"Character\")\n leftNode.parent = node\n rightNode.parent = node\n elements.push(node)\n }\n}\n\nexport namespace RegExpParser {\n /**\n * The options for RegExpParser construction.\n */\n export interface Options {\n /**\n * The flag to disable Annex B syntax. Default is `false`.\n */\n strict?: boolean\n\n /**\n * ECMAScript version. Default is `2018`.\n * - `2015` added `u` and `y` flags.\n * - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,\n * and Unicode Property Escape.\n */\n ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018\n }\n}\n\nexport class RegExpParser {\n private _state: RegExpParserState\n private _validator: RegExpValidator\n\n /**\n * Initialize this parser.\n * @param options The options of parser.\n */\n constructor(options?: RegExpParser.Options) {\n this._state = new RegExpParserState(options)\n this._validator = new RegExpValidator(this._state)\n }\n\n /**\n * Parse a regular expression literal. E.g. \"/abc/g\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given regular expression.\n */\n parseLiteral(\n source: string,\n start: number = 0,\n end: number = source.length,\n ): RegExpLiteral {\n this._state.source = source\n this._validator.validateLiteral(source, start, end)\n const pattern = this._state.pattern\n const flags = this._state.flags\n const literal: RegExpLiteral = {\n type: \"RegExpLiteral\",\n parent: null,\n start,\n end,\n raw: source,\n pattern,\n flags,\n }\n pattern.parent = literal\n flags.parent = literal\n return literal\n }\n\n /**\n * Parse a regular expression flags. E.g. \"gim\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @returns The AST of the given flags.\n */\n parseFlags(\n source: string,\n start: number = 0,\n end: number = source.length,\n ): Flags {\n this._state.source = source\n this._validator.validateFlags(source, start, end)\n return this._state.flags\n }\n\n /**\n * Parse a regular expression pattern. E.g. \"abc\"\n * @param source The source code to parse.\n * @param start The start index in the source code.\n * @param end The end index in the source code.\n * @param uFlag The flag to set unicode mode.\n * @returns The AST of the given pattern.\n */\n parsePattern(\n source: string,\n start: number = 0,\n end: number = source.length,\n uFlag: boolean = false,\n ): Pattern {\n this._state.source = source\n this._validator.validatePattern(source, start, end, uFlag)\n return this._state.pattern\n }\n}\n","import * as AST from \"./ast\"\nimport { RegExpParser } from \"./parser\"\nimport { RegExpValidator } from \"./validator\"\n\nexport { AST, RegExpParser, RegExpValidator }\n\n/**\n * Parse a given regular expression literal then make AST object.\n * @param source The source code to parse.\n * @param options The options to parse.\n * @returns The AST of the regular expression.\n */\nexport function parseRegExpLiteral(\n source: string,\n options?: RegExpParser.Options,\n): AST.RegExpLiteral {\n return new RegExpParser(options).parseLiteral(source)\n}\n\n/**\n * Validate a given regular expression literal.\n * @param source The source code to validate.\n * @param options The options to validate.\n */\nexport function validateRegExpLiteral(\n source: string,\n options?: RegExpValidator.Options,\n): void {\n return new RegExpValidator(options).validateLiteral(source)\n}\n"],"names":[],"mappings":";;;;;;;gBAAuB,SAAkB,EAAE,OAAgB;IACvD,IAAI,CAAC,SAAS,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAA;KAC/C;CACJ;AAED,cAAwB,EAAO;IAC3B,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;CACzD;;ACRD,MAAM,UAAU,GAAG;IACf,EAAE,CAAC,CAAS,EAAE,GAAW,EAAE,CAAS;QAChC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;KACxC;IACD,KAAK,CAAC,CAAS;QACX,OAAO,CAAC,CAAA;KACX;CACJ,CAAA;AACD,MAAM,WAAW,GAAG;IAChB,EAAE,CAAC,CAAS,EAAE,GAAW,EAAE,CAAS;QAChC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAA;KAC1C;IACD,KAAK,CAAC,CAAS;QACX,OAAO,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAA;KAC5B;CACJ,CAAA;AAED;IAAA;QACY,UAAK,GAAG,UAAU,CAAA;QAClB,OAAE,GAAW,EAAE,CAAA;QACf,OAAE,GAAW,CAAC,CAAA;QACd,SAAI,GAAW,CAAC,CAAA;QAChB,SAAI,GAAW,CAAC,CAAC,CAAA;QACjB,QAAG,GAAW,CAAC,CAAA;QACf,SAAI,GAAW,CAAC,CAAC,CAAA;QACjB,QAAG,GAAW,CAAC,CAAA;QACf,SAAI,GAAW,CAAC,CAAC,CAAA;QACjB,QAAG,GAAW,CAAC,CAAA;QACf,SAAI,GAAW,CAAC,CAAC,CAAA;KA6F5B;IA3FG,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,EAAE,CAAA;KACjB;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,EAAE,CAAA;KACjB;IAED,IAAI,gBAAgB;QAChB,OAAO,IAAI,CAAC,IAAI,CAAA;KACnB;IAED,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,IAAI,CAAA;KACnB;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,IAAI,CAAA;KACnB;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,IAAI,CAAA;KACnB;IAED,KAAK,CAAC,MAAc,EAAE,KAAa,EAAE,GAAW,EAAE,KAAc;QAC5D,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,WAAW,GAAG,UAAU,CAAA;QAC7C,IAAI,CAAC,EAAE,GAAG,MAAM,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;KACrB;IAED,MAAM,CAAC,KAAa;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;QACvB,IAAI,CAAC,EAAE,GAAG,KAAK,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QACzD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QACpE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CACf,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CACzC,CAAA;KACJ;IAED,OAAO;QACH,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;YACvB,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAA;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YACrB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YACrB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YACrB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CACf,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAC3C,CAAA;SACJ;KACJ;IAED,GAAG,CAAC,EAAU;QACV,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAED,IAAI,CAAC,GAAW,EAAE,GAAW;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;YACxC,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAED,IAAI,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;YAC7D,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;CACJ;;uBCzH8B,SAAQ,WAAW;IAE9C,YACI,MAAc,EACd,KAAc,EACd,KAAa,EACb,OAAe;QAGf,IAAI,MAAM,EAAE;YACR,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBACnB,MAAM,GAAG,IAAI,MAAM,IAAI,KAAK,GAAG,GAAG,GAAG,EAAE,EAAE,CAAA;aAC5C;YACD,MAAM,GAAG,KAAK,MAAM,EAAE,CAAA;SACzB;QAGD,KAAK,CAAC,6BAA6B,MAAM,KAAK,OAAO,EAAE,CAAC,CAAA;QACxD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACrB;CACJ;;mBCnByB,EAAU;IAChC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,IAAI,CAAA;IAC1B,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,IAAI,CAAA;IAC1B,OAAO,cAAc,CAAC,EAAE,CAAC,CAAA;CAC5B;AACD,sBAA6B,EAAU;IACnC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,IAAI,CAAA;IAC1B,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,IAAI,CAAA;IAC1B,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC5B,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,IAAI,CAAA;IAC1B,OAAO,cAAc,CAAC,EAAE,CAAC,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAA;CACrD;AAED,wBAAwB,EAAU;IAC9B,IAAI,EAAE,GAAG,MAAM,EAAE;QACb,IAAI,EAAE,GAAG,KAAK,EAAE;YACZ,IAAI,EAAE,GAAG,KAAK,EAAE;gBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;4BACZ,IAAI,EAAE,GAAG,IAAI,EAAE;gCACX,IAAI,EAAE,KAAK,IAAI;oCAAE,OAAO,IAAI,CAAA;gCAC5B,IAAI,EAAE,KAAK,IAAI;oCAAE,OAAO,IAAI,CAAA;gCAC5B,IAAI,EAAE,KAAK,IAAI;oCAAE,OAAO,IAAI,CAAA;gCAC5B,IAAI,EAAE,GAAG,IAAI;oCAAE,OAAO,KAAK,CAAA;gCAC3B,IAAI,EAAE,GAAG,IAAI;oCAAE,OAAO,IAAI,CAAA;gCAC1B,IAAI,EAAE,GAAG,IAAI;oCAAE,OAAO,KAAK,CAAA;gCAC3B,IAAI,EAAE,GAAG,IAAI;oCAAE,OAAO,IAAI,CAAA;gCAC1B,OAAO,KAAK,CAAA;6BACf;4BACD,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,KAAK,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC7B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,OAAO,KAAK,CAAA;yBACf;wBACD,IAAI,EAAE,GAAG,KAAK,EAAE;4BACZ,IAAI,EAAE,KAAK,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC7B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,OAAO,KAAK,CAAA;yBACf;wBACD,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;4BACZ,IAAI,EAAE,KAAK,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC7B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,KAAK,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC7B,IAAI,EAAE,KAAK,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC7B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,OAAO,KAAK,CAAA;yBACf;wBACD,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;4BACZ,IAAI,EAAE,KAAK,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC7B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,KAAK,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC7B,OAAO,KAAK,CAAA;yBACf;wBACD,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,KAAK,EAAE;gBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;4BACZ,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,OAAO,KAAK,CAAA;yBACf;wBACD,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,KAAK,EAAE;gBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,KAAK,EAAE;gBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,KAAK,EAAE;gBACZ,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAA;YAC5B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC3B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAA;YAC5B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC3B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAA;YAC5B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC3B,IAAI,EAAE,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,MAAM,EAAE;YACb,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;4BACZ,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,KAAK,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC7B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,OAAO,KAAK,CAAA;yBACf;wBACD,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,MAAM,EAAE;wBACb,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,KAAK,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC9B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM,EAAE;wBACb,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,KAAK,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC9B,IAAI,EAAE,KAAK,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC9B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,KAAK,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC9B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM,EAAE;wBACb,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,MAAM,EAAE;YACb,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM,EAAE;wBACb,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,MAAM,EAAE;YACb,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,MAAM,EAAE;YACb,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,MAAM,EAAE;YACb,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAC9B,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAC9B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,KAAK,CAAA;QAC7B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,IAAI,CAAA;QAC5B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,KAAK,CAAA;QAC7B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,IAAI,CAAA;QAC5B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,KAAK,CAAA;QAC7B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,IAAI,CAAA;QAC5B,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAC9B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO,EAAE;QACd,IAAI,EAAE,GAAG,MAAM,EAAE;YACb,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM,EAAE;wBACb,IAAI,EAAE,GAAG,MAAM,EAAE;4BACb,IAAI,EAAE,KAAK,MAAM;gCAAE,OAAO,IAAI,CAAA;4BAC9B,IAAI,EAAE,GAAG,MAAM;gCAAE,OAAO,KAAK,CAAA;4BAC7B,IAAI,EAAE,GAAG,MAAM;gCAAE,OAAO,IAAI,CAAA;4BAC5B,IAAI,EAAE,GAAG,MAAM;gCAAE,OAAO,KAAK,CAAA;4BAC7B,IAAI,EAAE,GAAG,MAAM;gCAAE,OAAO,IAAI,CAAA;4BAC5B,IAAI,EAAE,GAAG,MAAM;gCAAE,OAAO,KAAK,CAAA;4BAC7B,IAAI,EAAE,GAAG,MAAM;gCAAE,OAAO,IAAI,CAAA;4BAC5B,IAAI,EAAE,KAAK,MAAM;gCAAE,OAAO,IAAI,CAAA;4BAC9B,OAAO,KAAK,CAAA;yBACf;wBACD,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,KAAK,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC9B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,MAAM,EAAE;wBACb,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM,EAAE;wBACb,IAAI,EAAE,KAAK,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC9B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,KAAK,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC9B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM,EAAE;wBACb,IAAI,EAAE,KAAK,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC9B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM,EAAE;wBACb,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO,EAAE;oBACd,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO,EAAE;QACd,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO,EAAE;oBACd,IAAI,EAAE,GAAG,OAAO,EAAE;wBACd,IAAI,EAAE,GAAG,OAAO;4BAAE,OAAO,KAAK,CAAA;wBAC9B,IAAI,EAAE,GAAG,OAAO;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,OAAO;4BAAE,OAAO,KAAK,CAAA;wBAC9B,IAAI,EAAE,GAAG,OAAO;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,OAAO;4BAAE,OAAO,KAAK,CAAA;wBAC9B,IAAI,EAAE,GAAG,OAAO;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,OAAO;4BAAE,OAAO,KAAK,CAAA;wBAC9B,IAAI,EAAE,GAAG,OAAO;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,OAAO;4BAAE,OAAO,KAAK,CAAA;wBAC9B,IAAI,EAAE,GAAG,OAAO;4BAAE,OAAO,IAAI,CAAA;wBAC7B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,OAAO,EAAE;oBACd,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO,EAAE;oBACd,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC/B,IAAI,EAAE,KAAK,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC/B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO,EAAE;oBACd,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC/B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO,EAAE;QACd,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO,EAAE;oBACd,IAAI,EAAE,KAAK,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC/B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO,EAAE;QACd,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO,EAAE;QACd,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO,EAAE;QACd,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,OAAO,KAAK,CAAA;CACf;AAED,2BAA2B,EAAU;IACjC,IAAI,EAAE,GAAG,MAAM,EAAE;QACb,IAAI,EAAE,GAAG,KAAK,EAAE;YACZ,IAAI,EAAE,GAAG,KAAK,EAAE;gBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;4BACZ,IAAI,EAAE,KAAK,IAAI;gCAAE,OAAO,IAAI,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,KAAK,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC7B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,KAAK,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC7B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,KAAK,CAAA;4BAC5B,IAAI,EAAE,GAAG,KAAK;gCAAE,OAAO,IAAI,CAAA;4BAC3B,OAAO,KAAK,CAAA;yBACf;wBACD,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,KAAK,EAAE;gBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,KAAK,EAAE;gBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,KAAK,EAAE;gBACZ,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC3B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAA;YAC5B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC3B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAA;YAC5B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC3B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAA;YAC5B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC3B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAA;YAC5B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC3B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAA;YAC5B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC3B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAA;YAC5B,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC3B,IAAI,EAAE,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,MAAM,EAAE;YACb,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK,EAAE;wBACZ,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,IAAI,EAAE,KAAK,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC7B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,KAAK,CAAA;wBAC5B,IAAI,EAAE,GAAG,KAAK;4BAAE,OAAO,IAAI,CAAA;wBAC3B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK,EAAE;oBACZ,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,KAAK,CAAA;oBAC5B,IAAI,EAAE,GAAG,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC3B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBAAE,OAAO,IAAI,CAAA;oBAC7B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAA;gBAC5B,IAAI,EAAE,GAAG,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC3B,IAAI,EAAE,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,MAAM,EAAE;YACb,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,MAAM,EAAE;YACb,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,MAAM,EAAE;YACb,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,IAAI,CAAA;QAC5B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,KAAK,CAAA;QAC7B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,IAAI,CAAA;QAC5B,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAC9B,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAC9B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,KAAK,CAAA;QAC7B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,IAAI,CAAA;QAC5B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,KAAK,CAAA;QAC7B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,IAAI,CAAA;QAC5B,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAC9B,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAC9B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,KAAK,CAAA;QAC7B,IAAI,EAAE,GAAG,MAAM;YAAE,OAAO,IAAI,CAAA;QAC5B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO,EAAE;QACd,IAAI,EAAE,GAAG,MAAM,EAAE;YACb,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM,EAAE;wBACb,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,KAAK,CAAA;wBAC7B,IAAI,EAAE,GAAG,MAAM;4BAAE,OAAO,IAAI,CAAA;wBAC5B,OAAO,KAAK,CAAA;qBACf;oBACD,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,GAAG,MAAM,EAAE;oBACb,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,KAAK,CAAA;oBAC7B,IAAI,EAAE,GAAG,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC5B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,IAAI,EAAE,KAAK,MAAM;wBAAE,OAAO,IAAI,CAAA;oBAC9B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM,EAAE;gBACb,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,KAAK,CAAA;gBAC7B,IAAI,EAAE,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC5B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,IAAI,EAAE,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAA;gBAC9B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC7B,IAAI,EAAE,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC5B,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO,EAAE;QACd,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO,EAAE;oBACd,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC/B,IAAI,EAAE,KAAK,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC/B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,KAAK,CAAA;oBAC9B,IAAI,EAAE,GAAG,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC7B,IAAI,EAAE,KAAK,OAAO;wBAAE,OAAO,IAAI,CAAA;oBAC/B,OAAO,KAAK,CAAA;iBACf;gBACD,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO,EAAE;QACd,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO,EAAE;gBACd,IAAI,EAAE,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC/B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC9B,IAAI,EAAE,GAAG,OAAO;oBAAE,OAAO,IAAI,CAAA;gBAC7B,OAAO,KAAK,CAAA;aACf;YACD,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO,EAAE;QACd,IAAI,EAAE,GAAG,OAAO,EAAE;YACd,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC/B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,KAAK,CAAA;SACf;QACD,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO,EAAE;QACd,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,KAAK,CAAA;QAC9B,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7B,OAAO,KAAK,CAAA;KACf;IACD,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,EAAE,GAAG,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7B,OAAO,KAAK,CAAA;CACf;;ACpgFD,MAAM,YAAY,GAA4C;IAC1D,KAAK,EAAE,IAAI,GAAG,CAAC;QACX,OAAO;QACP,iBAAiB;QACjB,MAAM;QACN,YAAY;QACZ,OAAO;QACP,KAAK;QACL,UAAU;QACV,cAAc;QACd,QAAQ;QACR,eAAe;QACf,QAAQ;QACR,gBAAgB;QAChB,IAAI;QACJ,OAAO;QACP,yBAAyB;QACzB,MAAM;QACN,yBAAyB;QACzB,MAAM;QACN,yBAAyB;QACzB,KAAK;QACL,8BAA8B;QAC9B,OAAO;QACP,yBAAyB;QACzB,KAAK;QACL,yBAAyB;QACzB,KAAK;QACL,MAAM;QACN,8BAA8B;QAC9B,IAAI;QACJ,YAAY;QACZ,KAAK;QACL,WAAW;QACX,KAAK;QACL,OAAO;QACP,iBAAiB;QACjB,gBAAgB;QAChB,qBAAqB;QACrB,oBAAoB;QACpB,UAAU;QACV,KAAK;QACL,eAAe;QACf,SAAS;QACT,iBAAiB;QACjB,QAAQ;QACR,WAAW;QACX,KAAK;QACL,qBAAqB;QACrB,MAAM;QACN,sBAAsB;QACtB,MAAM;QACN,aAAa;QACb,KAAK;QACL,UAAU;QACV,KAAK;QACL,aAAa;QACb,MAAM;QACN,cAAc;QACd,QAAQ;QACR,yBAAyB;QACzB,KAAK;QACL,WAAW;QACX,OAAO;QACP,MAAM;QACN,yBAAyB;QACzB,OAAO;QACP,gBAAgB;QAChB,SAAS;QACT,qBAAqB;QACrB,QAAQ;QACR,gBAAgB;QAChB,OAAO;QACP,SAAS;QACT,oBAAoB;QACpB,IAAI;QACJ,mBAAmB;QACnB,OAAO;QACP,aAAa;QACb,IAAI;QACJ,sBAAsB;QACtB,MAAM;QACN,mBAAmB;QACnB,OAAO;QACP,WAAW;QACX,OAAO;QACP,oBAAoB;QACpB,IAAI;QACJ,aAAa;QACb,OAAO;QACP,cAAc;QACd,MAAM;QACN,WAAW;QACX,MAAM;KACT,CAAC;IACF,gBAAgB,EAAE,IAAI,GAAG,CAAC;QACtB,cAAc;QACd,IAAI;QACJ,mBAAmB;QACnB,IAAI;QACJ,uBAAuB;QACvB,IAAI;QACJ,SAAS;QACT,IAAI;QACJ,OAAO;QACP,iBAAiB;QACjB,IAAI;QACJ,kBAAkB;QAClB,IAAI;QACJ,gBAAgB;QAChB,IAAI;QACJ,OAAO;QACP,gBAAgB;QAChB,IAAI;QACJ,mBAAmB;QACnB,IAAI;QACJ,QAAQ;QACR,IAAI;QACJ,qBAAqB;QACrB,IAAI;QACJ,QAAQ;QACR,GAAG;QACH,eAAe;QACf,IAAI;QACJ,gBAAgB;QAChB,IAAI;QACJ,kBAAkB;QAClB,IAAI;QACJ,MAAM;QACN,GAAG;QACH,gBAAgB;QAChB,aAAa;QACb,IAAI;QACJ,iBAAiB;QACjB,IAAI;QACJ,iBAAiB;QACjB,IAAI;QACJ,iBAAiB;QACjB,IAAI;QACJ,QAAQ;QACR,GAAG;QACH,kBAAkB;QAClB,IAAI;QACJ,OAAO;QACP,GAAG;QACH,cAAc;QACd,IAAI;QACJ,cAAc;QACd,IAAI;QACJ,mBAAmB;QACnB,IAAI;QACJ,cAAc;QACd,IAAI;QACJ,qBAAqB;QACrB,IAAI;QACJ,aAAa;QACb,IAAI;QACJ,aAAa;QACb,GAAG;QACH,OAAO;QACP,WAAW;QACX,GAAG;QACH,iBAAiB;QACjB,IAAI;QACJ,cAAc;QACd,IAAI;QACJ,WAAW;QACX,IAAI;QACJ,QAAQ;QACR,GAAG;QACH,kBAAkB;QAClB,IAAI;QACJ,YAAY;QACZ,IAAI;QACJ,kBAAkB;QAClB,IAAI;KACP,CAAC;IACF,MAAM,EAAE,IAAI,GAAG,CAAC;QACZ,OAAO;QACP,MAAM;QACN,MAAM;QACN,uBAAuB;QACvB,MAAM;QACN,QAAQ;QACR,MAAM;QACN,UAAU;QACV,MAAM;QACN,SAAS;QACT,MAAM;QACN,UAAU;QACV,MAAM;QACN,OAAO;QACP,MAAM;QACN,WAAW;QACX,MAAM;QACN,OAAO;QACP,MAAM;QACN,SAAS;QACT,MAAM;QACN,WAAW;QACX,MAAM;QACN,UAAU;QACV,MAAM;QACN,QAAQ;QACR,MAAM;QACN,SAAS;QACT,MAAM;QACN,UAAU;QACV,MAAM;QACN,OAAO;QACP,MAAM;QACN,qBAAqB;QACrB,MAAM;QACN,QAAQ;QACR,MAAM;QACN,oBAAoB;QACpB,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,UAAU;QACV,MAAM;QACN,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,WAAW;QACX,MAAM;QACN,SAAS;QACT,MAAM;QACN,UAAU;QACV,MAAM;QACN,SAAS;QACT,MAAM;QACN,YAAY;QACZ,MAAM;QACN,UAAU;QACV,MAAM;QACN,sBAAsB;QACtB,MAAM;QACN,SAAS;QACT,MAAM;QACN,UAAU;QACV,MAAM;QACN,UAAU;QACV,MAAM;QACN,YAAY;QACZ,MAAM;QACN,QAAQ;QACR,MAAM;QACN,SAAS;QACT,MAAM;QACN,OAAO;QACP,MAAM;QACN,UAAU;QACV,MAAM;QACN,UAAU;QACV,MAAM;QACN,KAAK;QACL,MAAM;QACN,QAAQ;QACR,MAAM;QACN,SAAS;QACT,MAAM;QACN,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,MAAM;QACN,UAAU;QACV,MAAM;QACN,kBAAkB;QAClB,MAAM;QACN,WAAW;QACX,MAAM;QACN,MAAM;QACN,uBAAuB;QACvB,MAAM;QACN,wBAAwB;QACxB,MAAM;QACN,UAAU;QACV,MAAM;QACN,QAAQ;QACR,MAAM;QACN,SAAS;QACT,MAAM;QACN,UAAU;QACV,MAAM;QACN,UAAU;QACV,MAAM;QACN,YAAY;QACZ,MAAM;QACN,OAAO;QACP,MAAM;QACN,QAAQ;QACR,MAAM;QACN,WAAW;QACX,MAAM;QACN,KAAK;QACL,MAAM;QACN,OAAO;QACP,MAAM;QACN,QAAQ;QACR,MAAM;QACN,OAAO;QACP,MAAM;QACN,UAAU;QACV,MAAM;QACN,UAAU;QACV,MAAM;QACN,MAAM;QACN,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,MAAM;QACN,UAAU;QACV,MAAM;QACN,WAAW;QACX,MAAM;QACN,SAAS;QACT,MAAM;QACN,YAAY;QACZ,MAAM;QACN,SAAS;QACT,MAAM;QACN,eAAe;QACf,MAAM;QACN,cAAc;QACd,MAAM;QACN,eAAe;QACf,MAAM;QACN,kBAAkB;QAClB,MAAM;QACN,sBAAsB;QACtB,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,WAAW;QACX,MAAM;QACN,KAAK;QACL,MAAM;QACN,SAAS;QACT,MAAM;QACN,SAAS;QACT,MAAM;QACN,WAAW;QACX,MAAM;QACN,aAAa;QACb,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,OAAO;QACP,MAAM;QACN,OAAO;QACP,MAAM;QACN,UAAU;QACV,MAAM;QACN,eAAe;QACf,MAAM;QACN,YAAY;QACZ,MAAM;QACN,mBAAmB;QACnB,MAAM;QACN,YAAY;QACZ,MAAM;QACN,aAAa;QACb,MAAM;QACN,mBAAmB;QACnB,MAAM;QACN,YAAY;QACZ,MAAM;QACN,OAAO;QACP,MAAM;QACN,OAAO;QACP,MAAM;QACN,SAAS;QACT,MAAM;QACN,cAAc;QACd,MAAM;QACN,WAAW;QACX,MAAM;QACN,aAAa;QACb,MAAM;QACN,UAAU;QACV,MAAM;QACN,YAAY;QACZ,MAAM;QACN,iBAAiB;QACjB,MAAM;QACN,QAAQ;QACR,MAAM;QACN,OAAO;QACP,MAAM;QACN,WAAW;QACX,MAAM;QACN,YAAY;QACZ,MAAM;QACN,SAAS;QACT,MAAM;QACN,SAAS;QACT,MAAM;QACN,SAAS;QACT,MAAM;QACN,aAAa;QACb,MAAM;QACN,SAAS;QACT,MAAM;QACN,cAAc;QACd,MAAM;QACN,SAAS;QACT,MAAM;QACN,WAAW;QACX,MAAM;QACN,cAAc;QACd,MAAM;QACN,QAAQ;QACR,MAAM;QACN,SAAS;QACT,MAAM;QACN,UAAU;QACV,MAAM;QACN,QAAQ;QACR,MAAM;QACN,UAAU;QACV,MAAM;QACN,UAAU;QACV,MAAM;QACN,OAAO;QACP,MAAM;QACN,OAAO;QACP,MAAM;QACN,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,SAAS;QACT,MAAM;QACN,UAAU;QACV,MAAM;QACN,SAAS;QACT,MAAM;QACN,UAAU;QACV,MAAM;QACN,KAAK;QACL,MAAM;QACN,aAAa;QACb,MAAM;QACN,IAAI;QACJ,MAAM;QACN,kBAAkB;QAClB,MAAM;KACT,CAAC;CACL,CAAA;AAED,YAAY,CAAC,EAAE,GAAG,YAAY,CAAC,gBAAgB,CAAA;AAC/C,YAAY,CAAC,EAAE,GAAG,YAAY,CAAC,iBAAiB,GAAG,YAAY,CAAC,GAAG;IAC/D,YAAY,CAAC,MAAM,CAAA;;ACzchB,MAAM,SAAS,GAAG,IAAI,CAAA;AAC7B,AAAO,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,AAAO,MAAM,QAAQ,GAAG,IAAI,CAAA;AAC5B,AAAO,MAAM,cAAc,GAAG,IAAI,CAAA;AAClC,AAAO,MAAM,QAAQ,GAAG,IAAI,CAAA;AAC5B,AAAO,MAAM,cAAc,GAAG,IAAI,CAAA;AAClC,AAAO,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,AAAO,MAAM,UAAU,GAAG,IAAI,CAAA;AAC9B,AAAO,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,AAAO,MAAM,gBAAgB,GAAG,IAAI,CAAA;AACpC,AAAO,MAAM,QAAQ,GAAG,IAAI,CAAA;AAC5B,AAAO,MAAM,QAAQ,GAAG,IAAI,CAAA;AAC5B,AAAO,MAAM,KAAK,GAAG,IAAI,CAAA;AACzB,AAAO,MAAM,WAAW,GAAG,IAAI,CAAA;AAC/B,AAAO,MAAM,QAAQ,GAAG,IAAI,CAAA;AAC5B,AAAO,MAAM,OAAO,GAAG,IAAI,CAAA;AAC3B,AAAO,MAAM,SAAS,GAAG,IAAI,CAAA;AAC7B,AAAO,MAAM,QAAQ,GAAG,IAAI,CAAA;AAC5B,AAAO,MAAM,UAAU,GAAG,IAAI,CAAA;AAC9B,AAAO,MAAM,SAAS,GAAG,IAAI,CAAA;AAC7B,AAAO,MAAM,KAAK,GAAG,IAAI,CAAA;AACzB,AAAO,MAAM,YAAY,GAAG,IAAI,CAAA;AAChC,AAAO,MAAM,UAAU,GAAG,IAAI,CAAA;AAC9B,AAAO,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,AAAO,MAAM,YAAY,GAAG,IAAI,CAAA;AAChC,AAAO,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,AAAO,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,AAAO,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,AAAO,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,AAAO,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,AAAO,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,AAAO,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,AAAO,MAAM,mBAAmB,GAAG,IAAI,CAAA;AACvC,AAAO,MAAM,OAAO,GAAG,IAAI,CAAA;AAC3B,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,cAAc,GAAG,IAAI,CAAA;AAClC,AAAO,MAAM,kBAAkB,GAAG,IAAI,CAAA;AACtC,AAAO,MAAM,gBAAgB,GAAG,IAAI,CAAA;AACpC,AAAO,MAAM,gBAAgB,GAAG,IAAI,CAAA;AACpC,AAAO,MAAM,YAAY,GAAG,IAAI,CAAA;AAChC,AAAO,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,AAAO,MAAM,kBAAkB,GAAG,MAAM,CAAA;AACxC,AAAO,MAAM,eAAe,GAAG,MAAM,CAAA;AACrC,AAAO,MAAM,aAAa,GAAG,MAAM,CAAA;AACnC,AAAO,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAExC,AAAO,MAAM,YAAY,GAAG,IAAI,CAAA;AAChC,AAAO,MAAM,YAAY,GAAG,QAAQ,CAAA;AAEpC,uBAA8B,IAAY;IACtC,QACI,CAAC,IAAI,IAAI,mBAAmB,IAAI,IAAI,IAAI,mBAAmB;SAC1D,IAAI,IAAI,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,CAAC,EAC3D;CACJ;AAED,wBAA+B,IAAY;IACvC,OAAO,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,CAAA;CAChD;AAED,sBAA6B,IAAY;IACrC,OAAO,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,UAAU,CAAA;CACjD;AAED,oBAA2B,IAAY;IACnC,QACI,CAAC,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS;SACtC,IAAI,IAAI,mBAAmB,IAAI,IAAI,IAAI,mBAAmB,CAAC;SAC3D,IAAI,IAAI,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,CAAC,EAC3D;CACJ;AAED,0BAAiC,IAAY;IACzC,QACI,IAAI,KAAK,QAAQ;QACjB,IAAI,KAAK,cAAc;QACvB,IAAI,KAAK,aAAa;QACtB,IAAI,KAAK,kBAAkB,EAC9B;CACJ;AAED,wBAA+B,IAAY;IACvC,OAAO,IAAI,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,CAAA;CACtD;AAED,oBAA2B,IAAY;IACnC,IAAI,IAAI,IAAI,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,EAAE;QACxD,OAAO,IAAI,GAAG,iBAAiB,GAAG,EAAE,CAAA;KACvC;IACD,IAAI,IAAI,IAAI,mBAAmB,IAAI,IAAI,IAAI,mBAAmB,EAAE;QAC5D,OAAO,IAAI,GAAG,mBAAmB,GAAG,EAAE,CAAA;KACzC;IACD,OAAO,IAAI,GAAG,SAAS,CAAA;CAC1B;;AC7CD,2BAA2B,EAAU;IACjC,QACI,EAAE,KAAK,gBAAgB;QACvB,EAAE,KAAK,UAAU;QACjB,EAAE,KAAK,cAAc;QACrB,EAAE,KAAK,QAAQ;QACf,EAAE,KAAK,QAAQ;QACf,EAAE,KAAK,QAAQ;QACf,EAAE,KAAK,YAAY;QACnB,EAAE,KAAK,eAAe;QACtB,EAAE,KAAK,gBAAgB;QACvB,EAAE,KAAK,iBAAiB;QACxB,EAAE,KAAK,kBAAkB;QACzB,EAAE,KAAK,gBAAgB;QACvB,EAAE,KAAK,iBAAiB;QACxB,EAAE,KAAK,YAAY,EACtB;CACJ;AAED,iCAAiC,EAAU;IACvC,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,OAAO,CAAA;CAC9D;AAED,gCAAgC,EAAU;IACtC,QACI,YAAY,CAAC,EAAE,CAAC;QAChB,EAAE,KAAK,UAAU;QACjB,EAAE,KAAK,OAAO;QACd,EAAE,KAAK,kBAAkB;QACzB,EAAE,KAAK,eAAe,EACzB;CACJ;AAED,wCAAwC,EAAU;IAC9C,OAAO,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,OAAO,CAAA;CAC7C;AAED,yCAAyC,EAAU;IAC/C,OAAO,8BAA8B,CAAC,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,CAAA;CAClE;AAED,gCAAgC,IAAY,EAAE,KAAa;IAEvD,OAAO,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;CAC5E;AAED,oCAAoC,IAAY;IAC5C,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;CACtC;AAkSD;IAoBI,YAAY,OAAiC;QAlB5B,YAAO,GAAG,IAAI,MAAM,EAAE,CAAA;QAC/B,WAAM,GAAG,KAAK,CAAA;QACd,WAAM,GAAG,KAAK,CAAA;QACd,kBAAa,GAAG,CAAC,CAAA;QACjB,kBAAa,GAAG,CAAC,CAAA;QACjB,kBAAa,GAAG,CAAC,CAAA;QACjB,kBAAa,GAAG,EAAE,CAAA;QAClB,kBAAa,GAAG,EAAE,CAAA;QAClB,kBAAa,GAAG,EAAE,CAAA;QAClB,iCAA4B,GAAG,KAAK,CAAA;QACpC,wBAAmB,GAAG,CAAC,CAAA;QACvB,gBAAW,GAAG,IAAI,GAAG,EAAU,CAAA;QAC/B,wBAAmB,GAAG,IAAI,GAAG,EAAU,CAAA;QAO3C,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,EAAE,CAAA;KAChC;IAQD,eAAe,CACX,MAAc,EACd,QAAgB,CAAC,EACjB,MAAc,MAAM,CAAC,MAAM;QAE3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACjC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QAE9B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAChE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAA;YAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;YACnD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAA;YAC1C,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;SAChE;aAAM,IAAI,KAAK,IAAI,GAAG,EAAE;YACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;SACtB;aAAM;YACH,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACrD,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAA;SAC5C;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;KAClC;IAQD,aAAa,CACT,MAAc,EACd,QAAgB,CAAC,EACjB,MAAc,MAAM,CAAC,MAAM;QAE3B,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;QACvC,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,IAAI,UAAU,GAAG,KAAK,CAAA;QACtB,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;YAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;YAEjC,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACzB,IAAI,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;aAC/C;YACD,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAEvB,IAAI,IAAI,KAAK,iBAAiB,EAAE;gBAC5B,MAAM,GAAG,IAAI,CAAA;aAChB;iBAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE;gBACnC,UAAU,GAAG,IAAI,CAAA;aACpB;iBAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE;gBACnC,SAAS,GAAG,IAAI,CAAA;aACnB;iBAAM,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;gBAC/D,OAAO,GAAG,IAAI,CAAA;aACjB;iBAAM,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;gBAC/D,MAAM,GAAG,IAAI,CAAA;aAChB;iBAAM,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;gBAC/D,MAAM,GAAG,IAAI,CAAA;aAChB;iBAAM;gBACH,IAAI,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;aAC5C;SACJ;QACD,IAAI,CAAC,OAAO,CACR,KAAK,EACL,GAAG,EACH,MAAM,EACN,UAAU,EACV,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,CACT,CAAA;KACJ;IASD,eAAe,CACX,MAAc,EACd,QAAgB,CAAC,EACjB,MAAc,MAAM,CAAC,MAAM,EAC3B,QAAiB,KAAK;QAEtB,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAA;QAC/C,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAA;QAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,IACI,CAAC,IAAI,CAAC,MAAM;YACZ,IAAI,CAAC,WAAW,IAAI,IAAI;YACxB,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAC5B,EAAE;YACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAClB,IAAI,CAAC,OAAO,EAAE,CAAA;SACjB;KACJ;IAID,IAAY,MAAM;QACd,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAA;KACtD;IAED,IAAY,WAAW;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAA;KAC3C;IAEO,cAAc,CAAC,KAAa;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;SACtC;KACJ;IAEO,cAAc,CAAC,KAAa,EAAE,GAAW;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;SAC3C;KACJ;IAEO,OAAO,CACX,KAAa,EACb,GAAW,EACX,MAAe,EACf,UAAmB,EACnB,SAAkB,EAClB,OAAgB,EAChB,MAAe,EACf,MAAe;QAEf,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CACjB,KAAK,EACL,GAAG,EACH,MAAM,EACN,UAAU,EACV,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,CACT,CAAA;SACJ;KACJ;IAEO,cAAc,CAAC,KAAa;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;SACtC;KACJ;IAEO,cAAc,CAAC,KAAa,EAAE,GAAW;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;SAC3C;KACJ;IAEO,kBAAkB,CAAC,KAAa;QACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;SAC1C;KACJ;IAEO,kBAAkB,CAAC,KAAa,EAAE,GAAW;QACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;SAC/C;KACJ;IAEO,kBAAkB,CAAC,KAAa,EAAE,KAAa;QACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;SACjD;KACJ;IAEO,kBAAkB,CACtB,KAAa,EACb,GAAW,EACX,KAAa;QAEb,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;SACtD;KACJ;IAEO,YAAY,CAAC,KAAa;QAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;SACpC;KACJ;IAEO,YAAY,CAAC,KAAa,EAAE,GAAW;QAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;SACzC;KACJ;IAEO,qBAAqB,CAAC,KAAa,EAAE,IAAmB;QAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;YACrC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;SACnD;KACJ;IAEO,qBAAqB,CACzB,KAAa,EACb,GAAW,EACX,IAAmB;QAEnB,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;YACrC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;SACxD;KACJ;IAEO,YAAY,CAChB,KAAa,EACb,GAAW,EACX,GAAW,EACX,GAAW,EACX,MAAe;QAEf,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;SAC3D;KACJ;IAEO,0BAA0B,CAC9B,KAAa,EACb,IAAgC,EAChC,MAAe;QAEf,IAAI,IAAI,CAAC,QAAQ,CAAC,0BAA0B,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;SAChE;KACJ;IAEO,0BAA0B,CAC9B,KAAa,EACb,GAAW,EACX,IAAgC,EAChC,MAAe;QAEf,IAAI,IAAI,CAAC,QAAQ,CAAC,0BAA0B,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;SACrE;KACJ;IAEO,eAAe,CACnB,KAAa,EACb,GAAW,EACX,IAAqB;QAErB,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;SAClD;KACJ;IAEO,uBAAuB,CAC3B,KAAa,EACb,GAAW,EACX,IAAY,EACZ,MAAe;QAEf,IAAI,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE;YACvC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;SAClE;KACJ;IAEO,iBAAiB,CAAC,KAAa,EAAE,GAAW,EAAE,IAAW;QAC7D,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;YACjC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;SACpD;KACJ;IAEO,oBAAoB,CACxB,KAAa,EACb,GAAW,EACX,IAAgC,EAChC,MAAe;QAEf,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;YACpC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;SAC/D;KACJ;IAEO,6BAA6B,CACjC,KAAa,EACb,GAAW,EACX,IAAgB,EAChB,GAAW,EACX,KAAoB,EACpB,MAAe;QAEf,IAAI,IAAI,CAAC,QAAQ,CAAC,6BAA6B,EAAE;YAC7C,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CACvC,KAAK,EACL,GAAG,EACH,IAAI,EACJ,GAAG,EACH,KAAK,EACL,MAAM,CACT,CAAA;SACJ;KACJ;IAEO,WAAW,CAAC,KAAa,EAAE,GAAW,EAAE,KAAa;QACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;SAC/C;KACJ;IAEO,eAAe,CACnB,KAAa,EACb,GAAW,EACX,GAAoB;QAEpB,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;SACjD;KACJ;IAEO,qBAAqB,CAAC,KAAa,EAAE,MAAe;QACxD,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;YACrC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;SACrD;KACJ;IAEO,qBAAqB,CACzB,KAAa,EACb,GAAW,EACX,MAAe;QAEf,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;YACrC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;SAC1D;KACJ;IAEO,qBAAqB,CACzB,KAAa,EACb,GAAW,EACX,GAAW,EACX,GAAW;QAEX,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;YACrC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;SAC5D;KACJ;IAMD,IAAY,MAAM;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;KAC7B;IAED,IAAY,KAAK;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA;KAC5B;IAED,IAAY,gBAAgB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAA;KACvC;IAED,IAAY,aAAa;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAA;KACpC;IAED,IAAY,cAAc;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAA;KACrC;IAED,IAAY,cAAc;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAA;KACrC;IAEO,KAAK,CAAC,MAAc,EAAE,KAAa,EAAE,GAAW;QACpD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACtD;IAEO,MAAM,CAAC,KAAa;QACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;KAC7B;IAEO,OAAO;QACX,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;KACzB;IAEO,GAAG,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;KAC9B;IAEO,IAAI,CAAC,GAAW,EAAE,GAAW;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;KACrC;IAEO,IAAI,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;KAC1C;IAIO,KAAK,CAAC,OAAe;QACzB,MAAM,IAAI,iBAAiB,CACvB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,EACV,OAAO,CACV,CAAA;KACJ;IAGO,aAAa;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,IAAI,OAAO,GAAG,KAAK,CAAA;QAEnB,SAAS;YACL,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;YAChC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC,EAAE;gBACnC,MAAM,IAAI,GAAG,OAAO,GAAG,iBAAiB,GAAG,oBAAoB,CAAA;gBAC/D,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAA;aACrC;YACD,IAAI,OAAO,EAAE;gBACT,OAAO,GAAG,KAAK,CAAA;aAClB;iBAAM,IAAI,EAAE,KAAK,cAAc,EAAE;gBAC9B,OAAO,GAAG,IAAI,CAAA;aACjB;iBAAM,IAAI,EAAE,KAAK,iBAAiB,EAAE;gBACjC,OAAO,GAAG,IAAI,CAAA;aACjB;iBAAM,IAAI,EAAE,KAAK,kBAAkB,EAAE;gBAClC,OAAO,GAAG,KAAK,CAAA;aAClB;iBAAM,IACH,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,OAAO;iBAC1B,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAC5C,EAAE;gBACE,MAAK;aACR;YACD,IAAI,CAAC,OAAO,EAAE,CAAA;SACjB;QAED,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAA;KAC9B;IAGO,OAAO;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;QACtD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;QACxB,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAA;QAEhC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAA;QAElB,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAChC,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,CAAC,EAAE;YAC9B,IAAI,EAAE,KAAK,gBAAgB,EAAE;gBACzB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;aAC9B;YACD,IAAI,EAAE,KAAK,kBAAkB,IAAI,EAAE,KAAK,iBAAiB,EAAE;gBACvD,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;aACzC;YACD,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;YAClC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAA;SAC5C;QACD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI;YACjC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC7B,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;aACjD;SACJ,CAAC,CAAA;QACF,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;KACzC;IAEO,oBAAoB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,EAAE,GAAG,CAAC,CAAA;QAEV,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,MAAM,CAAC,CAAC,EAAE;YACxC,IAAI,OAAO,EAAE;gBACT,OAAO,GAAG,KAAK,CAAA;aAClB;iBAAM,IAAI,EAAE,KAAK,cAAc,EAAE;gBAC9B,OAAO,GAAG,IAAI,CAAA;aACjB;iBAAM,IAAI,EAAE,KAAK,iBAAiB,EAAE;gBACjC,OAAO,GAAG,IAAI,CAAA;aACjB;iBAAM,IAAI,EAAE,KAAK,kBAAkB,EAAE;gBAClC,OAAO,GAAG,KAAK,CAAA;aAClB;iBAAM,IACH,EAAE,KAAK,eAAe;gBACtB,CAAC,OAAO;iBACP,IAAI,CAAC,aAAa,KAAK,YAAY;qBAC/B,IAAI,CAAC,cAAc,KAAK,YAAY;wBACjC,IAAI,CAAC,cAAc,KAAK,UAAU;wBAClC,IAAI,CAAC,cAAc,KAAK,eAAe,CAAC,CACpD,EAAE;gBACE,KAAK,IAAI,CAAC,CAAA;aACb;YACD,IAAI,CAAC,OAAO,EAAE,CAAA;SACjB;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAClB,OAAO,KAAK,CAAA;KACf;IAGO,WAAW;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,GAAG,CAAC,CAAA;QAET,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAA;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAA;SACxB;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;SAClC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;SACzC;QACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;KAC7C;IAGO,WAAW,CAAC,CAAS;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAExB,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACjC,OAAO,IAAI,CAAC,gBAAgB,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YAAC,CAAC;QACvD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;KAChD;IAGO,OAAO;QACX,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YAIrB,IAAI,IAAI,CAAC,4BAA4B,EAAE;gBACnC,IAAI,CAAC,aAAa,EAAE,CAAA;aACvB;YACD,OAAO,IAAI,CAAA;SACd;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE;YACvD,IAAI,CAAC,aAAa,EAAE,CAAA;YACpB,OAAO,IAAI,CAAA;SACd;QAED,OAAO,KAAK,CAAA;KACf;IAGO,YAAY;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAA;QAGzC,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;YAC5B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAChD,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YACtB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAC9C,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,EAAE;YAChD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;YAC7D,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,EAAE;YAC9C,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;YAC9D,OAAO,IAAI,CAAA;SACd;QAGD,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE;YAC1C,MAAM,UAAU,GACZ,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YACtD,IAAI,MAAM,GAAG,KAAK,CAAA;YAClB,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE;gBAC9D,MAAM,IAAI,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,CAAA;gBACpD,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;gBACpD,IAAI,CAAC,WAAW,EAAE,CAAA;gBAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;oBAC7B,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;iBACnC;gBACD,IAAI,CAAC,4BAA4B,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;gBAC/D,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;gBAChE,OAAO,IAAI,CAAA;aACd;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;QAED,OAAO,KAAK,CAAA;KACf;IAIO,aAAa,CAAC,OAAO,GAAG,KAAK;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,IAAI,MAAM,GAAG,KAAK,CAAA;QAElB,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACpB,GAAG,GAAG,CAAC,CAAA;YACP,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAA;SACjC;aAAM,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC3B,GAAG,GAAG,CAAC,CAAA;YACP,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAA;SACjC;aAAM,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAC/B,GAAG,GAAG,CAAC,CAAA;YACP,GAAG,GAAG,CAAC,CAAA;SACV;aAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE;YAC1C,GAAG,GAAG,IAAI,CAAC,aAAa,CAAA;YACxB,GAAG,GAAG,IAAI,CAAC,aAAa,CAAA;SAC3B;aAAM;YACH,OAAO,KAAK,CAAA;SACf;QACD,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAEhC,IAAI,CAAC,OAAO,EAAE;YACV,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;SACzD;QACD,OAAO,IAAI,CAAA;KACd;IAEO,mBAAmB,CAAC,OAAgB;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;YAC5B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;YACtB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAA;YAC7C,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;gBAC5D,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACjB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE;0BACtC,IAAI,CAAC,aAAa;0BAClB,MAAM,CAAC,iBAAiB,CAAA;iBACjC;gBACD,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;oBAC7B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;wBACrD,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;qBACtD;oBACD,OAAO,IAAI,CAAA;iBACd;aACJ;YACD,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;gBACzB,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;aACtC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;QACD,OAAO,KAAK,CAAA;KACf;IAGO,OAAO;QACX,QACI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,2BAA2B,EAAE;YAClC,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,EAAE,EAC3B;KACJ;IAEO,MAAM;QACV,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACpB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACzD,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAEO,2BAA2B;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;YAC1B,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;gBACtB,OAAO,IAAI,CAAA;aACd;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;QACD,OAAO,KAAK,CAAA;KACf;IAEO,mBAAmB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE;YACjD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;YACxB,IAAI,CAAC,WAAW,EAAE,CAAA;YAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;gBAC7B,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;aACnC;YACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YACpC,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAEO,iBAAiB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;YAC3B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YACvB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;gBAC1B,IAAI,CAAC,cAAc,EAAE,CAAA;aACxB;iBAAM,IAAI,IAAI,CAAC,gBAAgB,KAAK,YAAY,EAAE;gBAC/C,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;aAC9B;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAA;YAEvC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YACvC,IAAI,CAAC,WAAW,EAAE,CAAA;YAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;gBAC7B,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;aACnC;YACD,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAEnD,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAGO,eAAe;QACnB,QACI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,2BAA2B,EAAE;YAClC,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,0BAA0B,EAAE;YACjC,IAAI,CAAC,2BAA2B,EAAE,EACrC;KACJ;IAGO,0BAA0B;QAC9B,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;YAChC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;SAClC;QACD,OAAO,KAAK,CAAA;KACf;IAGO,kBAAkB;QACtB,IAAI,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAA;YAC1C,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAGO,mBAAmB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAChC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE;YACrC,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YACvC,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAGO,2BAA2B;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAChC,IACI,EAAE,KAAK,CAAC,CAAC;YACT,EAAE,KAAK,gBAAgB;YACvB,EAAE,KAAK,UAAU;YACjB,EAAE,KAAK,QAAQ;YACf,EAAE,KAAK,QAAQ;YACf,EAAE,KAAK,QAAQ;YACf,EAAE,KAAK,YAAY;YACnB,EAAE,KAAK,eAAe;YACtB,EAAE,KAAK,gBAAgB;YACvB,EAAE,KAAK,iBAAiB;YACxB,EAAE,KAAK,YACX,EAAE;YACE,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YACvC,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAKO,cAAc;QAClB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YACxB,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;oBAC3C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;oBACxC,OAAM;iBACT;gBACD,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;aAC7C;YACD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;SAC9B;KACJ;IAIO,YAAY;QAChB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YACxB,IAAI,IAAI,CAAC,uBAAuB,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;gBAC7D,OAAO,IAAI,CAAA;aACd;YACD,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAA;SAC3C;QACD,OAAO,KAAK,CAAA;KACf;IAKO,uBAAuB;QAC3B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE;YACjC,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YAC9D,OAAO,IAAI,CAAC,uBAAuB,EAAE,EAAE;gBACnC,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;aACjE;YACD,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAOO,wBAAwB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,IAAI,EAAE,KAAK,cAAc,IAAI,IAAI,CAAC,8BAA8B,EAAE,EAAE;YAChE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;SAC1B;QACD,IAAI,uBAAuB,CAAC,EAAE,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YACvB,OAAO,IAAI,CAAA;SACd;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;QACD,OAAO,KAAK,CAAA;KACf;IASO,uBAAuB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,IAAI,EAAE,KAAK,cAAc,IAAI,IAAI,CAAC,8BAA8B,EAAE,EAAE;YAChE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;SAC1B;QACD,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE;YAC5B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YACvB,OAAO,IAAI,CAAA;SACd;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;QACD,OAAO,KAAK,CAAA;KACf;IAGO,aAAa;QACjB,IACI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,kBAAkB,EAAE;aACxB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CACxC,EAAE;YACE,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;SAC/B;QACD,OAAO,KAAK,CAAA;KACf;IAEO,gBAAgB;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAA;YAC5B,IAAI,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC/B,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBAC9C,OAAO,IAAI,CAAA;aACd;YACD,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;aAC/B;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;QACD,OAAO,KAAK,CAAA;KACf;IAEO,aAAa;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACrB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAA;gBACpC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;gBACvC,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;gBACtD,OAAO,IAAI,CAAA;aACd;YACD,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;SACxC;QACD,OAAO,KAAK,CAAA;KACf;IAGO,kBAAkB;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IACI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,8BAA8B,EAAE;aACpC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACrD,IAAI,CAAC,iBAAiB,EAC1B,EAAE;YACE,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;YAC3D,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAEO,iBAAiB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBACzB,OAAO,IAAI,CAAA;aACd;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;QACD,OAAO,KAAK,CAAA;KACf;IAEO,OAAO;QACX,IACI,IAAI,CAAC,gBAAgB,KAAK,SAAS;YACnC,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CACtC,EAAE;YACE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;YACtB,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAGO,gBAAgB;QACpB,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAA;YACxC,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;YAC7B,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,cAAc,CAAA;YACnC,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;YAC7B,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,cAAc,CAAA;YACnC,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAGO,gBAAgB;QACpB,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAChC,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE;YACnB,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAA;YAC9B,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAGO,8BAA8B;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAExB,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAA;gBAC/B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE;oBACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAA;oBACnC,IACI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;wBACxB,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;wBAC3B,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAC5B,EAAE;wBACE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAA;wBAChC,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,EAAE;4BACpC,IAAI,CAAC,aAAa;gCACd,CAAC,IAAI,GAAG,MAAM,IAAI,KAAK;qCACtB,KAAK,GAAG,MAAM,CAAC;oCAChB,OAAO,CAAA;4BACX,OAAO,IAAI,CAAA;yBACd;qBACJ;oBACD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;oBAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;iBAC5B;gBACD,OAAO,IAAI,CAAA;aACd;YACD,IACI,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAC1B,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;gBAC3B,cAAc,CAAC,IAAI,CAAC,aAAa,CACrC,EAAE;gBACE,OAAO,IAAI,CAAA;aACd;YACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC5B,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;aACvC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;QAED,OAAO,KAAK,CAAA;KACf;IAGO,iBAAiB;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBAC3B,OAAO,IAAI,CAAA;aACd;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;gBACnB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;gBAC5B,OAAO,IAAI,CAAA;aACd;YACD,OAAO,KAAK,CAAA;SACf;QAED,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YACnD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAA;YAC1C,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,OAAO,IAAI,CAAA;SACd;QAED,OAAO,KAAK,CAAA;KACf;IACO,qBAAqB,CAAC,EAAU;QACpC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;YACX,OAAO,KAAK,CAAA;SACf;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;SAC3B;QACD,QACI,EAAE,KAAK,iBAAiB;aACvB,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,iBAAiB,CAAC,EAC7C;KACJ;IAGO,gBAAgB;QACpB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;QACtB,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAC9B,IAAI,EAAE,IAAI,QAAQ,IAAI,EAAE,IAAI,SAAS,EAAE;YACnC,GAAG;gBACC,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,GAAG,SAAS,CAAC,CAAA;gBAC/D,IAAI,CAAC,OAAO,EAAE,CAAA;aACjB,QACG,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,KAAK,SAAS;gBACzC,EAAE,IAAI,SAAS,EAClB;YACD,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAGO,uBAAuB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAExB,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;YACvB,IAAI,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;YAChE,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAC/B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;YACvB,IAAI,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;YAC/D,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;YACvB,IAAI,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;YAChE,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAC/B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;YACvB,IAAI,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;YAC/D,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;YACvB,IAAI,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;YAC/D,OAAO,IAAI,CAAA;SACd;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAC/B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;YACvB,IAAI,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;YAC9D,OAAO,IAAI,CAAA;SACd;QAED,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,IACI,IAAI,CAAC,MAAM;YACX,IAAI,CAAC,WAAW,IAAI,IAAI;aACvB,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;iBACvB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAChD,EAAE;YACE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;YACvB,IACI,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAC1B,IAAI,CAAC,iCAAiC,EAAE;gBACxC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAC9B,EAAE;gBACE,IAAI,CAAC,6BAA6B,CAC9B,KAAK,GAAG,CAAC,EACT,IAAI,CAAC,KAAK,EACV,UAAU,EACV,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,IAAI,IAAI,EAC1B,MAAM,CACT,CAAA;gBACD,OAAO,IAAI,CAAA;aACd;YACD,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;SACtC;QAED,OAAO,KAAK,CAAA;KACf;IAKO,iCAAiC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAGxB,IAAI,IAAI,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YACvD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;YACvC,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;gBAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;gBACvC,IACI,sBAAsB,CAClB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,CAE1B,EAAE;oBACE,OAAO,IAAI,CAAA;iBACd;gBACD,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;aACtC;SACJ;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAGlB,IAAI,IAAI,CAAC,iCAAiC,EAAE,EAAE;YAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAA;YACtC,IAAI,sBAAsB,CAAC,kBAAkB,EAAE,WAAW,CAAC,EAAE;gBACzD,IAAI,CAAC,aAAa,GAAG,kBAAkB,CAAA;gBACvC,IAAI,CAAC,aAAa,GAAG,WAAW,CAAA;gBAChC,OAAO,IAAI,CAAA;aACd;YACD,IAAI,0BAA0B,CAAC,WAAW,CAAC,EAAE;gBACzC,IAAI,CAAC,aAAa,GAAG,WAAW,CAAA;gBAChC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;gBACvB,OAAO,IAAI,CAAA;aACd;YACD,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;SACtC;QACD,OAAO,KAAK,CAAA;KACf;IAIO,sBAAsB;QAC1B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,OAAO,8BAA8B,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAC1D,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACjE,IAAI,CAAC,OAAO,EAAE,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,aAAa,KAAK,EAAE,CAAA;KACnC;IAIO,uBAAuB;QAC3B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,OAAO,+BAA+B,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAC3D,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACjE,IAAI,CAAC,OAAO,EAAE,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,aAAa,KAAK,EAAE,CAAA;KACnC;IAIO,iCAAiC;QACrC,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAA;KACxC;IAGO,iBAAiB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;YACzC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YACzC,IAAI,CAAC,WAAW,EAAE,CAAA;YAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE;gBAC/B,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;aAC7C;YACD,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YACrD,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAKO,WAAW;QACf,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACtB,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAA;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAA;YAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;gBACvB,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;gBAEtD,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;oBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAA;oBAEhC,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;wBAC7B,IAAI,IAAI,CAAC,MAAM,EAAE;4BACb,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;yBACxC;qBACJ;yBAAM,IAAI,IAAI,GAAG,KAAK,EAAE;wBACrB,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;qBACtD;yBAAM;wBACH,IAAI,CAAC,qBAAqB,CACtB,KAAK,EACL,IAAI,CAAC,KAAK,EACV,IAAI,EACJ,KAAK,CACR,CAAA;qBACJ;iBACJ;aACJ;YAED,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;SACrB;KACJ;IAIO,YAAY;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAExB,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;YAC1B,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;gBACvB,OAAO,IAAI,CAAA;aACd;YACD,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;aAC/B;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAChC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,kBAAkB,EAAE;YACxC,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YACvB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YACvC,OAAO,IAAI,CAAA;SACd;QAED,OAAO,KAAK,CAAA;KACf;IAGO,cAAc;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAExB,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAA;YAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YAClD,OAAO,IAAI,CAAA;SACd;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YACtC,IAAI,CAAC,aAAa,GAAG,WAAW,CAAA;YAChC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;YACpD,OAAO,IAAI,CAAA;SACd;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7C,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;gBAC3D,OAAO,IAAI,CAAA;aACd;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;QAED,OAAO,IAAI,CAAC,uBAAuB,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAA;KACrE;IAGO,qBAAqB;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAChC,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;YACtC,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAA;YAC9B,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAGO,oBAAoB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAC7B,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE;gBAC3B,OAAO,IAAI,CAAA;aACd;YACD,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;aAC/B;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;QACD,OAAO,KAAK,CAAA;KACf;IAGO,gBAAgB;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAExB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;QACtB,OAAO,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAC1C,IAAI,CAAC,aAAa;gBACd,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC/D,IAAI,CAAC,OAAO,EAAE,CAAA;SACjB;QAED,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAA;KAC9B;IAGO,YAAY;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;QACtB,OAAO,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YACtC,IAAI,CAAC,aAAa;gBACd,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC/D,IAAI,CAAC,OAAO,EAAE,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAA;KAC9B;IAIO,4BAA4B;QAChC,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACtB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;YAC7B,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;gBACtB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;gBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;oBACjC,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAA;iBAC7D;qBAAM;oBACH,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAA;iBACnC;aACJ;iBAAM;gBACH,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;aAC1B;YACD,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACf;IAGO,aAAa;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAChC,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,SAAS,CAAA;YACnC,OAAO,IAAI,CAAA;SACd;QACD,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;QACtB,OAAO,KAAK,CAAA;KACf;IAKO,iBAAiB,CAAC,MAAc;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;YAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;YAChC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAClB,OAAO,KAAK,CAAA;aACf;YACD,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC,CAAA;YAC7D,IAAI,CAAC,OAAO,EAAE,CAAA;SACjB;QACD,OAAO,IAAI,CAAA;KACd;CACJ;;ACp0DD,MAAM,YAAY,GAAG,EAAa,CAAA;AAClC,MAAM,UAAU,GAAG,EAAW,CAAA;AAC9B,MAAM,mBAAmB,GAAG,EAAoB,CAAA;AAOhD,+BACI,QAAmB,EACnB,MAAmB;IAEnB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;QACtC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;KAC1B;IACD,OAAO,QAAgC,CAAA;CAC1C;AAED,+BACI,MAKyB,EACzB,IAOmB;IAEnB,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;QAC/B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACxC;SAAM;QACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAC7B;CACJ;AAED,0BACI,MAAsB,EACtB,IAAkE;IAElE,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;QAC/B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACxC;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE;QACzC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAC7B;SAAM;QACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAC7B;CACJ;AAED;IAWI,YAAY,OAA8B;QARlC,UAAK,GAAmB,YAAY,CAAA;QACpC,WAAM,GAAU,UAAU,CAAA;QAC1B,2BAAsB,GAAa,EAAE,CAAA;QACrC,oBAAe,GAAoB,EAAE,CAAA;QACrC,qBAAgB,GAAqB,EAAE,CAAA;QAE/C,WAAM,GAAW,EAAE,CAAA;QAGf,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;QAChD,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,CAAA;KAC9D;IAED,IAAI,OAAO;QACP,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;KACpB;IAED,IAAI,KAAK;QACL,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QACD,OAAO,IAAI,CAAC,MAAM,CAAA;KACrB;IAED,OAAO,CACH,KAAa,EACb,GAAW,EACX,MAAe,EACf,UAAmB,EACnB,SAAkB,EAClB,OAAgB,EAChB,MAAe,EACf,MAAe;QAEf,IAAI,CAAC,MAAM,GAAG;YACV,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,IAAI;YACZ,KAAK;YACL,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YAClC,MAAM;YACN,UAAU;YACV,SAAS;YACT,OAAO;YACP,MAAM;YACN,MAAM;SACT,CAAA;KACJ;IAED,cAAc,CAAC,KAAa;QACxB,IAAI,CAAC,KAAK,GAAG;YACT,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,IAAI;YACZ,KAAK;YACL,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,EAAE;YACP,QAAQ,EAAE,EAAE;SACf,CAAA;QACD,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAA;QAC/B,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAA;KACnC;IAED,cAAc,CAAC,KAAa,EAAE,GAAW;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAE9C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE;YAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAA;YACzB,MAAM,KAAK,GACP,OAAO,GAAG,KAAK,QAAQ;kBACjB,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,CAAC;kBAC9B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAE,CAAA;YAC1D,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAA;YAC1B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;SACnC;KACJ;IAED,kBAAkB,CAAC,KAAa;QAC5B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC1C;IAED,kBAAkB,CAAC,KAAa,EAAE,GAAW;QACzC,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,CAAA;KACpC;IAED,kBAAkB,CAAC,KAAa,EAAE,KAAa;QAC3C,IAAI,KAAK,KAAK,CAAC,EAAE;YACb,OAAM;SACT;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IACI,UAAU,CAAC,IAAI,KAAK,aAAa;YACjC,UAAU,CAAC,IAAI,KAAK,gBACxB,EAAE;YACE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QAC1C,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE;YACrD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;YACrB,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SACjC;aAAM;YACH,IAAI,CAAC,KAAK,GAAG;gBACT,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAE;gBACzC,GAAG,EAAE,KAAK;gBACV,GAAG,EAAE,EAAE;gBACP,YAAY,EAAE,EAAE;aACnB,CAAA;YACD,MAAM,QAAQ,GAAG,qBAAqB,CAClC,UAAU,CAAC,QAAQ,EACnB,IAAI,CAAC,KAAK,CACb,CAAA;YACD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAC1C,UAAU,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SACrC;KACJ;IAED,kBAAkB,CAAC,KAAa,EAAE,GAAW,EAAE,KAAa;QACxD,IAAI,KAAK,KAAK,CAAC,EAAE;YACb,OAAM;SACT;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACzD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAwB,CAAA;KACnD;IAED,YAAY,CAAC,KAAa;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QAED,IAAI,CAAC,KAAK,GAAG;YACT,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,EAAE;YACP,QAAQ,EAAE,EAAE;SACf,CAAA;QACD,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;KAChD;IAED,YAAY,CAAC,KAAa,EAAE,GAAW;QACnC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAwB,CAAA;KACnD;IAED,qBAAqB,CAAC,KAAa,EAAE,IAAmB;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QAED,IAAI,CAAC,KAAK,GAAG;YACT,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,EAAE;YACP,IAAI;YACJ,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,EAAE;SACjB,CAAA;QACD,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KACzC;IAED,qBAAqB,CACjB,KAAa,EACb,GAAW,EACX,IAAmB;QAEnB,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAwB,CAAA;KACnD;IAED,YAAY,CACR,KAAa,EACb,GAAW,EACX,GAAW,EACX,GAAW,EACX,MAAe;QAEf,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QAGD,MAAM,QAAQ,GACV,UAAU,CAAC,IAAI,KAAK,aAAa;cAC3B,IAAI,CAAC,UAAU,CAAC,YAAY,CAAE;cAC9B,UAAU,CAAC,QAAQ,CAAA;QAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,EAAG,CAAA;QAChC,MAAM,IAAI,GAAe;YACrB,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YAClC,GAAG;YACH,GAAG;YACH,MAAM;YACN,OAAO,EAAE,QAA+B;SAC3C,CAAA;QACD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAA;KACzB;IAED,0BAA0B,CACtB,KAAa,EACb,IAAgC,EAChC,MAAe;QAEf,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QAED,IAAI,CAAC,KAAK,GAAG;YACT,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,EAAE;YACP,IAAI;YACJ,MAAM;YACN,QAAQ,EAAE,EAAE;SACQ,CAAA;QACxB,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;KAChD;IAED,0BAA0B,CACtB,KAAa,EACb,GAAW,EACX,IAAgC,EAChC,MAAe;QAEf,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAwB,CAAA;KACnD;IAED,eAAe,CAAC,KAAa,EAAE,GAAW,EAAE,IAAqB;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QAED,qBAAqB,CAAC,UAAU,EAAE;YAC9B,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YAClC,IAAI;SACP,CAAC,CAAA;KACL;IAED,uBAAuB,CACnB,KAAa,EACb,GAAW,EACX,IAAY,EACZ,MAAe;QAEf,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QAED,qBAAqB,CAAC,UAAU,EAAE;YAC9B,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YAClC,IAAI;YACJ,MAAM;SACT,CAAC,CAAA;KACL;IAED,iBAAiB,CAAC,KAAa,EAAE,GAAW,EAAE,IAAW;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QAED,qBAAqB,CAAC,UAAU,EAAE;YAC9B,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YAClC,IAAI;SACP,CAAC,CAAA;KACL;IAED,oBAAoB,CAChB,KAAa,EACb,GAAW,EACX,IAAgC,EAChC,MAAe;QAEf,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE;YACzB,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,IAAI,CAAC,KAAK;YAClB,KAAK;YACL,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YAClC,IAAI;YACJ,MAAM;SACT,CAAC,CAAA;KACL;IAED,6BAA6B,CACzB,KAAa,EACb,GAAW,EACX,IAAgB,EAChB,GAAW,EACX,KAAoB,EACpB,MAAe;QAEf,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE;YACzB,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,IAAI,CAAC,KAAK;YAClB,KAAK;YACL,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YAClC,IAAI;YACJ,GAAG;YACH,KAAK;YACL,MAAM;SACT,CAAC,CAAA;KACL;IAED,WAAW,CAAC,KAAa,EAAE,GAAW,EAAE,KAAa;QACjD,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE;YACzB,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,IAAI,CAAC,KAAK;YAClB,KAAK;YACL,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YAClC,KAAK;SACR,CAAC,CAAA;KACL;IAED,eAAe,CAAC,KAAa,EAAE,GAAW,EAAE,GAAoB;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QAED,MAAM,IAAI,GAAkB;YACxB,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YAClC,GAAG;YACH,QAAQ,EAAE,mBAAmB;SAChC,CAAA;QACD,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QACvC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAClC;IAED,qBAAqB,CAAC,KAAa,EAAE,MAAe;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QAED,IAAI,CAAC,KAAK,GAAG;YACT,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,EAAE;YACP,MAAM;YACN,QAAQ,EAAE,EAAE;SACf,CAAA;QACD,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;KAChD;IAED,qBAAqB,CAAC,KAAa,EAAE,GAAW,EAAE,MAAe;QAC7D,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAwB,CAAA;KACnD;IAED,qBAAqB,CACjB,KAAa,EACb,GAAW,EACX,GAAW,EACX,GAAW;QAEX,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;SAClC;QAGD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;QACpC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAe,CAAA;QAC7C,QAAQ,CAAC,GAAG,EAAE,CAAA;QACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,EAAe,CAAA;QAC5C,MAAM,IAAI,GAAwB;YAC9B,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YAClC,GAAG,EAAE,QAAQ;YACb,GAAG,EAAE,SAAS;SACjB,CAAA;QACD,MAAM,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;QACzD,MAAM,CAAC,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;QAC3D,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAA;QACtB,SAAS,CAAC,MAAM,GAAG,IAAI,CAAA;QACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACtB;CACJ;AAsBD;IAQI,YAAY,OAA8B;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;KACrD;IASD,YAAY,CACR,MAAc,EACd,QAAgB,CAAC,EACjB,MAAc,MAAM,CAAC,MAAM;QAE3B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QAC3B,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;QAC/B,MAAM,OAAO,GAAkB;YAC3B,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,IAAI;YACZ,KAAK;YACL,GAAG;YACH,GAAG,EAAE,MAAM;YACX,OAAO;YACP,KAAK;SACR,CAAA;QACD,OAAO,CAAC,MAAM,GAAG,OAAO,CAAA;QACxB,KAAK,CAAC,MAAM,GAAG,OAAO,CAAA;QACtB,OAAO,OAAO,CAAA;KACjB;IASD,UAAU,CACN,MAAc,EACd,QAAgB,CAAC,EACjB,MAAc,MAAM,CAAC,MAAM;QAE3B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QAC3B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;KAC3B;IAUD,YAAY,CACR,MAAc,EACd,QAAgB,CAAC,EACjB,MAAc,MAAM,CAAC,MAAM,EAC3B,QAAiB,KAAK;QAEtB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QAC3B,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;KAC7B;CACJ;;4BC/lBG,MAAc,EACd,OAA8B;IAE9B,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;CACxD;AAOD,+BACI,MAAc,EACd,OAAiC;IAEjC,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;CAC9D;;;;"} \ No newline at end of file diff --git a/node_modules/regexpp/package.json b/node_modules/regexpp/package.json deleted file mode 100644 index edc6fef..0000000 --- a/node_modules/regexpp/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "name": "regexpp", - "version": "1.1.0", - "description": "Regular expression parser for ECMAScript 2018.", - "engines": { - "node": ">=4.0.0" - }, - "main": "index", - "files": [ - "index.*" - ], - "dependencies": {}, - "devDependencies": { - "@types/eslint": "^4.16.0", - "@types/mocha": "^2.2.48", - "@types/node": "^9.4.6", - "babel-core": "^6.26.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-parameters": "^6.24.1", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "dts-bundle": "^0.7.3", - "eslint": "^4.18.0", - "eslint-config-mysticatea": "^13.0.2", - "eslint-config-prettier": "^2.9.0", - "eslint-plugin-prettier": "^2.4.0", - "mocha": "^5.0.1", - "npm-run-all": "^4.1.2", - "prettier": "^1.9.2", - "rimraf": "^2.6.2", - "rollup": "^0.56.1", - "rollup-plugin-babel": "^3.0.3", - "rollup-plugin-node-resolve": "^3.0.3", - "rollup-plugin-sourcemaps": "^0.4.2", - "rollup-watch": "^4.3.1", - "ts-node": "^5.0.0", - "typescript": "^2.7.2", - "typescript-eslint-parser": "^14.0.0" - }, - "scripts": { - "prebuild": "npm run -s clean", - "build": "run-s build:*", - "build:tsc": "tsc --module es2015 --target es2015", - "build:mjs": "rollup -c rollup-mjs.config.js", - "build:js": "rollup -c rollup-js.config.js", - "build:dts": "dts-bundle --name regexpp --main .temp/index.d.ts --out ../index.d.ts", - "clean": "rimraf .temp index.*", - "lint": "eslint src test tools --ext .ts", - "pretest": "run-s build lint", - "test": "_mocha --require ts-node/register --reporter dot --timeout 10000 \"test/*.ts\"", - "update:test": "ts-node tools/update-fixtures.ts", - "update:ids": "ts-node tools/update-unicode-ids.ts", - "preversion": "npm test", - "version": "npm run -s build", - "postversion": "git push && git push --tags", - "prewatch": "npm run -s clean", - "watch": "npm run -s test -- --watch-extensions .ts --watch --growl" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/mysticatea/regexpp.git" - }, - "keywords": [ - "regexp", - "regular", - "expression", - "parser", - "validator", - "ast", - "abstract", - "syntax", - "tree", - "ecmascript", - "es2015", - "es2016", - "es2017", - "es2018", - "annexB" - ], - "author": "Toru Nagashima (https://github.com/mysticatea)", - "license": "MIT", - "bugs": { - "url": "https://github.com/mysticatea/regexpp/issues" - }, - "homepage": "https://github.com/mysticatea/regexpp#readme" -} diff --git a/node_modules/require-uncached/index.js b/node_modules/require-uncached/index.js deleted file mode 100644 index 63dfada..0000000 --- a/node_modules/require-uncached/index.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; -var path = require('path'); -var resolveFrom = require('resolve-from'); -var callerPath = require('caller-path'); - -module.exports = function (moduleId) { - if (typeof moduleId !== 'string') { - throw new TypeError('Expected a string'); - } - - var filePath = resolveFrom(path.dirname(callerPath()), moduleId); - - // delete itself from module parent - if (require.cache[filePath] && require.cache[filePath].parent) { - var i = require.cache[filePath].parent.children.length; - - while (i--) { - if (require.cache[filePath].parent.children[i].id === filePath) { - require.cache[filePath].parent.children.splice(i, 1); - } - } - } - - // delete module from cache - delete require.cache[filePath]; - - // return fresh module - return require(filePath); -}; diff --git a/node_modules/require-uncached/license b/node_modules/require-uncached/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/require-uncached/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/require-uncached/package.json b/node_modules/require-uncached/package.json deleted file mode 100644 index 1d1933a..0000000 --- a/node_modules/require-uncached/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "require-uncached", - "version": "1.0.3", - "description": "Require a module bypassing the cache", - "license": "MIT", - "repository": "sindresorhus/require-uncached", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "xo && ava", - "heapdump": "node heapdump.js" - }, - "files": [ - "index.js" - ], - "keywords": [ - "require", - "cache", - "uncache", - "uncached", - "module", - "fresh", - "bypass" - ], - "dependencies": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "devDependencies": { - "ava": "*", - "xo": "^0.16.0", - "heapdump": "^0.3.7" - }, - "xo": { - "rules": { - "import/no-dynamic-require": "off" - } - } -} diff --git a/node_modules/require-uncached/readme.md b/node_modules/require-uncached/readme.md deleted file mode 100644 index baa6cc2..0000000 --- a/node_modules/require-uncached/readme.md +++ /dev/null @@ -1,47 +0,0 @@ -# require-uncached [![Build Status](https://travis-ci.org/sindresorhus/require-uncached.svg?branch=master)](https://travis-ci.org/sindresorhus/require-uncached) - -> Require a module bypassing the [cache](https://nodejs.org/api/modules.html#modules_caching) - -Useful for testing purposes when you need to freshly require a module. - - -## Install - -``` -$ npm install --save require-uncached -``` - - -## Usage - -```js -// foo.js -let i = 0; -module.exports = () => ++i; -``` - -```js -const requireUncached = require('require-uncached'); - -require('./foo')(); -//=> 1 - -require('./foo')(); -//=> 2 - -requireUncached('./foo')(); -//=> 1 - -requireUncached('./foo')(); -//=> 1 -``` - - -## Related - -- [clear-require](https://github.com/sindresorhus/clear-require) - Clear a module from the require cache - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/resolve-from/index.js b/node_modules/resolve-from/index.js deleted file mode 100644 index 9162f4a..0000000 --- a/node_modules/resolve-from/index.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; -var path = require('path'); -var Module = require('module'); - -module.exports = function (fromDir, moduleId) { - if (typeof fromDir !== 'string' || typeof moduleId !== 'string') { - throw new TypeError('Expected `fromDir` and `moduleId` to be a string'); - } - - fromDir = path.resolve(fromDir); - - var fromFile = path.join(fromDir, 'noop.js'); - - return Module._resolveFilename(moduleId, { - id: fromFile, - filename: fromFile, - paths: Module._nodeModulePaths(fromDir) - }); -}; diff --git a/node_modules/resolve-from/license b/node_modules/resolve-from/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/resolve-from/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/resolve-from/package.json b/node_modules/resolve-from/package.json deleted file mode 100644 index 2bdfd14..0000000 --- a/node_modules/resolve-from/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "resolve-from", - "version": "1.0.1", - "description": "Resolve the path of a module like require.resolve() but from a given path", - "license": "MIT", - "repository": "sindresorhus/resolve-from", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "xo && ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "require", - "resolve", - "path", - "module", - "from", - "like", - "path" - ], - "devDependencies": { - "ava": "*", - "xo": "*" - } -} diff --git a/node_modules/resolve-from/readme.md b/node_modules/resolve-from/readme.md deleted file mode 100644 index 80a240c..0000000 --- a/node_modules/resolve-from/readme.md +++ /dev/null @@ -1,56 +0,0 @@ -# resolve-from [![Build Status](https://travis-ci.org/sindresorhus/resolve-from.svg?branch=master)](https://travis-ci.org/sindresorhus/resolve-from) - -> Resolve the path of a module like [`require.resolve()`](http://nodejs.org/api/globals.html#globals_require_resolve) but from a given path - - -## Install - -``` -$ npm install --save resolve-from -``` - - -## Usage - -```js -const resolveFrom = require('resolve-from'); - -// there's a file at `./foo/bar.js` - -resolveFrom('foo', './bar'); -//=> '/Users/sindresorhus/dev/test/foo/bar.js' -``` - - -## API - -### resolveFrom(fromDir, moduleId) - -#### fromDir - -Type: `string` - -The directory to resolve from. - -#### moduleId - -Type: `string` - -What you would use in `require()`. - - -## Tip - -Create a partial using a bound function if you want to require from the same `fromDir` multiple times: - -```js -const resolveFromFoo = resolveFrom.bind(null, 'foo'); - -resolveFromFoo('./bar'); -resolveFromFoo('./baz'); -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/restore-cursor/index.js b/node_modules/restore-cursor/index.js deleted file mode 100644 index 2b8e009..0000000 --- a/node_modules/restore-cursor/index.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; -const onetime = require('onetime'); -const signalExit = require('signal-exit'); - -module.exports = onetime(() => { - signalExit(() => { - process.stderr.write('\u001b[?25h'); - }, {alwaysLast: true}); -}); diff --git a/node_modules/restore-cursor/license b/node_modules/restore-cursor/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/restore-cursor/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/restore-cursor/package.json b/node_modules/restore-cursor/package.json deleted file mode 100644 index f121ed1..0000000 --- a/node_modules/restore-cursor/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "restore-cursor", - "version": "2.0.0", - "description": "Gracefully restore the CLI cursor on exit", - "license": "MIT", - "repository": "sindresorhus/restore-cursor", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "keywords": [ - "exit", - "quit", - "process", - "graceful", - "shutdown", - "sigterm", - "sigint", - "terminate", - "kill", - "stop", - "cli", - "cursor", - "ansi", - "show", - "term", - "terminal", - "console", - "tty", - "shell", - "command-line" - ], - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } -} diff --git a/node_modules/restore-cursor/readme.md b/node_modules/restore-cursor/readme.md deleted file mode 100644 index a2f5afb..0000000 --- a/node_modules/restore-cursor/readme.md +++ /dev/null @@ -1,25 +0,0 @@ -# restore-cursor - -> Gracefully restore the CLI cursor on exit - -Prevent the cursor you've hidden interactively from remaining hidden if the process crashes. - - -## Install - -``` -$ npm install --save restore-cursor -``` - - -## Usage - -```js -const restoreCursor = require('restore-cursor'); -restoreCursor(); -``` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/rimraf/LICENSE b/node_modules/rimraf/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/node_modules/rimraf/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/rimraf/README.md b/node_modules/rimraf/README.md deleted file mode 100644 index 423b8cf..0000000 --- a/node_modules/rimraf/README.md +++ /dev/null @@ -1,101 +0,0 @@ -[![Build Status](https://travis-ci.org/isaacs/rimraf.svg?branch=master)](https://travis-ci.org/isaacs/rimraf) [![Dependency Status](https://david-dm.org/isaacs/rimraf.svg)](https://david-dm.org/isaacs/rimraf) [![devDependency Status](https://david-dm.org/isaacs/rimraf/dev-status.svg)](https://david-dm.org/isaacs/rimraf#info=devDependencies) - -The [UNIX command](http://en.wikipedia.org/wiki/Rm_(Unix)) `rm -rf` for node. - -Install with `npm install rimraf`, or just drop rimraf.js somewhere. - -## API - -`rimraf(f, [opts], callback)` - -The first parameter will be interpreted as a globbing pattern for files. If you -want to disable globbing you can do so with `opts.disableGlob` (defaults to -`false`). This might be handy, for instance, if you have filenames that contain -globbing wildcard characters. - -The callback will be called with an error if there is one. Certain -errors are handled for you: - -* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of - `opts.maxBusyTries` times before giving up, adding 100ms of wait - between each attempt. The default `maxBusyTries` is 3. -* `ENOENT` - If the file doesn't exist, rimraf will return - successfully, since your desired outcome is already the case. -* `EMFILE` - Since `readdir` requires opening a file descriptor, it's - possible to hit `EMFILE` if too many file descriptors are in use. - In the sync case, there's nothing to be done for this. But in the - async case, rimraf will gradually back off with timeouts up to - `opts.emfileWait` ms, which defaults to 1000. - -## options - -* unlink, chmod, stat, lstat, rmdir, readdir, - unlinkSync, chmodSync, statSync, lstatSync, rmdirSync, readdirSync - - In order to use a custom file system library, you can override - specific fs functions on the options object. - - If any of these functions are present on the options object, then - the supplied function will be used instead of the default fs - method. - - Sync methods are only relevant for `rimraf.sync()`, of course. - - For example: - - ```javascript - var myCustomFS = require('some-custom-fs') - - rimraf('some-thing', myCustomFS, callback) - ``` - -* maxBusyTries - - If an `EBUSY`, `ENOTEMPTY`, or `EPERM` error code is encountered - on Windows systems, then rimraf will retry with a linear backoff - wait of 100ms longer on each try. The default maxBusyTries is 3. - - Only relevant for async usage. - -* emfileWait - - If an `EMFILE` error is encountered, then rimraf will retry - repeatedly with a linear backoff of 1ms longer on each try, until - the timeout counter hits this max. The default limit is 1000. - - If you repeatedly encounter `EMFILE` errors, then consider using - [graceful-fs](http://npm.im/graceful-fs) in your program. - - Only relevant for async usage. - -* glob - - Set to `false` to disable [glob](http://npm.im/glob) pattern - matching. - - Set to an object to pass options to the glob module. The default - glob options are `{ nosort: true, silent: true }`. - - Glob version 6 is used in this module. - - Relevant for both sync and async usage. - -* disableGlob - - Set to any non-falsey value to disable globbing entirely. - (Equivalent to setting `glob: false`.) - -## rimraf.sync - -It can remove stuff synchronously, too. But that's not so good. Use -the async API. It's better. - -## CLI - -If installed with `npm install rimraf -g` it can be used as a global -command `rimraf [ ...]` which is useful for cross platform support. - -## mkdirp - -If you need to create a directory recursively, check out -[mkdirp](https://github.com/substack/node-mkdirp). diff --git a/node_modules/rimraf/bin.js b/node_modules/rimraf/bin.js deleted file mode 100755 index 0d1e17b..0000000 --- a/node_modules/rimraf/bin.js +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env node - -var rimraf = require('./') - -var help = false -var dashdash = false -var noglob = false -var args = process.argv.slice(2).filter(function(arg) { - if (dashdash) - return !!arg - else if (arg === '--') - dashdash = true - else if (arg === '--no-glob' || arg === '-G') - noglob = true - else if (arg === '--glob' || arg === '-g') - noglob = false - else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/)) - help = true - else - return !!arg -}) - -if (help || args.length === 0) { - // If they didn't ask for help, then this is not a "success" - var log = help ? console.log : console.error - log('Usage: rimraf [ ...]') - log('') - log(' Deletes all files and folders at "path" recursively.') - log('') - log('Options:') - log('') - log(' -h, --help Display this usage info') - log(' -G, --no-glob Do not expand glob patterns in arguments') - log(' -g, --glob Expand glob patterns in arguments (default)') - process.exit(help ? 0 : 1) -} else - go(0) - -function go (n) { - if (n >= args.length) - return - var options = {} - if (noglob) - options = { glob: false } - rimraf(args[n], options, function (er) { - if (er) - throw er - go(n+1) - }) -} diff --git a/node_modules/rimraf/package.json b/node_modules/rimraf/package.json deleted file mode 100644 index 783fae9..0000000 --- a/node_modules/rimraf/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "rimraf", - "version": "2.6.3", - "main": "rimraf.js", - "description": "A deep deletion module for node (like `rm -rf`)", - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC", - "repository": "git://github.com/isaacs/rimraf.git", - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "postpublish": "git push origin --all; git push origin --tags", - "test": "tap test/*.js" - }, - "bin": "./bin.js", - "dependencies": { - "glob": "^7.1.3" - }, - "files": [ - "LICENSE", - "README.md", - "bin.js", - "rimraf.js" - ], - "devDependencies": { - "mkdirp": "^0.5.1", - "tap": "^12.1.1" - } -} diff --git a/node_modules/rimraf/rimraf.js b/node_modules/rimraf/rimraf.js deleted file mode 100644 index e80dd10..0000000 --- a/node_modules/rimraf/rimraf.js +++ /dev/null @@ -1,364 +0,0 @@ -module.exports = rimraf -rimraf.sync = rimrafSync - -var assert = require("assert") -var path = require("path") -var fs = require("fs") -var glob = require("glob") -var _0666 = parseInt('666', 8) - -var defaultGlobOpts = { - nosort: true, - silent: true -} - -// for EMFILE handling -var timeout = 0 - -var isWindows = (process.platform === "win32") - -function defaults (options) { - var methods = [ - 'unlink', - 'chmod', - 'stat', - 'lstat', - 'rmdir', - 'readdir' - ] - methods.forEach(function(m) { - options[m] = options[m] || fs[m] - m = m + 'Sync' - options[m] = options[m] || fs[m] - }) - - options.maxBusyTries = options.maxBusyTries || 3 - options.emfileWait = options.emfileWait || 1000 - if (options.glob === false) { - options.disableGlob = true - } - options.disableGlob = options.disableGlob || false - options.glob = options.glob || defaultGlobOpts -} - -function rimraf (p, options, cb) { - if (typeof options === 'function') { - cb = options - options = {} - } - - assert(p, 'rimraf: missing path') - assert.equal(typeof p, 'string', 'rimraf: path should be a string') - assert.equal(typeof cb, 'function', 'rimraf: callback function required') - assert(options, 'rimraf: invalid options argument provided') - assert.equal(typeof options, 'object', 'rimraf: options should be object') - - defaults(options) - - var busyTries = 0 - var errState = null - var n = 0 - - if (options.disableGlob || !glob.hasMagic(p)) - return afterGlob(null, [p]) - - options.lstat(p, function (er, stat) { - if (!er) - return afterGlob(null, [p]) - - glob(p, options.glob, afterGlob) - }) - - function next (er) { - errState = errState || er - if (--n === 0) - cb(errState) - } - - function afterGlob (er, results) { - if (er) - return cb(er) - - n = results.length - if (n === 0) - return cb() - - results.forEach(function (p) { - rimraf_(p, options, function CB (er) { - if (er) { - if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") && - busyTries < options.maxBusyTries) { - busyTries ++ - var time = busyTries * 100 - // try again, with the same exact callback as this one. - return setTimeout(function () { - rimraf_(p, options, CB) - }, time) - } - - // this one won't happen if graceful-fs is used. - if (er.code === "EMFILE" && timeout < options.emfileWait) { - return setTimeout(function () { - rimraf_(p, options, CB) - }, timeout ++) - } - - // already gone - if (er.code === "ENOENT") er = null - } - - timeout = 0 - next(er) - }) - }) - } -} - -// Two possible strategies. -// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR -// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR -// -// Both result in an extra syscall when you guess wrong. However, there -// are likely far more normal files in the world than directories. This -// is based on the assumption that a the average number of files per -// directory is >= 1. -// -// If anyone ever complains about this, then I guess the strategy could -// be made configurable somehow. But until then, YAGNI. -function rimraf_ (p, options, cb) { - assert(p) - assert(options) - assert(typeof cb === 'function') - - // sunos lets the root user unlink directories, which is... weird. - // so we have to lstat here and make sure it's not a dir. - options.lstat(p, function (er, st) { - if (er && er.code === "ENOENT") - return cb(null) - - // Windows can EPERM on stat. Life is suffering. - if (er && er.code === "EPERM" && isWindows) - fixWinEPERM(p, options, er, cb) - - if (st && st.isDirectory()) - return rmdir(p, options, er, cb) - - options.unlink(p, function (er) { - if (er) { - if (er.code === "ENOENT") - return cb(null) - if (er.code === "EPERM") - return (isWindows) - ? fixWinEPERM(p, options, er, cb) - : rmdir(p, options, er, cb) - if (er.code === "EISDIR") - return rmdir(p, options, er, cb) - } - return cb(er) - }) - }) -} - -function fixWinEPERM (p, options, er, cb) { - assert(p) - assert(options) - assert(typeof cb === 'function') - if (er) - assert(er instanceof Error) - - options.chmod(p, _0666, function (er2) { - if (er2) - cb(er2.code === "ENOENT" ? null : er) - else - options.stat(p, function(er3, stats) { - if (er3) - cb(er3.code === "ENOENT" ? null : er) - else if (stats.isDirectory()) - rmdir(p, options, er, cb) - else - options.unlink(p, cb) - }) - }) -} - -function fixWinEPERMSync (p, options, er) { - assert(p) - assert(options) - if (er) - assert(er instanceof Error) - - try { - options.chmodSync(p, _0666) - } catch (er2) { - if (er2.code === "ENOENT") - return - else - throw er - } - - try { - var stats = options.statSync(p) - } catch (er3) { - if (er3.code === "ENOENT") - return - else - throw er - } - - if (stats.isDirectory()) - rmdirSync(p, options, er) - else - options.unlinkSync(p) -} - -function rmdir (p, options, originalEr, cb) { - assert(p) - assert(options) - if (originalEr) - assert(originalEr instanceof Error) - assert(typeof cb === 'function') - - // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS) - // if we guessed wrong, and it's not a directory, then - // raise the original error. - options.rmdir(p, function (er) { - if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")) - rmkids(p, options, cb) - else if (er && er.code === "ENOTDIR") - cb(originalEr) - else - cb(er) - }) -} - -function rmkids(p, options, cb) { - assert(p) - assert(options) - assert(typeof cb === 'function') - - options.readdir(p, function (er, files) { - if (er) - return cb(er) - var n = files.length - if (n === 0) - return options.rmdir(p, cb) - var errState - files.forEach(function (f) { - rimraf(path.join(p, f), options, function (er) { - if (errState) - return - if (er) - return cb(errState = er) - if (--n === 0) - options.rmdir(p, cb) - }) - }) - }) -} - -// this looks simpler, and is strictly *faster*, but will -// tie up the JavaScript thread and fail on excessively -// deep directory trees. -function rimrafSync (p, options) { - options = options || {} - defaults(options) - - assert(p, 'rimraf: missing path') - assert.equal(typeof p, 'string', 'rimraf: path should be a string') - assert(options, 'rimraf: missing options') - assert.equal(typeof options, 'object', 'rimraf: options should be object') - - var results - - if (options.disableGlob || !glob.hasMagic(p)) { - results = [p] - } else { - try { - options.lstatSync(p) - results = [p] - } catch (er) { - results = glob.sync(p, options.glob) - } - } - - if (!results.length) - return - - for (var i = 0; i < results.length; i++) { - var p = results[i] - - try { - var st = options.lstatSync(p) - } catch (er) { - if (er.code === "ENOENT") - return - - // Windows can EPERM on stat. Life is suffering. - if (er.code === "EPERM" && isWindows) - fixWinEPERMSync(p, options, er) - } - - try { - // sunos lets the root user unlink directories, which is... weird. - if (st && st.isDirectory()) - rmdirSync(p, options, null) - else - options.unlinkSync(p) - } catch (er) { - if (er.code === "ENOENT") - return - if (er.code === "EPERM") - return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er) - if (er.code !== "EISDIR") - throw er - - rmdirSync(p, options, er) - } - } -} - -function rmdirSync (p, options, originalEr) { - assert(p) - assert(options) - if (originalEr) - assert(originalEr instanceof Error) - - try { - options.rmdirSync(p) - } catch (er) { - if (er.code === "ENOENT") - return - if (er.code === "ENOTDIR") - throw originalEr - if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM") - rmkidsSync(p, options) - } -} - -function rmkidsSync (p, options) { - assert(p) - assert(options) - options.readdirSync(p).forEach(function (f) { - rimrafSync(path.join(p, f), options) - }) - - // We only end up here once we got ENOTEMPTY at least once, and - // at this point, we are guaranteed to have removed all the kids. - // So, we know that it won't be ENOENT or ENOTDIR or anything else. - // try really hard to delete stuff on windows, because it has a - // PROFOUNDLY annoying habit of not closing handles promptly when - // files are deleted, resulting in spurious ENOTEMPTY errors. - var retries = isWindows ? 100 : 1 - var i = 0 - do { - var threw = true - try { - var ret = options.rmdirSync(p, options) - threw = false - return ret - } finally { - if (++i < retries && threw) - continue - } - } while (true) -} diff --git a/node_modules/run-async/LICENSE b/node_modules/run-async/LICENSE deleted file mode 100644 index e895e99..0000000 --- a/node_modules/run-async/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Simon Boudrias - -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. diff --git a/node_modules/run-async/README.md b/node_modules/run-async/README.md deleted file mode 100644 index 8eb62c2..0000000 --- a/node_modules/run-async/README.md +++ /dev/null @@ -1,79 +0,0 @@ -Run Async -========= - -[![npm](https://badge.fury.io/js/run-async.svg)](http://badge.fury.io/js/run-async) [![tests](https://travis-ci.org/SBoudrias/run-async.svg?branch=master)](http://travis-ci.org/SBoudrias/run-async) [![dependencies](https://david-dm.org/SBoudrias/run-async.svg?theme=shields.io)](https://david-dm.org/SBoudrias/run-async) - -Utility method to run a function either synchronously or asynchronously using a series of common patterns. This is useful for library author accepting sync or async functions as parameter. `runAsync` will always run them as an async method, and normalize the multiple signature. - -Installation -========= - -```bash -npm install --save run-async -``` - -Usage -========= - -Here's a simple example print the function results and three options a user can provide a function. - -```js -var runAsync = require('run-async'); - -var printAfter = function (func) { - var cb = function (err, returnValue) { - console.log(returnValue); - }; - runAsync(func, cb)(/* arguments for func */); -}; -``` - -#### Using `this.async` -```js -printAfter(function () { - var done = this.async(); - - setTimeout(function () { - done(null, 'done running with callback'); - }, 10); -}); -``` - -#### Returning a promise -```js -printAfter(function () { - return new Promise(function (resolve, reject) { - resolve('done running with promises'); - }); -}); -``` - -#### Synchronous function -```js -printAfter(function () { - return 'done running sync function'; -}); -``` - -### runAsync.cb - -`runAsync.cb` supports all the function types that `runAsync` does and additionally a traditional **callback as the last argument** signature: - -```js -var runAsync = require('run-async'); - -// IMPORTANT: The wrapped function must have a fixed number of parameters. -runAsync.cb(function(a, b, cb) { - cb(null, a + b); -}, function(err, result) { - console.log(result) -})(1, 2) -``` - -If your version of node support Promises natively (node >= 0.12), `runAsync` will return a promise. Example: `runAsync(func)(arg1, arg2).then(cb)` - -Licence -======== - -Copyright (c) 2014 Simon Boudrias (twitter: @vaxilart) -Licensed under the MIT license. diff --git a/node_modules/run-async/index.js b/node_modules/run-async/index.js deleted file mode 100644 index c7a2e65..0000000 --- a/node_modules/run-async/index.js +++ /dev/null @@ -1,98 +0,0 @@ -'use strict'; - -function isPromise(obj) { - return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'; -} - -/** - * Return a function that will run a function asynchronously or synchronously - * - * example: - * runAsync(wrappedFunction, callback)(...args); - * - * @param {Function} func Function to run - * @param {Function} cb Callback function passed the `func` returned value - * @return {Function(arguments)} Arguments to pass to `func`. This function will in turn - * return a Promise (Node >= 0.12) or call the callbacks. - */ - -var runAsync = module.exports = function (func, cb) { - cb = cb || function () {}; - - return function () { - - var args = arguments; - - var promise = new Promise(function (resolve, reject) { - var resolved = false; - const wrappedResolve = function (value) { - if (resolved) { - console.warn('Run-async promise already resolved.') - } - resolved = true; - resolve(value); - } - - var rejected = false; - const wrappedReject = function (value) { - if (rejected) { - console.warn('Run-async promise already rejected.') - } - rejected = true; - reject(value); - } - - var usingCallback = false; - var callbackConflict = false; - var contextEnded = false; - - var answer = func.apply({ - async: function () { - if (contextEnded) { - console.warn('Run-async async() called outside a valid run-async context, callback will be ignored.'); - return function() {}; - } - if (callbackConflict) { - console.warn('Run-async wrapped function (async) returned a promise.\nCalls to async() callback can have unexpected results.'); - } - usingCallback = true; - return function (err, value) { - if (err) { - wrappedReject(err); - } else { - wrappedResolve(value); - } - }; - } - }, Array.prototype.slice.call(args)); - - if (usingCallback) { - if (isPromise(answer)) { - console.warn('Run-async wrapped function (sync) returned a promise but async() callback must be executed to resolve.'); - } - } else { - if (isPromise(answer)) { - callbackConflict = true; - answer.then(wrappedResolve, wrappedReject); - } else { - wrappedResolve(answer); - } - } - contextEnded = true; - }); - - promise.then(cb.bind(null, null), cb); - - return promise; - } -}; - -runAsync.cb = function (func, cb) { - return runAsync(function () { - var args = Array.prototype.slice.call(arguments); - if (args.length === func.length - 1) { - args.push(this.async()); - } - return func.apply(this, args); - }, cb); -}; diff --git a/node_modules/run-async/package.json b/node_modules/run-async/package.json deleted file mode 100644 index b923265..0000000 --- a/node_modules/run-async/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "run-async", - "version": "2.4.1", - "description": "Utility method to run function either synchronously or asynchronously using the common `this.async()` style.", - "main": "index.js", - "scripts": { - "test": "mocha -R spec" - }, - "engines": { - "node": ">=0.12.0" - }, - "repository": "SBoudrias/run-async", - "keywords": [ - "flow", - "flow-control", - "async" - ], - "files": [ - "index.js" - ], - "author": "Simon Boudrias ", - "license": "MIT", - "dependencies": {}, - "devDependencies": { - "mocha": "^7.1.0" - } -} diff --git a/node_modules/rx-lite-aggregates/package.json b/node_modules/rx-lite-aggregates/package.json deleted file mode 100644 index 0b77a42..0000000 --- a/node_modules/rx-lite-aggregates/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "rx-lite-aggregates", - "title": "Reactive Extensions for JavaScript (RxJS) Aggregates", - "description": "Lightweight library with aggregate functions for composing asynchronous and event-based operations in JavaScript", - "version": "4.0.8", - "homepage": "https://github.com/Reactive-Extensions/RxJS", - "author": { - "name": "Cloud Programmability Team", - "url": "https://github.com/Reactive-Extensions/RxJS/blob/master/authors.txt" - }, - "repository": { - "type": "git", - "url": "https://github.com/Reactive-Extensions/RxJS.git" - }, - "licenses": [ - { - "type": "Apache License, Version 2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0.html" - } - ], - "bugs": "https://github.com/Reactive-Extensions/RxJS/issues", - "jam": { - "main": "rx.lite.aggregates.js" - }, - "browser": { - "index.js": "rx.lite.aggregates.js" - }, - "dependencies": { - "rx-lite": "*" - }, - "devDependencies": {}, - "keywords": [ - "React", - "Reactive", - "Events", - "Rx", - "RxJS" - ], - "main": "rx.lite.aggregates.js" -} diff --git a/node_modules/rx-lite-aggregates/readme.md b/node_modules/rx-lite-aggregates/readme.md deleted file mode 100644 index ed55c92..0000000 --- a/node_modules/rx-lite-aggregates/readme.md +++ /dev/null @@ -1,85 +0,0 @@ -# RxJS Aggregates Module # - -The Reactive Extensions for JavaScript has a number of aggregation operators including those you might already know from the Array#extras and the upcoming ES6 standard such as `reduce`, `find` and `findIndex`. This module is used exclusively for aggregation operations used on finite observable sequences. In addition to the aforementioned operators, there are many useful operators such as `count`, `sum`, `average` and determining whether two sequences are equal via the `sequenceEqual` method. This requires `rx.lite.js` from the [`rx-lite`](https://www.npmjs.com/package/rx-lite) NPM module. - -## Getting Started - -There are a number of ways to get started with RxJS. - -### Installing with [NPM](https://npmjs.org/) - -```bash` -$ npm install rx-lite-aggregates -$ npm install -g rx-lite-aggregates -``` - -### Using with Node.js and Ringo.js - -```js -var Rx = require('rx-lite-aggregates'); -``` - -### In a Browser: - -```html - - - -``` - -## Included Observable Operators ## - -### `Observable Instance Methods` -- [`aggregate`](../../doc/api/core/operators/reduce.md) -- [`all`](../../doc/api/core/operators/every.md) -- [`any`](../../doc/api/core/operators/some.md) -- [`average`](../../doc/api/core/operators/average.md) -- [`includes`](../../doc/api/core/operators/includes.md) -- [`count`](../../doc/api/core/operators/count.md) -- [`elementAt`](../../doc/api/core/operators/elementat.md) -- [`elementAtOrDefault`](../../doc/api/core/operators/elementatordefault.md) -- [`every`](../../doc/api/core/operators/every.md) -- [`find`](../../doc/api/core/operators/find.md) -- [`findIndex`](../../doc/api/core/operators/findindex.md) -- [`first`](../../doc/api/core/operators/first.md) -- [`firstOrDefault`](../../doc/api/core/operators/firstordefault.md) -- [`indexOf`](../../doc/api/core/operators/indexof.md) -- [`isEmpty`](../../doc/api/core/operators/isempty.md) -- [`last`](../../doc/api/core/operators/last.md) -- [`lastOrDefault`](../../doc/api/core/operators/lastordefault.md) -- [`max`](../../doc/api/core/operators/max.md) -- [`maxBy`](../../doc/api/core/operators/maxby.md) -- [`min`](../../doc/api/core/operators/min.md) -- [`minBy`](../../doc/api/core/operators/minby.md) -- [`reduce`](../../doc/api/core/operators/reduce.md) -- [`sequenceEqual`](../../doc/api/core/operators/sequenceequal.md) -- [`single`](../../doc/api/core/operators/single.md) -- [`singleOrDefault`](../../doc/api/core/operators/singleordefault.md) -- [`some`](../../doc/api/core/operators/some.md) -- [`sum`](../../doc/api/core/operators/sum.md) -- [`toMap`](../../doc/api/core/operators/tomap.md) -- [`toSet`](../../doc/api/core/operators/toset.md) - -## Contributing ## - -There are lots of ways to contribute to the project, and we appreciate our [contributors](https://github.com/Reactive-Extensions/RxJS/wiki/Contributors). If you wish to contribute, check out our [style guide]((https://github.com/Reactive-Extensions/RxJS/tree/master/doc/contributing)). - -You can contribute by reviewing and sending feedback on code checkins, suggesting and trying out new features as they are implemented, submit bugs and help us verify fixes as they are checked in, as well as submit code fixes or code contributions of your own. Note that all code submissions will be rigorously reviewed and tested by the Rx Team, and only those that meet an extremely high bar for both quality and design/roadmap appropriateness will be merged into the source. - -## License ## - -Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. -Microsoft Open Technologies would like to thank its contributors, a list -of whom are at https://github.com/Reactive-Extensions/RxJS/wiki/Contributors. - -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. diff --git a/node_modules/rx-lite-aggregates/rx.lite.aggregates.js b/node_modules/rx-lite-aggregates/rx.lite.aggregates.js deleted file mode 100644 index 7deba22..0000000 --- a/node_modules/rx-lite-aggregates/rx.lite.aggregates.js +++ /dev/null @@ -1,1365 +0,0 @@ -// Copyright (c) Microsoft, All rights reserved. See License.txt in the project root for license information. - -;(function (factory) { - var objectTypes = { - 'function': true, - 'object': true - }; - - function checkGlobal(value) { - return (value && value.Object === Object) ? value : null; - } - - var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null; - var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null; - var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global); - var freeSelf = checkGlobal(objectTypes[typeof self] && self); - var freeWindow = checkGlobal(objectTypes[typeof window] && window); - var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null; - var thisGlobal = checkGlobal(objectTypes[typeof this] && this); - var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')(); - - // Because of build optimizers - if (typeof define === 'function' && define.amd) { - define(['./rx.lite'], function (Rx, exports) { - return factory(root, exports, Rx); - }); - } else if (typeof module === 'object' && module && module.exports === freeExports) { - module.exports = factory(root, module.exports, require('rx-lite')); - } else { - root.Rx = factory(root, {}, root.Rx); - } -}.call(this, function (root, exp, Rx, undefined) { - - // References - var Observable = Rx.Observable, - observableProto = Observable.prototype, - BinaryDisposable = Rx.BinaryDisposable, - AnonymousObservable = Rx.AnonymousObservable, - AbstractObserver = Rx.internals.AbstractObserver, - disposableEmpty = Rx.Disposable.empty, - helpers = Rx.helpers, - defaultComparer = helpers.defaultComparer, - identity = helpers.identity, - defaultSubComparer = helpers.defaultSubComparer, - isFunction = helpers.isFunction, - isPromise = helpers.isPromise, - isArrayLike = helpers.isArrayLike, - isIterable = helpers.isIterable, - inherits = Rx.internals.inherits, - observableFromPromise = Observable.fromPromise, - observableFrom = Observable.from, - bindCallback = Rx.internals.bindCallback, - EmptyError = Rx.EmptyError, - ObservableBase = Rx.ObservableBase, - ArgumentOutOfRangeError = Rx.ArgumentOutOfRangeError; - - var errorObj = {e: {}}; - - function tryCatcherGen(tryCatchTarget) { - return function tryCatcher() { - try { - return tryCatchTarget.apply(this, arguments); - } catch (e) { - errorObj.e = e; - return errorObj; - } - }; - } - - var tryCatch = Rx.internals.tryCatch = function tryCatch(fn) { - if (!isFunction(fn)) { throw new TypeError('fn must be a function'); } - return tryCatcherGen(fn); - }; - - function thrower(e) { - throw e; - } - - var ExtremaByObservable = (function (__super__) { - inherits(ExtremaByObservable, __super__); - function ExtremaByObservable(source, k, c) { - this.source = source; - this._k = k; - this._c = c; - __super__.call(this); - } - - ExtremaByObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new ExtremaByObserver(o, this._k, this._c)); - }; - - return ExtremaByObservable; - }(ObservableBase)); - - var ExtremaByObserver = (function (__super__) { - inherits(ExtremaByObserver, __super__); - function ExtremaByObserver(o, k, c) { - this._o = o; - this._k = k; - this._c = c; - this._v = null; - this._hv = false; - this._l = []; - __super__.call(this); - } - - ExtremaByObserver.prototype.next = function (x) { - var key = tryCatch(this._k)(x); - if (key === errorObj) { return this._o.onError(key.e); } - var comparison = 0; - if (!this._hv) { - this._hv = true; - this._v = key; - } else { - comparison = tryCatch(this._c)(key, this._v); - if (comparison === errorObj) { return this._o.onError(comparison.e); } - } - if (comparison > 0) { - this._v = key; - this._l = []; - } - if (comparison >= 0) { this._l.push(x); } - }; - - ExtremaByObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - ExtremaByObserver.prototype.completed = function () { - this._o.onNext(this._l); - this._o.onCompleted(); - }; - - return ExtremaByObserver; - }(AbstractObserver)); - - function firstOnly(x) { - if (x.length === 0) { throw new EmptyError(); } - return x[0]; - } - - var ReduceObservable = (function(__super__) { - inherits(ReduceObservable, __super__); - function ReduceObservable(source, accumulator, hasSeed, seed) { - this.source = source; - this.accumulator = accumulator; - this.hasSeed = hasSeed; - this.seed = seed; - __super__.call(this); - } - - ReduceObservable.prototype.subscribeCore = function(observer) { - return this.source.subscribe(new ReduceObserver(observer,this)); - }; - - return ReduceObservable; - }(ObservableBase)); - - var ReduceObserver = (function (__super__) { - inherits(ReduceObserver, __super__); - function ReduceObserver(o, parent) { - this._o = o; - this._p = parent; - this._fn = parent.accumulator; - this._hs = parent.hasSeed; - this._s = parent.seed; - this._ha = false; - this._a = null; - this._hv = false; - this._i = 0; - __super__.call(this); - } - - ReduceObserver.prototype.next = function (x) { - !this._hv && (this._hv = true); - if (this._ha) { - this._a = tryCatch(this._fn)(this._a, x, this._i, this._p); - } else { - this._a = this._hs ? tryCatch(this._fn)(this._s, x, this._i, this._p) : x; - this._ha = true; - } - if (this._a === errorObj) { return this._o.onError(this._a.e); } - this._i++; - }; - - ReduceObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - ReduceObserver.prototype.completed = function () { - this._hv && this._o.onNext(this._a); - !this._hv && this._hs && this._o.onNext(this._s); - !this._hv && !this._hs && this._o.onError(new EmptyError()); - this._o.onCompleted(); - }; - - return ReduceObserver; - }(AbstractObserver)); - - /** - * Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified seed value is used as the initial accumulator value. - * For aggregation behavior with incremental intermediate results, see Observable.scan. - * @param {Function} accumulator An accumulator function to be invoked on each element. - * @param {Any} [seed] The initial accumulator value. - * @returns {Observable} An observable sequence containing a single element with the final accumulator value. - */ - observableProto.reduce = function () { - var hasSeed = false, seed, accumulator = arguments[0]; - if (arguments.length === 2) { - hasSeed = true; - seed = arguments[1]; - } - return new ReduceObservable(this, accumulator, hasSeed, seed); - }; - - var SomeObservable = (function (__super__) { - inherits(SomeObservable, __super__); - function SomeObservable(source, fn) { - this.source = source; - this._fn = fn; - __super__.call(this); - } - - SomeObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new SomeObserver(o, this._fn, this.source)); - }; - - return SomeObservable; - }(ObservableBase)); - - var SomeObserver = (function (__super__) { - inherits(SomeObserver, __super__); - - function SomeObserver(o, fn, s) { - this._o = o; - this._fn = fn; - this._s = s; - this._i = 0; - __super__.call(this); - } - - SomeObserver.prototype.next = function (x) { - var result = tryCatch(this._fn)(x, this._i++, this._s); - if (result === errorObj) { return this._o.onError(result.e); } - if (Boolean(result)) { - this._o.onNext(true); - this._o.onCompleted(); - } - }; - SomeObserver.prototype.error = function (e) { this._o.onError(e); }; - SomeObserver.prototype.completed = function () { - this._o.onNext(false); - this._o.onCompleted(); - }; - - return SomeObserver; - }(AbstractObserver)); - - /** - * Determines whether any element of an observable sequence satisfies a condition if present, else if any items are in the sequence. - * @param {Function} [predicate] A function to test each element for a condition. - * @returns {Observable} An observable sequence containing a single element determining whether any elements in the source sequence pass the test in the specified predicate if given, else if any items are in the sequence. - */ - observableProto.some = function (predicate, thisArg) { - var fn = bindCallback(predicate, thisArg, 3); - return new SomeObservable(this, fn); - }; - - var IsEmptyObservable = (function (__super__) { - inherits(IsEmptyObservable, __super__); - function IsEmptyObservable(source) { - this.source = source; - __super__.call(this); - } - - IsEmptyObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new IsEmptyObserver(o)); - }; - - return IsEmptyObservable; - }(ObservableBase)); - - var IsEmptyObserver = (function(__super__) { - inherits(IsEmptyObserver, __super__); - function IsEmptyObserver(o) { - this._o = o; - __super__.call(this); - } - - IsEmptyObserver.prototype.next = function () { - this._o.onNext(false); - this._o.onCompleted(); - }; - IsEmptyObserver.prototype.error = function (e) { this._o.onError(e); }; - IsEmptyObserver.prototype.completed = function () { - this._o.onNext(true); - this._o.onCompleted(); - }; - - return IsEmptyObserver; - }(AbstractObserver)); - - /** - * Determines whether an observable sequence is empty. - * @returns {Observable} An observable sequence containing a single element determining whether the source sequence is empty. - */ - observableProto.isEmpty = function () { - return new IsEmptyObservable(this); - }; - - var EveryObservable = (function (__super__) { - inherits(EveryObservable, __super__); - function EveryObservable(source, fn) { - this.source = source; - this._fn = fn; - __super__.call(this); - } - - EveryObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new EveryObserver(o, this._fn, this.source)); - }; - - return EveryObservable; - }(ObservableBase)); - - var EveryObserver = (function (__super__) { - inherits(EveryObserver, __super__); - - function EveryObserver(o, fn, s) { - this._o = o; - this._fn = fn; - this._s = s; - this._i = 0; - __super__.call(this); - } - - EveryObserver.prototype.next = function (x) { - var result = tryCatch(this._fn)(x, this._i++, this._s); - if (result === errorObj) { return this._o.onError(result.e); } - if (!Boolean(result)) { - this._o.onNext(false); - this._o.onCompleted(); - } - }; - EveryObserver.prototype.error = function (e) { this._o.onError(e); }; - EveryObserver.prototype.completed = function () { - this._o.onNext(true); - this._o.onCompleted(); - }; - - return EveryObserver; - }(AbstractObserver)); - - /** - * Determines whether all elements of an observable sequence satisfy a condition. - * @param {Function} [predicate] A function to test each element for a condition. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Observable} An observable sequence containing a single element determining whether all elements in the source sequence pass the test in the specified predicate. - */ - observableProto.every = function (predicate, thisArg) { - var fn = bindCallback(predicate, thisArg, 3); - return new EveryObservable(this, fn); - }; - - var IncludesObservable = (function (__super__) { - inherits(IncludesObservable, __super__); - function IncludesObservable(source, elem, idx) { - var n = +idx || 0; - Math.abs(n) === Infinity && (n = 0); - - this.source = source; - this._elem = elem; - this._n = n; - __super__.call(this); - } - - IncludesObservable.prototype.subscribeCore = function (o) { - if (this._n < 0) { - o.onNext(false); - o.onCompleted(); - return disposableEmpty; - } - - return this.source.subscribe(new IncludesObserver(o, this._elem, this._n)); - }; - - return IncludesObservable; - }(ObservableBase)); - - var IncludesObserver = (function (__super__) { - inherits(IncludesObserver, __super__); - function IncludesObserver(o, elem, n) { - this._o = o; - this._elem = elem; - this._n = n; - this._i = 0; - __super__.call(this); - } - - function comparer(a, b) { - return (a === 0 && b === 0) || (a === b || (isNaN(a) && isNaN(b))); - } - - IncludesObserver.prototype.next = function (x) { - if (this._i++ >= this._n && comparer(x, this._elem)) { - this._o.onNext(true); - this._o.onCompleted(); - } - }; - IncludesObserver.prototype.error = function (e) { this._o.onError(e); }; - IncludesObserver.prototype.completed = function () { this._o.onNext(false); this._o.onCompleted(); }; - - return IncludesObserver; - }(AbstractObserver)); - - /** - * Determines whether an observable sequence includes a specified element with an optional equality comparer. - * @param searchElement The value to locate in the source sequence. - * @param {Number} [fromIndex] An equality comparer to compare elements. - * @returns {Observable} An observable sequence containing a single element determining whether the source sequence includes an element that has the specified value from the given index. - */ - observableProto.includes = function (searchElement, fromIndex) { - return new IncludesObservable(this, searchElement, fromIndex); - }; - - var CountObservable = (function (__super__) { - inherits(CountObservable, __super__); - function CountObservable(source, fn) { - this.source = source; - this._fn = fn; - __super__.call(this); - } - - CountObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new CountObserver(o, this._fn, this.source)); - }; - - return CountObservable; - }(ObservableBase)); - - var CountObserver = (function (__super__) { - inherits(CountObserver, __super__); - - function CountObserver(o, fn, s) { - this._o = o; - this._fn = fn; - this._s = s; - this._i = 0; - this._c = 0; - __super__.call(this); - } - - CountObserver.prototype.next = function (x) { - if (this._fn) { - var result = tryCatch(this._fn)(x, this._i++, this._s); - if (result === errorObj) { return this._o.onError(result.e); } - Boolean(result) && (this._c++); - } else { - this._c++; - } - }; - CountObserver.prototype.error = function (e) { this._o.onError(e); }; - CountObserver.prototype.completed = function () { - this._o.onNext(this._c); - this._o.onCompleted(); - }; - - return CountObserver; - }(AbstractObserver)); - - /** - * Returns an observable sequence containing a value that represents how many elements in the specified observable sequence satisfy a condition if provided, else the count of items. - * @example - * res = source.count(); - * res = source.count(function (x) { return x > 3; }); - * @param {Function} [predicate]A function to test each element for a condition. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Observable} An observable sequence containing a single element with a number that represents how many elements in the input sequence satisfy the condition in the predicate function if provided, else the count of items in the sequence. - */ - observableProto.count = function (predicate, thisArg) { - var fn = bindCallback(predicate, thisArg, 3); - return new CountObservable(this, fn); - }; - - var IndexOfObservable = (function (__super__) { - inherits(IndexOfObservable, __super__); - function IndexOfObservable(source, e, n) { - this.source = source; - this._e = e; - this._n = n; - __super__.call(this); - } - - IndexOfObservable.prototype.subscribeCore = function (o) { - if (this._n < 0) { - o.onNext(-1); - o.onCompleted(); - return disposableEmpty; - } - - return this.source.subscribe(new IndexOfObserver(o, this._e, this._n)); - }; - - return IndexOfObservable; - }(ObservableBase)); - - var IndexOfObserver = (function (__super__) { - inherits(IndexOfObserver, __super__); - function IndexOfObserver(o, e, n) { - this._o = o; - this._e = e; - this._n = n; - this._i = 0; - __super__.call(this); - } - - IndexOfObserver.prototype.next = function (x) { - if (this._i >= this._n && x === this._e) { - this._o.onNext(this._i); - this._o.onCompleted(); - } - this._i++; - }; - IndexOfObserver.prototype.error = function (e) { this._o.onError(e); }; - IndexOfObserver.prototype.completed = function () { this._o.onNext(-1); this._o.onCompleted(); }; - - return IndexOfObserver; - }(AbstractObserver)); - - /** - * Returns the first index at which a given element can be found in the observable sequence, or -1 if it is not present. - * @param {Any} searchElement Element to locate in the array. - * @param {Number} [fromIndex] The index to start the search. If not specified, defaults to 0. - * @returns {Observable} And observable sequence containing the first index at which a given element can be found in the observable sequence, or -1 if it is not present. - */ - observableProto.indexOf = function(searchElement, fromIndex) { - var n = +fromIndex || 0; - Math.abs(n) === Infinity && (n = 0); - return new IndexOfObservable(this, searchElement, n); - }; - - var SumObservable = (function (__super__) { - inherits(SumObservable, __super__); - function SumObservable(source, fn) { - this.source = source; - this._fn = fn; - __super__.call(this); - } - - SumObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new SumObserver(o, this._fn, this.source)); - }; - - return SumObservable; - }(ObservableBase)); - - var SumObserver = (function (__super__) { - inherits(SumObserver, __super__); - - function SumObserver(o, fn, s) { - this._o = o; - this._fn = fn; - this._s = s; - this._i = 0; - this._c = 0; - __super__.call(this); - } - - SumObserver.prototype.next = function (x) { - if (this._fn) { - var result = tryCatch(this._fn)(x, this._i++, this._s); - if (result === errorObj) { return this._o.onError(result.e); } - this._c += result; - } else { - this._c += x; - } - }; - SumObserver.prototype.error = function (e) { this._o.onError(e); }; - SumObserver.prototype.completed = function () { - this._o.onNext(this._c); - this._o.onCompleted(); - }; - - return SumObserver; - }(AbstractObserver)); - - /** - * Computes the sum of a sequence of values that are obtained by invoking an optional transform function on each element of the input sequence, else if not specified computes the sum on each item in the sequence. - * @param {Function} [selector] A transform function to apply to each element. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Observable} An observable sequence containing a single element with the sum of the values in the source sequence. - */ - observableProto.sum = function (keySelector, thisArg) { - var fn = bindCallback(keySelector, thisArg, 3); - return new SumObservable(this, fn); - }; - - /** - * Returns the elements in an observable sequence with the minimum key value according to the specified comparer. - * @example - * var res = source.minBy(function (x) { return x.value; }); - * var res = source.minBy(function (x) { return x.value; }, function (x, y) { return x - y; }); - * @param {Function} keySelector Key selector function. - * @param {Function} [comparer] Comparer used to compare key values. - * @returns {Observable} An observable sequence containing a list of zero or more elements that have a minimum key value. - */ - observableProto.minBy = function (keySelector, comparer) { - comparer || (comparer = defaultSubComparer); - return new ExtremaByObservable(this, keySelector, function (x, y) { return comparer(x, y) * -1; }); - }; - - /** - * Returns the minimum element in an observable sequence according to the optional comparer else a default greater than less than check. - * @example - * var res = source.min(); - * var res = source.min(function (x, y) { return x.value - y.value; }); - * @param {Function} [comparer] Comparer used to compare elements. - * @returns {Observable} An observable sequence containing a single element with the minimum element in the source sequence. - */ - observableProto.min = function (comparer) { - return this.minBy(identity, comparer).map(firstOnly); - }; - - /** - * Returns the elements in an observable sequence with the maximum key value according to the specified comparer. - * @example - * var res = source.maxBy(function (x) { return x.value; }); - * var res = source.maxBy(function (x) { return x.value; }, function (x, y) { return x - y;; }); - * @param {Function} keySelector Key selector function. - * @param {Function} [comparer] Comparer used to compare key values. - * @returns {Observable} An observable sequence containing a list of zero or more elements that have a maximum key value. - */ - observableProto.maxBy = function (keySelector, comparer) { - comparer || (comparer = defaultSubComparer); - return new ExtremaByObservable(this, keySelector, comparer); - }; - - /** - * Returns the maximum value in an observable sequence according to the specified comparer. - * @example - * var res = source.max(); - * var res = source.max(function (x, y) { return x.value - y.value; }); - * @param {Function} [comparer] Comparer used to compare elements. - * @returns {Observable} An observable sequence containing a single element with the maximum element in the source sequence. - */ - observableProto.max = function (comparer) { - return this.maxBy(identity, comparer).map(firstOnly); - }; - - var AverageObservable = (function (__super__) { - inherits(AverageObservable, __super__); - function AverageObservable(source, fn) { - this.source = source; - this._fn = fn; - __super__.call(this); - } - - AverageObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new AverageObserver(o, this._fn, this.source)); - }; - - return AverageObservable; - }(ObservableBase)); - - var AverageObserver = (function(__super__) { - inherits(AverageObserver, __super__); - function AverageObserver(o, fn, s) { - this._o = o; - this._fn = fn; - this._s = s; - this._c = 0; - this._t = 0; - __super__.call(this); - } - - AverageObserver.prototype.next = function (x) { - if(this._fn) { - var r = tryCatch(this._fn)(x, this._c++, this._s); - if (r === errorObj) { return this._o.onError(r.e); } - this._t += r; - } else { - this._c++; - this._t += x; - } - }; - AverageObserver.prototype.error = function (e) { this._o.onError(e); }; - AverageObserver.prototype.completed = function () { - if (this._c === 0) { return this._o.onError(new EmptyError()); } - this._o.onNext(this._t / this._c); - this._o.onCompleted(); - }; - - return AverageObserver; - }(AbstractObserver)); - - /** - * Computes the average of an observable sequence of values that are in the sequence or obtained by invoking a transform function on each element of the input sequence if present. - * @param {Function} [selector] A transform function to apply to each element. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Observable} An observable sequence containing a single element with the average of the sequence of values. - */ - observableProto.average = function (keySelector, thisArg) { - var source = this, fn; - if (isFunction(keySelector)) { - fn = bindCallback(keySelector, thisArg, 3); - } - return new AverageObservable(source, fn); - }; - - /** - * Determines whether two sequences are equal by comparing the elements pairwise using a specified equality comparer. - * - * @example - * var res = res = source.sequenceEqual([1,2,3]); - * var res = res = source.sequenceEqual([{ value: 42 }], function (x, y) { return x.value === y.value; }); - * 3 - res = source.sequenceEqual(Rx.Observable.returnValue(42)); - * 4 - res = source.sequenceEqual(Rx.Observable.returnValue({ value: 42 }), function (x, y) { return x.value === y.value; }); - * @param {Observable} second Second observable sequence or array to compare. - * @param {Function} [comparer] Comparer used to compare elements of both sequences. - * @returns {Observable} An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the specified equality comparer. - */ - observableProto.sequenceEqual = function (second, comparer) { - var first = this; - comparer || (comparer = defaultComparer); - return new AnonymousObservable(function (o) { - var donel = false, doner = false, ql = [], qr = []; - var subscription1 = first.subscribe(function (x) { - if (qr.length > 0) { - var v = qr.shift(); - var equal = tryCatch(comparer)(v, x); - if (equal === errorObj) { return o.onError(equal.e); } - if (!equal) { - o.onNext(false); - o.onCompleted(); - } - } else if (doner) { - o.onNext(false); - o.onCompleted(); - } else { - ql.push(x); - } - }, function(e) { o.onError(e); }, function () { - donel = true; - if (ql.length === 0) { - if (qr.length > 0) { - o.onNext(false); - o.onCompleted(); - } else if (doner) { - o.onNext(true); - o.onCompleted(); - } - } - }); - - (isArrayLike(second) || isIterable(second)) && (second = observableFrom(second)); - isPromise(second) && (second = observableFromPromise(second)); - var subscription2 = second.subscribe(function (x) { - if (ql.length > 0) { - var v = ql.shift(); - var equal = tryCatch(comparer)(v, x); - if (equal === errorObj) { return o.onError(equal.e); } - if (!equal) { - o.onNext(false); - o.onCompleted(); - } - } else if (donel) { - o.onNext(false); - o.onCompleted(); - } else { - qr.push(x); - } - }, function(e) { o.onError(e); }, function () { - doner = true; - if (qr.length === 0) { - if (ql.length > 0) { - o.onNext(false); - o.onCompleted(); - } else if (donel) { - o.onNext(true); - o.onCompleted(); - } - } - }); - return new BinaryDisposable(subscription1, subscription2); - }, first); - }; - - var ElementAtObservable = (function (__super__) { - inherits(ElementAtObservable, __super__); - function ElementAtObservable(source, i, d) { - this.source = source; - this._i = i; - this._d = d; - __super__.call(this); - } - - ElementAtObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new ElementAtObserver(o, this._i, this._d)); - }; - - return ElementAtObservable; - }(ObservableBase)); - - var ElementAtObserver = (function (__super__) { - inherits(ElementAtObserver, __super__); - - function ElementAtObserver(o, i, d) { - this._o = o; - this._i = i; - this._d = d; - __super__.call(this); - } - - ElementAtObserver.prototype.next = function (x) { - if (this._i-- === 0) { - this._o.onNext(x); - this._o.onCompleted(); - } - }; - ElementAtObserver.prototype.error = function (e) { this._o.onError(e); }; - ElementAtObserver.prototype.completed = function () { - if (this._d === undefined) { - this._o.onError(new ArgumentOutOfRangeError()); - } else { - this._o.onNext(this._d); - this._o.onCompleted(); - } - }; - - return ElementAtObserver; - }(AbstractObserver)); - - /** - * Returns the element at a specified index in a sequence or default value if not found. - * @param {Number} index The zero-based index of the element to retrieve. - * @param {Any} [defaultValue] The default value to use if elementAt does not find a value. - * @returns {Observable} An observable sequence that produces the element at the specified position in the source sequence. - */ - observableProto.elementAt = function (index, defaultValue) { - if (index < 0) { throw new ArgumentOutOfRangeError(); } - return new ElementAtObservable(this, index, defaultValue); - }; - - var SingleObserver = (function(__super__) { - inherits(SingleObserver, __super__); - function SingleObserver(o, obj, s) { - this._o = o; - this._obj = obj; - this._s = s; - this._i = 0; - this._hv = false; - this._v = null; - __super__.call(this); - } - - SingleObserver.prototype.next = function (x) { - var shouldYield = false; - if (this._obj.predicate) { - var res = tryCatch(this._obj.predicate)(x, this._i++, this._s); - if (res === errorObj) { return this._o.onError(res.e); } - Boolean(res) && (shouldYield = true); - } else if (!this._obj.predicate) { - shouldYield = true; - } - if (shouldYield) { - if (this._hv) { - return this._o.onError(new Error('Sequence contains more than one matching element')); - } - this._hv = true; - this._v = x; - } - }; - SingleObserver.prototype.error = function (e) { this._o.onError(e); }; - SingleObserver.prototype.completed = function () { - if (this._hv) { - this._o.onNext(this._v); - this._o.onCompleted(); - } - else if (this._obj.defaultValue === undefined) { - this._o.onError(new EmptyError()); - } else { - this._o.onNext(this._obj.defaultValue); - this._o.onCompleted(); - } - }; - - return SingleObserver; - }(AbstractObserver)); - - - /** - * Returns the only element of an observable sequence that satisfies the condition in the optional predicate, and reports an exception if there is not exactly one element in the observable sequence. - * @returns {Observable} Sequence containing the single element in the observable sequence that satisfies the condition in the predicate. - */ - observableProto.single = function (predicate, thisArg) { - var obj = {}, source = this; - if (typeof arguments[0] === 'object') { - obj = arguments[0]; - } else { - obj = { - predicate: arguments[0], - thisArg: arguments[1], - defaultValue: arguments[2] - }; - } - if (isFunction (obj.predicate)) { - var fn = obj.predicate; - obj.predicate = bindCallback(fn, obj.thisArg, 3); - } - return new AnonymousObservable(function (o) { - return source.subscribe(new SingleObserver(o, obj, source)); - }, source); - }; - - var FirstObservable = (function (__super__) { - inherits(FirstObservable, __super__); - function FirstObservable(source, obj) { - this.source = source; - this._obj = obj; - __super__.call(this); - } - - FirstObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new FirstObserver(o, this._obj, this.source)); - }; - - return FirstObservable; - }(ObservableBase)); - - var FirstObserver = (function(__super__) { - inherits(FirstObserver, __super__); - function FirstObserver(o, obj, s) { - this._o = o; - this._obj = obj; - this._s = s; - this._i = 0; - __super__.call(this); - } - - FirstObserver.prototype.next = function (x) { - if (this._obj.predicate) { - var res = tryCatch(this._obj.predicate)(x, this._i++, this._s); - if (res === errorObj) { return this._o.onError(res.e); } - if (Boolean(res)) { - this._o.onNext(x); - this._o.onCompleted(); - } - } else if (!this._obj.predicate) { - this._o.onNext(x); - this._o.onCompleted(); - } - }; - FirstObserver.prototype.error = function (e) { this._o.onError(e); }; - FirstObserver.prototype.completed = function () { - if (this._obj.defaultValue === undefined) { - this._o.onError(new EmptyError()); - } else { - this._o.onNext(this._obj.defaultValue); - this._o.onCompleted(); - } - }; - - return FirstObserver; - }(AbstractObserver)); - - /** - * Returns the first element of an observable sequence that satisfies the condition in the predicate if present else the first item in the sequence. - * @returns {Observable} Sequence containing the first element in the observable sequence that satisfies the condition in the predicate if provided, else the first item in the sequence. - */ - observableProto.first = function () { - var obj = {}, source = this; - if (typeof arguments[0] === 'object') { - obj = arguments[0]; - } else { - obj = { - predicate: arguments[0], - thisArg: arguments[1], - defaultValue: arguments[2] - }; - } - if (isFunction (obj.predicate)) { - var fn = obj.predicate; - obj.predicate = bindCallback(fn, obj.thisArg, 3); - } - return new FirstObservable(this, obj); - }; - - var LastObservable = (function (__super__) { - inherits(LastObservable, __super__); - function LastObservable(source, obj) { - this.source = source; - this._obj = obj; - __super__.call(this); - } - - LastObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new LastObserver(o, this._obj, this.source)); - }; - - return LastObservable; - }(ObservableBase)); - - var LastObserver = (function(__super__) { - inherits(LastObserver, __super__); - function LastObserver(o, obj, s) { - this._o = o; - this._obj = obj; - this._s = s; - this._i = 0; - this._hv = false; - this._v = null; - __super__.call(this); - } - - LastObserver.prototype.next = function (x) { - var shouldYield = false; - if (this._obj.predicate) { - var res = tryCatch(this._obj.predicate)(x, this._i++, this._s); - if (res === errorObj) { return this._o.onError(res.e); } - Boolean(res) && (shouldYield = true); - } else if (!this._obj.predicate) { - shouldYield = true; - } - if (shouldYield) { - this._hv = true; - this._v = x; - } - }; - LastObserver.prototype.error = function (e) { this._o.onError(e); }; - LastObserver.prototype.completed = function () { - if (this._hv) { - this._o.onNext(this._v); - this._o.onCompleted(); - } - else if (this._obj.defaultValue === undefined) { - this._o.onError(new EmptyError()); - } else { - this._o.onNext(this._obj.defaultValue); - this._o.onCompleted(); - } - }; - - return LastObserver; - }(AbstractObserver)); - - /** - * Returns the last element of an observable sequence that satisfies the condition in the predicate if specified, else the last element. - * @returns {Observable} Sequence containing the last element in the observable sequence that satisfies the condition in the predicate. - */ - observableProto.last = function () { - var obj = {}, source = this; - if (typeof arguments[0] === 'object') { - obj = arguments[0]; - } else { - obj = { - predicate: arguments[0], - thisArg: arguments[1], - defaultValue: arguments[2] - }; - } - if (isFunction (obj.predicate)) { - var fn = obj.predicate; - obj.predicate = bindCallback(fn, obj.thisArg, 3); - } - return new LastObservable(this, obj); - }; - - var FindValueObserver = (function(__super__) { - inherits(FindValueObserver, __super__); - function FindValueObserver(observer, source, callback, yieldIndex) { - this._o = observer; - this._s = source; - this._cb = callback; - this._y = yieldIndex; - this._i = 0; - __super__.call(this); - } - - FindValueObserver.prototype.next = function (x) { - var shouldRun = tryCatch(this._cb)(x, this._i, this._s); - if (shouldRun === errorObj) { return this._o.onError(shouldRun.e); } - if (shouldRun) { - this._o.onNext(this._y ? this._i : x); - this._o.onCompleted(); - } else { - this._i++; - } - }; - - FindValueObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - FindValueObserver.prototype.completed = function () { - this._y && this._o.onNext(-1); - this._o.onCompleted(); - }; - - return FindValueObserver; - }(AbstractObserver)); - - function findValue (source, predicate, thisArg, yieldIndex) { - var callback = bindCallback(predicate, thisArg, 3); - return new AnonymousObservable(function (o) { - return source.subscribe(new FindValueObserver(o, source, callback, yieldIndex)); - }, source); - } - - /** - * Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire Observable sequence. - * @param {Function} predicate The predicate that defines the conditions of the element to search for. - * @param {Any} [thisArg] Object to use as `this` when executing the predicate. - * @returns {Observable} An Observable sequence with the first element that matches the conditions defined by the specified predicate, if found; otherwise, undefined. - */ - observableProto.find = function (predicate, thisArg) { - return findValue(this, predicate, thisArg, false); - }; - - /** - * Searches for an element that matches the conditions defined by the specified predicate, and returns - * an Observable sequence with the zero-based index of the first occurrence within the entire Observable sequence. - * @param {Function} predicate The predicate that defines the conditions of the element to search for. - * @param {Any} [thisArg] Object to use as `this` when executing the predicate. - * @returns {Observable} An Observable sequence with the zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, –1. - */ - observableProto.findIndex = function (predicate, thisArg) { - return findValue(this, predicate, thisArg, true); - }; - - var ToSetObservable = (function (__super__) { - inherits(ToSetObservable, __super__); - function ToSetObservable(source) { - this.source = source; - __super__.call(this); - } - - ToSetObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new ToSetObserver(o)); - }; - - return ToSetObservable; - }(ObservableBase)); - - var ToSetObserver = (function (__super__) { - inherits(ToSetObserver, __super__); - function ToSetObserver(o) { - this._o = o; - this._s = new root.Set(); - __super__.call(this); - } - - ToSetObserver.prototype.next = function (x) { - this._s.add(x); - }; - - ToSetObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - ToSetObserver.prototype.completed = function () { - this._o.onNext(this._s); - this._o.onCompleted(); - }; - - return ToSetObserver; - }(AbstractObserver)); - - /** - * Converts the observable sequence to a Set if it exists. - * @returns {Observable} An observable sequence with a single value of a Set containing the values from the observable sequence. - */ - observableProto.toSet = function () { - if (typeof root.Set === 'undefined') { throw new TypeError(); } - return new ToSetObservable(this); - }; - - var ToMapObservable = (function (__super__) { - inherits(ToMapObservable, __super__); - function ToMapObservable(source, k, e) { - this.source = source; - this._k = k; - this._e = e; - __super__.call(this); - } - - ToMapObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new ToMapObserver(o, this._k, this._e)); - }; - - return ToMapObservable; - }(ObservableBase)); - - var ToMapObserver = (function (__super__) { - inherits(ToMapObserver, __super__); - function ToMapObserver(o, k, e) { - this._o = o; - this._k = k; - this._e = e; - this._m = new root.Map(); - __super__.call(this); - } - - ToMapObserver.prototype.next = function (x) { - var key = tryCatch(this._k)(x); - if (key === errorObj) { return this._o.onError(key.e); } - var elem = x; - if (this._e) { - elem = tryCatch(this._e)(x); - if (elem === errorObj) { return this._o.onError(elem.e); } - } - - this._m.set(key, elem); - }; - - ToMapObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - ToMapObserver.prototype.completed = function () { - this._o.onNext(this._m); - this._o.onCompleted(); - }; - - return ToMapObserver; - }(AbstractObserver)); - - /** - * Converts the observable sequence to a Map if it exists. - * @param {Function} keySelector A function which produces the key for the Map. - * @param {Function} [elementSelector] An optional function which produces the element for the Map. If not present, defaults to the value from the observable sequence. - * @returns {Observable} An observable sequence with a single value of a Map containing the values from the observable sequence. - */ - observableProto.toMap = function (keySelector, elementSelector) { - if (typeof root.Map === 'undefined') { throw new TypeError(); } - return new ToMapObservable(this, keySelector, elementSelector); - }; - - var SliceObservable = (function (__super__) { - inherits(SliceObservable, __super__); - function SliceObservable(source, b, e) { - this.source = source; - this._b = b; - this._e = e; - __super__.call(this); - } - - SliceObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new SliceObserver(o, this._b, this._e)); - }; - - return SliceObservable; - }(ObservableBase)); - - var SliceObserver = (function (__super__) { - inherits(SliceObserver, __super__); - - function SliceObserver(o, b, e) { - this._o = o; - this._b = b; - this._e = e; - this._i = 0; - __super__.call(this); - } - - SliceObserver.prototype.next = function (x) { - if (this._i >= this._b) { - if (this._e === this._i) { - this._o.onCompleted(); - } else { - this._o.onNext(x); - } - } - this._i++; - }; - SliceObserver.prototype.error = function (e) { this._o.onError(e); }; - SliceObserver.prototype.completed = function () { this._o.onCompleted(); }; - - return SliceObserver; - }(AbstractObserver)); - - /* - * The slice() method returns a shallow copy of a portion of an Observable into a new Observable object. - * Unlike the array version, this does not support negative numbers for being or end. - * @param {Number} [begin] Zero-based index at which to begin extraction. If omitted, this will default to zero. - * @param {Number} [end] Zero-based index at which to end extraction. slice extracts up to but not including end. - * If omitted, this will emit the rest of the Observable object. - * @returns {Observable} A shallow copy of a portion of an Observable into a new Observable object. - */ - observableProto.slice = function (begin, end) { - var start = begin || 0; - if (start < 0) { throw new Rx.ArgumentOutOfRangeError(); } - if (typeof end === 'number' && end < start) { - throw new Rx.ArgumentOutOfRangeError(); - } - return new SliceObservable(this, start, end); - }; - - var LastIndexOfObservable = (function (__super__) { - inherits(LastIndexOfObservable, __super__); - function LastIndexOfObservable(source, e, n) { - this.source = source; - this._e = e; - this._n = n; - __super__.call(this); - } - - LastIndexOfObservable.prototype.subscribeCore = function (o) { - if (this._n < 0) { - o.onNext(-1); - o.onCompleted(); - return disposableEmpty; - } - - return this.source.subscribe(new LastIndexOfObserver(o, this._e, this._n)); - }; - - return LastIndexOfObservable; - }(ObservableBase)); - - var LastIndexOfObserver = (function (__super__) { - inherits(LastIndexOfObserver, __super__); - function LastIndexOfObserver(o, e, n) { - this._o = o; - this._e = e; - this._n = n; - this._v = 0; - this._hv = false; - this._i = 0; - __super__.call(this); - } - - LastIndexOfObserver.prototype.next = function (x) { - if (this._i >= this._n && x === this._e) { - this._hv = true; - this._v = this._i; - } - this._i++; - }; - LastIndexOfObserver.prototype.error = function (e) { this._o.onError(e); }; - LastIndexOfObserver.prototype.completed = function () { - if (this._hv) { - this._o.onNext(this._v); - } else { - this._o.onNext(-1); - } - this._o.onCompleted(); - }; - - return LastIndexOfObserver; - }(AbstractObserver)); - - /** - * Returns the last index at which a given element can be found in the observable sequence, or -1 if it is not present. - * @param {Any} searchElement Element to locate in the array. - * @param {Number} [fromIndex] The index to start the search. If not specified, defaults to 0. - * @returns {Observable} And observable sequence containing the last index at which a given element can be found in the observable sequence, or -1 if it is not present. - */ - observableProto.lastIndexOf = function(searchElement, fromIndex) { - var n = +fromIndex || 0; - Math.abs(n) === Infinity && (n = 0); - return new LastIndexOfObservable(this, searchElement, n); - }; - - return Rx; -})); diff --git a/node_modules/rx-lite-aggregates/rx.lite.aggregates.map b/node_modules/rx-lite-aggregates/rx.lite.aggregates.map deleted file mode 100644 index 11fbf10..0000000 --- a/node_modules/rx-lite-aggregates/rx.lite.aggregates.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rx.lite.aggregates.min.js","sources":["rx.lite.aggregates.js"],"names":["factory","checkGlobal","value","Object","objectTypes","function","object","freeExports","exports","nodeType","freeModule","module","freeGlobal","global","freeSelf","self","freeWindow","window","thisGlobal","this","root","Function","define","amd","Rx","require","call","exp","undefined","tryCatcherGen","tryCatchTarget","apply","arguments","e","errorObj","firstOnly","x","length","EmptyError","findValue","source","predicate","thisArg","yieldIndex","callback","bindCallback","AnonymousObservable","o","subscribe","FindValueObserver","Observable","observableProto","prototype","BinaryDisposable","AbstractObserver","internals","disposableEmpty","Disposable","empty","helpers","defaultComparer","identity","defaultSubComparer","isFunction","isPromise","isArrayLike","isIterable","inherits","observableFromPromise","fromPromise","observableFrom","from","ObservableBase","ArgumentOutOfRangeError","tryCatch","fn","TypeError","ExtremaByObservable","__super__","k","c","_k","_c","subscribeCore","ExtremaByObserver","_o","_v","_hv","_l","next","key","onError","comparison","push","error","completed","onNext","onCompleted","ReduceObservable","accumulator","hasSeed","seed","observer","ReduceObserver","parent","_p","_fn","_hs","_s","_ha","_a","_i","reduce","SomeObservable","SomeObserver","s","result","Boolean","some","IsEmptyObservable","IsEmptyObserver","isEmpty","EveryObservable","EveryObserver","every","IncludesObservable","elem","idx","n","Math","abs","Infinity","_elem","_n","IncludesObserver","comparer","a","b","isNaN","includes","searchElement","fromIndex","CountObservable","CountObserver","count","IndexOfObservable","_e","IndexOfObserver","indexOf","SumObservable","SumObserver","sum","keySelector","minBy","y","min","map","maxBy","max","AverageObservable","AverageObserver","_t","r","average","sequenceEqual","second","first","donel","doner","ql","qr","subscription1","v","shift","equal","subscription2","ElementAtObservable","i","d","_d","ElementAtObserver","elementAt","index","defaultValue","SingleObserver","obj","_obj","shouldYield","res","Error","single","FirstObservable","FirstObserver","LastObservable","LastObserver","last","_cb","_y","shouldRun","find","findIndex","ToSetObservable","ToSetObserver","Set","add","toSet","ToMapObservable","ToMapObserver","_m","Map","set","toMap","elementSelector","SliceObservable","_b","SliceObserver","slice","begin","end","start","LastIndexOfObservable","LastIndexOfObserver","lastIndexOf"],"mappings":";CAEE,SAAUA,GAMV,QAASC,GAAYC,GACnB,MAAQA,IAASA,EAAMC,SAAWA,OAAUD,EAAQ,KANtD,GAAIE,IACFC,YAAY,EACZC,QAAU,GAORC,EAAeH,QAAmBI,WAAYA,UAAYA,QAAQC,SAAYD,QAAU,KACxFE,EAAcN,QAAmBO,UAAWA,SAAWA,OAAOF,SAAYE,OAAS,KACnFC,EAAaX,EAAYM,GAAeG,GAAgC,gBAAXG,SAAuBA,QACpFC,EAAWb,EAAYG,QAAmBW,QAASA,MACnDC,EAAaf,EAAYG,QAAmBa,UAAWA,QAEvDC,GADiBR,GAAcA,EAAWF,UAAYD,EAAeA,EAAc,KACtEN,EAAYG,QAAmBe,QAASA,OACrDC,EAAOR,GAAgBI,KAAgBE,GAAcA,EAAWD,SAAYD,GAAeF,GAAYI,GAAcG,SAAS,gBAG5G,mBAAXC,SAAyBA,OAAOC,IACzCD,QAAQ,aAAc,SAAUE,EAAIhB,GAClC,MAAOR,GAAQoB,EAAMZ,EAASgB,KAEL,gBAAXb,SAAuBA,QAAUA,OAAOH,UAAYD,EACpEI,OAAOH,QAAUR,EAAQoB,EAAMT,OAAOH,QAASiB,QAAQ,YAEvDL,EAAKI,GAAKxB,EAAQoB,KAAUA,EAAKI,MAEnCE,KAAKP,KAAM,SAAUC,EAAMO,EAAKH,EAAII,GA2BpC,QAASC,GAAcC,GACrB,MAAO,YACL,IACE,MAAOA,GAAeC,MAAMZ,KAAMa,WAClC,MAAOC,GAEP,MADAC,GAASD,EAAIA,EACNC,IAwEb,QAASC,GAAUC,GACjB,GAAiB,IAAbA,EAAEC,OAAgB,KAAM,IAAIC,EAChC,OAAOF,GAAE,GAm8BX,QAASG,GAAWC,EAAQC,EAAWC,EAASC,GAC9C,GAAIC,GAAWC,EAAaJ,EAAWC,EAAS,EAChD,OAAO,IAAII,GAAoB,SAAUC,GACvC,MAAOP,GAAOQ,UAAU,GAAIC,IAAkBF,EAAGP,EAAQI,EAAUD,KAClEH,GA/iCL,GAAIU,GAAa1B,EAAG0B,WAClBC,EAAkBD,EAAWE,UAC7BC,EAAmB7B,EAAG6B,iBACtBP,EAAsBtB,EAAGsB,oBACzBQ,EAAmB9B,EAAG+B,UAAUD,iBAChCE,EAAkBhC,EAAGiC,WAAWC,MAChCC,EAAUnC,EAAGmC,QACbC,EAAkBD,EAAQC,gBAC1BC,EAAWF,EAAQE,SACnBC,EAAqBH,EAAQG,mBAC7BC,EAAaJ,EAAQI,WACrBC,EAAYL,EAAQK,UACpBC,EAAcN,EAAQM,YACtBC,EAAaP,EAAQO,WACrBC,EAAW3C,EAAG+B,UAAUY,SACxBC,EAAwBlB,EAAWmB,YACnCC,EAAiBpB,EAAWqB,KAC5B1B,EAAerB,EAAG+B,UAAUV,aAC5BP,EAAad,EAAGc,WAChBkC,EAAiBhD,EAAGgD,eACpBC,EAA0BjD,EAAGiD,wBAE3BvC,GAAYD,MAaZyC,EAAWlD,EAAG+B,UAAUmB,SAAW,SAAkBC,GACvD,IAAKZ,EAAWY,GAAO,KAAM,IAAIC,WAAU,wBAC3C,OAAO/C,GAAc8C,IAOnBE,EAAuB,SAAUC,GAEnC,QAASD,GAAoBrC,EAAQuC,EAAGC,GACtC7D,KAAKqB,OAASA,EACdrB,KAAK8D,GAAKF,EACV5D,KAAK+D,GAAKF,EACVF,EAAUpD,KAAKP,MAOjB,MAZAgD,GAASU,EAAqBC,GAQ9BD,EAAoBzB,UAAU+B,cAAgB,SAAUpC,GACtD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAIoC,GAAkBrC,EAAG5B,KAAK8D,GAAI9D,KAAK+D,MAG/DL,GACPL,GAEEY,EAAqB,SAAUN,GAEjC,QAASM,GAAkBrC,EAAGgC,EAAGC,GAC/B7D,KAAKkE,GAAKtC,EACV5B,KAAK8D,GAAKF,EACV5D,KAAK+D,GAAKF,EACV7D,KAAKmE,GAAK,KACVnE,KAAKoE,KAAM,EACXpE,KAAKqE,MACLV,EAAUpD,KAAKP,MA8BjB,MAtCAgD,GAASiB,EAAmBN,GAW5BM,EAAkBhC,UAAUqC,KAAO,SAAUrD,GAC3C,GAAIsD,GAAMhB,EAASvD,KAAK8D,IAAI7C,EAC5B,IAAIsD,IAAQxD,EAAY,MAAOf,MAAKkE,GAAGM,QAAQD,EAAIzD,EACnD,IAAI2D,GAAa,CACjB,IAAKzE,KAAKoE,KAKR,GADAK,EAAalB,EAASvD,KAAK+D,IAAIQ,EAAKvE,KAAKmE,IACrCM,IAAe1D,EAAY,MAAOf,MAAKkE,GAAGM,QAAQC,EAAW3D,OAJjEd,MAAKoE,KAAM,EACXpE,KAAKmE,GAAKI,CAKRE,GAAa,IACfzE,KAAKmE,GAAKI,EACVvE,KAAKqE,OAEHI,GAAc,GAAKzE,KAAKqE,GAAGK,KAAKzD,IAGtCgD,EAAkBhC,UAAU0C,MAAQ,SAAU7D,GAC5Cd,KAAKkE,GAAGM,QAAQ1D,IAGlBmD,EAAkBhC,UAAU2C,UAAY,WACtC5E,KAAKkE,GAAGW,OAAO7E,KAAKqE,IACpBrE,KAAKkE,GAAGY,eAGHb,GACP9B,GAOE4C,EAAoB,SAASpB,GAE/B,QAASoB,GAAiB1D,EAAQ2D,EAAaC,EAASC,GACtDlF,KAAKqB,OAASA,EACdrB,KAAKgF,YAAcA,EACnBhF,KAAKiF,QAAUA,EACfjF,KAAKkF,KAAOA,EACZvB,EAAUpD,KAAKP,MAOjB,MAbAgD,GAAS+B,EAAkBpB,GAS3BoB,EAAiB9C,UAAU+B,cAAgB,SAASmB,GAClD,MAAOnF,MAAKqB,OAAOQ,UAAU,GAAIuD,GAAeD,EAASnF,QAGpD+E,GACP1B,GAEE+B,EAAkB,SAAUzB,GAE9B,QAASyB,GAAexD,EAAGyD,GACzBrF,KAAKkE,GAAKtC,EACV5B,KAAKsF,GAAKD,EACVrF,KAAKuF,IAAMF,EAAOL,YAClBhF,KAAKwF,IAAMH,EAAOJ,QAClBjF,KAAKyF,GAAKJ,EAAOH,KACjBlF,KAAK0F,KAAM,EACX1F,KAAK2F,GAAK,KACV3F,KAAKoE,KAAM,EACXpE,KAAK4F,GAAK,EACVjC,EAAUpD,KAAKP,MA0BjB,MArCAgD,GAASoC,EAAgBzB,GAczByB,EAAenD,UAAUqC,KAAO,SAAUrD,GAQxC,OAPCjB,KAAKoE,MAAQpE,KAAKoE,KAAM,GACrBpE,KAAK0F,IACP1F,KAAK2F,GAAKpC,EAASvD,KAAKuF,KAAKvF,KAAK2F,GAAI1E,EAAGjB,KAAK4F,GAAI5F,KAAKsF,KAEvDtF,KAAK2F,GAAK3F,KAAKwF,IAAMjC,EAASvD,KAAKuF,KAAKvF,KAAKyF,GAAIxE,EAAGjB,KAAK4F,GAAI5F,KAAKsF,IAAMrE,EACxEjB,KAAK0F,KAAM,GAET1F,KAAK2F,KAAO5E,EAAmBf,KAAKkE,GAAGM,QAAQxE,KAAK2F,GAAG7E,OAC3Dd,MAAK4F,MAGPR,EAAenD,UAAU0C,MAAQ,SAAU7D,GACzCd,KAAKkE,GAAGM,QAAQ1D,IAGlBsE,EAAenD,UAAU2C,UAAY,WACnC5E,KAAKoE,KAAOpE,KAAKkE,GAAGW,OAAO7E,KAAK2F,KAC/B3F,KAAKoE,KAAOpE,KAAKwF,KAAOxF,KAAKkE,GAAGW,OAAO7E,KAAKyF,KAC5CzF,KAAKoE,MAAQpE,KAAKwF,KAAOxF,KAAKkE,GAAGM,QAAQ,GAAIrD,IAC9CnB,KAAKkE,GAAGY,eAGHM,GACPjD,EASFH,GAAgB6D,OAAS,WACvB,GAAqBX,GAAjBD,GAAU,EAAaD,EAAcnE,UAAU,EAKnD,OAJyB,KAArBA,UAAUK,SACZ+D,GAAU,EACVC,EAAOrE,UAAU,IAEZ,GAAIkE,GAAiB/E,KAAMgF,EAAaC,EAASC,GAG1D,IAAIY,GAAkB,SAAUnC,GAE9B,QAASmC,GAAezE,EAAQmC,GAC9BxD,KAAKqB,OAASA,EACdrB,KAAKuF,IAAM/B,EACXG,EAAUpD,KAAKP,MAOjB,MAXAgD,GAAS8C,EAAgBnC,GAOzBmC,EAAe7D,UAAU+B,cAAgB,SAAUpC,GACjD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAIkE,GAAanE,EAAG5B,KAAKuF,IAAKvF,KAAKqB,UAG3DyE,GACPzC,GAEE0C,EAAgB,SAAUpC,GAG5B,QAASoC,GAAanE,EAAG4B,EAAIwC,GAC3BhG,KAAKkE,GAAKtC,EACV5B,KAAKuF,IAAM/B,EACXxD,KAAKyF,GAAKO,EACVhG,KAAK4F,GAAK,EACVjC,EAAUpD,KAAKP,MAiBjB,MAxBAgD,GAAS+C,EAAcpC,GAUvBoC,EAAa9D,UAAUqC,KAAO,SAAUrD,GACtC,GAAIgF,GAAS1C,EAASvD,KAAKuF,KAAKtE,EAAGjB,KAAK4F,KAAM5F,KAAKyF,GACnD,OAAIQ,KAAWlF,EAAmBf,KAAKkE,GAAGM,QAAQyB,EAAOnF,QACrDoF,QAAQD,KACVjG,KAAKkE,GAAGW,QAAO,GACf7E,KAAKkE,GAAGY,iBAGZiB,EAAa9D,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IAC9DiF,EAAa9D,UAAU2C,UAAY,WACjC5E,KAAKkE,GAAGW,QAAO,GACf7E,KAAKkE,GAAGY,eAGHiB,GACP5D,EAOFH,GAAgBmE,KAAO,SAAU7E,EAAWC,GAC1C,GAAIiC,GAAK9B,EAAaJ,EAAWC,EAAS,EAC1C,OAAO,IAAIuE,GAAe9F,KAAMwD,GAGlC,IAAI4C,GAAqB,SAAUzC,GAEjC,QAASyC,GAAkB/E,GACzBrB,KAAKqB,OAASA,EACdsC,EAAUpD,KAAKP,MAOjB,MAVAgD,GAASoD,EAAmBzC,GAM5ByC,EAAkBnE,UAAU+B,cAAgB,SAAUpC,GACpD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAIwE,GAAgBzE,KAG5CwE,GACP/C,GAEEgD,EAAmB,SAAS1C,GAE9B,QAAS0C,GAAgBzE,GACvB5B,KAAKkE,GAAKtC,EACV+B,EAAUpD,KAAKP,MAajB,MAhBAgD,GAASqD,EAAiB1C,GAM1B0C,EAAgBpE,UAAUqC,KAAO,WAC/BtE,KAAKkE,GAAGW,QAAO,GACf7E,KAAKkE,GAAGY,eAEVuB,EAAgBpE,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IACjEuF,EAAgBpE,UAAU2C,UAAY,WACpC5E,KAAKkE,GAAGW,QAAO,GACf7E,KAAKkE,GAAGY,eAGHuB,GACPlE,EAMFH,GAAgBsE,QAAU,WACxB,MAAO,IAAIF,GAAkBpG,MAG/B,IAAIuG,GAAmB,SAAU5C,GAE/B,QAAS4C,GAAgBlF,EAAQmC,GAC/BxD,KAAKqB,OAASA,EACdrB,KAAKuF,IAAM/B,EACXG,EAAUpD,KAAKP,MAOjB,MAXAgD,GAASuD,EAAiB5C,GAO1B4C,EAAgBtE,UAAU+B,cAAgB,SAAUpC,GAClD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAI2E,GAAc5E,EAAG5B,KAAKuF,IAAKvF,KAAKqB,UAG5DkF,GACPlD,GAEEmD,EAAiB,SAAU7C,GAG7B,QAAS6C,GAAc5E,EAAG4B,EAAIwC,GAC5BhG,KAAKkE,GAAKtC,EACV5B,KAAKuF,IAAM/B,EACXxD,KAAKyF,GAAKO,EACVhG,KAAK4F,GAAK,EACVjC,EAAUpD,KAAKP,MAiBjB,MAxBAgD,GAASwD,EAAe7C,GAUxB6C,EAAcvE,UAAUqC,KAAO,SAAUrD,GACvC,GAAIgF,GAAS1C,EAASvD,KAAKuF,KAAKtE,EAAGjB,KAAK4F,KAAM5F,KAAKyF,GACnD,OAAIQ,KAAWlF,EAAmBf,KAAKkE,GAAGM,QAAQyB,EAAOnF,QACpDoF,QAAQD,KACXjG,KAAKkE,GAAGW,QAAO,GACf7E,KAAKkE,GAAGY,iBAGZ0B,EAAcvE,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IAC/D0F,EAAcvE,UAAU2C,UAAY,WAClC5E,KAAKkE,GAAGW,QAAO,GACf7E,KAAKkE,GAAGY,eAGH0B,GACPrE,EAQFH,GAAgByE,MAAQ,SAAUnF,EAAWC,GAC3C,GAAIiC,GAAK9B,EAAaJ,EAAWC,EAAS,EAC1C,OAAO,IAAIgF,GAAgBvG,KAAMwD,GAGnC,IAAIkD,GAAsB,SAAU/C,GAElC,QAAS+C,GAAmBrF,EAAQsF,EAAMC,GACxC,GAAIC,IAAKD,GAAO,CAChBE,MAAKC,IAAIF,KAAOG,EAAAA,IAAaH,EAAI,GAEjC7G,KAAKqB,OAASA,EACdrB,KAAKiH,MAAQN,EACb3G,KAAKkH,GAAKL,EACVlD,EAAUpD,KAAKP,MAajB,MArBAgD,GAAS0D,EAAoB/C,GAW7B+C,EAAmBzE,UAAU+B,cAAgB,SAAUpC,GACrD,MAAI5B,MAAKkH,GAAK,GACZtF,EAAEiD,QAAO,GACTjD,EAAEkD,cACKzC,GAGFrC,KAAKqB,OAAOQ,UAAU,GAAIsF,GAAiBvF,EAAG5B,KAAKiH,MAAOjH,KAAKkH,MAGjER,GACPrD,GAEE8D,EAAoB,SAAUxD,GAEhC,QAASwD,GAAiBvF,EAAG+E,EAAME,GACjC7G,KAAKkE,GAAKtC,EACV5B,KAAKiH,MAAQN,EACb3G,KAAKkH,GAAKL,EACV7G,KAAK4F,GAAK,EACVjC,EAAUpD,KAAKP,MAGjB,QAASoH,GAASC,EAAGC,GACnB,MAAc,KAAND,GAAiB,IAANC,GAAaD,IAAMC,GAAMC,MAAMF,IAAME,MAAMD,GAYhE,MAtBAtE,GAASmE,EAAkBxD,GAa3BwD,EAAiBlF,UAAUqC,KAAO,SAAUrD,GACtCjB,KAAK4F,MAAQ5F,KAAKkH,IAAME,EAASnG,EAAGjB,KAAKiH,SAC3CjH,KAAKkE,GAAGW,QAAO,GACf7E,KAAKkE,GAAGY,gBAGZqC,EAAiBlF,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IAClEqG,EAAiBlF,UAAU2C,UAAY,WAAc5E,KAAKkE,GAAGW,QAAO,GAAQ7E,KAAKkE,GAAGY,eAE7EqC,GACPhF,EAQFH,GAAgBwF,SAAW,SAAUC,EAAeC,GAClD,MAAO,IAAIhB,GAAmB1G,KAAMyH,EAAeC,GAGrD,IAAIC,GAAmB,SAAUhE,GAE/B,QAASgE,GAAgBtG,EAAQmC,GAC/BxD,KAAKqB,OAASA,EACdrB,KAAKuF,IAAM/B,EACXG,EAAUpD,KAAKP,MAOjB,MAXAgD,GAAS2E,EAAiBhE,GAO1BgE,EAAgB1F,UAAU+B,cAAgB,SAAUpC,GAClD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAI+F,GAAchG,EAAG5B,KAAKuF,IAAKvF,KAAKqB,UAG5DsG,GACPtE,GAEEuE,EAAiB,SAAUjE,GAG7B,QAASiE,GAAchG,EAAG4B,EAAIwC,GAC5BhG,KAAKkE,GAAKtC,EACV5B,KAAKuF,IAAM/B,EACXxD,KAAKyF,GAAKO,EACVhG,KAAK4F,GAAK,EACV5F,KAAK+D,GAAK,EACVJ,EAAUpD,KAAKP,MAkBjB,MA1BAgD,GAAS4E,EAAejE,GAWxBiE,EAAc3F,UAAUqC,KAAO,SAAUrD,GACvC,GAAIjB,KAAKuF,IAAK,CACZ,GAAIU,GAAS1C,EAASvD,KAAKuF,KAAKtE,EAAGjB,KAAK4F,KAAM5F,KAAKyF,GACnD,IAAIQ,IAAWlF,EAAY,MAAOf,MAAKkE,GAAGM,QAAQyB,EAAOnF,EACzDoF,SAAQD,IAAYjG,KAAK+D,SAEzB/D,MAAK+D,MAGT6D,EAAc3F,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IAC/D8G,EAAc3F,UAAU2C,UAAY,WAClC5E,KAAKkE,GAAGW,OAAO7E,KAAK+D,IACpB/D,KAAKkE,GAAGY,eAGH8C,GACPzF,EAWFH,GAAgB6F,MAAQ,SAAUvG,EAAWC,GAC3C,GAAIiC,GAAK9B,EAAaJ,EAAWC,EAAS,EAC1C,OAAO,IAAIoG,GAAgB3H,KAAMwD,GAGnC,IAAIsE,GAAqB,SAAUnE,GAEjC,QAASmE,GAAkBzG,EAAQP,EAAG+F,GACpC7G,KAAKqB,OAASA,EACdrB,KAAK+H,GAAKjH,EACVd,KAAKkH,GAAKL,EACVlD,EAAUpD,KAAKP,MAajB,MAlBAgD,GAAS8E,EAAmBnE,GAQ5BmE,EAAkB7F,UAAU+B,cAAgB,SAAUpC,GACpD,MAAI5B,MAAKkH,GAAK,GACZtF,EAAEiD,OAAO,IACTjD,EAAEkD,cACKzC,GAGFrC,KAAKqB,OAAOQ,UAAU,GAAImG,GAAgBpG,EAAG5B,KAAK+H,GAAI/H,KAAKkH,MAG7DY,GACPzE,GAEE2E,EAAmB,SAAUrE,GAE/B,QAASqE,GAAgBpG,EAAGd,EAAG+F,GAC7B7G,KAAKkE,GAAKtC,EACV5B,KAAK+H,GAAKjH,EACVd,KAAKkH,GAAKL,EACV7G,KAAK4F,GAAK,EACVjC,EAAUpD,KAAKP,MAajB,MAnBAgD,GAASgF,EAAiBrE,GAS1BqE,EAAgB/F,UAAUqC,KAAO,SAAUrD,GACrCjB,KAAK4F,IAAM5F,KAAKkH,IAAMjG,IAAMjB,KAAK+H,KACnC/H,KAAKkE,GAAGW,OAAO7E,KAAK4F,IACpB5F,KAAKkE,GAAGY,eAEV9E,KAAK4F,MAEPoC,EAAgB/F,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IACjEkH,EAAgB/F,UAAU2C,UAAY,WAAc5E,KAAKkE,GAAGW,OAAO,IAAK7E,KAAKkE,GAAGY,eAEzEkD,GACP7F,EAQFH,GAAgBiG,QAAU,SAASR,EAAeC,GAChD,GAAIb,IAAKa,GAAa,CAEtB,OADAZ,MAAKC,IAAIF,KAAOG,EAAAA,IAAaH,EAAI,GAC1B,GAAIiB,GAAkB9H,KAAMyH,EAAeZ,GAGpD,IAAIqB,GAAiB,SAAUvE,GAE7B,QAASuE,GAAc7G,EAAQmC,GAC7BxD,KAAKqB,OAASA,EACdrB,KAAKuF,IAAM/B,EACXG,EAAUpD,KAAKP,MAOjB,MAXAgD,GAASkF,EAAevE,GAOxBuE,EAAcjG,UAAU+B,cAAgB,SAAUpC,GAChD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAIsG,GAAYvG,EAAG5B,KAAKuF,IAAKvF,KAAKqB,UAG1D6G,GACP7E,GAEE8E,EAAe,SAAUxE,GAG3B,QAASwE,GAAYvG,EAAG4B,EAAIwC,GAC1BhG,KAAKkE,GAAKtC,EACV5B,KAAKuF,IAAM/B,EACXxD,KAAKyF,GAAKO,EACVhG,KAAK4F,GAAK,EACV5F,KAAK+D,GAAK,EACVJ,EAAUpD,KAAKP,MAkBjB,MA1BAgD,GAASmF,EAAaxE,GAWtBwE,EAAYlG,UAAUqC,KAAO,SAAUrD,GACrC,GAAIjB,KAAKuF,IAAK,CACZ,GAAIU,GAAS1C,EAASvD,KAAKuF,KAAKtE,EAAGjB,KAAK4F,KAAM5F,KAAKyF,GACnD,IAAIQ,IAAWlF,EAAY,MAAOf,MAAKkE,GAAGM,QAAQyB,EAAOnF,EACzDd,MAAK+D,IAAMkC,MAEXjG,MAAK+D,IAAM9C,GAGfkH,EAAYlG,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IAC7DqH,EAAYlG,UAAU2C,UAAY,WAChC5E,KAAKkE,GAAGW,OAAO7E,KAAK+D,IACpB/D,KAAKkE,GAAGY,eAGHqD,GACPhG,EAQFH,GAAgBoG,IAAM,SAAUC,EAAa9G,GAC3C,GAAIiC,GAAK9B,EAAa2G,EAAa9G,EAAS,EAC5C,OAAO,IAAI2G,GAAclI,KAAMwD,IAYjCxB,EAAgBsG,MAAQ,SAAUD,EAAajB,GAE7C,MADAA,KAAaA,EAAWzE,GACjB,GAAIe,GAAoB1D,KAAMqI,EAAa,SAAUpH,EAAGsH,GAAK,MAAwB,GAAjBnB,EAASnG,EAAGsH,MAWzFvG,EAAgBwG,IAAM,SAAUpB,GAC9B,MAAOpH,MAAKsI,MAAM5F,EAAU0E,GAAUqB,IAAIzH,IAY5CgB,EAAgB0G,MAAQ,SAAUL,EAAajB,GAE7C,MADAA,KAAaA,EAAWzE,GACjB,GAAIe,GAAoB1D,KAAMqI,EAAajB,IAWpDpF,EAAgB2G,IAAM,SAAUvB,GAC9B,MAAOpH,MAAK0I,MAAMhG,EAAU0E,GAAUqB,IAAIzH,GAG5C,IAAI4H,GAAqB,SAAUjF,GAEjC,QAASiF,GAAkBvH,EAAQmC,GACjCxD,KAAKqB,OAASA,EACdrB,KAAKuF,IAAM/B,EACXG,EAAUpD,KAAKP,MAOjB,MAXAgD,GAAS4F,EAAmBjF,GAO5BiF,EAAkB3G,UAAU+B,cAAgB,SAAUpC,GACpD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAIgH,GAAgBjH,EAAG5B,KAAKuF,IAAKvF,KAAKqB,UAG9DuH,GACPvF,GAEEwF,EAAmB,SAASlF,GAE9B,QAASkF,GAAgBjH,EAAG4B,EAAIwC,GAC9BhG,KAAKkE,GAAKtC,EACV5B,KAAKuF,IAAM/B,EACXxD,KAAKyF,GAAKO,EACVhG,KAAK+D,GAAK,EACV/D,KAAK8I,GAAK,EACVnF,EAAUpD,KAAKP,MAoBjB,MA3BAgD,GAAS6F,EAAiBlF,GAU1BkF,EAAgB5G,UAAUqC,KAAO,SAAUrD,GACzC,GAAGjB,KAAKuF,IAAK,CACX,GAAIwD,GAAIxF,EAASvD,KAAKuF,KAAKtE,EAAGjB,KAAK+D,KAAM/D,KAAKyF,GAC9C,IAAIsD,IAAMhI,EAAY,MAAOf,MAAKkE,GAAGM,QAAQuE,EAAEjI,EAC/Cd,MAAK8I,IAAMC,MAEX/I,MAAK+D,KACL/D,KAAK8I,IAAM7H,GAGf4H,EAAgB5G,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IACjE+H,EAAgB5G,UAAU2C,UAAY,WACpC,MAAgB,KAAZ5E,KAAK+D,GAAmB/D,KAAKkE,GAAGM,QAAQ,GAAIrD,KAChDnB,KAAKkE,GAAGW,OAAO7E,KAAK8I,GAAK9I,KAAK+D,QAC9B/D,MAAKkE,GAAGY,gBAGH+D,GACP1G,EAQFH,GAAgBgH,QAAU,SAAUX,EAAa9G,GAC/C,GAAmBiC,GAAfnC,EAASrB,IAIb,OAHI4C,GAAWyF,KACb7E,EAAK9B,EAAa2G,EAAa9G,EAAS,IAEnC,GAAIqH,GAAkBvH,EAAQmC,IAevCxB,EAAgBiH,cAAgB,SAAUC,EAAQ9B,GAChD,GAAI+B,GAAQnJ,IAEZ,OADAoH,KAAaA,EAAW3E,GACjB,GAAId,GAAoB,SAAUC,GACvC,GAAIwH,IAAQ,EAAOC,GAAQ,EAAOC,KAASC,KACvCC,EAAgBL,EAAMtH,UAAU,SAAUZ,GAC5C,GAAIsI,EAAGrI,OAAS,EAAG,CACjB,GAAIuI,GAAIF,EAAGG,QACPC,EAAQpG,EAAS6D,GAAUqC,EAAGxI,EAClC,IAAI0I,IAAU5I,EAAY,MAAOa,GAAE4C,QAAQmF,EAAM7I,EAC5C6I,KACH/H,EAAEiD,QAAO,GACTjD,EAAEkD,mBAEKuE,IACTzH,EAAEiD,QAAO,GACTjD,EAAEkD,eAEFwE,EAAG5E,KAAKzD,IAET,SAASH,GAAKc,EAAE4C,QAAQ1D,IAAO,WAChCsI,GAAQ,EACU,IAAdE,EAAGpI,SACDqI,EAAGrI,OAAS,GACdU,EAAEiD,QAAO,GACTjD,EAAEkD,eACOuE,IACTzH,EAAEiD,QAAO,GACTjD,EAAEkD,mBAKPhC,EAAYoG,IAAWnG,EAAWmG,MAAaA,EAAS/F,EAAe+F,IACxErG,EAAUqG,KAAYA,EAASjG,EAAsBiG,GACrD,IAAIU,GAAgBV,EAAOrH,UAAU,SAAUZ,GAC7C,GAAIqI,EAAGpI,OAAS,EAAG,CACjB,GAAIuI,GAAIH,EAAGI,QACPC,EAAQpG,EAAS6D,GAAUqC,EAAGxI,EAClC,IAAI0I,IAAU5I,EAAY,MAAOa,GAAE4C,QAAQmF,EAAM7I,EAC5C6I,KACH/H,EAAEiD,QAAO,GACTjD,EAAEkD,mBAEKsE,IACTxH,EAAEiD,QAAO,GACTjD,EAAEkD,eAEFyE,EAAG7E,KAAKzD,IAET,SAASH,GAAKc,EAAE4C,QAAQ1D,IAAO,WAChCuI,GAAQ,EACU,IAAdE,EAAGrI,SACDoI,EAAGpI,OAAS,GACdU,EAAEiD,QAAO,GACTjD,EAAEkD,eACOsE,IACTxH,EAAEiD,QAAO,GACTjD,EAAEkD,iBAIR,OAAO,IAAI5C,GAAiBsH,EAAeI,IAC1CT,GAGL,IAAIU,GAAuB,SAAUlG,GAEnC,QAASkG,GAAoBxI,EAAQyI,EAAGC,GACtC/J,KAAKqB,OAASA,EACdrB,KAAK4F,GAAKkE,EACV9J,KAAKgK,GAAKD,EACVpG,EAAUpD,KAAKP,MAOjB,MAZAgD,GAAS6G,EAAqBlG,GAQ9BkG,EAAoB5H,UAAU+B,cAAgB,SAAUpC,GACtD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAIoI,GAAkBrI,EAAG5B,KAAK4F,GAAI5F,KAAKgK,MAG/DH,GACPxG,GAEE4G,EAAqB,SAAUtG,GAGjC,QAASsG,GAAkBrI,EAAGkI,EAAGC,GAC/B/J,KAAKkE,GAAKtC,EACV5B,KAAK4F,GAAKkE,EACV9J,KAAKgK,GAAKD,EACVpG,EAAUpD,KAAKP,MAmBjB,MAzBAgD,GAASiH,EAAmBtG,GAS5BsG,EAAkBhI,UAAUqC,KAAO,SAAUrD,GACzB,IAAdjB,KAAK4F,OACP5F,KAAKkE,GAAGW,OAAO5D,GACfjB,KAAKkE,GAAGY,gBAGZmF,EAAkBhI,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IACnEmJ,EAAkBhI,UAAU2C,UAAY,WAClC5E,KAAKgK,KAAOvJ,EACdT,KAAKkE,GAAGM,QAAQ,GAAIlB,KAEpBtD,KAAKkE,GAAGW,OAAO7E,KAAKgK,IACpBhK,KAAKkE,GAAGY,gBAILmF,GACP9H,EAQFH,GAAgBkI,UAAa,SAAUC,EAAOC,GAC5C,GAAY,EAARD,EAAa,KAAM,IAAI7G,EAC3B,OAAO,IAAIuG,GAAoB7J,KAAMmK,EAAOC,GAG9C,IAAIC,GAAkB,SAAS1G,GAE7B,QAAS0G,GAAezI,EAAG0I,EAAKtE,GAC9BhG,KAAKkE,GAAKtC,EACV5B,KAAKuK,KAAOD,EACZtK,KAAKyF,GAAKO,EACVhG,KAAK4F,GAAK,EACV5F,KAAKoE,KAAM,EACXpE,KAAKmE,GAAK,KACVR,EAAUpD,KAAKP,MAkCjB,MA1CAgD,GAASqH,EAAgB1G,GAWzB0G,EAAepI,UAAUqC,KAAO,SAAUrD,GACxC,GAAIuJ,IAAc,CAClB,IAAIxK,KAAKuK,KAAKjJ,UAAW,CACvB,GAAImJ,GAAMlH,EAASvD,KAAKuK,KAAKjJ,WAAWL,EAAGjB,KAAK4F,KAAM5F,KAAKyF,GAC3D,IAAIgF,IAAQ1J,EAAY,MAAOf,MAAKkE,GAAGM,QAAQiG,EAAI3J,EACnDoF,SAAQuE,KAASD,GAAc,OACrBxK,MAAKuK,KAAKjJ,YACpBkJ,GAAc,EAEhB,IAAIA,EAAa,CACf,GAAIxK,KAAKoE,IACP,MAAOpE,MAAKkE,GAAGM,QAAQ,GAAIkG,OAAM,oDAEnC1K,MAAKoE,KAAM,EACXpE,KAAKmE,GAAKlD,IAGdoJ,EAAepI,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IAChEuJ,EAAepI,UAAU2C,UAAY,WAC/B5E,KAAKoE,KACPpE,KAAKkE,GAAGW,OAAO7E,KAAKmE,IACpBnE,KAAKkE,GAAGY,eAED9E,KAAKuK,KAAKH,eAAiB3J,EAClCT,KAAKkE,GAAGM,QAAQ,GAAIrD,KAEpBnB,KAAKkE,GAAGW,OAAO7E,KAAKuK,KAAKH,cACzBpK,KAAKkE,GAAGY,gBAILuF,GACPlI,EAOAH,GAAgB2I,OAAS,SAAUrJ,EAAWC,GAC5C,GAAI+I,MAAUjJ,EAASrB,IAUvB,IAREsK,EAD0B,gBAAjBzJ,WAAU,GACbA,UAAU,IAGdS,UAAWT,UAAU,GACrBU,QAASV,UAAU,GACnBuJ,aAAcvJ,UAAU,IAGxB+B,EAAY0H,EAAIhJ,WAAY,CAC9B,GAAIkC,GAAK8G,EAAIhJ,SACbgJ,GAAIhJ,UAAYI,EAAa8B,EAAI8G,EAAI/I,QAAS,GAEhD,MAAO,IAAII,GAAoB,SAAUC,GACvC,MAAOP,GAAOQ,UAAU,GAAIwI,GAAezI,EAAG0I,EAAKjJ,KAClDA,GAGP,IAAIuJ,GAAmB,SAAUjH,GAE/B,QAASiH,GAAgBvJ,EAAQiJ,GAC/BtK,KAAKqB,OAASA,EACdrB,KAAKuK,KAAOD,EACZ3G,EAAUpD,KAAKP,MAOjB,MAXAgD,GAAS4H,EAAiBjH,GAO1BiH,EAAgB3I,UAAU+B,cAAgB,SAAUpC,GAClD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAIgJ,IAAcjJ,EAAG5B,KAAKuK,KAAMvK,KAAKqB,UAG7DuJ,GACPvH,GAEEwH,GAAiB,SAASlH,GAE5B,QAASkH,GAAcjJ,EAAG0I,EAAKtE,GAC7BhG,KAAKkE,GAAKtC,EACV5B,KAAKuK,KAAOD,EACZtK,KAAKyF,GAAKO,EACVhG,KAAK4F,GAAK,EACVjC,EAAUpD,KAAKP,MA0BjB,MAhCAgD,GAAS6H,EAAelH,GASxBkH,EAAc5I,UAAUqC,KAAO,SAAUrD,GACvC,GAAIjB,KAAKuK,KAAKjJ,UAAW,CACvB,GAAImJ,GAAMlH,EAASvD,KAAKuK,KAAKjJ,WAAWL,EAAGjB,KAAK4F,KAAM5F,KAAKyF,GAC3D,IAAIgF,IAAQ1J,EAAY,MAAOf,MAAKkE,GAAGM,QAAQiG,EAAI3J,EAC/CoF,SAAQuE,KACVzK,KAAKkE,GAAGW,OAAO5D,GACfjB,KAAKkE,GAAGY,mBAEA9E,MAAKuK,KAAKjJ,YACpBtB,KAAKkE,GAAGW,OAAO5D,GACfjB,KAAKkE,GAAGY,gBAGZ+F,EAAc5I,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IAC/D+J,EAAc5I,UAAU2C,UAAY,WAC9B5E,KAAKuK,KAAKH,eAAiB3J,EAC7BT,KAAKkE,GAAGM,QAAQ,GAAIrD,KAEpBnB,KAAKkE,GAAGW,OAAO7E,KAAKuK,KAAKH,cACzBpK,KAAKkE,GAAGY,gBAIL+F,GACP1I,EAMFH,GAAgBmH,MAAQ,WACtB,GAAImB,KAUJ,IAREA,EAD0B,gBAAjBzJ,WAAU,GACbA,UAAU,IAGdS,UAAWT,UAAU,GACrBU,QAASV,UAAU,GACnBuJ,aAAcvJ,UAAU,IAGxB+B,EAAY0H,EAAIhJ,WAAY,CAC9B,GAAIkC,GAAK8G,EAAIhJ,SACbgJ,GAAIhJ,UAAYI,EAAa8B,EAAI8G,EAAI/I,QAAS,GAEhD,MAAO,IAAIqJ,GAAgB5K,KAAMsK,GAGnC,IAAIQ,IAAkB,SAAUnH,GAE9B,QAASmH,GAAezJ,EAAQiJ,GAC9BtK,KAAKqB,OAASA,EACdrB,KAAKuK,KAAOD,EACZ3G,EAAUpD,KAAKP,MAOjB,MAXAgD,GAAS8H,EAAgBnH,GAOzBmH,EAAe7I,UAAU+B,cAAgB,SAAUpC,GACjD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAIkJ,IAAanJ,EAAG5B,KAAKuK,KAAMvK,KAAKqB,UAG5DyJ,GACPzH,GAEE0H,GAAgB,SAASpH,GAE3B,QAASoH,GAAanJ,EAAG0I,EAAKtE,GAC5BhG,KAAKkE,GAAKtC,EACV5B,KAAKuK,KAAOD,EACZtK,KAAKyF,GAAKO,EACVhG,KAAK4F,GAAK,EACV5F,KAAKoE,KAAM,EACXpE,KAAKmE,GAAK,KACVR,EAAUpD,KAAKP,MA+BjB,MAvCAgD,GAAS+H,EAAcpH,GAWvBoH,EAAa9I,UAAUqC,KAAO,SAAUrD,GACtC,GAAIuJ,IAAc,CAClB,IAAIxK,KAAKuK,KAAKjJ,UAAW,CACvB,GAAImJ,GAAMlH,EAASvD,KAAKuK,KAAKjJ,WAAWL,EAAGjB,KAAK4F,KAAM5F,KAAKyF,GAC3D,IAAIgF,IAAQ1J,EAAY,MAAOf,MAAKkE,GAAGM,QAAQiG,EAAI3J,EACnDoF,SAAQuE,KAASD,GAAc,OACrBxK,MAAKuK,KAAKjJ,YACpBkJ,GAAc,EAEZA,KACFxK,KAAKoE,KAAM,EACXpE,KAAKmE,GAAKlD,IAGd8J,EAAa9I,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IAC9DiK,EAAa9I,UAAU2C,UAAY,WAC7B5E,KAAKoE,KACPpE,KAAKkE,GAAGW,OAAO7E,KAAKmE,IACpBnE,KAAKkE,GAAGY,eAED9E,KAAKuK,KAAKH,eAAiB3J,EAClCT,KAAKkE,GAAGM,QAAQ,GAAIrD,KAEpBnB,KAAKkE,GAAGW,OAAO7E,KAAKuK,KAAKH,cACzBpK,KAAKkE,GAAGY,gBAILiG,GACP5I,EAMFH,GAAgBgJ,KAAO,WACrB,GAAIV,KAUJ,IAREA,EAD0B,gBAAjBzJ,WAAU,GACbA,UAAU,IAGdS,UAAWT,UAAU,GACrBU,QAASV,UAAU,GACnBuJ,aAAcvJ,UAAU,IAGxB+B,EAAY0H,EAAIhJ,WAAY,CAC9B,GAAIkC,GAAK8G,EAAIhJ,SACbgJ,GAAIhJ,UAAYI,EAAa8B,EAAI8G,EAAI/I,QAAS,GAEhD,MAAO,IAAIuJ,IAAe9K,KAAMsK,GAGlC,IAAIxI,IAAqB,SAAS6B,GAEhC,QAAS7B,GAAkBqD,EAAU9D,EAAQI,EAAUD,GACrDxB,KAAKkE,GAAKiB,EACVnF,KAAKyF,GAAKpE,EACVrB,KAAKiL,IAAMxJ,EACXzB,KAAKkL,GAAK1J,EACVxB,KAAK4F,GAAK,EACVjC,EAAUpD,KAAKP,MAuBjB,MA9BAgD,GAASlB,EAAmB6B,GAU5B7B,EAAkBG,UAAUqC,KAAO,SAAUrD,GAC3C,GAAIkK,GAAY5H,EAASvD,KAAKiL,KAAKhK,EAAGjB,KAAK4F,GAAI5F,KAAKyF,GACpD,OAAI0F,KAAcpK,EAAmBf,KAAKkE,GAAGM,QAAQ2G,EAAUrK,QAC3DqK,GACFnL,KAAKkE,GAAGW,OAAO7E,KAAKkL,GAAKlL,KAAK4F,GAAK3E,GACnCjB,KAAKkE,GAAGY,eAER9E,KAAK4F,OAIT9D,EAAkBG,UAAU0C,MAAQ,SAAU7D,GAC5Cd,KAAKkE,GAAGM,QAAQ1D,IAGlBgB,EAAkBG,UAAU2C,UAAY,WACtC5E,KAAKkL,IAAMlL,KAAKkE,GAAGW,OAAO,IAC1B7E,KAAKkE,GAAGY,eAGHhD,GACPK,EAeFH,GAAgBoJ,KAAO,SAAU9J,EAAWC,GAC1C,MAAOH,GAAUpB,KAAMsB,EAAWC,GAAS,IAU7CS,EAAgBqJ,UAAY,SAAU/J,EAAWC,GAC/C,MAAOH,GAAUpB,KAAMsB,EAAWC,GAAS,GAG7C,IAAI+J,IAAmB,SAAU3H,GAE/B,QAAS2H,GAAgBjK,GACvBrB,KAAKqB,OAASA,EACdsC,EAAUpD,KAAKP,MAOjB,MAVAgD,GAASsI,EAAiB3H,GAM1B2H,EAAgBrJ,UAAU+B,cAAgB,SAAUpC,GAClD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAI0J,IAAc3J,KAG1C0J,GACPjI,GAEEkI,GAAiB,SAAU5H,GAE7B,QAAS4H,GAAc3J,GACrB5B,KAAKkE,GAAKtC,EACV5B,KAAKyF,GAAK,GAAIxF,GAAKuL,IACnB7H,EAAUpD,KAAKP,MAgBjB,MApBAgD,GAASuI,EAAe5H,GAOxB4H,EAActJ,UAAUqC,KAAO,SAAUrD,GACvCjB,KAAKyF,GAAGgG,IAAIxK,IAGdsK,EAActJ,UAAU0C,MAAQ,SAAU7D,GACxCd,KAAKkE,GAAGM,QAAQ1D,IAGlByK,EAActJ,UAAU2C,UAAY,WAClC5E,KAAKkE,GAAGW,OAAO7E,KAAKyF,IACpBzF,KAAKkE,GAAGY,eAGHyG,GACPpJ,EAMFH,GAAgB0J,MAAQ,WACtB,GAAwB,mBAAbzL,GAAKuL,IAAuB,KAAM,IAAI/H,UACjD,OAAO,IAAI6H,IAAgBtL,MAG7B,IAAI2L,IAAmB,SAAUhI,GAE/B,QAASgI,GAAgBtK,EAAQuC,EAAG9C,GAClCd,KAAKqB,OAASA,EACdrB,KAAK8D,GAAKF,EACV5D,KAAK+H,GAAKjH,EACV6C,EAAUpD,KAAKP,MAOjB,MAZAgD,GAAS2I,EAAiBhI,GAQ1BgI,EAAgB1J,UAAU+B,cAAgB,SAAUpC,GAClD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAI+J,IAAchK,EAAG5B,KAAK8D,GAAI9D,KAAK+H,MAG3D4D,GACPtI,GAEEuI,GAAiB,SAAUjI,GAE7B,QAASiI,GAAchK,EAAGgC,EAAG9C,GAC3Bd,KAAKkE,GAAKtC,EACV5B,KAAK8D,GAAKF,EACV5D,KAAK+H,GAAKjH,EACVd,KAAK6L,GAAK,GAAI5L,GAAK6L,IACnBnI,EAAUpD,KAAKP,MAwBjB,MA9BAgD,GAAS4I,EAAejI,GASxBiI,EAAc3J,UAAUqC,KAAO,SAAUrD,GACvC,GAAIsD,GAAMhB,EAASvD,KAAK8D,IAAI7C,EAC5B,IAAIsD,IAAQxD,EAAY,MAAOf,MAAKkE,GAAGM,QAAQD,EAAIzD,EACnD,IAAI6F,GAAO1F,CACX,OAAIjB,MAAK+H,KACPpB,EAAOpD,EAASvD,KAAK+H,IAAI9G,GACrB0F,IAAS5F,GAAmBf,KAAKkE,GAAGM,QAAQmC,EAAK7F,OAGvDd,MAAK6L,GAAGE,IAAIxH,EAAKoC,IAGnBiF,EAAc3J,UAAU0C,MAAQ,SAAU7D,GACxCd,KAAKkE,GAAGM,QAAQ1D,IAGlB8K,EAAc3J,UAAU2C,UAAY,WAClC5E,KAAKkE,GAAGW,OAAO7E,KAAK6L,IACpB7L,KAAKkE,GAAGY,eAGH8G,GACPzJ,EAQFH,GAAgBgK,MAAQ,SAAU3D,EAAa4D,GAC7C,GAAwB,mBAAbhM,GAAK6L,IAAuB,KAAM,IAAIrI,UACjD,OAAO,IAAIkI,IAAgB3L,KAAMqI,EAAa4D,GAGhD,IAAIC,IAAmB,SAAUvI,GAE/B,QAASuI,GAAgB7K,EAAQiG,EAAGxG,GAClCd,KAAKqB,OAASA,EACdrB,KAAKmM,GAAK7E,EACVtH,KAAK+H,GAAKjH,EACV6C,EAAUpD,KAAKP,MAOjB,MAZAgD,GAASkJ,EAAiBvI,GAQ1BuI,EAAgBjK,UAAU+B,cAAgB,SAAUpC,GAClD,MAAO5B,MAAKqB,OAAOQ,UAAU,GAAIuK,IAAcxK,EAAG5B,KAAKmM,GAAInM,KAAK+H,MAG3DmE,GACP7I,GAEE+I,GAAiB,SAAUzI,GAG7B,QAASyI,GAAcxK,EAAG0F,EAAGxG,GAC3Bd,KAAKkE,GAAKtC,EACV5B,KAAKmM,GAAK7E,EACVtH,KAAK+H,GAAKjH,EACVd,KAAK4F,GAAK,EACVjC,EAAUpD,KAAKP,MAgBjB,MAvBAgD,GAASoJ,EAAezI,GAUxByI,EAAcnK,UAAUqC,KAAO,SAAUrD,GACnCjB,KAAK4F,IAAM5F,KAAKmM,KACdnM,KAAK+H,KAAO/H,KAAK4F,GACnB5F,KAAKkE,GAAGY,cAER9E,KAAKkE,GAAGW,OAAO5D,IAGnBjB,KAAK4F,MAEPwG,EAAcnK,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IAC/DsL,EAAcnK,UAAU2C,UAAY,WAAc5E,KAAKkE,GAAGY,eAEnDsH,GACPjK,EAUFH,GAAgBqK,MAAQ,SAAUC,EAAOC,GACvC,GAAIC,GAAQF,GAAS,CACrB,IAAY,EAARE,EAAa,KAAM,IAAInM,GAAGiD,uBAC9B,IAAmB,gBAARiJ,IAA0BC,EAAND,EAC7B,KAAM,IAAIlM,GAAGiD,uBAEf,OAAO,IAAI4I,IAAgBlM,KAAMwM,EAAOD,GAG1C,IAAIE,IAAyB,SAAU9I,GAErC,QAAS8I,GAAsBpL,EAAQP,EAAG+F,GACxC7G,KAAKqB,OAASA,EACdrB,KAAK+H,GAAKjH,EACVd,KAAKkH,GAAKL,EACVlD,EAAUpD,KAAKP,MAajB,MAlBAgD,GAASyJ,EAAuB9I,GAQhC8I,EAAsBxK,UAAU+B,cAAgB,SAAUpC,GACxD,MAAI5B,MAAKkH,GAAK,GACZtF,EAAEiD,OAAO,IACTjD,EAAEkD,cACKzC,GAGFrC,KAAKqB,OAAOQ,UAAU,GAAI6K,IAAoB9K,EAAG5B,KAAK+H,GAAI/H,KAAKkH,MAGjEuF,GACPpJ,GAEEqJ,GAAuB,SAAU/I,GAEnC,QAAS+I,GAAoB9K,EAAGd,EAAG+F,GACjC7G,KAAKkE,GAAKtC,EACV5B,KAAK+H,GAAKjH,EACVd,KAAKkH,GAAKL,EACV7G,KAAKmE,GAAK,EACVnE,KAAKoE,KAAM,EACXpE,KAAK4F,GAAK,EACVjC,EAAUpD,KAAKP,MAoBjB,MA5BAgD,GAAS0J,EAAqB/I,GAW9B+I,EAAoBzK,UAAUqC,KAAO,SAAUrD,GACzCjB,KAAK4F,IAAM5F,KAAKkH,IAAMjG,IAAMjB,KAAK+H,KACnC/H,KAAKoE,KAAM,EACXpE,KAAKmE,GAAKnE,KAAK4F,IAEjB5F,KAAK4F,MAEP8G,EAAoBzK,UAAU0C,MAAQ,SAAU7D,GAAKd,KAAKkE,GAAGM,QAAQ1D,IACrE4L,EAAoBzK,UAAU2C,UAAY,WACpC5E,KAAKoE,IACPpE,KAAKkE,GAAGW,OAAO7E,KAAKmE,IAEpBnE,KAAKkE,GAAGW,OAAO,IAEjB7E,KAAKkE,GAAGY,eAGH4H,GACPvK,EAcF,OANAH,GAAgB2K,YAAc,SAASlF,EAAeC,GACpD,GAAIb,IAAKa,GAAa,CAEtB,OADAZ,MAAKC,IAAIF,KAAOG,EAAAA,IAAaH,EAAI,GAC1B,GAAI4F,IAAsBzM,KAAMyH,EAAeZ,IAGjDxG"} \ No newline at end of file diff --git a/node_modules/rx-lite-aggregates/rx.lite.aggregates.min.js b/node_modules/rx-lite-aggregates/rx.lite.aggregates.min.js deleted file mode 100644 index 649e289..0000000 --- a/node_modules/rx-lite-aggregates/rx.lite.aggregates.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/ -(function(a){function b(a){return a&&a.Object===Object?a:null}var c={"function":!0,object:!0},d=c[typeof exports]&&exports&&!exports.nodeType?exports:null,e=c[typeof module]&&module&&!module.nodeType?module:null,f=b(d&&e&&"object"==typeof global&&global),g=b(c[typeof self]&&self),h=b(c[typeof window]&&window),i=(e&&e.exports===d?d:null,b(c[typeof this]&&this)),j=f||h!==(i&&i.window)&&h||g||i||Function("return this")();"function"==typeof define&&define.amd?define(["./rx.lite"],function(b,c){return a(j,c,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(j,module.exports,require("rx-lite")):j.Rx=a(j,{},j.Rx)}).call(this,function(a,b,c,d){function e(a){return function(){try{return a.apply(this,arguments)}catch(b){return C.e=b,C}}}function f(a){if(0===a.length)throw new z;return a[0]}function g(a,b,c,d){var e=y(b,c,3);return new k(function(b){return a.subscribe(new da(b,a,e,d))},a)}var h=c.Observable,i=h.prototype,j=c.BinaryDisposable,k=c.AnonymousObservable,l=c.internals.AbstractObserver,m=c.Disposable.empty,n=c.helpers,o=n.defaultComparer,p=n.identity,q=n.defaultSubComparer,r=n.isFunction,s=n.isPromise,t=n.isArrayLike,u=n.isIterable,v=c.internals.inherits,w=h.fromPromise,x=h.from,y=c.internals.bindCallback,z=c.EmptyError,A=c.ObservableBase,B=c.ArgumentOutOfRangeError,C={e:{}},D=c.internals.tryCatch=function(a){if(!r(a))throw new TypeError("fn must be a function");return e(a)},E=function(a){function b(b,c,d){this.source=b,this._k=c,this._c=d,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new F(a,this._k,this._c))},b}(A),F=function(a){function b(b,c,d){this._o=b,this._k=c,this._c=d,this._v=null,this._hv=!1,this._l=[],a.call(this)}return v(b,a),b.prototype.next=function(a){var b=D(this._k)(a);if(b===C)return this._o.onError(b.e);var c=0;if(this._hv){if(c=D(this._c)(b,this._v),c===C)return this._o.onError(c.e)}else this._hv=!0,this._v=b;c>0&&(this._v=b,this._l=[]),c>=0&&this._l.push(a)},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onNext(this._l),this._o.onCompleted()},b}(l),G=function(a){function b(b,c,d,e){this.source=b,this.accumulator=c,this.hasSeed=d,this.seed=e,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new H(a,this))},b}(A),H=function(a){function b(b,c){this._o=b,this._p=c,this._fn=c.accumulator,this._hs=c.hasSeed,this._s=c.seed,this._ha=!1,this._a=null,this._hv=!1,this._i=0,a.call(this)}return v(b,a),b.prototype.next=function(a){return!this._hv&&(this._hv=!0),this._ha?this._a=D(this._fn)(this._a,a,this._i,this._p):(this._a=this._hs?D(this._fn)(this._s,a,this._i,this._p):a,this._ha=!0),this._a===C?this._o.onError(this._a.e):void this._i++},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._hv&&this._o.onNext(this._a),!this._hv&&this._hs&&this._o.onNext(this._s),!this._hv&&!this._hs&&this._o.onError(new z),this._o.onCompleted()},b}(l);i.reduce=function(){var a,b=!1,c=arguments[0];return 2===arguments.length&&(b=!0,a=arguments[1]),new G(this,c,b,a)};var I=function(a){function b(b,c){this.source=b,this._fn=c,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new J(a,this._fn,this.source))},b}(A),J=function(a){function b(b,c,d){this._o=b,this._fn=c,this._s=d,this._i=0,a.call(this)}return v(b,a),b.prototype.next=function(a){var b=D(this._fn)(a,this._i++,this._s);return b===C?this._o.onError(b.e):void(Boolean(b)&&(this._o.onNext(!0),this._o.onCompleted()))},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onNext(!1),this._o.onCompleted()},b}(l);i.some=function(a,b){var c=y(a,b,3);return new I(this,c)};var K=function(a){function b(b){this.source=b,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new L(a))},b}(A),L=function(a){function b(b){this._o=b,a.call(this)}return v(b,a),b.prototype.next=function(){this._o.onNext(!1),this._o.onCompleted()},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onNext(!0),this._o.onCompleted()},b}(l);i.isEmpty=function(){return new K(this)};var M=function(a){function b(b,c){this.source=b,this._fn=c,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new N(a,this._fn,this.source))},b}(A),N=function(a){function b(b,c,d){this._o=b,this._fn=c,this._s=d,this._i=0,a.call(this)}return v(b,a),b.prototype.next=function(a){var b=D(this._fn)(a,this._i++,this._s);return b===C?this._o.onError(b.e):void(Boolean(b)||(this._o.onNext(!1),this._o.onCompleted()))},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onNext(!0),this._o.onCompleted()},b}(l);i.every=function(a,b){var c=y(a,b,3);return new M(this,c)};var O=function(a){function b(b,c,d){var e=+d||0;Math.abs(e)===1/0&&(e=0),this.source=b,this._elem=c,this._n=e,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this._n<0?(a.onNext(!1),a.onCompleted(),m):this.source.subscribe(new P(a,this._elem,this._n))},b}(A),P=function(a){function b(b,c,d){this._o=b,this._elem=c,this._n=d,this._i=0,a.call(this)}function c(a,b){return 0===a&&0===b||a===b||isNaN(a)&&isNaN(b)}return v(b,a),b.prototype.next=function(a){this._i++>=this._n&&c(a,this._elem)&&(this._o.onNext(!0),this._o.onCompleted())},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onNext(!1),this._o.onCompleted()},b}(l);i.includes=function(a,b){return new O(this,a,b)};var Q=function(a){function b(b,c){this.source=b,this._fn=c,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new R(a,this._fn,this.source))},b}(A),R=function(a){function b(b,c,d){this._o=b,this._fn=c,this._s=d,this._i=0,this._c=0,a.call(this)}return v(b,a),b.prototype.next=function(a){if(this._fn){var b=D(this._fn)(a,this._i++,this._s);if(b===C)return this._o.onError(b.e);Boolean(b)&&this._c++}else this._c++},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onNext(this._c),this._o.onCompleted()},b}(l);i.count=function(a,b){var c=y(a,b,3);return new Q(this,c)};var S=function(a){function b(b,c,d){this.source=b,this._e=c,this._n=d,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this._n<0?(a.onNext(-1),a.onCompleted(),m):this.source.subscribe(new T(a,this._e,this._n))},b}(A),T=function(a){function b(b,c,d){this._o=b,this._e=c,this._n=d,this._i=0,a.call(this)}return v(b,a),b.prototype.next=function(a){this._i>=this._n&&a===this._e&&(this._o.onNext(this._i),this._o.onCompleted()),this._i++},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onNext(-1),this._o.onCompleted()},b}(l);i.indexOf=function(a,b){var c=+b||0;return Math.abs(c)===1/0&&(c=0),new S(this,a,c)};var U=function(a){function b(b,c){this.source=b,this._fn=c,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new V(a,this._fn,this.source))},b}(A),V=function(a){function b(b,c,d){this._o=b,this._fn=c,this._s=d,this._i=0,this._c=0,a.call(this)}return v(b,a),b.prototype.next=function(a){if(this._fn){var b=D(this._fn)(a,this._i++,this._s);if(b===C)return this._o.onError(b.e);this._c+=b}else this._c+=a},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onNext(this._c),this._o.onCompleted()},b}(l);i.sum=function(a,b){var c=y(a,b,3);return new U(this,c)},i.minBy=function(a,b){return b||(b=q),new E(this,a,function(a,c){return-1*b(a,c)})},i.min=function(a){return this.minBy(p,a).map(f)},i.maxBy=function(a,b){return b||(b=q),new E(this,a,b)},i.max=function(a){return this.maxBy(p,a).map(f)};var W=function(a){function b(b,c){this.source=b,this._fn=c,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new X(a,this._fn,this.source))},b}(A),X=function(a){function b(b,c,d){this._o=b,this._fn=c,this._s=d,this._c=0,this._t=0,a.call(this)}return v(b,a),b.prototype.next=function(a){if(this._fn){var b=D(this._fn)(a,this._c++,this._s);if(b===C)return this._o.onError(b.e);this._t+=b}else this._c++,this._t+=a},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){return 0===this._c?this._o.onError(new z):(this._o.onNext(this._t/this._c),void this._o.onCompleted())},b}(l);i.average=function(a,b){var c,d=this;return r(a)&&(c=y(a,b,3)),new W(d,c)},i.sequenceEqual=function(a,b){var c=this;return b||(b=o),new k(function(d){var e=!1,f=!1,g=[],h=[],i=c.subscribe(function(a){if(h.length>0){var c=h.shift(),e=D(b)(c,a);if(e===C)return d.onError(e.e);e||(d.onNext(!1),d.onCompleted())}else f?(d.onNext(!1),d.onCompleted()):g.push(a)},function(a){d.onError(a)},function(){e=!0,0===g.length&&(h.length>0?(d.onNext(!1),d.onCompleted()):f&&(d.onNext(!0),d.onCompleted()))});(t(a)||u(a))&&(a=x(a)),s(a)&&(a=w(a));var k=a.subscribe(function(a){if(g.length>0){var c=g.shift(),f=D(b)(c,a);if(f===C)return d.onError(f.e);f||(d.onNext(!1),d.onCompleted())}else e?(d.onNext(!1),d.onCompleted()):h.push(a)},function(a){d.onError(a)},function(){f=!0,0===h.length&&(g.length>0?(d.onNext(!1),d.onCompleted()):e&&(d.onNext(!0),d.onCompleted()))});return new j(i,k)},c)};var Y=function(a){function b(b,c,d){this.source=b,this._i=c,this._d=d,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new Z(a,this._i,this._d))},b}(A),Z=function(a){function b(b,c,d){this._o=b,this._i=c,this._d=d,a.call(this)}return v(b,a),b.prototype.next=function(a){0===this._i--&&(this._o.onNext(a),this._o.onCompleted())},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._d===d?this._o.onError(new B):(this._o.onNext(this._d),this._o.onCompleted())},b}(l);i.elementAt=function(a,b){if(0>a)throw new B;return new Y(this,a,b)};var $=function(a){function b(b,c,d){this._o=b,this._obj=c,this._s=d,this._i=0,this._hv=!1,this._v=null,a.call(this)}return v(b,a),b.prototype.next=function(a){var b=!1;if(this._obj.predicate){var c=D(this._obj.predicate)(a,this._i++,this._s);if(c===C)return this._o.onError(c.e);Boolean(c)&&(b=!0)}else this._obj.predicate||(b=!0);if(b){if(this._hv)return this._o.onError(new Error("Sequence contains more than one matching element"));this._hv=!0,this._v=a}},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._hv?(this._o.onNext(this._v),this._o.onCompleted()):this._obj.defaultValue===d?this._o.onError(new z):(this._o.onNext(this._obj.defaultValue),this._o.onCompleted())},b}(l);i.single=function(a,b){var c={},d=this;if(c="object"==typeof arguments[0]?arguments[0]:{predicate:arguments[0],thisArg:arguments[1],defaultValue:arguments[2]},r(c.predicate)){var e=c.predicate;c.predicate=y(e,c.thisArg,3)}return new k(function(a){return d.subscribe(new $(a,c,d))},d)};var _=function(a){function b(b,c){this.source=b,this._obj=c,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new aa(a,this._obj,this.source))},b}(A),aa=function(a){function b(b,c,d){this._o=b,this._obj=c,this._s=d,this._i=0,a.call(this)}return v(b,a),b.prototype.next=function(a){if(this._obj.predicate){var b=D(this._obj.predicate)(a,this._i++,this._s);if(b===C)return this._o.onError(b.e);Boolean(b)&&(this._o.onNext(a),this._o.onCompleted())}else this._obj.predicate||(this._o.onNext(a),this._o.onCompleted())},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._obj.defaultValue===d?this._o.onError(new z):(this._o.onNext(this._obj.defaultValue),this._o.onCompleted())},b}(l);i.first=function(){var a={};if(a="object"==typeof arguments[0]?arguments[0]:{predicate:arguments[0],thisArg:arguments[1],defaultValue:arguments[2]},r(a.predicate)){var b=a.predicate;a.predicate=y(b,a.thisArg,3)}return new _(this,a)};var ba=function(a){function b(b,c){this.source=b,this._obj=c,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new ca(a,this._obj,this.source))},b}(A),ca=function(a){function b(b,c,d){this._o=b,this._obj=c,this._s=d,this._i=0,this._hv=!1,this._v=null,a.call(this)}return v(b,a),b.prototype.next=function(a){var b=!1;if(this._obj.predicate){var c=D(this._obj.predicate)(a,this._i++,this._s);if(c===C)return this._o.onError(c.e);Boolean(c)&&(b=!0)}else this._obj.predicate||(b=!0);b&&(this._hv=!0,this._v=a)},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._hv?(this._o.onNext(this._v),this._o.onCompleted()):this._obj.defaultValue===d?this._o.onError(new z):(this._o.onNext(this._obj.defaultValue),this._o.onCompleted())},b}(l);i.last=function(){var a={};if(a="object"==typeof arguments[0]?arguments[0]:{predicate:arguments[0],thisArg:arguments[1],defaultValue:arguments[2]},r(a.predicate)){var b=a.predicate;a.predicate=y(b,a.thisArg,3)}return new ba(this,a)};var da=function(a){function b(b,c,d,e){this._o=b,this._s=c,this._cb=d,this._y=e,this._i=0,a.call(this)}return v(b,a),b.prototype.next=function(a){var b=D(this._cb)(a,this._i,this._s);return b===C?this._o.onError(b.e):void(b?(this._o.onNext(this._y?this._i:a),this._o.onCompleted()):this._i++)},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._y&&this._o.onNext(-1),this._o.onCompleted()},b}(l);i.find=function(a,b){return g(this,a,b,!1)},i.findIndex=function(a,b){return g(this,a,b,!0)};var ea=function(a){function b(b){this.source=b,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new fa(a))},b}(A),fa=function(b){function c(c){this._o=c,this._s=new a.Set,b.call(this)}return v(c,b),c.prototype.next=function(a){this._s.add(a)},c.prototype.error=function(a){this._o.onError(a)},c.prototype.completed=function(){this._o.onNext(this._s),this._o.onCompleted()},c}(l);i.toSet=function(){if("undefined"==typeof a.Set)throw new TypeError;return new ea(this)};var ga=function(a){function b(b,c,d){this.source=b,this._k=c,this._e=d,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new ha(a,this._k,this._e))},b}(A),ha=function(b){function c(c,d,e){this._o=c,this._k=d,this._e=e,this._m=new a.Map,b.call(this)}return v(c,b),c.prototype.next=function(a){var b=D(this._k)(a);if(b===C)return this._o.onError(b.e);var c=a;return this._e&&(c=D(this._e)(a),c===C)?this._o.onError(c.e):void this._m.set(b,c)},c.prototype.error=function(a){this._o.onError(a)},c.prototype.completed=function(){this._o.onNext(this._m),this._o.onCompleted()},c}(l);i.toMap=function(b,c){if("undefined"==typeof a.Map)throw new TypeError;return new ga(this,b,c)};var ia=function(a){function b(b,c,d){this.source=b,this._b=c,this._e=d,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new ja(a,this._b,this._e))},b}(A),ja=function(a){function b(b,c,d){this._o=b,this._b=c,this._e=d,this._i=0,a.call(this)}return v(b,a),b.prototype.next=function(a){this._i>=this._b&&(this._e===this._i?this._o.onCompleted():this._o.onNext(a)),this._i++},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onCompleted()},b}(l);i.slice=function(a,b){var d=a||0;if(0>d)throw new c.ArgumentOutOfRangeError;if("number"==typeof b&&d>b)throw new c.ArgumentOutOfRangeError;return new ia(this,d,b)};var ka=function(a){function b(b,c,d){this.source=b,this._e=c,this._n=d,a.call(this)}return v(b,a),b.prototype.subscribeCore=function(a){return this._n<0?(a.onNext(-1),a.onCompleted(),m):this.source.subscribe(new la(a,this._e,this._n))},b}(A),la=function(a){function b(b,c,d){this._o=b,this._e=c,this._n=d,this._v=0,this._hv=!1,this._i=0,a.call(this)}return v(b,a),b.prototype.next=function(a){this._i>=this._n&&a===this._e&&(this._hv=!0,this._v=this._i),this._i++},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._hv?this._o.onNext(this._v):this._o.onNext(-1),this._o.onCompleted()},b}(l);return i.lastIndexOf=function(a,b){var c=+b||0;return Math.abs(c)===1/0&&(c=0),new ka(this,a,c)},c}); -//# sourceMappingURL=rx.lite.aggregates.map \ No newline at end of file diff --git a/node_modules/rx-lite/package.json b/node_modules/rx-lite/package.json deleted file mode 100644 index 327aec7..0000000 --- a/node_modules/rx-lite/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "rx-lite", - "title": "Reactive Extensions for JavaScript (RxJS) Lite", - "description": "Lightweight library for composing asynchronous and event-based operations in JavaScript", - "version": "4.0.8", - "homepage": "https://github.com/Reactive-Extensions/RxJS", - "author": { - "name": "Cloud Programmability Team", - "url": "https://github.com/Reactive-Extensions/RxJS/blob/master/authors.txt" - }, - "repository": { - "type": "git", - "url": "https://github.com/Reactive-Extensions/RxJS.git" - }, - "licenses": [ - { - "type": "Apache License, Version 2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0.html" - } - ], - "bugs": "https://github.com/Reactive-Extensions/RxJS/issues", - "jam": { - "main": "rx.lite.js" - }, - "browser": { - "index.js": "rx.lite.js" - }, - "dependencies": {}, - "devDependencies": {}, - "keywords": [ - "React", - "Reactive", - "Events", - "Rx", - "RxJS" - ], - "main": "rx.lite.js" -} diff --git a/node_modules/rx-lite/readme.md b/node_modules/rx-lite/readme.md deleted file mode 100644 index 4411545..0000000 --- a/node_modules/rx-lite/readme.md +++ /dev/null @@ -1,173 +0,0 @@ -# RxJS Lite Module # - -The Reactive Extensions for JavaScript Lite version is a lightweight version of the Reactive Extensions for JavaScript which covers most of the day to day operators you might use all in a single library. Functionality such as bridging to events, promises, callbacks, Node.js-style callbacks, time-based operations and more are built right in. This comes with `rx.lite.js` which is for use in modern development environments such as > IE9 and server-side environments such as Node.js. - -## Getting Started - -There are a number of ways to get started with RxJS. - -### Installing with [NPM](https://npmjs.org/) - -```bash` -$ npm install rx-lite -$ npm install -g rx-lite -``` - -### Using with Node.js and Ringo.js - -```js -var Rx = require('rx-lite'); -``` - -### In a Browser: - -```html - - -``` - -## Included Observable Operators ## - -### `Observable Methods` -- [`catch | catchException`](../../doc/api/core/operators/catch.md) -- [`concat`](../../doc/api/core/operators/concat.md) -- [`create | createWithDisposable`](../../doc/api/core/operators/create.md) -- [`defer`](../../doc/api/core/operators/defer.md) -- [`empty`](../../doc/api/core/operators/empty.md) -- [`from`](../../doc/api/core/operators/from.md) -- [`fromArray`](../../doc/api/core/operators/fromarray.md) -- [`fromCallback`](../../doc/api/core/operators/fromcallback.md) -- [`fromEvent`](../../doc/api/core/operators/fromevent.md) -- [`fromEventPattern`](../../doc/api/core/operators/fromeventpattern.md) -- [`fromNodeCallback`](../../doc/api/core/operators/fromnodecallback.md) -- [`fromPromise`](../../doc/api/core/operators/frompromise.md) -- [`interval`](../../doc/api/core/operators/interval.md) -- [`just`](../../doc/api/core/operators/return.md) -- [`merge`](../../doc/api/core/operators/merge.md) -- [`mergeDelayError`](../../doc/api/core/operators/mergedelayerror.md) -- [`never`](../../doc/api/core/operators/never.md) -- [`of`](../../doc/api/core/operators/of.md) -- [`ofWithScheduler`](../../doc/api/core/operators/ofwithscheduler.md) -- [`range`](../../doc/api/core/operators/range.md) -- [`repeat`](../../doc/api/core/operators/repeat.md) -- [`return | returnValue`](../../doc/api/core/operators/return.md) -- [`throw | throwError | throwException`](../../doc/api/core/operators/throw.md) -- [`timer`](../../doc/api/core/operators/timer.md) -- [`zip`](../../doc/api/core/operators/zip.md) -- [`zipArray`](../../doc/api/core/operators/ziparray.md) - -### `Observable Instance Methods` -- [`asObservable`](../../doc/api/core/operators/asobservable.md) -- [`catch | catchException`](../../doc/api/core/operators/catchproto.md) -- [`combineLatest`](../../doc/api/core/operators/combinelatest.md) -- [`concat`](../../doc/api/core/operators/concatproto.md) -- [`concatMap`](../../doc/api/core/operators/concatmap.md) -- [`connect`](../../doc/api/core/operators/connect.md) -- [`debounce`](../../doc/api/core/operators/debounce.md) -- [`defaultIfEmpty`](../../doc/api/core/operators/defaultifempty.md) -- [`delay`](../../doc/api/core/operators/delay.md) -- [`dematerialize`](../../doc/api/core/operators/dematerialize.md) -- [`distinctUntilChanged`](../../doc/api/core/operators/distinctuntilchanged.md) -- [`do | doAction`](../../doc/api/core/operators/do.md) -- [`doOnNext`](../../doc/api/core/operators/doonnext.md) -- [`doOnError`](../../doc/api/core/operators/doonerror.md) -- [`doOnCompleted`](../../doc/api/core/operators/dooncompleted.md) -- [`filter`](../../doc/api/core/operators/where.md) -- [`finally | finallyAction`](../../doc/api/core/operators/finally.md) -- [`flatMap`](../../doc/api/core/operators/selectmany.md) -- [`flatMapLatest`](../../doc/api/core/operators/flatmaplatest.md) -- [`ignoreElements`](../../doc/api/core/operators/ignoreelements.md) -- [`map`](../../doc/api/core/operators/select.md) -- [`merge`](../../doc/api/core/operators/mergeproto.md) -- [`mergeObservable | mergeAll`](../../doc/api/core/operators/mergeall.md) -- [`multicast`](../../doc/api/core/operators/multicast.md) -- [`publish`](../../doc/api/core/operators/publish.md) -- [`publishLast`](../../doc/api/core/operators/publishlast.md) -- [`publishValue`](../../doc/api/core/operators/publishvalue.md) -- [`refCount`](../../doc/api/core/operators/refcount.md) -- [`repeat`](../../doc/api/core/operators/repeat.md) -- [`replay`](../../doc/api/core/operators/replay.md) -- [`retry`](../../doc/api/core/operators/retry.md) -- [`retryWhen`](../../doc/api/core/operators/retrywhen.md) -- [`sample`](../../doc/api/core/operators/sample.md) -- [`scan`](../../doc/api/core/operators/scan.md) -- [`select`](../../doc/api/core/operators/select.md) -- [`selectConcat`](../../doc/api/core/operators/concatmap.md) -- [`selectMany`](../../doc/api/core/operators/selectmany.md) -- [`selectSwitch`](../../doc/api/core/operators/flatmaplatest.md) -- [`singleInstance`](../../doc/api/core/operators/singleinstance.md) -- [`skip`](../../doc/api/core/operators/skip.md) -- [`skipLast`](../../doc/api/core/operators/skiplast.md) -- [`skipUntil`](../../doc/api/core/operators/skipuntil.md) -- [`skipWhile`](../../doc/api/core/operators/skipwhile.md) -- [`startWith`](../../doc/api/core/operators/startwith.md) -- [`subscribe | forEach`](../../doc/api/core/operators/subscribe.md) -- [`subscribeOnNext`](../../doc/api/core/operators/subscribeonnext.md) -- [`subscribeOnError`](../../doc/api/core/operators/subscribeonerror.md) -- [`subscribeOnCompleted`](../../doc/api/core/operators/subscribeoncompleted.md) -- [`switch | switchLatest`](../../doc/api/core/operators/switch.md) -- [`take`](../../doc/api/core/operators/take.md) -- [`takeLast`](../../doc/api/core/operators/takelast.md) -- [`takeUntil`](../../doc/api/core/operators/takeuntil.md) -- [`takeWhile`](../../doc/api/core/operators/takewhile.md) -- [`tap`](../../doc/api/core/operators/do.md) -- [`tapOnNext`](../../doc/api/core/operators/doonnext.md) -- [`tapOnError`](../../doc/api/core/operators/doonerror.md) -- [`tapOnCompleted`](../../doc/api/core/operators/dooncompleted.md) -- [`throttle`](../../doc/api/core/operators/throttle.md) -- [`timeout`](../../doc/api/core/operators/timeout.md) -- [`timestamp`](../../doc/api/core/operators/timestamp.md) -- [`toArray`](../../doc/api/core/operators/toarray.md) -- [`transduce`](../../doc/api/core/operators/transduce.md) -- [`where`](../../doc/api/core/operators/where.md) -- [`withLatestFrom`](../../doc/api/core/operators/withlatestfrom.md) -- [`zip`](../../doc/api/core/operators/zipproto.md) - -## Included Classes ## - -### Core Objects -- [`Rx.Observer`](../../doc/api/core/observer.md) -- [`Rx.Notification`](../../doc/api/core/notification.md) - -### Subjects - -- [`Rx.AsyncSubject`](../../doc/api/subjects/asyncsubject.md) -- [`Rx.BehaviorSubject`](../../doc/api/subjects/behaviorsubject.md) -- [`Rx.ReplaySubject`](../../doc/api/subjects/replaysubject.md) -- [`Rx.Subject`](../../doc/api/subjects/subject.md) - -### Schedulers - -- [`Rx.Scheduler`](../../doc/api/schedulers/scheduler.md) - -### Disposables - -- [`Rx.CompositeDisposable`](../../doc/api/disposables/compositedisposable.md) -- [`Rx.Disposable`](../../doc/api/disposables/disposable.md) -- [`Rx.RefCountDisposable`](../../doc/api/disposables/refcountdisposable.md) -- [`Rx.SerialDisposable`](../../doc/api/disposables/serialdisposable.md) -- [`Rx.SingleAssignmentDisposable`](../../doc/api/disposables/singleassignmentdisposable.md) - -## Contributing ## - -There are lots of ways to contribute to the project, and we appreciate our [contributors](https://github.com/Reactive-Extensions/RxJS/wiki/Contributors). If you wish to contribute, check out our [style guide]((https://github.com/Reactive-Extensions/RxJS/tree/master/doc/contributing)). - -You can contribute by reviewing and sending feedback on code checkins, suggesting and trying out new features as they are implemented, submit bugs and help us verify fixes as they are checked in, as well as submit code fixes or code contributions of your own. Note that all code submissions will be rigorously reviewed and tested by the Rx Team, and only those that meet an extremely high bar for both quality and design/roadmap appropriateness will be merged into the source. - -## License ## - -Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. -Microsoft Open Technologies would like to thank its contributors, a list -of whom are at https://github.com/Reactive-Extensions/RxJS/wiki/Contributors. - -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. diff --git a/node_modules/rx-lite/rx.lite.js b/node_modules/rx-lite/rx.lite.js deleted file mode 100644 index 0603c30..0000000 --- a/node_modules/rx-lite/rx.lite.js +++ /dev/null @@ -1,7054 +0,0 @@ -// Copyright (c) Microsoft, All rights reserved. See License.txt in the project root for license information. - -;(function (undefined) { - - var objectTypes = { - 'function': true, - 'object': true - }; - - function checkGlobal(value) { - return (value && value.Object === Object) ? value : null; - } - - var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null; - var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null; - var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global); - var freeSelf = checkGlobal(objectTypes[typeof self] && self); - var freeWindow = checkGlobal(objectTypes[typeof window] && window); - var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null; - var thisGlobal = checkGlobal(objectTypes[typeof this] && this); - var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')(); - - var Rx = { - internals: {}, - config: { - Promise: root.Promise - }, - helpers: { } - }; - - // Defaults - var noop = Rx.helpers.noop = function () { }, - identity = Rx.helpers.identity = function (x) { return x; }, - defaultNow = Rx.helpers.defaultNow = Date.now, - defaultComparer = Rx.helpers.defaultComparer = function (x, y) { return isEqual(x, y); }, - defaultSubComparer = Rx.helpers.defaultSubComparer = function (x, y) { return x > y ? 1 : (x < y ? -1 : 0); }, - defaultKeySerializer = Rx.helpers.defaultKeySerializer = function (x) { return x.toString(); }, - defaultError = Rx.helpers.defaultError = function (err) { throw err; }, - isPromise = Rx.helpers.isPromise = function (p) { return !!p && typeof p.subscribe !== 'function' && typeof p.then === 'function'; }, - isFunction = Rx.helpers.isFunction = (function () { - - var isFn = function (value) { - return typeof value == 'function' || false; - }; - - // fallback for older versions of Chrome and Safari - if (isFn(/x/)) { - isFn = function(value) { - return typeof value == 'function' && toString.call(value) == '[object Function]'; - }; - } - - return isFn; - }()); - - function cloneArray(arr) { - var len = arr.length, a = new Array(len); - for(var i = 0; i < len; i++) { a[i] = arr[i]; } - return a; - } - - var errorObj = {e: {}}; - - function tryCatcherGen(tryCatchTarget) { - return function tryCatcher() { - try { - return tryCatchTarget.apply(this, arguments); - } catch (e) { - errorObj.e = e; - return errorObj; - } - }; - } - - var tryCatch = Rx.internals.tryCatch = function tryCatch(fn) { - if (!isFunction(fn)) { throw new TypeError('fn must be a function'); } - return tryCatcherGen(fn); - }; - - function thrower(e) { - throw e; - } - - Rx.config.longStackSupport = false; - var hasStacks = false, stacks = tryCatch(function () { throw new Error(); })(); - hasStacks = !!stacks.e && !!stacks.e.stack; - - // All code after this point will be filtered from stack traces reported by RxJS - var rStartingLine = captureLine(), rFileName; - - var STACK_JUMP_SEPARATOR = 'From previous event:'; - - function makeStackTraceLong(error, observable) { - // If possible, transform the error stack trace by removing Node and RxJS - // cruft, then concatenating with the stack trace of `observable`. - if (hasStacks && - observable.stack && - typeof error === 'object' && - error !== null && - error.stack && - error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1 - ) { - var stacks = []; - for (var o = observable; !!o; o = o.source) { - if (o.stack) { - stacks.unshift(o.stack); - } - } - stacks.unshift(error.stack); - - var concatedStacks = stacks.join('\n' + STACK_JUMP_SEPARATOR + '\n'); - error.stack = filterStackString(concatedStacks); - } - } - - function filterStackString(stackString) { - var lines = stackString.split('\n'), desiredLines = []; - for (var i = 0, len = lines.length; i < len; i++) { - var line = lines[i]; - - if (!isInternalFrame(line) && !isNodeFrame(line) && line) { - desiredLines.push(line); - } - } - return desiredLines.join('\n'); - } - - function isInternalFrame(stackLine) { - var fileNameAndLineNumber = getFileNameAndLineNumber(stackLine); - if (!fileNameAndLineNumber) { - return false; - } - var fileName = fileNameAndLineNumber[0], lineNumber = fileNameAndLineNumber[1]; - - return fileName === rFileName && - lineNumber >= rStartingLine && - lineNumber <= rEndingLine; - } - - function isNodeFrame(stackLine) { - return stackLine.indexOf('(module.js:') !== -1 || - stackLine.indexOf('(node.js:') !== -1; - } - - function captureLine() { - if (!hasStacks) { return; } - - try { - throw new Error(); - } catch (e) { - var lines = e.stack.split('\n'); - var firstLine = lines[0].indexOf('@') > 0 ? lines[1] : lines[2]; - var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine); - if (!fileNameAndLineNumber) { return; } - - rFileName = fileNameAndLineNumber[0]; - return fileNameAndLineNumber[1]; - } - } - - function getFileNameAndLineNumber(stackLine) { - // Named functions: 'at functionName (filename:lineNumber:columnNumber)' - var attempt1 = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine); - if (attempt1) { return [attempt1[1], Number(attempt1[2])]; } - - // Anonymous functions: 'at filename:lineNumber:columnNumber' - var attempt2 = /at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine); - if (attempt2) { return [attempt2[1], Number(attempt2[2])]; } - - // Firefox style: 'function@filename:lineNumber or @filename:lineNumber' - var attempt3 = /.*@(.+):(\d+)$/.exec(stackLine); - if (attempt3) { return [attempt3[1], Number(attempt3[2])]; } - } - - var EmptyError = Rx.EmptyError = function() { - this.message = 'Sequence contains no elements.'; - Error.call(this); - }; - EmptyError.prototype = Object.create(Error.prototype); - EmptyError.prototype.name = 'EmptyError'; - - var ObjectDisposedError = Rx.ObjectDisposedError = function() { - this.message = 'Object has been disposed'; - Error.call(this); - }; - ObjectDisposedError.prototype = Object.create(Error.prototype); - ObjectDisposedError.prototype.name = 'ObjectDisposedError'; - - var ArgumentOutOfRangeError = Rx.ArgumentOutOfRangeError = function () { - this.message = 'Argument out of range'; - Error.call(this); - }; - ArgumentOutOfRangeError.prototype = Object.create(Error.prototype); - ArgumentOutOfRangeError.prototype.name = 'ArgumentOutOfRangeError'; - - var NotSupportedError = Rx.NotSupportedError = function (message) { - this.message = message || 'This operation is not supported'; - Error.call(this); - }; - NotSupportedError.prototype = Object.create(Error.prototype); - NotSupportedError.prototype.name = 'NotSupportedError'; - - var NotImplementedError = Rx.NotImplementedError = function (message) { - this.message = message || 'This operation is not implemented'; - Error.call(this); - }; - NotImplementedError.prototype = Object.create(Error.prototype); - NotImplementedError.prototype.name = 'NotImplementedError'; - - var notImplemented = Rx.helpers.notImplemented = function () { - throw new NotImplementedError(); - }; - - var notSupported = Rx.helpers.notSupported = function () { - throw new NotSupportedError(); - }; - - // Shim in iterator support - var $iterator$ = (typeof Symbol === 'function' && Symbol.iterator) || - '_es6shim_iterator_'; - // Bug for mozilla version - if (root.Set && typeof new root.Set()['@@iterator'] === 'function') { - $iterator$ = '@@iterator'; - } - - var doneEnumerator = Rx.doneEnumerator = { done: true, value: undefined }; - - var isIterable = Rx.helpers.isIterable = function (o) { - return o && o[$iterator$] !== undefined; - }; - - var isArrayLike = Rx.helpers.isArrayLike = function (o) { - return o && o.length !== undefined; - }; - - Rx.helpers.iterator = $iterator$; - - var bindCallback = Rx.internals.bindCallback = function (func, thisArg, argCount) { - if (typeof thisArg === 'undefined') { return func; } - switch(argCount) { - case 0: - return function() { - return func.call(thisArg) - }; - case 1: - return function(arg) { - return func.call(thisArg, arg); - }; - case 2: - return function(value, index) { - return func.call(thisArg, value, index); - }; - case 3: - return function(value, index, collection) { - return func.call(thisArg, value, index, collection); - }; - } - - return function() { - return func.apply(thisArg, arguments); - }; - }; - - /** Used to determine if values are of the language type Object */ - var dontEnums = ['toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor'], - dontEnumsLength = dontEnums.length; - -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dateTag] = typedArrayTags[errorTag] = -typedArrayTags[funcTag] = typedArrayTags[mapTag] = -typedArrayTags[numberTag] = typedArrayTags[objectTag] = -typedArrayTags[regexpTag] = typedArrayTags[setTag] = -typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; - -var objectProto = Object.prototype, - hasOwnProperty = objectProto.hasOwnProperty, - objToString = objectProto.toString, - MAX_SAFE_INTEGER = Math.pow(2, 53) - 1; - -var keys = Object.keys || (function() { - var hasOwnProperty = Object.prototype.hasOwnProperty, - hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'), - dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ], - dontEnumsLength = dontEnums.length; - - return function(obj) { - if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { - throw new TypeError('Object.keys called on non-object'); - } - - var result = [], prop, i; - - for (prop in obj) { - if (hasOwnProperty.call(obj, prop)) { - result.push(prop); - } - } - - if (hasDontEnumBug) { - for (i = 0; i < dontEnumsLength; i++) { - if (hasOwnProperty.call(obj, dontEnums[i])) { - result.push(dontEnums[i]); - } - } - } - return result; - }; - }()); - -function equalObjects(object, other, equalFunc, isLoose, stackA, stackB) { - var objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength !== othLength && !isLoose) { - return false; - } - var index = objLength, key; - while (index--) { - key = objProps[index]; - if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - var skipCtor = isLoose; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key], - result; - - if (!(result === undefined ? equalFunc(objValue, othValue, isLoose, stackA, stackB) : result)) { - return false; - } - skipCtor || (skipCtor = key === 'constructor'); - } - if (!skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - if (objCtor !== othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor === 'function' && objCtor instanceof objCtor && - typeof othCtor === 'function' && othCtor instanceof othCtor)) { - return false; - } - } - return true; -} - -function equalByTag(object, other, tag) { - switch (tag) { - case boolTag: - case dateTag: - return +object === +other; - - case errorTag: - return object.name === other.name && object.message === other.message; - - case numberTag: - return (object !== +object) ? - other !== +other : - object === +other; - - case regexpTag: - case stringTag: - return object === (other + ''); - } - return false; -} - -var isObject = Rx.internals.isObject = function(value) { - var type = typeof value; - return !!value && (type === 'object' || type === 'function'); -}; - -function isObjectLike(value) { - return !!value && typeof value === 'object'; -} - -function isLength(value) { - return typeof value === 'number' && value > -1 && value % 1 === 0 && value <= MAX_SAFE_INTEGER; -} - -var isHostObject = (function() { - try { - Object({ 'toString': 0 } + ''); - } catch(e) { - return function() { return false; }; - } - return function(value) { - return typeof value.toString !== 'function' && typeof (value + '') === 'string'; - }; -}()); - -function isTypedArray(value) { - return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; -} - -var isArray = Array.isArray || function(value) { - return isObjectLike(value) && isLength(value.length) && objToString.call(value) === arrayTag; -}; - -function arraySome (array, predicate) { - var index = -1, - length = array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -function equalArrays(array, other, equalFunc, isLoose, stackA, stackB) { - var index = -1, - arrLength = array.length, - othLength = other.length; - - if (arrLength !== othLength && !(isLoose && othLength > arrLength)) { - return false; - } - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index], - result; - - if (result !== undefined) { - if (result) { - continue; - } - return false; - } - // Recursively compare arrays (susceptible to call stack limits). - if (isLoose) { - if (!arraySome(other, function(othValue) { - return arrValue === othValue || equalFunc(arrValue, othValue, isLoose, stackA, stackB); - })) { - return false; - } - } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, isLoose, stackA, stackB))) { - return false; - } - } - return true; -} - -function baseIsEqualDeep(object, other, equalFunc, isLoose, stackA, stackB) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = objToString.call(object); - if (objTag === argsTag) { - objTag = objectTag; - } else if (objTag !== objectTag) { - objIsArr = isTypedArray(object); - } - } - if (!othIsArr) { - othTag = objToString.call(other); - if (othTag === argsTag) { - othTag = objectTag; - } - } - var objIsObj = objTag === objectTag && !isHostObject(object), - othIsObj = othTag === objectTag && !isHostObject(other), - isSameTag = objTag === othTag; - - if (isSameTag && !(objIsArr || objIsObj)) { - return equalByTag(object, other, objTag); - } - if (!isLoose) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, isLoose, stackA, stackB); - } - } - if (!isSameTag) { - return false; - } - // Assume cyclic values are equal. - // For more information on detecting circular references see https://es5.github.io/#JO. - stackA || (stackA = []); - stackB || (stackB = []); - - var length = stackA.length; - while (length--) { - if (stackA[length] === object) { - return stackB[length] === other; - } - } - // Add `object` and `other` to the stack of traversed objects. - stackA.push(object); - stackB.push(other); - - var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, isLoose, stackA, stackB); - - stackA.pop(); - stackB.pop(); - - return result; -} - -function baseIsEqual(value, other, isLoose, stackA, stackB) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, isLoose, stackA, stackB); -} - -var isEqual = Rx.internals.isEqual = function (value, other) { - return baseIsEqual(value, other); -}; - - var hasProp = {}.hasOwnProperty, - slice = Array.prototype.slice; - - var inherits = Rx.internals.inherits = function (child, parent) { - function __() { this.constructor = child; } - __.prototype = parent.prototype; - child.prototype = new __(); - }; - - var addProperties = Rx.internals.addProperties = function (obj) { - for(var sources = [], i = 1, len = arguments.length; i < len; i++) { sources.push(arguments[i]); } - for (var idx = 0, ln = sources.length; idx < ln; idx++) { - var source = sources[idx]; - for (var prop in source) { - obj[prop] = source[prop]; - } - } - }; - - // Rx Utils - var addRef = Rx.internals.addRef = function (xs, r) { - return new AnonymousObservable(function (observer) { - return new BinaryDisposable(r.getDisposable(), xs.subscribe(observer)); - }); - }; - - function arrayInitialize(count, factory) { - var a = new Array(count); - for (var i = 0; i < count; i++) { - a[i] = factory(); - } - return a; - } - - /** - * Represents a group of disposable resources that are disposed together. - * @constructor - */ - var CompositeDisposable = Rx.CompositeDisposable = function () { - var args = [], i, len; - if (Array.isArray(arguments[0])) { - args = arguments[0]; - } else { - len = arguments.length; - args = new Array(len); - for(i = 0; i < len; i++) { args[i] = arguments[i]; } - } - this.disposables = args; - this.isDisposed = false; - this.length = args.length; - }; - - var CompositeDisposablePrototype = CompositeDisposable.prototype; - - /** - * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. - * @param {Mixed} item Disposable to add. - */ - CompositeDisposablePrototype.add = function (item) { - if (this.isDisposed) { - item.dispose(); - } else { - this.disposables.push(item); - this.length++; - } - }; - - /** - * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. - * @param {Mixed} item Disposable to remove. - * @returns {Boolean} true if found; false otherwise. - */ - CompositeDisposablePrototype.remove = function (item) { - var shouldDispose = false; - if (!this.isDisposed) { - var idx = this.disposables.indexOf(item); - if (idx !== -1) { - shouldDispose = true; - this.disposables.splice(idx, 1); - this.length--; - item.dispose(); - } - } - return shouldDispose; - }; - - /** - * Disposes all disposables in the group and removes them from the group. - */ - CompositeDisposablePrototype.dispose = function () { - if (!this.isDisposed) { - this.isDisposed = true; - var len = this.disposables.length, currentDisposables = new Array(len); - for(var i = 0; i < len; i++) { currentDisposables[i] = this.disposables[i]; } - this.disposables = []; - this.length = 0; - - for (i = 0; i < len; i++) { - currentDisposables[i].dispose(); - } - } - }; - - /** - * Provides a set of static methods for creating Disposables. - * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. - */ - var Disposable = Rx.Disposable = function (action) { - this.isDisposed = false; - this.action = action || noop; - }; - - /** Performs the task of cleaning up resources. */ - Disposable.prototype.dispose = function () { - if (!this.isDisposed) { - this.action(); - this.isDisposed = true; - } - }; - - /** - * Creates a disposable object that invokes the specified action when disposed. - * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. - * @return {Disposable} The disposable object that runs the given action upon disposal. - */ - var disposableCreate = Disposable.create = function (action) { return new Disposable(action); }; - - /** - * Gets the disposable that does nothing when disposed. - */ - var disposableEmpty = Disposable.empty = { dispose: noop }; - - /** - * Validates whether the given object is a disposable - * @param {Object} Object to test whether it has a dispose method - * @returns {Boolean} true if a disposable object, else false. - */ - var isDisposable = Disposable.isDisposable = function (d) { - return d && isFunction(d.dispose); - }; - - var checkDisposed = Disposable.checkDisposed = function (disposable) { - if (disposable.isDisposed) { throw new ObjectDisposedError(); } - }; - - var disposableFixup = Disposable._fixup = function (result) { - return isDisposable(result) ? result : disposableEmpty; - }; - - // Single assignment - var SingleAssignmentDisposable = Rx.SingleAssignmentDisposable = function () { - this.isDisposed = false; - this.current = null; - }; - SingleAssignmentDisposable.prototype.getDisposable = function () { - return this.current; - }; - SingleAssignmentDisposable.prototype.setDisposable = function (value) { - if (this.current) { throw new Error('Disposable has already been assigned'); } - var shouldDispose = this.isDisposed; - !shouldDispose && (this.current = value); - shouldDispose && value && value.dispose(); - }; - SingleAssignmentDisposable.prototype.dispose = function () { - if (!this.isDisposed) { - this.isDisposed = true; - var old = this.current; - this.current = null; - old && old.dispose(); - } - }; - - // Multiple assignment disposable - var SerialDisposable = Rx.SerialDisposable = function () { - this.isDisposed = false; - this.current = null; - }; - SerialDisposable.prototype.getDisposable = function () { - return this.current; - }; - SerialDisposable.prototype.setDisposable = function (value) { - var shouldDispose = this.isDisposed; - if (!shouldDispose) { - var old = this.current; - this.current = value; - } - old && old.dispose(); - shouldDispose && value && value.dispose(); - }; - SerialDisposable.prototype.dispose = function () { - if (!this.isDisposed) { - this.isDisposed = true; - var old = this.current; - this.current = null; - } - old && old.dispose(); - }; - - var BinaryDisposable = Rx.BinaryDisposable = function (first, second) { - this._first = first; - this._second = second; - this.isDisposed = false; - }; - - BinaryDisposable.prototype.dispose = function () { - if (!this.isDisposed) { - this.isDisposed = true; - var old1 = this._first; - this._first = null; - old1 && old1.dispose(); - var old2 = this._second; - this._second = null; - old2 && old2.dispose(); - } - }; - - var NAryDisposable = Rx.NAryDisposable = function (disposables) { - this._disposables = disposables; - this.isDisposed = false; - }; - - NAryDisposable.prototype.dispose = function () { - if (!this.isDisposed) { - this.isDisposed = true; - for (var i = 0, len = this._disposables.length; i < len; i++) { - this._disposables[i].dispose(); - } - this._disposables.length = 0; - } - }; - - /** - * Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. - */ - var RefCountDisposable = Rx.RefCountDisposable = (function () { - - function InnerDisposable(disposable) { - this.disposable = disposable; - this.disposable.count++; - this.isInnerDisposed = false; - } - - InnerDisposable.prototype.dispose = function () { - if (!this.disposable.isDisposed && !this.isInnerDisposed) { - this.isInnerDisposed = true; - this.disposable.count--; - if (this.disposable.count === 0 && this.disposable.isPrimaryDisposed) { - this.disposable.isDisposed = true; - this.disposable.underlyingDisposable.dispose(); - } - } - }; - - /** - * Initializes a new instance of the RefCountDisposable with the specified disposable. - * @constructor - * @param {Disposable} disposable Underlying disposable. - */ - function RefCountDisposable(disposable) { - this.underlyingDisposable = disposable; - this.isDisposed = false; - this.isPrimaryDisposed = false; - this.count = 0; - } - - /** - * Disposes the underlying disposable only when all dependent disposables have been disposed - */ - RefCountDisposable.prototype.dispose = function () { - if (!this.isDisposed && !this.isPrimaryDisposed) { - this.isPrimaryDisposed = true; - if (this.count === 0) { - this.isDisposed = true; - this.underlyingDisposable.dispose(); - } - } - }; - - /** - * Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. - * @returns {Disposable} A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. - */ - RefCountDisposable.prototype.getDisposable = function () { - return this.isDisposed ? disposableEmpty : new InnerDisposable(this); - }; - - return RefCountDisposable; - })(); - - var ScheduledItem = Rx.internals.ScheduledItem = function (scheduler, state, action, dueTime, comparer) { - this.scheduler = scheduler; - this.state = state; - this.action = action; - this.dueTime = dueTime; - this.comparer = comparer || defaultSubComparer; - this.disposable = new SingleAssignmentDisposable(); - }; - - ScheduledItem.prototype.invoke = function () { - this.disposable.setDisposable(this.invokeCore()); - }; - - ScheduledItem.prototype.compareTo = function (other) { - return this.comparer(this.dueTime, other.dueTime); - }; - - ScheduledItem.prototype.isCancelled = function () { - return this.disposable.isDisposed; - }; - - ScheduledItem.prototype.invokeCore = function () { - return disposableFixup(this.action(this.scheduler, this.state)); - }; - - /** Provides a set of static properties to access commonly used schedulers. */ - var Scheduler = Rx.Scheduler = (function () { - - function Scheduler() { } - - /** Determines whether the given object is a scheduler */ - Scheduler.isScheduler = function (s) { - return s instanceof Scheduler; - }; - - var schedulerProto = Scheduler.prototype; - - /** - * Schedules an action to be executed. - * @param state State passed to the action to be executed. - * @param {Function} action Action to be executed. - * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). - */ - schedulerProto.schedule = function (state, action) { - throw new NotImplementedError(); - }; - - /** - * Schedules an action to be executed after dueTime. - * @param state State passed to the action to be executed. - * @param {Function} action Action to be executed. - * @param {Number} dueTime Relative time after which to execute the action. - * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). - */ - schedulerProto.scheduleFuture = function (state, dueTime, action) { - var dt = dueTime; - dt instanceof Date && (dt = dt - this.now()); - dt = Scheduler.normalize(dt); - - if (dt === 0) { return this.schedule(state, action); } - - return this._scheduleFuture(state, dt, action); - }; - - schedulerProto._scheduleFuture = function (state, dueTime, action) { - throw new NotImplementedError(); - }; - - /** Gets the current time according to the local machine's system clock. */ - Scheduler.now = defaultNow; - - /** Gets the current time according to the local machine's system clock. */ - Scheduler.prototype.now = defaultNow; - - /** - * Normalizes the specified TimeSpan value to a positive value. - * @param {Number} timeSpan The time span value to normalize. - * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 - */ - Scheduler.normalize = function (timeSpan) { - timeSpan < 0 && (timeSpan = 0); - return timeSpan; - }; - - return Scheduler; - }()); - - var normalizeTime = Scheduler.normalize, isScheduler = Scheduler.isScheduler; - - (function (schedulerProto) { - - function invokeRecImmediate(scheduler, pair) { - var state = pair[0], action = pair[1], group = new CompositeDisposable(); - action(state, innerAction); - return group; - - function innerAction(state2) { - var isAdded = false, isDone = false; - - var d = scheduler.schedule(state2, scheduleWork); - if (!isDone) { - group.add(d); - isAdded = true; - } - - function scheduleWork(_, state3) { - if (isAdded) { - group.remove(d); - } else { - isDone = true; - } - action(state3, innerAction); - return disposableEmpty; - } - } - } - - function invokeRecDate(scheduler, pair) { - var state = pair[0], action = pair[1], group = new CompositeDisposable(); - action(state, innerAction); - return group; - - function innerAction(state2, dueTime1) { - var isAdded = false, isDone = false; - - var d = scheduler.scheduleFuture(state2, dueTime1, scheduleWork); - if (!isDone) { - group.add(d); - isAdded = true; - } - - function scheduleWork(_, state3) { - if (isAdded) { - group.remove(d); - } else { - isDone = true; - } - action(state3, innerAction); - return disposableEmpty; - } - } - } - - /** - * Schedules an action to be executed recursively. - * @param {Mixed} state State passed to the action to be executed. - * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. - * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). - */ - schedulerProto.scheduleRecursive = function (state, action) { - return this.schedule([state, action], invokeRecImmediate); - }; - - /** - * Schedules an action to be executed recursively after a specified relative or absolute due time. - * @param {Mixed} state State passed to the action to be executed. - * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. - * @param {Number | Date} dueTime Relative or absolute time after which to execute the action for the first time. - * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). - */ - schedulerProto.scheduleRecursiveFuture = function (state, dueTime, action) { - return this.scheduleFuture([state, action], dueTime, invokeRecDate); - }; - - }(Scheduler.prototype)); - - (function (schedulerProto) { - - /** - * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. - * @param {Mixed} state Initial state passed to the action upon the first iteration. - * @param {Number} period Period for running the work periodically. - * @param {Function} action Action to be executed, potentially updating the state. - * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). - */ - schedulerProto.schedulePeriodic = function(state, period, action) { - if (typeof root.setInterval === 'undefined') { throw new NotSupportedError(); } - period = normalizeTime(period); - var s = state, id = root.setInterval(function () { s = action(s); }, period); - return disposableCreate(function () { root.clearInterval(id); }); - }; - - }(Scheduler.prototype)); - - /** Gets a scheduler that schedules work immediately on the current thread. */ - var ImmediateScheduler = (function (__super__) { - inherits(ImmediateScheduler, __super__); - function ImmediateScheduler() { - __super__.call(this); - } - - ImmediateScheduler.prototype.schedule = function (state, action) { - return disposableFixup(action(this, state)); - }; - - return ImmediateScheduler; - }(Scheduler)); - - var immediateScheduler = Scheduler.immediate = new ImmediateScheduler(); - - /** - * Gets a scheduler that schedules work as soon as possible on the current thread. - */ - var CurrentThreadScheduler = (function (__super__) { - var queue; - - function runTrampoline () { - while (queue.length > 0) { - var item = queue.dequeue(); - !item.isCancelled() && item.invoke(); - } - } - - inherits(CurrentThreadScheduler, __super__); - function CurrentThreadScheduler() { - __super__.call(this); - } - - CurrentThreadScheduler.prototype.schedule = function (state, action) { - var si = new ScheduledItem(this, state, action, this.now()); - - if (!queue) { - queue = new PriorityQueue(4); - queue.enqueue(si); - - var result = tryCatch(runTrampoline)(); - queue = null; - if (result === errorObj) { thrower(result.e); } - } else { - queue.enqueue(si); - } - return si.disposable; - }; - - CurrentThreadScheduler.prototype.scheduleRequired = function () { return !queue; }; - - return CurrentThreadScheduler; - }(Scheduler)); - - var currentThreadScheduler = Scheduler.currentThread = new CurrentThreadScheduler(); - - var SchedulePeriodicRecursive = Rx.internals.SchedulePeriodicRecursive = (function () { - function createTick(self) { - return function tick(command, recurse) { - recurse(0, self._period); - var state = tryCatch(self._action)(self._state); - if (state === errorObj) { - self._cancel.dispose(); - thrower(state.e); - } - self._state = state; - }; - } - - function SchedulePeriodicRecursive(scheduler, state, period, action) { - this._scheduler = scheduler; - this._state = state; - this._period = period; - this._action = action; - } - - SchedulePeriodicRecursive.prototype.start = function () { - var d = new SingleAssignmentDisposable(); - this._cancel = d; - d.setDisposable(this._scheduler.scheduleRecursiveFuture(0, this._period, createTick(this))); - - return d; - }; - - return SchedulePeriodicRecursive; - }()); - - var scheduleMethod, clearMethod; - - var localTimer = (function () { - var localSetTimeout, localClearTimeout = noop; - if (!!root.setTimeout) { - localSetTimeout = root.setTimeout; - localClearTimeout = root.clearTimeout; - } else if (!!root.WScript) { - localSetTimeout = function (fn, time) { - root.WScript.Sleep(time); - fn(); - }; - } else { - throw new NotSupportedError(); - } - - return { - setTimeout: localSetTimeout, - clearTimeout: localClearTimeout - }; - }()); - var localSetTimeout = localTimer.setTimeout, - localClearTimeout = localTimer.clearTimeout; - - (function () { - - var nextHandle = 1, tasksByHandle = {}, currentlyRunning = false; - - clearMethod = function (handle) { - delete tasksByHandle[handle]; - }; - - function runTask(handle) { - if (currentlyRunning) { - localSetTimeout(function () { runTask(handle); }, 0); - } else { - var task = tasksByHandle[handle]; - if (task) { - currentlyRunning = true; - var result = tryCatch(task)(); - clearMethod(handle); - currentlyRunning = false; - if (result === errorObj) { thrower(result.e); } - } - } - } - - var reNative = new RegExp('^' + - String(toString) - .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - .replace(/toString| for [^\]]+/g, '.*?') + '$' - ); - - var setImmediate = typeof (setImmediate = freeGlobal && moduleExports && freeGlobal.setImmediate) == 'function' && - !reNative.test(setImmediate) && setImmediate; - - function postMessageSupported () { - // Ensure not in a worker - if (!root.postMessage || root.importScripts) { return false; } - var isAsync = false, oldHandler = root.onmessage; - // Test for async - root.onmessage = function () { isAsync = true; }; - root.postMessage('', '*'); - root.onmessage = oldHandler; - - return isAsync; - } - - // Use in order, setImmediate, nextTick, postMessage, MessageChannel, script readystatechanged, setTimeout - if (isFunction(setImmediate)) { - scheduleMethod = function (action) { - var id = nextHandle++; - tasksByHandle[id] = action; - setImmediate(function () { runTask(id); }); - - return id; - }; - } else if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') { - scheduleMethod = function (action) { - var id = nextHandle++; - tasksByHandle[id] = action; - process.nextTick(function () { runTask(id); }); - - return id; - }; - } else if (postMessageSupported()) { - var MSG_PREFIX = 'ms.rx.schedule' + Math.random(); - - var onGlobalPostMessage = function (event) { - // Only if we're a match to avoid any other global events - if (typeof event.data === 'string' && event.data.substring(0, MSG_PREFIX.length) === MSG_PREFIX) { - runTask(event.data.substring(MSG_PREFIX.length)); - } - }; - - root.addEventListener('message', onGlobalPostMessage, false); - - scheduleMethod = function (action) { - var id = nextHandle++; - tasksByHandle[id] = action; - root.postMessage(MSG_PREFIX + id, '*'); - return id; - }; - } else if (!!root.MessageChannel) { - var channel = new root.MessageChannel(); - - channel.port1.onmessage = function (e) { runTask(e.data); }; - - scheduleMethod = function (action) { - var id = nextHandle++; - tasksByHandle[id] = action; - channel.port2.postMessage(id); - return id; - }; - } else if ('document' in root && 'onreadystatechange' in root.document.createElement('script')) { - - scheduleMethod = function (action) { - var scriptElement = root.document.createElement('script'); - var id = nextHandle++; - tasksByHandle[id] = action; - - scriptElement.onreadystatechange = function () { - runTask(id); - scriptElement.onreadystatechange = null; - scriptElement.parentNode.removeChild(scriptElement); - scriptElement = null; - }; - root.document.documentElement.appendChild(scriptElement); - return id; - }; - - } else { - scheduleMethod = function (action) { - var id = nextHandle++; - tasksByHandle[id] = action; - localSetTimeout(function () { - runTask(id); - }, 0); - - return id; - }; - } - }()); - - /** - * Gets a scheduler that schedules work via a timed callback based upon platform. - */ - var DefaultScheduler = (function (__super__) { - inherits(DefaultScheduler, __super__); - function DefaultScheduler() { - __super__.call(this); - } - - function scheduleAction(disposable, action, scheduler, state) { - return function schedule() { - disposable.setDisposable(Disposable._fixup(action(scheduler, state))); - }; - } - - function ClearDisposable(id) { - this._id = id; - this.isDisposed = false; - } - - ClearDisposable.prototype.dispose = function () { - if (!this.isDisposed) { - this.isDisposed = true; - clearMethod(this._id); - } - }; - - function LocalClearDisposable(id) { - this._id = id; - this.isDisposed = false; - } - - LocalClearDisposable.prototype.dispose = function () { - if (!this.isDisposed) { - this.isDisposed = true; - localClearTimeout(this._id); - } - }; - - DefaultScheduler.prototype.schedule = function (state, action) { - var disposable = new SingleAssignmentDisposable(), - id = scheduleMethod(scheduleAction(disposable, action, this, state)); - return new BinaryDisposable(disposable, new ClearDisposable(id)); - }; - - DefaultScheduler.prototype._scheduleFuture = function (state, dueTime, action) { - if (dueTime === 0) { return this.schedule(state, action); } - var disposable = new SingleAssignmentDisposable(), - id = localSetTimeout(scheduleAction(disposable, action, this, state), dueTime); - return new BinaryDisposable(disposable, new LocalClearDisposable(id)); - }; - - return DefaultScheduler; - }(Scheduler)); - - var defaultScheduler = Scheduler['default'] = Scheduler.async = new DefaultScheduler(); - - function IndexedItem(id, value) { - this.id = id; - this.value = value; - } - - IndexedItem.prototype.compareTo = function (other) { - var c = this.value.compareTo(other.value); - c === 0 && (c = this.id - other.id); - return c; - }; - - var PriorityQueue = Rx.internals.PriorityQueue = function (capacity) { - this.items = new Array(capacity); - this.length = 0; - }; - - var priorityProto = PriorityQueue.prototype; - priorityProto.isHigherPriority = function (left, right) { - return this.items[left].compareTo(this.items[right]) < 0; - }; - - priorityProto.percolate = function (index) { - if (index >= this.length || index < 0) { return; } - var parent = index - 1 >> 1; - if (parent < 0 || parent === index) { return; } - if (this.isHigherPriority(index, parent)) { - var temp = this.items[index]; - this.items[index] = this.items[parent]; - this.items[parent] = temp; - this.percolate(parent); - } - }; - - priorityProto.heapify = function (index) { - +index || (index = 0); - if (index >= this.length || index < 0) { return; } - var left = 2 * index + 1, - right = 2 * index + 2, - first = index; - if (left < this.length && this.isHigherPriority(left, first)) { - first = left; - } - if (right < this.length && this.isHigherPriority(right, first)) { - first = right; - } - if (first !== index) { - var temp = this.items[index]; - this.items[index] = this.items[first]; - this.items[first] = temp; - this.heapify(first); - } - }; - - priorityProto.peek = function () { return this.items[0].value; }; - - priorityProto.removeAt = function (index) { - this.items[index] = this.items[--this.length]; - this.items[this.length] = undefined; - this.heapify(); - }; - - priorityProto.dequeue = function () { - var result = this.peek(); - this.removeAt(0); - return result; - }; - - priorityProto.enqueue = function (item) { - var index = this.length++; - this.items[index] = new IndexedItem(PriorityQueue.count++, item); - this.percolate(index); - }; - - priorityProto.remove = function (item) { - for (var i = 0; i < this.length; i++) { - if (this.items[i].value === item) { - this.removeAt(i); - return true; - } - } - return false; - }; - PriorityQueue.count = 0; - - /** - * Represents a notification to an observer. - */ - var Notification = Rx.Notification = (function () { - function Notification() { - - } - - Notification.prototype._accept = function (onNext, onError, onCompleted) { - throw new NotImplementedError(); - }; - - Notification.prototype._acceptObserver = function (onNext, onError, onCompleted) { - throw new NotImplementedError(); - }; - - /** - * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. - * @param {Function | Observer} observerOrOnNext Function to invoke for an OnNext notification or Observer to invoke the notification on.. - * @param {Function} onError Function to invoke for an OnError notification. - * @param {Function} onCompleted Function to invoke for an OnCompleted notification. - * @returns {Any} Result produced by the observation. - */ - Notification.prototype.accept = function (observerOrOnNext, onError, onCompleted) { - return observerOrOnNext && typeof observerOrOnNext === 'object' ? - this._acceptObserver(observerOrOnNext) : - this._accept(observerOrOnNext, onError, onCompleted); - }; - - /** - * Returns an observable sequence with a single notification. - * - * @memberOf Notifications - * @param {Scheduler} [scheduler] Scheduler to send out the notification calls on. - * @returns {Observable} The observable sequence that surfaces the behavior of the notification upon subscription. - */ - Notification.prototype.toObservable = function (scheduler) { - var self = this; - isScheduler(scheduler) || (scheduler = immediateScheduler); - return new AnonymousObservable(function (o) { - return scheduler.schedule(self, function (_, notification) { - notification._acceptObserver(o); - notification.kind === 'N' && o.onCompleted(); - }); - }); - }; - - return Notification; - })(); - - var OnNextNotification = (function (__super__) { - inherits(OnNextNotification, __super__); - function OnNextNotification(value) { - this.value = value; - this.kind = 'N'; - } - - OnNextNotification.prototype._accept = function (onNext) { - return onNext(this.value); - }; - - OnNextNotification.prototype._acceptObserver = function (o) { - return o.onNext(this.value); - }; - - OnNextNotification.prototype.toString = function () { - return 'OnNext(' + this.value + ')'; - }; - - return OnNextNotification; - }(Notification)); - - var OnErrorNotification = (function (__super__) { - inherits(OnErrorNotification, __super__); - function OnErrorNotification(error) { - this.error = error; - this.kind = 'E'; - } - - OnErrorNotification.prototype._accept = function (onNext, onError) { - return onError(this.error); - }; - - OnErrorNotification.prototype._acceptObserver = function (o) { - return o.onError(this.error); - }; - - OnErrorNotification.prototype.toString = function () { - return 'OnError(' + this.error + ')'; - }; - - return OnErrorNotification; - }(Notification)); - - var OnCompletedNotification = (function (__super__) { - inherits(OnCompletedNotification, __super__); - function OnCompletedNotification() { - this.kind = 'C'; - } - - OnCompletedNotification.prototype._accept = function (onNext, onError, onCompleted) { - return onCompleted(); - }; - - OnCompletedNotification.prototype._acceptObserver = function (o) { - return o.onCompleted(); - }; - - OnCompletedNotification.prototype.toString = function () { - return 'OnCompleted()'; - }; - - return OnCompletedNotification; - }(Notification)); - - /** - * Creates an object that represents an OnNext notification to an observer. - * @param {Any} value The value contained in the notification. - * @returns {Notification} The OnNext notification containing the value. - */ - var notificationCreateOnNext = Notification.createOnNext = function (value) { - return new OnNextNotification(value); - }; - - /** - * Creates an object that represents an OnError notification to an observer. - * @param {Any} error The exception contained in the notification. - * @returns {Notification} The OnError notification containing the exception. - */ - var notificationCreateOnError = Notification.createOnError = function (error) { - return new OnErrorNotification(error); - }; - - /** - * Creates an object that represents an OnCompleted notification to an observer. - * @returns {Notification} The OnCompleted notification. - */ - var notificationCreateOnCompleted = Notification.createOnCompleted = function () { - return new OnCompletedNotification(); - }; - - /** - * Supports push-style iteration over an observable sequence. - */ - var Observer = Rx.Observer = function () { }; - - /** - * Creates an observer from the specified OnNext, along with optional OnError, and OnCompleted actions. - * @param {Function} [onNext] Observer's OnNext action implementation. - * @param {Function} [onError] Observer's OnError action implementation. - * @param {Function} [onCompleted] Observer's OnCompleted action implementation. - * @returns {Observer} The observer object implemented using the given actions. - */ - var observerCreate = Observer.create = function (onNext, onError, onCompleted) { - onNext || (onNext = noop); - onError || (onError = defaultError); - onCompleted || (onCompleted = noop); - return new AnonymousObserver(onNext, onError, onCompleted); - }; - - /** - * Abstract base class for implementations of the Observer class. - * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. - */ - var AbstractObserver = Rx.internals.AbstractObserver = (function (__super__) { - inherits(AbstractObserver, __super__); - - /** - * Creates a new observer in a non-stopped state. - */ - function AbstractObserver() { - this.isStopped = false; - } - - // Must be implemented by other observers - AbstractObserver.prototype.next = notImplemented; - AbstractObserver.prototype.error = notImplemented; - AbstractObserver.prototype.completed = notImplemented; - - /** - * Notifies the observer of a new element in the sequence. - * @param {Any} value Next element in the sequence. - */ - AbstractObserver.prototype.onNext = function (value) { - !this.isStopped && this.next(value); - }; - - /** - * Notifies the observer that an exception has occurred. - * @param {Any} error The error that has occurred. - */ - AbstractObserver.prototype.onError = function (error) { - if (!this.isStopped) { - this.isStopped = true; - this.error(error); - } - }; - - /** - * Notifies the observer of the end of the sequence. - */ - AbstractObserver.prototype.onCompleted = function () { - if (!this.isStopped) { - this.isStopped = true; - this.completed(); - } - }; - - /** - * Disposes the observer, causing it to transition to the stopped state. - */ - AbstractObserver.prototype.dispose = function () { this.isStopped = true; }; - - AbstractObserver.prototype.fail = function (e) { - if (!this.isStopped) { - this.isStopped = true; - this.error(e); - return true; - } - - return false; - }; - - return AbstractObserver; - }(Observer)); - - /** - * Class to create an Observer instance from delegate-based implementations of the on* methods. - */ - var AnonymousObserver = Rx.AnonymousObserver = (function (__super__) { - inherits(AnonymousObserver, __super__); - - /** - * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. - * @param {Any} onNext Observer's OnNext action implementation. - * @param {Any} onError Observer's OnError action implementation. - * @param {Any} onCompleted Observer's OnCompleted action implementation. - */ - function AnonymousObserver(onNext, onError, onCompleted) { - __super__.call(this); - this._onNext = onNext; - this._onError = onError; - this._onCompleted = onCompleted; - } - - /** - * Calls the onNext action. - * @param {Any} value Next element in the sequence. - */ - AnonymousObserver.prototype.next = function (value) { - this._onNext(value); - }; - - /** - * Calls the onError action. - * @param {Any} error The error that has occurred. - */ - AnonymousObserver.prototype.error = function (error) { - this._onError(error); - }; - - /** - * Calls the onCompleted action. - */ - AnonymousObserver.prototype.completed = function () { - this._onCompleted(); - }; - - return AnonymousObserver; - }(AbstractObserver)); - - var observableProto; - - /** - * Represents a push-style collection. - */ - var Observable = Rx.Observable = (function () { - - function makeSubscribe(self, subscribe) { - return function (o) { - var oldOnError = o.onError; - o.onError = function (e) { - makeStackTraceLong(e, self); - oldOnError.call(o, e); - }; - - return subscribe.call(self, o); - }; - } - - function Observable() { - if (Rx.config.longStackSupport && hasStacks) { - var oldSubscribe = this._subscribe; - var e = tryCatch(thrower)(new Error()).e; - this.stack = e.stack.substring(e.stack.indexOf('\n') + 1); - this._subscribe = makeSubscribe(this, oldSubscribe); - } - } - - observableProto = Observable.prototype; - - /** - * Determines whether the given object is an Observable - * @param {Any} An object to determine whether it is an Observable - * @returns {Boolean} true if an Observable, else false. - */ - Observable.isObservable = function (o) { - return o && isFunction(o.subscribe); - }; - - /** - * Subscribes an o to the observable sequence. - * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. - * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. - * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. - * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. - */ - observableProto.subscribe = observableProto.forEach = function (oOrOnNext, onError, onCompleted) { - return this._subscribe(typeof oOrOnNext === 'object' ? - oOrOnNext : - observerCreate(oOrOnNext, onError, onCompleted)); - }; - - /** - * Subscribes to the next value in the sequence with an optional "this" argument. - * @param {Function} onNext The function to invoke on each element in the observable sequence. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. - */ - observableProto.subscribeOnNext = function (onNext, thisArg) { - return this._subscribe(observerCreate(typeof thisArg !== 'undefined' ? function(x) { onNext.call(thisArg, x); } : onNext)); - }; - - /** - * Subscribes to an exceptional condition in the sequence with an optional "this" argument. - * @param {Function} onError The function to invoke upon exceptional termination of the observable sequence. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. - */ - observableProto.subscribeOnError = function (onError, thisArg) { - return this._subscribe(observerCreate(null, typeof thisArg !== 'undefined' ? function(e) { onError.call(thisArg, e); } : onError)); - }; - - /** - * Subscribes to the next value in the sequence with an optional "this" argument. - * @param {Function} onCompleted The function to invoke upon graceful termination of the observable sequence. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. - */ - observableProto.subscribeOnCompleted = function (onCompleted, thisArg) { - return this._subscribe(observerCreate(null, null, typeof thisArg !== 'undefined' ? function() { onCompleted.call(thisArg); } : onCompleted)); - }; - - return Observable; - })(); - - var ScheduledObserver = Rx.internals.ScheduledObserver = (function (__super__) { - inherits(ScheduledObserver, __super__); - - function ScheduledObserver(scheduler, observer) { - __super__.call(this); - this.scheduler = scheduler; - this.observer = observer; - this.isAcquired = false; - this.hasFaulted = false; - this.queue = []; - this.disposable = new SerialDisposable(); - } - - function enqueueNext(observer, x) { return function () { observer.onNext(x); }; } - function enqueueError(observer, e) { return function () { observer.onError(e); }; } - function enqueueCompleted(observer) { return function () { observer.onCompleted(); }; } - - ScheduledObserver.prototype.next = function (x) { - this.queue.push(enqueueNext(this.observer, x)); - }; - - ScheduledObserver.prototype.error = function (e) { - this.queue.push(enqueueError(this.observer, e)); - }; - - ScheduledObserver.prototype.completed = function () { - this.queue.push(enqueueCompleted(this.observer)); - }; - - - function scheduleMethod(state, recurse) { - var work; - if (state.queue.length > 0) { - work = state.queue.shift(); - } else { - state.isAcquired = false; - return; - } - var res = tryCatch(work)(); - if (res === errorObj) { - state.queue = []; - state.hasFaulted = true; - return thrower(res.e); - } - recurse(state); - } - - ScheduledObserver.prototype.ensureActive = function () { - var isOwner = false; - if (!this.hasFaulted && this.queue.length > 0) { - isOwner = !this.isAcquired; - this.isAcquired = true; - } - isOwner && - this.disposable.setDisposable(this.scheduler.scheduleRecursive(this, scheduleMethod)); - }; - - ScheduledObserver.prototype.dispose = function () { - __super__.prototype.dispose.call(this); - this.disposable.dispose(); - }; - - return ScheduledObserver; - }(AbstractObserver)); - - var ObservableBase = Rx.ObservableBase = (function (__super__) { - inherits(ObservableBase, __super__); - - function fixSubscriber(subscriber) { - return subscriber && isFunction(subscriber.dispose) ? subscriber : - isFunction(subscriber) ? disposableCreate(subscriber) : disposableEmpty; - } - - function setDisposable(s, state) { - var ado = state[0], self = state[1]; - var sub = tryCatch(self.subscribeCore).call(self, ado); - if (sub === errorObj && !ado.fail(errorObj.e)) { thrower(errorObj.e); } - ado.setDisposable(fixSubscriber(sub)); - } - - function ObservableBase() { - __super__.call(this); - } - - ObservableBase.prototype._subscribe = function (o) { - var ado = new AutoDetachObserver(o), state = [ado, this]; - - if (currentThreadScheduler.scheduleRequired()) { - currentThreadScheduler.schedule(state, setDisposable); - } else { - setDisposable(null, state); - } - return ado; - }; - - ObservableBase.prototype.subscribeCore = notImplemented; - - return ObservableBase; - }(Observable)); - -var FlatMapObservable = Rx.FlatMapObservable = (function(__super__) { - - inherits(FlatMapObservable, __super__); - - function FlatMapObservable(source, selector, resultSelector, thisArg) { - this.resultSelector = isFunction(resultSelector) ? resultSelector : null; - this.selector = bindCallback(isFunction(selector) ? selector : function() { return selector; }, thisArg, 3); - this.source = source; - __super__.call(this); - } - - FlatMapObservable.prototype.subscribeCore = function(o) { - return this.source.subscribe(new InnerObserver(o, this.selector, this.resultSelector, this)); - }; - - inherits(InnerObserver, AbstractObserver); - function InnerObserver(observer, selector, resultSelector, source) { - this.i = 0; - this.selector = selector; - this.resultSelector = resultSelector; - this.source = source; - this.o = observer; - AbstractObserver.call(this); - } - - InnerObserver.prototype._wrapResult = function(result, x, i) { - return this.resultSelector ? - result.map(function(y, i2) { return this.resultSelector(x, y, i, i2); }, this) : - result; - }; - - InnerObserver.prototype.next = function(x) { - var i = this.i++; - var result = tryCatch(this.selector)(x, i, this.source); - if (result === errorObj) { return this.o.onError(result.e); } - - isPromise(result) && (result = observableFromPromise(result)); - (isArrayLike(result) || isIterable(result)) && (result = Observable.from(result)); - this.o.onNext(this._wrapResult(result, x, i)); - }; - - InnerObserver.prototype.error = function(e) { this.o.onError(e); }; - - InnerObserver.prototype.completed = function() { this.o.onCompleted(); }; - - return FlatMapObservable; - -}(ObservableBase)); - - var Enumerable = Rx.internals.Enumerable = function () { }; - - function IsDisposedDisposable(state) { - this._s = state; - this.isDisposed = false; - } - - IsDisposedDisposable.prototype.dispose = function () { - if (!this.isDisposed) { - this.isDisposed = true; - this._s.isDisposed = true; - } - }; - - var ConcatEnumerableObservable = (function(__super__) { - inherits(ConcatEnumerableObservable, __super__); - function ConcatEnumerableObservable(sources) { - this.sources = sources; - __super__.call(this); - } - - function scheduleMethod(state, recurse) { - if (state.isDisposed) { return; } - var currentItem = tryCatch(state.e.next).call(state.e); - if (currentItem === errorObj) { return state.o.onError(currentItem.e); } - if (currentItem.done) { return state.o.onCompleted(); } - - // Check if promise - var currentValue = currentItem.value; - isPromise(currentValue) && (currentValue = observableFromPromise(currentValue)); - - var d = new SingleAssignmentDisposable(); - state.subscription.setDisposable(d); - d.setDisposable(currentValue.subscribe(new InnerObserver(state, recurse))); - } - - ConcatEnumerableObservable.prototype.subscribeCore = function (o) { - var subscription = new SerialDisposable(); - var state = { - isDisposed: false, - o: o, - subscription: subscription, - e: this.sources[$iterator$]() - }; - - var cancelable = currentThreadScheduler.scheduleRecursive(state, scheduleMethod); - return new NAryDisposable([subscription, cancelable, new IsDisposedDisposable(state)]); - }; - - function InnerObserver(state, recurse) { - this._state = state; - this._recurse = recurse; - AbstractObserver.call(this); - } - - inherits(InnerObserver, AbstractObserver); - - InnerObserver.prototype.next = function (x) { this._state.o.onNext(x); }; - InnerObserver.prototype.error = function (e) { this._state.o.onError(e); }; - InnerObserver.prototype.completed = function () { this._recurse(this._state); }; - - return ConcatEnumerableObservable; - }(ObservableBase)); - - Enumerable.prototype.concat = function () { - return new ConcatEnumerableObservable(this); - }; - - var CatchErrorObservable = (function(__super__) { - function CatchErrorObservable(sources) { - this.sources = sources; - __super__.call(this); - } - - inherits(CatchErrorObservable, __super__); - - function scheduleMethod(state, recurse) { - if (state.isDisposed) { return; } - var currentItem = tryCatch(state.e.next).call(state.e); - if (currentItem === errorObj) { return state.o.onError(currentItem.e); } - if (currentItem.done) { return state.lastError !== null ? state.o.onError(state.lastError) : state.o.onCompleted(); } - - var currentValue = currentItem.value; - isPromise(currentValue) && (currentValue = observableFromPromise(currentValue)); - - var d = new SingleAssignmentDisposable(); - state.subscription.setDisposable(d); - d.setDisposable(currentValue.subscribe(new InnerObserver(state, recurse))); - } - - CatchErrorObservable.prototype.subscribeCore = function (o) { - var subscription = new SerialDisposable(); - var state = { - isDisposed: false, - e: this.sources[$iterator$](), - subscription: subscription, - lastError: null, - o: o - }; - - var cancelable = currentThreadScheduler.scheduleRecursive(state, scheduleMethod); - return new NAryDisposable([subscription, cancelable, new IsDisposedDisposable(state)]); - }; - - function InnerObserver(state, recurse) { - this._state = state; - this._recurse = recurse; - AbstractObserver.call(this); - } - - inherits(InnerObserver, AbstractObserver); - - InnerObserver.prototype.next = function (x) { this._state.o.onNext(x); }; - InnerObserver.prototype.error = function (e) { this._state.lastError = e; this._recurse(this._state); }; - InnerObserver.prototype.completed = function () { this._state.o.onCompleted(); }; - - return CatchErrorObservable; - }(ObservableBase)); - - Enumerable.prototype.catchError = function () { - return new CatchErrorObservable(this); - }; - - var RepeatEnumerable = (function (__super__) { - inherits(RepeatEnumerable, __super__); - function RepeatEnumerable(v, c) { - this.v = v; - this.c = c == null ? -1 : c; - } - - RepeatEnumerable.prototype[$iterator$] = function () { - return new RepeatEnumerator(this); - }; - - function RepeatEnumerator(p) { - this.v = p.v; - this.l = p.c; - } - - RepeatEnumerator.prototype.next = function () { - if (this.l === 0) { return doneEnumerator; } - if (this.l > 0) { this.l--; } - return { done: false, value: this.v }; - }; - - return RepeatEnumerable; - }(Enumerable)); - - var enumerableRepeat = Enumerable.repeat = function (value, repeatCount) { - return new RepeatEnumerable(value, repeatCount); - }; - - var OfEnumerable = (function(__super__) { - inherits(OfEnumerable, __super__); - function OfEnumerable(s, fn, thisArg) { - this.s = s; - this.fn = fn ? bindCallback(fn, thisArg, 3) : null; - } - OfEnumerable.prototype[$iterator$] = function () { - return new OfEnumerator(this); - }; - - function OfEnumerator(p) { - this.i = -1; - this.s = p.s; - this.l = this.s.length; - this.fn = p.fn; - } - - OfEnumerator.prototype.next = function () { - return ++this.i < this.l ? - { done: false, value: !this.fn ? this.s[this.i] : this.fn(this.s[this.i], this.i, this.s) } : - doneEnumerator; - }; - - return OfEnumerable; - }(Enumerable)); - - var enumerableOf = Enumerable.of = function (source, selector, thisArg) { - return new OfEnumerable(source, selector, thisArg); - }; - - var ToArrayObservable = (function(__super__) { - inherits(ToArrayObservable, __super__); - function ToArrayObservable(source) { - this.source = source; - __super__.call(this); - } - - ToArrayObservable.prototype.subscribeCore = function(o) { - return this.source.subscribe(new InnerObserver(o)); - }; - - inherits(InnerObserver, AbstractObserver); - function InnerObserver(o) { - this.o = o; - this.a = []; - AbstractObserver.call(this); - } - - InnerObserver.prototype.next = function (x) { this.a.push(x); }; - InnerObserver.prototype.error = function (e) { this.o.onError(e); }; - InnerObserver.prototype.completed = function () { this.o.onNext(this.a); this.o.onCompleted(); }; - - return ToArrayObservable; - }(ObservableBase)); - - /** - * Creates an array from an observable sequence. - * @returns {Observable} An observable sequence containing a single element with a list containing all the elements of the source sequence. - */ - observableProto.toArray = function () { - return new ToArrayObservable(this); - }; - - /** - * Creates an observable sequence from a specified subscribe method implementation. - * @example - * var res = Rx.Observable.create(function (observer) { return function () { } ); - * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); - * var res = Rx.Observable.create(function (observer) { } ); - * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. - * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. - */ - Observable.create = function (subscribe, parent) { - return new AnonymousObservable(subscribe, parent); - }; - - var Defer = (function(__super__) { - inherits(Defer, __super__); - function Defer(factory) { - this._f = factory; - __super__.call(this); - } - - Defer.prototype.subscribeCore = function (o) { - var result = tryCatch(this._f)(); - if (result === errorObj) { return observableThrow(result.e).subscribe(o);} - isPromise(result) && (result = observableFromPromise(result)); - return result.subscribe(o); - }; - - return Defer; - }(ObservableBase)); - - /** - * Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. - * - * @example - * var res = Rx.Observable.defer(function () { return Rx.Observable.fromArray([1,2,3]); }); - * @param {Function} observableFactory Observable factory function to invoke for each observer that subscribes to the resulting sequence or Promise. - * @returns {Observable} An observable sequence whose observers trigger an invocation of the given observable factory function. - */ - var observableDefer = Observable.defer = function (observableFactory) { - return new Defer(observableFactory); - }; - - var EmptyObservable = (function(__super__) { - inherits(EmptyObservable, __super__); - function EmptyObservable(scheduler) { - this.scheduler = scheduler; - __super__.call(this); - } - - EmptyObservable.prototype.subscribeCore = function (observer) { - var sink = new EmptySink(observer, this.scheduler); - return sink.run(); - }; - - function EmptySink(observer, scheduler) { - this.observer = observer; - this.scheduler = scheduler; - } - - function scheduleItem(s, state) { - state.onCompleted(); - return disposableEmpty; - } - - EmptySink.prototype.run = function () { - var state = this.observer; - return this.scheduler === immediateScheduler ? - scheduleItem(null, state) : - this.scheduler.schedule(state, scheduleItem); - }; - - return EmptyObservable; - }(ObservableBase)); - - var EMPTY_OBSERVABLE = new EmptyObservable(immediateScheduler); - - /** - * Returns an empty observable sequence, using the specified scheduler to send out the single OnCompleted message. - * - * @example - * var res = Rx.Observable.empty(); - * var res = Rx.Observable.empty(Rx.Scheduler.timeout); - * @param {Scheduler} [scheduler] Scheduler to send the termination call on. - * @returns {Observable} An observable sequence with no elements. - */ - var observableEmpty = Observable.empty = function (scheduler) { - isScheduler(scheduler) || (scheduler = immediateScheduler); - return scheduler === immediateScheduler ? EMPTY_OBSERVABLE : new EmptyObservable(scheduler); - }; - - var FromObservable = (function(__super__) { - inherits(FromObservable, __super__); - function FromObservable(iterable, fn, scheduler) { - this._iterable = iterable; - this._fn = fn; - this._scheduler = scheduler; - __super__.call(this); - } - - function createScheduleMethod(o, it, fn) { - return function loopRecursive(i, recurse) { - var next = tryCatch(it.next).call(it); - if (next === errorObj) { return o.onError(next.e); } - if (next.done) { return o.onCompleted(); } - - var result = next.value; - - if (isFunction(fn)) { - result = tryCatch(fn)(result, i); - if (result === errorObj) { return o.onError(result.e); } - } - - o.onNext(result); - recurse(i + 1); - }; - } - - FromObservable.prototype.subscribeCore = function (o) { - var list = Object(this._iterable), - it = getIterable(list); - - return this._scheduler.scheduleRecursive(0, createScheduleMethod(o, it, this._fn)); - }; - - return FromObservable; - }(ObservableBase)); - - var maxSafeInteger = Math.pow(2, 53) - 1; - - function StringIterable(s) { - this._s = s; - } - - StringIterable.prototype[$iterator$] = function () { - return new StringIterator(this._s); - }; - - function StringIterator(s) { - this._s = s; - this._l = s.length; - this._i = 0; - } - - StringIterator.prototype[$iterator$] = function () { - return this; - }; - - StringIterator.prototype.next = function () { - return this._i < this._l ? { done: false, value: this._s.charAt(this._i++) } : doneEnumerator; - }; - - function ArrayIterable(a) { - this._a = a; - } - - ArrayIterable.prototype[$iterator$] = function () { - return new ArrayIterator(this._a); - }; - - function ArrayIterator(a) { - this._a = a; - this._l = toLength(a); - this._i = 0; - } - - ArrayIterator.prototype[$iterator$] = function () { - return this; - }; - - ArrayIterator.prototype.next = function () { - return this._i < this._l ? { done: false, value: this._a[this._i++] } : doneEnumerator; - }; - - function numberIsFinite(value) { - return typeof value === 'number' && root.isFinite(value); - } - - function isNan(n) { - return n !== n; - } - - function getIterable(o) { - var i = o[$iterator$], it; - if (!i && typeof o === 'string') { - it = new StringIterable(o); - return it[$iterator$](); - } - if (!i && o.length !== undefined) { - it = new ArrayIterable(o); - return it[$iterator$](); - } - if (!i) { throw new TypeError('Object is not iterable'); } - return o[$iterator$](); - } - - function sign(value) { - var number = +value; - if (number === 0) { return number; } - if (isNaN(number)) { return number; } - return number < 0 ? -1 : 1; - } - - function toLength(o) { - var len = +o.length; - if (isNaN(len)) { return 0; } - if (len === 0 || !numberIsFinite(len)) { return len; } - len = sign(len) * Math.floor(Math.abs(len)); - if (len <= 0) { return 0; } - if (len > maxSafeInteger) { return maxSafeInteger; } - return len; - } - - /** - * This method creates a new Observable sequence from an array-like or iterable object. - * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. - * @param {Function} [mapFn] Map function to call on every element of the array. - * @param {Any} [thisArg] The context to use calling the mapFn if provided. - * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. - */ - var observableFrom = Observable.from = function (iterable, mapFn, thisArg, scheduler) { - if (iterable == null) { - throw new Error('iterable cannot be null.') - } - if (mapFn && !isFunction(mapFn)) { - throw new Error('mapFn when provided must be a function'); - } - if (mapFn) { - var mapper = bindCallback(mapFn, thisArg, 2); - } - isScheduler(scheduler) || (scheduler = currentThreadScheduler); - return new FromObservable(iterable, mapper, scheduler); - } - - var FromArrayObservable = (function(__super__) { - inherits(FromArrayObservable, __super__); - function FromArrayObservable(args, scheduler) { - this._args = args; - this._scheduler = scheduler; - __super__.call(this); - } - - function scheduleMethod(o, args) { - var len = args.length; - return function loopRecursive (i, recurse) { - if (i < len) { - o.onNext(args[i]); - recurse(i + 1); - } else { - o.onCompleted(); - } - }; - } - - FromArrayObservable.prototype.subscribeCore = function (o) { - return this._scheduler.scheduleRecursive(0, scheduleMethod(o, this._args)); - }; - - return FromArrayObservable; - }(ObservableBase)); - - /** - * Converts an array to an observable sequence, using an optional scheduler to enumerate the array. - * @deprecated use Observable.from or Observable.of - * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. - * @returns {Observable} The observable sequence whose elements are pulled from the given enumerable sequence. - */ - var observableFromArray = Observable.fromArray = function (array, scheduler) { - isScheduler(scheduler) || (scheduler = currentThreadScheduler); - return new FromArrayObservable(array, scheduler) - }; - - var NeverObservable = (function(__super__) { - inherits(NeverObservable, __super__); - function NeverObservable() { - __super__.call(this); - } - - NeverObservable.prototype.subscribeCore = function (observer) { - return disposableEmpty; - }; - - return NeverObservable; - }(ObservableBase)); - - var NEVER_OBSERVABLE = new NeverObservable(); - - /** - * Returns a non-terminating observable sequence, which can be used to denote an infinite duration (e.g. when using reactive joins). - * @returns {Observable} An observable sequence whose observers will never get called. - */ - var observableNever = Observable.never = function () { - return NEVER_OBSERVABLE; - }; - - function observableOf (scheduler, array) { - isScheduler(scheduler) || (scheduler = currentThreadScheduler); - return new FromArrayObservable(array, scheduler); - } - - /** - * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. - * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. - */ - Observable.of = function () { - var len = arguments.length, args = new Array(len); - for(var i = 0; i < len; i++) { args[i] = arguments[i]; } - return new FromArrayObservable(args, currentThreadScheduler); - }; - - /** - * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. - * @param {Scheduler} scheduler A scheduler to use for scheduling the arguments. - * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. - */ - Observable.ofWithScheduler = function (scheduler) { - var len = arguments.length, args = new Array(len - 1); - for(var i = 1; i < len; i++) { args[i - 1] = arguments[i]; } - return new FromArrayObservable(args, scheduler); - }; - - var PairsObservable = (function(__super__) { - inherits(PairsObservable, __super__); - function PairsObservable(o, scheduler) { - this._o = o; - this._keys = Object.keys(o); - this._scheduler = scheduler; - __super__.call(this); - } - - function scheduleMethod(o, obj, keys) { - return function loopRecursive(i, recurse) { - if (i < keys.length) { - var key = keys[i]; - o.onNext([key, obj[key]]); - recurse(i + 1); - } else { - o.onCompleted(); - } - }; - } - - PairsObservable.prototype.subscribeCore = function (o) { - return this._scheduler.scheduleRecursive(0, scheduleMethod(o, this._o, this._keys)); - }; - - return PairsObservable; - }(ObservableBase)); - - /** - * Convert an object into an observable sequence of [key, value] pairs. - * @param {Object} obj The object to inspect. - * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. - * @returns {Observable} An observable sequence of [key, value] pairs from the object. - */ - Observable.pairs = function (obj, scheduler) { - scheduler || (scheduler = currentThreadScheduler); - return new PairsObservable(obj, scheduler); - }; - - var RangeObservable = (function(__super__) { - inherits(RangeObservable, __super__); - function RangeObservable(start, count, scheduler) { - this.start = start; - this.rangeCount = count; - this.scheduler = scheduler; - __super__.call(this); - } - - function loopRecursive(start, count, o) { - return function loop (i, recurse) { - if (i < count) { - o.onNext(start + i); - recurse(i + 1); - } else { - o.onCompleted(); - } - }; - } - - RangeObservable.prototype.subscribeCore = function (o) { - return this.scheduler.scheduleRecursive( - 0, - loopRecursive(this.start, this.rangeCount, o) - ); - }; - - return RangeObservable; - }(ObservableBase)); - - /** - * Generates an observable sequence of integral numbers within a specified range, using the specified scheduler to send out observer messages. - * @param {Number} start The value of the first integer in the sequence. - * @param {Number} count The number of sequential integers to generate. - * @param {Scheduler} [scheduler] Scheduler to run the generator loop on. If not specified, defaults to Scheduler.currentThread. - * @returns {Observable} An observable sequence that contains a range of sequential integral numbers. - */ - Observable.range = function (start, count, scheduler) { - isScheduler(scheduler) || (scheduler = currentThreadScheduler); - return new RangeObservable(start, count, scheduler); - }; - - var RepeatObservable = (function(__super__) { - inherits(RepeatObservable, __super__); - function RepeatObservable(value, repeatCount, scheduler) { - this.value = value; - this.repeatCount = repeatCount == null ? -1 : repeatCount; - this.scheduler = scheduler; - __super__.call(this); - } - - RepeatObservable.prototype.subscribeCore = function (observer) { - var sink = new RepeatSink(observer, this); - return sink.run(); - }; - - return RepeatObservable; - }(ObservableBase)); - - function RepeatSink(observer, parent) { - this.observer = observer; - this.parent = parent; - } - - RepeatSink.prototype.run = function () { - var observer = this.observer, value = this.parent.value; - function loopRecursive(i, recurse) { - if (i === -1 || i > 0) { - observer.onNext(value); - i > 0 && i--; - } - if (i === 0) { return observer.onCompleted(); } - recurse(i); - } - - return this.parent.scheduler.scheduleRecursive(this.parent.repeatCount, loopRecursive); - }; - - /** - * Generates an observable sequence that repeats the given element the specified number of times, using the specified scheduler to send out observer messages. - * @param {Mixed} value Element to repeat. - * @param {Number} repeatCount [Optiona] Number of times to repeat the element. If not specified, repeats indefinitely. - * @param {Scheduler} scheduler Scheduler to run the producer loop on. If not specified, defaults to Scheduler.immediate. - * @returns {Observable} An observable sequence that repeats the given element the specified number of times. - */ - Observable.repeat = function (value, repeatCount, scheduler) { - isScheduler(scheduler) || (scheduler = currentThreadScheduler); - return new RepeatObservable(value, repeatCount, scheduler); - }; - - var JustObservable = (function(__super__) { - inherits(JustObservable, __super__); - function JustObservable(value, scheduler) { - this._value = value; - this._scheduler = scheduler; - __super__.call(this); - } - - JustObservable.prototype.subscribeCore = function (o) { - var state = [this._value, o]; - return this._scheduler === immediateScheduler ? - scheduleItem(null, state) : - this._scheduler.schedule(state, scheduleItem); - }; - - function scheduleItem(s, state) { - var value = state[0], observer = state[1]; - observer.onNext(value); - observer.onCompleted(); - return disposableEmpty; - } - - return JustObservable; - }(ObservableBase)); - - /** - * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. - * There is an alias called 'just' or browsers 0) { - this.parent.handleSubscribe(this.parent.q.shift()); - } else { - this.parent.activeCount--; - this.parent.done && this.parent.activeCount === 0 && this.parent.o.onCompleted(); - } - }; - - return MergeObserver; - }(AbstractObserver)); - - /** - * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. - * Or merges two observable sequences into a single observable sequence. - * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. - * @returns {Observable} The observable sequence that merges the elements of the inner sequences. - */ - observableProto.merge = function (maxConcurrentOrOther) { - return typeof maxConcurrentOrOther !== 'number' ? - observableMerge(this, maxConcurrentOrOther) : - new MergeObservable(this, maxConcurrentOrOther); - }; - - /** - * Merges all the observable sequences into a single observable sequence. - * The scheduler is optional and if not specified, the immediate scheduler is used. - * @returns {Observable} The observable sequence that merges the elements of the observable sequences. - */ - var observableMerge = Observable.merge = function () { - var scheduler, sources = [], i, len = arguments.length; - if (!arguments[0]) { - scheduler = immediateScheduler; - for(i = 1; i < len; i++) { sources.push(arguments[i]); } - } else if (isScheduler(arguments[0])) { - scheduler = arguments[0]; - for(i = 1; i < len; i++) { sources.push(arguments[i]); } - } else { - scheduler = immediateScheduler; - for(i = 0; i < len; i++) { sources.push(arguments[i]); } - } - if (Array.isArray(sources[0])) { - sources = sources[0]; - } - return observableOf(scheduler, sources).mergeAll(); - }; - - var CompositeError = Rx.CompositeError = function(errors) { - this.innerErrors = errors; - this.message = 'This contains multiple errors. Check the innerErrors'; - Error.call(this); - }; - CompositeError.prototype = Object.create(Error.prototype); - CompositeError.prototype.name = 'CompositeError'; - - var MergeDelayErrorObservable = (function(__super__) { - inherits(MergeDelayErrorObservable, __super__); - function MergeDelayErrorObservable(source) { - this.source = source; - __super__.call(this); - } - - MergeDelayErrorObservable.prototype.subscribeCore = function (o) { - var group = new CompositeDisposable(), - m = new SingleAssignmentDisposable(), - state = { isStopped: false, errors: [], o: o }; - - group.add(m); - m.setDisposable(this.source.subscribe(new MergeDelayErrorObserver(group, state))); - - return group; - }; - - return MergeDelayErrorObservable; - }(ObservableBase)); - - var MergeDelayErrorObserver = (function(__super__) { - inherits(MergeDelayErrorObserver, __super__); - function MergeDelayErrorObserver(group, state) { - this._group = group; - this._state = state; - __super__.call(this); - } - - function setCompletion(o, errors) { - if (errors.length === 0) { - o.onCompleted(); - } else if (errors.length === 1) { - o.onError(errors[0]); - } else { - o.onError(new CompositeError(errors)); - } - } - - MergeDelayErrorObserver.prototype.next = function (x) { - var inner = new SingleAssignmentDisposable(); - this._group.add(inner); - - // Check for promises support - isPromise(x) && (x = observableFromPromise(x)); - inner.setDisposable(x.subscribe(new InnerObserver(inner, this._group, this._state))); - }; - - MergeDelayErrorObserver.prototype.error = function (e) { - this._state.errors.push(e); - this._state.isStopped = true; - this._group.length === 1 && setCompletion(this._state.o, this._state.errors); - }; - - MergeDelayErrorObserver.prototype.completed = function () { - this._state.isStopped = true; - this._group.length === 1 && setCompletion(this._state.o, this._state.errors); - }; - - inherits(InnerObserver, __super__); - function InnerObserver(inner, group, state) { - this._inner = inner; - this._group = group; - this._state = state; - __super__.call(this); - } - - InnerObserver.prototype.next = function (x) { this._state.o.onNext(x); }; - InnerObserver.prototype.error = function (e) { - this._state.errors.push(e); - this._group.remove(this._inner); - this._state.isStopped && this._group.length === 1 && setCompletion(this._state.o, this._state.errors); - }; - InnerObserver.prototype.completed = function () { - this._group.remove(this._inner); - this._state.isStopped && this._group.length === 1 && setCompletion(this._state.o, this._state.errors); - }; - - return MergeDelayErrorObserver; - }(AbstractObserver)); - - /** - * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to - * receive all successfully emitted items from all of the source Observables without being interrupted by - * an error notification from one of them. - * - * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an - * error via the Observer's onError, mergeDelayError will refrain from propagating that - * error notification until all of the merged Observables have finished emitting items. - * @param {Array | Arguments} args Arguments or an array to merge. - * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable - */ - Observable.mergeDelayError = function() { - var args; - if (Array.isArray(arguments[0])) { - args = arguments[0]; - } else { - var len = arguments.length; - args = new Array(len); - for(var i = 0; i < len; i++) { args[i] = arguments[i]; } - } - var source = observableOf(null, args); - return new MergeDelayErrorObservable(source); - }; - - var MergeAllObservable = (function (__super__) { - inherits(MergeAllObservable, __super__); - - function MergeAllObservable(source) { - this.source = source; - __super__.call(this); - } - - MergeAllObservable.prototype.subscribeCore = function (o) { - var g = new CompositeDisposable(), m = new SingleAssignmentDisposable(); - g.add(m); - m.setDisposable(this.source.subscribe(new MergeAllObserver(o, g))); - return g; - }; - - return MergeAllObservable; - }(ObservableBase)); - - var MergeAllObserver = (function (__super__) { - function MergeAllObserver(o, g) { - this.o = o; - this.g = g; - this.done = false; - __super__.call(this); - } - - inherits(MergeAllObserver, __super__); - - MergeAllObserver.prototype.next = function(innerSource) { - var sad = new SingleAssignmentDisposable(); - this.g.add(sad); - isPromise(innerSource) && (innerSource = observableFromPromise(innerSource)); - sad.setDisposable(innerSource.subscribe(new InnerObserver(this, sad))); - }; - - MergeAllObserver.prototype.error = function (e) { - this.o.onError(e); - }; - - MergeAllObserver.prototype.completed = function () { - this.done = true; - this.g.length === 1 && this.o.onCompleted(); - }; - - function InnerObserver(parent, sad) { - this.parent = parent; - this.sad = sad; - __super__.call(this); - } - - inherits(InnerObserver, __super__); - - InnerObserver.prototype.next = function (x) { - this.parent.o.onNext(x); - }; - InnerObserver.prototype.error = function (e) { - this.parent.o.onError(e); - }; - InnerObserver.prototype.completed = function () { - this.parent.g.remove(this.sad); - this.parent.done && this.parent.g.length === 1 && this.parent.o.onCompleted(); - }; - - return MergeAllObserver; - }(AbstractObserver)); - - /** - * Merges an observable sequence of observable sequences into an observable sequence. - * @returns {Observable} The observable sequence that merges the elements of the inner sequences. - */ - observableProto.mergeAll = function () { - return new MergeAllObservable(this); - }; - - var SkipUntilObservable = (function(__super__) { - inherits(SkipUntilObservable, __super__); - - function SkipUntilObservable(source, other) { - this._s = source; - this._o = isPromise(other) ? observableFromPromise(other) : other; - this._open = false; - __super__.call(this); - } - - SkipUntilObservable.prototype.subscribeCore = function(o) { - var leftSubscription = new SingleAssignmentDisposable(); - leftSubscription.setDisposable(this._s.subscribe(new SkipUntilSourceObserver(o, this))); - - isPromise(this._o) && (this._o = observableFromPromise(this._o)); - - var rightSubscription = new SingleAssignmentDisposable(); - rightSubscription.setDisposable(this._o.subscribe(new SkipUntilOtherObserver(o, this, rightSubscription))); - - return new BinaryDisposable(leftSubscription, rightSubscription); - }; - - return SkipUntilObservable; - }(ObservableBase)); - - var SkipUntilSourceObserver = (function(__super__) { - inherits(SkipUntilSourceObserver, __super__); - function SkipUntilSourceObserver(o, p) { - this._o = o; - this._p = p; - __super__.call(this); - } - - SkipUntilSourceObserver.prototype.next = function (x) { - this._p._open && this._o.onNext(x); - }; - - SkipUntilSourceObserver.prototype.error = function (err) { - this._o.onError(err); - }; - - SkipUntilSourceObserver.prototype.onCompleted = function () { - this._p._open && this._o.onCompleted(); - }; - - return SkipUntilSourceObserver; - }(AbstractObserver)); - - var SkipUntilOtherObserver = (function(__super__) { - inherits(SkipUntilOtherObserver, __super__); - function SkipUntilOtherObserver(o, p, r) { - this._o = o; - this._p = p; - this._r = r; - __super__.call(this); - } - - SkipUntilOtherObserver.prototype.next = function () { - this._p._open = true; - this._r.dispose(); - }; - - SkipUntilOtherObserver.prototype.error = function (err) { - this._o.onError(err); - }; - - SkipUntilOtherObserver.prototype.onCompleted = function () { - this._r.dispose(); - }; - - return SkipUntilOtherObserver; - }(AbstractObserver)); - - /** - * Returns the values from the source observable sequence only after the other observable sequence produces a value. - * @param {Observable | Promise} other The observable sequence or Promise that triggers propagation of elements of the source sequence. - * @returns {Observable} An observable sequence containing the elements of the source sequence starting from the point the other sequence triggered propagation. - */ - observableProto.skipUntil = function (other) { - return new SkipUntilObservable(this, other); - }; - - var SwitchObservable = (function(__super__) { - inherits(SwitchObservable, __super__); - function SwitchObservable(source) { - this.source = source; - __super__.call(this); - } - - SwitchObservable.prototype.subscribeCore = function (o) { - var inner = new SerialDisposable(), s = this.source.subscribe(new SwitchObserver(o, inner)); - return new BinaryDisposable(s, inner); - }; - - inherits(SwitchObserver, AbstractObserver); - function SwitchObserver(o, inner) { - this.o = o; - this.inner = inner; - this.stopped = false; - this.latest = 0; - this.hasLatest = false; - AbstractObserver.call(this); - } - - SwitchObserver.prototype.next = function (innerSource) { - var d = new SingleAssignmentDisposable(), id = ++this.latest; - this.hasLatest = true; - this.inner.setDisposable(d); - isPromise(innerSource) && (innerSource = observableFromPromise(innerSource)); - d.setDisposable(innerSource.subscribe(new InnerObserver(this, id))); - }; - - SwitchObserver.prototype.error = function (e) { - this.o.onError(e); - }; - - SwitchObserver.prototype.completed = function () { - this.stopped = true; - !this.hasLatest && this.o.onCompleted(); - }; - - inherits(InnerObserver, AbstractObserver); - function InnerObserver(parent, id) { - this.parent = parent; - this.id = id; - AbstractObserver.call(this); - } - InnerObserver.prototype.next = function (x) { - this.parent.latest === this.id && this.parent.o.onNext(x); - }; - - InnerObserver.prototype.error = function (e) { - this.parent.latest === this.id && this.parent.o.onError(e); - }; - - InnerObserver.prototype.completed = function () { - if (this.parent.latest === this.id) { - this.parent.hasLatest = false; - this.parent.stopped && this.parent.o.onCompleted(); - } - }; - - return SwitchObservable; - }(ObservableBase)); - - /** - * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. - * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. - */ - observableProto['switch'] = observableProto.switchLatest = function () { - return new SwitchObservable(this); - }; - - var TakeUntilObservable = (function(__super__) { - inherits(TakeUntilObservable, __super__); - - function TakeUntilObservable(source, other) { - this.source = source; - this.other = isPromise(other) ? observableFromPromise(other) : other; - __super__.call(this); - } - - TakeUntilObservable.prototype.subscribeCore = function(o) { - return new BinaryDisposable( - this.source.subscribe(o), - this.other.subscribe(new TakeUntilObserver(o)) - ); - }; - - return TakeUntilObservable; - }(ObservableBase)); - - var TakeUntilObserver = (function(__super__) { - inherits(TakeUntilObserver, __super__); - function TakeUntilObserver(o) { - this._o = o; - __super__.call(this); - } - - TakeUntilObserver.prototype.next = function () { - this._o.onCompleted(); - }; - - TakeUntilObserver.prototype.error = function (err) { - this._o.onError(err); - }; - - TakeUntilObserver.prototype.onCompleted = noop; - - return TakeUntilObserver; - }(AbstractObserver)); - - /** - * Returns the values from the source observable sequence until the other observable sequence produces a value. - * @param {Observable | Promise} other Observable sequence or Promise that terminates propagation of elements of the source sequence. - * @returns {Observable} An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. - */ - observableProto.takeUntil = function (other) { - return new TakeUntilObservable(this, other); - }; - - function falseFactory() { return false; } - function argumentsToArray() { - var len = arguments.length, args = new Array(len); - for(var i = 0; i < len; i++) { args[i] = arguments[i]; } - return args; - } - - var WithLatestFromObservable = (function(__super__) { - inherits(WithLatestFromObservable, __super__); - function WithLatestFromObservable(source, sources, resultSelector) { - this._s = source; - this._ss = sources; - this._cb = resultSelector; - __super__.call(this); - } - - WithLatestFromObservable.prototype.subscribeCore = function (o) { - var len = this._ss.length; - var state = { - hasValue: arrayInitialize(len, falseFactory), - hasValueAll: false, - values: new Array(len) - }; - - var n = this._ss.length, subscriptions = new Array(n + 1); - for (var i = 0; i < n; i++) { - var other = this._ss[i], sad = new SingleAssignmentDisposable(); - isPromise(other) && (other = observableFromPromise(other)); - sad.setDisposable(other.subscribe(new WithLatestFromOtherObserver(o, i, state))); - subscriptions[i] = sad; - } - - var outerSad = new SingleAssignmentDisposable(); - outerSad.setDisposable(this._s.subscribe(new WithLatestFromSourceObserver(o, this._cb, state))); - subscriptions[n] = outerSad; - - return new NAryDisposable(subscriptions); - }; - - return WithLatestFromObservable; - }(ObservableBase)); - - var WithLatestFromOtherObserver = (function (__super__) { - inherits(WithLatestFromOtherObserver, __super__); - function WithLatestFromOtherObserver(o, i, state) { - this._o = o; - this._i = i; - this._state = state; - __super__.call(this); - } - - WithLatestFromOtherObserver.prototype.next = function (x) { - this._state.values[this._i] = x; - this._state.hasValue[this._i] = true; - this._state.hasValueAll = this._state.hasValue.every(identity); - }; - - WithLatestFromOtherObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - WithLatestFromOtherObserver.prototype.completed = noop; - - return WithLatestFromOtherObserver; - }(AbstractObserver)); - - var WithLatestFromSourceObserver = (function (__super__) { - inherits(WithLatestFromSourceObserver, __super__); - function WithLatestFromSourceObserver(o, cb, state) { - this._o = o; - this._cb = cb; - this._state = state; - __super__.call(this); - } - - WithLatestFromSourceObserver.prototype.next = function (x) { - var allValues = [x].concat(this._state.values); - if (!this._state.hasValueAll) { return; } - var res = tryCatch(this._cb).apply(null, allValues); - if (res === errorObj) { return this._o.onError(res.e); } - this._o.onNext(res); - }; - - WithLatestFromSourceObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - WithLatestFromSourceObserver.prototype.completed = function () { - this._o.onCompleted(); - }; - - return WithLatestFromSourceObserver; - }(AbstractObserver)); - - /** - * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. - * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - observableProto.withLatestFrom = function () { - if (arguments.length === 0) { throw new Error('invalid arguments'); } - - var len = arguments.length, args = new Array(len); - for(var i = 0; i < len; i++) { args[i] = arguments[i]; } - var resultSelector = isFunction(args[len - 1]) ? args.pop() : argumentsToArray; - Array.isArray(args[0]) && (args = args[0]); - - return new WithLatestFromObservable(this, args, resultSelector); - }; - - function falseFactory() { return false; } - function emptyArrayFactory() { return []; } - - var ZipObservable = (function(__super__) { - inherits(ZipObservable, __super__); - function ZipObservable(sources, resultSelector) { - this._s = sources; - this._cb = resultSelector; - __super__.call(this); - } - - ZipObservable.prototype.subscribeCore = function(observer) { - var n = this._s.length, - subscriptions = new Array(n), - done = arrayInitialize(n, falseFactory), - q = arrayInitialize(n, emptyArrayFactory); - - for (var i = 0; i < n; i++) { - var source = this._s[i], sad = new SingleAssignmentDisposable(); - subscriptions[i] = sad; - isPromise(source) && (source = observableFromPromise(source)); - sad.setDisposable(source.subscribe(new ZipObserver(observer, i, this, q, done))); - } - - return new NAryDisposable(subscriptions); - }; - - return ZipObservable; - }(ObservableBase)); - - var ZipObserver = (function (__super__) { - inherits(ZipObserver, __super__); - function ZipObserver(o, i, p, q, d) { - this._o = o; - this._i = i; - this._p = p; - this._q = q; - this._d = d; - __super__.call(this); - } - - function notEmpty(x) { return x.length > 0; } - function shiftEach(x) { return x.shift(); } - function notTheSame(i) { - return function (x, j) { - return j !== i; - }; - } - - ZipObserver.prototype.next = function (x) { - this._q[this._i].push(x); - if (this._q.every(notEmpty)) { - var queuedValues = this._q.map(shiftEach); - var res = tryCatch(this._p._cb).apply(null, queuedValues); - if (res === errorObj) { return this._o.onError(res.e); } - this._o.onNext(res); - } else if (this._d.filter(notTheSame(this._i)).every(identity)) { - this._o.onCompleted(); - } - }; - - ZipObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - ZipObserver.prototype.completed = function () { - this._d[this._i] = true; - this._d.every(identity) && this._o.onCompleted(); - }; - - return ZipObserver; - }(AbstractObserver)); - - /** - * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. - * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. - * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. - */ - observableProto.zip = function () { - if (arguments.length === 0) { throw new Error('invalid arguments'); } - - var len = arguments.length, args = new Array(len); - for(var i = 0; i < len; i++) { args[i] = arguments[i]; } - var resultSelector = isFunction(args[len - 1]) ? args.pop() : argumentsToArray; - Array.isArray(args[0]) && (args = args[0]); - - var parent = this; - args.unshift(parent); - - return new ZipObservable(args, resultSelector); - }; - - /** - * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - * @param arguments Observable sources. - * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. - * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - Observable.zip = function () { - var len = arguments.length, args = new Array(len); - for(var i = 0; i < len; i++) { args[i] = arguments[i]; } - if (Array.isArray(args[0])) { - args = isFunction(args[1]) ? args[0].concat(args[1]) : args[0]; - } - var first = args.shift(); - return first.zip.apply(first, args); - }; - -function falseFactory() { return false; } -function emptyArrayFactory() { return []; } -function argumentsToArray() { - var len = arguments.length, args = new Array(len); - for(var i = 0; i < len; i++) { args[i] = arguments[i]; } - return args; -} - -var ZipIterableObservable = (function(__super__) { - inherits(ZipIterableObservable, __super__); - function ZipIterableObservable(sources, cb) { - this.sources = sources; - this._cb = cb; - __super__.call(this); - } - - ZipIterableObservable.prototype.subscribeCore = function (o) { - var sources = this.sources, len = sources.length, subscriptions = new Array(len); - - var state = { - q: arrayInitialize(len, emptyArrayFactory), - done: arrayInitialize(len, falseFactory), - cb: this._cb, - o: o - }; - - for (var i = 0; i < len; i++) { - (function (i) { - var source = sources[i], sad = new SingleAssignmentDisposable(); - (isArrayLike(source) || isIterable(source)) && (source = observableFrom(source)); - - subscriptions[i] = sad; - sad.setDisposable(source.subscribe(new ZipIterableObserver(state, i))); - }(i)); - } - - return new NAryDisposable(subscriptions); - }; - - return ZipIterableObservable; -}(ObservableBase)); - -var ZipIterableObserver = (function (__super__) { - inherits(ZipIterableObserver, __super__); - function ZipIterableObserver(s, i) { - this._s = s; - this._i = i; - __super__.call(this); - } - - function notEmpty(x) { return x.length > 0; } - function shiftEach(x) { return x.shift(); } - function notTheSame(i) { - return function (x, j) { - return j !== i; - }; - } - - ZipIterableObserver.prototype.next = function (x) { - this._s.q[this._i].push(x); - if (this._s.q.every(notEmpty)) { - var queuedValues = this._s.q.map(shiftEach), - res = tryCatch(this._s.cb).apply(null, queuedValues); - if (res === errorObj) { return this._s.o.onError(res.e); } - this._s.o.onNext(res); - } else if (this._s.done.filter(notTheSame(this._i)).every(identity)) { - this._s.o.onCompleted(); - } - }; - - ZipIterableObserver.prototype.error = function (e) { this._s.o.onError(e); }; - - ZipIterableObserver.prototype.completed = function () { - this._s.done[this._i] = true; - this._s.done.every(identity) && this._s.o.onCompleted(); - }; - - return ZipIterableObserver; -}(AbstractObserver)); - -/** - * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. - * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. - * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. - */ -observableProto.zipIterable = function () { - if (arguments.length === 0) { throw new Error('invalid arguments'); } - - var len = arguments.length, args = new Array(len); - for(var i = 0; i < len; i++) { args[i] = arguments[i]; } - var resultSelector = isFunction(args[len - 1]) ? args.pop() : argumentsToArray; - - var parent = this; - args.unshift(parent); - return new ZipIterableObservable(args, resultSelector); -}; - - function asObservable(source) { - return function subscribe(o) { return source.subscribe(o); }; - } - - /** - * Hides the identity of an observable sequence. - * @returns {Observable} An observable sequence that hides the identity of the source sequence. - */ - observableProto.asObservable = function () { - return new AnonymousObservable(asObservable(this), this); - }; - - var DematerializeObservable = (function (__super__) { - inherits(DematerializeObservable, __super__); - function DematerializeObservable(source) { - this.source = source; - __super__.call(this); - } - - DematerializeObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new DematerializeObserver(o)); - }; - - return DematerializeObservable; - }(ObservableBase)); - - var DematerializeObserver = (function (__super__) { - inherits(DematerializeObserver, __super__); - - function DematerializeObserver(o) { - this._o = o; - __super__.call(this); - } - - DematerializeObserver.prototype.next = function (x) { x.accept(this._o); }; - DematerializeObserver.prototype.error = function (e) { this._o.onError(e); }; - DematerializeObserver.prototype.completed = function () { this._o.onCompleted(); }; - - return DematerializeObserver; - }(AbstractObserver)); - - /** - * Dematerializes the explicit notification values of an observable sequence as implicit notifications. - * @returns {Observable} An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. - */ - observableProto.dematerialize = function () { - return new DematerializeObservable(this); - }; - - var DistinctUntilChangedObservable = (function(__super__) { - inherits(DistinctUntilChangedObservable, __super__); - function DistinctUntilChangedObservable(source, keyFn, comparer) { - this.source = source; - this.keyFn = keyFn; - this.comparer = comparer; - __super__.call(this); - } - - DistinctUntilChangedObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new DistinctUntilChangedObserver(o, this.keyFn, this.comparer)); - }; - - return DistinctUntilChangedObservable; - }(ObservableBase)); - - var DistinctUntilChangedObserver = (function(__super__) { - inherits(DistinctUntilChangedObserver, __super__); - function DistinctUntilChangedObserver(o, keyFn, comparer) { - this.o = o; - this.keyFn = keyFn; - this.comparer = comparer; - this.hasCurrentKey = false; - this.currentKey = null; - __super__.call(this); - } - - DistinctUntilChangedObserver.prototype.next = function (x) { - var key = x, comparerEquals; - if (isFunction(this.keyFn)) { - key = tryCatch(this.keyFn)(x); - if (key === errorObj) { return this.o.onError(key.e); } - } - if (this.hasCurrentKey) { - comparerEquals = tryCatch(this.comparer)(this.currentKey, key); - if (comparerEquals === errorObj) { return this.o.onError(comparerEquals.e); } - } - if (!this.hasCurrentKey || !comparerEquals) { - this.hasCurrentKey = true; - this.currentKey = key; - this.o.onNext(x); - } - }; - DistinctUntilChangedObserver.prototype.error = function(e) { - this.o.onError(e); - }; - DistinctUntilChangedObserver.prototype.completed = function () { - this.o.onCompleted(); - }; - - return DistinctUntilChangedObserver; - }(AbstractObserver)); - - /** - * Returns an observable sequence that contains only distinct contiguous elements according to the keyFn and the comparer. - * @param {Function} [keyFn] A function to compute the comparison key for each element. If not provided, it projects the value. - * @param {Function} [comparer] Equality comparer for computed key values. If not provided, defaults to an equality comparer function. - * @returns {Observable} An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. - */ - observableProto.distinctUntilChanged = function (keyFn, comparer) { - comparer || (comparer = defaultComparer); - return new DistinctUntilChangedObservable(this, keyFn, comparer); - }; - - var TapObservable = (function(__super__) { - inherits(TapObservable,__super__); - function TapObservable(source, observerOrOnNext, onError, onCompleted) { - this.source = source; - this._oN = observerOrOnNext; - this._oE = onError; - this._oC = onCompleted; - __super__.call(this); - } - - TapObservable.prototype.subscribeCore = function(o) { - return this.source.subscribe(new InnerObserver(o, this)); - }; - - inherits(InnerObserver, AbstractObserver); - function InnerObserver(o, p) { - this.o = o; - this.t = !p._oN || isFunction(p._oN) ? - observerCreate(p._oN || noop, p._oE || noop, p._oC || noop) : - p._oN; - this.isStopped = false; - AbstractObserver.call(this); - } - InnerObserver.prototype.next = function(x) { - var res = tryCatch(this.t.onNext).call(this.t, x); - if (res === errorObj) { this.o.onError(res.e); } - this.o.onNext(x); - }; - InnerObserver.prototype.error = function(err) { - var res = tryCatch(this.t.onError).call(this.t, err); - if (res === errorObj) { return this.o.onError(res.e); } - this.o.onError(err); - }; - InnerObserver.prototype.completed = function() { - var res = tryCatch(this.t.onCompleted).call(this.t); - if (res === errorObj) { return this.o.onError(res.e); } - this.o.onCompleted(); - }; - - return TapObservable; - }(ObservableBase)); - - /** - * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. - * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. - * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an o. - * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. - * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. - * @returns {Observable} The source sequence with the side-effecting behavior applied. - */ - observableProto['do'] = observableProto.tap = observableProto.doAction = function (observerOrOnNext, onError, onCompleted) { - return new TapObservable(this, observerOrOnNext, onError, onCompleted); - }; - - /** - * Invokes an action for each element in the observable sequence. - * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. - * @param {Function} onNext Action to invoke for each element in the observable sequence. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Observable} The source sequence with the side-effecting behavior applied. - */ - observableProto.doOnNext = observableProto.tapOnNext = function (onNext, thisArg) { - return this.tap(typeof thisArg !== 'undefined' ? function (x) { onNext.call(thisArg, x); } : onNext); - }; - - /** - * Invokes an action upon exceptional termination of the observable sequence. - * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. - * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Observable} The source sequence with the side-effecting behavior applied. - */ - observableProto.doOnError = observableProto.tapOnError = function (onError, thisArg) { - return this.tap(noop, typeof thisArg !== 'undefined' ? function (e) { onError.call(thisArg, e); } : onError); - }; - - /** - * Invokes an action upon graceful termination of the observable sequence. - * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. - * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Observable} The source sequence with the side-effecting behavior applied. - */ - observableProto.doOnCompleted = observableProto.tapOnCompleted = function (onCompleted, thisArg) { - return this.tap(noop, null, typeof thisArg !== 'undefined' ? function () { onCompleted.call(thisArg); } : onCompleted); - }; - - var FinallyObservable = (function (__super__) { - inherits(FinallyObservable, __super__); - function FinallyObservable(source, fn, thisArg) { - this.source = source; - this._fn = bindCallback(fn, thisArg, 0); - __super__.call(this); - } - - FinallyObservable.prototype.subscribeCore = function (o) { - var d = tryCatch(this.source.subscribe).call(this.source, o); - if (d === errorObj) { - this._fn(); - thrower(d.e); - } - - return new FinallyDisposable(d, this._fn); - }; - - function FinallyDisposable(s, fn) { - this.isDisposed = false; - this._s = s; - this._fn = fn; - } - FinallyDisposable.prototype.dispose = function () { - if (!this.isDisposed) { - var res = tryCatch(this._s.dispose).call(this._s); - this._fn(); - res === errorObj && thrower(res.e); - } - }; - - return FinallyObservable; - - }(ObservableBase)); - - /** - * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. - * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. - * @returns {Observable} Source sequence with the action-invoking termination behavior applied. - */ - observableProto['finally'] = function (action, thisArg) { - return new FinallyObservable(this, action, thisArg); - }; - - var IgnoreElementsObservable = (function(__super__) { - inherits(IgnoreElementsObservable, __super__); - - function IgnoreElementsObservable(source) { - this.source = source; - __super__.call(this); - } - - IgnoreElementsObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new InnerObserver(o)); - }; - - function InnerObserver(o) { - this.o = o; - this.isStopped = false; - } - InnerObserver.prototype.onNext = noop; - InnerObserver.prototype.onError = function (err) { - if(!this.isStopped) { - this.isStopped = true; - this.o.onError(err); - } - }; - InnerObserver.prototype.onCompleted = function () { - if(!this.isStopped) { - this.isStopped = true; - this.o.onCompleted(); - } - }; - InnerObserver.prototype.dispose = function() { this.isStopped = true; }; - InnerObserver.prototype.fail = function (e) { - if (!this.isStopped) { - this.isStopped = true; - this.observer.onError(e); - return true; - } - - return false; - }; - - return IgnoreElementsObservable; - }(ObservableBase)); - - /** - * Ignores all elements in an observable sequence leaving only the termination messages. - * @returns {Observable} An empty observable sequence that signals termination, successful or exceptional, of the source sequence. - */ - observableProto.ignoreElements = function () { - return new IgnoreElementsObservable(this); - }; - - var MaterializeObservable = (function (__super__) { - inherits(MaterializeObservable, __super__); - function MaterializeObservable(source, fn) { - this.source = source; - __super__.call(this); - } - - MaterializeObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new MaterializeObserver(o)); - }; - - return MaterializeObservable; - }(ObservableBase)); - - var MaterializeObserver = (function (__super__) { - inherits(MaterializeObserver, __super__); - - function MaterializeObserver(o) { - this._o = o; - __super__.call(this); - } - - MaterializeObserver.prototype.next = function (x) { this._o.onNext(notificationCreateOnNext(x)) }; - MaterializeObserver.prototype.error = function (e) { this._o.onNext(notificationCreateOnError(e)); this._o.onCompleted(); }; - MaterializeObserver.prototype.completed = function () { this._o.onNext(notificationCreateOnCompleted()); this._o.onCompleted(); }; - - return MaterializeObserver; - }(AbstractObserver)); - - /** - * Materializes the implicit notifications of an observable sequence as explicit notification values. - * @returns {Observable} An observable sequence containing the materialized notification values from the source sequence. - */ - observableProto.materialize = function () { - return new MaterializeObservable(this); - }; - - /** - * Repeats the observable sequence a specified number of times. If the repeat count is not specified, the sequence repeats indefinitely. - * @param {Number} [repeatCount] Number of times to repeat the sequence. If not provided, repeats the sequence indefinitely. - * @returns {Observable} The observable sequence producing the elements of the given sequence repeatedly. - */ - observableProto.repeat = function (repeatCount) { - return enumerableRepeat(this, repeatCount).concat(); - }; - - /** - * Repeats the source observable sequence the specified number of times or until it successfully terminates. If the retry count is not specified, it retries indefinitely. - * Note if you encounter an error and want it to retry once, then you must use .retry(2); - * - * @example - * var res = retried = retry.repeat(); - * var res = retried = retry.repeat(2); - * @param {Number} [retryCount] Number of times to retry the sequence. If not provided, retry the sequence indefinitely. - * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. - */ - observableProto.retry = function (retryCount) { - return enumerableRepeat(this, retryCount).catchError(); - }; - - function repeat(value) { - return { - '@@iterator': function () { - return { - next: function () { - return { done: false, value: value }; - } - }; - } - }; - } - - var RetryWhenObservable = (function(__super__) { - function createDisposable(state) { - return { - isDisposed: false, - dispose: function () { - if (!this.isDisposed) { - this.isDisposed = true; - state.isDisposed = true; - } - } - }; - } - - function RetryWhenObservable(source, notifier) { - this.source = source; - this._notifier = notifier; - __super__.call(this); - } - - inherits(RetryWhenObservable, __super__); - - RetryWhenObservable.prototype.subscribeCore = function (o) { - var exceptions = new Subject(), - notifier = new Subject(), - handled = this._notifier(exceptions), - notificationDisposable = handled.subscribe(notifier); - - var e = this.source['@@iterator'](); - - var state = { isDisposed: false }, - lastError, - subscription = new SerialDisposable(); - var cancelable = currentThreadScheduler.scheduleRecursive(null, function (_, recurse) { - if (state.isDisposed) { return; } - var currentItem = e.next(); - - if (currentItem.done) { - if (lastError) { - o.onError(lastError); - } else { - o.onCompleted(); - } - return; - } - - // Check if promise - var currentValue = currentItem.value; - isPromise(currentValue) && (currentValue = observableFromPromise(currentValue)); - - var outer = new SingleAssignmentDisposable(); - var inner = new SingleAssignmentDisposable(); - subscription.setDisposable(new BinaryDisposable(inner, outer)); - outer.setDisposable(currentValue.subscribe( - function(x) { o.onNext(x); }, - function (exn) { - inner.setDisposable(notifier.subscribe(recurse, function(ex) { - o.onError(ex); - }, function() { - o.onCompleted(); - })); - - exceptions.onNext(exn); - outer.dispose(); - }, - function() { o.onCompleted(); })); - }); - - return new NAryDisposable([notificationDisposable, subscription, cancelable, createDisposable(state)]); - }; - - return RetryWhenObservable; - }(ObservableBase)); - - observableProto.retryWhen = function (notifier) { - return new RetryWhenObservable(repeat(this), notifier); - }; - - function repeat(value) { - return { - '@@iterator': function () { - return { - next: function () { - return { done: false, value: value }; - } - }; - } - }; - } - - var RepeatWhenObservable = (function(__super__) { - function createDisposable(state) { - return { - isDisposed: false, - dispose: function () { - if (!this.isDisposed) { - this.isDisposed = true; - state.isDisposed = true; - } - } - }; - } - - function RepeatWhenObservable(source, notifier) { - this.source = source; - this._notifier = notifier; - __super__.call(this); - } - - inherits(RepeatWhenObservable, __super__); - - RepeatWhenObservable.prototype.subscribeCore = function (o) { - var completions = new Subject(), - notifier = new Subject(), - handled = this._notifier(completions), - notificationDisposable = handled.subscribe(notifier); - - var e = this.source['@@iterator'](); - - var state = { isDisposed: false }, - lastError, - subscription = new SerialDisposable(); - var cancelable = currentThreadScheduler.scheduleRecursive(null, function (_, recurse) { - if (state.isDisposed) { return; } - var currentItem = e.next(); - - if (currentItem.done) { - if (lastError) { - o.onError(lastError); - } else { - o.onCompleted(); - } - return; - } - - // Check if promise - var currentValue = currentItem.value; - isPromise(currentValue) && (currentValue = observableFromPromise(currentValue)); - - var outer = new SingleAssignmentDisposable(); - var inner = new SingleAssignmentDisposable(); - subscription.setDisposable(new BinaryDisposable(inner, outer)); - outer.setDisposable(currentValue.subscribe( - function(x) { o.onNext(x); }, - function (exn) { o.onError(exn); }, - function() { - inner.setDisposable(notifier.subscribe(recurse, function(ex) { - o.onError(ex); - }, function() { - o.onCompleted(); - })); - - completions.onNext(null); - outer.dispose(); - })); - }); - - return new NAryDisposable([notificationDisposable, subscription, cancelable, createDisposable(state)]); - }; - - return RepeatWhenObservable; - }(ObservableBase)); - - observableProto.repeatWhen = function (notifier) { - return new RepeatWhenObservable(repeat(this), notifier); - }; - - var ScanObservable = (function(__super__) { - inherits(ScanObservable, __super__); - function ScanObservable(source, accumulator, hasSeed, seed) { - this.source = source; - this.accumulator = accumulator; - this.hasSeed = hasSeed; - this.seed = seed; - __super__.call(this); - } - - ScanObservable.prototype.subscribeCore = function(o) { - return this.source.subscribe(new ScanObserver(o,this)); - }; - - return ScanObservable; - }(ObservableBase)); - - var ScanObserver = (function (__super__) { - inherits(ScanObserver, __super__); - function ScanObserver(o, parent) { - this._o = o; - this._p = parent; - this._fn = parent.accumulator; - this._hs = parent.hasSeed; - this._s = parent.seed; - this._ha = false; - this._a = null; - this._hv = false; - this._i = 0; - __super__.call(this); - } - - ScanObserver.prototype.next = function (x) { - !this._hv && (this._hv = true); - if (this._ha) { - this._a = tryCatch(this._fn)(this._a, x, this._i, this._p); - } else { - this._a = this._hs ? tryCatch(this._fn)(this._s, x, this._i, this._p) : x; - this._ha = true; - } - if (this._a === errorObj) { return this._o.onError(this._a.e); } - this._o.onNext(this._a); - this._i++; - }; - - ScanObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - ScanObserver.prototype.completed = function () { - !this._hv && this._hs && this._o.onNext(this._s); - this._o.onCompleted(); - }; - - return ScanObserver; - }(AbstractObserver)); - - /** - * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. - * For aggregation behavior with no intermediate results, see Observable.aggregate. - * @param {Mixed} [seed] The initial accumulator value. - * @param {Function} accumulator An accumulator function to be invoked on each element. - * @returns {Observable} An observable sequence containing the accumulated values. - */ - observableProto.scan = function () { - var hasSeed = false, seed, accumulator = arguments[0]; - if (arguments.length === 2) { - hasSeed = true; - seed = arguments[1]; - } - return new ScanObservable(this, accumulator, hasSeed, seed); - }; - - var SkipLastObservable = (function (__super__) { - inherits(SkipLastObservable, __super__); - function SkipLastObservable(source, c) { - this.source = source; - this._c = c; - __super__.call(this); - } - - SkipLastObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new SkipLastObserver(o, this._c)); - }; - - return SkipLastObservable; - }(ObservableBase)); - - var SkipLastObserver = (function (__super__) { - inherits(SkipLastObserver, __super__); - function SkipLastObserver(o, c) { - this._o = o; - this._c = c; - this._q = []; - __super__.call(this); - } - - SkipLastObserver.prototype.next = function (x) { - this._q.push(x); - this._q.length > this._c && this._o.onNext(this._q.shift()); - }; - - SkipLastObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - SkipLastObserver.prototype.completed = function () { - this._o.onCompleted(); - }; - - return SkipLastObserver; - }(AbstractObserver)); - - /** - * Bypasses a specified number of elements at the end of an observable sequence. - * @description - * This operator accumulates a queue with a length enough to store the first `count` elements. As more elements are - * received, elements are taken from the front of the queue and produced on the result sequence. This causes elements to be delayed. - * @param count Number of elements to bypass at the end of the source sequence. - * @returns {Observable} An observable sequence containing the source sequence elements except for the bypassed ones at the end. - */ - observableProto.skipLast = function (count) { - if (count < 0) { throw new ArgumentOutOfRangeError(); } - return new SkipLastObservable(this, count); - }; - - /** - * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. - * @example - * var res = source.startWith(1, 2, 3); - * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); - * @param {Arguments} args The specified values to prepend to the observable sequence - * @returns {Observable} The source sequence prepended with the specified values. - */ - observableProto.startWith = function () { - var values, scheduler, start = 0; - if (!!arguments.length && isScheduler(arguments[0])) { - scheduler = arguments[0]; - start = 1; - } else { - scheduler = immediateScheduler; - } - for(var args = [], i = start, len = arguments.length; i < len; i++) { args.push(arguments[i]); } - return enumerableOf([observableFromArray(args, scheduler), this]).concat(); - }; - - var TakeLastObserver = (function (__super__) { - inherits(TakeLastObserver, __super__); - function TakeLastObserver(o, c) { - this._o = o; - this._c = c; - this._q = []; - __super__.call(this); - } - - TakeLastObserver.prototype.next = function (x) { - this._q.push(x); - this._q.length > this._c && this._q.shift(); - }; - - TakeLastObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - TakeLastObserver.prototype.completed = function () { - while (this._q.length > 0) { this._o.onNext(this._q.shift()); } - this._o.onCompleted(); - }; - - return TakeLastObserver; - }(AbstractObserver)); - - /** - * Returns a specified number of contiguous elements from the end of an observable sequence. - * @description - * This operator accumulates a buffer with a length enough to store elements count elements. Upon completion of - * the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. - * @param {Number} count Number of elements to take from the end of the source sequence. - * @returns {Observable} An observable sequence containing the specified number of elements from the end of the source sequence. - */ - observableProto.takeLast = function (count) { - if (count < 0) { throw new ArgumentOutOfRangeError(); } - var source = this; - return new AnonymousObservable(function (o) { - return source.subscribe(new TakeLastObserver(o, count)); - }, source); - }; - -observableProto.flatMapConcat = observableProto.concatMap = function(selector, resultSelector, thisArg) { - return new FlatMapObservable(this, selector, resultSelector, thisArg).merge(1); -}; - var MapObservable = (function (__super__) { - inherits(MapObservable, __super__); - - function MapObservable(source, selector, thisArg) { - this.source = source; - this.selector = bindCallback(selector, thisArg, 3); - __super__.call(this); - } - - function innerMap(selector, self) { - return function (x, i, o) { return selector.call(this, self.selector(x, i, o), i, o); }; - } - - MapObservable.prototype.internalMap = function (selector, thisArg) { - return new MapObservable(this.source, innerMap(selector, this), thisArg); - }; - - MapObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new InnerObserver(o, this.selector, this)); - }; - - inherits(InnerObserver, AbstractObserver); - function InnerObserver(o, selector, source) { - this.o = o; - this.selector = selector; - this.source = source; - this.i = 0; - AbstractObserver.call(this); - } - - InnerObserver.prototype.next = function(x) { - var result = tryCatch(this.selector)(x, this.i++, this.source); - if (result === errorObj) { return this.o.onError(result.e); } - this.o.onNext(result); - }; - - InnerObserver.prototype.error = function (e) { - this.o.onError(e); - }; - - InnerObserver.prototype.completed = function () { - this.o.onCompleted(); - }; - - return MapObservable; - - }(ObservableBase)); - - /** - * Projects each element of an observable sequence into a new form by incorporating the element's index. - * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. - */ - observableProto.map = observableProto.select = function (selector, thisArg) { - var selectorFn = typeof selector === 'function' ? selector : function () { return selector; }; - return this instanceof MapObservable ? - this.internalMap(selectorFn, thisArg) : - new MapObservable(this, selectorFn, thisArg); - }; - - function plucker(args, len) { - return function mapper(x) { - var currentProp = x; - for (var i = 0; i < len; i++) { - var p = currentProp[args[i]]; - if (typeof p !== 'undefined') { - currentProp = p; - } else { - return undefined; - } - } - return currentProp; - }; - } - - /** - * Retrieves the value of a specified nested property from all elements in - * the Observable sequence. - * @param {Arguments} arguments The nested properties to pluck. - * @returns {Observable} Returns a new Observable sequence of property values. - */ - observableProto.pluck = function () { - var len = arguments.length, args = new Array(len); - if (len === 0) { throw new Error('List of properties cannot be empty.'); } - for(var i = 0; i < len; i++) { args[i] = arguments[i]; } - return this.map(plucker(args, len)); - }; - -observableProto.flatMap = observableProto.selectMany = function(selector, resultSelector, thisArg) { - return new FlatMapObservable(this, selector, resultSelector, thisArg).mergeAll(); -}; - -Rx.Observable.prototype.flatMapLatest = function(selector, resultSelector, thisArg) { - return new FlatMapObservable(this, selector, resultSelector, thisArg).switchLatest(); -}; - var SkipObservable = (function(__super__) { - inherits(SkipObservable, __super__); - function SkipObservable(source, count) { - this.source = source; - this._count = count; - __super__.call(this); - } - - SkipObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new SkipObserver(o, this._count)); - }; - - function SkipObserver(o, c) { - this._o = o; - this._r = c; - AbstractObserver.call(this); - } - - inherits(SkipObserver, AbstractObserver); - - SkipObserver.prototype.next = function (x) { - if (this._r <= 0) { - this._o.onNext(x); - } else { - this._r--; - } - }; - SkipObserver.prototype.error = function(e) { this._o.onError(e); }; - SkipObserver.prototype.completed = function() { this._o.onCompleted(); }; - - return SkipObservable; - }(ObservableBase)); - - /** - * Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. - * @param {Number} count The number of elements to skip before returning the remaining elements. - * @returns {Observable} An observable sequence that contains the elements that occur after the specified index in the input sequence. - */ - observableProto.skip = function (count) { - if (count < 0) { throw new ArgumentOutOfRangeError(); } - return new SkipObservable(this, count); - }; - - var SkipWhileObservable = (function (__super__) { - inherits(SkipWhileObservable, __super__); - function SkipWhileObservable(source, fn) { - this.source = source; - this._fn = fn; - __super__.call(this); - } - - SkipWhileObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new SkipWhileObserver(o, this)); - }; - - return SkipWhileObservable; - }(ObservableBase)); - - var SkipWhileObserver = (function (__super__) { - inherits(SkipWhileObserver, __super__); - - function SkipWhileObserver(o, p) { - this._o = o; - this._p = p; - this._i = 0; - this._r = false; - __super__.call(this); - } - - SkipWhileObserver.prototype.next = function (x) { - if (!this._r) { - var res = tryCatch(this._p._fn)(x, this._i++, this._p); - if (res === errorObj) { return this._o.onError(res.e); } - this._r = !res; - } - this._r && this._o.onNext(x); - }; - SkipWhileObserver.prototype.error = function (e) { this._o.onError(e); }; - SkipWhileObserver.prototype.completed = function () { this._o.onCompleted(); }; - - return SkipWhileObserver; - }(AbstractObserver)); - - /** - * Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. - * The element's index is used in the logic of the predicate function. - * - * var res = source.skipWhile(function (value) { return value < 10; }); - * var res = source.skipWhile(function (value, index) { return value < 10 || index < 10; }); - * @param {Function} predicate A function to test each element for a condition; the second parameter of the function represents the index of the source element. - * @param {Any} [thisArg] Object to use as this when executing callback. - * @returns {Observable} An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. - */ - observableProto.skipWhile = function (predicate, thisArg) { - var fn = bindCallback(predicate, thisArg, 3); - return new SkipWhileObservable(this, fn); - }; - - var TakeObservable = (function(__super__) { - inherits(TakeObservable, __super__); - function TakeObservable(source, count) { - this.source = source; - this._count = count; - __super__.call(this); - } - - TakeObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new TakeObserver(o, this._count)); - }; - - function TakeObserver(o, c) { - this._o = o; - this._c = c; - this._r = c; - AbstractObserver.call(this); - } - - inherits(TakeObserver, AbstractObserver); - - TakeObserver.prototype.next = function (x) { - if (this._r-- > 0) { - this._o.onNext(x); - this._r <= 0 && this._o.onCompleted(); - } - }; - - TakeObserver.prototype.error = function (e) { this._o.onError(e); }; - TakeObserver.prototype.completed = function () { this._o.onCompleted(); }; - - return TakeObservable; - }(ObservableBase)); - - /** - * Returns a specified number of contiguous elements from the start of an observable sequence, using the specified scheduler for the edge case of take(0). - * @param {Number} count The number of elements to return. - * @param {Scheduler} [scheduler] Scheduler used to produce an OnCompleted message in case 0) { - var now = scheduler.now(); - d = new Date(d.getTime() + p); - d.getTime() <= now && (d = new Date(now + p)); - } - observer.onNext(count); - self(count + 1, new Date(d)); - }); - }); - } - - function observableTimerTimeSpanAndPeriod(dueTime, period, scheduler) { - return dueTime === period ? - new AnonymousObservable(function (observer) { - return scheduler.schedulePeriodic(0, period, function (count) { - observer.onNext(count); - return count + 1; - }); - }) : - observableDefer(function () { - return observableTimerDateAndPeriod(new Date(scheduler.now() + dueTime), period, scheduler); - }); - } - - /** - * Returns an observable sequence that produces a value after each period. - * - * @example - * 1 - res = Rx.Observable.interval(1000); - * 2 - res = Rx.Observable.interval(1000, Rx.Scheduler.timeout); - * - * @param {Number} period Period for producing the values in the resulting sequence (specified as an integer denoting milliseconds). - * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, Rx.Scheduler.timeout is used. - * @returns {Observable} An observable sequence that produces a value after each period. - */ - var observableinterval = Observable.interval = function (period, scheduler) { - return observableTimerTimeSpanAndPeriod(period, period, isScheduler(scheduler) ? scheduler : defaultScheduler); - }; - - /** - * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. - * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. - * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. - * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. - * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. - */ - var observableTimer = Observable.timer = function (dueTime, periodOrScheduler, scheduler) { - var period; - isScheduler(scheduler) || (scheduler = defaultScheduler); - if (periodOrScheduler != null && typeof periodOrScheduler === 'number') { - period = periodOrScheduler; - } else if (isScheduler(periodOrScheduler)) { - scheduler = periodOrScheduler; - } - if ((dueTime instanceof Date || typeof dueTime === 'number') && period === undefined) { - return _observableTimer(dueTime, scheduler); - } - if (dueTime instanceof Date && period !== undefined) { - return observableTimerDateAndPeriod(dueTime, periodOrScheduler, scheduler); - } - return observableTimerTimeSpanAndPeriod(dueTime, period, scheduler); - }; - - function observableDelayRelative(source, dueTime, scheduler) { - return new AnonymousObservable(function (o) { - var active = false, - cancelable = new SerialDisposable(), - exception = null, - q = [], - running = false, - subscription; - subscription = source.materialize().timestamp(scheduler).subscribe(function (notification) { - var d, shouldRun; - if (notification.value.kind === 'E') { - q = []; - q.push(notification); - exception = notification.value.error; - shouldRun = !running; - } else { - q.push({ value: notification.value, timestamp: notification.timestamp + dueTime }); - shouldRun = !active; - active = true; - } - if (shouldRun) { - if (exception !== null) { - o.onError(exception); - } else { - d = new SingleAssignmentDisposable(); - cancelable.setDisposable(d); - d.setDisposable(scheduler.scheduleRecursiveFuture(null, dueTime, function (_, self) { - var e, recurseDueTime, result, shouldRecurse; - if (exception !== null) { - return; - } - running = true; - do { - result = null; - if (q.length > 0 && q[0].timestamp - scheduler.now() <= 0) { - result = q.shift().value; - } - if (result !== null) { - result.accept(o); - } - } while (result !== null); - shouldRecurse = false; - recurseDueTime = 0; - if (q.length > 0) { - shouldRecurse = true; - recurseDueTime = Math.max(0, q[0].timestamp - scheduler.now()); - } else { - active = false; - } - e = exception; - running = false; - if (e !== null) { - o.onError(e); - } else if (shouldRecurse) { - self(null, recurseDueTime); - } - })); - } - } - }); - return new BinaryDisposable(subscription, cancelable); - }, source); - } - - function observableDelayAbsolute(source, dueTime, scheduler) { - return observableDefer(function () { - return observableDelayRelative(source, dueTime - scheduler.now(), scheduler); - }); - } - - function delayWithSelector(source, subscriptionDelay, delayDurationSelector) { - var subDelay, selector; - if (isFunction(subscriptionDelay)) { - selector = subscriptionDelay; - } else { - subDelay = subscriptionDelay; - selector = delayDurationSelector; - } - return new AnonymousObservable(function (o) { - var delays = new CompositeDisposable(), atEnd = false, subscription = new SerialDisposable(); - - function start() { - subscription.setDisposable(source.subscribe( - function (x) { - var delay = tryCatch(selector)(x); - if (delay === errorObj) { return o.onError(delay.e); } - var d = new SingleAssignmentDisposable(); - delays.add(d); - d.setDisposable(delay.subscribe( - function () { - o.onNext(x); - delays.remove(d); - done(); - }, - function (e) { o.onError(e); }, - function () { - o.onNext(x); - delays.remove(d); - done(); - } - )); - }, - function (e) { o.onError(e); }, - function () { - atEnd = true; - subscription.dispose(); - done(); - } - )); - } - - function done () { - atEnd && delays.length === 0 && o.onCompleted(); - } - - if (!subDelay) { - start(); - } else { - subscription.setDisposable(subDelay.subscribe(start, function (e) { o.onError(e); }, start)); - } - - return new BinaryDisposable(subscription, delays); - }, source); - } - - /** - * Time shifts the observable sequence by dueTime. - * The relative time intervals between the values are preserved. - * - * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. - * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. - * @returns {Observable} Time-shifted sequence. - */ - observableProto.delay = function () { - var firstArg = arguments[0]; - if (typeof firstArg === 'number' || firstArg instanceof Date) { - var dueTime = firstArg, scheduler = arguments[1]; - isScheduler(scheduler) || (scheduler = defaultScheduler); - return dueTime instanceof Date ? - observableDelayAbsolute(this, dueTime, scheduler) : - observableDelayRelative(this, dueTime, scheduler); - } else if (Observable.isObservable(firstArg) || isFunction(firstArg)) { - return delayWithSelector(this, firstArg, arguments[1]); - } else { - throw new Error('Invalid arguments'); - } - }; - - var DebounceObservable = (function (__super__) { - inherits(DebounceObservable, __super__); - function DebounceObservable(source, dt, s) { - isScheduler(s) || (s = defaultScheduler); - this.source = source; - this._dt = dt; - this._s = s; - __super__.call(this); - } - - DebounceObservable.prototype.subscribeCore = function (o) { - var cancelable = new SerialDisposable(); - return new BinaryDisposable( - this.source.subscribe(new DebounceObserver(o, this._dt, this._s, cancelable)), - cancelable); - }; - - return DebounceObservable; - }(ObservableBase)); - - var DebounceObserver = (function (__super__) { - inherits(DebounceObserver, __super__); - function DebounceObserver(observer, dueTime, scheduler, cancelable) { - this._o = observer; - this._d = dueTime; - this._scheduler = scheduler; - this._c = cancelable; - this._v = null; - this._hv = false; - this._id = 0; - __super__.call(this); - } - - function scheduleFuture(s, state) { - state.self._hv && state.self._id === state.currentId && state.self._o.onNext(state.x); - state.self._hv = false; - } - - DebounceObserver.prototype.next = function (x) { - this._hv = true; - this._v = x; - var currentId = ++this._id, d = new SingleAssignmentDisposable(); - this._c.setDisposable(d); - d.setDisposable(this._scheduler.scheduleFuture(this, this._d, function (_, self) { - self._hv && self._id === currentId && self._o.onNext(x); - self._hv = false; - })); - }; - - DebounceObserver.prototype.error = function (e) { - this._c.dispose(); - this._o.onError(e); - this._hv = false; - this._id++; - }; - - DebounceObserver.prototype.completed = function () { - this._c.dispose(); - this._hv && this._o.onNext(this._v); - this._o.onCompleted(); - this._hv = false; - this._id++; - }; - - return DebounceObserver; - }(AbstractObserver)); - - function debounceWithSelector(source, durationSelector) { - return new AnonymousObservable(function (o) { - var value, hasValue = false, cancelable = new SerialDisposable(), id = 0; - var subscription = source.subscribe( - function (x) { - var throttle = tryCatch(durationSelector)(x); - if (throttle === errorObj) { return o.onError(throttle.e); } - - isPromise(throttle) && (throttle = observableFromPromise(throttle)); - - hasValue = true; - value = x; - id++; - var currentid = id, d = new SingleAssignmentDisposable(); - cancelable.setDisposable(d); - d.setDisposable(throttle.subscribe( - function () { - hasValue && id === currentid && o.onNext(value); - hasValue = false; - d.dispose(); - }, - function (e) { o.onError(e); }, - function () { - hasValue && id === currentid && o.onNext(value); - hasValue = false; - d.dispose(); - } - )); - }, - function (e) { - cancelable.dispose(); - o.onError(e); - hasValue = false; - id++; - }, - function () { - cancelable.dispose(); - hasValue && o.onNext(value); - o.onCompleted(); - hasValue = false; - id++; - } - ); - return new BinaryDisposable(subscription, cancelable); - }, source); - } - - observableProto.debounce = function () { - if (isFunction (arguments[0])) { - return debounceWithSelector(this, arguments[0]); - } else if (typeof arguments[0] === 'number') { - return new DebounceObservable(this, arguments[0], arguments[1]); - } else { - throw new Error('Invalid arguments'); - } - }; - - var TimestampObservable = (function (__super__) { - inherits(TimestampObservable, __super__); - function TimestampObservable(source, s) { - this.source = source; - this._s = s; - __super__.call(this); - } - - TimestampObservable.prototype.subscribeCore = function (o) { - return this.source.subscribe(new TimestampObserver(o, this._s)); - }; - - return TimestampObservable; - }(ObservableBase)); - - var TimestampObserver = (function (__super__) { - inherits(TimestampObserver, __super__); - function TimestampObserver(o, s) { - this._o = o; - this._s = s; - __super__.call(this); - } - - TimestampObserver.prototype.next = function (x) { - this._o.onNext({ value: x, timestamp: this._s.now() }); - }; - - TimestampObserver.prototype.error = function (e) { - this._o.onError(e); - }; - - TimestampObserver.prototype.completed = function () { - this._o.onCompleted(); - }; - - return TimestampObserver; - }(AbstractObserver)); - - /** - * Records the timestamp for each value in an observable sequence. - * - * @example - * 1 - res = source.timestamp(); // produces { value: x, timestamp: ts } - * 2 - res = source.timestamp(Rx.Scheduler.default); - * - * @param {Scheduler} [scheduler] Scheduler used to compute timestamps. If not specified, the default scheduler is used. - * @returns {Observable} An observable sequence with timestamp information on values. - */ - observableProto.timestamp = function (scheduler) { - isScheduler(scheduler) || (scheduler = defaultScheduler); - return new TimestampObservable(this, scheduler); - }; - - var SampleObservable = (function(__super__) { - inherits(SampleObservable, __super__); - function SampleObservable(source, sampler) { - this.source = source; - this._sampler = sampler; - __super__.call(this); - } - - SampleObservable.prototype.subscribeCore = function (o) { - var state = { - o: o, - atEnd: false, - value: null, - hasValue: false, - sourceSubscription: new SingleAssignmentDisposable() - }; - - state.sourceSubscription.setDisposable(this.source.subscribe(new SampleSourceObserver(state))); - return new BinaryDisposable( - state.sourceSubscription, - this._sampler.subscribe(new SamplerObserver(state)) - ); - }; - - return SampleObservable; - }(ObservableBase)); - - var SamplerObserver = (function(__super__) { - inherits(SamplerObserver, __super__); - function SamplerObserver(s) { - this._s = s; - __super__.call(this); - } - - SamplerObserver.prototype._handleMessage = function () { - if (this._s.hasValue) { - this._s.hasValue = false; - this._s.o.onNext(this._s.value); - } - this._s.atEnd && this._s.o.onCompleted(); - }; - - SamplerObserver.prototype.next = function () { this._handleMessage(); }; - SamplerObserver.prototype.error = function (e) { this._s.onError(e); }; - SamplerObserver.prototype.completed = function () { this._handleMessage(); }; - - return SamplerObserver; - }(AbstractObserver)); - - var SampleSourceObserver = (function(__super__) { - inherits(SampleSourceObserver, __super__); - function SampleSourceObserver(s) { - this._s = s; - __super__.call(this); - } - - SampleSourceObserver.prototype.next = function (x) { - this._s.hasValue = true; - this._s.value = x; - }; - SampleSourceObserver.prototype.error = function (e) { this._s.o.onError(e); }; - SampleSourceObserver.prototype.completed = function () { - this._s.atEnd = true; - this._s.sourceSubscription.dispose(); - }; - - return SampleSourceObserver; - }(AbstractObserver)); - - /** - * Samples the observable sequence at each interval. - * - * @example - * 1 - res = source.sample(sampleObservable); // Sampler tick sequence - * 2 - res = source.sample(5000); // 5 seconds - * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds - * - * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. - * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. - * @returns {Observable} Sampled observable sequence. - */ - observableProto.sample = function (intervalOrSampler, scheduler) { - isScheduler(scheduler) || (scheduler = defaultScheduler); - return typeof intervalOrSampler === 'number' ? - new SampleObservable(this, observableinterval(intervalOrSampler, scheduler)) : - new SampleObservable(this, intervalOrSampler); - }; - - var TimeoutError = Rx.TimeoutError = function(message) { - this.message = message || 'Timeout has occurred'; - this.name = 'TimeoutError'; - Error.call(this); - }; - TimeoutError.prototype = Object.create(Error.prototype); - - function timeoutWithSelector(source, firstTimeout, timeoutDurationSelector, other) { - if (isFunction(firstTimeout)) { - other = timeoutDurationSelector; - timeoutDurationSelector = firstTimeout; - firstTimeout = observableNever(); - } - Observable.isObservable(other) || (other = observableThrow(new TimeoutError())); - return new AnonymousObservable(function (o) { - var subscription = new SerialDisposable(), - timer = new SerialDisposable(), - original = new SingleAssignmentDisposable(); - - subscription.setDisposable(original); - - var id = 0, switched = false; - - function setTimer(timeout) { - var myId = id, d = new SingleAssignmentDisposable(); - - function timerWins() { - switched = (myId === id); - return switched; - } - - timer.setDisposable(d); - d.setDisposable(timeout.subscribe(function () { - timerWins() && subscription.setDisposable(other.subscribe(o)); - d.dispose(); - }, function (e) { - timerWins() && o.onError(e); - }, function () { - timerWins() && subscription.setDisposable(other.subscribe(o)); - })); - }; - - setTimer(firstTimeout); - - function oWins() { - var res = !switched; - if (res) { id++; } - return res; - } - - original.setDisposable(source.subscribe(function (x) { - if (oWins()) { - o.onNext(x); - var timeout = tryCatch(timeoutDurationSelector)(x); - if (timeout === errorObj) { return o.onError(timeout.e); } - setTimer(isPromise(timeout) ? observableFromPromise(timeout) : timeout); - } - }, function (e) { - oWins() && o.onError(e); - }, function () { - oWins() && o.onCompleted(); - })); - return new BinaryDisposable(subscription, timer); - }, source); - } - - function timeout(source, dueTime, other, scheduler) { - if (isScheduler(other)) { - scheduler = other; - other = observableThrow(new TimeoutError()); - } - if (other instanceof Error) { other = observableThrow(other); } - isScheduler(scheduler) || (scheduler = defaultScheduler); - Observable.isObservable(other) || (other = observableThrow(new TimeoutError())); - return new AnonymousObservable(function (o) { - var id = 0, - original = new SingleAssignmentDisposable(), - subscription = new SerialDisposable(), - switched = false, - timer = new SerialDisposable(); - - subscription.setDisposable(original); - - function createTimer() { - var myId = id; - timer.setDisposable(scheduler.scheduleFuture(null, dueTime, function () { - switched = id === myId; - if (switched) { - isPromise(other) && (other = observableFromPromise(other)); - subscription.setDisposable(other.subscribe(o)); - } - })); - } - - createTimer(); - - original.setDisposable(source.subscribe(function (x) { - if (!switched) { - id++; - o.onNext(x); - createTimer(); - } - }, function (e) { - if (!switched) { - id++; - o.onError(e); - } - }, function () { - if (!switched) { - id++; - o.onCompleted(); - } - })); - return new BinaryDisposable(subscription, timer); - }, source); - } - - observableProto.timeout = function () { - var firstArg = arguments[0]; - if (firstArg instanceof Date || typeof firstArg === 'number') { - return timeout(this, firstArg, arguments[1], arguments[2]); - } else if (Observable.isObservable(firstArg) || isFunction(firstArg)) { - return timeoutWithSelector(this, firstArg, arguments[1], arguments[2]); - } else { - throw new Error('Invalid arguments'); - } - }; - - /** - * Returns an Observable that emits only the first item emitted by the source Observable during sequential time windows of a specified duration. - * @param {Number} windowDuration time to wait before emitting another item after emitting the last item - * @param {Scheduler} [scheduler] the Scheduler to use internally to manage the timers that handle timeout for each item. If not provided, defaults to Scheduler.timeout. - * @returns {Observable} An Observable that performs the throttle operation. - */ - observableProto.throttle = function (windowDuration, scheduler) { - isScheduler(scheduler) || (scheduler = defaultScheduler); - var duration = +windowDuration || 0; - if (duration <= 0) { throw new RangeError('windowDuration cannot be less or equal zero.'); } - var source = this; - return new AnonymousObservable(function (o) { - var lastOnNext = 0; - return source.subscribe( - function (x) { - var now = scheduler.now(); - if (lastOnNext === 0 || now - lastOnNext >= duration) { - lastOnNext = now; - o.onNext(x); - } - },function (e) { o.onError(e); }, function () { o.onCompleted(); } - ); - }, source); - }; - - var PausableObservable = (function (__super__) { - inherits(PausableObservable, __super__); - function PausableObservable(source, pauser) { - this.source = source; - this.controller = new Subject(); - - if (pauser && pauser.subscribe) { - this.pauser = this.controller.merge(pauser); - } else { - this.pauser = this.controller; - } - - __super__.call(this); - } - - PausableObservable.prototype._subscribe = function (o) { - var conn = this.source.publish(), - subscription = conn.subscribe(o), - connection = disposableEmpty; - - var pausable = this.pauser.distinctUntilChanged().subscribe(function (b) { - if (b) { - connection = conn.connect(); - } else { - connection.dispose(); - connection = disposableEmpty; - } - }); - - return new NAryDisposable([subscription, connection, pausable]); - }; - - PausableObservable.prototype.pause = function () { - this.controller.onNext(false); - }; - - PausableObservable.prototype.resume = function () { - this.controller.onNext(true); - }; - - return PausableObservable; - - }(Observable)); - - /** - * Pauses the underlying observable sequence based upon the observable sequence which yields true/false. - * @example - * var pauser = new Rx.Subject(); - * var source = Rx.Observable.interval(100).pausable(pauser); - * @param {Observable} pauser The observable sequence used to pause the underlying sequence. - * @returns {Observable} The observable sequence which is paused based upon the pauser. - */ - observableProto.pausable = function (pauser) { - return new PausableObservable(this, pauser); - }; - - function combineLatestSource(source, subject, resultSelector) { - return new AnonymousObservable(function (o) { - var hasValue = [false, false], - hasValueAll = false, - isDone = false, - values = new Array(2), - err; - - function next(x, i) { - values[i] = x; - hasValue[i] = true; - if (hasValueAll || (hasValueAll = hasValue.every(identity))) { - if (err) { return o.onError(err); } - var res = tryCatch(resultSelector).apply(null, values); - if (res === errorObj) { return o.onError(res.e); } - o.onNext(res); - } - isDone && values[1] && o.onCompleted(); - } - - return new BinaryDisposable( - source.subscribe( - function (x) { - next(x, 0); - }, - function (e) { - if (values[1]) { - o.onError(e); - } else { - err = e; - } - }, - function () { - isDone = true; - values[1] && o.onCompleted(); - }), - subject.subscribe( - function (x) { - next(x, 1); - }, - function (e) { o.onError(e); }, - function () { - isDone = true; - next(true, 1); - }) - ); - }, source); - } - - var PausableBufferedObservable = (function (__super__) { - inherits(PausableBufferedObservable, __super__); - function PausableBufferedObservable(source, pauser) { - this.source = source; - this.controller = new Subject(); - - if (pauser && pauser.subscribe) { - this.pauser = this.controller.merge(pauser); - } else { - this.pauser = this.controller; - } - - __super__.call(this); - } - - PausableBufferedObservable.prototype._subscribe = function (o) { - var q = [], previousShouldFire; - - function drainQueue() { while (q.length > 0) { o.onNext(q.shift()); } } - - var subscription = - combineLatestSource( - this.source, - this.pauser.startWith(false).distinctUntilChanged(), - function (data, shouldFire) { - return { data: data, shouldFire: shouldFire }; - }) - .subscribe( - function (results) { - if (previousShouldFire !== undefined && results.shouldFire !== previousShouldFire) { - previousShouldFire = results.shouldFire; - // change in shouldFire - if (results.shouldFire) { drainQueue(); } - } else { - previousShouldFire = results.shouldFire; - // new data - if (results.shouldFire) { - o.onNext(results.data); - } else { - q.push(results.data); - } - } - }, - function (err) { - drainQueue(); - o.onError(err); - }, - function () { - drainQueue(); - o.onCompleted(); - } - ); - return subscription; - }; - - PausableBufferedObservable.prototype.pause = function () { - this.controller.onNext(false); - }; - - PausableBufferedObservable.prototype.resume = function () { - this.controller.onNext(true); - }; - - return PausableBufferedObservable; - - }(Observable)); - - /** - * Pauses the underlying observable sequence based upon the observable sequence which yields true/false, - * and yields the values that were buffered while paused. - * @example - * var pauser = new Rx.Subject(); - * var source = Rx.Observable.interval(100).pausableBuffered(pauser); - * @param {Observable} pauser The observable sequence used to pause the underlying sequence. - * @returns {Observable} The observable sequence which is paused based upon the pauser. - */ - observableProto.pausableBuffered = function (pauser) { - return new PausableBufferedObservable(this, pauser); - }; - - var ControlledObservable = (function (__super__) { - inherits(ControlledObservable, __super__); - function ControlledObservable (source, enableQueue, scheduler) { - __super__.call(this); - this.subject = new ControlledSubject(enableQueue, scheduler); - this.source = source.multicast(this.subject).refCount(); - } - - ControlledObservable.prototype._subscribe = function (o) { - return this.source.subscribe(o); - }; - - ControlledObservable.prototype.request = function (numberOfItems) { - return this.subject.request(numberOfItems == null ? -1 : numberOfItems); - }; - - return ControlledObservable; - - }(Observable)); - - var ControlledSubject = (function (__super__) { - inherits(ControlledSubject, __super__); - function ControlledSubject(enableQueue, scheduler) { - enableQueue == null && (enableQueue = true); - - __super__.call(this); - this.subject = new Subject(); - this.enableQueue = enableQueue; - this.queue = enableQueue ? [] : null; - this.requestedCount = 0; - this.requestedDisposable = null; - this.error = null; - this.hasFailed = false; - this.hasCompleted = false; - this.scheduler = scheduler || currentThreadScheduler; - } - - addProperties(ControlledSubject.prototype, Observer, { - _subscribe: function (o) { - return this.subject.subscribe(o); - }, - onCompleted: function () { - this.hasCompleted = true; - if (!this.enableQueue || this.queue.length === 0) { - this.subject.onCompleted(); - this.disposeCurrentRequest(); - } else { - this.queue.push(Notification.createOnCompleted()); - } - }, - onError: function (error) { - this.hasFailed = true; - this.error = error; - if (!this.enableQueue || this.queue.length === 0) { - this.subject.onError(error); - this.disposeCurrentRequest(); - } else { - this.queue.push(Notification.createOnError(error)); - } - }, - onNext: function (value) { - if (this.requestedCount <= 0) { - this.enableQueue && this.queue.push(Notification.createOnNext(value)); - } else { - (this.requestedCount-- === 0) && this.disposeCurrentRequest(); - this.subject.onNext(value); - } - }, - _processRequest: function (numberOfItems) { - if (this.enableQueue) { - while (this.queue.length > 0 && (numberOfItems > 0 || this.queue[0].kind !== 'N')) { - var first = this.queue.shift(); - first.accept(this.subject); - if (first.kind === 'N') { - numberOfItems--; - } else { - this.disposeCurrentRequest(); - this.queue = []; - } - } - } - - return numberOfItems; - }, - request: function (number) { - this.disposeCurrentRequest(); - var self = this; - - this.requestedDisposable = this.scheduler.schedule(number, - function(s, i) { - var remaining = self._processRequest(i); - var stopped = self.hasCompleted || self.hasFailed; - if (!stopped && remaining > 0) { - self.requestedCount = remaining; - - return disposableCreate(function () { - self.requestedCount = 0; - }); - // Scheduled item is still in progress. Return a new - // disposable to allow the request to be interrupted - // via dispose. - } - }); - - return this.requestedDisposable; - }, - disposeCurrentRequest: function () { - if (this.requestedDisposable) { - this.requestedDisposable.dispose(); - this.requestedDisposable = null; - } - } - }); - - return ControlledSubject; - }(Observable)); - - /** - * Attaches a controller to the observable sequence with the ability to queue. - * @example - * var source = Rx.Observable.interval(100).controlled(); - * source.request(3); // Reads 3 values - * @param {bool} enableQueue truthy value to determine if values should be queued pending the next request - * @param {Scheduler} scheduler determines how the requests will be scheduled - * @returns {Observable} The observable sequence which only propagates values on request. - */ - observableProto.controlled = function (enableQueue, scheduler) { - - if (enableQueue && isScheduler(enableQueue)) { - scheduler = enableQueue; - enableQueue = true; - } - - if (enableQueue == null) { enableQueue = true; } - return new ControlledObservable(this, enableQueue, scheduler); - }; - - /** - * Pipes the existing Observable sequence into a Node.js Stream. - * @param {Stream} dest The destination Node.js stream. - * @returns {Stream} The destination stream. - */ - observableProto.pipe = function (dest) { - var source = this.pausableBuffered(); - - function onDrain() { - source.resume(); - } - - dest.addListener('drain', onDrain); - - source.subscribe( - function (x) { - !dest.write(String(x)) && source.pause(); - }, - function (err) { - dest.emit('error', err); - }, - function () { - // Hack check because STDIO is not closable - !dest._isStdio && dest.end(); - dest.removeListener('drain', onDrain); - }); - - source.resume(); - - return dest; - }; - - var TransduceObserver = (function (__super__) { - inherits(TransduceObserver, __super__); - function TransduceObserver(o, xform) { - this._o = o; - this._xform = xform; - __super__.call(this); - } - - TransduceObserver.prototype.next = function (x) { - var res = tryCatch(this._xform['@@transducer/step']).call(this._xform, this._o, x); - if (res === errorObj) { this._o.onError(res.e); } - }; - - TransduceObserver.prototype.error = function (e) { this._o.onError(e); }; - - TransduceObserver.prototype.completed = function () { - this._xform['@@transducer/result'](this._o); - }; - - return TransduceObserver; - }(AbstractObserver)); - - function transformForObserver(o) { - return { - '@@transducer/init': function() { - return o; - }, - '@@transducer/step': function(obs, input) { - return obs.onNext(input); - }, - '@@transducer/result': function(obs) { - return obs.onCompleted(); - } - }; - } - - /** - * Executes a transducer to transform the observable sequence - * @param {Transducer} transducer A transducer to execute - * @returns {Observable} An Observable sequence containing the results from the transducer. - */ - observableProto.transduce = function(transducer) { - var source = this; - return new AnonymousObservable(function(o) { - var xform = transducer(transformForObserver(o)); - return source.subscribe(new TransduceObserver(o, xform)); - }, source); - }; - - var AnonymousObservable = Rx.AnonymousObservable = (function (__super__) { - inherits(AnonymousObservable, __super__); - - // Fix subscriber to check for undefined or function returned to decorate as Disposable - function fixSubscriber(subscriber) { - return subscriber && isFunction(subscriber.dispose) ? subscriber : - isFunction(subscriber) ? disposableCreate(subscriber) : disposableEmpty; - } - - function setDisposable(s, state) { - var ado = state[0], self = state[1]; - var sub = tryCatch(self.__subscribe).call(self, ado); - if (sub === errorObj && !ado.fail(errorObj.e)) { thrower(errorObj.e); } - ado.setDisposable(fixSubscriber(sub)); - } - - function AnonymousObservable(subscribe, parent) { - this.source = parent; - this.__subscribe = subscribe; - __super__.call(this); - } - - AnonymousObservable.prototype._subscribe = function (o) { - var ado = new AutoDetachObserver(o), state = [ado, this]; - - if (currentThreadScheduler.scheduleRequired()) { - currentThreadScheduler.schedule(state, setDisposable); - } else { - setDisposable(null, state); - } - return ado; - }; - - return AnonymousObservable; - - }(Observable)); - - var AutoDetachObserver = (function (__super__) { - inherits(AutoDetachObserver, __super__); - - function AutoDetachObserver(observer) { - __super__.call(this); - this.observer = observer; - this.m = new SingleAssignmentDisposable(); - } - - var AutoDetachObserverPrototype = AutoDetachObserver.prototype; - - AutoDetachObserverPrototype.next = function (value) { - var result = tryCatch(this.observer.onNext).call(this.observer, value); - if (result === errorObj) { - this.dispose(); - thrower(result.e); - } - }; - - AutoDetachObserverPrototype.error = function (err) { - var result = tryCatch(this.observer.onError).call(this.observer, err); - this.dispose(); - result === errorObj && thrower(result.e); - }; - - AutoDetachObserverPrototype.completed = function () { - var result = tryCatch(this.observer.onCompleted).call(this.observer); - this.dispose(); - result === errorObj && thrower(result.e); - }; - - AutoDetachObserverPrototype.setDisposable = function (value) { this.m.setDisposable(value); }; - AutoDetachObserverPrototype.getDisposable = function () { return this.m.getDisposable(); }; - - AutoDetachObserverPrototype.dispose = function () { - __super__.prototype.dispose.call(this); - this.m.dispose(); - }; - - return AutoDetachObserver; - }(AbstractObserver)); - - var InnerSubscription = function (s, o) { - this._s = s; - this._o = o; - }; - - InnerSubscription.prototype.dispose = function () { - if (!this._s.isDisposed && this._o !== null) { - var idx = this._s.observers.indexOf(this._o); - this._s.observers.splice(idx, 1); - this._o = null; - } - }; - - /** - * Represents an object that is both an observable sequence as well as an observer. - * Each notification is broadcasted to all subscribed observers. - */ - var Subject = Rx.Subject = (function (__super__) { - inherits(Subject, __super__); - function Subject() { - __super__.call(this); - this.isDisposed = false; - this.isStopped = false; - this.observers = []; - this.hasError = false; - } - - addProperties(Subject.prototype, Observer.prototype, { - _subscribe: function (o) { - checkDisposed(this); - if (!this.isStopped) { - this.observers.push(o); - return new InnerSubscription(this, o); - } - if (this.hasError) { - o.onError(this.error); - return disposableEmpty; - } - o.onCompleted(); - return disposableEmpty; - }, - /** - * Indicates whether the subject has observers subscribed to it. - * @returns {Boolean} Indicates whether the subject has observers subscribed to it. - */ - hasObservers: function () { checkDisposed(this); return this.observers.length > 0; }, - /** - * Notifies all subscribed observers about the end of the sequence. - */ - onCompleted: function () { - checkDisposed(this); - if (!this.isStopped) { - this.isStopped = true; - for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { - os[i].onCompleted(); - } - - this.observers.length = 0; - } - }, - /** - * Notifies all subscribed observers about the exception. - * @param {Mixed} error The exception to send to all observers. - */ - onError: function (error) { - checkDisposed(this); - if (!this.isStopped) { - this.isStopped = true; - this.error = error; - this.hasError = true; - for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { - os[i].onError(error); - } - - this.observers.length = 0; - } - }, - /** - * Notifies all subscribed observers about the arrival of the specified element in the sequence. - * @param {Mixed} value The value to send to all observers. - */ - onNext: function (value) { - checkDisposed(this); - if (!this.isStopped) { - for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { - os[i].onNext(value); - } - } - }, - /** - * Unsubscribe all observers and release resources. - */ - dispose: function () { - this.isDisposed = true; - this.observers = null; - } - }); - - /** - * Creates a subject from the specified observer and observable. - * @param {Observer} observer The observer used to send messages to the subject. - * @param {Observable} observable The observable used to subscribe to messages sent from the subject. - * @returns {Subject} Subject implemented using the given observer and observable. - */ - Subject.create = function (observer, observable) { - return new AnonymousSubject(observer, observable); - }; - - return Subject; - }(Observable)); - - /** - * Represents the result of an asynchronous operation. - * The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. - */ - var AsyncSubject = Rx.AsyncSubject = (function (__super__) { - inherits(AsyncSubject, __super__); - - /** - * Creates a subject that can only receive one value and that value is cached for all future observations. - * @constructor - */ - function AsyncSubject() { - __super__.call(this); - this.isDisposed = false; - this.isStopped = false; - this.hasValue = false; - this.observers = []; - this.hasError = false; - } - - addProperties(AsyncSubject.prototype, Observer.prototype, { - _subscribe: function (o) { - checkDisposed(this); - - if (!this.isStopped) { - this.observers.push(o); - return new InnerSubscription(this, o); - } - - if (this.hasError) { - o.onError(this.error); - } else if (this.hasValue) { - o.onNext(this.value); - o.onCompleted(); - } else { - o.onCompleted(); - } - - return disposableEmpty; - }, - /** - * Indicates whether the subject has observers subscribed to it. - * @returns {Boolean} Indicates whether the subject has observers subscribed to it. - */ - hasObservers: function () { checkDisposed(this); return this.observers.length > 0; }, - /** - * Notifies all subscribed observers about the end of the sequence, also causing the last received value to be sent out (if any). - */ - onCompleted: function () { - var i, len; - checkDisposed(this); - if (!this.isStopped) { - this.isStopped = true; - var os = cloneArray(this.observers), len = os.length; - - if (this.hasValue) { - for (i = 0; i < len; i++) { - var o = os[i]; - o.onNext(this.value); - o.onCompleted(); - } - } else { - for (i = 0; i < len; i++) { - os[i].onCompleted(); - } - } - - this.observers.length = 0; - } - }, - /** - * Notifies all subscribed observers about the error. - * @param {Mixed} error The Error to send to all observers. - */ - onError: function (error) { - checkDisposed(this); - if (!this.isStopped) { - this.isStopped = true; - this.hasError = true; - this.error = error; - - for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { - os[i].onError(error); - } - - this.observers.length = 0; - } - }, - /** - * Sends a value to the subject. The last value received before successful termination will be sent to all subscribed and future observers. - * @param {Mixed} value The value to store in the subject. - */ - onNext: function (value) { - checkDisposed(this); - if (this.isStopped) { return; } - this.value = value; - this.hasValue = true; - }, - /** - * Unsubscribe all observers and release resources. - */ - dispose: function () { - this.isDisposed = true; - this.observers = null; - this.error = null; - this.value = null; - } - }); - - return AsyncSubject; - }(Observable)); - - var AnonymousSubject = Rx.AnonymousSubject = (function (__super__) { - inherits(AnonymousSubject, __super__); - function AnonymousSubject(observer, observable) { - this.observer = observer; - this.observable = observable; - __super__.call(this); - } - - addProperties(AnonymousSubject.prototype, Observer.prototype, { - _subscribe: function (o) { - return this.observable.subscribe(o); - }, - onCompleted: function () { - this.observer.onCompleted(); - }, - onError: function (error) { - this.observer.onError(error); - }, - onNext: function (value) { - this.observer.onNext(value); - } - }); - - return AnonymousSubject; - }(Observable)); - - /** - * Represents a value that changes over time. - * Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. - */ - var BehaviorSubject = Rx.BehaviorSubject = (function (__super__) { - inherits(BehaviorSubject, __super__); - function BehaviorSubject(value) { - __super__.call(this); - this.value = value; - this.observers = []; - this.isDisposed = false; - this.isStopped = false; - this.hasError = false; - } - - addProperties(BehaviorSubject.prototype, Observer.prototype, { - _subscribe: function (o) { - checkDisposed(this); - if (!this.isStopped) { - this.observers.push(o); - o.onNext(this.value); - return new InnerSubscription(this, o); - } - if (this.hasError) { - o.onError(this.error); - } else { - o.onCompleted(); - } - return disposableEmpty; - }, - /** - * Gets the current value or throws an exception. - * Value is frozen after onCompleted is called. - * After onError is called always throws the specified exception. - * An exception is always thrown after dispose is called. - * @returns {Mixed} The initial value passed to the constructor until onNext is called; after which, the last value passed to onNext. - */ - getValue: function () { - checkDisposed(this); - if (this.hasError) { thrower(this.error); } - return this.value; - }, - /** - * Indicates whether the subject has observers subscribed to it. - * @returns {Boolean} Indicates whether the subject has observers subscribed to it. - */ - hasObservers: function () { checkDisposed(this); return this.observers.length > 0; }, - /** - * Notifies all subscribed observers about the end of the sequence. - */ - onCompleted: function () { - checkDisposed(this); - if (this.isStopped) { return; } - this.isStopped = true; - for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { - os[i].onCompleted(); - } - - this.observers.length = 0; - }, - /** - * Notifies all subscribed observers about the exception. - * @param {Mixed} error The exception to send to all observers. - */ - onError: function (error) { - checkDisposed(this); - if (this.isStopped) { return; } - this.isStopped = true; - this.hasError = true; - this.error = error; - - for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { - os[i].onError(error); - } - - this.observers.length = 0; - }, - /** - * Notifies all subscribed observers about the arrival of the specified element in the sequence. - * @param {Mixed} value The value to send to all observers. - */ - onNext: function (value) { - checkDisposed(this); - if (this.isStopped) { return; } - this.value = value; - for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { - os[i].onNext(value); - } - }, - /** - * Unsubscribe all observers and release resources. - */ - dispose: function () { - this.isDisposed = true; - this.observers = null; - this.value = null; - this.error = null; - } - }); - - return BehaviorSubject; - }(Observable)); - - /** - * Represents an object that is both an observable sequence as well as an observer. - * Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. - */ - var ReplaySubject = Rx.ReplaySubject = (function (__super__) { - - var maxSafeInteger = Math.pow(2, 53) - 1; - - function createRemovableDisposable(subject, observer) { - return disposableCreate(function () { - observer.dispose(); - !subject.isDisposed && subject.observers.splice(subject.observers.indexOf(observer), 1); - }); - } - - inherits(ReplaySubject, __super__); - - /** - * Initializes a new instance of the ReplaySubject class with the specified buffer size, window size and scheduler. - * @param {Number} [bufferSize] Maximum element count of the replay buffer. - * @param {Number} [windowSize] Maximum time length of the replay buffer. - * @param {Scheduler} [scheduler] Scheduler the observers are invoked on. - */ - function ReplaySubject(bufferSize, windowSize, scheduler) { - this.bufferSize = bufferSize == null ? maxSafeInteger : bufferSize; - this.windowSize = windowSize == null ? maxSafeInteger : windowSize; - this.scheduler = scheduler || currentThreadScheduler; - this.q = []; - this.observers = []; - this.isStopped = false; - this.isDisposed = false; - this.hasError = false; - this.error = null; - __super__.call(this); - } - - addProperties(ReplaySubject.prototype, Observer.prototype, { - _subscribe: function (o) { - checkDisposed(this); - var so = new ScheduledObserver(this.scheduler, o), subscription = createRemovableDisposable(this, so); - - this._trim(this.scheduler.now()); - this.observers.push(so); - - for (var i = 0, len = this.q.length; i < len; i++) { - so.onNext(this.q[i].value); - } - - if (this.hasError) { - so.onError(this.error); - } else if (this.isStopped) { - so.onCompleted(); - } - - so.ensureActive(); - return subscription; - }, - /** - * Indicates whether the subject has observers subscribed to it. - * @returns {Boolean} Indicates whether the subject has observers subscribed to it. - */ - hasObservers: function () { checkDisposed(this); return this.observers.length > 0; }, - _trim: function (now) { - while (this.q.length > this.bufferSize) { - this.q.shift(); - } - while (this.q.length > 0 && (now - this.q[0].interval) > this.windowSize) { - this.q.shift(); - } - }, - /** - * Notifies all subscribed observers about the arrival of the specified element in the sequence. - * @param {Mixed} value The value to send to all observers. - */ - onNext: function (value) { - checkDisposed(this); - if (this.isStopped) { return; } - var now = this.scheduler.now(); - this.q.push({ interval: now, value: value }); - this._trim(now); - - for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { - var observer = os[i]; - observer.onNext(value); - observer.ensureActive(); - } - }, - /** - * Notifies all subscribed observers about the exception. - * @param {Mixed} error The exception to send to all observers. - */ - onError: function (error) { - checkDisposed(this); - if (this.isStopped) { return; } - this.isStopped = true; - this.error = error; - this.hasError = true; - var now = this.scheduler.now(); - this._trim(now); - for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { - var observer = os[i]; - observer.onError(error); - observer.ensureActive(); - } - this.observers.length = 0; - }, - /** - * Notifies all subscribed observers about the end of the sequence. - */ - onCompleted: function () { - checkDisposed(this); - if (this.isStopped) { return; } - this.isStopped = true; - var now = this.scheduler.now(); - this._trim(now); - for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { - var observer = os[i]; - observer.onCompleted(); - observer.ensureActive(); - } - this.observers.length = 0; - }, - /** - * Unsubscribe all observers and release resources. - */ - dispose: function () { - this.isDisposed = true; - this.observers = null; - } - }); - - return ReplaySubject; - }(Observable)); - - /** - * Used to pause and resume streams. - */ - Rx.Pauser = (function (__super__) { - inherits(Pauser, __super__); - function Pauser() { - __super__.call(this); - } - - /** - * Pauses the underlying sequence. - */ - Pauser.prototype.pause = function () { this.onNext(false); }; - - /** - * Resumes the underlying sequence. - */ - Pauser.prototype.resume = function () { this.onNext(true); }; - - return Pauser; - }(Subject)); - - if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { - root.Rx = Rx; - - define(function() { - return Rx; - }); - } else if (freeExports && freeModule) { - // in Node.js or RingoJS - if (moduleExports) { - (freeModule.exports = Rx).Rx = Rx; - } else { - freeExports.Rx = Rx; - } - } else { - // in a browser or Rhino - root.Rx = Rx; - } - - // All code before this point will be filtered from stack traces. - var rEndingLine = captureLine(); - -}.call(this)); diff --git a/node_modules/rx-lite/rx.lite.map b/node_modules/rx-lite/rx.lite.map deleted file mode 100644 index 5d20dff..0000000 --- a/node_modules/rx-lite/rx.lite.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rx.lite.min.js","sources":["rx.lite.js"],"names":["undefined","checkGlobal","value","Object","cloneArray","arr","len","length","a","Array","i","tryCatcherGen","tryCatchTarget","apply","this","arguments","e","errorObj","thrower","makeStackTraceLong","error","observable","hasStacks","stack","indexOf","STACK_JUMP_SEPARATOR","stacks","o","source","unshift","concatedStacks","join","filterStackString","stackString","lines","split","desiredLines","line","isInternalFrame","isNodeFrame","push","stackLine","fileNameAndLineNumber","getFileNameAndLineNumber","fileName","lineNumber","rFileName","rStartingLine","rEndingLine","captureLine","Error","firstLine","attempt1","exec","Number","attempt2","attempt3","equalObjects","object","other","equalFunc","isLoose","stackA","stackB","objProps","keys","objLength","othProps","othLength","key","index","hasOwnProperty","call","skipCtor","result","objValue","othValue","objCtor","constructor","othCtor","equalByTag","tag","boolTag","dateTag","errorTag","name","message","numberTag","regexpTag","stringTag","isObjectLike","isLength","MAX_SAFE_INTEGER","isTypedArray","typedArrayTags","objToString","arraySome","array","predicate","equalArrays","arrLength","arrValue","baseIsEqualDeep","objIsArr","isArray","othIsArr","objTag","arrayTag","othTag","argsTag","objectTag","objIsObj","isHostObject","othIsObj","isSameTag","objIsWrapped","othIsWrapped","pop","baseIsEqual","isObject","arrayInitialize","count","factory","IndexedItem","id","IsDisposedDisposable","state","_s","isDisposed","StringIterable","s","StringIterator","_l","_i","ArrayIterable","_a","ArrayIterator","toLength","numberIsFinite","root","isFinite","getIterable","it","$iterator$","TypeError","sign","number","isNaN","Math","floor","abs","maxSafeInteger","observableOf","scheduler","isScheduler","currentThreadScheduler","FromArrayObservable","RepeatSink","observer","parent","falseFactory","argumentsToArray","args","emptyArrayFactory","asObservable","subscribe","repeat","@@iterator","next","done","plucker","x","currentProp","p","createCbObservable","fn","ctx","selector","AsyncSubject","createCbHandler","results","isFunction","tryCatch","onError","onNext","onCompleted","createNodeObservable","createNodeHandler","err","isNodeList","el","StaticNodeList","NodeList","prototype","toString","ListenDisposable","n","_e","_n","_fn","addEventListener","createEventListener","eventName","handler","disposables","CompositeDisposable","elemToString","add","item","_observableTimer","dueTime","TimerObservable","observableTimerDateAndPeriod","period","AnonymousObservable","d","normalizeTime","scheduleRecursiveFuture","self","now","Date","getTime","observableTimerTimeSpanAndPeriod","schedulePeriodic","observableDefer","observableDelayRelative","subscription","active","cancelable","SerialDisposable","exception","q","running","materialize","timestamp","notification","shouldRun","kind","SingleAssignmentDisposable","setDisposable","_","recurseDueTime","shouldRecurse","shift","accept","max","BinaryDisposable","observableDelayAbsolute","delayWithSelector","subscriptionDelay","delayDurationSelector","subDelay","start","delay","delays","remove","atEnd","dispose","debounceWithSelector","durationSelector","hasValue","throttle","isPromise","observableFromPromise","currentid","timeoutWithSelector","firstTimeout","timeoutDurationSelector","observableNever","Observable","isObservable","observableThrow","TimeoutError","setTimer","timeout","timerWins","switched","myId","timer","oWins","res","original","defaultScheduler","createTimer","scheduleFuture","combineLatestSource","subject","resultSelector","values","hasValueAll","every","identity","isDone","transformForObserver","@@transducer/init","@@transducer/step","obs","input","@@transducer/result","objectTypes","function","freeExports","exports","nodeType","freeModule","module","freeGlobal","global","freeSelf","freeWindow","window","moduleExports","thisGlobal","Function","Rx","internals","config","Promise","helpers","noop","defaultNow","defaultComparer","y","isEqual","defaultSubComparer","defaultError","defaultKeySerializer","then","isFn","longStackSupport","EmptyError","create","ObjectDisposedError","ArgumentOutOfRangeError","NotSupportedError","NotImplementedError","notImplemented","notSupported","Symbol","iterator","Set","doneEnumerator","isIterable","isArrayLike","bindCallback","func","thisArg","argCount","arg","collection","dontEnums","funcTag","mapTag","setTag","weakMapTag","arrayBufferTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","objectProto","pow","hasDontEnumBug","propertyIsEnumerable","dontEnumsLength","obj","prop","type","inherits","slice","child","__","addProperties","sources","idx","ln","addRef","xs","r","getDisposable","CompositeDisposablePrototype","shouldDispose","splice","currentDisposables","Disposable","action","disposableCreate","disposableEmpty","empty","isDisposable","checkDisposed","disposable","disposableFixup","_fixup","current","old","first","second","_first","_second","old1","old2","NAryDisposable","_disposables","ScheduledItem","RefCountDisposable","InnerDisposable","isInnerDisposed","underlyingDisposable","isPrimaryDisposed","comparer","invoke","invokeCore","compareTo","isCancelled","Scheduler","schedulerProto","schedule","dt","normalize","_scheduleFuture","timeSpan","invokeRecImmediate","pair","innerAction","state2","scheduleWork","state3","isAdded","group","invokeRecDate","dueTime1","scheduleRecursive","setInterval","clearInterval","scheduleMethod","clearMethod","ImmediateScheduler","__super__","immediateScheduler","immediate","CurrentThreadScheduler","runTrampoline","queue","dequeue","si","enqueue","PriorityQueue","scheduleRequired","currentThread","localTimer","SchedulePeriodicRecursive","createTick","command","recurse","_period","_action","_state","_cancel","_scheduler","localSetTimeout","localClearTimeout","setTimeout","clearTimeout","WScript","time","Sleep","runTask","handle","currentlyRunning","task","tasksByHandle","postMessageSupported","postMessage","importScripts","isAsync","oldHandler","onmessage","nextHandle","reNative","RegExp","String","replace","setImmediate","test","process","nextTick","MSG_PREFIX","random","onGlobalPostMessage","event","data","substring","MessageChannel","channel","port1","port2","document","createElement","scriptElement","onreadystatechange","parentNode","removeChild","documentElement","appendChild","DefaultScheduler","scheduleAction","ClearDisposable","_id","LocalClearDisposable","async","c","capacity","items","priorityProto","isHigherPriority","left","right","percolate","temp","heapify","peek","removeAt","observableProto","Notification","_accept","_acceptObserver","observerOrOnNext","toObservable","OnNextNotification","OnErrorNotification","OnCompletedNotification","notificationCreateOnNext","createOnNext","notificationCreateOnError","createOnError","notificationCreateOnCompleted","createOnCompleted","Observer","observerCreate","AnonymousObserver","AbstractObserver","isStopped","completed","fail","_onNext","_onError","_onCompleted","makeSubscribe","oldOnError","oldSubscribe","_subscribe","forEach","oOrOnNext","subscribeOnNext","subscribeOnError","subscribeOnCompleted","ScheduledObserver","isAcquired","hasFaulted","enqueueNext","enqueueError","enqueueCompleted","work","ensureActive","isOwner","ObservableBase","fixSubscriber","subscriber","ado","sub","subscribeCore","AutoDetachObserver","FlatMapObservable","InnerObserver","_wrapResult","map","i2","from","Enumerable","ConcatEnumerableObservable","currentItem","currentValue","_recurse","concat","CatchErrorObservable","lastError","catchError","RepeatEnumerable","v","RepeatEnumerator","l","enumerableRepeat","repeatCount","OfEnumerable","OfEnumerator","enumerableOf","of","ToArrayObservable","toArray","Defer","_f","defer","observableFactory","EmptyObservable","EmptySink","scheduleItem","sink","run","EMPTY_OBSERVABLE","observableEmpty","FromObservable","iterable","_iterable","createScheduleMethod","list","charAt","observableFrom","mapFn","mapper","_args","observableFromArray","fromArray","NeverObservable","NEVER_OBSERVABLE","never","ofWithScheduler","PairsObservable","_o","_keys","pairs","RangeObservable","rangeCount","loopRecursive","range","RepeatObservable","JustObservable","_value","ThrowObservable","just","_error","CatchObservable","d1","CatchObserver","handlerOrSecond","observableCatch","combineLatest","CombineLatestObservable","params","cb","_params","_cb","subscriptions","sad","CombineLatestObserver","notTheSame","j","filter","observableConcat","ConcatObserver","ConcatObservable","_sources","concatAll","merge","MergeObservable","maxConcurrent","g","MergeObserver","activeCount","handleSubscribe","innerSource","maxConcurrentOrOther","observableMerge","mergeAll","CompositeError","errors","innerErrors","MergeDelayErrorObservable","m","MergeDelayErrorObserver","_group","setCompletion","inner","_inner","mergeDelayError","MergeAllObservable","MergeAllObserver","SkipUntilObservable","_open","leftSubscription","SkipUntilSourceObserver","rightSubscription","SkipUntilOtherObserver","_p","_r","skipUntil","SwitchObservable","SwitchObserver","stopped","latest","hasLatest","switchLatest","TakeUntilObservable","TakeUntilObserver","takeUntil","WithLatestFromObservable","_ss","WithLatestFromOtherObserver","outerSad","WithLatestFromSourceObserver","allValues","withLatestFrom","ZipObservable","ZipObserver","_q","_d","notEmpty","shiftEach","queuedValues","zip","ZipIterableObservable","ZipIterableObserver","zipIterable","DematerializeObservable","DematerializeObserver","dematerialize","DistinctUntilChangedObservable","keyFn","DistinctUntilChangedObserver","hasCurrentKey","currentKey","comparerEquals","distinctUntilChanged","TapObservable","_oN","_oE","_oC","t","tap","doAction","doOnNext","tapOnNext","doOnError","tapOnError","doOnCompleted","tapOnCompleted","FinallyObservable","FinallyDisposable","IgnoreElementsObservable","ignoreElements","MaterializeObservable","MaterializeObserver","retry","retryCount","RetryWhenObservable","createDisposable","notifier","_notifier","exceptions","Subject","handled","notificationDisposable","outer","exn","ex","retryWhen","RepeatWhenObservable","completions","repeatWhen","ScanObservable","accumulator","hasSeed","seed","ScanObserver","_hs","_ha","_hv","scan","SkipLastObservable","_c","SkipLastObserver","skipLast","startWith","TakeLastObserver","takeLast","flatMapConcat","concatMap","MapObservable","innerMap","internalMap","select","selectorFn","pluck","flatMap","selectMany","flatMapLatest","SkipObservable","_count","SkipObserver","skip","SkipWhileObservable","SkipWhileObserver","skipWhile","TakeObservable","TakeObserver","take","TakeWhileObservable","TakeWhileObserver","takeWhile","FilterObservable","innerPredicate","internalFilter","shouldYield","where","fromCallback","fromNodeCallback","removeEventListener","useNativeEvents","EventObservable","_el","createHandler","fromEvent","element","addListener","fromEventPattern","h","removeListener","on","off","publish","refCount","EventPatternObservable","del","_add","_del","EventPatternDisposable","ret","_ret","returnValue","addHandler","removeHandler","FromPromiseObservable","scheduleNext","scheduleError","fromPromise","promise","toPromise","promiseCtor","resolve","reject","startAsync","functionAsync","MulticastObservable","fn1","fn2","_fn1","_fn2","connectable","multicast","connect","subjectOrSubjectSelector","ConnectableObservable","share","publishLast","publishValue","initialValueOrSelector","initialValue","BehaviorSubject","shareValue","replay","bufferSize","windowSize","ReplaySubject","shareReplay","RefCountObservable","_connectableSubscription","_connection","_source","_subject","ConnectDisposable","_dt","observableinterval","interval","periodOrScheduler","firstArg","DebounceObservable","DebounceObserver","_v","currentId","debounce","TimestampObservable","TimestampObserver","SampleObservable","sampler","_sampler","sourceSubscription","SampleSourceObserver","SamplerObserver","_handleMessage","sample","intervalOrSampler","windowDuration","duration","RangeError","lastOnNext","PausableObservable","pauser","controller","conn","connection","pausable","b","pause","resume","PausableBufferedObservable","drainQueue","previousShouldFire","shouldFire","pausableBuffered","ControlledObservable","enableQueue","ControlledSubject","request","numberOfItems","requestedCount","requestedDisposable","hasFailed","hasCompleted","disposeCurrentRequest","_processRequest","remaining","controlled","pipe","dest","onDrain","write","emit","_isStdio","end","TransduceObserver","xform","_xform","transduce","transducer","__subscribe","AutoDetachObserverPrototype","InnerSubscription","observers","hasError","hasObservers","os","AnonymousSubject","getValue","createRemovableDisposable","so","_trim","Pauser","define","amd"],"mappings":";CAEE,SAAUA,GAOV,QAASC,GAAYC,GACnB,MAAQA,IAASA,EAAMC,SAAWA,OAAUD,EAAQ,KA6CpD,QAASE,GAAWC,GAElB,IAAI,GADAC,GAAMD,EAAIE,OAAQC,EAAI,GAAIC,OAAMH,GAC5BI,EAAI,EAAOJ,EAAJI,EAASA,IAAOF,EAAEE,GAAKL,EAAIK,EAC1C,OAAOF,GAKX,QAASG,GAAcC,GACrB,MAAO,YACL,IACE,MAAOA,GAAeC,MAAMC,KAAMC,WAClC,MAAOC,GAEP,MADAC,IAASD,EAAIA,EACNC,KAUb,QAASC,GAAQF,GACf,KAAMA,GAYR,QAASG,GAAmBC,EAAOC,GAGjC,GAAIC,IACAD,EAAWE,OACM,gBAAVH,IACG,OAAVA,GACAA,EAAMG,OACwC,KAA9CH,EAAMG,MAAMC,QAAQC,IACtB,CAEA,IAAK,GADDC,MACKC,EAAIN,EAAcM,EAAGA,EAAIA,EAAEC,OAC9BD,EAAEJ,OACJG,EAAOG,QAAQF,EAAEJ,MAGrBG,GAAOG,QAAQT,EAAMG,MAErB,IAAIO,GAAiBJ,EAAOK,KAAK,KAAON,GAAuB,KAC/DL,GAAMG,MAAQS,EAAkBF,IAIpC,QAASE,GAAkBC,GAEzB,IAAK,GADDC,GAAQD,EAAYE,MAAM,MAAOC,KAC5B1B,EAAI,EAAGJ,EAAM4B,EAAM3B,OAAYD,EAAJI,EAASA,IAAK,CAChD,GAAI2B,GAAOH,EAAMxB,EAEZ4B,GAAgBD,IAAUE,EAAYF,KAASA,GAClDD,EAAaI,KAAKH,GAGtB,MAAOD,GAAaL,KAAK,MAG3B,QAASO,GAAgBG,GACvB,GAAIC,GAAwBC,EAAyBF,EACrD,KAAKC,EACH,OAAO,CAET,IAAIE,GAAWF,EAAsB,GAAIG,EAAaH,EAAsB,EAE5E,OAAOE,KAAaE,IAClBD,GAAcE,IACAC,IAAdH,EAGJ,QAASN,GAAYE,GACnB,MAA4C,KAArCA,EAAUjB,QAAQ,gBACY,KAAnCiB,EAAUjB,QAAQ,aAGtB,QAASyB,KACP,GAAK3B,GAEL,IACE,KAAM,IAAI4B,OACV,MAAOlC,GACP,GAAIkB,GAAQlB,EAAEO,MAAMY,MAAM,MACtBgB,EAAYjB,EAAM,GAAGV,QAAQ,KAAO,EAAIU,EAAM,GAAKA,EAAM,GACzDQ,EAAwBC,EAAyBQ,EACrD,KAAKT,EAAyB,MAG9B,OADAI,IAAYJ,EAAsB,GAC3BA,EAAsB,IAIjC,QAASC,GAAyBF,GAEhC,GAAIW,GAAW,gCAAgCC,KAAKZ,EACpD,IAAIW,EAAY,OAAQA,EAAS,GAAIE,OAAOF,EAAS,IAGrD,IAAIG,GAAW,4BAA4BF,KAAKZ,EAChD,IAAIc,EAAY,OAAQA,EAAS,GAAID,OAAOC,EAAS,IAGrD,IAAIC,GAAW,iBAAiBH,KAAKZ,EACrC,OAAIe,IAAoBA,EAAS,GAAIF,OAAOE,EAAS,KAArD,OAwLJ,QAASC,GAAaC,EAAQC,EAAOC,EAAWC,EAASC,EAAQC,GAC/D,GAAIC,GAAWC,GAAKP,GAChBQ,EAAYF,EAASzD,OACrB4D,EAAWF,GAAKN,GAChBS,EAAYD,EAAS5D,MAEzB,IAAI2D,IAAcE,IAAcP,EAC9B,OAAO,CAGT,KADA,GAAuBQ,GAAnBC,EAAQJ,EACLI,KAEL,GADAD,EAAML,EAASM,KACTT,EAAUQ,IAAOV,GAAQY,GAAeC,KAAKb,EAAOU,IACxD,OAAO,CAIX,KADA,GAAII,GAAWZ,IACNS,EAAQJ,GAAW,CAC1BG,EAAML,EAASM,EACf,IAEII,GAFAC,EAAWjB,EAAOW,GAClBO,EAAWjB,EAAMU,EAGrB,MAAMK,IAAW1E,EAAY4D,EAAUe,EAAUC,EAAUf,EAASC,EAAQC,GAAUW,GACpF,OAAO,CAETD,KAAaA,EAAmB,gBAARJ,GAE1B,IAAKI,EAAU,CACb,GAAII,GAAUnB,EAAOoB,YACjBC,EAAUpB,EAAMmB,WAEpB,IAAID,IAAYE,GACX,eAAiBrB,IAAU,eAAiBC,MACxB,kBAAZkB,IAA0BA,YAAmBA,IACjC,kBAAZE,IAA0BA,YAAmBA,IACxD,OAAO,EAGX,OAAO,EAGT,QAASC,GAAWtB,EAAQC,EAAOsB,GACjC,OAAQA,GACN,IAAKC,IACL,IAAKC,IACH,OAAQzB,KAAYC,CAEtB,KAAKyB,IACH,MAAO1B,GAAO2B,OAAS1B,EAAM0B,MAAQ3B,EAAO4B,UAAY3B,EAAM2B,OAEhE,KAAKC,IACH,MAAQ7B,MAAYA,EAClBC,KAAWA,EACXD,KAAYC,CAEhB,KAAK6B,IACL,IAAKC,IACH,MAAO/B,KAAYC,EAAQ,GAE/B,OAAO,EAQT,QAAS+B,GAAaxF,GACpB,QAASA,GAA0B,gBAAVA,GAG3B,QAASyF,GAASzF,GAChB,MAAwB,gBAAVA,IAAsBA,EAAQ,IAAMA,EAAQ,IAAM,GAAc0F,IAAT1F,EAcvE,QAAS2F,GAAa3F,GACpB,MAAOwF,GAAaxF,IAAUyF,EAASzF,EAAMK,WAAauF,GAAeC,GAAYvB,KAAKtE,IAO5F,QAAS8F,GAAWC,EAAOC,GAIzB,IAHA,GAAI5B,GAAQ,GACR/D,EAAS0F,EAAM1F,SAEV+D,EAAQ/D,GACf,GAAI2F,EAAUD,EAAM3B,GAAQA,EAAO2B,GACjC,OAAO,CAGX,QAAO,EAGT,QAASE,GAAYF,EAAOtC,EAAOC,EAAWC,EAASC,EAAQC,GAC7D,GAAIO,GAAQ,GACR8B,EAAYH,EAAM1F,OAClB6D,EAAYT,EAAMpD,MAEtB,IAAI6F,IAAchC,KAAeP,GAAWO,EAAYgC,GACtD,OAAO,CAGT,QAAS9B,EAAQ8B,GAAW,CAC1B,GAEI1B,GAFA2B,EAAWJ,EAAM3B,GACjBM,EAAWjB,EAAMW,EAGrB,IAAII,IAAW1E,EAAW,CACxB,GAAI0E,EACF,QAEF,QAAO,EAGT,GAAIb,GACF,IAAKmC,EAAUrC,EAAO,SAASiB,GACzB,MAAOyB,KAAazB,GAAYhB,EAAUyC,EAAUzB,EAAUf,EAASC,EAAQC,KAEnF,OAAO,MAEJ,IAAMsC,IAAazB,IAAYhB,EAAUyC,EAAUzB,EAAUf,EAASC,EAAQC,GACnF,OAAO,EAGX,OAAO,EAGT,QAASuC,GAAgB5C,EAAQC,EAAOC,EAAWC,EAASC,EAAQC,GAClE,GAAIwC,GAAWC,GAAQ9C,GACnB+C,EAAWD,GAAQ7C,GACnB+C,EAASC,GACTC,EAASD,EAERJ,KACHG,EAASX,GAAYvB,KAAKd,GACtBgD,IAAWG,GACbH,EAASI,GACAJ,IAAWI,KACpBP,EAAWV,EAAanC,KAGvB+C,IACHG,EAASb,GAAYvB,KAAKb,GACtBiD,IAAWC,KACbD,EAASE,IAGb,IAAIC,GAAWL,IAAWI,KAAcE,GAAatD,GACjDuD,EAAWL,IAAWE,KAAcE,GAAarD,GACjDuD,EAAYR,IAAWE,CAE3B,IAAIM,IAAeX,IAAYQ,EAC7B,MAAO/B,GAAWtB,EAAQC,EAAO+C,EAEnC,KAAK7C,EAAS,CACZ,GAAIsD,GAAeJ,GAAYxC,GAAeC,KAAKd,EAAQ,eACvD0D,EAAeH,GAAY1C,GAAeC,KAAKb,EAAO,cAE1D,IAAIwD,GAAgBC,EAClB,MAAOxD,GAAUuD,EAAezD,EAAOxD,QAAUwD,EAAQ0D,EAAezD,EAAMzD,QAAUyD,EAAOE,EAASC,EAAQC,GAGpH,IAAKmD,EACH,OAAO,CAITpD,KAAWA,MACXC,IAAWA,KAGX,KADA,GAAIxD,GAASuD,EAAOvD,OACbA,KACL,GAAIuD,EAAOvD,KAAYmD,EACrB,MAAOK,GAAOxD,KAAYoD,CAI9BG,GAAOtB,KAAKkB,GACZK,EAAOvB,KAAKmB,EAEZ,IAAIe,IAAU6B,EAAWJ,EAAc1C,GAAcC,EAAQC,EAAOC,EAAWC,EAASC,EAAQC,EAKhG,OAHAD,GAAOuD,MACPtD,EAAOsD,MAEA3C,EAGT,QAAS4C,GAAYpH,EAAOyD,EAAOE,EAASC,EAAQC,GAClD,MAAI7D,KAAUyD,GACL,EAEI,MAATzD,GAA0B,MAATyD,IAAmB4D,GAASrH,KAAWwF,EAAa/B,GAChEzD,IAAUA,GAASyD,IAAUA,EAE/B2C,EAAgBpG,EAAOyD,EAAO2D,EAAazD,EAASC,EAAQC,GAiCnE,QAASyD,GAAgBC,EAAOC,GAE9B,IAAK,GADDlH,GAAI,GAAIC,OAAMgH,GACT/G,EAAI,EAAO+G,EAAJ/G,EAAWA,IACzBF,EAAEE,GAAKgH,GAET,OAAOlH,GA2tBT,QAASmH,GAAYC,EAAI1H,GACvBY,KAAK8G,GAAKA,EACV9G,KAAKZ,MAAQA,EA6kBf,QAAS2H,GAAqBC,GAC5BhH,KAAKiH,GAAKD,EACVhH,KAAKkH,YAAa,EAoVpB,QAASC,GAAeC,GACtBpH,KAAKiH,GAAKG,EAOZ,QAASC,GAAeD,GACtBpH,KAAKiH,GAAKG,EACVpH,KAAKsH,GAAKF,EAAE3H,OACZO,KAAKuH,GAAK,EAWZ,QAASC,GAAc9H,GACrBM,KAAKyH,GAAK/H,EAOZ,QAASgI,GAAchI,GACrBM,KAAKyH,GAAK/H,EACVM,KAAKsH,GAAKK,EAASjI,GACnBM,KAAKuH,GAAK,EAWZ,QAASK,GAAexI,GACtB,MAAwB,gBAAVA,IAAsByI,GAAKC,SAAS1I,GAOpD,QAAS2I,GAAYlH,GACnB,GAAuBmH,GAAnBpI,EAAIiB,EAAEoH,GACV,KAAKrI,GAAkB,gBAANiB,GAEf,MADAmH,GAAK,GAAIb,GAAetG,GACjBmH,EAAGC,KAEZ,KAAKrI,GAAKiB,EAAEpB,SAAWP,EAErB,MADA8I,GAAK,GAAIR,GAAc3G,GAChBmH,EAAGC,KAEZ,KAAKrI,EAAK,KAAM,IAAIsI,WAAU,yBAC9B,OAAOrH,GAAEoH,MAGX,QAASE,GAAK/I,GACZ,GAAIgJ,IAAUhJ,CACd,OAAe,KAAXgJ,EAAuBA,EACvBC,MAAMD,GAAkBA,EACZ,EAATA,EAAa,GAAK,EAG3B,QAAST,GAAS9G,GAChB,GAAIrB,IAAOqB,EAAEpB,MACb,OAAI4I,OAAM7I,GAAe,EACb,IAARA,GAAcoI,EAAepI,IACjCA,EAAM2I,EAAK3I,GAAO8I,KAAKC,MAAMD,KAAKE,IAAIhJ,IAC3B,GAAPA,EAAmB,EACnBA,EAAMiJ,GAAyBA,GAC5BjJ,GAJyCA,EAyFlD,QAASkJ,GAAcC,EAAWxD,GAEhC,MADAyD,IAAYD,KAAeA,EAAYE,IAChC,GAAIC,IAAoB3D,EAAOwD,GA0HxC,QAASI,GAAWC,EAAUC,GAC5BjJ,KAAKgJ,SAAWA,EAChBhJ,KAAKiJ,OAASA,EA8LhB,QAASC,KAAiB,OAAO,EACjC,QAASC,KAEP,IAAI,GADA3J,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EACnD,OAAOwJ,GAkqBT,QAASF,KAAiB,OAAO,EACjC,QAASC,KAEP,IAAI,GADA3J,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EACnD,OAAOwJ,GAyGT,QAASF,KAAiB,OAAO,EACjC,QAASG,KAAsB,SA2GjC,QAASH,KAAiB,OAAO,EACjC,QAASG,KAAsB,SAC/B,QAASF,KAEP,IAAI,GADA3J,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EACnD,OAAOwJ,GA4FP,QAASE,GAAaxI,GACpB,MAAO,UAAmBD,GAAK,MAAOC,GAAOyI,UAAU1I,IAkWzD,QAAS2I,GAAOpK,GACd,OACEqK,aAAc,WACZ,OACEC,KAAM,WACJ,OAASC,MAAM,EAAOvK,MAAOA,OAoFvC,QAASoK,GAAOpK,GACd,OACEqK,aAAc,WACZ,OACEC,KAAM,WACJ,OAASC,MAAM,EAAOvK,MAAOA,OAgVvC,QAASwK,GAAQR,EAAM5J,GACrB,MAAO,UAAgBqK,GAErB,IAAK,GADDC,GAAcD,EACTjK,EAAI,EAAOJ,EAAJI,EAASA,IAAK,CAC5B,GAAImK,GAAID,EAAYV,EAAKxJ,GACzB,IAAiB,mBAANmK,GAGT,MAAO7K,EAFP4K,GAAcC,EAKlB,MAAOD,IA4Rb,QAASE,GAAmBC,EAAIC,EAAKC,EAAUf,GAC7C,GAAIvI,GAAI,GAAIuJ,GAKZ,OAHAhB,GAAK1H,KAAK2I,EAAgBxJ,EAAGqJ,EAAKC,IAClCF,EAAGlK,MAAMmK,EAAKd,GAEPvI,EAAEyI,eAGX,QAASe,GAAgBxJ,EAAGqJ,EAAKC,GAC/B,MAAO,YAEL,IAAI,GADA3K,GAAMS,UAAUR,OAAQ6K,EAAU,GAAI3K,OAAMH,GACxCI,EAAI,EAAOJ,EAAJI,EAASA,IAAO0K,EAAQ1K,GAAKK,UAAUL,EAEtD,IAAI2K,GAAWJ,GAAW,CAExB,GADAG,EAAUE,GAASL,GAAUpK,MAAMmK,EAAKI,GACpCA,IAAYnK,GAAY,MAAOU,GAAE4J,QAAQH,EAAQpK,EACrDW,GAAE6J,OAAOJ,OAELA,GAAQ7K,QAAU,EACpBoB,EAAE6J,OAAOJ,EAAQ,IAEjBzJ,EAAE6J,OAAOJ,EAIbzJ,GAAE8J,eAsBN,QAASC,GAAqBX,EAAIC,EAAKC,EAAUf,GAC/C,GAAIvI,GAAI,GAAIuJ,GAKZ,OAHAhB,GAAK1H,KAAKmJ,EAAkBhK,EAAGqJ,EAAKC,IACpCF,EAAGlK,MAAMmK,EAAKd,GAEPvI,EAAEyI,eAGX,QAASuB,GAAkBhK,EAAGqJ,EAAKC,GACjC,MAAO,YACL,GAAIW,GAAM7K,UAAU,EACpB,IAAI6K,EAAO,MAAOjK,GAAE4J,QAAQK,EAG5B,KAAI,GADAtL,GAAMS,UAAUR,OAAQ6K,KACpB1K,EAAI,EAAOJ,EAAJI,EAASA,IAAO0K,EAAQ1K,EAAI,GAAKK,UAAUL,EAE1D,IAAI2K,GAAWJ,GAAW,CACxB,GAAIG,GAAUE,GAASL,GAAUpK,MAAMmK,EAAKI,EAC5C,IAAIA,IAAYnK,GAAY,MAAOU,GAAE4J,QAAQH,EAAQpK,EACrDW,GAAE6J,OAAOJ,OAELA,GAAQ7K,QAAU,EACpBoB,EAAE6J,OAAOJ,EAAQ,IAEjBzJ,EAAE6J,OAAOJ,EAIbzJ,GAAE8J,eAoBJ,QAASI,GAAWC,GAClB,MAAInD,IAAKoD,eAGAD,YAAcnD,IAAKoD,gBAAkBD,YAAcnD,IAAKqD,SAEjB,sBAAvC7L,OAAO8L,UAAUC,SAAS1H,KAAKsH,GAI1C,QAASK,GAAiBnL,EAAGoL,EAAGrB,GAC9BjK,KAAKuL,GAAKrL,EACVF,KAAKwL,GAAKF,EACVtL,KAAKyL,IAAMxB,EACXjK,KAAKuL,GAAGG,iBAAiB1L,KAAKwL,GAAIxL,KAAKyL,KAAK,GAC5CzL,KAAKkH,YAAa,EASpB,QAASyE,GAAqBX,EAAIY,EAAWC,GAC3C,GAAIC,GAAc,GAAIC,IAGlBC,EAAe3M,OAAO8L,UAAUC,SAAS1H,KAAKsH,EAClD,IAAID,EAAWC,IAAwB,4BAAjBgB,EACpB,IAAK,GAAIpM,GAAI,EAAGJ,EAAMwL,EAAGvL,OAAYD,EAAJI,EAASA,IACxCkM,EAAYG,IAAIN,EAAoBX,EAAGkB,KAAKtM,GAAIgM,EAAWC,QAEpDb,IACTc,EAAYG,IAAI,GAAIZ,GAAiBL,EAAIY,EAAWC,GAGtD,OAAOC,GAocT,QAASK,GAAiBC,EAASzD,GACjC,MAAO,IAAI0D,IAAgBD,EAASzD,GAGtC,QAAS2D,GAA6BF,EAASG,EAAQ5D,GACrD,MAAO,IAAI6D,IAAoB,SAAUxD,GACvC,GAAIyD,GAAIL,EAASrC,EAAI2C,GAAcH,EACnC,OAAO5D,GAAUgE,wBAAwB,EAAGF,EAAG,SAAU9F,EAAOiG,GAC9D,GAAI7C,EAAI,EAAG,CACT,GAAI8C,GAAMlE,EAAUkE,KACpBJ,GAAI,GAAIK,MAAKL,EAAEM,UAAYhD,GAC3B0C,EAAEM,WAAaF,IAAQJ,EAAI,GAAIK,MAAKD,EAAM9C,IAE5Cf,EAAS0B,OAAO/D,GAChBiG,EAAKjG,EAAQ,EAAG,GAAImG,MAAKL,QAK/B,QAASO,GAAiCZ,EAASG,EAAQ5D,GACzD,MAAOyD,KAAYG,EACjB,GAAIC,IAAoB,SAAUxD,GAChC,MAAOL,GAAUsE,iBAAiB,EAAGV,EAAQ,SAAU5F,GAErD,MADAqC,GAAS0B,OAAO/D,GACTA,EAAQ,MAGnBuG,GAAgB,WACd,MAAOZ,GAA6B,GAAIQ,MAAKnE,EAAUkE,MAAQT,GAAUG,EAAQ5D,KA2CvF,QAASwE,GAAwBrM,EAAQsL,EAASzD,GAChD,MAAO,IAAI6D,IAAoB,SAAU3L,GACvC,GAKEuM,GALEC,GAAS,EACXC,EAAa,GAAIC,IACjBC,EAAY,KACZC,KACAC,GAAU,CAsDZ,OApDAN,GAAetM,EAAO6M,cAAcC,UAAUjF,GAAWY,UAAU,SAAUsE,GAC3E,GAAIpB,GAAGqB,CACyB,OAA5BD,EAAazO,MAAM2O,MACrBN,KACAA,EAAE/L,KAAKmM,GACPL,EAAYK,EAAazO,MAAMkB,MAC/BwN,GAAaJ,IAEbD,EAAE/L,MAAOtC,MAAOyO,EAAazO,MAAOwO,UAAWC,EAAaD,UAAYxB,IACxE0B,GAAaT,EACbA,GAAS,GAEPS,IACgB,OAAdN,EACF3M,EAAE4J,QAAQ+C,IAEVf,EAAI,GAAIuB,IACRV,EAAWW,cAAcxB,GACzBA,EAAEwB,cAActF,EAAUgE,wBAAwB,KAAMP,EAAS,SAAU8B,EAAGtB,GAC5E,GAAI1M,GAAGiO,EAAgBvK,EAAQwK,CAC/B,IAAkB,OAAdZ,EAAJ,CAGAE,GAAU,CACV,GACE9J,GAAS,KACL6J,EAAEhO,OAAS,GAAKgO,EAAE,GAAGG,UAAYjF,EAAUkE,OAAS,IACtDjJ,EAAS6J,EAAEY,QAAQjP,OAEN,OAAXwE,GACFA,EAAO0K,OAAOzN,SAEE,OAAX+C,EACTwK,IAAgB,EAChBD,EAAiB,EACbV,EAAEhO,OAAS,GACb2O,GAAgB,EAChBD,EAAiB7F,KAAKiG,IAAI,EAAGd,EAAE,GAAGG,UAAYjF,EAAUkE,QAExDQ,GAAS,EAEXnN,EAAIsN,EACJE,GAAU,EACA,OAANxN,EACFW,EAAE4J,QAAQvK,GACDkO,GACTxB,EAAK,KAAMuB,WAMd,GAAIK,IAAiBpB,EAAcE,IACzCxM,GAGL,QAAS2N,GAAwB3N,EAAQsL,EAASzD,GAChD,MAAOuE,IAAgB,WACrB,MAAOC,GAAwBrM,EAAQsL,EAAUzD,EAAUkE,MAAOlE,KAItE,QAAS+F,GAAkB5N,EAAQ6N,EAAmBC,GACpD,GAAIC,GAAU1E,CAOd,OANII,IAAWoE,GACbxE,EAAWwE,GAEXE,EAAWF,EACXxE,EAAWyE,GAEN,GAAIpC,IAAoB,SAAU3L,GAGvC,QAASiO,KACP1B,EAAaa,cAAcnN,EAAOyI,UAChC,SAAUM,GACR,GAAIkF,GAAQvE,GAASL,GAAUN,EAC/B,IAAIkF,IAAU5O,GAAY,MAAOU,GAAE4J,QAAQsE,EAAM7O,EACjD,IAAIuM,GAAI,GAAIuB,GACZgB,GAAO/C,IAAIQ,GACXA,EAAEwB,cAAcc,EAAMxF,UACpB,WACE1I,EAAE6J,OAAOb,GACTmF,EAAOC,OAAOxC,GACd9C,KAEF,SAAUzJ,GAAKW,EAAE4J,QAAQvK,IACzB,WACEW,EAAE6J,OAAOb,GACTmF,EAAOC,OAAOxC,GACd9C,QAIN,SAAUzJ,GAAKW,EAAE4J,QAAQvK,IACzB,WACEgP,GAAQ,EACR9B,EAAa+B,UACbxF,OAKN,QAASA,KACPuF,GAA2B,IAAlBF,EAAOvP,QAAgBoB,EAAE8J,cAjCpC,GAAIqE,GAAS,GAAIjD,IAAuBmD,GAAQ,EAAO9B,EAAe,GAAIG,GA0C1E,OANKsB,GAGHzB,EAAaa,cAAcY,EAAStF,UAAUuF,EAAO,SAAU5O,GAAKW,EAAE4J,QAAQvK,IAAO4O,IAFrFA,IAKK,GAAIN,IAAiBpB,EAAc4B,IACzClO,GA6FL,QAASsO,GAAqBtO,EAAQuO,GACpC,MAAO,IAAI7C,IAAoB,SAAU3L,GACvC,GAAIzB,GAAOkQ,GAAW,EAAOhC,EAAa,GAAIC,IAAoBzG,EAAK,EACnEsG,EAAetM,EAAOyI,UACxB,SAAUM,GACR,GAAI0F,GAAW/E,GAAS6E,GAAkBxF,EAC1C,IAAI0F,IAAapP,GAAY,MAAOU,GAAE4J,QAAQ8E,EAASrP,EAEvDsP,IAAUD,KAAcA,EAAWE,GAAsBF,IAEzDD,GAAW,EACXlQ,EAAQyK,EACR/C,GACA,IAAI4I,GAAY5I,EAAI2F,EAAI,GAAIuB,GAC5BV,GAAWW,cAAcxB,GACzBA,EAAEwB,cAAcsB,EAAShG,UACvB,WACE+F,GAAYxI,IAAO4I,GAAa7O,EAAE6J,OAAOtL,GACzCkQ,GAAW,EACX7C,EAAE0C,WAEJ,SAAUjP,GAAKW,EAAE4J,QAAQvK,IACzB,WACEoP,GAAYxI,IAAO4I,GAAa7O,EAAE6J,OAAOtL,GACzCkQ,GAAW,EACX7C,EAAE0C,cAIR,SAAUjP,GACRoN,EAAW6B,UACXtO,EAAE4J,QAAQvK,GACVoP,GAAW,EACXxI,KAEF,WACEwG,EAAW6B,UACXG,GAAYzO,EAAE6J,OAAOtL,GACrByB,EAAE8J,cACF2E,GAAW,EACXxI,KAGJ,OAAO,IAAI0H,IAAiBpB,EAAcE,IACzCxM,GAiKL,QAAS6O,GAAoB7O,EAAQ8O,EAAcC,EAAyBhN,GAO1E,MANI0H,IAAWqF,KACb/M,EAAQgN,EACRA,EAA0BD,EAC1BA,EAAeE,MAEjBC,GAAWC,aAAanN,KAAWA,EAAQoN,GAAgB,GAAIC,MACxD,GAAI1D,IAAoB,SAAU3L,GASvC,QAASsP,GAASC,GAGhB,QAASC,KAEP,MADAC,GAAYC,IAASzJ,EAHvB,GAAIyJ,GAAOzJ,EAAI2F,EAAI,GAAIuB,GAOvBwC,GAAMvC,cAAcxB,GACpBA,EAAEwB,cAAcmC,EAAQ7G,UAAU,WAChC8G,KAAejD,EAAaa,cAAcpL,EAAM0G,UAAU1I,IAC1D4L,EAAE0C,WACD,SAAUjP,GACXmQ,KAAexP,EAAE4J,QAAQvK,IACxB,WACDmQ,KAAejD,EAAaa,cAAcpL,EAAM0G,UAAU1I,OAM9D,QAAS4P,KACP,GAAIC,IAAOJ,CAEX,OADII,IAAO5J,IACJ4J,EAhCT,GAAItD,GAAe,GAAIG,IACrBiD,EAAQ,GAAIjD,IACZoD,EAAW,GAAI3C,GAEjBZ,GAAaa,cAAc0C,EAE3B,IAAI7J,GAAK,EAAGwJ,GAAW,CAyCvB,OApBAH,GAASP,GAQTe,EAAS1C,cAAcnN,EAAOyI,UAAU,SAAUM,GAChD,GAAI4G,IAAS,CACX5P,EAAE6J,OAAOb,EACT,IAAIuG,GAAU5F,GAASqF,GAAyBhG,EAChD,IAAIuG,IAAYjQ,GAAY,MAAOU,GAAE4J,QAAQ2F,EAAQlQ,EACrDiQ,GAASX,GAAUY,GAAWX,GAAsBW,GAAWA,KAEhE,SAAUlQ,GACXuQ,KAAW5P,EAAE4J,QAAQvK,IACpB,WACDuQ,KAAW5P,EAAE8J,iBAER,GAAI6D,IAAiBpB,EAAcoD,IACzC1P,GAGL,QAASsP,IAAQtP,EAAQsL,EAASvJ,EAAO8F,GAQvC,MAPIC,IAAY/F,KACd8F,EAAY9F,EACZA,EAAQoN,GAAgB,GAAIC,MAE1BrN,YAAiBT,SAASS,EAAQoN,GAAgBpN,IACtD+F,GAAYD,KAAeA,EAAYiI,IACvCb,GAAWC,aAAanN,KAAWA,EAAQoN,GAAgB,GAAIC,MACxD,GAAI1D,IAAoB,SAAU3L,GASvC,QAASgQ,KACP,GAAIN,GAAOzJ,CACX0J,GAAMvC,cAActF,EAAUmI,eAAe,KAAM1E,EAAS,WAC1DkE,EAAWxJ,IAAOyJ,EACdD,IACFd,GAAU3M,KAAWA,EAAQ4M,GAAsB5M,IACnDuK,EAAaa,cAAcpL,EAAM0G,UAAU1I,QAdjD,GAAIiG,GAAK,EACP6J,EAAW,GAAI3C,IACfZ,EAAe,GAAIG,IACnB+C,GAAW,EACXE,EAAQ,GAAIjD,GAkCd,OAhCAH,GAAaa,cAAc0C,GAa3BE,IAEAF,EAAS1C,cAAcnN,EAAOyI,UAAU,SAAUM,GAC3CyG,IACHxJ,IACAjG,EAAE6J,OAAOb,GACTgH,MAED,SAAU3Q,GACNoQ,IACHxJ,IACAjG,EAAE4J,QAAQvK,KAEX,WACIoQ,IACHxJ,IACAjG,EAAE8J,kBAGC,GAAI6D,IAAiBpB,EAAcoD,IACzC1P,GA+FL,QAASiQ,IAAoBjQ,EAAQkQ,EAASC,GAC5C,MAAO,IAAIzE,IAAoB,SAAU3L,GAOvC,QAAS6I,GAAKG,EAAGjK,GAGf,GAFAsR,EAAOtR,GAAKiK,EACZyF,EAAS1P,IAAK,EACVuR,IAAgBA,EAAc7B,EAAS8B,MAAMC,KAAY,CAC3D,GAAIvG,EAAO,MAAOjK,GAAE4J,QAAQK,EAC5B,IAAI4F,GAAMlG,GAASyG,GAAgBlR,MAAM,KAAMmR,EAC/C,IAAIR,IAAQvQ,GAAY,MAAOU,GAAE4J,QAAQiG,EAAIxQ,EAC7CW,GAAE6J,OAAOgG,GAEXY,GAAUJ,EAAO,IAAMrQ,EAAE8J,cAf3B,GAIEG,GAJEwE,IAAY,GAAO,GACrB6B,GAAc,EACdG,GAAS,EACTJ,EAAS,GAAIvR,OAAM,EAerB,OAAO,IAAI6O,IACT1N,EAAOyI,UACL,SAAUM,GACRH,EAAKG,EAAG,IAEV,SAAU3J,GACJgR,EAAO,GACTrQ,EAAE4J,QAAQvK,GAEV4K,EAAM5K,GAGV,WACEoR,GAAS,EACTJ,EAAO,IAAMrQ,EAAE8J,gBAEnBqG,EAAQzH,UACN,SAAUM,GACRH,EAAKG,EAAG,IAEV,SAAU3J,GAAKW,EAAE4J,QAAQvK,IACzB,WACEoR,GAAS,EACT5H,GAAK,EAAM,OAGhB5I,GAkRL,QAASyQ,IAAqB1Q,GAC5B,OACE2Q,oBAAqB,WACnB,MAAO3Q,IAET4Q,oBAAqB,SAASC,EAAKC,GACjC,MAAOD,GAAIhH,OAAOiH,IAEpBC,sBAAuB,SAASF,GAC9B,MAAOA,GAAI/G,gBAvxMjB,GAAIkH,KACFC,YAAY,EACZlP,QAAU,GAORmP,GAAeF,SAAmBG,WAAYA,UAAYA,QAAQC,SAAYD,QAAU,KACxFE,GAAcL,SAAmBM,UAAWA,SAAWA,OAAOF,SAAYE,OAAS,KACnFC,GAAajT,EAAY4S,IAAeG,IAAgC,gBAAXG,SAAuBA,QACpFC,GAAWnT,EAAY0S,SAAmBjF,QAASA,MACnD2F,GAAapT,EAAY0S,SAAmBW,UAAWA,QACvDC,GAAiBP,IAAcA,GAAWF,UAAYD,GAAeA,GAAc,KACnFW,GAAavT,EAAY0S,SAAmB7R,QAASA,MACrD6H,GAAOuK,IAAgBG,MAAgBG,IAAcA,GAAWF,SAAYD,IAAeD,IAAYI,IAAcC,SAAS,iBAE9HC,IACFC,aACAC,QACEC,QAASlL,GAAKkL,SAEhBC,YAIEC,GAAOL,GAAGI,QAAQC,KAAO,aAC3B5B,GAAWuB,GAAGI,QAAQ3B,SAAW,SAAUxH,GAAK,MAAOA,IACvDqJ,GAAaN,GAAGI,QAAQE,WAAapG,KAAKD,IAC1CsG,GAAkBP,GAAGI,QAAQG,gBAAkB,SAAUtJ,EAAGuJ,GAAK,MAAOC,IAAQxJ,EAAGuJ,IACnFE,GAAqBV,GAAGI,QAAQM,mBAAqB,SAAUzJ,EAAGuJ,GAAK,MAAOvJ,GAAIuJ,EAAI,EAASA,EAAJvJ,EAAQ,GAAK,GAExG0J,IADuBX,GAAGI,QAAQQ,qBAAuB,SAAU3J,GAAK,MAAOA,GAAEuB,YAClEwH,GAAGI,QAAQO,aAAe,SAAUzI,GAAO,KAAMA,KAChE0E,GAAYoD,GAAGI,QAAQxD,UAAY,SAAUzF,GAAK,QAASA,GAA4B,kBAAhBA,GAAER,WAA8C,kBAAXQ,GAAE0J,MAC9GlJ,GAAaqI,GAAGI,QAAQzI,WAAc,WAEpC,GAAImJ,GAAO,SAAUtU,GACnB,MAAuB,kBAATA,KAAuB,EAUvC,OANIsU,GAAK,OACPA,EAAO,SAAStU,GACd,MAAuB,kBAATA,IAA+C,qBAAxBgM,SAAS1H,KAAKtE,KAIhDsU,KASPvT,IAAYD,MAaZsK,GAAWoI,GAAGC,UAAUrI,SAAW,SAAkBP,GACvD,IAAKM,GAAWN,GAAO,KAAM,IAAI/B,WAAU,wBAC3C,OAAOrI,GAAcoK,GAOvB2I,IAAGE,OAAOa,kBAAmB,CAC7B,IAAInT,KAAY,EAAOI,GAAS4J,GAAS,WAAc,KAAM,IAAIpI,UACjE5B,MAAcI,GAAOV,KAAOU,GAAOV,EAAEO,KAGrC,IAAmCuB,IAA/BC,GAAgBE,IAEhBxB,GAAuB,uBAoFvBiT,GAAahB,GAAGgB,WAAa,WAC/B5T,KAAKwE,QAAU,iCACfpC,MAAMsB,KAAK1D,MAEb4T,IAAWzI,UAAY9L,OAAOwU,OAAOzR,MAAM+I,WAC3CyI,GAAWzI,UAAU5G,KAAO,YAE5B,IAAIuP,IAAsBlB,GAAGkB,oBAAsB,WACjD9T,KAAKwE,QAAU,2BACfpC,MAAMsB,KAAK1D,MAEb8T,IAAoB3I,UAAY9L,OAAOwU,OAAOzR,MAAM+I,WACpD2I,GAAoB3I,UAAU5G,KAAO,qBAErC,IAAIwP,IAA0BnB,GAAGmB,wBAA0B,WACzD/T,KAAKwE,QAAU,wBACfpC,MAAMsB,KAAK1D,MAEb+T,IAAwB5I,UAAY9L,OAAOwU,OAAOzR,MAAM+I,WACxD4I,GAAwB5I,UAAU5G,KAAO,yBAEzC,IAAIyP,IAAoBpB,GAAGoB,kBAAoB,SAAUxP,GACvDxE,KAAKwE,QAAUA,GAAW,kCAC1BpC,MAAMsB,KAAK1D,MAEbgU,IAAkB7I,UAAY9L,OAAOwU,OAAOzR,MAAM+I,WAClD6I,GAAkB7I,UAAU5G,KAAO,mBAEnC,IAAI0P,IAAsBrB,GAAGqB,oBAAsB,SAAUzP,GAC3DxE,KAAKwE,QAAUA,GAAW,oCAC1BpC,MAAMsB,KAAK1D,MAEbiU,IAAoB9I,UAAY9L,OAAOwU,OAAOzR,MAAM+I,WACpD8I,GAAoB9I,UAAU5G,KAAO,qBAErC,IAAI2P,IAAiBtB,GAAGI,QAAQkB,eAAiB,WAC/C,KAAM,IAAID,KAQRhM,IALe2K,GAAGI,QAAQmB,aAAe,WAC3C,KAAM,IAAIH,KAIwB,kBAAXI,SAAyBA,OAAOC,UACvD,qBAEExM,IAAKyM,KAA+C,mBAAjC,GAAIzM,IAAKyM,KAAM,gBACpCrM,GAAa,aAGf,IAAIsM,IAAiB3B,GAAG2B,gBAAmB5K,MAAM,EAAMvK,MAAOF,GAE1DsV,GAAa5B,GAAGI,QAAQwB,WAAa,SAAU3T,GACjD,MAAOA,IAAKA,EAAEoH,MAAgB/I,GAG5BuV,GAAc7B,GAAGI,QAAQyB,YAAc,SAAU5T,GACnD,MAAOA,IAAKA,EAAEpB,SAAWP,EAG3B0T,IAAGI,QAAQqB,SAAWpM,EAEtB,IAAIyM,IAAe9B,GAAGC,UAAU6B,aAAe,SAAUC,EAAMC,EAASC,GACtE,GAAuB,mBAAZD,GAA2B,MAAOD,EAC7C,QAAOE,GACL,IAAK,GACH,MAAO,YACL,MAAOF,GAAKjR,KAAKkR,GAErB,KAAK,GACH,MAAO,UAASE,GACd,MAAOH,GAAKjR,KAAKkR,EAASE,GAE9B,KAAK,GACH,MAAO,UAAS1V,EAAOoE,GACrB,MAAOmR,GAAKjR,KAAKkR,EAASxV,EAAOoE,GAErC,KAAK,GACH,MAAO,UAASpE,EAAOoE,EAAOuR,GAC5B,MAAOJ,GAAKjR,KAAKkR,EAASxV,EAAOoE,EAAOuR,IAI9C,MAAO,YACL,MAAOJ,GAAK5U,MAAM6U,EAAS3U,aAK3B+U,IAAa,WACf,iBACA,UACA,iBACA,gBACA,uBACA,eAGAjP,IAFgBiP,GAAUvV,OAEhB,sBACVoG,GAAW,iBACXzB,GAAU,mBACVC,GAAU,gBACVC,GAAW,iBACX2Q,GAAU,oBACVC,GAAS,eACTzQ,GAAY,kBACZuB,GAAY,kBACZtB,GAAY,kBACZyQ,GAAS,eACTxQ,GAAY,kBACZyQ,GAAa,mBAEbC,GAAiB,uBACjBC,GAAa,wBACbC,GAAa,wBACbC,GAAU,qBACVC,GAAW,sBACXC,GAAW,sBACXC,GAAW,sBACXC,GAAkB,6BAClBC,GAAY,uBACZC,GAAY,uBAEZ9Q,KACJA,IAAesQ,IAActQ,GAAeuQ,IAC5CvQ,GAAewQ,IAAWxQ,GAAeyQ,IACzCzQ,GAAe0Q,IAAY1Q,GAAe2Q,IAC1C3Q,GAAe4Q,IAAmB5Q,GAAe6Q,IACjD7Q,GAAe8Q,KAAa,EAC5B9Q,GAAee,IAAWf,GAAea,IACzCb,GAAeqQ,IAAkBrQ,GAAeZ,IAChDY,GAAeX,IAAWW,GAAeV,IACzCU,GAAeiQ,IAAWjQ,GAAekQ,IACzClQ,GAAeP,IAAaO,GAAegB,IAC3ChB,GAAeN,IAAaM,GAAemQ,IAC3CnQ,GAAeL,IAAaK,GAAeoQ,KAAc,CAEzD,IAAIW,IAAc1W,OAAO8L,UACrB1H,GAAiBsS,GAAYtS,eAC7BwB,GAAc8Q,GAAY3K,SAC1BtG,GAAmBwD,KAAK0N,IAAI,EAAG,IAAM,EAErC7S,GAAO9D,OAAO8D,MAAS,WACvB,GAAIM,GAAiBpE,OAAO8L,UAAU1H,eAClCwS,IAAqB7K,SAAU,MAAQ8K,qBAAqB,YAC5DlB,GACE,WACA,iBACA,UACA,iBACA,gBACA,uBACA,eAEFmB,EAAkBnB,EAAUvV,MAEhC,OAAO,UAAS2W,GACd,GAAmB,gBAARA,KAAoC,kBAARA,IAA8B,OAARA,GAC3D,KAAM,IAAIlO,WAAU,mCAGtB,IAAiBmO,GAAMzW,EAAnBgE,IAEJ,KAAKyS,IAAQD,GACP3S,EAAeC,KAAK0S,EAAKC,IAC3BzS,EAAOlC,KAAK2U,EAIhB,IAAIJ,EACF,IAAKrW,EAAI,EAAOuW,EAAJvW,EAAqBA,IAC3B6D,EAAeC,KAAK0S,EAAKpB,EAAUpV,KACrCgE,EAAOlC,KAAKsT,EAAUpV,GAI5B,OAAOgE,OAmET6C,GAAWmM,GAAGC,UAAUpM,SAAW,SAASrH,GAC9C,GAAIkX,SAAclX,EAClB,SAASA,IAAmB,WAATkX,GAA8B,aAATA,IAWtCpQ,GAAgB,WAClB,IACE7G,QAAS+L,SAAY,GAAM,IAC3B,MAAMlL,GACN,MAAO,YAAa,OAAO,GAE7B,MAAO,UAASd,GACd,MAAiC,kBAAnBA,GAAMgM,UAAmD,iBAAhBhM,EAAQ,QAQ/DsG,GAAU/F,MAAM+F,SAAW,SAAStG,GACtC,MAAOwF,GAAaxF,IAAUyF,EAASzF,EAAMK,SAAWwF,GAAYvB,KAAKtE,KAAWyG,IAwHlFwN,GAAUT,GAAGC,UAAUQ,QAAU,SAAUjU,EAAOyD,GACpD,MAAO2D,GAAYpH,EAAOyD,IAMtB0T,OAHa9S,eACL9D,MAAMwL,UAAUqL,MAEb5D,GAAGC,UAAU0D,SAAW,SAAUE,EAAOxN,GACtD,QAASyN,KAAO1W,KAAKgE,YAAcyS,EACnCC,EAAGvL,UAAYlC,EAAOkC,UACtBsL,EAAMtL,UAAY,GAAIuL,KAGpBC,GAAgB/D,GAAGC,UAAU8D,cAAgB,SAAUP,GACzD,IAAI,GAAIQ,MAAchX,EAAI,EAAGJ,EAAMS,UAAUR,OAAYD,EAAJI,EAASA,IAAOgX,EAAQlV,KAAKzB,UAAUL,GAC5F,KAAK,GAAIiX,GAAM,EAAGC,EAAKF,EAAQnX,OAAcqX,EAAND,EAAUA,IAAO,CACtD,GAAI/V,GAAS8V,EAAQC,EACrB,KAAK,GAAIR,KAAQvV,GACfsV,EAAIC,GAAQvV,EAAOuV,KAwBrBtK,IAlBS6G,GAAGC,UAAUkE,OAAS,SAAUC,EAAIC,GAC/C,MAAO,IAAIzK,IAAoB,SAAUxD,GACvC,MAAO,IAAIwF,IAAiByI,EAAEC,gBAAiBF,EAAGzN,UAAUP,OAgBtC4J,GAAG7G,oBAAsB,WACjD,GAAenM,GAAGJ,EAAd4J,IACJ,IAAIzJ,MAAM+F,QAAQzF,UAAU,IAC1BmJ,EAAOnJ,UAAU,OAIjB,KAFAT,EAAMS,UAAUR,OAChB2J,EAAO,GAAIzJ,OAAMH,GACbI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EAEjDI,MAAK8L,YAAc1C,EACnBpJ,KAAKkH,YAAa,EAClBlH,KAAKP,OAAS2J,EAAK3J,SAGjB0X,GAA+BpL,GAAoBZ,SAMvDgM,IAA6BlL,IAAM,SAAUC,GACvClM,KAAKkH,WACPgF,EAAKiD,WAELnP,KAAK8L,YAAYpK,KAAKwK,GACtBlM,KAAKP,WAST0X,GAA6BlI,OAAS,SAAU/C,GAC9C,GAAIkL,IAAgB,CACpB,KAAKpX,KAAKkH,WAAY,CACpB,GAAI2P,GAAM7W,KAAK8L,YAAYpL,QAAQwL,EACvB,MAAR2K,IACFO,GAAgB,EAChBpX,KAAK8L,YAAYuL,OAAOR,EAAK,GAC7B7W,KAAKP,SACLyM,EAAKiD,WAGT,MAAOiI,IAMTD,GAA6BhI,QAAU,WACrC,IAAKnP,KAAKkH,WAAY,CACpBlH,KAAKkH,YAAa,CAElB,KAAI,GADA1H,GAAMQ,KAAK8L,YAAYrM,OAAQ6X,EAAqB,GAAI3X,OAAMH,GAC1DI,EAAI,EAAOJ,EAAJI,EAASA,IAAO0X,EAAmB1X,GAAKI,KAAK8L,YAAYlM,EAIxE,KAHAI,KAAK8L,eACL9L,KAAKP,OAAS,EAETG,EAAI,EAAOJ,EAAJI,EAASA,IACnB0X,EAAmB1X,GAAGuP,WAS5B,IAAIoI,IAAa3E,GAAG2E,WAAa,SAAUC,GACzCxX,KAAKkH,YAAa,EAClBlH,KAAKwX,OAASA,GAAUvE,GAI1BsE,IAAWpM,UAAUgE,QAAU,WACxBnP,KAAKkH,aACRlH,KAAKwX,SACLxX,KAAKkH,YAAa,GAStB,IAAIuQ,IAAmBF,GAAW1D,OAAS,SAAU2D,GAAU,MAAO,IAAID,IAAWC,IAKjFE,GAAkBH,GAAWI,OAAUxI,QAAS8D,IAOhD2E,GAAeL,GAAWK,aAAe,SAAUnL,GACrD,MAAOA,IAAKlC,GAAWkC,EAAE0C,UAGvB0I,GAAgBN,GAAWM,cAAgB,SAAUC,GACvD,GAAIA,EAAW5Q,WAAc,KAAM,IAAI4M,KAGrCiE,GAAkBR,GAAWS,OAAS,SAAUpU,GAClD,MAAOgU,IAAahU,GAAUA,EAAS8T,IAIrC1J,GAA6B4E,GAAG5E,2BAA6B,WAC/DhO,KAAKkH,YAAa,EAClBlH,KAAKiY,QAAU,KAEjBjK,IAA2B7C,UAAU+L,cAAgB,WACnD,MAAOlX,MAAKiY,SAEdjK,GAA2B7C,UAAU8C,cAAgB,SAAU7O,GAC7D,GAAIY,KAAKiY,QAAW,KAAM,IAAI7V,OAAM,uCACpC,IAAIgV,GAAgBpX,KAAKkH,YACxBkQ,IAAkBpX,KAAKiY,QAAU7Y,GAClCgY,GAAiBhY,GAASA,EAAM+P,WAElCnB,GAA2B7C,UAAUgE,QAAU,WAC7C,IAAKnP,KAAKkH,WAAY,CACpBlH,KAAKkH,YAAa,CAClB,IAAIgR,GAAMlY,KAAKiY,OACfjY,MAAKiY,QAAU,KACfC,GAAOA,EAAI/I,WAKf,IAAI5B,IAAmBqF,GAAGrF,iBAAmB,WAC3CvN,KAAKkH,YAAa,EAClBlH,KAAKiY,QAAU,KAEjB1K,IAAiBpC,UAAU+L,cAAgB,WACzC,MAAOlX,MAAKiY,SAEd1K,GAAiBpC,UAAU8C,cAAgB,SAAU7O,GACnD,GAAIgY,GAAgBpX,KAAKkH,UACzB,KAAKkQ,EAAe,CAClB,GAAIc,GAAMlY,KAAKiY,OACfjY,MAAKiY,QAAU7Y,EAEjB8Y,GAAOA,EAAI/I,UACXiI,GAAiBhY,GAASA,EAAM+P,WAElC5B,GAAiBpC,UAAUgE,QAAU,WACnC,IAAKnP,KAAKkH,WAAY,CACpBlH,KAAKkH,YAAa,CAClB,IAAIgR,GAAMlY,KAAKiY,OACfjY,MAAKiY,QAAU,KAEjBC,GAAOA,EAAI/I,UAGb,IAAIX,IAAmBoE,GAAGpE,iBAAmB,SAAU2J,EAAOC,GAC5DpY,KAAKqY,OAASF,EACdnY,KAAKsY,QAAUF,EACfpY,KAAKkH,YAAa,EAGpBsH,IAAiBrD,UAAUgE,QAAU,WACnC,IAAKnP,KAAKkH,WAAY,CACpBlH,KAAKkH,YAAa,CAClB,IAAIqR,GAAOvY,KAAKqY,MAChBrY,MAAKqY,OAAS,KACdE,GAAQA,EAAKpJ,SACb,IAAIqJ,GAAOxY,KAAKsY,OAChBtY,MAAKsY,QAAU,KACfE,GAAQA,EAAKrJ,WAIjB,IAAIsJ,IAAiB7F,GAAG6F,eAAiB,SAAU3M,GACjD9L,KAAK0Y,aAAe5M,EACpB9L,KAAKkH,YAAa,EAGpBuR,IAAetN,UAAUgE,QAAU,WACjC,IAAKnP,KAAKkH,WAAY,CACpBlH,KAAKkH,YAAa,CAClB,KAAK,GAAItH,GAAI,EAAGJ,EAAMQ,KAAK0Y,aAAajZ,OAAYD,EAAJI,EAASA,IACvDI,KAAK0Y,aAAa9Y,GAAGuP,SAEvBnP,MAAK0Y,aAAajZ,OAAS,GAO/B,IAuDIkZ,KAvDqB/F,GAAGgG,mBAAqB,WAE/C,QAASC,GAAgBf,GACvB9X,KAAK8X,WAAaA,EAClB9X,KAAK8X,WAAWnR,QAChB3G,KAAK8Y,iBAAkB,EAmBzB,QAASF,GAAmBd,GAC1B9X,KAAK+Y,qBAAuBjB,EAC5B9X,KAAKkH,YAAa,EAClBlH,KAAKgZ,mBAAoB,EACzBhZ,KAAK2G,MAAQ,EAwBf,MA5CAkS,GAAgB1N,UAAUgE,QAAU,WAC7BnP,KAAK8X,WAAW5Q,YAAelH,KAAK8Y,kBACvC9Y,KAAK8Y,iBAAkB,EACvB9Y,KAAK8X,WAAWnR,QACc,IAA1B3G,KAAK8X,WAAWnR,OAAe3G,KAAK8X,WAAWkB,oBACjDhZ,KAAK8X,WAAW5Q,YAAa,EAC7BlH,KAAK8X,WAAWiB,qBAAqB5J,aAoB3CyJ,EAAmBzN,UAAUgE,QAAU,WAChCnP,KAAKkH,YAAelH,KAAKgZ,oBAC5BhZ,KAAKgZ,mBAAoB,EACN,IAAfhZ,KAAK2G,QACP3G,KAAKkH,YAAa,EAClBlH,KAAK+Y,qBAAqB5J,aAShCyJ,EAAmBzN,UAAU+L,cAAgB,WAC3C,MAAOlX,MAAKkH,WAAawQ,GAAkB,GAAImB,GAAgB7Y,OAG1D4Y,KAGWhG,GAAGC,UAAU8F,cAAgB,SAAUhQ,EAAW3B,EAAOwQ,EAAQpL,EAAS6M,GAC5FjZ,KAAK2I,UAAYA,EACjB3I,KAAKgH,MAAQA,EACbhH,KAAKwX,OAASA,EACdxX,KAAKoM,QAAUA,EACfpM,KAAKiZ,SAAWA,GAAY3F,GAC5BtT,KAAK8X,WAAa,GAAI9J,KAGxB2K,IAAcxN,UAAU+N,OAAS,WAC/BlZ,KAAK8X,WAAW7J,cAAcjO,KAAKmZ,eAGrCR,GAAcxN,UAAUiO,UAAY,SAAUvW,GAC5C,MAAO7C,MAAKiZ,SAASjZ,KAAKoM,QAASvJ,EAAMuJ,UAG3CuM,GAAcxN,UAAUkO,YAAc,WACpC,MAAOrZ,MAAK8X,WAAW5Q,YAGzByR,GAAcxN,UAAUgO,WAAa,WACnC,MAAOpB,IAAgB/X,KAAKwX,OAAOxX,KAAK2I,UAAW3I,KAAKgH,QAI1D,IAAIsS,IAAY1G,GAAG0G,UAAa,WAE9B,QAASA,MAGTA,EAAU1Q,YAAc,SAAUxB,GAChC,MAAOA,aAAakS,GAGtB,IAAIC,GAAiBD,EAAUnO,SAiD/B,OAzCAoO,GAAeC,SAAW,SAAUxS,EAAOwQ,GACzC,KAAM,IAAIvD,KAUZsF,EAAezI,eAAiB,SAAU9J,EAAOoF,EAASoL,GACxD,GAAIiC,GAAKrN,CAIT,OAHAqN,aAAc3M,QAAS2M,GAAUzZ,KAAK6M,OACtC4M,EAAKH,EAAUI,UAAUD,GAEd,IAAPA,EAAmBzZ,KAAKwZ,SAASxS,EAAOwQ,GAErCxX,KAAK2Z,gBAAgB3S,EAAOyS,EAAIjC,IAGzC+B,EAAeI,gBAAkB,SAAU3S,EAAOoF,EAASoL,GACzD,KAAM,IAAIvD,KAIZqF,EAAUzM,IAAMqG,GAGhBoG,EAAUnO,UAAU0B,IAAMqG,GAO1BoG,EAAUI,UAAY,SAAUE,GAE9B,MADW,GAAXA,IAAiBA,EAAW,GACrBA,GAGFN,KAGL5M,GAAgB4M,GAAUI,UAAW9Q,GAAc0Q,GAAU1Q,aAEhE,SAAU2Q,GAET,QAASM,GAAmBlR,EAAWmR,GAKrC,QAASC,GAAYC,GASnB,QAASC,GAAa/L,EAAGgM,GAOvB,MANIC,GACFC,EAAMnL,OAAOxC,GAEb6E,GAAS,EAEXkG,EAAO0C,EAAQH,GACRrC,GAfT,GAAIyC,IAAU,EAAO7I,GAAS,EAE1B7E,EAAI9D,EAAU6Q,SAASQ,EAAQC,EAC9B3I,KACH8I,EAAMnO,IAAIQ,GACV0N,GAAU,GAVd,GAAInT,GAAQ8S,EAAK,GAAItC,EAASsC,EAAK,GAAIM,EAAQ,GAAIrO,GAEnD,OADAyL,GAAOxQ,EAAO+S,GACPK,EAuBT,QAASC,GAAc1R,EAAWmR,GAKhC,QAASC,GAAYC,EAAQM,GAS3B,QAASL,GAAa/L,EAAGgM,GAOvB,MANIC,GACFC,EAAMnL,OAAOxC,GAEb6E,GAAS,EAEXkG,EAAO0C,EAAQH,GACRrC,GAfT,GAAIyC,IAAU,EAAO7I,GAAS,EAE1B7E,EAAI9D,EAAUmI,eAAekJ,EAAQM,EAAUL,EAC9C3I,KACH8I,EAAMnO,IAAIQ,GACV0N,GAAU,GAVd,GAAInT,GAAQ8S,EAAK,GAAItC,EAASsC,EAAK,GAAIM,EAAQ,GAAIrO,GAEnD,OADAyL,GAAOxQ,EAAO+S,GACPK,EA6BTb,EAAegB,kBAAoB,SAAUvT,EAAOwQ,GAClD,MAAOxX,MAAKwZ,UAAUxS,EAAOwQ,GAASqC,IAUxCN,EAAe5M,wBAA0B,SAAU3F,EAAOoF,EAASoL,GACjE,MAAOxX,MAAK8Q,gBAAgB9J,EAAOwQ,GAASpL,EAASiO,KAGvDf,GAAUnO,WAEX,SAAUoO,GASTA,EAAetM,iBAAmB,SAASjG,EAAOuF,EAAQiL,GACxD,GAAgC,mBAArB3P,IAAK2S,YAA+B,KAAM,IAAIxG,GACzDzH,GAASG,GAAcH,EACvB,IAAInF,GAAIJ,EAAOF,EAAKe,GAAK2S,YAAY,WAAcpT,EAAIoQ,EAAOpQ,IAAOmF,EACrE,OAAOkL,IAAiB,WAAc5P,GAAK4S,cAAc3T,OAG3DwS,GAAUnO,UAGX,IAuFGuP,IAAgBC,GAvFfC,GAAsB,SAAUC,GAEnC,QAASD,KACPC,EAAUnX,KAAK1D,MAOjB,MATAuW,IAASqE,EAAoBC,GAK7BD,EAAmBzP,UAAUqO,SAAW,SAAUxS,EAAOwQ,GACvD,MAAOO,IAAgBP,EAAOxX,KAAMgH,KAG/B4T,GACPtB,IAEEwB,GAAqBxB,GAAUyB,UAAY,GAAIH,IAK/CI,GAA0B,SAAUH,GAGtC,QAASI,KACP,KAAOC,EAAMzb,OAAS,GAAG,CACvB,GAAIyM,GAAOgP,EAAMC,WAChBjP,EAAKmN,eAAiBnN,EAAKgN,UAKhC,QAAS8B,KACPH,EAAUnX,KAAK1D,MAXjB,GAAIkb,EAgCJ,OAvBA3E,IAASyE,EAAwBH,GAKjCG,EAAuB7P,UAAUqO,SAAW,SAAUxS,EAAOwQ,GAC3D,GAAI4D,GAAK,GAAIzC,IAAc3Y,KAAMgH,EAAOwQ,EAAQxX,KAAK6M,MAErD,IAAKqO,EAQHA,EAAMG,QAAQD,OARJ,CACVF,EAAQ,GAAII,IAAc,GAC1BJ,EAAMG,QAAQD,EAEd,IAAIxX,GAAS4G,GAASyQ,IACtBC,GAAQ,KACJtX,IAAWzD,IAAYC,EAAQwD,EAAO1D,GAI5C,MAAOkb,GAAGtD,YAGZkD,EAAuB7P,UAAUoQ,iBAAmB,WAAc,OAAQL,GAEnEF,GACP1B,IAEEzQ,GAAyByQ,GAAUkC,cAAgB,GAAIR,IAmCvDS,IAjC4B7I,GAAGC,UAAU6I,0BAA6B,WACxE,QAASC,GAAW/O,GAClB,MAAO,UAAcgP,EAASC,GAC5BA,EAAQ,EAAGjP,EAAKkP,QAChB,IAAI9U,GAAQwD,GAASoC,EAAKmP,SAASnP,EAAKoP,OACpChV,KAAU7G,KACZyM,EAAKqP,QAAQ9M,UACb/O,EAAQ4G,EAAM9G,IAEhB0M,EAAKoP,OAAShV,GAIlB,QAAS0U,GAA0B/S,EAAW3B,EAAOuF,EAAQiL,GAC3DxX,KAAKkc,WAAavT,EAClB3I,KAAKgc,OAAShV,EACdhH,KAAK8b,QAAUvP,EACfvM,KAAK+b,QAAUvE,EAWjB,MARAkE,GAA0BvQ,UAAU2D,MAAQ,WAC1C,GAAIrC,GAAI,GAAIuB,GAIZ,OAHAhO,MAAKic,QAAUxP,EACfA,EAAEwB,cAAcjO,KAAKkc,WAAWvP,wBAAwB,EAAG3M,KAAK8b,QAASH,EAAW3b,QAE7EyM,GAGFiP,KAKS,WAChB,GAAIS,GAAiBC,EAAoBnJ,EACzC,IAAMpL,GAAKwU,WACTF,EAAkBtU,GAAKwU,WACvBD,EAAoBvU,GAAKyU,iBACpB,CAAA,IAAMzU,GAAK0U,QAMhB,KAAM,IAAIvI,GALVmI,GAAkB,SAAUlS,EAAIuS,GAC9B3U,GAAK0U,QAAQE,MAAMD,GACnBvS,KAMJ,OACEoS,WAAYF,EACZG,aAAcF,OAGdD,GAAkBV,GAAWY,WAC/BD,GAAoBX,GAAWa,cAEhC,WAQC,QAASI,GAAQC,GACf,GAAIC,EACFT,GAAgB,WAAcO,EAAQC,IAAY,OAC7C,CACL,GAAIE,GAAOC,EAAcH,EACzB,IAAIE,EAAM,CACRD,GAAmB,CACnB,IAAIhZ,GAAS4G,GAASqS,IACtBlC,IAAYgC,GACZC,GAAmB,EACfhZ,IAAWzD,IAAYC,EAAQwD,EAAO1D,KAchD,QAAS6c,KAEP,IAAKlV,GAAKmV,aAAenV,GAAKoV,cAAiB,OAAO,CACtD,IAAIC,IAAU,EAAOC,EAAatV,GAAKuV,SAMvC,OAJAvV,IAAKuV,UAAY,WAAcF,GAAU,GACzCrV,GAAKmV,YAAY,GAAI,KACrBnV,GAAKuV,UAAYD,EAEVD,EAvCT,GAAIG,GAAa,EAAGP,KAAoBF,GAAmB,CAE3DjC,IAAc,SAAUgC,SACfG,GAAcH,GAkBvB,IAAIW,GAAW,GAAIC,QAAO,IACxBC,OAAOpS,UACJqS,QAAQ,sBAAuB,QAC/BA,QAAQ,wBAAyB,OAAS,KAG3CC,EAAiG,mBAA1EA,EAAetL,IAAcK,IAAiBL,GAAWsL,gBACjFJ,EAASK,KAAKD,IAAiBA,CAelC,IAAInT,GAAWmT,GACbhD,GAAiB,SAAUlD,GACzB,GAAI1Q,GAAKuW,GAIT,OAHAP,GAAchW,GAAM0Q,EACpBkG,EAAa,WAAchB,EAAQ5V,KAE5BA,OAEJ,IAAuB,mBAAZ8W,UAAyD,wBAA3BxS,SAAS1H,KAAKka,SAC5DlD,GAAiB,SAAUlD,GACzB,GAAI1Q,GAAKuW,GAIT,OAHAP,GAAchW,GAAM0Q,EACpBoG,QAAQC,SAAS,WAAcnB,EAAQ5V,KAEhCA,OAEJ,IAAIiW,IAAwB,CACjC,GAAIe,GAAa,iBAAmBxV,KAAKyV,SAErCC,EAAsB,SAAUC,GAER,gBAAfA,GAAMC,MAAqBD,EAAMC,KAAKC,UAAU,EAAGL,EAAWre,UAAYqe,GACnFpB,EAAQuB,EAAMC,KAAKC,UAAUL,EAAWre,SAI5CoI,IAAK6D,iBAAiB,UAAWsS,GAAqB,GAEtDtD,GAAiB,SAAUlD,GACzB,GAAI1Q,GAAKuW,GAGT,OAFAP,GAAchW,GAAM0Q,EACpB3P,GAAKmV,YAAYc,EAAahX,EAAI,KAC3BA,OAEJ,IAAMe,GAAKuW,eAAgB,CAChC,GAAIC,GAAU,GAAIxW,IAAKuW,cAEvBC,GAAQC,MAAMlB,UAAY,SAAUld,GAAKwc,EAAQxc,EAAEge,OAEnDxD,GAAiB,SAAUlD,GACzB,GAAI1Q,GAAKuW,GAGT,OAFAP,GAAchW,GAAM0Q,EACpB6G,EAAQE,MAAMvB,YAAYlW,GACnBA,OAIT4T,IAFS,YAAc7S,KAAQ,sBAAwBA,IAAK2W,SAASC,cAAc,UAElE,SAAUjH,GACzB,GAAIkH,GAAgB7W,GAAK2W,SAASC,cAAc,UAC5C3X,EAAKuW,GAUT,OATAP,GAAchW,GAAM0Q,EAEpBkH,EAAcC,mBAAqB,WACjCjC,EAAQ5V,GACR4X,EAAcC,mBAAqB,KACnCD,EAAcE,WAAWC,YAAYH,GACrCA,EAAgB,MAElB7W,GAAK2W,SAASM,gBAAgBC,YAAYL,GACnC5X,GAIQ,SAAU0Q,GACzB,GAAI1Q,GAAKuW,GAMT,OALAP,GAAchW,GAAM0Q,EACpB2E,GAAgB,WACdO,EAAQ5V,IACP,GAEIA,KAQZ,IAAIkY,IAAoB,SAAUnE,GAEhC,QAASmE,KACPnE,EAAUnX,KAAK1D,MAGjB,QAASif,GAAenH,EAAYN,EAAQ7O,EAAW3B,GACrD,MAAO,YACL8Q,EAAW7J,cAAcsJ,GAAWS,OAAOR,EAAO7O,EAAW3B,MAIjE,QAASkY,GAAgBpY,GACvB9G,KAAKmf,IAAMrY,EACX9G,KAAKkH,YAAa,EAUpB,QAASkY,GAAqBtY,GAC5B9G,KAAKmf,IAAMrY,EACX9G,KAAKkH,YAAa,EAuBrB,MAhDCqP,IAASyI,EAAkBnE,GAgB3BqE,EAAgB/T,UAAUgE,QAAU,WAC7BnP,KAAKkH,aACRlH,KAAKkH,YAAa,EAClByT,GAAY3a,KAAKmf,OASrBC,EAAqBjU,UAAUgE,QAAU,WAClCnP,KAAKkH,aACRlH,KAAKkH,YAAa,EAClBkV,GAAkBpc,KAAKmf,OAI5BH,EAAiB7T,UAAUqO,SAAW,SAAUxS,EAAOwQ,GACrD,GAAIM,GAAa,GAAI9J,IACjBlH,EAAK4T,GAAeuE,EAAenH,EAAYN,EAAQxX,KAAMgH,GACjE,OAAO,IAAIwH,IAAiBsJ,EAAY,GAAIoH,GAAgBpY,KAG9DkY,EAAiB7T,UAAUwO,gBAAkB,SAAU3S,EAAOoF,EAASoL,GACrE,GAAgB,IAAZpL,EAAiB,MAAOpM,MAAKwZ,SAASxS,EAAOwQ,EACjD,IAAIM,GAAa,GAAI9J,IACjBlH,EAAKqV,GAAgB8C,EAAenH,EAAYN,EAAQxX,KAAMgH,GAAQoF,EAC1E,OAAO,IAAIoC,IAAiBsJ,EAAY,GAAIsH,GAAqBtY,KAG5DkY,GACP1F,IAEE1I,GAAmB0I,GAAU,WAAaA,GAAU+F,MAAQ,GAAIL,GAOpEnY,GAAYsE,UAAUiO,UAAY,SAAUvW,GAC1C,GAAIyc,GAAItf,KAAKZ,MAAMga,UAAUvW,EAAMzD,MAEnC,OADM,KAANkgB,IAAYA,EAAItf,KAAK8G,GAAKjE,EAAMiE,IACzBwY,EAGT,IAAIhE,IAAgB1I,GAAGC,UAAUyI,cAAgB,SAAUiE,GACzDvf,KAAKwf,MAAQ,GAAI7f,OAAM4f,GACvBvf,KAAKP,OAAS,GAGZggB,GAAgBnE,GAAcnQ,SAClCsU,IAAcC,iBAAmB,SAAUC,EAAMC,GAC/C,MAAO5f,MAAKwf,MAAMG,GAAMvG,UAAUpZ,KAAKwf,MAAMI,IAAU,GAGzDH,GAAcI,UAAY,SAAUrc,GAClC,KAAIA,GAASxD,KAAKP,QAAkB,EAAR+D,GAA5B,CACA,GAAIyF,GAASzF,EAAQ,GAAK,CAC1B,MAAa,EAATyF,GAAcA,IAAWzF,IACzBxD,KAAK0f,iBAAiBlc,EAAOyF,GAAS,CACxC,GAAI6W,GAAO9f,KAAKwf,MAAMhc,EACtBxD,MAAKwf,MAAMhc,GAASxD,KAAKwf,MAAMvW,GAC/BjJ,KAAKwf,MAAMvW,GAAU6W,EACrB9f,KAAK6f,UAAU5W,MAInBwW,GAAcM,QAAU,SAAUvc,GAEhC,IADCA,IAAUA,EAAQ,KACfA,GAASxD,KAAKP,QAAkB,EAAR+D,GAA5B,CACA,GAAImc,GAAO,EAAInc,EAAQ,EACnBoc,EAAQ,EAAIpc,EAAQ,EACpB2U,EAAQ3U,CAOZ,IANImc,EAAO3f,KAAKP,QAAUO,KAAK0f,iBAAiBC,EAAMxH,KACpDA,EAAQwH,GAENC,EAAQ5f,KAAKP,QAAUO,KAAK0f,iBAAiBE,EAAOzH,KACtDA,EAAQyH,GAENzH,IAAU3U,EAAO,CACnB,GAAIsc,GAAO9f,KAAKwf,MAAMhc,EACtBxD,MAAKwf,MAAMhc,GAASxD,KAAKwf,MAAMrH,GAC/BnY,KAAKwf,MAAMrH,GAAS2H,EACpB9f,KAAK+f,QAAQ5H,MAIjBsH,GAAcO,KAAO,WAAc,MAAOhgB,MAAKwf,MAAM,GAAGpgB,OAExDqgB,GAAcQ,SAAW,SAAUzc,GACjCxD,KAAKwf,MAAMhc,GAASxD,KAAKwf,QAAQxf,KAAKP,QACtCO,KAAKwf,MAAMxf,KAAKP,QAAUP,EAC1Bc,KAAK+f,WAGPN,GAActE,QAAU,WACtB,GAAIvX,GAAS5D,KAAKggB,MAElB,OADAhgB,MAAKigB,SAAS,GACPrc,GAGT6b,GAAcpE,QAAU,SAAUnP,GAChC,GAAI1I,GAAQxD,KAAKP,QACjBO,MAAKwf,MAAMhc,GAAS,GAAIqD,GAAYyU,GAAc3U,QAASuF,GAC3DlM,KAAK6f,UAAUrc,IAGjBic,GAAcxQ,OAAS,SAAU/C,GAC/B,IAAK,GAAItM,GAAI,EAAGA,EAAII,KAAKP,OAAQG,IAC/B,GAAII,KAAKwf,MAAM5f,GAAGR,QAAU8M,EAE1B,MADAlM,MAAKigB,SAASrgB,IACP,CAGX,QAAO,GAET0b,GAAc3U,MAAQ,CAKtB,IA4QIuZ,IA5QAC,GAAevN,GAAGuN,aAAe,WACnC,QAASA,MA2CT,MAvCAA,GAAahV,UAAUiV,QAAU,SAAU1V,EAAQD,EAASE,GAC1D,KAAM,IAAIsJ,KAGZkM,EAAahV,UAAUkV,gBAAkB,SAAU3V,EAAQD,EAASE,GAClE,KAAM,IAAIsJ,KAUZkM,EAAahV,UAAUmD,OAAS,SAAUgS,EAAkB7V,EAASE,GACnE,MAAO2V,IAAgD,gBAArBA,GAChCtgB,KAAKqgB,gBAAgBC,GACrBtgB,KAAKogB,QAAQE,EAAkB7V,EAASE,IAU5CwV,EAAahV,UAAUoV,aAAe,SAAU5X,GAC9C,GAAIiE,GAAO5M,IAEX,OADA4I,IAAYD,KAAeA,EAAYmS,IAChC,GAAItO,IAAoB,SAAU3L,GACvC,MAAO8H,GAAU6Q,SAAS5M,EAAM,SAAUsB,EAAGL,GAC3CA,EAAawS,gBAAgBxf,GACP,MAAtBgN,EAAaE,MAAgBlN,EAAE8J,mBAK9BwV,KAGLK,GAAsB,SAAU3F,GAElC,QAAS2F,GAAmBphB,GAC1BY,KAAKZ,MAAQA,EACbY,KAAK+N,KAAO,IAed,MAlBAwI,IAASiK,EAAoB3F,GAM7B2F,EAAmBrV,UAAUiV,QAAU,SAAU1V,GAC/C,MAAOA,GAAO1K,KAAKZ,QAGrBohB,EAAmBrV,UAAUkV,gBAAkB,SAAUxf,GACvD,MAAOA,GAAE6J,OAAO1K,KAAKZ,QAGvBohB,EAAmBrV,UAAUC,SAAW,WACtC,MAAO,UAAYpL,KAAKZ,MAAQ,KAG3BohB,GACPL,IAEEM,GAAuB,SAAU5F,GAEnC,QAAS4F,GAAoBngB,GAC3BN,KAAKM,MAAQA,EACbN,KAAK+N,KAAO,IAed,MAlBAwI,IAASkK,EAAqB5F,GAM9B4F,EAAoBtV,UAAUiV,QAAU,SAAU1V,EAAQD,GACxD,MAAOA,GAAQzK,KAAKM,QAGtBmgB,EAAoBtV,UAAUkV,gBAAkB,SAAUxf,GACxD,MAAOA,GAAE4J,QAAQzK,KAAKM,QAGxBmgB,EAAoBtV,UAAUC,SAAW,WACvC,MAAO,WAAapL,KAAKM,MAAQ,KAG5BmgB,GACPN,IAEEO,GAA2B,SAAU7F,GAEvC,QAAS6F,KACP1gB,KAAK+N,KAAO,IAed,MAjBAwI,IAASmK,EAAyB7F,GAKlC6F,EAAwBvV,UAAUiV,QAAU,SAAU1V,EAAQD,EAASE,GACrE,MAAOA,MAGT+V,EAAwBvV,UAAUkV,gBAAkB,SAAUxf,GAC5D,MAAOA,GAAE8J,eAGX+V,EAAwBvV,UAAUC,SAAW,WAC3C,MAAO,iBAGFsV,GACPP,IAOEQ,GAA2BR,GAAaS,aAAe,SAAUxhB,GACnE,MAAO,IAAIohB,IAAmBphB,IAQ5ByhB,GAA4BV,GAAaW,cAAgB,SAAUxgB,GACrE,MAAO,IAAImgB,IAAoBngB,IAO7BygB,GAAgCZ,GAAaa,kBAAoB,WACnE,MAAO,IAAIN,KAMTO,GAAWrO,GAAGqO,SAAW,aASzBC,GAAiBD,GAASpN,OAAS,SAAUnJ,EAAQD,EAASE,GAIhE,MAHAD,KAAWA,EAASuI,IACpBxI,IAAYA,EAAU8I,IACtB5I,IAAgBA,EAAcsI,IACvB,GAAIkO,IAAkBzW,EAAQD,EAASE,IAO5CyW,GAAmBxO,GAAGC,UAAUuO,iBAAoB,SAAUvG,GAMhE,QAASuG,KACPphB,KAAKqhB,WAAY,EAoDnB,MA1DA9K,IAAS6K,EAAkBvG,GAU3BuG,EAAiBjW,UAAUzB,KAAOwK,GAClCkN,EAAiBjW,UAAU7K,MAAQ4T,GACnCkN,EAAiBjW,UAAUmW,UAAYpN,GAMvCkN,EAAiBjW,UAAUT,OAAS,SAAUtL,IAC3CY,KAAKqhB,WAAarhB,KAAK0J,KAAKtK,IAO/BgiB,EAAiBjW,UAAUV,QAAU,SAAUnK,GACxCN,KAAKqhB,YACRrhB,KAAKqhB,WAAY,EACjBrhB,KAAKM,MAAMA,KAOf8gB,EAAiBjW,UAAUR,YAAc,WAClC3K,KAAKqhB,YACRrhB,KAAKqhB,WAAY,EACjBrhB,KAAKshB,cAOTF,EAAiBjW,UAAUgE,QAAU,WAAcnP,KAAKqhB,WAAY,GAEpED,EAAiBjW,UAAUoW,KAAO,SAAUrhB,GAC1C,MAAKF,MAAKqhB,WAMH,GALLrhB,KAAKqhB,WAAY,EACjBrhB,KAAKM,MAAMJ,IACJ,IAMJkhB,GACPH,IAKEE,GAAoBvO,GAAGuO,kBAAqB,SAAUtG,GASxD,QAASsG,GAAkBzW,EAAQD,EAASE,GAC1CkQ,EAAUnX,KAAK1D,MACfA,KAAKwhB,QAAU9W,EACf1K,KAAKyhB,SAAWhX,EAChBzK,KAAK0hB,aAAe/W,EA0BtB,MAtCA4L,IAAS4K,EAAmBtG,GAmB5BsG,EAAkBhW,UAAUzB,KAAO,SAAUtK,GAC3CY,KAAKwhB,QAAQpiB,IAOf+hB,EAAkBhW,UAAU7K,MAAQ,SAAUA,GAC5CN,KAAKyhB,SAASnhB,IAMhB6gB,EAAkBhW,UAAUmW,UAAY,WACtCthB,KAAK0hB,gBAGAP,GACPC,IAOErR,GAAa6C,GAAG7C,WAAa,WAE/B,QAAS4R,GAAc/U,EAAMrD,GAC3B,MAAO,UAAU1I,GACf,GAAI+gB,GAAa/gB,EAAE4J,OAMnB,OALA5J,GAAE4J,QAAU,SAAUvK,GACpBG,EAAmBH,EAAG0M,GACtBgV,EAAWle,KAAK7C,EAAGX,IAGdqJ,EAAU7F,KAAKkJ,EAAM/L,IAIhC,QAASkP,KACP,GAAI6C,GAAGE,OAAOa,kBAAoBnT,GAAW,CAC3C,GAAIqhB,GAAe7hB,KAAK8hB,WACpB5hB,EAAIsK,GAASpK,GAAS,GAAIgC,QAASlC,CACvCF,MAAKS,MAAQP,EAAEO,MAAM0d,UAAUje,EAAEO,MAAMC,QAAQ,MAAQ,GACvDV,KAAK8hB,WAAaH,EAAc3hB,KAAM6hB,IA0D1C,MAtDA3B,IAAkBnQ,EAAW5E,UAO7B4E,EAAWC,aAAe,SAAUnP,GAClC,MAAOA,IAAK0J,GAAW1J,EAAE0I,YAU3B2W,GAAgB3W,UAAY2W,GAAgB6B,QAAU,SAAUC,EAAWvX,EAASE,GAClF,MAAO3K,MAAK8hB,WAAgC,gBAAdE,GAC5BA,EACAd,GAAec,EAAWvX,EAASE,KASvCuV,GAAgB+B,gBAAkB,SAAUvX,EAAQkK,GAClD,MAAO5U,MAAK8hB,WAAWZ,GAAkC,mBAAZtM,GAA0B,SAAS/K,GAAKa,EAAOhH,KAAKkR,EAAS/K,IAAQa,KASpHwV,GAAgBgC,iBAAmB,SAAUzX,EAASmK,GACpD,MAAO5U,MAAK8hB,WAAWZ,GAAe,KAAyB,mBAAZtM,GAA0B,SAAS1U,GAAKuK,EAAQ/G,KAAKkR,EAAS1U,IAAQuK,KAS3HyV,GAAgBiC,qBAAuB,SAAUxX,EAAaiK,GAC5D,MAAO5U,MAAK8hB,WAAWZ,GAAe,KAAM,KAAyB,mBAAZtM,GAA0B,WAAajK,EAAYjH,KAAKkR,IAAcjK,KAG1HoF,KAGLqS,GAAoBxP,GAAGC,UAAUuP,kBAAqB,SAAUvH,GAGlE,QAASuH,GAAkBzZ,EAAWK,GACpC6R,EAAUnX,KAAK1D,MACfA,KAAK2I,UAAYA,EACjB3I,KAAKgJ,SAAWA,EAChBhJ,KAAKqiB,YAAa,EAClBriB,KAAKsiB,YAAa,EAClBtiB,KAAKkb,SACLlb,KAAK8X,WAAa,GAAIvK,IAGxB,QAASgV,GAAYvZ,EAAUa,GAAK,MAAO,YAAcb,EAAS0B,OAAOb,IACzE,QAAS2Y,GAAaxZ,EAAU9I,GAAK,MAAO,YAAc8I,EAASyB,QAAQvK,IAC3E,QAASuiB,GAAiBzZ,GAAY,MAAO,YAAcA,EAAS2B,eAepE,QAAS+P,GAAe1T,EAAO6U,GAC7B,GAAI6G,EACJ,MAAI1b,EAAMkU,MAAMzb,OAAS,GAIvB,YADAuH,EAAMqb,YAAa,EAFnBK,GAAO1b,EAAMkU,MAAM7M,OAKrB,IAAIqC,GAAMlG,GAASkY,IACnB,OAAIhS,KAAQvQ,IACV6G,EAAMkU,SACNlU,EAAMsb,YAAa,EACZliB,EAAQsQ,EAAIxQ,QAErB2b,GAAQ7U,GAkBV,MA7DAuP,IAAS6L,EAAmBvH,GAgB5BuH,EAAkBjX,UAAUzB,KAAO,SAAUG,GAC3C7J,KAAKkb,MAAMxZ,KAAK6gB,EAAYviB,KAAKgJ,SAAUa,KAG7CuY,EAAkBjX,UAAU7K,MAAQ,SAAUJ,GAC5CF,KAAKkb,MAAMxZ,KAAK8gB,EAAaxiB,KAAKgJ,SAAU9I,KAG9CkiB,EAAkBjX,UAAUmW,UAAY,WACtCthB,KAAKkb,MAAMxZ,KAAK+gB,EAAiBziB,KAAKgJ,YAqBxCoZ,EAAkBjX,UAAUwX,aAAe,WACzC,GAAIC,IAAU,GACT5iB,KAAKsiB,YAActiB,KAAKkb,MAAMzb,OAAS,IAC1CmjB,GAAW5iB,KAAKqiB,WAChBriB,KAAKqiB,YAAa,GAEpBO,GACE5iB,KAAK8X,WAAW7J,cAAcjO,KAAK2I,UAAU4R,kBAAkBva,KAAM0a,KAGzE0H,EAAkBjX,UAAUgE,QAAU,WACpC0L,EAAU1P,UAAUgE,QAAQzL,KAAK1D,MACjCA,KAAK8X,WAAW3I,WAGXiT,GACPhB,IAEEyB,GAAiBjQ,GAAGiQ,eAAkB,SAAUhI,GAGlD,QAASiI,GAAcC,GACrB,MAAOA,IAAcxY,GAAWwY,EAAW5T,SAAW4T,EACpDxY,GAAWwY,GAActL,GAAiBsL,GAAcrL,GAG5D,QAASzJ,GAAc7G,EAAGJ,GACxB,GAAIgc,GAAMhc,EAAM,GAAI4F,EAAO5F,EAAM,GAC7Bic,EAAMzY,GAASoC,EAAKsW,eAAexf,KAAKkJ,EAAMoW,EAC9CC,KAAQ9iB,IAAa6iB,EAAIzB,KAAKphB,GAASD,IAAME,EAAQD,GAASD,GAClE8iB,EAAI/U,cAAc6U,EAAcG,IAGlC,QAASJ,KACPhI,EAAUnX,KAAK1D,MAgBjB,MA/BAuW,IAASsM,EAAgBhI,GAkBzBgI,EAAe1X,UAAU2W,WAAa,SAAUjhB,GAC9C,GAAImiB,GAAM,GAAIG,IAAmBtiB,GAAImG,GAASgc,EAAKhjB,KAOnD,OALI6I,IAAuB0S,mBACzB1S,GAAuB2Q,SAASxS,EAAOiH,GAEvCA,EAAc,KAAMjH,GAEfgc,GAGTH,EAAe1X,UAAU+X,cAAgBhP,GAElC2O,GACP9S,IAEAqT,GAAoBxQ,GAAGwQ,kBAAqB,SAASvI,GAIrD,QAASuI,GAAkBtiB,EAAQqJ,EAAU8G,EAAgB2D,GAC3D5U,KAAKiR,eAAiB1G,GAAW0G,GAAkBA,EAAiB,KACpEjR,KAAKmK,SAAWuK,GAAanK,GAAWJ,GAAYA,EAAW,WAAa,MAAOA,IAAayK,EAAS,GACzG5U,KAAKc,OAASA,EACd+Z,EAAUnX,KAAK1D,MAQjB,QAASqjB,GAAcra,EAAUmB,EAAU8G,EAAgBnQ,GACzDd,KAAKJ,EAAI,EACTI,KAAKmK,SAAWA,EAChBnK,KAAKiR,eAAiBA,EACtBjR,KAAKc,OAASA,EACdd,KAAKa,EAAImI,EACToY,GAAiB1d,KAAK1D,MAuBxB,MA3CAuW,IAAS6M,EAAmBvI,GAS5BuI,EAAkBjY,UAAU+X,cAAgB,SAASriB,GACnD,MAAOb,MAAKc,OAAOyI,UAAU,GAAI8Z,GAAcxiB,EAAGb,KAAKmK,SAAUnK,KAAKiR,eAAgBjR,QAGxFuW,GAAS8M,EAAejC,IAUxBiC,EAAclY,UAAUmY,YAAc,SAAS1f,EAAQiG,EAAGjK,GACxD,MAAOI,MAAKiR,eACVrN,EAAO2f,IAAI,SAASnQ,EAAGoQ,GAAM,MAAOxjB,MAAKiR,eAAepH,EAAGuJ,EAAGxT,EAAG4jB,IAAQxjB,MACzE4D,GAGJyf,EAAclY,UAAUzB,KAAO,SAASG,GACtC,GAAIjK,GAAII,KAAKJ,IACTgE,EAAS4G,GAASxK,KAAKmK,UAAUN,EAAGjK,EAAGI,KAAKc,OAChD,OAAI8C,KAAWzD,GAAmBH,KAAKa,EAAE4J,QAAQ7G,EAAO1D,IAExDsP,GAAU5L,KAAYA,EAAS6L,GAAsB7L,KACpD6Q,GAAY7Q,IAAW4Q,GAAW5Q,MAAaA,EAASmM,GAAW0T,KAAK7f,QACzE5D,MAAKa,EAAE6J,OAAO1K,KAAKsjB,YAAY1f,EAAQiG,EAAGjK,MAG5CyjB,EAAclY,UAAU7K,MAAQ,SAASJ,GAAKF,KAAKa,EAAE4J,QAAQvK,IAE7DmjB,EAAclY,UAAUmW,UAAY,WAAathB,KAAKa,EAAE8J,eAEjDyY,GAETP,IAEIa,GAAa9Q,GAAGC,UAAU6Q,WAAa,YAO3C3c,GAAqBoE,UAAUgE,QAAU,WAClCnP,KAAKkH,aACRlH,KAAKkH,YAAa,EAClBlH,KAAKiH,GAAGC,YAAa,GAIzB,IAAIyc,IAA8B,SAAS9I,GAEzC,QAAS8I,GAA2B/M,GAClC5W,KAAK4W,QAAUA,EACfiE,EAAUnX,KAAK1D,MAGjB,QAAS0a,GAAe1T,EAAO6U,GAC7B,IAAI7U,EAAME,WAAV,CACA,GAAI0c,GAAcpZ,GAASxD,EAAM9G,EAAEwJ,MAAMhG,KAAKsD,EAAM9G,EACpD,IAAI0jB,IAAgBzjB,GAAY,MAAO6G,GAAMnG,EAAE4J,QAAQmZ,EAAY1jB,EACnE,IAAI0jB,EAAYja,KAAQ,MAAO3C,GAAMnG,EAAE8J,aAGvC,IAAIkZ,GAAeD,EAAYxkB,KAC/BoQ,IAAUqU,KAAkBA,EAAepU,GAAsBoU,GAEjE,IAAIpX,GAAI,GAAIuB,GACZhH,GAAMoG,aAAaa,cAAcxB,GACjCA,EAAEwB,cAAc4V,EAAata,UAAU,GAAI8Z,GAAcrc,EAAO6U,MAgBlE,QAASwH,GAAcrc,EAAO6U,GAC5B7b,KAAKgc,OAAShV,EACdhH,KAAK8jB,SAAWjI,EAChBuF,GAAiB1d,KAAK1D,MASxB,MA9CAuW,IAASoN,EAA4B9I,GAqBrC8I,EAA2BxY,UAAU+X,cAAgB,SAAUriB,GAC7D,GAAIuM,GAAe,GAAIG,IACnBvG,GACFE,YAAY,EACZrG,EAAGA,EACHuM,aAAcA,EACdlN,EAAGF,KAAK4W,QAAQ3O,OAGdqF,EAAazE,GAAuB0R,kBAAkBvT,EAAO0T,EACjE,OAAO,IAAIjC,KAAgBrL,EAAcE,EAAY,GAAIvG,GAAqBC,MAShFuP,GAAS8M,EAAejC,IAExBiC,EAAclY,UAAUzB,KAAO,SAAUG,GAAK7J,KAAKgc,OAAOnb,EAAE6J,OAAOb,IACnEwZ,EAAclY,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAKgc,OAAOnb,EAAE4J,QAAQvK,IACrEmjB,EAAclY,UAAUmW,UAAY,WAActhB,KAAK8jB,SAAS9jB,KAAKgc,SAE9D2H,GACPd,GAEFa,IAAWvY,UAAU4Y,OAAS,WAC5B,MAAO,IAAIJ,IAA2B3jB,MAGxC,IAAIgkB,IAAwB,SAASnJ,GACnC,QAASmJ,GAAqBpN,GAC5B5W,KAAK4W,QAAUA,EACfiE,EAAUnX,KAAK1D,MAKjB,QAAS0a,GAAe1T,EAAO6U,GAC7B,IAAI7U,EAAME,WAAV,CACA,GAAI0c,GAAcpZ,GAASxD,EAAM9G,EAAEwJ,MAAMhG,KAAKsD,EAAM9G,EACpD,IAAI0jB,IAAgBzjB,GAAY,MAAO6G,GAAMnG,EAAE4J,QAAQmZ,EAAY1jB,EACnE,IAAI0jB,EAAYja,KAAQ,MAA2B,QAApB3C,EAAMid,UAAqBjd,EAAMnG,EAAE4J,QAAQzD,EAAMid,WAAajd,EAAMnG,EAAE8J,aAErG,IAAIkZ,GAAeD,EAAYxkB,KAC/BoQ,IAAUqU,KAAkBA,EAAepU,GAAsBoU,GAEjE,IAAIpX,GAAI,GAAIuB,GACZhH,GAAMoG,aAAaa,cAAcxB,GACjCA,EAAEwB,cAAc4V,EAAata,UAAU,GAAI8Z,GAAcrc,EAAO6U,MAiBlE,QAASwH,GAAcrc,EAAO6U,GAC5B7b,KAAKgc,OAAShV,EACdhH,KAAK8jB,SAAWjI,EAChBuF,GAAiB1d,KAAK1D,MASxB,MA1CAuW,IAASyN,EAAsBnJ,GAgB/BmJ,EAAqB7Y,UAAU+X,cAAgB,SAAUriB,GACvD,GAAIuM,GAAe,GAAIG,IACnBvG,GACFE,YAAY,EACZhH,EAAGF,KAAK4W,QAAQ3O,MAChBmF,aAAcA,EACd6W,UAAW,KACXpjB,EAAGA,GAGDyM,EAAazE,GAAuB0R,kBAAkBvT,EAAO0T,EACjE,OAAO,IAAIjC,KAAgBrL,EAAcE,EAAY,GAAIvG,GAAqBC,MAShFuP,GAAS8M,EAAejC,IAExBiC,EAAclY,UAAUzB,KAAO,SAAUG,GAAK7J,KAAKgc,OAAOnb,EAAE6J,OAAOb,IACnEwZ,EAAclY,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAKgc,OAAOiI,UAAY/jB,EAAGF,KAAK8jB,SAAS9jB,KAAKgc,SAC7FqH,EAAclY,UAAUmW,UAAY,WAActhB,KAAKgc,OAAOnb,EAAE8J,eAEzDqZ,GACPnB,GAEFa,IAAWvY,UAAU+Y,WAAa,WAChC,MAAO,IAAIF,IAAqBhkB,MAGlC,IAAImkB,IAAoB,SAAUtJ,GAEhC,QAASsJ,GAAiBC,EAAG9E,GAC3Btf,KAAKokB,EAAIA,EACTpkB,KAAKsf,EAAS,MAALA,EAAY,GAAKA,EAO5B,QAAS+E,GAAiBta,GACxB/J,KAAKokB,EAAIra,EAAEqa,EACXpkB,KAAKskB,EAAIva,EAAEuV,EASb,MArBA/I,IAAS4N,EAAkBtJ,GAM3BsJ,EAAiBhZ,UAAUlD,IAAc,WACvC,MAAO,IAAIoc,GAAiBrkB,OAQ9BqkB,EAAiBlZ,UAAUzB,KAAO,WAChC,MAAe,KAAX1J,KAAKskB,EAAkB/P,IACvBvU,KAAKskB,EAAI,GAAKtkB,KAAKskB,KACd3a,MAAM,EAAOvK,MAAOY,KAAKokB,KAG7BD,GACPT,IAEEa,GAAmBb,GAAWla,OAAS,SAAUpK,EAAOolB,GAC1D,MAAO,IAAIL,IAAiB/kB,EAAOolB,IAGjCC,GAAgB,SAAS5J,GAE3B,QAAS4J,GAAard,EAAG6C,EAAI2K;AAC3B5U,KAAKoH,EAAIA,EACTpH,KAAKiK,GAAKA,EAAKyK,GAAazK,EAAI2K,EAAS,GAAK,KAMhD,QAAS8P,GAAa3a,GACpB/J,KAAKJ,EAAI,GACTI,KAAKoH,EAAI2C,EAAE3C,EACXpH,KAAKskB,EAAItkB,KAAKoH,EAAE3H,OAChBO,KAAKiK,GAAKF,EAAEE,GASd,MAtBAsM,IAASkO,EAAc5J,GAKvB4J,EAAatZ,UAAUlD,IAAc,WACnC,MAAO,IAAIyc,GAAa1kB,OAU1B0kB,EAAavZ,UAAUzB,KAAO,WAC7B,QAAS1J,KAAKJ,EAAII,KAAKskB,GACnB3a,MAAM,EAAOvK,MAAQY,KAAKiK,GAAsBjK,KAAKiK,GAAGjK,KAAKoH,EAAEpH,KAAKJ,GAAII,KAAKJ,EAAGI,KAAKoH,GAAtDpH,KAAKoH,EAAEpH,KAAKJ,IAC7C2U,IAGIkQ,GACPf,IAEEiB,GAAejB,GAAWkB,GAAK,SAAU9jB,EAAQqJ,EAAUyK,GAC7D,MAAO,IAAI6P,IAAa3jB,EAAQqJ,EAAUyK,IAGxCiQ,GAAqB,SAAShK,GAEhC,QAASgK,GAAkB/jB,GACzBd,KAAKc,OAASA,EACd+Z,EAAUnX,KAAK1D,MAQjB,QAASqjB,GAAcxiB,GACrBb,KAAKa,EAAIA,EACTb,KAAKN,KACL0hB,GAAiB1d,KAAK1D,MAOxB,MArBAuW,IAASsO,EAAmBhK,GAM5BgK,EAAkB1Z,UAAU+X,cAAgB,SAASriB,GACnD,MAAOb,MAAKc,OAAOyI,UAAU,GAAI8Z,GAAcxiB,KAGjD0V,GAAS8M,EAAejC,IAOxBiC,EAAclY,UAAUzB,KAAO,SAAUG,GAAK7J,KAAKN,EAAEgC,KAAKmI,IAC1DwZ,EAAclY,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAKa,EAAE4J,QAAQvK,IAC9DmjB,EAAclY,UAAUmW,UAAY,WAActhB,KAAKa,EAAE6J,OAAO1K,KAAKN,GAAIM,KAAKa,EAAE8J,eAEzEka,GACPhC,GAMF3C,IAAgB4E,QAAU,WACxB,MAAO,IAAID,IAAkB7kB,OAY/B+P,GAAW8D,OAAS,SAAUtK,EAAWN,GACvC,MAAO,IAAIuD,IAAoBjD,EAAWN,GAG5C,IAAI8b,IAAS,SAASlK,GAEpB,QAASkK,GAAMne,GACb5G,KAAKglB,GAAKpe,EACViU,EAAUnX,KAAK1D,MAUjB,MAbAuW,IAASwO,EAAOlK,GAMhBkK,EAAM5Z,UAAU+X,cAAgB,SAAUriB,GACxC,GAAI+C,GAAS4G,GAASxK,KAAKglB,KAC3B,OAAIphB,KAAWzD,GAAmB8P,GAAgBrM,EAAO1D,GAAGqJ,UAAU1I,IACtE2O,GAAU5L,KAAYA,EAAS6L,GAAsB7L,IAC9CA,EAAO2F,UAAU1I,KAGnBkkB,GACPlC,IAUE3V,GAAkB6C,GAAWkV,MAAQ,SAAUC,GACjD,MAAO,IAAIH,IAAMG,IAGfC,GAAmB,SAAStK,GAE9B,QAASsK,GAAgBxc,GACvB3I,KAAK2I,UAAYA,EACjBkS,EAAUnX,KAAK1D,MAQjB,QAASolB,GAAUpc,EAAUL,GAC3B3I,KAAKgJ,SAAWA,EAChBhJ,KAAK2I,UAAYA,EAGnB,QAAS0c,GAAaje,EAAGJ,GAEvB,MADAA,GAAM2D,cACC+M,GAUT,MA5BAnB,IAAS4O,EAAiBtK,GAM1BsK,EAAgBha,UAAU+X,cAAgB,SAAUla,GAClD,GAAIsc,GAAO,GAAIF,GAAUpc,EAAUhJ,KAAK2I,UACxC,OAAO2c,GAAKC,OAadH,EAAUja,UAAUoa,IAAM,WACxB,GAAIve,GAAQhH,KAAKgJ,QACjB,OAAOhJ,MAAK2I,YAAcmS,GACxBuK,EAAa,KAAMre,GACnBhH,KAAK2I,UAAU6Q,SAASxS,EAAOqe,IAG5BF,GACPtC,IAEE2C,GAAmB,GAAIL,IAAgBrK,IAWvC2K,GAAkB1V,GAAW4H,MAAQ,SAAUhP,GAEjD,MADAC,IAAYD,KAAeA,EAAYmS,IAChCnS,IAAcmS,GAAqB0K,GAAmB,GAAIL,IAAgBxc,IAG/E+c,GAAkB,SAAS7K,GAE7B,QAAS6K,GAAeC,EAAU1b,EAAItB,GACpC3I,KAAK4lB,UAAYD,EACjB3lB,KAAKyL,IAAMxB,EACXjK,KAAKkc,WAAavT,EAClBkS,EAAUnX,KAAK1D,MAGjB,QAAS6lB,GAAqBhlB,EAAGmH,EAAIiC,GACnC,MAAO,UAAuBrK,EAAGic,GAC/B,GAAInS,GAAOc,GAASxC,EAAG0B,MAAMhG,KAAKsE,EAClC,IAAI0B,IAASvJ,GAAY,MAAOU,GAAE4J,QAAQf,EAAKxJ,EAC/C,IAAIwJ,EAAKC,KAAQ,MAAO9I,GAAE8J,aAE1B,IAAI/G,GAAS8F,EAAKtK,KAElB,OAAImL,IAAWN,KACbrG,EAAS4G,GAASP,GAAIrG,EAAQhE,GAC1BgE,IAAWzD,IAAmBU,EAAE4J,QAAQ7G,EAAO1D,IAGrDW,EAAE6J,OAAO9G,OACTiY,GAAQjc,EAAI,KAWhB,MAjCA2W,IAASmP,EAAgB7K,GA0BzB6K,EAAeva,UAAU+X,cAAgB,SAAUriB,GACjD,GAAIilB,GAAOzmB,OAAOW,KAAK4lB,WACnB5d,EAAKD,EAAY+d,EAErB,OAAO9lB,MAAKkc,WAAW3B,kBAAkB,EAAGsL,EAAqBhlB,EAAGmH,EAAIhI,KAAKyL,OAGxEia,GACP7C,IAEEpa,GAAiBH,KAAK0N,IAAI,EAAG,IAAM,CAMvC7O,GAAegE,UAAUlD,IAAc,WACrC,MAAO,IAAIZ,GAAerH,KAAKiH,KASjCI,EAAe8D,UAAUlD,IAAc,WACrC,MAAOjI,OAGTqH,EAAe8D,UAAUzB,KAAO,WAC9B,MAAO1J,MAAKuH,GAAKvH,KAAKsH,IAAOqC,MAAM,EAAOvK,MAAOY,KAAKiH,GAAG8e,OAAO/lB,KAAKuH,OAAUgN,IAOjF/M,EAAc2D,UAAUlD,IAAc,WACpC,MAAO,IAAIP,GAAc1H,KAAKyH,KAShCC,EAAcyD,UAAUlD,IAAc,WACpC,MAAOjI,OAGT0H,EAAcyD,UAAUzB,KAAO,WAC7B,MAAO1J,MAAKuH,GAAKvH,KAAKsH,IAAOqC,MAAM,EAAOvK,MAAOY,KAAKyH,GAAGzH,KAAKuH,OAAUgN,GAiD1E,IAAIyR,IAAiBjW,GAAW0T,KAAO,SAAUkC,EAAUM,EAAOrR,EAASjM,GACzE,GAAgB,MAAZgd,EACF,KAAM,IAAIvjB,OAAM,2BAElB,IAAI6jB,IAAU1b,GAAW0b,GACvB,KAAM,IAAI7jB,OAAM,yCAElB,IAAI6jB,EACF,GAAIC,GAASxR,GAAauR,EAAOrR,EAAS,EAG5C,OADAhM,IAAYD,KAAeA,EAAYE,IAChC,GAAI6c,IAAeC,EAAUO,EAAQvd,IAG1CG,GAAuB,SAAS+R,GAElC,QAAS/R,GAAoBM,EAAMT,GACjC3I,KAAKmmB,MAAQ/c,EACbpJ,KAAKkc,WAAavT,EAClBkS,EAAUnX,KAAK1D,MAGjB,QAAS0a,GAAe7Z,EAAGuI,GACzB,GAAI5J,GAAM4J,EAAK3J,MACf,OAAO,UAAwBG,EAAGic,GACxBrc,EAAJI,GACFiB,EAAE6J,OAAOtB,EAAKxJ,IACdic,EAAQjc,EAAI,IAEZiB,EAAE8J,eASR,MAvBA4L,IAASzN,EAAqB+R,GAmB9B/R,EAAoBqC,UAAU+X,cAAgB,SAAUriB,GACtD,MAAOb,MAAKkc,WAAW3B,kBAAkB,EAAGG,EAAe7Z,EAAGb,KAAKmmB,SAG9Drd,GACP+Z,IAQEuD,GAAsBrW,GAAWsW,UAAY,SAAUlhB,EAAOwD,GAEhE,MADAC,IAAYD,KAAeA,EAAYE,IAChC,GAAIC,IAAoB3D,EAAOwD,IAGpC2d,GAAmB,SAASzL,GAE9B,QAASyL,KACPzL,EAAUnX,KAAK1D,MAOjB,MATAuW,IAAS+P,EAAiBzL,GAK1ByL,EAAgBnb,UAAU+X,cAAgB,SAAUla,GAClD,MAAO0O,KAGF4O,GACPzD,IAEE0D,GAAmB,GAAID,IAMvBxW,GAAkBC,GAAWyW,MAAQ,WACvC,MAAOD,IAYTxW,IAAW6U,GAAK,WAEd,IAAI,GADAplB,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EACnD,OAAO,IAAIkJ,IAAoBM,EAAMP,KAQvCkH,GAAW0W,gBAAkB,SAAU9d,GAErC,IAAI,GADAnJ,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,EAAM,GAC3CI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,EAAI,GAAKK,UAAUL,EACvD,OAAO,IAAIkJ,IAAoBM,EAAMT,GAGvC,IAAI+d,IAAmB,SAAS7L,GAE9B,QAAS6L,GAAgB7lB,EAAG8H,GAC1B3I,KAAK2mB,GAAK9lB,EACVb,KAAK4mB,MAAQvnB,OAAO8D,KAAKtC,GACzBb,KAAKkc,WAAavT,EAClBkS,EAAUnX,KAAK1D,MAGjB,QAAS0a,GAAe7Z,EAAGuV,EAAKjT,GAC9B,MAAO,UAAuBvD,EAAGic,GAC/B,GAAIjc,EAAIuD,EAAK1D,OAAQ,CACnB,GAAI8D,GAAMJ,EAAKvD,EACfiB,GAAE6J,QAAQnH,EAAK6S,EAAI7S,KACnBsY,EAAQjc,EAAI,OAEZiB,GAAE8J,eASR,MAxBA4L,IAASmQ,EAAiB7L,GAoB1B6L,EAAgBvb,UAAU+X,cAAgB,SAAUriB,GAClD,MAAOb,MAAKkc,WAAW3B,kBAAkB,EAAGG,EAAe7Z,EAAGb,KAAK2mB,GAAI3mB,KAAK4mB,SAGvEF,GACP7D,GAQF9S,IAAW8W,MAAQ,SAAUzQ,EAAKzN,GAEhC,MADAA,KAAcA,EAAYE,IACnB,GAAI6d,IAAgBtQ,EAAKzN,GAGhC,IAAIme,IAAmB,SAASjM,GAEhC,QAASiM,GAAgBhY,EAAOnI,EAAOgC,GACrC3I,KAAK8O,MAAQA,EACb9O,KAAK+mB,WAAapgB,EAClB3G,KAAK2I,UAAYA,EACjBkS,EAAUnX,KAAK1D,MAGjB,QAASgnB,GAAclY,EAAOnI,EAAO9F,GACnC,MAAO,UAAejB,EAAGic,GACflV,EAAJ/G,GACFiB,EAAE6J,OAAOoE,EAAQlP,GACjBic,EAAQjc,EAAI,IAEZiB,EAAE8J,eAYR,MA1BA4L,IAASuQ,EAAiBjM,GAmB1BiM,EAAgB3b,UAAU+X,cAAgB,SAAUriB,GAClD,MAAOb,MAAK2I,UAAU4R,kBACpB,EACAyM,EAAchnB,KAAK8O,MAAO9O,KAAK+mB,WAAYlmB,KAIxCimB,GACPjE,GASF9S,IAAWkX,MAAQ,SAAUnY,EAAOnI,EAAOgC,GAEzC,MADAC,IAAYD,KAAeA,EAAYE,IAChC,GAAIie,IAAgBhY,EAAOnI,EAAOgC,GAG3C,IAAIue,IAAoB,SAASrM,GAE/B,QAASqM,GAAiB9nB,EAAOolB,EAAa7b,GAC5C3I,KAAKZ,MAAQA,EACbY,KAAKwkB,YAA6B,MAAfA,EAAsB,GAAKA,EAC9CxkB,KAAK2I,UAAYA,EACjBkS,EAAUnX,KAAK1D,MAQjB,MAbAuW,IAAS2Q,EAAkBrM,GAQ3BqM,EAAiB/b,UAAU+X,cAAgB,SAAUla,GACnD,GAAIsc,GAAO,GAAIvc,GAAWC,EAAUhJ,KACpC,OAAOslB,GAAKC,OAGP2B,GACPrE,GAOF9Z,GAAWoC,UAAUoa,IAAM,WAEzB,QAASyB,GAAcpnB,EAAGic,GAKxB,OAJU,KAANjc,GAAYA,EAAI,KAClBoJ,EAAS0B,OAAOtL,GAChBQ,EAAI,GAAKA,KAED,IAANA,EAAkBoJ,EAAS2B,kBAC/BkR,GAAQjc,GAPV,GAAIoJ,GAAWhJ,KAAKgJ,SAAU5J,EAAQY,KAAKiJ,OAAO7J,KAUlD,OAAOY,MAAKiJ,OAAON,UAAU4R,kBAAkBva,KAAKiJ,OAAOub,YAAawC,IAU1EjX,GAAWvG,OAAS,SAAUpK,EAAOolB,EAAa7b,GAEhD,MADAC,IAAYD,KAAeA,EAAYE,IAChC,GAAIqe,IAAiB9nB,EAAOolB,EAAa7b,GAGlD,IAAIwe,IAAkB,SAAStM,GAE7B,QAASsM,GAAe/nB,EAAOuJ,GAC7B3I,KAAKonB,OAAShoB,EACdY,KAAKkc,WAAavT,EAClBkS,EAAUnX,KAAK1D,MAUjB,QAASqlB,GAAaje,EAAGJ,GACvB,GAAI5H,GAAQ4H,EAAM,GAAIgC,EAAWhC,EAAM,EAGvC,OAFAgC,GAAS0B,OAAOtL,GAChB4J,EAAS2B,cACF+M,GAGT,MArBAnB,IAAS4Q,EAAgBtM,GAOzBsM,EAAehc,UAAU+X,cAAgB,SAAUriB,GACjD,GAAImG,IAAShH,KAAKonB,OAAQvmB,EAC1B,OAAOb,MAAKkc,aAAepB,GACzBuK,EAAa,KAAMre,GACnBhH,KAAKkc,WAAW1C,SAASxS,EAAOqe,IAU7B8B,GACPtE,IAcEwE,IALmBtX,GAAW,UAAYA,GAAWuX,KAAO,SAAUloB,EAAOuJ,GAE/E,MADAC,IAAYD,KAAeA,EAAYmS,IAChC,GAAIqM,IAAe/nB,EAAOuJ,IAGZ,SAASkS,GAE9B,QAASwM,GAAgB/mB,EAAOqI,GAC9B3I,KAAKunB,OAASjnB,EACdN,KAAKkc,WAAavT,EAClBkS,EAAUnX,KAAK1D,MAUjB,QAASqlB,GAAaje,EAAGJ,GACvB,GAAI9G,GAAI8G,EAAM,GAAInG,EAAImG,EAAM,EAE5B,OADAnG,GAAE4J,QAAQvK,GACHwX,GAGT,MApBAnB,IAAS8Q,EAAiBxM,GAO1BwM,EAAgBlc,UAAU+X,cAAgB,SAAUriB,GAClD,GAAImG,IAAShH,KAAKunB,OAAQ1mB,EAC1B,OAAOb,MAAKkc,aAAepB,GACzBuK,EAAa,KAAMre,GACnBhH,KAAKkc,WAAW1C,SAASxS,EAAOqe,IAS7BgC,GACPxE,KASE5S,GAAkBF,GAAW,SAAW,SAAUzP,EAAOqI,GAE3D,MADAC,IAAYD,KAAeA,EAAYmS,IAChC,GAAIuM,IAAgB/mB,EAAOqI,IAGhC6e,GAAmB,SAAU3M,GAE/B,QAAS2M,GAAgB1mB,EAAQmJ,GAC/BjK,KAAKc,OAASA,EACdd,KAAKyL,IAAMxB,EACX4Q,EAAUnX,KAAK1D,MAUjB,MAdAuW,IAASiR,EAAiB3M,GAO1B2M,EAAgBrc,UAAU+X,cAAgB,SAAUriB,GAClD,GAAI4mB,GAAK,GAAIzZ,IAA8BZ,EAAe,GAAIG,GAG9D,OAFAH,GAAaa,cAAcwZ,GAC3BA,EAAGxZ,cAAcjO,KAAKc,OAAOyI,UAAU,GAAIme,IAAc7mB,EAAGuM,EAAcpN,KAAKyL,OACxE2B,GAGFoa,GACP3E,IAEE6E,GAAiB,SAAS7M,GAE5B,QAAS6M,GAAc7mB,EAAGuG,EAAG6C,GAC3BjK,KAAK2mB,GAAK9lB,EACVb,KAAKiH,GAAKG,EACVpH,KAAKyL,IAAMxB,EACX4Q,EAAUnX,KAAK1D,MAejB,MApBAuW,IAASmR,EAAe7M,GAQxB6M,EAAcvc,UAAUzB,KAAO,SAAUG,GAAK7J,KAAK2mB,GAAGjc,OAAOb,IAC7D6d,EAAcvc,UAAUmW,UAAY,WAAc,MAAOthB,MAAK2mB,GAAGhc,eACjE+c,EAAcvc,UAAU7K,MAAQ,SAAUJ,GACxC,GAAI0D,GAAS4G,GAASxK,KAAKyL,KAAKvL,EAChC,IAAI0D,IAAWzD,GAAY,MAAOH,MAAK2mB,GAAGlc,QAAQ7G,EAAO1D,EACzDsP,IAAU5L,KAAYA,EAAS6L,GAAsB7L,GAErD,IAAI6I,GAAI,GAAIuB,GACZhO,MAAKiH,GAAGgH,cAAcxB,GACtBA,EAAEwB,cAAcrK,EAAO2F,UAAUvJ,KAAK2mB,MAGjCe,GACPtG,GAOFlB,IAAgB,SAAW,SAAUyH,GACnC,MAAOpd,IAAWod,GAAmB,GAAIH,IAAgBxnB,KAAM2nB,GAAmBC,IAAiB5nB,KAAM2nB,IAQ3G,IAAIC,IAAkB7X,GAAW,SAAW,WAC1C,GAAIyP,EACJ,IAAI7f,MAAM+F,QAAQzF,UAAU,IAC1Buf,EAAQvf,UAAU,OACb,CACL,GAAIT,GAAMS,UAAUR,MACpB+f,GAAQ,GAAI7f,OAAMH,EAClB,KAAI,GAAII,GAAI,EAAOJ,EAAJI,EAASA,IAAO4f,EAAM5f,GAAKK,UAAUL,GAEtD,MAAO+kB,IAAanF,GAAO0E,aAY7BhE,IAAgB2H,cAAgB,WAE9B,IAAI,GADAroB,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EAMnD,OALID,OAAM+F,QAAQ0D,EAAK,IACrBA,EAAK,GAAGrI,QAAQf,MAEhBoJ,EAAKrI,QAAQf,MAER6nB,GAAc9nB,MAAMC,KAAMoJ,GAUnC,IAAI0e,IAA2B,SAASjN,GAEtC,QAASiN,GAAwBC,EAAQC,GACvChoB,KAAKioB,QAAUF,EACf/nB,KAAKkoB,IAAMF,EACXnN,EAAUnX,KAAK1D,MAwBjB,MA5BAuW,IAASuR,EAAyBjN,GAOlCiN,EAAwB3c,UAAU+X,cAAgB,SAASla,GAWzD,IAAK,GAVDxJ,GAAMQ,KAAKioB,QAAQxoB,OACnB0oB,EAAgB,GAAIxoB,OAAMH,GAE1BwH,GACFsI,SAAU5I,EAAgBlH,EAAK0J,GAC/BiI,aAAa,EACbG,OAAQ5K,EAAgBlH,EAAK0J,GAC7BgI,OAAQ,GAAIvR,OAAMH,IAGXI,EAAI,EAAOJ,EAAJI,EAASA,IAAK,CAC5B,GAAIkB,GAASd,KAAKioB,QAAQroB,GAAIwoB,EAAM,GAAIpa,GACxCma,GAAcvoB,GAAKwoB,EACnB5Y,GAAU1O,KAAYA,EAAS2O,GAAsB3O,IACrDsnB,EAAIna,cAAcnN,EAAOyI,UAAU,GAAI8e,IAAsBrf,EAAUpJ,EAAGI,KAAKkoB,IAAKlhB,KAGtF,MAAO,IAAIyR,IAAe0P,IAGrBL,GACPjF,IAEEwF,GAAyB,SAAUxN,GAErC,QAASwN,GAAsBxnB,EAAGjB,EAAGooB,EAAIhhB,GACvChH,KAAK2mB,GAAK9lB,EACVb,KAAKuH,GAAK3H,EACVI,KAAKkoB,IAAMF,EACXhoB,KAAKgc,OAAShV,EACd6T,EAAUnX,KAAK1D,MAGjB,QAASsoB,GAAW1oB,GAClB,MAAO,UAAUiK,EAAG0e,GAClB,MAAOA,KAAM3oB,GAyBjB,MApCA2W,IAAS8R,EAAuBxN,GAehCwN,EAAsBld,UAAUzB,KAAO,SAAUG,GAG/C,GAFA7J,KAAKgc,OAAO9K,OAAOlR,KAAKuH,IAAMsC,EAC9B7J,KAAKgc,OAAO1M,SAAStP,KAAKuH,KAAM,EAC5BvH,KAAKgc,OAAO7K,cAAgBnR,KAAKgc,OAAO7K,YAAcnR,KAAKgc,OAAO1M,SAAS8B,MAAMC,KAAY,CAC/F,GAAIX,GAAMlG,GAASxK,KAAKkoB,KAAKnoB,MAAM,KAAMC,KAAKgc,OAAO9K,OACrD,IAAIR,IAAQvQ,GAAY,MAAOH,MAAK2mB,GAAGlc,QAAQiG,EAAIxQ,EACnDF,MAAK2mB,GAAGjc,OAAOgG,OACN1Q,MAAKgc,OAAO1K,OAAOkX,OAAOF,EAAWtoB,KAAKuH,KAAK6J,MAAMC,KAC9DrR,KAAK2mB,GAAGhc,eAIZ0d,EAAsBld,UAAU7K,MAAQ,SAAUJ,GAChDF,KAAK2mB,GAAGlc,QAAQvK,IAGlBmoB,EAAsBld,UAAUmW,UAAY,WAC1CthB,KAAKgc,OAAO1K,OAAOtR,KAAKuH,KAAM,EAC9BvH,KAAKgc,OAAO1K,OAAOF,MAAMC,KAAarR,KAAK2mB,GAAGhc,eAGzC0d,GACPjH,IAUEyG,GAAgB9X,GAAW8X,cAAgB,WAE7C,IAAI,GADAroB,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EACnD,IAAIqR,GAAiB1G,GAAWnB,EAAK5J,EAAM,IAAM4J,EAAK7C,MAAQ4C,CAE9D,OADAxJ,OAAM+F,QAAQ0D,EAAK,MAAQA,EAAOA,EAAK,IAChC,GAAI0e,IAAwB1e,EAAM6H,GAO3CiP,IAAgB6D,OAAS,WACvB,IAAI,GAAI3a,MAAWxJ,EAAI,EAAGJ,EAAMS,UAAUR,OAAYD,EAAJI,EAASA,IAAOwJ,EAAK1H,KAAKzB,UAAUL,GAEtF,OADAwJ,GAAKrI,QAAQf,MACNyoB,GAAiB1oB,MAAM,KAAMqJ,GAGtC,IAAIsf,IAAkB,SAAS7N,GAE7B,QAAS6N,GAAethB,EAAG6C,GACzBjK,KAAKiH,GAAKG,EACVpH,KAAKyL,IAAMxB,EACX4Q,EAAUnX,KAAK1D,MAOjB,MAXAuW,IAASmS,EAAgB7N,GAOzB6N,EAAevd,UAAUzB,KAAO,SAAUG,GAAK7J,KAAKiH,GAAGpG,EAAE6J,OAAOb,IAChE6e,EAAevd,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAKiH,GAAGpG,EAAE4J,QAAQvK,IAClEwoB,EAAevd,UAAUmW,UAAY,WAActhB,KAAKiH,GAAGrH,IAAKI,KAAKyL,IAAIzL,KAAKiH,KAEvEyhB,GACPtH,IAEEuH,GAAoB,SAAS9N,GAE/B,QAAS8N,GAAiB/R,GACxB5W,KAAK4oB,SAAWhS,EAChBiE,EAAUnX,KAAK1D,MAGjB,QAASua,GAAmBvT,EAAO6U,GACjC,IAAI7U,EAAM8Q,WAAW5Q,WAArB,CACA,GAAIF,EAAMpH,IAAMoH,EAAM4P,QAAQnX,OAAU,MAAOuH,GAAMnG,EAAE8J,aAGvD,IAAIkZ,GAAe7c,EAAM4P,QAAQ5P,EAAMpH,EACvC4P,IAAUqU,KAAkBA,EAAepU,GAAsBoU,GAEjE,IAAIpX,GAAI,GAAIuB,GACZhH,GAAMoG,aAAaa,cAAcxB,GACjCA,EAAEwB,cAAc4V,EAAata,UAAU,GAAImf,IAAe1hB,EAAO6U,MAkBnE,MAlCAtF,IAASoS,EAAkB9N,GAmB3B8N,EAAiBxd,UAAU+X,cAAgB,SAASriB,GAClD,GAAIuM,GAAe,GAAIG,IACnBuK,EAAaL,GAAiBxE,IAC9BjM,GACFnG,EAAGA,EACHjB,EAAG,EACHwN,aAAcA,EACd0K,WAAYA,EACZlB,QAAS5W,KAAK4oB,UAGZtb,EAAawN,GAAmBP,kBAAkBvT,EAAOuT,EAC7D,OAAO,IAAI9B,KAAgBrL,EAAc0K,EAAYxK,KAGhDqb,GACP9F,IAOE4F,GAAmB1Y,GAAWgU,OAAS,WACzC,GAAI3a,EACJ,IAAIzJ,MAAM+F,QAAQzF,UAAU,IAC1BmJ,EAAOnJ,UAAU,OACZ,CACLmJ,EAAO,GAAIzJ,OAAMM,UAAUR,OAC3B,KAAI,GAAIG,GAAI,EAAGJ,EAAMS,UAAUR,OAAYD,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,GAE7E,MAAO,IAAI+oB,IAAiBvf,GAO9B8W,IAAgB2I,UAAY,WAC1B,MAAO7oB,MAAK8oB,MAAM,GAGpB,IAAIC,IAAmB,SAAUlO,GAG/B,QAASkO,GAAgBjoB,EAAQkoB,GAC/BhpB,KAAKc,OAASA,EACdd,KAAKgpB,cAAgBA,EACrBnO,EAAUnX,KAAK1D,MASjB,MAdAuW,IAASwS,EAAiBlO,GAQ1BkO,EAAgB5d,UAAU+X,cAAgB,SAASla,GACjD,GAAIigB,GAAI,GAAIld,GAEZ,OADAkd,GAAEhd,IAAIjM,KAAKc,OAAOyI,UAAU,GAAI2f,IAAclgB,EAAUhJ,KAAKgpB,cAAeC,KACrEA,GAGFF,GAEPlG,IAEEqG,GAAiB,SAAUrO,GAC7B,QAASqO,GAAcroB,EAAG0N,EAAK0a,GAC7BjpB,KAAKa,EAAIA,EACTb,KAAKuO,IAAMA,EACXvO,KAAKipB,EAAIA,EACTjpB,KAAK2J,MAAO,EACZ3J,KAAKyN,KACLzN,KAAKmpB,YAAc,EACnBtO,EAAUnX,KAAK1D,MAuBjB,QAASqjB,GAAcpa,EAAQmf,GAC7BpoB,KAAKiJ,OAASA,EACdjJ,KAAKooB,IAAMA,EACXvN,EAAUnX,KAAK1D,MAiBjB,MAxCAuW,IAAS2S,EAAerO,GAExBqO,EAAc/d,UAAUie,gBAAkB,SAAUpS,GAClD,GAAIoR,GAAM,GAAIpa,GACdhO,MAAKipB,EAAEhd,IAAImc,GACX5Y,GAAUwH,KAAQA,EAAKvH,GAAsBuH,IAC7CoR,EAAIna,cAAc+I,EAAGzN,UAAU,GAAI8Z,GAAcrjB,KAAMooB,MAGzDc,EAAc/d,UAAUzB,KAAO,SAAU2f,GACpCrpB,KAAKmpB,YAAcnpB,KAAKuO,KACzBvO,KAAKmpB,cACLnpB,KAAKopB,gBAAgBC,IAErBrpB,KAAKyN,EAAE/L,KAAK2nB,IAGhBH,EAAc/d,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAKa,EAAE4J,QAAQvK,IAC9DgpB,EAAc/d,UAAUmW,UAAY,WAActhB,KAAK2J,MAAO,EAA2B,IAArB3J,KAAKmpB,aAAqBnpB,KAAKa,EAAE8J,eAQrG4L,GAAS8M,EAAexI,GAExBwI,EAAclY,UAAUzB,KAAO,SAAUG,GAAK7J,KAAKiJ,OAAOpI,EAAE6J,OAAOb,IACnEwZ,EAAclY,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAKiJ,OAAOpI,EAAE4J,QAAQvK,IACrEmjB,EAAclY,UAAUmW,UAAY,WAClCthB,KAAKiJ,OAAOggB,EAAEha,OAAOjP,KAAKooB,KACtBpoB,KAAKiJ,OAAOwE,EAAEhO,OAAS,EACzBO,KAAKiJ,OAAOmgB,gBAAgBppB,KAAKiJ,OAAOwE,EAAEY,UAE1CrO,KAAKiJ,OAAOkgB,cACZnpB,KAAKiJ,OAAOU,MAAoC,IAA5B3J,KAAKiJ,OAAOkgB,aAAqBnpB,KAAKiJ,OAAOpI,EAAE8J,gBAIhEue,GACP9H,GAQFlB,IAAgB4I,MAAQ,SAAUQ,GAChC,MAAuC,gBAAzBA,GACZC,GAAgBvpB,KAAMspB,GACtB,GAAIP,IAAgB/oB,KAAMspB,GAQ9B,IAAIC,IAAkBxZ,GAAW+Y,MAAQ,WACvC,GAAIngB,GAAyB/I,EAAdgX,KAAiBpX,EAAMS,UAAUR,MAChD,IAAKQ,UAAU,GAGR,GAAI2I,GAAY3I,UAAU,IAE/B,IADA0I,EAAY1I,UAAU,GAClBL,EAAI,EAAOJ,EAAJI,EAASA,IAAOgX,EAAQlV,KAAKzB,UAAUL,QAGlD,KADA+I,EAAYmS,GACRlb,EAAI,EAAOJ,EAAJI,EAASA,IAAOgX,EAAQlV,KAAKzB,UAAUL,QANlD,KADA+I,EAAYmS,GACRlb,EAAI,EAAOJ,EAAJI,EAASA,IAAOgX,EAAQlV,KAAKzB,UAAUL,GAWpD,OAHID,OAAM+F,QAAQkR,EAAQ,MACxBA,EAAUA,EAAQ,IAEblO,EAAaC,EAAWiO,GAAS4S,YAGtCC,GAAiB7W,GAAG6W,eAAiB,SAASC,GAChD1pB,KAAK2pB,YAAcD,EACnB1pB,KAAKwE,QAAU,uDACfpC,MAAMsB,KAAK1D,MAEbypB,IAAete,UAAY9L,OAAOwU,OAAOzR,MAAM+I,WAC/Cse,GAAete,UAAU5G,KAAO,gBAEhC,IAAIqlB,IAA6B,SAAS/O,GAExC,QAAS+O,GAA0B9oB,GACjCd,KAAKc,OAASA,EACd+Z,EAAUnX,KAAK1D,MAcjB,MAjBAuW,IAASqT,EAA2B/O,GAMpC+O,EAA0Bze,UAAU+X,cAAgB,SAAUriB,GAC5D,GAAIuZ,GAAQ,GAAIrO,IACd8d,EAAI,GAAI7b,IACRhH,GAAUqa,WAAW,EAAOqI,UAAY7oB,EAAGA,EAK7C,OAHAuZ,GAAMnO,IAAI4d,GACVA,EAAE5b,cAAcjO,KAAKc,OAAOyI,UAAU,GAAIugB,IAAwB1P,EAAOpT,KAElEoT,GAGFwP,GACP/G,IAEEiH,GAA2B,SAASjP,GAEtC,QAASiP,GAAwB1P,EAAOpT,GACtChH,KAAK+pB,OAAS3P,EACdpa,KAAKgc,OAAShV,EACd6T,EAAUnX,KAAK1D,MAGjB,QAASgqB,GAAcnpB,EAAG6oB,GACF,IAAlBA,EAAOjqB,OACToB,EAAE8J,cACyB,IAAlB+e,EAAOjqB,OAChBoB,EAAE4J,QAAQif,EAAO,IAEjB7oB,EAAE4J,QAAQ,GAAIgf,IAAeC,IAyBjC,QAASrG,GAAc4G,EAAO7P,EAAOpT,GACnChH,KAAKkqB,OAASD,EACdjqB,KAAK+pB,OAAS3P,EACdpa,KAAKgc,OAAShV,EACd6T,EAAUnX,KAAK1D,MAcjB,MAxDAuW,IAASuT,EAAyBjP,GAiBlCiP,EAAwB3e,UAAUzB,KAAO,SAAUG,GACjD,GAAIogB,GAAQ,GAAIjc,GAChBhO,MAAK+pB,OAAO9d,IAAIge,GAGhBza,GAAU3F,KAAOA,EAAI4F,GAAsB5F,IAC3CogB,EAAMhc,cAAcpE,EAAEN,UAAU,GAAI8Z,GAAc4G,EAAOjqB,KAAK+pB,OAAQ/pB,KAAKgc,WAG7E8N,EAAwB3e,UAAU7K,MAAQ,SAAUJ,GAClDF,KAAKgc,OAAO0N,OAAOhoB,KAAKxB,GACxBF,KAAKgc,OAAOqF,WAAY,EACD,IAAvBrhB,KAAK+pB,OAAOtqB,QAAgBuqB,EAAchqB,KAAKgc,OAAOnb,EAAGb,KAAKgc,OAAO0N,SAGvEI,EAAwB3e,UAAUmW,UAAY,WAC5CthB,KAAKgc,OAAOqF,WAAY,EACD,IAAvBrhB,KAAK+pB,OAAOtqB,QAAgBuqB,EAAchqB,KAAKgc,OAAOnb,EAAGb,KAAKgc,OAAO0N,SAGvEnT,GAAS8M,EAAexI,GAQxBwI,EAAclY,UAAUzB,KAAO,SAAUG,GAAK7J,KAAKgc,OAAOnb,EAAE6J,OAAOb,IACnEwZ,EAAclY,UAAU7K,MAAQ,SAAUJ,GACxCF,KAAKgc,OAAO0N,OAAOhoB,KAAKxB,GACxBF,KAAK+pB,OAAO9a,OAAOjP,KAAKkqB,QACxBlqB,KAAKgc,OAAOqF,WAAoC,IAAvBrhB,KAAK+pB,OAAOtqB,QAAgBuqB,EAAchqB,KAAKgc,OAAOnb,EAAGb,KAAKgc,OAAO0N,SAEhGrG,EAAclY,UAAUmW,UAAY,WAClCthB,KAAK+pB,OAAO9a,OAAOjP,KAAKkqB,QACxBlqB,KAAKgc,OAAOqF,WAAoC,IAAvBrhB,KAAK+pB,OAAOtqB,QAAgBuqB,EAAchqB,KAAKgc,OAAOnb,EAAGb,KAAKgc,OAAO0N,SAGzFI,GACP1I,GAaFrR,IAAWoa,gBAAkB,WAC3B,GAAI/gB,EACJ,IAAIzJ,MAAM+F,QAAQzF,UAAU,IAC1BmJ,EAAOnJ,UAAU,OACZ,CACL,GAAIT,GAAMS,UAAUR,MACpB2J,GAAO,GAAIzJ,OAAMH,EACjB,KAAI,GAAII,GAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,GAErD,GAAIkB,GAAS4H,EAAa,KAAMU,EAChC,OAAO,IAAIwgB,IAA0B9oB,GAGvC,IAAIspB,IAAsB,SAAUvP,GAGlC,QAASuP,GAAmBtpB,GAC1Bd,KAAKc,OAASA,EACd+Z,EAAUnX,KAAK1D,MAUjB,MAdAuW,IAAS6T,EAAoBvP,GAO7BuP,EAAmBjf,UAAU+X,cAAgB,SAAUriB,GACrD,GAAIooB,GAAI,GAAIld,IAAuB8d,EAAI,GAAI7b,GAG3C,OAFAib,GAAEhd,IAAI4d,GACNA,EAAE5b,cAAcjO,KAAKc,OAAOyI,UAAU,GAAI8gB,IAAiBxpB,EAAGooB,KACvDA,GAGFmB,GACPvH,IAEEwH,GAAoB,SAAUxP,GAChC,QAASwP,GAAiBxpB,EAAGooB,GAC3BjpB,KAAKa,EAAIA,EACTb,KAAKipB,EAAIA,EACTjpB,KAAK2J,MAAO,EACZkR,EAAUnX,KAAK1D,MAqBjB,QAASqjB,GAAcpa,EAAQmf,GAC7BpoB,KAAKiJ,OAASA,EACdjJ,KAAKooB,IAAMA,EACXvN,EAAUnX,KAAK1D,MAgBjB,MArCAuW,IAAS8T,EAAkBxP,GAE3BwP,EAAiBlf,UAAUzB,KAAO,SAAS2f,GACzC,GAAIjB,GAAM,GAAIpa,GACdhO,MAAKipB,EAAEhd,IAAImc,GACX5Y,GAAU6Z,KAAiBA,EAAc5Z,GAAsB4Z,IAC/DjB,EAAIna,cAAcob,EAAY9f,UAAU,GAAI8Z,GAAcrjB,KAAMooB,MAGlEiC,EAAiBlf,UAAU7K,MAAQ,SAAUJ,GAC3CF,KAAKa,EAAE4J,QAAQvK,IAGjBmqB,EAAiBlf,UAAUmW,UAAY,WACrCthB,KAAK2J,MAAO,EACM,IAAlB3J,KAAKipB,EAAExpB,QAAgBO,KAAKa,EAAE8J,eAShC4L,GAAS8M,EAAexI,GAExBwI,EAAclY,UAAUzB,KAAO,SAAUG,GACvC7J,KAAKiJ,OAAOpI,EAAE6J,OAAOb,IAEvBwZ,EAAclY,UAAU7K,MAAQ,SAAUJ,GACxCF,KAAKiJ,OAAOpI,EAAE4J,QAAQvK,IAExBmjB,EAAclY,UAAUmW,UAAY,WAClCthB,KAAKiJ,OAAOggB,EAAEha,OAAOjP,KAAKooB,KAC1BpoB,KAAKiJ,OAAOU,MAAiC,IAAzB3J,KAAKiJ,OAAOggB,EAAExpB,QAAgBO,KAAKiJ,OAAOpI,EAAE8J,eAG3D0f,GACPjJ,GAMFlB,IAAgBsJ,SAAW,WACzB,MAAO,IAAIY,IAAmBpqB,MAGhC,IAAIsqB,IAAuB,SAASzP,GAGlC,QAASyP,GAAoBxpB,EAAQ+B,GACnC7C,KAAKiH,GAAKnG,EACVd,KAAK2mB,GAAKnX,GAAU3M,GAAS4M,GAAsB5M,GAASA,EAC5D7C,KAAKuqB,OAAQ,EACb1P,EAAUnX,KAAK1D,MAejB,MArBAuW,IAAS+T,EAAqBzP,GAS9ByP,EAAoBnf,UAAU+X,cAAgB,SAASriB,GACrD,GAAI2pB,GAAmB,GAAIxc,GAC3Bwc,GAAiBvc,cAAcjO,KAAKiH,GAAGsC,UAAU,GAAIkhB,IAAwB5pB,EAAGb,QAEhFwP,GAAUxP,KAAK2mB,MAAQ3mB,KAAK2mB,GAAKlX,GAAsBzP,KAAK2mB,IAE5D,IAAI+D,GAAoB,GAAI1c,GAG5B,OAFA0c,GAAkBzc,cAAcjO,KAAK2mB,GAAGpd,UAAU,GAAIohB,IAAuB9pB,EAAGb,KAAM0qB,KAE/E,GAAIlc,IAAiBgc,EAAkBE,IAGzCJ,GACPzH,IAEE4H,GAA2B,SAAS5P,GAEtC,QAAS4P,GAAwB5pB,EAAGkJ,GAClC/J,KAAK2mB,GAAK9lB,EACVb,KAAK4qB,GAAK7gB,EACV8Q,EAAUnX,KAAK1D,MAejB,MAnBAuW,IAASkU,EAAyB5P,GAOlC4P,EAAwBtf,UAAUzB,KAAO,SAAUG,GACjD7J,KAAK4qB,GAAGL,OAASvqB,KAAK2mB,GAAGjc,OAAOb,IAGlC4gB,EAAwBtf,UAAU7K,MAAQ,SAAUwK,GAClD9K,KAAK2mB,GAAGlc,QAAQK,IAGlB2f,EAAwBtf,UAAUR,YAAc,WAC9C3K,KAAK4qB,GAAGL,OAASvqB,KAAK2mB,GAAGhc,eAGpB8f,GACPrJ,IAEEuJ,GAA0B,SAAS9P,GAErC,QAAS8P,GAAuB9pB,EAAGkJ,EAAGkN,GACpCjX,KAAK2mB,GAAK9lB,EACVb,KAAK4qB,GAAK7gB,EACV/J,KAAK6qB,GAAK5T,EACV4D,EAAUnX,KAAK1D,MAgBjB,MArBAuW,IAASoU,EAAwB9P,GAQjC8P,EAAuBxf,UAAUzB,KAAO,WACtC1J,KAAK4qB,GAAGL,OAAQ,EAChBvqB,KAAK6qB,GAAG1b,WAGVwb,EAAuBxf,UAAU7K,MAAQ,SAAUwK,GACjD9K,KAAK2mB,GAAGlc,QAAQK,IAGlB6f,EAAuBxf,UAAUR,YAAc,WAC7C3K,KAAK6qB,GAAG1b,WAGHwb,GACPvJ,GAOFlB,IAAgB4K,UAAY,SAAUjoB,GACpC,MAAO,IAAIynB,IAAoBtqB,KAAM6C,GAGvC,IAAIkoB,IAAoB,SAASlQ,GAE/B,QAASkQ,GAAiBjqB,GACxBd,KAAKc,OAASA,EACd+Z,EAAUnX,KAAK1D,MASjB,QAASgrB,GAAenqB,EAAGopB,GACzBjqB,KAAKa,EAAIA,EACTb,KAAKiqB,MAAQA,EACbjqB,KAAKirB,SAAU,EACfjrB,KAAKkrB,OAAS,EACdlrB,KAAKmrB,WAAY,EACjB/J,GAAiB1d,KAAK1D,MAqBxB,QAASqjB,GAAcpa,EAAQnC,GAC7B9G,KAAKiJ,OAASA,EACdjJ,KAAK8G,GAAKA,EACVsa,GAAiB1d,KAAK1D,MAiBxB,MA3DAuW,IAASwU,EAAkBlQ,GAM3BkQ,EAAiB5f,UAAU+X,cAAgB,SAAUriB,GACnD,GAAIopB,GAAQ,GAAI1c,IAAoBnG,EAAIpH,KAAKc,OAAOyI,UAAU,GAAIyhB,GAAenqB,EAAGopB,GACpF,OAAO,IAAIzb,IAAiBpH,EAAG6iB,IAGjC1T,GAASyU,EAAgB5J,IAUzB4J,EAAe7f,UAAUzB,KAAO,SAAU2f,GACxC,GAAI5c,GAAI,GAAIuB,IAA8BlH,IAAO9G,KAAKkrB,MACtDlrB,MAAKmrB,WAAY,EACjBnrB,KAAKiqB,MAAMhc,cAAcxB,GACzB+C,GAAU6Z,KAAiBA,EAAc5Z,GAAsB4Z,IAC/D5c,EAAEwB,cAAcob,EAAY9f,UAAU,GAAI8Z,GAAcrjB,KAAM8G,MAGhEkkB,EAAe7f,UAAU7K,MAAQ,SAAUJ,GACzCF,KAAKa,EAAE4J,QAAQvK,IAGjB8qB,EAAe7f,UAAUmW,UAAY,WACnCthB,KAAKirB,SAAU,GACdjrB,KAAKmrB,WAAanrB,KAAKa,EAAE8J,eAG5B4L,GAAS8M,EAAejC,IAMxBiC,EAAclY,UAAUzB,KAAO,SAAUG,GACvC7J,KAAKiJ,OAAOiiB,SAAWlrB,KAAK8G,IAAM9G,KAAKiJ,OAAOpI,EAAE6J,OAAOb,IAGzDwZ,EAAclY,UAAU7K,MAAQ,SAAUJ,GACxCF,KAAKiJ,OAAOiiB,SAAWlrB,KAAK8G,IAAM9G,KAAKiJ,OAAOpI,EAAE4J,QAAQvK,IAG1DmjB,EAAclY,UAAUmW,UAAY,WAC9BthB,KAAKiJ,OAAOiiB,SAAWlrB,KAAK8G,KAC9B9G,KAAKiJ,OAAOkiB,WAAY,EACxBnrB,KAAKiJ,OAAOgiB,SAAWjrB,KAAKiJ,OAAOpI,EAAE8J,gBAIlCogB,GACPlI,GAMF3C,IAAgB,UAAYA,GAAgBkL,aAAe,WACzD,MAAO,IAAIL,IAAiB/qB,MAG9B,IAAIqrB,IAAuB,SAASxQ,GAGlC,QAASwQ,GAAoBvqB,EAAQ+B,GACnC7C,KAAKc,OAASA,EACdd,KAAK6C,MAAQ2M,GAAU3M,GAAS4M,GAAsB5M,GAASA,EAC/DgY,EAAUnX,KAAK1D,MAUjB,MAfAuW,IAAS8U,EAAqBxQ,GAQ9BwQ,EAAoBlgB,UAAU+X,cAAgB,SAASriB,GACrD,MAAO,IAAI2N,IACTxO,KAAKc,OAAOyI,UAAU1I,GACtBb,KAAK6C,MAAM0G,UAAU,GAAI+hB,IAAkBzqB,MAIxCwqB,GACPxI,IAEEyI,GAAqB,SAASzQ,GAEhC,QAASyQ,GAAkBzqB,GACzBb,KAAK2mB,GAAK9lB,EACVga,EAAUnX,KAAK1D,MAajB,MAhBAuW,IAAS+U,EAAmBzQ,GAM5ByQ,EAAkBngB,UAAUzB,KAAO,WACjC1J,KAAK2mB,GAAGhc,eAGV2gB,EAAkBngB,UAAU7K,MAAQ,SAAUwK,GAC5C9K,KAAK2mB,GAAGlc,QAAQK,IAGlBwgB,EAAkBngB,UAAUR,YAAcsI,GAEnCqY,GACPlK,GAOFlB,IAAgBqL,UAAY,SAAU1oB,GACpC,MAAO,IAAIwoB,IAAoBrrB,KAAM6C,GAUvC,IAAI2oB,IAA4B,SAAS3Q,GAEvC,QAAS2Q,GAAyB1qB,EAAQ8V,EAAS3F,GACjDjR,KAAKiH,GAAKnG,EACVd,KAAKyrB,IAAM7U,EACX5W,KAAKkoB,IAAMjX,EACX4J,EAAUnX,KAAK1D,MA0BjB,MA/BAuW,IAASiV,EAA0B3Q,GAQnC2Q,EAAyBrgB,UAAU+X,cAAgB,SAAUriB,GAS3D,IAAK,GARDrB,GAAMQ,KAAKyrB,IAAIhsB,OACfuH,GACFsI,SAAU5I,EAAgBlH,EAAK0J,GAC/BiI,aAAa,EACbD,OAAQ,GAAIvR,OAAMH,IAGhB8L,EAAItL,KAAKyrB,IAAIhsB,OAAQ0oB,EAAgB,GAAIxoB,OAAM2L,EAAI,GAC9C1L,EAAI,EAAO0L,EAAJ1L,EAAOA,IAAK,CAC1B,GAAIiD,GAAQ7C,KAAKyrB,IAAI7rB,GAAIwoB,EAAM,GAAIpa,GACnCwB,IAAU3M,KAAWA,EAAQ4M,GAAsB5M,IACnDulB,EAAIna,cAAcpL,EAAM0G,UAAU,GAAImiB,IAA4B7qB,EAAGjB,EAAGoH,KACxEmhB,EAAcvoB,GAAKwoB,EAGrB,GAAIuD,GAAW,GAAI3d,GAInB,OAHA2d,GAAS1d,cAAcjO,KAAKiH,GAAGsC,UAAU,GAAIqiB,IAA6B/qB,EAAGb,KAAKkoB,IAAKlhB,KACvFmhB,EAAc7c,GAAKqgB,EAEZ,GAAIlT,IAAe0P,IAGrBqD,GACP3I,IAEE6I,GAA+B,SAAU7Q,GAE3C,QAAS6Q,GAA4B7qB,EAAGjB,EAAGoH,GACzChH,KAAK2mB,GAAK9lB,EACVb,KAAKuH,GAAK3H,EACVI,KAAKgc,OAAShV,EACd6T,EAAUnX,KAAK1D,MAejB,MApBAuW,IAASmV,EAA6B7Q,GAQtC6Q,EAA4BvgB,UAAUzB,KAAO,SAAUG,GACrD7J,KAAKgc,OAAO9K,OAAOlR,KAAKuH,IAAMsC,EAC9B7J,KAAKgc,OAAO1M,SAAStP,KAAKuH,KAAM,EAChCvH,KAAKgc,OAAO7K,YAAcnR,KAAKgc,OAAO1M,SAAS8B,MAAMC,KAGvDqa,EAA4BvgB,UAAU7K,MAAQ,SAAUJ,GACtDF,KAAK2mB,GAAGlc,QAAQvK,IAGlBwrB,EAA4BvgB,UAAUmW,UAAYrO,GAE3CyY,GACPtK,IAEEwK,GAAgC,SAAU/Q,GAE5C,QAAS+Q,GAA6B/qB,EAAGmnB,EAAIhhB,GAC3ChH,KAAK2mB,GAAK9lB,EACVb,KAAKkoB,IAAMF,EACXhoB,KAAKgc,OAAShV,EACd6T,EAAUnX,KAAK1D,MAmBjB,MAxBAuW,IAASqV,EAA8B/Q,GAQvC+Q,EAA6BzgB,UAAUzB,KAAO,SAAUG,GACtD,GAAIgiB,IAAahiB,GAAGka,OAAO/jB,KAAKgc,OAAO9K,OACvC,IAAKlR,KAAKgc,OAAO7K,YAAjB,CACA,GAAIT,GAAMlG,GAASxK,KAAKkoB,KAAKnoB,MAAM,KAAM8rB,EACzC,OAAInb,KAAQvQ,GAAmBH,KAAK2mB,GAAGlc,QAAQiG,EAAIxQ,OACnDF,MAAK2mB,GAAGjc,OAAOgG,KAGjBkb,EAA6BzgB,UAAU7K,MAAQ,SAAUJ,GACvDF,KAAK2mB,GAAGlc,QAAQvK,IAGlB0rB,EAA6BzgB,UAAUmW,UAAY,WACjDthB,KAAK2mB,GAAGhc,eAGHihB,GACPxK,GAMFlB,IAAgB4L,eAAiB,WAC/B,GAAyB,IAArB7rB,UAAUR,OAAgB,KAAM,IAAI2C,OAAM,oBAG9C,KAAI,GADA5C,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EACnD,IAAIqR,GAAiB1G,GAAWnB,EAAK5J,EAAM,IAAM4J,EAAK7C,MAAQ4C,CAG9D,OAFAxJ,OAAM+F,QAAQ0D,EAAK,MAAQA,EAAOA,EAAK,IAEhC,GAAIoiB,IAAyBxrB,KAAMoJ,EAAM6H,GAMlD,IAAI8a,IAAiB,SAASlR,GAE5B,QAASkR,GAAcnV,EAAS3F,GAC9BjR,KAAKiH,GAAK2P,EACV5W,KAAKkoB,IAAMjX,EACX4J,EAAUnX,KAAK1D,MAmBjB,MAvBAuW,IAASwV,EAAelR,GAOxBkR,EAAc5gB,UAAU+X,cAAgB,SAASla,GAM/C,IAAK,GALDsC,GAAItL,KAAKiH,GAAGxH,OACZ0oB,EAAgB,GAAIxoB,OAAM2L,GAC1B3B,EAAOjD,EAAgB4E,EAAGpC,GAC1BuE,EAAI/G,EAAgB4E,EAAGjC,GAElBzJ,EAAI,EAAO0L,EAAJ1L,EAAOA,IAAK,CAC1B,GAAIkB,GAASd,KAAKiH,GAAGrH,GAAIwoB,EAAM,GAAIpa,GACnCma,GAAcvoB,GAAKwoB,EACnB5Y,GAAU1O,KAAYA,EAAS2O,GAAsB3O,IACrDsnB,EAAIna,cAAcnN,EAAOyI,UAAU,GAAIyiB,IAAYhjB,EAAUpJ,EAAGI,KAAMyN,EAAG9D,KAG3E,MAAO,IAAI8O,IAAe0P,IAGrB4D,GACPlJ,IAEEmJ,GAAe,SAAUnR,GAE3B,QAASmR,GAAYnrB,EAAGjB,EAAGmK,EAAG0D,EAAGhB,GAC/BzM,KAAK2mB,GAAK9lB,EACVb,KAAKuH,GAAK3H,EACVI,KAAK4qB,GAAK7gB,EACV/J,KAAKisB,GAAKxe,EACVzN,KAAKksB,GAAKzf,EACVoO,EAAUnX,KAAK1D,MAGjB,QAASmsB,GAAStiB,GAAK,MAAOA,GAAEpK,OAAS,EACzC,QAAS2sB,GAAUviB,GAAK,MAAOA,GAAEwE,QACjC,QAASia,GAAW1oB,GAClB,MAAO,UAAUiK,EAAG0e,GAClB,MAAOA,KAAM3oB,GAyBjB,MAvCA2W,IAASyV,EAAanR,GAkBtBmR,EAAY7gB,UAAUzB,KAAO,SAAUG,GAErC,GADA7J,KAAKisB,GAAGjsB,KAAKuH,IAAI7F,KAAKmI,GAClB7J,KAAKisB,GAAG7a,MAAM+a,GAAW,CAC3B,GAAIE,GAAersB,KAAKisB,GAAG1I,IAAI6I,GAC3B1b,EAAMlG,GAASxK,KAAK4qB,GAAG1C,KAAKnoB,MAAM,KAAMssB,EAC5C,IAAI3b,IAAQvQ,GAAY,MAAOH,MAAK2mB,GAAGlc,QAAQiG,EAAIxQ,EACnDF,MAAK2mB,GAAGjc,OAAOgG,OACN1Q,MAAKksB,GAAG1D,OAAOF,EAAWtoB,KAAKuH,KAAK6J,MAAMC,KACnDrR,KAAK2mB,GAAGhc,eAIZqhB,EAAY7gB,UAAU7K,MAAQ,SAAUJ,GACtCF,KAAK2mB,GAAGlc,QAAQvK,IAGlB8rB,EAAY7gB,UAAUmW,UAAY,WAChCthB,KAAKksB,GAAGlsB,KAAKuH,KAAM,EACnBvH,KAAKksB,GAAG9a,MAAMC,KAAarR,KAAK2mB,GAAGhc,eAG9BqhB,GACP5K,GAOFlB,IAAgBoM,IAAM,WACpB,GAAyB,IAArBrsB,UAAUR,OAAgB,KAAM,IAAI2C,OAAM,oBAG9C,KAAI,GADA5C,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EACnD,IAAIqR,GAAiB1G,GAAWnB,EAAK5J,EAAM,IAAM4J,EAAK7C,MAAQ4C,CAC9DxJ,OAAM+F,QAAQ0D,EAAK,MAAQA,EAAOA,EAAK,GAEvC,IAAIH,GAASjJ,IAGb,OAFAoJ,GAAKrI,QAAQkI,GAEN,GAAI8iB,IAAc3iB,EAAM6H,IASjClB,GAAWuc,IAAM,WAEf,IAAI,GADA9sB,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EAC/CD,OAAM+F,QAAQ0D,EAAK,MACrBA,EAAOmB,GAAWnB,EAAK,IAAMA,EAAK,GAAG2a,OAAO3a,EAAK,IAAMA,EAAK,GAE9D,IAAI+O,GAAQ/O,EAAKiF,OACjB,OAAO8J,GAAMmU,IAAIvsB,MAAMoY,EAAO/O,GAWlC,IAAImjB,IAAyB,SAAS1R,GAEpC,QAAS0R,GAAsB3V,EAASoR,GACtChoB,KAAK4W,QAAUA,EACf5W,KAAKkoB,IAAMF,EACXnN,EAAUnX,KAAK1D,MA0BjB,MA9BAuW,IAASgW,EAAuB1R,GAOhC0R,EAAsBphB,UAAU+X,cAAgB,SAAUriB,GAUxD,IAAK,GATD+V,GAAU5W,KAAK4W,QAASpX,EAAMoX,EAAQnX,OAAQ0oB,EAAgB,GAAIxoB,OAAMH,GAExEwH,GACFyG,EAAG/G,EAAgBlH,EAAK6J,GACxBM,KAAMjD,EAAgBlH,EAAK0J,GAC3B8e,GAAIhoB,KAAKkoB,IACTrnB,EAAGA,GAGIjB,EAAI,EAAOJ,EAAJI,EAASA,KACtB,SAAUA,GACT,GAAIkB,GAAS8V,EAAQhX,GAAIwoB,EAAM,GAAIpa,KAClCyG,GAAY3T,IAAW0T,GAAW1T,MAAaA,EAASklB,GAAellB,IAExEqnB,EAAcvoB,GAAKwoB,EACnBA,EAAIna,cAAcnN,EAAOyI,UAAU,GAAIijB,IAAoBxlB,EAAOpH,MAClEA,EAGJ,OAAO,IAAI6Y,IAAe0P,IAGrBoE,GACP1J,IAEE2J,GAAuB,SAAU3R,GAEnC,QAAS2R,GAAoBplB,EAAGxH,GAC9BI,KAAKiH,GAAKG,EACVpH,KAAKuH,GAAK3H,EACVib,EAAUnX,KAAK1D,MAGjB,QAASmsB,GAAStiB,GAAK,MAAOA,GAAEpK,OAAS,EACzC,QAAS2sB,GAAUviB,GAAK,MAAOA,GAAEwE,QACjC,QAASia,GAAW1oB,GAClB,MAAO,UAAUiK,EAAG0e,GAClB,MAAOA,KAAM3oB,GAuBjB,MAlCA2W,IAASiW,EAAqB3R,GAe9B2R,EAAoBrhB,UAAUzB,KAAO,SAAUG,GAE7C,GADA7J,KAAKiH,GAAGwG,EAAEzN,KAAKuH,IAAI7F,KAAKmI,GACpB7J,KAAKiH,GAAGwG,EAAE2D,MAAM+a,GAAW,CAC7B,GAAIE,GAAersB,KAAKiH,GAAGwG,EAAE8V,IAAI6I,GAC7B1b,EAAMlG,GAASxK,KAAKiH,GAAG+gB,IAAIjoB,MAAM,KAAMssB,EAC3C,IAAI3b,IAAQvQ,GAAY,MAAOH,MAAKiH,GAAGpG,EAAE4J,QAAQiG,EAAIxQ,EACrDF,MAAKiH,GAAGpG,EAAE6J,OAAOgG,OACR1Q,MAAKiH,GAAG0C,KAAK6e,OAAOF,EAAWtoB,KAAKuH,KAAK6J,MAAMC,KACxDrR,KAAKiH,GAAGpG,EAAE8J,eAId6hB,EAAoBrhB,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAKiH,GAAGpG,EAAE4J,QAAQvK,IAEvEssB,EAAoBrhB,UAAUmW,UAAY,WACxCthB,KAAKiH,GAAG0C,KAAK3J,KAAKuH,KAAM,EACxBvH,KAAKiH,GAAG0C,KAAKyH,MAAMC,KAAarR,KAAKiH,GAAGpG,EAAE8J,eAGrC6hB,GACPpL,GAOFlB,IAAgBuM,YAAc,WAC5B,GAAyB,IAArBxsB,UAAUR,OAAgB,KAAM,IAAI2C,OAAM,oBAG9C,KAAI,GADA5C,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EACnD,IAAIqR,GAAiB1G,GAAWnB,EAAK5J,EAAM,IAAM4J,EAAK7C,MAAQ4C,EAE1DF,EAASjJ,IAEb,OADAoJ,GAAKrI,QAAQkI,GACN,GAAIsjB,IAAsBnjB,EAAM6H,IAWvCiP,GAAgB5W,aAAe,WAC7B,MAAO,IAAIkD,IAAoBlD,EAAatJ,MAAOA,MAGrD,IAAI0sB,IAA2B,SAAU7R,GAEvC,QAAS6R,GAAwB5rB,GAC/Bd,KAAKc,OAASA,EACd+Z,EAAUnX,KAAK1D,MAOjB,MAVAuW,IAASmW,EAAyB7R,GAMlC6R,EAAwBvhB,UAAU+X,cAAgB,SAAUriB,GAC1D,MAAOb,MAAKc,OAAOyI,UAAU,GAAIojB,IAAsB9rB,KAGlD6rB,GACP7J,IAEE8J,GAAyB,SAAU9R,GAGrC,QAAS8R,GAAsB9rB,GAC7Bb,KAAK2mB,GAAK9lB,EACVga,EAAUnX,KAAK1D,MAOjB,MAXAuW,IAASoW,EAAuB9R,GAOhC8R,EAAsBxhB,UAAUzB,KAAO,SAAUG,GAAKA,EAAEyE,OAAOtO,KAAK2mB,KACpEgG,EAAsBxhB,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAK2mB,GAAGlc,QAAQvK,IACvEysB,EAAsBxhB,UAAUmW,UAAY,WAActhB,KAAK2mB,GAAGhc,eAE3DgiB,GACPvL,GAMFlB,IAAgB0M,cAAgB,WAC9B,MAAO,IAAIF,IAAwB1sB,MAGrC,IAAI6sB,IAAkC,SAAShS,GAE7C,QAASgS,GAA+B/rB,EAAQgsB,EAAO7T,GACrDjZ,KAAKc,OAASA,EACdd,KAAK8sB,MAAQA,EACb9sB,KAAKiZ,SAAWA,EAChB4B,EAAUnX,KAAK1D,MAOjB,MAZAuW,IAASsW,EAAgChS,GAQzCgS,EAA+B1hB,UAAU+X,cAAgB,SAAUriB,GACjE,MAAOb,MAAKc,OAAOyI,UAAU,GAAIwjB,IAA6BlsB,EAAGb,KAAK8sB,MAAO9sB,KAAKiZ,YAG7E4T,GACPhK,IAEEkK,GAAgC,SAASlS,GAE3C,QAASkS,GAA6BlsB,EAAGisB,EAAO7T,GAC9CjZ,KAAKa,EAAIA,EACTb,KAAK8sB,MAAQA,EACb9sB,KAAKiZ,SAAWA,EAChBjZ,KAAKgtB,eAAgB,EACrBhtB,KAAKitB,WAAa,KAClBpS,EAAUnX,KAAK1D,MA0BjB,MAjCAuW,IAASwW,EAA8BlS,GAUvCkS,EAA6B5hB,UAAUzB,KAAO,SAAUG,GACtD,GAAaqjB,GAAT3pB,EAAMsG,CACV,OAAIU,IAAWvK,KAAK8sB,SAClBvpB,EAAMiH,GAASxK,KAAK8sB,OAAOjjB,GACvBtG,IAAQpD,IAAmBH,KAAKa,EAAE4J,QAAQlH,EAAIrD,GAEhDF,KAAKgtB,gBACPE,EAAiB1iB,GAASxK,KAAKiZ,UAAUjZ,KAAKitB,WAAY1pB,GACtD2pB,IAAmB/sB,IAAmBH,KAAKa,EAAE4J,QAAQyiB,EAAehtB,QAErEF,KAAKgtB,eAAkBE,IAC1BltB,KAAKgtB,eAAgB,EACrBhtB,KAAKitB,WAAa1pB,EAClBvD,KAAKa,EAAE6J,OAAOb,MAGlBkjB,EAA6B5hB,UAAU7K,MAAQ,SAASJ,GACtDF,KAAKa,EAAE4J,QAAQvK,IAEjB6sB,EAA6B5hB,UAAUmW,UAAY,WACjDthB,KAAKa,EAAE8J,eAGFoiB,GACP3L,GAQFlB,IAAgBiN,qBAAuB,SAAUL,EAAO7T,GAEtD,MADAA,KAAaA,EAAW9F,IACjB,GAAI0Z,IAA+B7sB,KAAM8sB,EAAO7T,GAGzD,IAAImU,IAAiB,SAASvS,GAE5B,QAASuS,GAActsB,EAAQwf,EAAkB7V,EAASE,GACxD3K,KAAKc,OAASA,EACdd,KAAKqtB,IAAM/M,EACXtgB,KAAKstB,IAAM7iB,EACXzK,KAAKutB,IAAM5iB,EACXkQ,EAAUnX,KAAK1D,MAQjB,QAASqjB,GAAcxiB,EAAGkJ,GACxB/J,KAAKa,EAAIA,EACTb,KAAKwtB,GAAKzjB,EAAEsjB,KAAO9iB,GAAWR,EAAEsjB,KAC9BnM,GAAenX,EAAEsjB,KAAOpa,GAAMlJ,EAAEujB,KAAOra,GAAMlJ,EAAEwjB,KAAOta,IACtDlJ,EAAEsjB,IACJrtB,KAAKqhB,WAAY,EACjBD,GAAiB1d,KAAK1D,MAkBxB,MAtCAuW,IAAS6W,EAAcvS,GASvBuS,EAAcjiB,UAAU+X,cAAgB,SAASriB,GAC/C,MAAOb,MAAKc,OAAOyI,UAAU,GAAI8Z,GAAcxiB,EAAGb,QAGpDuW,GAAS8M,EAAejC,IASxBiC,EAAclY,UAAUzB,KAAO,SAASG,GACtC,GAAI6G,GAAMlG,GAASxK,KAAKwtB,EAAE9iB,QAAQhH,KAAK1D,KAAKwtB,EAAG3jB,EAC3C6G,KAAQvQ,IAAYH,KAAKa,EAAE4J,QAAQiG,EAAIxQ,GAC3CF,KAAKa,EAAE6J,OAAOb,IAEhBwZ,EAAclY,UAAU7K,MAAQ,SAASwK,GACvC,GAAI4F,GAAMlG,GAASxK,KAAKwtB,EAAE/iB,SAAS/G,KAAK1D,KAAKwtB,EAAG1iB,EAChD,OAAI4F,KAAQvQ,GAAmBH,KAAKa,EAAE4J,QAAQiG,EAAIxQ,OAClDF,MAAKa,EAAE4J,QAAQK,IAEjBuY,EAAclY,UAAUmW,UAAY,WAClC,GAAI5Q,GAAMlG,GAASxK,KAAKwtB,EAAE7iB,aAAajH,KAAK1D,KAAKwtB,EACjD,OAAI9c,KAAQvQ,GAAmBH,KAAKa,EAAE4J,QAAQiG,EAAIxQ,OAClDF,MAAKa,EAAE8J,eAGFyiB,GACPvK,GAUF3C,IAAgB,MAAQA,GAAgBuN,IAAMvN,GAAgBwN,SAAW,SAAUpN,EAAkB7V,EAASE,GAC5G,MAAO,IAAIyiB,IAAcptB,KAAMsgB,EAAkB7V,EAASE,IAU5DuV,GAAgByN,SAAWzN,GAAgB0N,UAAY,SAAUljB,EAAQkK,GACvE,MAAO5U,MAAKytB,IAAuB,mBAAZ7Y,GAA0B,SAAU/K,GAAKa,EAAOhH,KAAKkR,EAAS/K,IAAQa,IAU/FwV,GAAgB2N,UAAY3N,GAAgB4N,WAAa,SAAUrjB,EAASmK,GAC1E,MAAO5U,MAAKytB,IAAIxa,GAAyB,mBAAZ2B,GAA0B,SAAU1U,GAAKuK,EAAQ/G,KAAKkR,EAAS1U,IAAQuK,IAUtGyV,GAAgB6N,cAAgB7N,GAAgB8N,eAAiB,SAAUrjB,EAAaiK,GACtF,MAAO5U,MAAKytB,IAAIxa,GAAM,KAAyB,mBAAZ2B,GAA0B,WAAcjK,EAAYjH,KAAKkR,IAAcjK,GAG5G,IAAIsjB,IAAqB,SAAUpT,GAEjC,QAASoT,GAAkBntB,EAAQmJ,EAAI2K,GACrC5U,KAAKc,OAASA,EACdd,KAAKyL,IAAMiJ,GAAazK,EAAI2K,EAAS,GACrCiG,EAAUnX,KAAK1D,MAajB,QAASkuB,GAAkB9mB,EAAG6C,GAC5BjK,KAAKkH,YAAa,EAClBlH,KAAKiH,GAAKG,EACVpH,KAAKyL,IAAMxB,EAUb,MA9BAsM,IAAS0X,EAAmBpT,GAO5BoT,EAAkB9iB,UAAU+X,cAAgB,SAAUriB,GACpD,GAAI4L,GAAIjC,GAASxK,KAAKc,OAAOyI,WAAW7F,KAAK1D,KAAKc,OAAQD,EAM1D,OALI4L,KAAMtM,KACRH,KAAKyL,MACLrL,EAAQqM,EAAEvM,IAGL,GAAIguB,GAAkBzhB,EAAGzM,KAAKyL,MAQvCyiB,EAAkB/iB,UAAUgE,QAAU,WACpC,IAAKnP,KAAKkH,WAAY,CACpB,GAAIwJ,GAAMlG,GAASxK,KAAKiH,GAAGkI,SAASzL,KAAK1D,KAAKiH,GAC9CjH,MAAKyL,MACLiF,IAAQvQ,IAAYC,EAAQsQ,EAAIxQ,KAI7B+tB,GAEPpL,GAOF3C,IAAgB,WAAa,SAAU1I,EAAQ5C,GAC7C,MAAO,IAAIqZ,IAAkBjuB,KAAMwX,EAAQ5C,GAG7C,IAAIuZ,IAA4B,SAAStT,GAGvC,QAASsT,GAAyBrtB,GAChCd,KAAKc,OAASA,EACd+Z,EAAUnX,KAAK1D,MAOjB,QAASqjB,GAAcxiB,GACrBb,KAAKa,EAAIA,EACTb,KAAKqhB,WAAY,EA0BnB,MAvCA9K,IAAS4X,EAA0BtT,GAOnCsT,EAAyBhjB,UAAU+X,cAAgB,SAAUriB,GAC3D,MAAOb,MAAKc,OAAOyI,UAAU,GAAI8Z,GAAcxiB,KAOjDwiB,EAAclY,UAAUT,OAASuI,GACjCoQ,EAAclY,UAAUV,QAAU,SAAUK,GACtC9K,KAAKqhB,YACPrhB,KAAKqhB,WAAY,EACjBrhB,KAAKa,EAAE4J,QAAQK,KAGnBuY,EAAclY,UAAUR,YAAc,WAChC3K,KAAKqhB,YACPrhB,KAAKqhB,WAAY,EACjBrhB,KAAKa,EAAE8J,gBAGX0Y,EAAclY,UAAUgE,QAAU,WAAanP,KAAKqhB,WAAY,GAChEgC,EAAclY,UAAUoW,KAAO,SAAUrhB,GACvC,MAAKF,MAAKqhB,WAMH,GALLrhB,KAAKqhB,WAAY,EACjBrhB,KAAKgJ,SAASyB,QAAQvK,IACf,IAMJiuB,GACPtL,GAMF3C,IAAgBkO,eAAiB,WAC/B,MAAO,IAAID,IAAyBnuB,MAGtC,IAAIquB,IAAyB,SAAUxT,GAErC,QAASwT,GAAsBvtB,EAAQmJ,GACrCjK,KAAKc,OAASA,EACd+Z,EAAUnX,KAAK1D,MAOjB,MAVAuW,IAAS8X,EAAuBxT,GAMhCwT,EAAsBljB,UAAU+X,cAAgB,SAAUriB,GACxD,MAAOb,MAAKc,OAAOyI,UAAU,GAAI+kB,IAAoBztB,KAGhDwtB,GACPxL,IAEEyL,GAAuB,SAAUzT,GAGnC,QAASyT,GAAoBztB,GAC3Bb,KAAK2mB,GAAK9lB,EACVga,EAAUnX,KAAK1D,MAOjB,MAXAuW,IAAS+X,EAAqBzT,GAO9ByT,EAAoBnjB,UAAUzB,KAAO,SAAUG,GAAK7J,KAAK2mB,GAAGjc,OAAOiW,GAAyB9W,KAC5FykB,EAAoBnjB,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAK2mB,GAAGjc,OAAOmW,GAA0B3gB,IAAKF,KAAK2mB,GAAGhc,eAC3G2jB,EAAoBnjB,UAAUmW,UAAY,WAActhB,KAAK2mB,GAAGjc,OAAOqW,MAAkC/gB,KAAK2mB,GAAGhc,eAE1G2jB,GACPlN,GAMFlB,IAAgBvS,YAAc,WAC5B,MAAO,IAAI0gB,IAAsBruB,OAQnCkgB,GAAgB1W,OAAS,SAAUgb,GACjC,MAAOD,IAAiBvkB,KAAMwkB,GAAaT,UAa7C7D,GAAgBqO,MAAQ,SAAUC,GAChC,MAAOjK,IAAiBvkB,KAAMwuB,GAAYtK,aAe5C,IAAIuK,IAAuB,SAAS5T,GAClC,QAAS6T,GAAiB1nB,GACxB,OACEE,YAAY,EACZiI,QAAS,WACFnP,KAAKkH,aACRlH,KAAKkH,YAAa,EAClBF,EAAME,YAAa,KAM3B,QAASunB,GAAoB3tB,EAAQ6tB,GACnC3uB,KAAKc,OAASA,EACdd,KAAK4uB,UAAYD,EACjB9T,EAAUnX,KAAK1D,MAsDjB,MAnDAuW,IAASkY,EAAqB5T,GAE9B4T,EAAoBtjB,UAAU+X,cAAgB,SAAUriB,GACtD,GAQEojB,GARE4K,EAAa,GAAIC,IACnBH,EAAW,GAAIG,IACfC,EAAU/uB,KAAK4uB,UAAUC,GACzBG,EAAyBD,EAAQxlB,UAAUolB,GAEzCzuB,EAAIF,KAAKc,OAAO,gBAEhBkG,GAAUE,YAAY,GAExBkG,EAAe,GAAIG,IACjBD,EAAazE,GAAuB0R,kBAAkB,KAAM,SAAUrM,EAAG2N,GAC3E,IAAI7U,EAAME,WAAV,CACA,GAAI0c,GAAc1jB,EAAEwJ,MAEpB,IAAIka,EAAYja,KAMd,YALIsa,EACFpjB,EAAE4J,QAAQwZ,GAEVpjB,EAAE8J,cAMN,IAAIkZ,GAAeD,EAAYxkB,KAC/BoQ,IAAUqU,KAAkBA,EAAepU,GAAsBoU,GAEjE,IAAIoL,GAAQ,GAAIjhB,IACZic,EAAQ,GAAIjc,GAChBZ,GAAaa,cAAc,GAAIO,IAAiByb,EAAOgF,IACvDA,EAAMhhB,cAAc4V,EAAata,UAC/B,SAASM,GAAKhJ,EAAE6J,OAAOb,IACvB,SAAUqlB,GACRjF,EAAMhc,cAAc0gB,EAASplB,UAAUsS,EAAS,SAASsT,GACvDtuB,EAAE4J,QAAQ0kB,IACT,WACDtuB,EAAE8J,iBAGJkkB,EAAWnkB,OAAOwkB,GAClBD,EAAM9f,WAER,WAAatO,EAAE8J,mBAGnB,OAAO,IAAI8N,KAAgBuW,EAAwB5hB,EAAcE,EAAYohB,EAAiB1nB,MAGzFynB,GACP5L,GAEF3C,IAAgBkP,UAAY,SAAUT,GACpC,MAAO,IAAIF,IAAoBjlB,EAAOxJ,MAAO2uB,GAe/C,IAAIU,IAAwB,SAASxU,GACnC,QAAS6T,GAAiB1nB,GACxB,OACEE,YAAY,EACZiI,QAAS,WACFnP,KAAKkH,aACRlH,KAAKkH,YAAa,EAClBF,EAAME,YAAa,KAM3B,QAASmoB,GAAqBvuB,EAAQ6tB,GACpC3uB,KAAKc,OAASA,EACdd,KAAK4uB,UAAYD,EACjB9T,EAAUnX,KAAK1D,MAsDjB,MAnDAuW,IAAS8Y,EAAsBxU,GAE/BwU,EAAqBlkB,UAAU+X,cAAgB,SAAUriB,GACvD,GAQEojB,GAREqL,EAAc,GAAIR,IACpBH,EAAW,GAAIG,IACfC,EAAU/uB,KAAK4uB,UAAUU,GACzBN,EAAyBD,EAAQxlB,UAAUolB,GAEzCzuB,EAAIF,KAAKc,OAAO,gBAEhBkG,GAAUE,YAAY,GAExBkG,EAAe,GAAIG,IACjBD,EAAazE,GAAuB0R,kBAAkB,KAAM,SAAUrM,EAAG2N,GAC3E,IAAI7U,EAAME,WAAV,CACA,GAAI0c,GAAc1jB,EAAEwJ,MAEpB,IAAIka,EAAYja,KAMd,YALIsa,EACFpjB,EAAE4J,QAAQwZ,GAEVpjB,EAAE8J,cAMN,IAAIkZ,GAAeD,EAAYxkB,KAC/BoQ,IAAUqU,KAAkBA,EAAepU,GAAsBoU,GAEjE,IAAIoL,GAAQ,GAAIjhB,IACZic,EAAQ,GAAIjc,GAChBZ,GAAaa,cAAc,GAAIO,IAAiByb,EAAOgF,IACvDA,EAAMhhB,cAAc4V,EAAata,UAC/B,SAASM,GAAKhJ,EAAE6J,OAAOb,IACvB,SAAUqlB,GAAOruB,EAAE4J,QAAQykB,IAC3B,WACEjF,EAAMhc,cAAc0gB,EAASplB,UAAUsS,EAAS,SAASsT,GACvDtuB,EAAE4J,QAAQ0kB,IACT,WACDtuB,EAAE8J,iBAGJ2kB,EAAY5kB,OAAO,MACnBukB,EAAM9f,eAIZ,OAAO,IAAIsJ,KAAgBuW,EAAwB5hB,EAAcE,EAAYohB,EAAiB1nB,MAGzFqoB,GACPxM,GAEF3C,IAAgBqP,WAAa,SAAUZ,GACrC,MAAO,IAAIU,IAAqB7lB,EAAOxJ,MAAO2uB,GAGhD,IAAIa,IAAkB,SAAS3U,GAE7B,QAAS2U,GAAe1uB,EAAQ2uB,EAAaC,EAASC,GACpD3vB,KAAKc,OAASA,EACdd,KAAKyvB,YAAcA,EACnBzvB,KAAK0vB,QAAUA,EACf1vB,KAAK2vB,KAAOA,EACZ9U,EAAUnX,KAAK1D,MAOjB,MAbAuW,IAASiZ,EAAgB3U,GASzB2U,EAAerkB,UAAU+X,cAAgB,SAASriB,GAChD,MAAOb,MAAKc,OAAOyI,UAAU,GAAIqmB,IAAa/uB,EAAEb,QAG3CwvB,GACP3M,IAEE+M,GAAgB,SAAU/U,GAE5B,QAAS+U,GAAa/uB,EAAGoI,GACvBjJ,KAAK2mB,GAAK9lB,EACVb,KAAK4qB,GAAK3hB,EACVjJ,KAAKyL,IAAMxC,EAAOwmB,YAClBzvB,KAAK6vB,IAAM5mB,EAAOymB,QAClB1vB,KAAKiH,GAAKgC,EAAO0mB,KACjB3vB,KAAK8vB,KAAM,EACX9vB,KAAKyH,GAAK,KACVzH,KAAK+vB,KAAM,EACX/vB,KAAKuH,GAAK,EACVsT,EAAUnX,KAAK1D,MAyBjB,MApCAuW,IAASqZ,EAAc/U,GAcvB+U,EAAazkB,UAAUzB,KAAO,SAAUG,GAQtC,OAPC7J,KAAK+vB,MAAQ/vB,KAAK+vB,KAAM,GACrB/vB,KAAK8vB,IACP9vB,KAAKyH,GAAK+C,GAASxK,KAAKyL,KAAKzL,KAAKyH,GAAIoC,EAAG7J,KAAKuH,GAAIvH,KAAK4qB,KAEvD5qB,KAAKyH,GAAKzH,KAAK6vB,IAAMrlB,GAASxK,KAAKyL,KAAKzL,KAAKiH,GAAI4C,EAAG7J,KAAKuH,GAAIvH,KAAK4qB,IAAM/gB,EACxE7J,KAAK8vB,KAAM,GAET9vB,KAAKyH,KAAOtH,GAAmBH,KAAK2mB,GAAGlc,QAAQzK,KAAKyH,GAAGvH,IAC3DF,KAAK2mB,GAAGjc,OAAO1K,KAAKyH,QACpBzH,MAAKuH,OAGPqoB,EAAazkB,UAAU7K,MAAQ,SAAUJ,GACvCF,KAAK2mB,GAAGlc,QAAQvK,IAGlB0vB,EAAazkB,UAAUmW,UAAY,YAChCthB,KAAK+vB,KAAO/vB,KAAK6vB,KAAO7vB,KAAK2mB,GAAGjc,OAAO1K,KAAKiH,IAC7CjH,KAAK2mB,GAAGhc,eAGHilB,GACPxO,GASFlB,IAAgB8P,KAAO,WACrB,GAAqBL,GAAjBD,GAAU,EAAaD,EAAcxvB,UAAU,EAKnD,OAJyB,KAArBA,UAAUR,SACZiwB,GAAU,EACVC,EAAO1vB,UAAU,IAEZ,GAAIuvB,IAAexvB,KAAMyvB,EAAaC,EAASC,GAGxD,IAAIM,IAAsB,SAAUpV,GAElC,QAASoV,GAAmBnvB,EAAQwe,GAClCtf,KAAKc,OAASA,EACdd,KAAKkwB,GAAK5Q,EACVzE,EAAUnX,KAAK1D,MAOjB,MAXAuW,IAAS0Z,EAAoBpV,GAO7BoV,EAAmB9kB,UAAU+X,cAAgB,SAAUriB,GACrD,MAAOb,MAAKc,OAAOyI,UAAU,GAAI4mB,IAAiBtvB,EAAGb,KAAKkwB,MAGrDD,GACPpN,IAEEsN,GAAoB,SAAUtV,GAEhC,QAASsV,GAAiBtvB,EAAGye,GAC3Btf,KAAK2mB,GAAK9lB,EACVb,KAAKkwB,GAAK5Q,EACVtf,KAAKisB,MACLpR,EAAUnX,KAAK1D,MAgBjB,MArBAuW,IAAS4Z,EAAkBtV,GAQ3BsV,EAAiBhlB,UAAUzB,KAAO,SAAUG,GAC1C7J,KAAKisB,GAAGvqB,KAAKmI,GACb7J,KAAKisB,GAAGxsB,OAASO,KAAKkwB,IAAMlwB,KAAK2mB,GAAGjc,OAAO1K,KAAKisB,GAAG5d,UAGrD8hB,EAAiBhlB,UAAU7K,MAAQ,SAAUJ,GAC3CF,KAAK2mB,GAAGlc,QAAQvK,IAGlBiwB,EAAiBhlB,UAAUmW,UAAY,WACrCthB,KAAK2mB,GAAGhc,eAGHwlB,GACP/O,GAUFlB,IAAgBkQ,SAAW,SAAUzpB,GACnC,GAAY,EAARA,EAAa,KAAM,IAAIoN,GAC3B,OAAO,IAAIkc,IAAmBjwB,KAAM2G,IAWtCuZ,GAAgBmQ,UAAY,WAC1B,GAAY1nB,GAAWmG,EAAQ,CACzB7O,WAAUR,QAAUmJ,GAAY3I,UAAU,KAC9C0I,EAAY1I,UAAU,GACtB6O,EAAQ,GAERnG,EAAYmS,EAEd,KAAI,GAAI1R,MAAWxJ,EAAIkP,EAAOtP,EAAMS,UAAUR,OAAYD,EAAJI,EAASA,IAAOwJ,EAAK1H,KAAKzB,UAAUL,GAC1F,OAAO+kB,KAAcyB,GAAoBhd,EAAMT,GAAY3I,OAAO+jB,SAGpE,IAAIuM,IAAoB,SAAUzV,GAEhC,QAASyV,GAAiBzvB,EAAGye,GAC3Btf,KAAK2mB,GAAK9lB,EACVb,KAAKkwB,GAAK5Q,EACVtf,KAAKisB,MACLpR,EAAUnX,KAAK1D,MAiBjB,MAtBAuW,IAAS+Z,EAAkBzV,GAQ3ByV,EAAiBnlB,UAAUzB,KAAO,SAAUG,GAC1C7J,KAAKisB,GAAGvqB,KAAKmI,GACb7J,KAAKisB,GAAGxsB,OAASO,KAAKkwB,IAAMlwB,KAAKisB,GAAG5d,SAGtCiiB,EAAiBnlB,UAAU7K,MAAQ,SAAUJ,GAC3CF,KAAK2mB,GAAGlc,QAAQvK,IAGlBowB,EAAiBnlB,UAAUmW,UAAY,WACrC,KAAOthB,KAAKisB,GAAGxsB,OAAS,GAAKO,KAAK2mB,GAAGjc,OAAO1K,KAAKisB,GAAG5d,QACpDrO,MAAK2mB,GAAGhc,eAGH2lB,GACPlP,GAUFlB,IAAgBqQ,SAAW,SAAU5pB,GACnC,GAAY,EAARA,EAAa,KAAM,IAAIoN,GAC3B,IAAIjT,GAASd,IACb,OAAO,IAAIwM,IAAoB,SAAU3L,GACvC,MAAOC,GAAOyI,UAAU,GAAI+mB,IAAiBzvB,EAAG8F,KAC/C7F,IAGPof,GAAgBsQ,cAAgBtQ,GAAgBuQ,UAAY,SAAStmB,EAAU8G,EAAgB2D,GAC3F,MAAO,IAAIwO,IAAkBpjB,KAAMmK,EAAU8G,EAAgB2D,GAASkU,MAAM,GAE9E,IAAI4H,IAAiB,SAAU7V,GAG7B,QAAS6V,GAAc5vB,EAAQqJ,EAAUyK,GACvC5U,KAAKc,OAASA,EACdd,KAAKmK,SAAWuK,GAAavK,EAAUyK,EAAS,GAChDiG,EAAUnX,KAAK1D,MAGjB,QAAS2wB,GAASxmB,EAAUyC,GAC1B,MAAO,UAAU/C,EAAGjK,EAAGiB,GAAK,MAAOsJ,GAASzG,KAAK1D,KAAM4M,EAAKzC,SAASN,EAAGjK,EAAGiB,GAAIjB,EAAGiB,IAYpF,QAASwiB,GAAcxiB,EAAGsJ,EAAUrJ,GAClCd,KAAKa,EAAIA,EACTb,KAAKmK,SAAWA,EAChBnK,KAAKc,OAASA,EACdd,KAAKJ,EAAI,EACTwhB,GAAiB1d,KAAK1D,MAiBxB,MA3CAuW,IAASma,EAAe7V,GAYxB6V,EAAcvlB,UAAUylB,YAAc,SAAUzmB,EAAUyK,GACxD,MAAO,IAAI8b,GAAc1wB,KAAKc,OAAQ6vB,EAASxmB,EAAUnK,MAAO4U,IAGlE8b,EAAcvlB,UAAU+X,cAAgB,SAAUriB,GAChD,MAAOb,MAAKc,OAAOyI,UAAU,GAAI8Z,GAAcxiB,EAAGb,KAAKmK,SAAUnK,QAGnEuW,GAAS8M,EAAejC,IASxBiC,EAAclY,UAAUzB,KAAO,SAASG,GACtC,GAAIjG,GAAS4G,GAASxK,KAAKmK,UAAUN,EAAG7J,KAAKJ,IAAKI,KAAKc,OACvD,OAAI8C,KAAWzD,GAAmBH,KAAKa,EAAE4J,QAAQ7G,EAAO1D,OACxDF,MAAKa,EAAE6J,OAAO9G,IAGhByf,EAAclY,UAAU7K,MAAQ,SAAUJ,GACxCF,KAAKa,EAAE4J,QAAQvK,IAGjBmjB,EAAclY,UAAUmW,UAAY,WAClCthB,KAAKa,EAAE8J,eAGF+lB,GAEP7N,GAQF3C,IAAgBqD,IAAMrD,GAAgB2Q,OAAS,SAAU1mB,EAAUyK,GACjE,GAAIkc,GAAiC,kBAAb3mB,GAA0BA,EAAW,WAAc,MAAOA,GAClF,OAAOnK,gBAAgB0wB,IACrB1wB,KAAK4wB,YAAYE,EAAYlc,GAC7B,GAAI8b,IAAc1wB,KAAM8wB,EAAYlc,IAwBxCsL,GAAgB6Q,MAAQ,WACtB,GAAIvxB,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,EAC7C,IAAY,IAARA,EAAa,KAAM,IAAI4C,OAAM,sCACjC,KAAI,GAAIxC,GAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EACnD,OAAOI,MAAKujB,IAAI3Z,EAAQR,EAAM5J,KAGlC0gB,GAAgB8Q,QAAU9Q,GAAgB+Q,WAAa,SAAS9mB,EAAU8G,EAAgB2D,GACtF,MAAO,IAAIwO,IAAkBpjB,KAAMmK,EAAU8G,EAAgB2D,GAAS4U,YAG1E5W,GAAG7C,WAAW5E,UAAU+lB,cAAgB,SAAS/mB,EAAU8G,EAAgB2D,GACvE,MAAO,IAAIwO,IAAkBpjB,KAAMmK,EAAU8G,EAAgB2D,GAASwW,eAExE,IAAI+F,IAAkB,SAAStW,GAE7B,QAASsW,GAAerwB,EAAQ6F,GAC9B3G,KAAKc,OAASA,EACdd,KAAKoxB,OAASzqB,EACdkU,EAAUnX,KAAK1D,MAOjB,QAASqxB,GAAaxwB,EAAGye,GACvBtf,KAAK2mB,GAAK9lB,EACVb,KAAK6qB,GAAKvL,EACV8B,GAAiB1d,KAAK1D,MAexB,MA7BAuW,IAAS4a,EAAgBtW,GAOzBsW,EAAehmB,UAAU+X,cAAgB,SAAUriB,GACjD,MAAOb,MAAKc,OAAOyI,UAAU,GAAI8nB,GAAaxwB,EAAGb,KAAKoxB,UASxD7a,GAAS8a,EAAcjQ,IAEvBiQ,EAAalmB,UAAUzB,KAAO,SAAUG,GAClC7J,KAAK6qB,IAAM,EACb7qB,KAAK2mB,GAAGjc,OAAOb,GAEf7J,KAAK6qB,MAGTwG,EAAalmB,UAAU7K,MAAQ,SAASJ,GAAKF,KAAK2mB,GAAGlc,QAAQvK,IAC7DmxB,EAAalmB,UAAUmW,UAAY,WAAathB,KAAK2mB,GAAGhc,eAEjDwmB,GACPtO,GAOF3C,IAAgBoR,KAAO,SAAU3qB,GAC/B,GAAY,EAARA,EAAa,KAAM,IAAIoN,GAC3B,OAAO,IAAIod,IAAenxB,KAAM2G,GAGlC,IAAI4qB,IAAuB,SAAU1W,GAEnC,QAAS0W,GAAoBzwB,EAAQmJ,GACnCjK,KAAKc,OAASA,EACdd,KAAKyL,IAAMxB,EACX4Q,EAAUnX,KAAK1D,MAOjB,MAXAuW,IAASgb,EAAqB1W,GAO9B0W,EAAoBpmB,UAAU+X,cAAgB,SAAUriB,GACtD,MAAOb,MAAKc,OAAOyI,UAAU,GAAIioB,IAAkB3wB,EAAGb,QAGjDuxB,GACP1O,IAEE2O,GAAqB,SAAU3W,GAGjC,QAAS2W,GAAkB3wB,EAAGkJ,GAC5B/J,KAAK2mB,GAAK9lB,EACVb,KAAK4qB,GAAK7gB,EACV/J,KAAKuH,GAAK,EACVvH,KAAK6qB,IAAK,EACVhQ,EAAUnX,KAAK1D,MAcjB,MArBAuW,IAASib,EAAmB3W,GAU5B2W,EAAkBrmB,UAAUzB,KAAO,SAAUG,GAC3C,IAAK7J,KAAK6qB,GAAI,CACZ,GAAIna,GAAMlG,GAASxK,KAAK4qB,GAAGnf,KAAK5B,EAAG7J,KAAKuH,KAAMvH,KAAK4qB,GACnD,IAAIla,IAAQvQ,GAAY,MAAOH,MAAK2mB,GAAGlc,QAAQiG,EAAIxQ,EACnDF,MAAK6qB,IAAMna,EAEb1Q,KAAK6qB,IAAM7qB,KAAK2mB,GAAGjc,OAAOb,IAE5B2nB,EAAkBrmB,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAK2mB,GAAGlc,QAAQvK,IACnEsxB,EAAkBrmB,UAAUmW,UAAY,WAActhB,KAAK2mB,GAAGhc,eAEvD6mB,GACPpQ,GAYFlB,IAAgBuR,UAAY,SAAUrsB,EAAWwP,GAC/C,GAAI3K,GAAKyK,GAAatP,EAAWwP,EAAS,EAC1C,OAAO,IAAI2c,IAAoBvxB,KAAMiK,GAGvC,IAAIynB,IAAkB,SAAS7W,GAE7B,QAAS6W,GAAe5wB,EAAQ6F,GAC9B3G,KAAKc,OAASA,EACdd,KAAKoxB,OAASzqB,EACdkU,EAAUnX,KAAK1D,MAOjB,QAAS2xB,GAAa9wB,EAAGye,GACvBtf,KAAK2mB,GAAK9lB,EACVb,KAAKkwB,GAAK5Q,EACVtf,KAAK6qB,GAAKvL,EACV8B,GAAiB1d,KAAK1D,MAexB,MA9BAuW,IAASmb,EAAgB7W,GAOzB6W,EAAevmB,UAAU+X,cAAgB,SAAUriB,GACjD,MAAOb,MAAKc,OAAOyI,UAAU,GAAIooB,GAAa9wB,EAAGb,KAAKoxB,UAUxD7a,GAASob,EAAcvQ,IAEvBuQ,EAAaxmB,UAAUzB,KAAO,SAAUG,GAClC7J,KAAK6qB,KAAO,IACd7qB,KAAK2mB,GAAGjc,OAAOb,GACf7J,KAAK6qB,IAAM,GAAK7qB,KAAK2mB,GAAGhc,gBAI5BgnB,EAAaxmB,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAK2mB,GAAGlc,QAAQvK,IAC9DyxB,EAAaxmB,UAAUmW,UAAY,WAActhB,KAAK2mB,GAAGhc,eAElD+mB,GACP7O,GAQF3C,IAAgB0R,KAAO,SAAUjrB,EAAOgC,GACtC,GAAY,EAARhC,EAAa,KAAM,IAAIoN,GAC3B,OAAc,KAAVpN,EAAsB8e,GAAgB9c,GACnC,GAAI+oB,IAAe1xB,KAAM2G,GAGlC,IAAIkrB,IAAuB,SAAUhX,GAEnC,QAASgX,GAAoB/wB,EAAQmJ,GACnCjK,KAAKc,OAASA,EACdd,KAAKyL,IAAMxB,EACX4Q,EAAUnX,KAAK1D,MAOjB,MAXAuW,IAASsb,EAAqBhX,GAO9BgX,EAAoB1mB,UAAU+X,cAAgB,SAAUriB,GACtD,MAAOb,MAAKc,OAAOyI,UAAU,GAAIuoB,IAAkBjxB,EAAGb,QAGjD6xB,GACPhP,IAEEiP,GAAqB,SAAUjX,GAGjC,QAASiX,GAAkBjxB,EAAGkJ,GAC5B/J,KAAK2mB,GAAK9lB,EACVb,KAAK4qB,GAAK7gB,EACV/J,KAAKuH,GAAK,EACVvH,KAAK6qB,IAAK,EACVhQ,EAAUnX,KAAK1D,MAiBjB,MAxBAuW,IAASub,EAAmBjX,GAU5BiX,EAAkB3mB,UAAUzB,KAAO,SAAUG,GAC3C,MAAI7J,MAAK6qB,KACP7qB,KAAK6qB,GAAKrgB,GAASxK,KAAK4qB,GAAGnf,KAAK5B,EAAG7J,KAAKuH,KAAMvH,KAAK4qB,IAC/C5qB,KAAK6qB,KAAO1qB,IAAmBH,KAAK2mB,GAAGlc,QAAQzK,KAAK6qB,GAAG3qB,QAEzDF,KAAK6qB,GACP7qB,KAAK2mB,GAAGjc,OAAOb,GAEf7J,KAAK2mB,GAAGhc,gBAGZmnB,EAAkB3mB,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAK2mB,GAAGlc,QAAQvK,IACnE4xB,EAAkB3mB,UAAUmW,UAAY,WAActhB,KAAK2mB,GAAGhc,eAEvDmnB,GACP1Q,GASFlB,IAAgB6R,UAAY,SAAU3sB,EAAWwP,GAC/C,GAAI3K,GAAKyK,GAAatP,EAAWwP,EAAS,EAC1C,OAAO,IAAIid,IAAoB7xB,KAAMiK,GAGvC,IAAI+nB,IAAoB,SAAUnX,GAGhC,QAASmX,GAAiBlxB,EAAQsE,EAAWwP,GAC3C5U,KAAKc,OAASA,EACdd,KAAKoF,UAAYsP,GAAatP,EAAWwP,EAAS,GAClDiG,EAAUnX,KAAK1D,MAOjB,QAASiyB,GAAe7sB,EAAWwH,GACjC,MAAO,UAAS/C,EAAGjK,EAAGiB,GAAK,MAAO+L,GAAKxH,UAAUyE,EAAGjK,EAAGiB,IAAMuE,EAAU1B,KAAK1D,KAAM6J,EAAGjK,EAAGiB,IAQ1F,QAASwiB,GAAcxiB,EAAGuE,EAAWtE,GACnCd,KAAKa,EAAIA,EACTb,KAAKoF,UAAYA,EACjBpF,KAAKc,OAASA,EACdd,KAAKJ,EAAI,EACTwhB,GAAiB1d,KAAK1D,MAmBxB,MA7CAuW,IAASyb,EAAkBnX,GAQ3BmX,EAAiB7mB,UAAU+X,cAAgB,SAAUriB,GACnD,MAAOb,MAAKc,OAAOyI,UAAU,GAAI8Z,GAAcxiB,EAAGb,KAAKoF,UAAWpF,QAOpEgyB,EAAiB7mB,UAAU+mB,eAAiB,SAAS9sB,EAAWwP,GAC9D,MAAO,IAAIod,GAAiBhyB,KAAKc,OAAQmxB,EAAe7sB,EAAWpF,MAAO4U,IAG5E2B,GAAS8M,EAAejC,IASxBiC,EAAclY,UAAUzB,KAAO,SAASG,GACtC,GAAIsoB,GAAc3nB,GAASxK,KAAKoF,WAAWyE,EAAG7J,KAAKJ,IAAKI,KAAKc,OAC7D,OAAIqxB,KAAgBhyB,GACXH,KAAKa,EAAE4J,QAAQ0nB,EAAYjyB,QAEpCiyB,GAAenyB,KAAKa,EAAE6J,OAAOb,KAG/BwZ,EAAclY,UAAU7K,MAAQ,SAAUJ,GACxCF,KAAKa,EAAE4J,QAAQvK,IAGjBmjB,EAAclY,UAAUmW,UAAY,WAClCthB,KAAKa,EAAE8J,eAGFqnB,GAEPnP,GAQF3C,IAAgBsI,OAAStI,GAAgBkS,MAAQ,SAAUhtB,EAAWwP,GACpE,MAAO5U,gBAAgBgyB,IAAmBhyB,KAAKkyB,eAAe9sB,EAAWwP,GACvE,GAAIod,IAAiBhyB,KAAMoF,EAAWwP,IAyC5C7E,GAAWsiB,aAAe,SAAUpoB,EAAIC,EAAKC,GAC3C,MAAO,YACU,mBAARD,KAAwBA,EAAMlK,KAGrC,KAAI,GADAR,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EACnD,OAAOoK,GAAmBC,EAAIC,EAAKC,EAAUf,KA4CjD2G,GAAWuiB,iBAAmB,SAAUroB,EAAIC,EAAKC,GAC/C,MAAO;AACU,mBAARD,KAAwBA,EAAMlK,KAErC,KAAI,GADAR,GAAMS,UAAUR,OAAQ2J,EAAO,GAAIzJ,OAAMH,GACrCI,EAAI,EAAOJ,EAAJI,EAASA,IAAOwJ,EAAKxJ,GAAKK,UAAUL,EACnD,OAAOgL,GAAqBX,EAAIC,EAAKC,EAAUf,KAqBjDiC,EAAiBF,UAAUgE,QAAU,WAC9BnP,KAAKkH,aACRlH,KAAKuL,GAAGgnB,oBAAoBvyB,KAAKwL,GAAIxL,KAAKyL,KAAK,GAC/CzL,KAAKkH,YAAa,IAuBtB0L,GAAGE,OAAO0f,iBAAkB,CAE5B,IAAIC,IAAmB,SAAS5X,GAE9B,QAAS4X,GAAgBznB,EAAIzG,EAAM0F,GACjCjK,KAAK0yB,IAAM1nB,EACXhL,KAAKwL,GAAKjH,EACVvE,KAAKyL,IAAMxB,EACX4Q,EAAUnX,KAAK1D,MAGjB,QAAS2yB,GAAc9xB,EAAGoJ,GACxB,MAAO,YACL,GAAIK,GAAUrK,UAAU,EACxB,OAAIsK,IAAWN,KACbK,EAAUE,GAASP,GAAIlK,MAAM,KAAME,WAC/BqK,IAAYnK,IAAmBU,EAAE4J,QAAQH,EAAQpK,OAEvDW,GAAE6J,OAAOJ,IAWb,MA1BAiM,IAASkc,EAAiB5X,GAmB1B4X,EAAgBtnB,UAAU+X,cAAgB,SAAUriB,GAClD,MAAO8K,GACL3L,KAAK0yB,IACL1yB,KAAKwL,GACLmnB,EAAc9xB,EAAGb,KAAKyL,OAGnBgnB,GACP5P,GASF9S,IAAW6iB,UAAY,SAAUC,EAASjnB,EAAWzB,GAEnD,MAAI0oB,GAAQC,YACHC,GACL,SAAUC,GAAKH,EAAQC,YAAYlnB,EAAWonB,IAC9C,SAAUA,GAAKH,EAAQI,eAAernB,EAAWonB,IACjD7oB,GAICyI,GAAGE,OAAO0f,iBAEa,kBAAfK,GAAQK,IAA4C,kBAAhBL,GAAQM,IAQlD,GAAIV,IAAgBI,EAASjnB,EAAWzB,GAAUipB,UAAUC,WAPxDN,GACL,SAAUC,GAAKH,EAAQK,GAAGtnB,EAAWonB,IACrC,SAAUA,GAAKH,EAAQM,IAAIvnB,EAAWonB,IACtC7oB,GAOR,IAAImpB,IAA0B,SAASzY,GAErC,QAASyY,GAAuBrnB,EAAKsnB,EAAKtpB,GACxCjK,KAAKwzB,KAAOvnB,EACZjM,KAAKyzB,KAAOF,EACZvzB,KAAKyL,IAAMxB,EACX4Q,EAAUnX,KAAK1D,MAGjB,QAAS2yB,GAAc9xB,EAAGoJ,GACxB,MAAO,YACL,GAAIK,GAAUrK,UAAU,EACxB,OAAIsK,IAAWN,KACbK,EAAUE,GAASP,GAAIlK,MAAM,KAAME,WAC/BqK,IAAYnK,IAAmBU,EAAE4J,QAAQH,EAAQpK,OAEvDW,GAAE6J,OAAOJ,IAUb,QAASopB,GAAuBH,EAAKtpB,EAAI0pB,GACvC3zB,KAAKyzB,KAAOF,EACZvzB,KAAKyL,IAAMxB,EACXjK,KAAK4zB,KAAOD,EACZ3zB,KAAKkH,YAAa,EAUpB,MAvCAqP,IAAS+c,EAAwBzY,GAmBjCyY,EAAuBnoB,UAAU+X,cAAgB,SAAUriB,GACzD,GAAIoJ,GAAK0oB,EAAc9xB,EAAGb,KAAKyL,KAC3BooB,EAAc7zB,KAAKwzB,KAAKvpB,EAC5B,OAAO,IAAIypB,GAAuB1zB,KAAKyzB,KAAMxpB,EAAI4pB,IAUnDH,EAAuBvoB,UAAUgE,QAAU,WACrCnP,KAAKkH,aACPqD,GAAWvK,KAAKyzB,OAASzzB,KAAKyzB,KAAKzzB,KAAKyL,IAAKzL,KAAK4zB,MAClD5zB,KAAKkH,YAAa,IAIfosB,GACPzQ,IASEkQ,GAAmBhjB,GAAWgjB,iBAAmB,SAAUe,EAAYC,EAAe5pB,GACxF,MAAO,IAAImpB,IAAuBQ,EAAYC,EAAe5pB,GAAUipB,UAAUC,YAG/EW,GAAyB,SAASnZ,GAEpC,QAASmZ,GAAsBjqB,EAAG3C,GAChCpH,KAAK4qB,GAAK7gB,EACV/J,KAAKiH,GAAKG,EACVyT,EAAUnX,KAAK1D,MAGjB,QAASi0B,GAAa7sB,EAAGJ,GACvB,GAAInG,GAAImG,EAAM,GAAIkX,EAAOlX,EAAM,EAC/BnG,GAAE6J,OAAOwT,GACTrd,EAAE8J,cAGJ,QAASupB,GAAc9sB,EAAGJ,GACxB,GAAInG,GAAImG,EAAM,GAAI8D,EAAM9D,EAAM,EAC9BnG,GAAE4J,QAAQK,GAgBZ,MA/BAyL,IAASyd,EAAuBnZ,GAkBhCmZ,EAAsB7oB,UAAU+X,cAAgB,SAASriB,GACvD,GAAIunB,GAAM,GAAIpa,IAA8BpB,EAAO5M,IASnD,OAPAA,MAAK4qB,GACFnX,KAAK,SAAUyK,GACdkK,EAAIna,cAAcrB,EAAK3F,GAAGuS,UAAU3Y,EAAGqd,GAAO+V,KAC7C,SAAUnpB,GACXsd,EAAIna,cAAcrB,EAAK3F,GAAGuS,UAAU3Y,EAAGiK,GAAMopB,MAG1C9L,GAGF4L,GACPnR,IAOEpT,GAAwBM,GAAWokB,YAAc,SAAUC,EAASzrB,GAEtE,MADAA,KAAcA,EAAYiI,IACnB,GAAIojB,IAAsBI,EAASzrB,GAc5CuX,IAAgBmU,UAAY,SAAUC,GAEpC,GADAA,IAAgBA,EAAc1hB,GAAGE,OAAOC,UACnCuhB,EAAe,KAAM,IAAItgB,IAAkB,qDAChD,IAAIlT,GAASd,IACb,OAAO,IAAIs0B,GAAY,SAAUC,EAASC,GAExC,GAAIp1B,EACJ0B,GAAOyI,UAAU,SAAU6a,GACzBhlB,EAAQglB,GACPoQ,EAAQ,WACTD,EAAQn1B,QAUd2Q,GAAW0kB,WAAa,SAAUC,GAChC,GAAIN,GAAU5pB,GAASkqB,IACvB,OAAIN,KAAYj0B,GAAmB8P,GAAgBmkB,EAAQl0B,GACpDuP,GAAsB2kB,GAG/B,IAAIO,IAAuB,SAAU9Z,GAEnC,QAAS8Z,GAAoB7zB,EAAQ8zB,EAAKC,GACxC70B,KAAKc,OAASA,EACdd,KAAK80B,KAAOF,EACZ50B,KAAK+0B,KAAOF,EACZha,EAAUnX,KAAK1D,MAQjB,MAbAuW,IAASoe,EAAqB9Z,GAQ9B8Z,EAAoBxpB,UAAU+X,cAAgB,SAAUriB,GACtD,GAAIm0B,GAAch1B,KAAKc,OAAOm0B,UAAUj1B,KAAK80B,OAC7C,OAAO,IAAItmB,IAAiBxO,KAAK+0B,KAAKC,GAAazrB,UAAU1I,GAAIm0B,EAAYE,YAGxEP,GACP9R,GAmBF3C,IAAgB+U,UAAY,SAAUE,EAA0BhrB,GAC9D,MAAOI,IAAW4qB,GAChB,GAAIR,IAAoB30B,KAAMm1B,EAA0BhrB,GACxD,GAAIirB,IAAsBp1B,KAAMm1B,IAcpCjV,GAAgBkT,QAAU,SAAUjpB,GAClC,MAAOA,IAAYI,GAAWJ,GAC5BnK,KAAKi1B,UAAU,WAAc,MAAO,IAAInG,KAAc3kB,GACtDnK,KAAKi1B,UAAU,GAAInG,MAQvB5O,GAAgBmV,MAAQ,WACtB,MAAOr1B,MAAKozB,UAAUC,YAcxBnT,GAAgBoV,YAAc,SAAUnrB,GACtC,MAAOA,IAAYI,GAAWJ,GAC5BnK,KAAKi1B,UAAU,WAAc,MAAO,IAAI7qB,KAAmBD,GAC3DnK,KAAKi1B,UAAU,GAAI7qB,MAevB8V,GAAgBqV,aAAe,SAAUC,EAAwBC,GAC/D,MAA4B,KAArBx1B,UAAUR,OACfO,KAAKi1B,UAAU,WACb,MAAO,IAAIS,IAAgBD,IAC1BD,GACHx1B,KAAKi1B,UAAU,GAAIS,IAAgBF,KASvCtV,GAAgByV,WAAa,SAAUF,GACrC,MAAOz1B,MAAKu1B,aAAaE,GAAcpC,YAmBzCnT,GAAgB0V,OAAS,SAAUzrB,EAAU0rB,EAAYC,EAAYntB,GACnE,MAAOwB,IAAYI,GAAWJ,GAC5BnK,KAAKi1B,UAAU,WAAc,MAAO,IAAIc,IAAcF,EAAYC,EAAYntB,IAAewB,GAC7FnK,KAAKi1B,UAAU,GAAIc,IAAcF,EAAYC,EAAYntB,KAkB7DuX,GAAgB8V,YAAc,SAAUH,EAAYC,EAAYntB,GAC9D,MAAO3I,MAAK41B,OAAO,KAAMC,EAAYC,EAAYntB,GAAW0qB,WAG9D,IAAI4C,IAAsB,SAAUpb,GAElC,QAASob,GAAmBn1B,GAC1Bd,KAAKc,OAASA,EACdd,KAAKoxB,OAAS,EACdpxB,KAAKk2B,yBAA2B,KAChCrb,EAAUnX,KAAK1D,MASjB,QAAS4Y,GAAmB7O,EAAG3C,GAC7BpH,KAAK4qB,GAAK7gB,EACV/J,KAAKiH,GAAKG,EACVpH,KAAKkH,YAAa,EAWpB,MA5BAqP,IAAS0f,EAAoBpb,GAQ7Bob,EAAmB9qB,UAAU+X,cAAgB,SAAUriB,GACrD,GAAIuM,GAAepN,KAAKc,OAAOyI,UAAU1I,EAEzC,OADkB,OAAhBb,KAAKoxB,SAAiBpxB,KAAKk2B,yBAA2Bl2B,KAAKc,OAAOo0B,WAC7D,GAAItc,GAAmB5Y,KAAMoN,IAStCwL,EAAmBzN,UAAUgE,QAAU,WAChCnP,KAAKkH,aACRlH,KAAKkH,YAAa,EAClBlH,KAAKiH,GAAGkI,UACa,MAAnBnP,KAAK4qB,GAAGwG,QAAgBpxB,KAAK4qB,GAAGsL,yBAAyB/mB,YAIxD8mB,GACPpT,IAEEuS,GAAwBxiB,GAAGwiB,sBAAyB,SAAUva,GAEhE,QAASua,GAAsBt0B,EAAQkQ,GACrChR,KAAKc,OAASA,EACdd,KAAKm2B,YAAc,KACnBn2B,KAAKo2B,QAAUt1B,EAAOwI,eACtBtJ,KAAKq2B,SAAWrlB,EAChB6J,EAAUnX,KAAK1D,MAGjB,QAASs2B,GAAkBrtB,EAAQmE,GACjCpN,KAAK4qB,GAAK3hB,EACVjJ,KAAKiH,GAAKmG,EA2BZ,MAtCAmJ,IAAS6e,EAAuBva,GAchCyb,EAAkBnrB,UAAUgE,QAAU,WAChCnP,KAAKiH,KACPjH,KAAKiH,GAAGkI,UACRnP,KAAKiH,GAAK,KACVjH,KAAK4qB,GAAGuL,YAAc,OAI1Bf,EAAsBjqB,UAAU+pB,QAAU,WACxC,IAAKl1B,KAAKm2B,YAAa,CACrB,GAAI/oB,GAAepN,KAAKo2B,QAAQ7sB,UAAUvJ,KAAKq2B,SAC/Cr2B,MAAKm2B,YAAc,GAAIG,GAAkBt2B,KAAMoN,GAEjD,MAAOpN,MAAKm2B,aAGdf,EAAsBjqB,UAAU2W,WAAa,SAAUjhB,GACrD,MAAOb,MAAKq2B,SAAS9sB,UAAU1I,IAGjCu0B,EAAsBjqB,UAAUkoB,SAAW,WACzC,MAAO,IAAI4C,IAAmBj2B,OAGzBo1B,GACPrlB,IAEE1D,GAAmB,SAASwO,GAE9B,QAASxO,GAAgBoN,EAAIrS,GAC3BpH,KAAKu2B,IAAM9c,EACXzZ,KAAKiH,GAAKG,EACVyT,EAAUnX,KAAK1D,MAOjB,QAAS0a,GAAetT,EAAGvG,GACzBA,EAAE6J,OAAO,GACT7J,EAAE8J,cAGJ,MAhBA4L,IAASlK,EAAiBwO,GAO1BxO,EAAgBlB,UAAU+X,cAAgB,SAAUriB,GAClD,MAAOb,MAAKiH,GAAG6J,eAAejQ,EAAGb,KAAKu2B,IAAK7b,IAQtCrO,GACPwW,IA6CE2T,GAAqBzmB,GAAW0mB,SAAW,SAAUlqB,EAAQ5D,GAC/D,MAAOqE,GAAiCT,EAAQA,EAAQ3D,GAAYD,GAAaA,EAAYiI,IAUzEb,IAAWS,MAAQ,SAAUpE,EAASsqB,EAAmB/tB,GAC7E,GAAI4D,EAOJ,OANA3D,IAAYD,KAAeA,EAAYiI,IACd,MAArB8lB,GAA0D,gBAAtBA,GACtCnqB,EAASmqB,EACA9tB,GAAY8tB,KACrB/tB,EAAY+tB,IAETtqB,YAAmBU,OAA2B,gBAAZV,KAAyBG,IAAWrN,EAClEiN,EAAiBC,EAASzD,GAE/ByD,YAAmBU,OAAQP,IAAWrN,EACjCoN,EAA6BF,EAASsqB,EAAmB/tB,GAE3DqE,EAAiCZ,EAASG,EAAQ5D,GAwI3DuX,IAAgBnR,MAAQ,WACtB,GAAI4nB,GAAW12B,UAAU,EACzB,IAAwB,gBAAb02B,IAAyBA,YAAoB7pB,MAAM,CAC5D,GAAIV,GAAUuqB,EAAUhuB,EAAY1I,UAAU,EAE9C,OADA2I,IAAYD,KAAeA,EAAYiI,IAChCxE,YAAmBU,MACxB2B,EAAwBzO,KAAMoM,EAASzD,GACvCwE,EAAwBnN,KAAMoM,EAASzD,GACpC,GAAIoH,GAAWC,aAAa2mB,IAAapsB,GAAWosB,GACzD,MAAOjoB,GAAkB1O,KAAM22B,EAAU12B,UAAU,GAEnD,MAAM,IAAImC,OAAM,qBAIpB,IAAIw0B,IAAsB,SAAU/b,GAElC,QAAS+b,GAAmB91B,EAAQ2Y,EAAIrS,GACtCwB,GAAYxB,KAAOA,EAAIwJ,IACvB5Q,KAAKc,OAASA,EACdd,KAAKu2B,IAAM9c,EACXzZ,KAAKiH,GAAKG,EACVyT,EAAUnX,KAAK1D,MAUjB,MAhBAuW,IAASqgB,EAAoB/b,GAS7B+b,EAAmBzrB,UAAU+X,cAAgB,SAAUriB,GACrD,GAAIyM,GAAa,GAAIC,GACrB,OAAO,IAAIiB,IACTxO,KAAKc,OAAOyI,UAAU,GAAIstB,IAAiBh2B,EAAGb,KAAKu2B,IAAKv2B,KAAKiH,GAAIqG,IACjEA,IAGGspB,GACP/T,IAEEgU,GAAoB,SAAUhc,GAEhC,QAASgc,GAAiB7tB,EAAUoD,EAASzD,EAAW2E,GACtDtN,KAAK2mB,GAAK3d,EACVhJ,KAAKksB,GAAK9f,EACVpM,KAAKkc,WAAavT,EAClB3I,KAAKkwB,GAAK5iB,EACVtN,KAAK82B,GAAK,KACV92B,KAAK+vB,KAAM,EACX/vB,KAAKmf,IAAM,EACXtE,EAAUnX,KAAK1D,MAkCjB,MA3CAuW,IAASsgB,EAAkBhc,GAiB3Bgc,EAAiB1rB,UAAUzB,KAAO,SAAUG,GAC1C7J,KAAK+vB,KAAM,EACX/vB,KAAK82B,GAAKjtB,CACV,IAAIktB,KAAc/2B,KAAKmf,IAAK1S,EAAI,GAAIuB,GACpChO,MAAKkwB,GAAGjiB,cAAcxB,GACtBA,EAAEwB,cAAcjO,KAAKkc,WAAWpL,eAAe9Q,KAAMA,KAAKksB,GAAI,SAAUhe,EAAGtB,GACzEA,EAAKmjB,KAAOnjB,EAAKuS,MAAQ4X,GAAanqB,EAAK+Z,GAAGjc,OAAOb,GACrD+C,EAAKmjB,KAAM,MAIf8G,EAAiB1rB,UAAU7K,MAAQ,SAAUJ,GAC3CF,KAAKkwB,GAAG/gB,UACRnP,KAAK2mB,GAAGlc,QAAQvK,GAChBF,KAAK+vB,KAAM,EACX/vB,KAAKmf,OAGP0X,EAAiB1rB,UAAUmW,UAAY,WACrCthB,KAAKkwB,GAAG/gB,UACRnP,KAAK+vB,KAAO/vB,KAAK2mB,GAAGjc,OAAO1K,KAAK82B,IAChC92B,KAAK2mB,GAAGhc,cACR3K,KAAK+vB,KAAM,EACX/vB,KAAKmf,OAGA0X,GACPzV,GAiDFlB,IAAgB8W,SAAW,WACzB,GAAIzsB,GAAYtK,UAAU,IACxB,MAAOmP,GAAqBpP,KAAMC,UAAU,GACvC,IAA4B,gBAAjBA,WAAU,GAC1B,MAAO,IAAI22B,IAAmB52B,KAAMC,UAAU,GAAIA,UAAU,GAE5D,MAAM,IAAImC,OAAM,qBAIpB,IAAI60B,IAAuB,SAAUpc,GAEnC,QAASoc,GAAoBn2B,EAAQsG,GACnCpH,KAAKc,OAASA,EACdd,KAAKiH,GAAKG,EACVyT,EAAUnX,KAAK1D,MAOjB,MAXAuW,IAAS0gB,EAAqBpc,GAO9Boc,EAAoB9rB,UAAU+X,cAAgB,SAAUriB,GACtD,MAAOb,MAAKc,OAAOyI,UAAU,GAAI2tB,IAAkBr2B,EAAGb,KAAKiH,MAGtDgwB,GACPpU,IAEEqU,GAAqB,SAAUrc,GAEjC,QAASqc,GAAkBr2B,EAAGuG,GAC5BpH,KAAK2mB,GAAK9lB,EACVb,KAAKiH,GAAKG,EACVyT,EAAUnX,KAAK1D,MAejB,MAnBAuW,IAAS2gB,EAAmBrc,GAO5Bqc,EAAkB/rB,UAAUzB,KAAO,SAAUG,GAC3C7J,KAAK2mB,GAAGjc,QAAStL,MAAOyK,EAAG+D,UAAW5N,KAAKiH,GAAG4F,SAGhDqqB,EAAkB/rB,UAAU7K,MAAQ,SAAUJ,GAC5CF,KAAK2mB,GAAGlc,QAAQvK,IAGlBg3B,EAAkB/rB,UAAUmW,UAAY,WACtCthB,KAAK2mB,GAAGhc,eAGHusB,GACP9V,GAYFlB,IAAgBtS,UAAY,SAAUjF,GAEpC,MADAC,IAAYD,KAAeA,EAAYiI,IAChC,GAAIqmB,IAAoBj3B,KAAM2I,GAGvC,IAAIwuB,IAAoB,SAAStc,GAE/B,QAASsc,GAAiBr2B,EAAQs2B,GAChCp3B,KAAKc,OAASA,EACdd,KAAKq3B,SAAWD,EAChBvc,EAAUnX,KAAK1D,MAmBjB,MAvBAuW,IAAS4gB,EAAkBtc,GAO3Bsc,EAAiBhsB,UAAU+X,cAAgB,SAAUriB,GACnD,GAAImG,IACFnG,EAAGA,EACHqO,OAAO,EACP9P,MAAO,KACPkQ,UAAU,EACVgoB,mBAAoB,GAAItpB,IAI1B,OADAhH,GAAMswB,mBAAmBrpB,cAAcjO,KAAKc,OAAOyI,UAAU,GAAIguB,IAAqBvwB,KAC/E,GAAIwH,IACTxH,EAAMswB,mBACNt3B,KAAKq3B,SAAS9tB,UAAU,GAAIiuB,IAAgBxwB,MAIzCmwB,GACPtU,IAEE2U,GAAmB,SAAS3c,GAE9B,QAAS2c,GAAgBpwB,GACvBpH,KAAKiH,GAAKG,EACVyT,EAAUnX,KAAK1D,MAejB,MAlBAuW,IAASihB,EAAiB3c,GAM1B2c,EAAgBrsB,UAAUssB,eAAiB,WACrCz3B,KAAKiH,GAAGqI,WACVtP,KAAKiH,GAAGqI,UAAW,EACnBtP,KAAKiH,GAAGpG,EAAE6J,OAAO1K,KAAKiH,GAAG7H,QAE3BY,KAAKiH,GAAGiI,OAASlP,KAAKiH,GAAGpG,EAAE8J,eAG7B6sB,EAAgBrsB,UAAUzB,KAAO,WAAc1J,KAAKy3B,kBACpDD,EAAgBrsB,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAKiH,GAAGwD,QAAQvK,IACjEs3B,EAAgBrsB,UAAUmW,UAAY,WAActhB,KAAKy3B,kBAElDD,GACPpW,IAEEmW,GAAwB,SAAS1c,GAEnC,QAAS0c,GAAqBnwB,GAC5BpH,KAAKiH,GAAKG,EACVyT,EAAUnX,KAAK1D,MAajB,MAhBAuW,IAASghB,EAAsB1c,GAM/B0c,EAAqBpsB,UAAUzB,KAAO,SAAUG,GAC9C7J,KAAKiH,GAAGqI,UAAW,EACnBtP,KAAKiH,GAAG7H,MAAQyK,GAElB0tB,EAAqBpsB,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAKiH,GAAGpG,EAAE4J,QAAQvK,IACxEq3B,EAAqBpsB,UAAUmW,UAAY,WACzCthB,KAAKiH,GAAGiI,OAAQ,EAChBlP,KAAKiH,GAAGqwB,mBAAmBnoB,WAGtBooB,GACPnW,GAcFlB,IAAgBwX,OAAS,SAAUC,EAAmBhvB,GAEpD,MADAC,IAAYD,KAAeA,EAAYiI,IACH,gBAAtB+mB,GACZ,GAAIR,IAAiBn3B,KAAMw2B,GAAmBmB,EAAmBhvB,IACjE,GAAIwuB,IAAiBn3B,KAAM23B,GAG/B,IAAIznB,IAAe0C,GAAG1C,aAAe,SAAS1L,GAC5CxE,KAAKwE,QAAUA,GAAW,uBAC1BxE,KAAKuE,KAAO,eACZnC,MAAMsB,KAAK1D,MAEbkQ,IAAa/E,UAAY9L,OAAOwU,OAAOzR,MAAM+I,WAgH7C+U,GAAgB9P,QAAU,WACxB,GAAIumB,GAAW12B,UAAU,EACzB,IAAI02B,YAAoB7pB,OAA4B,gBAAb6pB,GACrC,MAAOvmB,IAAQpQ,KAAM22B,EAAU12B,UAAU,GAAIA,UAAU,GAClD,IAAI8P,GAAWC,aAAa2mB,IAAapsB,GAAWosB,GACzD,MAAOhnB,GAAoB3P,KAAM22B,EAAU12B,UAAU,GAAIA,UAAU,GAEnE,MAAM,IAAImC,OAAM,sBAUpB8d,GAAgB3Q,SAAW,SAAUqoB,EAAgBjvB,GACnDC,GAAYD,KAAeA,EAAYiI,GACvC,IAAIinB,IAAYD,GAAkB,CAClC,IAAgB,GAAZC,EAAiB,KAAM,IAAIC,YAAW,+CAC1C,IAAIh3B,GAASd,IACb,OAAO,IAAIwM,IAAoB,SAAU3L,GACvC,GAAIk3B,GAAa,CACjB,OAAOj3B,GAAOyI,UACZ,SAAUM,GACR,GAAIgD,GAAMlE,EAAUkE,OACD,IAAfkrB,GAAoBlrB,EAAMkrB,GAAcF,KAC1CE,EAAalrB,EACbhM,EAAE6J,OAAOb,KAEX,SAAU3J,GAAKW,EAAE4J,QAAQvK,IAAO,WAAcW,EAAE8J,iBAEnD7J,GAGL,IAAIk3B,IAAsB,SAAUnd,GAElC,QAASmd,GAAmBl3B,EAAQm3B,GAClCj4B,KAAKc,OAASA,EACdd,KAAKk4B,WAAa,GAAIpJ,IAElBmJ,GAAUA,EAAO1uB,UACnBvJ,KAAKi4B,OAASj4B,KAAKk4B,WAAWpP,MAAMmP,GAEpCj4B,KAAKi4B,OAASj4B,KAAKk4B,WAGrBrd,EAAUnX,KAAK1D,MA4BjB,MAvCAuW,IAASyhB,EAAoBnd,GAc7Bmd,EAAmB7sB,UAAU2W,WAAa,SAAUjhB,GAClD,GAAIs3B,GAAOn4B,KAAKc,OAAOsyB,UACrBhmB,EAAe+qB,EAAK5uB,UAAU1I,GAC9Bu3B,EAAa1gB,GAEX2gB,EAAWr4B,KAAKi4B,OAAO9K,uBAAuB5jB,UAAU,SAAU+uB,GAChEA,EACFF,EAAaD,EAAKjD,WAElBkD,EAAWjpB,UACXipB,EAAa1gB,KAIjB,OAAO,IAAIe,KAAgBrL,EAAcgrB,EAAYC,KAGvDL,EAAmB7sB,UAAUotB,MAAQ,WACnCv4B,KAAKk4B,WAAWxtB,QAAO,IAGzBstB,EAAmB7sB,UAAUqtB,OAAS,WACpCx4B,KAAKk4B,WAAWxtB,QAAO,IAGlBstB,GAEPjoB,GAUFmQ,IAAgBmY,SAAW,SAAUJ,GACnC,MAAO,IAAID,IAAmBh4B,KAAMi4B,GAoDtC,IAAIQ,IAA8B,SAAU5d,GAE1C,QAAS4d,GAA2B33B,EAAQm3B,GAC1Cj4B,KAAKc,OAASA,EACdd,KAAKk4B,WAAa,GAAIpJ,IAElBmJ,GAAUA,EAAO1uB,UACnBvJ,KAAKi4B,OAASj4B,KAAKk4B,WAAWpP,MAAMmP,GAEpCj4B,KAAKi4B,OAASj4B,KAAKk4B,WAGrBrd,EAAUnX,KAAK1D,MAmDjB,MA9DAuW,IAASkiB,EAA4B5d,GAcrC4d,EAA2BttB,UAAU2W,WAAa,SAAUjhB,GAG1D,QAAS63B,KAAe,KAAOjrB,EAAEhO,OAAS,GAAKoB,EAAE6J,OAAO+C,EAAEY,SAF1D,GAAYsqB,GAARlrB,KAIAL,EACF2D,GACE/Q,KAAKc,OACLd,KAAKi4B,OAAO5H,WAAU,GAAOlD,uBAC7B,SAAUjP,EAAM0a,GACd,OAAS1a,KAAMA,EAAM0a,WAAYA,KAElCrvB,UACC,SAAUe,GACJquB,IAAuBz5B,GAAaoL,EAAQsuB,aAAeD,GAC7DA,EAAqBruB,EAAQsuB,WAEzBtuB,EAAQsuB,YAAcF,MAE1BC,EAAqBruB,EAAQsuB,WAEzBtuB,EAAQsuB,WACV/3B,EAAE6J,OAAOJ,EAAQ4T,MAEjBzQ,EAAE/L,KAAK4I,EAAQ4T,QAIrB,SAAUpT,GACR4tB,IACA73B,EAAE4J,QAAQK,IAEZ,WACE4tB,IACA73B,EAAE8J,eAGV,OAAOyC,IAGTqrB,EAA2BttB,UAAUotB,MAAQ,WAC3Cv4B,KAAKk4B,WAAWxtB,QAAO,IAGzB+tB,EAA2BttB,UAAUqtB,OAAS,WAC5Cx4B,KAAKk4B,WAAWxtB,QAAO,IAGlB+tB,GAEP1oB,GAWFmQ,IAAgB2Y,iBAAmB,SAAUZ,GAC3C,MAAO,IAAIQ,IAA2Bz4B,KAAMi4B,GAG9C,IAAIa,IAAwB,SAAUje,GAEpC,QAASie,GAAsBh4B,EAAQi4B,EAAapwB,GAClDkS,EAAUnX,KAAK1D,MACfA,KAAKgR,QAAU,GAAIgoB,IAAkBD,EAAapwB,GAClD3I,KAAKc,OAASA,EAAOm0B,UAAUj1B,KAAKgR,SAASqiB,WAW/C,MAfA9c,IAASuiB,EAAsBje,GAO/Bie,EAAqB3tB,UAAU2W,WAAa,SAAUjhB,GACpD,MAAOb,MAAKc,OAAOyI,UAAU1I,IAG/Bi4B,EAAqB3tB,UAAU8tB,QAAU,SAAUC,GACjD,MAAOl5B,MAAKgR,QAAQioB,QAAyB,MAAjBC,EAAwB,GAAKA,IAGpDJ,GAEP/oB,IAEEipB,GAAqB,SAAUne,GAEjC,QAASme,GAAkBD,EAAapwB,GACvB,MAAfowB,IAAwBA,GAAc,GAEtCle,EAAUnX,KAAK1D,MACfA,KAAKgR,QAAU,GAAI8d,IACnB9uB,KAAK+4B,YAAcA,EACnB/4B,KAAKkb,MAAQ6d,KAAmB,KAChC/4B,KAAKm5B,eAAiB,EACtBn5B,KAAKo5B,oBAAsB,KAC3Bp5B,KAAKM,MAAQ,KACbN,KAAKq5B,WAAY,EACjBr5B,KAAKs5B,cAAe,EACpBt5B,KAAK2I,UAAYA,GAAaE,GAgFhC,MA7FA0N,IAASyiB,EAAmBne,GAgB5BlE,GAAcqiB,EAAkB7tB,UAAW8V,IACzCa,WAAY,SAAUjhB,GACpB,MAAOb,MAAKgR,QAAQzH,UAAU1I,IAEhC8J,YAAa,WACX3K,KAAKs5B,cAAe,EACft5B,KAAK+4B,aAAqC,IAAtB/4B,KAAKkb,MAAMzb,OAIlCO,KAAKkb,MAAMxZ,KAAKye,GAAaa,sBAH7BhhB,KAAKgR,QAAQrG,cACb3K,KAAKu5B,0BAKT9uB,QAAS,SAAUnK,GACjBN,KAAKq5B,WAAY,EACjBr5B,KAAKM,MAAQA,EACRN,KAAK+4B,aAAqC,IAAtB/4B,KAAKkb,MAAMzb,OAIlCO,KAAKkb,MAAMxZ,KAAKye,GAAaW,cAAcxgB,KAH3CN,KAAKgR,QAAQvG,QAAQnK,GACrBN,KAAKu5B,0BAKT7uB,OAAQ,SAAUtL,GACZY,KAAKm5B,gBAAkB,EACzBn5B,KAAK+4B,aAAe/4B,KAAKkb,MAAMxZ,KAAKye,GAAaS,aAAaxhB,KAEnC,IAA1BY,KAAKm5B,kBAA2Bn5B,KAAKu5B,wBACtCv5B,KAAKgR,QAAQtG,OAAOtL,KAGxBo6B,gBAAiB,SAAUN,GACzB,GAAIl5B,KAAK+4B,YACP,KAAO/4B,KAAKkb,MAAMzb,OAAS,IAAMy5B,EAAgB,GAA4B,MAAvBl5B,KAAKkb,MAAM,GAAGnN,OAAe,CACjF,GAAIoK,GAAQnY,KAAKkb,MAAM7M,OACvB8J,GAAM7J,OAAOtO,KAAKgR,SACC,MAAfmH,EAAMpK,KACRmrB,KAEAl5B,KAAKu5B,wBACLv5B,KAAKkb,UAKX,MAAOge,IAETD,QAAS,SAAU7wB,GACjBpI,KAAKu5B,uBACL,IAAI3sB,GAAO5M,IAkBX,OAhBAA,MAAKo5B,oBAAsBp5B,KAAK2I,UAAU6Q,SAASpR,EACnD,SAAShB,EAAGxH,GACV,GAAI65B,GAAY7sB,EAAK4sB,gBAAgB55B,GACjCqrB,EAAUre,EAAK0sB,cAAgB1sB,EAAKysB,SACxC,QAAKpO,GAAWwO,EAAY,GAC1B7sB,EAAKusB,eAAiBM,EAEfhiB,GAAiB,WACtB7K,EAAKusB,eAAiB,KAJ1B,SAYKn5B,KAAKo5B,qBAEdG,sBAAuB,WACjBv5B,KAAKo5B,sBACPp5B,KAAKo5B,oBAAoBjqB,UACzBnP,KAAKo5B,oBAAsB,SAK1BJ,GACPjpB,GAWFmQ,IAAgBwZ,WAAa,SAAUX,EAAapwB,GAQlD,MANIowB,IAAenwB,GAAYmwB,KAC7BpwB,EAAYowB,EACZA,GAAc,GAGG,MAAfA,IAAwBA,GAAc,GACnC,GAAID,IAAqB94B,KAAM+4B,EAAapwB,IAQrDuX,GAAgByZ,KAAO,SAAUC,GAG/B,QAASC,KACP/4B,EAAO03B,SAHT,GAAI13B,GAASd,KAAK64B,kBAuBlB,OAjBAe,GAAK9G,YAAY,QAAS+G,GAE1B/4B,EAAOyI,UACL,SAAUM,IACP+vB,EAAKE,MAAMtc,OAAO3T,KAAO/I,EAAOy3B,SAEnC,SAAUztB,GACR8uB,EAAKG,KAAK,QAASjvB,IAErB,YAEG8uB,EAAKI,UAAYJ,EAAKK,MACvBL,EAAK3G,eAAe,QAAS4G,KAGjC/4B,EAAO03B,SAEAoB,EAGT,IAAIM,IAAqB,SAAUrf,GAEjC,QAASqf,GAAkBr5B,EAAGs5B,GAC5Bn6B,KAAK2mB,GAAK9lB,EACVb,KAAKo6B,OAASD,EACdtf,EAAUnX,KAAK1D,MAcjB,MAlBAuW,IAAS2jB,EAAmBrf,GAO5Bqf,EAAkB/uB,UAAUzB,KAAO,SAAUG,GAC3C,GAAI6G,GAAMlG,GAASxK,KAAKo6B,OAAO,sBAAsB12B,KAAK1D,KAAKo6B,OAAQp6B,KAAK2mB,GAAI9c,EAC5E6G,KAAQvQ,IAAYH,KAAK2mB,GAAGlc,QAAQiG,EAAIxQ,IAG9Cg6B,EAAkB/uB,UAAU7K,MAAQ,SAAUJ,GAAKF,KAAK2mB,GAAGlc,QAAQvK,IAEnEg6B,EAAkB/uB,UAAUmW,UAAY,WACtCthB,KAAKo6B,OAAO,uBAAuBp6B,KAAK2mB,KAGnCuT,GACP9Y,GAqBFlB,IAAgBma,UAAY,SAASC,GACnC,GAAIx5B,GAASd,IACb,OAAO,IAAIwM,IAAoB,SAAS3L,GACtC,GAAIs5B,GAAQG,EAAW/oB,GAAqB1Q,GAC5C,OAAOC,GAAOyI,UAAU,GAAI2wB,IAAkBr5B,EAAGs5B,KAChDr5B,GAGL,IAAI0L,IAAsBoG,GAAGpG,oBAAuB,SAAUqO,GAI5D,QAASiI,GAAcC,GACrB,MAAOA,IAAcxY,GAAWwY,EAAW5T,SAAW4T,EACpDxY,GAAWwY,GAActL,GAAiBsL,GAAcrL,GAG5D,QAASzJ,GAAc7G,EAAGJ,GACxB,GAAIgc,GAAMhc,EAAM,GAAI4F,EAAO5F,EAAM,GAC7Bic,EAAMzY,GAASoC,EAAK2tB,aAAa72B,KAAKkJ,EAAMoW,EAC5CC,KAAQ9iB,IAAa6iB,EAAIzB,KAAKphB,GAASD,IAAME,EAAQD,GAASD,GAClE8iB,EAAI/U,cAAc6U,EAAcG,IAGlC,QAASzW,GAAoBjD,EAAWN,GACtCjJ,KAAKc,OAASmI,EACdjJ,KAAKu6B,YAAchxB,EACnBsR,EAAUnX,KAAK1D,MAcjB,MAhCAuW,IAAS/J,EAAqBqO,GAqB9BrO,EAAoBrB,UAAU2W,WAAa,SAAUjhB,GACnD,GAAImiB,GAAM,GAAIG,IAAmBtiB,GAAImG,GAASgc,EAAKhjB,KAOnD,OALI6I,IAAuB0S,mBACzB1S,GAAuB2Q,SAASxS,EAAOiH,GAEvCA,EAAc,KAAMjH,GAEfgc,GAGFxW,GAEPuD,IAEEoT,GAAsB,SAAUtI,GAGlC,QAASsI,GAAmBna,GAC1B6R,EAAUnX,KAAK1D,MACfA,KAAKgJ,SAAWA,EAChBhJ,KAAK6pB,EAAI,GAAI7b,IALfuI,GAAS4M,EAAoBtI,EAQ7B,IAAI2f,GAA8BrX,EAAmBhY,SA8BrD,OA5BAqvB,GAA4B9wB,KAAO,SAAUtK,GAC3C,GAAIwE,GAAS4G,GAASxK,KAAKgJ,SAAS0B,QAAQhH,KAAK1D,KAAKgJ,SAAU5J,EAC5DwE,KAAWzD,KACbH,KAAKmP,UACL/O,EAAQwD,EAAO1D,KAInBs6B,EAA4Bl6B,MAAQ,SAAUwK,GAC5C,GAAIlH,GAAS4G,GAASxK,KAAKgJ,SAASyB,SAAS/G,KAAK1D,KAAKgJ,SAAU8B,EACjE9K,MAAKmP,UACLvL,IAAWzD,IAAYC,EAAQwD,EAAO1D,IAGxCs6B,EAA4BlZ,UAAY,WACtC,GAAI1d,GAAS4G,GAASxK,KAAKgJ,SAAS2B,aAAajH,KAAK1D,KAAKgJ,SAC3DhJ,MAAKmP,UACLvL,IAAWzD,IAAYC,EAAQwD,EAAO1D,IAGxCs6B,EAA4BvsB,cAAgB,SAAU7O,GAASY,KAAK6pB,EAAE5b,cAAc7O,IACpFo7B,EAA4BtjB,cAAgB,WAAc,MAAOlX,MAAK6pB,EAAE3S,iBAExEsjB,EAA4BrrB,QAAU,WACpC0L,EAAU1P,UAAUgE,QAAQzL,KAAK1D,MACjCA,KAAK6pB,EAAE1a,WAGFgU,GACP/B,IAEEqZ,GAAoB,SAAUrzB,EAAGvG,GACnCb,KAAKiH,GAAKG,EACVpH,KAAK2mB,GAAK9lB,EAGZ45B,IAAkBtvB,UAAUgE,QAAU,WACpC,IAAKnP,KAAKiH,GAAGC,YAA0B,OAAZlH,KAAK2mB,GAAa,CAC3C,GAAI9P,GAAM7W,KAAKiH,GAAGyzB,UAAUh6B,QAAQV,KAAK2mB,GACzC3mB,MAAKiH,GAAGyzB,UAAUrjB,OAAOR,EAAK,GAC9B7W,KAAK2mB,GAAK,MAQd,IAAImI,IAAUlc,GAAGkc,QAAW,SAAUjU,GAEpC,QAASiU,KACPjU,EAAUnX,KAAK1D,MACfA,KAAKkH,YAAa,EAClBlH,KAAKqhB,WAAY,EACjBrhB,KAAK06B,aACL16B,KAAK26B,UAAW,EAoFlB,MA1FApkB,IAASuY,EAASjU,GASlBlE,GAAcmY,EAAQ3jB,UAAW8V,GAAS9V,WACxC2W,WAAY,SAAUjhB,GAEpB,MADAgX,IAAc7X,MACTA,KAAKqhB,UAINrhB,KAAK26B,UACP95B,EAAE4J,QAAQzK,KAAKM,OACRoX,KAET7W,EAAE8J,cACK+M,KARL1X,KAAK06B,UAAUh5B,KAAKb,GACb,GAAI45B,IAAkBz6B,KAAMa,KAavC+5B,aAAc,WAAmC,MAArB/iB,IAAc7X,MAAcA,KAAK06B,UAAUj7B,OAAS,GAIhFkL,YAAa,WAEX,GADAkN,GAAc7X,OACTA,KAAKqhB,UAAW,CACnBrhB,KAAKqhB,WAAY,CACjB,KAAK,GAAIzhB,GAAI,EAAGi7B,EAAKv7B,EAAWU,KAAK06B,WAAYl7B,EAAMq7B,EAAGp7B,OAAYD,EAAJI,EAASA,IACzEi7B,EAAGj7B,GAAG+K,aAGR3K,MAAK06B,UAAUj7B,OAAS,IAO5BgL,QAAS,SAAUnK,GAEjB,GADAuX,GAAc7X,OACTA,KAAKqhB,UAAW,CACnBrhB,KAAKqhB,WAAY,EACjBrhB,KAAKM,MAAQA,EACbN,KAAK26B,UAAW,CAChB,KAAK,GAAI/6B,GAAI,EAAGi7B,EAAKv7B,EAAWU,KAAK06B,WAAYl7B,EAAMq7B,EAAGp7B,OAAYD,EAAJI,EAASA,IACzEi7B,EAAGj7B,GAAG6K,QAAQnK,EAGhBN,MAAK06B,UAAUj7B,OAAS,IAO5BiL,OAAQ,SAAUtL,GAEhB,GADAyY,GAAc7X,OACTA,KAAKqhB,UACR,IAAK,GAAIzhB,GAAI,EAAGi7B,EAAKv7B,EAAWU,KAAK06B,WAAYl7B,EAAMq7B,EAAGp7B,OAAYD,EAAJI,EAASA,IACzEi7B,EAAGj7B,GAAG8K,OAAOtL,IAOnB+P,QAAS,WACPnP,KAAKkH,YAAa,EAClBlH,KAAK06B,UAAY,QAUrB5L,EAAQjb,OAAS,SAAU7K,EAAUzI,GACnC,MAAO,IAAIu6B,IAAiB9xB,EAAUzI,IAGjCuuB,GACP/e,IAME3F,GAAewI,GAAGxI,aAAgB,SAAUyQ,GAO9C,QAASzQ,KACPyQ,EAAUnX,KAAK1D,MACfA,KAAKkH,YAAa,EAClBlH,KAAKqhB,WAAY,EACjBrhB,KAAKsP,UAAW,EAChBtP,KAAK06B,aACL16B,KAAK26B,UAAW,EA4FlB,MAxGApkB,IAASnM,EAAcyQ,GAevBlE,GAAcvM,EAAae,UAAW8V,GAAS9V,WAC7C2W,WAAY,SAAUjhB,GAGpB,MAFAgX,IAAc7X,MAETA,KAAKqhB,WAKNrhB,KAAK26B,SACP95B,EAAE4J,QAAQzK,KAAKM,OACNN,KAAKsP,UACdzO,EAAE6J,OAAO1K,KAAKZ,OACdyB,EAAE8J,eAEF9J,EAAE8J,cAGG+M,KAbL1X,KAAK06B,UAAUh5B,KAAKb,GACb,GAAI45B,IAAkBz6B,KAAMa,KAkBvC+5B,aAAc,WAAmC,MAArB/iB,IAAc7X,MAAcA,KAAK06B,UAAUj7B,OAAS,GAIhFkL,YAAa,WACX,GAAI/K,GAAGJ,CAEP,IADAqY,GAAc7X,OACTA,KAAKqhB,UAAW,CACnBrhB,KAAKqhB,WAAY,CACjB,IAAIwZ,GAAKv7B,EAAWU,KAAK06B,WAAYl7B,EAAMq7B,EAAGp7B,MAE9C,IAAIO,KAAKsP,SACP,IAAK1P,EAAI,EAAOJ,EAAJI,EAASA,IAAK,CACxB,GAAIiB,GAAIg6B,EAAGj7B,EACXiB,GAAE6J,OAAO1K,KAAKZ,OACdyB,EAAE8J,kBAGJ,KAAK/K,EAAI,EAAOJ,EAAJI,EAASA,IACnBi7B,EAAGj7B,GAAG+K,aAIV3K,MAAK06B,UAAUj7B,OAAS,IAO5BgL,QAAS,SAAUnK,GAEjB,GADAuX,GAAc7X,OACTA,KAAKqhB,UAAW,CACnBrhB,KAAKqhB,WAAY,EACjBrhB,KAAK26B,UAAW,EAChB36B,KAAKM,MAAQA,CAEb,KAAK,GAAIV,GAAI,EAAGi7B,EAAKv7B,EAAWU,KAAK06B,WAAYl7B,EAAMq7B,EAAGp7B,OAAYD,EAAJI,EAASA,IACzEi7B,EAAGj7B,GAAG6K,QAAQnK,EAGhBN,MAAK06B,UAAUj7B,OAAS,IAO5BiL,OAAQ,SAAUtL,GAChByY,GAAc7X,MACVA,KAAKqhB,YACTrhB,KAAKZ,MAAQA,EACbY,KAAKsP,UAAW,IAKlBH,QAAS,WACPnP,KAAKkH,YAAa,EAClBlH,KAAK06B,UAAY,KACjB16B,KAAKM,MAAQ,KACbN,KAAKZ,MAAQ,QAIVgL,GACP2F,IAEE+qB,GAAmBloB,GAAGkoB,iBAAoB,SAAUjgB,GAEtD,QAASigB,GAAiB9xB,EAAUzI,GAClCP,KAAKgJ,SAAWA,EAChBhJ,KAAKO,WAAaA,EAClBsa,EAAUnX,KAAK1D,MAkBjB,MAtBAuW,IAASukB,EAAkBjgB,GAO3BlE,GAAcmkB,EAAiB3vB,UAAW8V,GAAS9V,WACjD2W,WAAY,SAAUjhB,GACpB,MAAOb,MAAKO,WAAWgJ,UAAU1I,IAEnC8J,YAAa,WACX3K,KAAKgJ,SAAS2B,eAEhBF,QAAS,SAAUnK,GACjBN,KAAKgJ,SAASyB,QAAQnK,IAExBoK,OAAQ,SAAUtL,GAChBY,KAAKgJ,SAAS0B,OAAOtL,MAIlB07B,GACP/qB,IAME2lB,GAAkB9iB,GAAG8iB,gBAAmB,SAAU7a,GAEpD,QAAS6a,GAAgBt2B,GACvByb,EAAUnX,KAAK1D,MACfA,KAAKZ,MAAQA,EACbY,KAAK06B,aACL16B,KAAKkH,YAAa,EAClBlH,KAAKqhB,WAAY,EACjBrhB,KAAK26B,UAAW,EAwFlB,MA/FApkB,IAASmf,EAAiB7a,GAU1BlE,GAAc+e,EAAgBvqB,UAAW8V,GAAS9V,WAChD2W,WAAY,SAAUjhB,GAEpB,MADAgX,IAAc7X,MACTA,KAAKqhB,WAKNrhB,KAAK26B,SACP95B,EAAE4J,QAAQzK,KAAKM,OAEfO,EAAE8J,cAEG+M,KATL1X,KAAK06B,UAAUh5B,KAAKb,GACpBA,EAAE6J,OAAO1K,KAAKZ,OACP,GAAIq7B,IAAkBz6B,KAAMa,KAgBvCk6B,SAAU,WAGR,MAFAljB,IAAc7X,MACVA,KAAK26B,UAAYv6B,EAAQJ,KAAKM,OAC3BN,KAAKZ,OAMdw7B,aAAc,WAAmC,MAArB/iB,IAAc7X,MAAcA,KAAK06B,UAAUj7B,OAAS,GAIhFkL,YAAa,WAEX,GADAkN,GAAc7X,OACVA,KAAKqhB,UAAT,CACArhB,KAAKqhB,WAAY,CACjB,KAAK,GAAIzhB,GAAI,EAAGi7B,EAAKv7B,EAAWU,KAAK06B,WAAYl7B,EAAMq7B,EAAGp7B,OAAYD,EAAJI,EAASA,IACzEi7B,EAAGj7B,GAAG+K,aAGR3K,MAAK06B,UAAUj7B,OAAS,IAM1BgL,QAAS,SAAUnK,GAEjB,GADAuX,GAAc7X,OACVA,KAAKqhB,UAAT,CACArhB,KAAKqhB,WAAY,EACjBrhB,KAAK26B,UAAW,EAChB36B,KAAKM,MAAQA,CAEb,KAAK,GAAIV,GAAI,EAAGi7B,EAAKv7B,EAAWU,KAAK06B,WAAYl7B,EAAMq7B,EAAGp7B,OAAYD,EAAJI,EAASA,IACzEi7B,EAAGj7B,GAAG6K,QAAQnK,EAGhBN,MAAK06B,UAAUj7B,OAAS,IAM1BiL,OAAQ,SAAUtL,GAEhB,GADAyY,GAAc7X,OACVA,KAAKqhB,UAAT,CACArhB,KAAKZ,MAAQA,CACb,KAAK,GAAIQ,GAAI,EAAGi7B,EAAKv7B,EAAWU,KAAK06B,WAAYl7B,EAAMq7B,EAAGp7B,OAAYD,EAAJI,EAASA,IACzEi7B,EAAGj7B,GAAG8K,OAAOtL,KAMjB+P,QAAS,WACPnP,KAAKkH,YAAa,EAClBlH,KAAK06B,UAAY,KACjB16B,KAAKZ,MAAQ,KACbY,KAAKM,MAAQ,QAIVo1B,GACP3lB,IAMEgmB,GAAgBnjB,GAAGmjB,cAAiB,SAAUlb,GAIhD,QAASmgB,GAA0BhqB,EAAShI,GAC1C,MAAOyO,IAAiB,WACtBzO,EAASmG,WACR6B,EAAQ9J,YAAc8J,EAAQ0pB,UAAUrjB,OAAOrG,EAAQ0pB,UAAUh6B,QAAQsI,GAAW,KAYzF,QAAS+sB,GAAcF,EAAYC,EAAYntB,GAC7C3I,KAAK61B,WAA2B,MAAdA,EAAqBptB,EAAiBotB,EACxD71B,KAAK81B,WAA2B,MAAdA,EAAqBrtB,EAAiBqtB,EACxD91B,KAAK2I,UAAYA,GAAaE,GAC9B7I,KAAKyN,KACLzN,KAAK06B,aACL16B,KAAKqhB,WAAY,EACjBrhB,KAAKkH,YAAa,EAClBlH,KAAK26B,UAAW,EAChB36B,KAAKM,MAAQ,KACbua,EAAUnX,KAAK1D,MA3BjB,GAAIyI,GAAiBH,KAAK0N,IAAI,EAAG,IAAM,CA6HvC,OApHAO,IAASwf,EAAelb,GAqBxBlE,GAAcof,EAAc5qB,UAAW8V,GAAS9V,WAC9C2W,WAAY,SAAUjhB,GACpBgX,GAAc7X,KACd,IAAIi7B,GAAK,GAAI7Y,IAAkBpiB,KAAK2I,UAAW9H,GAAIuM,EAAe4tB,EAA0Bh7B,KAAMi7B,EAElGj7B,MAAKk7B,MAAMl7B,KAAK2I,UAAUkE,OAC1B7M,KAAK06B,UAAUh5B,KAAKu5B,EAEpB,KAAK,GAAIr7B,GAAI,EAAGJ,EAAMQ,KAAKyN,EAAEhO,OAAYD,EAAJI,EAASA,IAC5Cq7B,EAAGvwB,OAAO1K,KAAKyN,EAAE7N,GAAGR,MAUtB,OAPIY,MAAK26B,SACPM,EAAGxwB,QAAQzK,KAAKM,OACPN,KAAKqhB,WACd4Z,EAAGtwB,cAGLswB,EAAGtY,eACIvV,GAMTwtB,aAAc,WAAmC,MAArB/iB,IAAc7X,MAAcA,KAAK06B,UAAUj7B,OAAS,GAChFy7B,MAAO,SAAUruB,GACf,KAAO7M,KAAKyN,EAAEhO,OAASO,KAAK61B,YAC1B71B,KAAKyN,EAAEY,OAET,MAAOrO,KAAKyN,EAAEhO,OAAS,GAAMoN,EAAM7M,KAAKyN,EAAE,GAAGgpB,SAAYz2B,KAAK81B,YAC5D91B,KAAKyN,EAAEY,SAOX3D,OAAQ,SAAUtL,GAEhB,GADAyY,GAAc7X,OACVA,KAAKqhB,UAAT,CACA,GAAIxU,GAAM7M,KAAK2I,UAAUkE,KACzB7M,MAAKyN,EAAE/L,MAAO+0B,SAAU5pB,EAAKzN,MAAOA,IACpCY,KAAKk7B,MAAMruB,EAEX,KAAK,GAAIjN,GAAI,EAAGi7B,EAAKv7B,EAAWU,KAAK06B,WAAYl7B,EAAMq7B,EAAGp7B,OAAYD,EAAJI,EAASA,IAAK,CAC9E,GAAIoJ,GAAW6xB,EAAGj7B,EAClBoJ,GAAS0B,OAAOtL,GAChB4J,EAAS2Z,kBAOblY,QAAS,SAAUnK,GAEjB,GADAuX,GAAc7X,OACVA,KAAKqhB,UAAT,CACArhB,KAAKqhB,WAAY,EACjBrhB,KAAKM,MAAQA,EACbN,KAAK26B,UAAW,CAChB,IAAI9tB,GAAM7M,KAAK2I,UAAUkE,KACzB7M,MAAKk7B,MAAMruB,EACX,KAAK,GAAIjN,GAAI,EAAGi7B,EAAKv7B,EAAWU,KAAK06B,WAAYl7B,EAAMq7B,EAAGp7B,OAAYD,EAAJI,EAASA,IAAK,CAC9E,GAAIoJ,GAAW6xB,EAAGj7B,EAClBoJ,GAASyB,QAAQnK,GACjB0I,EAAS2Z,eAEX3iB,KAAK06B,UAAUj7B,OAAS,IAK1BkL,YAAa,WAEX,GADAkN,GAAc7X,OACVA,KAAKqhB,UAAT,CACArhB,KAAKqhB,WAAY,CACjB,IAAIxU,GAAM7M,KAAK2I,UAAUkE,KACzB7M,MAAKk7B,MAAMruB,EACX,KAAK,GAAIjN,GAAI,EAAGi7B,EAAKv7B,EAAWU,KAAK06B,WAAYl7B,EAAMq7B,EAAGp7B,OAAYD,EAAJI,EAASA,IAAK,CAC9E,GAAIoJ,GAAW6xB,EAAGj7B,EAClBoJ,GAAS2B,cACT3B,EAAS2Z,eAEX3iB,KAAK06B,UAAUj7B,OAAS,IAK1B0P,QAAS,WACPnP,KAAKkH,YAAa,EAClBlH,KAAK06B,UAAY,QAId3E,GACPhmB,GAKF6C,IAAGuoB,OAAU,SAAUtgB,GAErB,QAASsgB,KACPtgB,EAAUnX,KAAK1D,MAajB,MAfAuW,IAAS4kB,EAAQtgB,GAQjBsgB,EAAOhwB,UAAUotB,MAAQ,WAAcv4B,KAAK0K,QAAO,IAKnDywB,EAAOhwB,UAAUqtB,OAAS,WAAcx4B,KAAK0K,QAAO,IAE7CywB,GACPrM,IAEmB,kBAAVsM,SAA6C,gBAAdA,QAAOC,KAAmBD,OAAOC,KACzExzB,GAAK+K,GAAKA,GAEVwoB,OAAO,WACL,MAAOxoB,OAEAb,IAAeG,GAEpBO,IACDP,GAAWF,QAAUY,IAAIA,GAAKA,GAE/Bb,GAAYa,GAAKA,GAInB/K,GAAK+K,GAAKA,EAIZ,IAAI1Q,IAAcC,MAElBuB,KAAK1D"} \ No newline at end of file diff --git a/node_modules/rx-lite/rx.lite.min.js b/node_modules/rx-lite/rx.lite.min.js deleted file mode 100644 index 870ebcd..0000000 --- a/node_modules/rx-lite/rx.lite.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/ -(function(a){function b(a){return a&&a.Object===Object?a:null}function c(a){for(var b=a.length,c=new Array(b),d=0;b>d;d++)c[d]=a[d];return c}function d(a){return function(){try{return a.apply(this,arguments)}catch(b){return va.e=b,va}}}function e(a){throw a}function f(a,b){if(xa&&b.stack&&"object"==typeof a&&null!==a&&a.stack&&-1===a.stack.indexOf(Ba)){for(var c=[],d=b;d;d=d.source)d.stack&&c.unshift(d.stack);c.unshift(a.stack);var e=c.join("\n"+Ba+"\n");a.stack=g(e)}}function g(a){for(var b=a.split("\n"),c=[],d=0,e=b.length;e>d;d++){var f=b[d];h(f)||i(f)||!f||c.push(f)}return c.join("\n")}function h(a){var b=k(a);if(!b)return!1;var c=b[0],d=b[1];return c===za&&d>=Aa&&qe>=d}function i(a){return-1!==a.indexOf("(module.js:")||-1!==a.indexOf("(node.js:")}function j(){if(xa)try{throw new Error}catch(a){var b=a.stack.split("\n"),c=b[0].indexOf("@")>0?b[1]:b[2],d=k(c);if(!d)return;return za=d[0],d[1]}}function k(a){var b=/at .+ \((.+):(\d+):(?:\d+)\)$/.exec(a);if(b)return[b[1],Number(b[2])];var c=/at ([^ ]+):(\d+):(?:\d+)$/.exec(a);if(c)return[c[1],Number(c[2])];var d=/.*@(.+):(\d+)$/.exec(a);return d?[d[1],Number(d[2])]:void 0}function l(b,c,d,e,f,g){var h=ob(b),i=h.length,j=ob(c),k=j.length;if(i!==k&&!e)return!1;for(var l,m=i;m--;)if(l=h[m],!(e?l in c:lb.call(c,l)))return!1;for(var n=e;++m-1&&a%1===0&&nb>=a}function p(a){return n(a)&&o(a.length)&&!!jb[mb.call(a)]}function q(a,b){for(var c=-1,d=a.length;++ci))return!1;for(;++hd;d++)c[d]=b();return c}function v(a,b){this.id=a,this.value=b}function w(a){this._s=a,this.isDisposed=!1}function x(a){this._s=a}function y(a){this._s=a,this._l=a.length,this._i=0}function z(a){this._a=a}function A(a){this._a=a,this._l=E(a),this._i=0}function B(a){return"number"==typeof a&&la.isFinite(a)}function C(b){var c,d=b[Ia];if(!d&&"string"==typeof b)return c=new x(b),c[Ia]();if(!d&&b.length!==a)return c=new z(b),c[Ia]();if(!d)throw new TypeError("Object is not iterable");return b[Ia]()}function D(a){var b=+a;return 0===b?b:isNaN(b)?b:0>b?-1:1}function E(a){var b=+a.length;return isNaN(b)?0:0!==b&&B(b)?(b=D(b)*Math.floor(Math.abs(b)),0>=b?0:b>Ac?Ac:b):b}function F(a,b){return Kb(a)||(a=Qb),new Cc(b,a)}function G(a,b){this.observer=a,this.parent=b}function H(){return!1}function I(){for(var a=arguments.length,b=new Array(a),c=0;a>c;c++)b[c]=arguments[c];return b}function H(){return!1}function I(){for(var a=arguments.length,b=new Array(a),c=0;a>c;c++)b[c]=arguments[c];return b}function H(){return!1}function J(){return[]}function H(){return!1}function J(){return[]}function I(){for(var a=arguments.length,b=new Array(a),c=0;a>c;c++)b[c]=arguments[c];return b}function K(a){return function(b){return a.subscribe(b)}}function L(a){return{"@@iterator":function(){return{next:function(){return{done:!1,value:a}}}}}}function L(a){return{"@@iterator":function(){return{next:function(){return{done:!1,value:a}}}}}}function M(b,c){return function(d){for(var e=d,f=0;c>f;f++){var g=e[b[f]];if("undefined"==typeof g)return a;e=g}return e}}function N(a,b,c,d){var e=new me;return d.push(O(e,b,c)),a.apply(b,d),e.asObservable()}function O(a,b,c){return function(){for(var d=arguments.length,e=new Array(d),f=0;d>f;f++)e[f]=arguments[f];if(ua(c)){if(e=wa(c).apply(b,e),e===va)return a.onError(e.e);a.onNext(e)}else e.length<=1?a.onNext(e[0]):a.onNext(e);a.onCompleted()}}function P(a,b,c,d){var e=new me;return d.push(Q(e,b,c)),a.apply(b,d),e.asObservable()}function Q(a,b,c){return function(){var d=arguments[0];if(d)return a.onError(d);for(var e=arguments.length,f=[],g=1;e>g;g++)f[g-1]=arguments[g];if(ua(c)){var f=wa(c).apply(b,f);if(f===va)return a.onError(f.e);a.onNext(f)}else f.length<=1?a.onNext(f[0]):a.onNext(f);a.onCompleted()}}function R(a){return la.StaticNodeList?a instanceof la.StaticNodeList||a instanceof la.NodeList:"[object NodeList]"===Object.prototype.toString.call(a)}function S(a,b,c){this._e=a,this._n=b,this._fn=c,this._e.addEventListener(this._n,this._fn,!1),this.isDisposed=!1}function T(a,b,c){var d=new vb,e=Object.prototype.toString.call(a);if(R(a)||"[object HTMLCollection]"===e)for(var f=0,g=a.length;g>f;f++)d.add(T(a.item(f),b,c));else a&&d.add(new S(a,b,c));return d}function U(a,b){return new Vd(a,b)}function V(a,b,c){return new ie(function(d){var e=a,f=Jb(b);return c.scheduleRecursiveFuture(0,e,function(a,b){if(f>0){var g=c.now();e=new Date(e.getTime()+f),e.getTime()<=g&&(e=new Date(g+f))}d.onNext(a),b(a+1,new Date(e))})})}function W(a,b,c){return a===b?new ie(function(a){return c.schedulePeriodic(0,b,function(b){return a.onNext(b),b+1})}):vc(function(){return V(new Date(c.now()+a),b,c)})}function X(a,b,c){return new ie(function(d){var e,f=!1,g=new Eb,h=null,i=[],j=!1;return e=a.materialize().timestamp(c).subscribe(function(a){var e,k;"E"===a.value.kind?(i=[],i.push(a),h=a.value.error,k=!j):(i.push({value:a.value,timestamp:a.timestamp+b}),k=!f,f=!0),k&&(null!==h?d.onError(h):(e=new Db,g.setDisposable(e),e.setDisposable(c.scheduleRecursiveFuture(null,b,function(a,b){var e,g,k,l;if(null===h){j=!0;do k=null,i.length>0&&i[0].timestamp-c.now()<=0&&(k=i.shift().value),null!==k&&k.accept(d);while(null!==k);l=!1,g=0,i.length>0?(l=!0,g=Math.max(0,i[0].timestamp-c.now())):f=!1,e=h,j=!1,null!==e?d.onError(e):l&&b(null,g)}}))))}),new Fb(e,g)},a)}function Y(a,b,c){return vc(function(){return X(a,b-c.now(),c)})}function Z(a,b,c){var d,e;return ua(b)?e=b:(d=b,e=c),new ie(function(b){function c(){i.setDisposable(a.subscribe(function(a){var c=wa(e)(a);if(c===va)return b.onError(c.e);var d=new Db;g.add(d),d.setDisposable(c.subscribe(function(){b.onNext(a),g.remove(d),f()},function(a){b.onError(a)},function(){b.onNext(a),g.remove(d),f()}))},function(a){b.onError(a)},function(){h=!0,i.dispose(),f()}))}function f(){h&&0===g.length&&b.onCompleted()}var g=new vb,h=!1,i=new Eb;return d?i.setDisposable(d.subscribe(c,function(a){b.onError(a)},c)):c(),new Fb(i,g)},a)}function $(a,b){return new ie(function(c){var d,e=!1,f=new Eb,g=0,h=a.subscribe(function(a){var h=wa(b)(a);if(h===va)return c.onError(h.e);ta(h)&&(h=Rd(h)),e=!0,d=a,g++;var i=g,j=new Db;f.setDisposable(j),j.setDisposable(h.subscribe(function(){e&&g===i&&c.onNext(d),e=!1,j.dispose()},function(a){c.onError(a)},function(){e&&g===i&&c.onNext(d),e=!1,j.dispose()}))},function(a){f.dispose(),c.onError(a),e=!1,g++},function(){f.dispose(),e&&c.onNext(d),c.onCompleted(),e=!1,g++});return new Fb(h,f)},a)}function _(a,b,c,d){return ua(b)&&(d=c,c=b,b=Gc()),ic.isObservable(d)||(d=Mc(new ce)),new ie(function(e){function f(a){function b(){return l=c===k}var c=k,f=new Db;i.setDisposable(f),f.setDisposable(a.subscribe(function(){b()&&h.setDisposable(d.subscribe(e)),f.dispose()},function(a){b()&&e.onError(a)},function(){b()&&h.setDisposable(d.subscribe(e))}))}function g(){var a=!l;return a&&k++,a}var h=new Eb,i=new Eb,j=new Db;h.setDisposable(j);var k=0,l=!1;return f(b),j.setDisposable(a.subscribe(function(a){if(g()){e.onNext(a);var b=wa(c)(a);if(b===va)return e.onError(b.e);f(ta(b)?Rd(b):b)}},function(a){g()&&e.onError(a)},function(){g()&&e.onCompleted()})),new Fb(h,i)},a)}function aa(a,b,c,d){return Kb(c)&&(d=c,c=Mc(new ce)),c instanceof Error&&(c=Mc(c)),Kb(d)||(d=Vb),ic.isObservable(c)||(c=Mc(new ce)),new ie(function(e){function f(){var a=g;k.setDisposable(d.scheduleFuture(null,b,function(){j=g===a,j&&(ta(c)&&(c=Rd(c)),i.setDisposable(c.subscribe(e)))}))}var g=0,h=new Db,i=new Eb,j=!1,k=new Eb;return i.setDisposable(h),f(),h.setDisposable(a.subscribe(function(a){j||(g++,e.onNext(a),f())},function(a){j||(g++,e.onError(a))},function(){j||(g++,e.onCompleted())})),new Fb(i,k)},a)}function ba(a,b,c){return new ie(function(d){function e(a,b){if(j[b]=a,g[b]=!0,h||(h=g.every(oa))){if(f)return d.onError(f);var e=wa(c).apply(null,j);if(e===va)return d.onError(e.e);d.onNext(e)}i&&j[1]&&d.onCompleted()}var f,g=[!1,!1],h=!1,i=!1,j=new Array(2);return new Fb(a.subscribe(function(a){e(a,0)},function(a){j[1]?d.onError(a):f=a},function(){i=!0,j[1]&&d.onCompleted()}),b.subscribe(function(a){e(a,1)},function(a){d.onError(a)},function(){i=!0,e(!0,1)}))},a)}function ca(a){return{"@@transducer/init":function(){return a},"@@transducer/step":function(a,b){return a.onNext(b)},"@@transducer/result":function(a){return a.onCompleted()}}}var da={"function":!0,object:!0},ea=da[typeof exports]&&exports&&!exports.nodeType?exports:null,fa=da[typeof module]&&module&&!module.nodeType?module:null,ga=b(ea&&fa&&"object"==typeof global&&global),ha=b(da[typeof self]&&self),ia=b(da[typeof window]&&window),ja=fa&&fa.exports===ea?ea:null,ka=b(da[typeof this]&&this),la=ga||ia!==(ka&&ka.window)&&ia||ha||ka||Function("return this")(),ma={internals:{},config:{Promise:la.Promise},helpers:{}},na=ma.helpers.noop=function(){},oa=ma.helpers.identity=function(a){return a},pa=ma.helpers.defaultNow=Date.now,qa=ma.helpers.defaultComparer=function(a,b){return sb(a,b)},ra=ma.helpers.defaultSubComparer=function(a,b){return a>b?1:b>a?-1:0},sa=(ma.helpers.defaultKeySerializer=function(a){return a.toString()},ma.helpers.defaultError=function(a){throw a}),ta=ma.helpers.isPromise=function(a){return!!a&&"function"!=typeof a.subscribe&&"function"==typeof a.then},ua=ma.helpers.isFunction=function(){var a=function(a){return"function"==typeof a||!1};return a(/x/)&&(a=function(a){return"function"==typeof a&&"[object Function]"==toString.call(a)}),a}(),va={e:{}},wa=ma.internals.tryCatch=function(a){if(!ua(a))throw new TypeError("fn must be a function");return d(a)};ma.config.longStackSupport=!1;var xa=!1,ya=wa(function(){throw new Error})();xa=!!ya.e&&!!ya.e.stack;var za,Aa=j(),Ba="From previous event:",Ca=ma.EmptyError=function(){this.message="Sequence contains no elements.",Error.call(this)};Ca.prototype=Object.create(Error.prototype),Ca.prototype.name="EmptyError";var Da=ma.ObjectDisposedError=function(){this.message="Object has been disposed",Error.call(this)};Da.prototype=Object.create(Error.prototype),Da.prototype.name="ObjectDisposedError";var Ea=ma.ArgumentOutOfRangeError=function(){this.message="Argument out of range",Error.call(this)};Ea.prototype=Object.create(Error.prototype),Ea.prototype.name="ArgumentOutOfRangeError";var Fa=ma.NotSupportedError=function(a){this.message=a||"This operation is not supported",Error.call(this)};Fa.prototype=Object.create(Error.prototype),Fa.prototype.name="NotSupportedError";var Ga=ma.NotImplementedError=function(a){this.message=a||"This operation is not implemented",Error.call(this)};Ga.prototype=Object.create(Error.prototype),Ga.prototype.name="NotImplementedError";var Ha=ma.helpers.notImplemented=function(){throw new Ga},Ia=(ma.helpers.notSupported=function(){throw new Fa},"function"==typeof Symbol&&Symbol.iterator||"_es6shim_iterator_");la.Set&&"function"==typeof(new la.Set)["@@iterator"]&&(Ia="@@iterator");var Ja=ma.doneEnumerator={done:!0,value:a},Ka=ma.helpers.isIterable=function(b){return b&&b[Ia]!==a},La=ma.helpers.isArrayLike=function(b){return b&&b.length!==a};ma.helpers.iterator=Ia;var Ma=ma.internals.bindCallback=function(a,b,c){if("undefined"==typeof b)return a;switch(c){case 0:return function(){return a.call(b)};case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}},Na=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],Oa=(Na.length,"[object Arguments]"),Pa="[object Array]",Qa="[object Boolean]",Ra="[object Date]",Sa="[object Error]",Ta="[object Function]",Ua="[object Map]",Va="[object Number]",Wa="[object Object]",Xa="[object RegExp]",Ya="[object Set]",Za="[object String]",$a="[object WeakMap]",_a="[object ArrayBuffer]",ab="[object Float32Array]",bb="[object Float64Array]",cb="[object Int8Array]",db="[object Int16Array]",eb="[object Int32Array]",fb="[object Uint8Array]",gb="[object Uint8ClampedArray]",hb="[object Uint16Array]",ib="[object Uint32Array]",jb={};jb[ab]=jb[bb]=jb[cb]=jb[db]=jb[eb]=jb[fb]=jb[gb]=jb[hb]=jb[ib]=!0,jb[Oa]=jb[Pa]=jb[_a]=jb[Qa]=jb[Ra]=jb[Sa]=jb[Ta]=jb[Ua]=jb[Va]=jb[Wa]=jb[Xa]=jb[Ya]=jb[Za]=jb[$a]=!1;var kb=Object.prototype,lb=kb.hasOwnProperty,mb=kb.toString,nb=Math.pow(2,53)-1,ob=Object.keys||function(){var a=Object.prototype.hasOwnProperty,b=!{toString:null}.propertyIsEnumerable("toString"),c=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],d=c.length;return function(e){if("object"!=typeof e&&("function"!=typeof e||null===e))throw new TypeError("Object.keys called on non-object");var f,g,h=[];for(f in e)a.call(e,f)&&h.push(f);if(b)for(g=0;d>g;g++)a.call(e,c[g])&&h.push(c[g]);return h}}(),pb=ma.internals.isObject=function(a){var b=typeof a;return!!a&&("object"===b||"function"===b)},qb=function(){try{Object({toString:0}+"")}catch(a){return function(){return!1}}return function(a){return"function"!=typeof a.toString&&"string"==typeof(a+"")}}(),rb=Array.isArray||function(a){return n(a)&&o(a.length)&&mb.call(a)===Pa},sb=ma.internals.isEqual=function(a,b){return t(a,b)},tb=({}.hasOwnProperty,Array.prototype.slice,ma.internals.inherits=function(a,b){function c(){this.constructor=a}c.prototype=b.prototype,a.prototype=new c}),ub=ma.internals.addProperties=function(a){for(var b=[],c=1,d=arguments.length;d>c;c++)b.push(arguments[c]);for(var e=0,f=b.length;f>e;e++){var g=b[e];for(var h in g)a[h]=g[h]}},vb=(ma.internals.addRef=function(a,b){return new ie(function(c){return new Fb(b.getDisposable(),a.subscribe(c))})},ma.CompositeDisposable=function(){var a,b,c=[];if(Array.isArray(arguments[0]))c=arguments[0];else for(b=arguments.length,c=new Array(b),a=0;b>a;a++)c[a]=arguments[a];this.disposables=c,this.isDisposed=!1,this.length=c.length}),wb=vb.prototype;wb.add=function(a){this.isDisposed?a.dispose():(this.disposables.push(a),this.length++)},wb.remove=function(a){var b=!1;if(!this.isDisposed){var c=this.disposables.indexOf(a);-1!==c&&(b=!0,this.disposables.splice(c,1),this.length--,a.dispose())}return b},wb.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;for(var a=this.disposables.length,b=new Array(a),c=0;a>c;c++)b[c]=this.disposables[c];for(this.disposables=[],this.length=0,c=0;a>c;c++)b[c].dispose()}};var xb=ma.Disposable=function(a){this.isDisposed=!1,this.action=a||na};xb.prototype.dispose=function(){this.isDisposed||(this.action(),this.isDisposed=!0)};var yb=xb.create=function(a){return new xb(a)},zb=xb.empty={dispose:na},Ab=xb.isDisposable=function(a){return a&&ua(a.dispose)},Bb=xb.checkDisposed=function(a){if(a.isDisposed)throw new Da},Cb=xb._fixup=function(a){return Ab(a)?a:zb},Db=ma.SingleAssignmentDisposable=function(){this.isDisposed=!1,this.current=null};Db.prototype.getDisposable=function(){return this.current},Db.prototype.setDisposable=function(a){if(this.current)throw new Error("Disposable has already been assigned");var b=this.isDisposed;!b&&(this.current=a),b&&a&&a.dispose()},Db.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var a=this.current;this.current=null,a&&a.dispose()}};var Eb=ma.SerialDisposable=function(){this.isDisposed=!1,this.current=null};Eb.prototype.getDisposable=function(){return this.current},Eb.prototype.setDisposable=function(a){var b=this.isDisposed;if(!b){var c=this.current;this.current=a}c&&c.dispose(),b&&a&&a.dispose()},Eb.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var a=this.current;this.current=null}a&&a.dispose()};var Fb=ma.BinaryDisposable=function(a,b){this._first=a,this._second=b,this.isDisposed=!1};Fb.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var a=this._first;this._first=null,a&&a.dispose();var b=this._second;this._second=null,b&&b.dispose()}};var Gb=ma.NAryDisposable=function(a){this._disposables=a,this.isDisposed=!1};Gb.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;for(var a=0,b=this._disposables.length;b>a;a++)this._disposables[a].dispose();this._disposables.length=0}};var Hb=(ma.RefCountDisposable=function(){function a(a){this.disposable=a,this.disposable.count++,this.isInnerDisposed=!1}function b(a){this.underlyingDisposable=a,this.isDisposed=!1,this.isPrimaryDisposed=!1,this.count=0}return a.prototype.dispose=function(){this.disposable.isDisposed||this.isInnerDisposed||(this.isInnerDisposed=!0,this.disposable.count--,0===this.disposable.count&&this.disposable.isPrimaryDisposed&&(this.disposable.isDisposed=!0,this.disposable.underlyingDisposable.dispose()))},b.prototype.dispose=function(){this.isDisposed||this.isPrimaryDisposed||(this.isPrimaryDisposed=!0,0===this.count&&(this.isDisposed=!0,this.underlyingDisposable.dispose()))},b.prototype.getDisposable=function(){return this.isDisposed?zb:new a(this)},b}(),ma.internals.ScheduledItem=function(a,b,c,d,e){this.scheduler=a,this.state=b,this.action=c,this.dueTime=d,this.comparer=e||ra,this.disposable=new Db});Hb.prototype.invoke=function(){this.disposable.setDisposable(this.invokeCore())},Hb.prototype.compareTo=function(a){return this.comparer(this.dueTime,a.dueTime)},Hb.prototype.isCancelled=function(){return this.disposable.isDisposed},Hb.prototype.invokeCore=function(){return Cb(this.action(this.scheduler,this.state))};var Ib=ma.Scheduler=function(){function a(){}a.isScheduler=function(b){return b instanceof a};var b=a.prototype;return b.schedule=function(a,b){throw new Ga},b.scheduleFuture=function(b,c,d){var e=c;return e instanceof Date&&(e-=this.now()),e=a.normalize(e),0===e?this.schedule(b,d):this._scheduleFuture(b,e,d)},b._scheduleFuture=function(a,b,c){throw new Ga},a.now=pa,a.prototype.now=pa,a.normalize=function(a){return 0>a&&(a=0),a},a}(),Jb=Ib.normalize,Kb=Ib.isScheduler;!function(a){function b(a,b){function c(b){function d(a,b){return g?f.remove(i):h=!0,e(b,c),zb}var g=!1,h=!1,i=a.schedule(b,d);h||(f.add(i),g=!0)}var d=b[0],e=b[1],f=new vb;return e(d,c),f}function c(a,b){function c(b,d){function g(a,b){return h?f.remove(j):i=!0,e(b,c),zb}var h=!1,i=!1,j=a.scheduleFuture(b,d,g);i||(f.add(j),h=!0)}var d=b[0],e=b[1],f=new vb;return e(d,c),f}a.scheduleRecursive=function(a,c){return this.schedule([a,c],b)},a.scheduleRecursiveFuture=function(a,b,d){return this.scheduleFuture([a,d],b,c)}}(Ib.prototype),function(a){a.schedulePeriodic=function(a,b,c){if("undefined"==typeof la.setInterval)throw new Fa;b=Jb(b);var d=a,e=la.setInterval(function(){d=c(d)},b);return yb(function(){la.clearInterval(e)})}}(Ib.prototype);var Lb,Mb,Nb=function(a){function b(){a.call(this)}return tb(b,a),b.prototype.schedule=function(a,b){return Cb(b(this,a))},b}(Ib),Ob=Ib.immediate=new Nb,Pb=function(a){function b(){for(;d.length>0;){var a=d.dequeue();!a.isCancelled()&&a.invoke()}}function c(){a.call(this)}var d;return tb(c,a),c.prototype.schedule=function(a,c){var f=new Hb(this,a,c,this.now());if(d)d.enqueue(f);else{d=new Wb(4),d.enqueue(f);var g=wa(b)();d=null,g===va&&e(g.e)}return f.disposable},c.prototype.scheduleRequired=function(){return!d},c}(Ib),Qb=Ib.currentThread=new Pb,Rb=(ma.internals.SchedulePeriodicRecursive=function(){function a(a){return function(b,c){c(0,a._period);var d=wa(a._action)(a._state);d===va&&(a._cancel.dispose(),e(d.e)),a._state=d}}function b(a,b,c,d){this._scheduler=a,this._state=b,this._period=c,this._action=d}return b.prototype.start=function(){var b=new Db;return this._cancel=b,b.setDisposable(this._scheduler.scheduleRecursiveFuture(0,this._period,a(this))),b},b}(),function(){var a,b=na;if(la.setTimeout)a=la.setTimeout,b=la.clearTimeout;else{if(!la.WScript)throw new Fa;a=function(a,b){la.WScript.Sleep(b),a()}}return{setTimeout:a,clearTimeout:b}}()),Sb=Rb.setTimeout,Tb=Rb.clearTimeout;!function(){function a(b){if(f)Sb(function(){a(b)},0);else{var c=d[b];if(c){f=!0;var g=wa(c)();Mb(b),f=!1,g===va&&e(g.e)}}}function b(){if(!la.postMessage||la.importScripts)return!1;var a=!1,b=la.onmessage;return la.onmessage=function(){a=!0},la.postMessage("","*"),la.onmessage=b,a}var c=1,d={},f=!1;Mb=function(a){delete d[a]};var g=new RegExp("^"+String(toString).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),h="function"==typeof(h=ga&&ja&&ga.setImmediate)&&!g.test(h)&&h;if(ua(h))Lb=function(b){var e=c++;return d[e]=b,h(function(){a(e)}),e};else if("undefined"!=typeof process&&"[object process]"==={}.toString.call(process))Lb=function(b){var e=c++;return d[e]=b,process.nextTick(function(){a(e)}),e};else if(b()){var i="ms.rx.schedule"+Math.random(),j=function(b){"string"==typeof b.data&&b.data.substring(0,i.length)===i&&a(b.data.substring(i.length))};la.addEventListener("message",j,!1),Lb=function(a){var b=c++;return d[b]=a,la.postMessage(i+b,"*"),b}}else if(la.MessageChannel){var k=new la.MessageChannel;k.port1.onmessage=function(b){a(b.data)},Lb=function(a){var b=c++;return d[b]=a,k.port2.postMessage(b),b}}else Lb="document"in la&&"onreadystatechange"in la.document.createElement("script")?function(b){var e=la.document.createElement("script"),f=c++;return d[f]=b,e.onreadystatechange=function(){a(f),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},la.document.documentElement.appendChild(e),f}:function(b){var e=c++;return d[e]=b,Sb(function(){a(e)},0),e}}();var Ub=function(a){function b(){a.call(this)}function c(a,b,c,d){return function(){a.setDisposable(xb._fixup(b(c,d)))}}function d(a){this._id=a,this.isDisposed=!1}function e(a){this._id=a,this.isDisposed=!1}return tb(b,a),d.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,Mb(this._id))},e.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,Tb(this._id))},b.prototype.schedule=function(a,b){var e=new Db,f=Lb(c(e,b,this,a));return new Fb(e,new d(f))},b.prototype._scheduleFuture=function(a,b,d){if(0===b)return this.schedule(a,d);var f=new Db,g=Sb(c(f,d,this,a),b);return new Fb(f,new e(g))},b}(Ib),Vb=Ib["default"]=Ib.async=new Ub;v.prototype.compareTo=function(a){var b=this.value.compareTo(a.value);return 0===b&&(b=this.id-a.id),b};var Wb=ma.internals.PriorityQueue=function(a){this.items=new Array(a),this.length=0},Xb=Wb.prototype;Xb.isHigherPriority=function(a,b){return this.items[a].compareTo(this.items[b])<0},Xb.percolate=function(a){if(!(a>=this.length||0>a)){var b=a-1>>1;if(!(0>b||b===a)&&this.isHigherPriority(a,b)){var c=this.items[a];this.items[a]=this.items[b],this.items[b]=c,this.percolate(b)}}},Xb.heapify=function(a){if(+a||(a=0),!(a>=this.length||0>a)){var b=2*a+1,c=2*a+2,d=a;if(b0))return void(a.isAcquired=!1);c=a.queue.shift();var d=wa(c)();return d===va?(a.queue=[],a.hasFaulted=!0,e(d.e)):void b(a)}return tb(b,a),b.prototype.next=function(a){this.queue.push(c(this.observer,a))},b.prototype.error=function(a){this.queue.push(d(this.observer,a))},b.prototype.completed=function(){this.queue.push(f(this.observer))},b.prototype.ensureActive=function(){var a=!1;!this.hasFaulted&&this.queue.length>0&&(a=!this.isAcquired,this.isAcquired=!0),a&&this.disposable.setDisposable(this.scheduler.scheduleRecursive(this,g))},b.prototype.dispose=function(){a.prototype.dispose.call(this),this.disposable.dispose()},b}(gc),kc=ma.ObservableBase=function(a){function b(a){return a&&ua(a.dispose)?a:ua(a)?yb(a):zb}function c(a,c){var d=c[0],f=c[1],g=wa(f.subscribeCore).call(f,d);g!==va||d.fail(va.e)||e(va.e),d.setDisposable(b(g))}function d(){a.call(this)}return tb(d,a),d.prototype._subscribe=function(a){var b=new je(a),d=[b,this];return Qb.scheduleRequired()?Qb.schedule(d,c):c(null,d),b},d.prototype.subscribeCore=Ha,d}(ic),lc=ma.FlatMapObservable=function(a){function b(b,c,d,e){this.resultSelector=ua(d)?d:null,this.selector=Ma(ua(c)?c:function(){return c},e,3),this.source=b,a.call(this)}function c(a,b,c,d){this.i=0,this.selector=b,this.resultSelector=c,this.source=d,this.o=a,gc.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new c(a,this.selector,this.resultSelector,this))},tb(c,gc),c.prototype._wrapResult=function(a,b,c){return this.resultSelector?a.map(function(a,d){return this.resultSelector(b,a,c,d)},this):a},c.prototype.next=function(a){var b=this.i++,c=wa(this.selector)(a,b,this.source);return c===va?this.o.onError(c.e):(ta(c)&&(c=Rd(c)),(La(c)||Ka(c))&&(c=ic.from(c)),void this.o.onNext(this._wrapResult(c,a,b)))},c.prototype.error=function(a){this.o.onError(a)},c.prototype.completed=function(){this.o.onCompleted()},b}(kc),mc=ma.internals.Enumerable=function(){};w.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._s.isDisposed=!0)};var nc=function(a){function b(b){this.sources=b,a.call(this)}function c(a,b){if(!a.isDisposed){var c=wa(a.e.next).call(a.e);if(c===va)return a.o.onError(c.e);if(c.done)return a.o.onCompleted();var e=c.value;ta(e)&&(e=Rd(e));var f=new Db;a.subscription.setDisposable(f),f.setDisposable(e.subscribe(new d(a,b)))}}function d(a,b){this._state=a,this._recurse=b,gc.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new Eb,d={isDisposed:!1,o:a,subscription:b,e:this.sources[Ia]()},e=Qb.scheduleRecursive(d,c);return new Gb([b,e,new w(d)])},tb(d,gc),d.prototype.next=function(a){this._state.o.onNext(a)},d.prototype.error=function(a){this._state.o.onError(a)},d.prototype.completed=function(){this._recurse(this._state)},b}(kc);mc.prototype.concat=function(){return new nc(this)};var oc=function(a){function b(b){this.sources=b,a.call(this)}function c(a,b){if(!a.isDisposed){var c=wa(a.e.next).call(a.e);if(c===va)return a.o.onError(c.e);if(c.done)return null!==a.lastError?a.o.onError(a.lastError):a.o.onCompleted();var e=c.value;ta(e)&&(e=Rd(e));var f=new Db;a.subscription.setDisposable(f),f.setDisposable(e.subscribe(new d(a,b)))}}function d(a,b){this._state=a,this._recurse=b,gc.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new Eb,d={isDisposed:!1,e:this.sources[Ia](),subscription:b,lastError:null,o:a},e=Qb.scheduleRecursive(d,c);return new Gb([b,e,new w(d)])},tb(d,gc),d.prototype.next=function(a){this._state.o.onNext(a)},d.prototype.error=function(a){this._state.lastError=a,this._recurse(this._state)},d.prototype.completed=function(){this._state.o.onCompleted()},b}(kc);mc.prototype.catchError=function(){return new oc(this)};var pc=function(a){function b(a,b){this.v=a,this.c=null==b?-1:b}function c(a){this.v=a.v,this.l=a.c}return tb(b,a),b.prototype[Ia]=function(){return new c(this)},c.prototype.next=function(){return 0===this.l?Ja:(this.l>0&&this.l--,{done:!1,value:this.v})},b}(mc),qc=mc.repeat=function(a,b){return new pc(a,b)},rc=function(a){function b(a,b,c){ -this.s=a,this.fn=b?Ma(b,c,3):null}function c(a){this.i=-1,this.s=a.s,this.l=this.s.length,this.fn=a.fn}return tb(b,a),b.prototype[Ia]=function(){return new c(this)},c.prototype.next=function(){return++this.id?(a.onNext(b[d]),e(d+1)):a.onCompleted()}}return tb(b,a),b.prototype.subscribeCore=function(a){return this._scheduler.scheduleRecursive(0,c(a,this._args))},b}(kc),Dc=ic.fromArray=function(a,b){return Kb(b)||(b=Qb),new Cc(a,b)},Ec=function(a){function b(){a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return zb},b}(kc),Fc=new Ec,Gc=ic.never=function(){return Fc};ic.of=function(){for(var a=arguments.length,b=new Array(a),c=0;a>c;c++)b[c]=arguments[c];return new Cc(b,Qb)},ic.ofWithScheduler=function(a){for(var b=arguments.length,c=new Array(b-1),d=1;b>d;d++)c[d-1]=arguments[d];return new Cc(c,a)};var Hc=function(a){function b(b,c){this._o=b,this._keys=Object.keys(b),this._scheduler=c,a.call(this)}function c(a,b,c){return function(d,e){if(dd?(c.onNext(a+d),e(d+1)):c.onCompleted()}}return tb(b,a),b.prototype.subscribeCore=function(a){return this.scheduler.scheduleRecursive(0,c(this.start,this.rangeCount,a))},b}(kc);ic.range=function(a,b,c){return Kb(c)||(c=Qb),new Ic(a,b,c)};var Jc=function(a){function b(b,c,d){this.value=b,this.repeatCount=null==c?-1:c,this.scheduler=d,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new G(a,this);return b.run()},b}(kc);G.prototype.run=function(){function a(a,d){return(-1===a||a>0)&&(b.onNext(c),a>0&&a--),0===a?b.onCompleted():void d(a)}var b=this.observer,c=this.parent.value;return this.parent.scheduler.scheduleRecursive(this.parent.repeatCount,a)},ic.repeat=function(a,b,c){return Kb(c)||(c=Qb),new Jc(a,b,c)};var Kc=function(a){function b(b,c){this._value=b,this._scheduler=c,a.call(this)}function c(a,b){var c=b[0],d=b[1];return d.onNext(c),d.onCompleted(),zb}return tb(b,a),b.prototype.subscribeCore=function(a){var b=[this._value,a];return this._scheduler===Ob?c(null,b):this._scheduler.schedule(b,c)},b}(kc),Lc=(ic["return"]=ic.just=function(a,b){return Kb(b)||(b=Ob),new Kc(a,b)},function(a){function b(b,c){this._error=b,this._scheduler=c,a.call(this)}function c(a,b){var c=b[0],d=b[1];return d.onError(c),zb}return tb(b,a),b.prototype.subscribeCore=function(a){var b=[this._error,a];return this._scheduler===Ob?c(null,b):this._scheduler.schedule(b,c)},b}(kc)),Mc=ic["throw"]=function(a,b){return Kb(b)||(b=Ob),new Lc(a,b)},Nc=function(a){function b(b,c){this.source=b,this._fn=c,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new Db,c=new Eb;return c.setDisposable(b),b.setDisposable(this.source.subscribe(new Oc(a,c,this._fn))),c},b}(kc),Oc=function(a){function b(b,c,d){this._o=b,this._s=c,this._fn=d,a.call(this)}return tb(b,a),b.prototype.next=function(a){this._o.onNext(a)},b.prototype.completed=function(){return this._o.onCompleted()},b.prototype.error=function(a){var b=wa(this._fn)(a);if(b===va)return this._o.onError(b.e);ta(b)&&(b=Rd(b));var c=new Db;this._s.setDisposable(c),c.setDisposable(b.subscribe(this._o))},b}(gc);Yb["catch"]=function(a){return ua(a)?new Nc(this,a):Pc([this,a])};var Pc=ic["catch"]=function(){var a;if(Array.isArray(arguments[0]))a=arguments[0];else{var b=arguments.length;a=new Array(b);for(var c=0;b>c;c++)a[c]=arguments[c]}return sc(a).catchError()};Yb.combineLatest=function(){for(var a=arguments.length,b=new Array(a),c=0;a>c;c++)b[c]=arguments[c];return Array.isArray(b[0])?b[0].unshift(this):b.unshift(this),Sc.apply(this,b)};var Qc=function(a){function b(b,c){this._params=b,this._cb=c,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){for(var b=this._params.length,c=new Array(b),d={hasValue:u(b,H),hasValueAll:!1,isDone:u(b,H),values:new Array(b)},e=0;b>e;e++){var f=this._params[e],g=new Db;c[e]=g,ta(f)&&(f=Rd(f)),g.setDisposable(f.subscribe(new Rc(a,e,this._cb,d)))}return new Gb(c)},b}(kc),Rc=function(a){function b(b,c,d,e){this._o=b,this._i=c,this._cb=d,this._state=e,a.call(this)}function c(a){return function(b,c){return c!==a}}return tb(b,a),b.prototype.next=function(a){if(this._state.values[this._i]=a,this._state.hasValue[this._i]=!0,this._state.hasValueAll||(this._state.hasValueAll=this._state.hasValue.every(oa))){var b=wa(this._cb).apply(null,this._state.values);if(b===va)return this._o.onError(b.e);this._o.onNext(b)}else this._state.isDone.filter(c(this._i)).every(oa)&&this._o.onCompleted()},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._state.isDone[this._i]=!0,this._state.isDone.every(oa)&&this._o.onCompleted()},b}(gc),Sc=ic.combineLatest=function(){for(var a=arguments.length,b=new Array(a),c=0;a>c;c++)b[c]=arguments[c];var d=ua(b[a-1])?b.pop():I;return Array.isArray(b[0])&&(b=b[0]),new Qc(b,d)};Yb.concat=function(){for(var a=[],b=0,c=arguments.length;c>b;b++)a.push(arguments[b]);return a.unshift(this),Vc.apply(null,a)};var Tc=function(a){function b(b,c){this._s=b,this._fn=c,a.call(this)}return tb(b,a),b.prototype.next=function(a){this._s.o.onNext(a)},b.prototype.error=function(a){this._s.o.onError(a)},b.prototype.completed=function(){this._s.i++,this._fn(this._s)},b}(gc),Uc=function(a){function b(b){this._sources=b,a.call(this)}function c(a,b){if(!a.disposable.isDisposed){if(a.i===a.sources.length)return a.o.onCompleted();var c=a.sources[a.i];ta(c)&&(c=Rd(c));var d=new Db;a.subscription.setDisposable(d),d.setDisposable(c.subscribe(new Tc(a,b)))}}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new Eb,d=yb(na),e={o:a,i:0,subscription:b,disposable:d,sources:this._sources},f=Ob.scheduleRecursive(e,c);return new Gb([b,d,f])},b}(kc),Vc=ic.concat=function(){var a;if(Array.isArray(arguments[0]))a=arguments[0];else{a=new Array(arguments.length);for(var b=0,c=arguments.length;c>b;b++)a[b]=arguments[b]}return new Uc(a)};Yb.concatAll=function(){return this.merge(1)};var Wc=function(a){function b(b,c){this.source=b,this.maxConcurrent=c,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new vb;return b.add(this.source.subscribe(new Xc(a,this.maxConcurrent,b))),b},b}(kc),Xc=function(a){function b(b,c,d){this.o=b,this.max=c,this.g=d,this.done=!1,this.q=[],this.activeCount=0,a.call(this)}function c(b,c){this.parent=b,this.sad=c,a.call(this)}return tb(b,a),b.prototype.handleSubscribe=function(a){var b=new Db;this.g.add(b),ta(a)&&(a=Rd(a)),b.setDisposable(a.subscribe(new c(this,b)))},b.prototype.next=function(a){this.activeCount0?this.parent.handleSubscribe(this.parent.q.shift()):(this.parent.activeCount--,this.parent.done&&0===this.parent.activeCount&&this.parent.o.onCompleted())},b}(gc);Yb.merge=function(a){return"number"!=typeof a?Yc(this,a):new Wc(this,a)};var Yc=ic.merge=function(){var a,b,c=[],d=arguments.length;if(arguments[0])if(Kb(arguments[0]))for(a=arguments[0],b=1;d>b;b++)c.push(arguments[b]);else for(a=Ob,b=0;d>b;b++)c.push(arguments[b]);else for(a=Ob,b=1;d>b;b++)c.push(arguments[b]);return Array.isArray(c[0])&&(c=c[0]),F(a,c).mergeAll()},Zc=ma.CompositeError=function(a){this.innerErrors=a,this.message="This contains multiple errors. Check the innerErrors",Error.call(this)};Zc.prototype=Object.create(Error.prototype),Zc.prototype.name="CompositeError";var $c=function(a){function b(b){this.source=b,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new vb,c=new Db,d={isStopped:!1,errors:[],o:a};return b.add(c),c.setDisposable(this.source.subscribe(new _c(b,d))),b},b}(kc),_c=function(a){function b(b,c){this._group=b,this._state=c,a.call(this)}function c(a,b){0===b.length?a.onCompleted():1===b.length?a.onError(b[0]):a.onError(new Zc(b))}function d(b,c,d){this._inner=b,this._group=c,this._state=d,a.call(this)}return tb(b,a),b.prototype.next=function(a){var b=new Db;this._group.add(b),ta(a)&&(a=Rd(a)),b.setDisposable(a.subscribe(new d(b,this._group,this._state)))},b.prototype.error=function(a){this._state.errors.push(a),this._state.isStopped=!0,1===this._group.length&&c(this._state.o,this._state.errors)},b.prototype.completed=function(){this._state.isStopped=!0,1===this._group.length&&c(this._state.o,this._state.errors)},tb(d,a),d.prototype.next=function(a){this._state.o.onNext(a)},d.prototype.error=function(a){this._state.errors.push(a),this._group.remove(this._inner),this._state.isStopped&&1===this._group.length&&c(this._state.o,this._state.errors)},d.prototype.completed=function(){this._group.remove(this._inner),this._state.isStopped&&1===this._group.length&&c(this._state.o,this._state.errors)},b}(gc);ic.mergeDelayError=function(){var a;if(Array.isArray(arguments[0]))a=arguments[0];else{var b=arguments.length;a=new Array(b);for(var c=0;b>c;c++)a[c]=arguments[c]}var d=F(null,a);return new $c(d)};var ad=function(a){function b(b){this.source=b,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new vb,c=new Db;return b.add(c),c.setDisposable(this.source.subscribe(new bd(a,b))),b},b}(kc),bd=function(a){function b(b,c){this.o=b,this.g=c,this.done=!1,a.call(this)}function c(b,c){this.parent=b,this.sad=c,a.call(this)}return tb(b,a),b.prototype.next=function(a){var b=new Db;this.g.add(b),ta(a)&&(a=Rd(a)),b.setDisposable(a.subscribe(new c(this,b)))},b.prototype.error=function(a){this.o.onError(a)},b.prototype.completed=function(){this.done=!0,1===this.g.length&&this.o.onCompleted()},tb(c,a),c.prototype.next=function(a){this.parent.o.onNext(a)},c.prototype.error=function(a){this.parent.o.onError(a)},c.prototype.completed=function(){this.parent.g.remove(this.sad),this.parent.done&&1===this.parent.g.length&&this.parent.o.onCompleted()},b}(gc);Yb.mergeAll=function(){return new ad(this)};var cd=function(a){function b(b,c){this._s=b,this._o=ta(c)?Rd(c):c,this._open=!1,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new Db;b.setDisposable(this._s.subscribe(new dd(a,this))),ta(this._o)&&(this._o=Rd(this._o));var c=new Db;return c.setDisposable(this._o.subscribe(new ed(a,this,c))),new Fb(b,c)},b}(kc),dd=function(a){function b(b,c){this._o=b,this._p=c,a.call(this)}return tb(b,a),b.prototype.next=function(a){this._p._open&&this._o.onNext(a)},b.prototype.error=function(a){this._o.onError(a)},b.prototype.onCompleted=function(){this._p._open&&this._o.onCompleted()},b}(gc),ed=function(a){function b(b,c,d){this._o=b,this._p=c,this._r=d,a.call(this)}return tb(b,a),b.prototype.next=function(){this._p._open=!0,this._r.dispose()},b.prototype.error=function(a){this._o.onError(a)},b.prototype.onCompleted=function(){this._r.dispose()},b}(gc);Yb.skipUntil=function(a){return new cd(this,a)};var fd=function(a){function b(b){this.source=b,a.call(this)}function c(a,b){this.o=a,this.inner=b,this.stopped=!1,this.latest=0,this.hasLatest=!1,gc.call(this)}function d(a,b){this.parent=a,this.id=b,gc.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new Eb,d=this.source.subscribe(new c(a,b));return new Fb(d,b)},tb(c,gc),c.prototype.next=function(a){var b=new Db,c=++this.latest;this.hasLatest=!0,this.inner.setDisposable(b),ta(a)&&(a=Rd(a)),b.setDisposable(a.subscribe(new d(this,c)))},c.prototype.error=function(a){this.o.onError(a)},c.prototype.completed=function(){this.stopped=!0,!this.hasLatest&&this.o.onCompleted()},tb(d,gc),d.prototype.next=function(a){this.parent.latest===this.id&&this.parent.o.onNext(a)},d.prototype.error=function(a){this.parent.latest===this.id&&this.parent.o.onError(a)},d.prototype.completed=function(){this.parent.latest===this.id&&(this.parent.hasLatest=!1,this.parent.stopped&&this.parent.o.onCompleted())},b}(kc);Yb["switch"]=Yb.switchLatest=function(){return new fd(this)};var gd=function(a){function b(b,c){this.source=b,this.other=ta(c)?Rd(c):c,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return new Fb(this.source.subscribe(a),this.other.subscribe(new hd(a)))},b}(kc),hd=function(a){function b(b){this._o=b,a.call(this)}return tb(b,a),b.prototype.next=function(){this._o.onCompleted()},b.prototype.error=function(a){this._o.onError(a)},b.prototype.onCompleted=na,b}(gc);Yb.takeUntil=function(a){return new gd(this,a)};var id=function(a){function b(b,c,d){this._s=b,this._ss=c,this._cb=d,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){for(var b=this._ss.length,c={hasValue:u(b,H),hasValueAll:!1,values:new Array(b)},d=this._ss.length,e=new Array(d+1),f=0;d>f;f++){var g=this._ss[f],h=new Db;ta(g)&&(g=Rd(g)),h.setDisposable(g.subscribe(new jd(a,f,c))),e[f]=h}var i=new Db;return i.setDisposable(this._s.subscribe(new kd(a,this._cb,c))),e[d]=i,new Gb(e)},b}(kc),jd=function(a){function b(b,c,d){this._o=b,this._i=c,this._state=d,a.call(this)}return tb(b,a),b.prototype.next=function(a){this._state.values[this._i]=a,this._state.hasValue[this._i]=!0,this._state.hasValueAll=this._state.hasValue.every(oa)},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=na,b}(gc),kd=function(a){function b(b,c,d){this._o=b,this._cb=c,this._state=d,a.call(this)}return tb(b,a),b.prototype.next=function(a){var b=[a].concat(this._state.values);if(this._state.hasValueAll){var c=wa(this._cb).apply(null,b);return c===va?this._o.onError(c.e):void this._o.onNext(c)}},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onCompleted()},b}(gc);Yb.withLatestFrom=function(){if(0===arguments.length)throw new Error("invalid arguments");for(var a=arguments.length,b=new Array(a),c=0;a>c;c++)b[c]=arguments[c];var d=ua(b[a-1])?b.pop():I;return Array.isArray(b[0])&&(b=b[0]),new id(this,b,d)};var ld=function(a){function b(b,c){this._s=b,this._cb=c,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){for(var b=this._s.length,c=new Array(b),d=u(b,H),e=u(b,J),f=0;b>f;f++){var g=this._s[f],h=new Db;c[f]=h,ta(g)&&(g=Rd(g)),h.setDisposable(g.subscribe(new md(a,f,this,e,d)))}return new Gb(c)},b}(kc),md=function(a){function b(b,c,d,e,f){this._o=b,this._i=c,this._p=d,this._q=e,this._d=f,a.call(this)}function c(a){return a.length>0}function d(a){return a.shift()}function e(a){return function(b,c){return c!==a}}return tb(b,a),b.prototype.next=function(a){if(this._q[this._i].push(a),this._q.every(c)){var b=this._q.map(d),f=wa(this._p._cb).apply(null,b);if(f===va)return this._o.onError(f.e);this._o.onNext(f)}else this._d.filter(e(this._i)).every(oa)&&this._o.onCompleted()},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._d[this._i]=!0,this._d.every(oa)&&this._o.onCompleted()},b}(gc);Yb.zip=function(){if(0===arguments.length)throw new Error("invalid arguments");for(var a=arguments.length,b=new Array(a),c=0;a>c;c++)b[c]=arguments[c];var d=ua(b[a-1])?b.pop():I;Array.isArray(b[0])&&(b=b[0]);var e=this;return b.unshift(e),new ld(b,d)},ic.zip=function(){for(var a=arguments.length,b=new Array(a),c=0;a>c;c++)b[c]=arguments[c];Array.isArray(b[0])&&(b=ua(b[1])?b[0].concat(b[1]):b[0]);var d=b.shift();return d.zip.apply(d,b)};var nd=function(a){function b(b,c){this.sources=b,this._cb=c,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){for(var b=this.sources,c=b.length,d=new Array(c),e={q:u(c,J),done:u(c,H),cb:this._cb,o:a},f=0;c>f;f++)!function(a){var c=b[a],f=new Db;(La(c)||Ka(c))&&(c=Bc(c)),d[a]=f,f.setDisposable(c.subscribe(new od(e,a)))}(f);return new Gb(d)},b}(kc),od=function(a){function b(b,c){this._s=b,this._i=c,a.call(this)}function c(a){return a.length>0}function d(a){return a.shift()}function e(a){return function(b,c){return c!==a}}return tb(b,a),b.prototype.next=function(a){if(this._s.q[this._i].push(a),this._s.q.every(c)){var b=this._s.q.map(d),f=wa(this._s.cb).apply(null,b);if(f===va)return this._s.o.onError(f.e);this._s.o.onNext(f)}else this._s.done.filter(e(this._i)).every(oa)&&this._s.o.onCompleted()},b.prototype.error=function(a){this._s.o.onError(a)},b.prototype.completed=function(){this._s.done[this._i]=!0,this._s.done.every(oa)&&this._s.o.onCompleted()},b}(gc);Yb.zipIterable=function(){if(0===arguments.length)throw new Error("invalid arguments");for(var a=arguments.length,b=new Array(a),c=0;a>c;c++)b[c]=arguments[c];var d=ua(b[a-1])?b.pop():I,e=this;return b.unshift(e),new nd(b,d)},Yb.asObservable=function(){return new ie(K(this),this)};var pd=function(a){function b(b){this.source=b,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new qd(a))},b}(kc),qd=function(a){function b(b){this._o=b,a.call(this)}return tb(b,a),b.prototype.next=function(a){a.accept(this._o)},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onCompleted()},b}(gc);Yb.dematerialize=function(){return new pd(this)};var rd=function(a){function b(b,c,d){this.source=b,this.keyFn=c,this.comparer=d,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new sd(a,this.keyFn,this.comparer))},b}(kc),sd=function(a){function b(b,c,d){this.o=b,this.keyFn=c,this.comparer=d,this.hasCurrentKey=!1,this.currentKey=null,a.call(this)}return tb(b,a),b.prototype.next=function(a){var b,c=a;return ua(this.keyFn)&&(c=wa(this.keyFn)(a),c===va)?this.o.onError(c.e):this.hasCurrentKey&&(b=wa(this.comparer)(this.currentKey,c),b===va)?this.o.onError(b.e):void(this.hasCurrentKey&&b||(this.hasCurrentKey=!0,this.currentKey=c,this.o.onNext(a)))},b.prototype.error=function(a){this.o.onError(a)},b.prototype.completed=function(){this.o.onCompleted()},b}(gc);Yb.distinctUntilChanged=function(a,b){return b||(b=qa),new rd(this,a,b)};var td=function(a){function b(b,c,d,e){this.source=b,this._oN=c,this._oE=d,this._oC=e,a.call(this)}function c(a,b){this.o=a,this.t=!b._oN||ua(b._oN)?fc(b._oN||na,b._oE||na,b._oC||na):b._oN,this.isStopped=!1,gc.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new c(a,this))},tb(c,gc),c.prototype.next=function(a){var b=wa(this.t.onNext).call(this.t,a);b===va&&this.o.onError(b.e),this.o.onNext(a)},c.prototype.error=function(a){var b=wa(this.t.onError).call(this.t,a);return b===va?this.o.onError(b.e):void this.o.onError(a)},c.prototype.completed=function(){var a=wa(this.t.onCompleted).call(this.t);return a===va?this.o.onError(a.e):void this.o.onCompleted()},b}(kc);Yb["do"]=Yb.tap=Yb.doAction=function(a,b,c){return new td(this,a,b,c)},Yb.doOnNext=Yb.tapOnNext=function(a,b){return this.tap("undefined"!=typeof b?function(c){a.call(b,c)}:a)},Yb.doOnError=Yb.tapOnError=function(a,b){return this.tap(na,"undefined"!=typeof b?function(c){a.call(b,c)}:a)},Yb.doOnCompleted=Yb.tapOnCompleted=function(a,b){return this.tap(na,null,"undefined"!=typeof b?function(){a.call(b)}:a)};var ud=function(a){function b(b,c,d){this.source=b,this._fn=Ma(c,d,0),a.call(this)}function c(a,b){this.isDisposed=!1,this._s=a,this._fn=b}return tb(b,a),b.prototype.subscribeCore=function(a){var b=wa(this.source.subscribe).call(this.source,a);return b===va&&(this._fn(),e(b.e)),new c(b,this._fn)},c.prototype.dispose=function(){if(!this.isDisposed){var a=wa(this._s.dispose).call(this._s);this._fn(),a===va&&e(a.e)}},b}(kc);Yb["finally"]=function(a,b){return new ud(this,a,b)};var vd=function(a){function b(b){this.source=b,a.call(this)}function c(a){this.o=a,this.isStopped=!1}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new c(a))},c.prototype.onNext=na,c.prototype.onError=function(a){this.isStopped||(this.isStopped=!0,this.o.onError(a))},c.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},c.prototype.dispose=function(){this.isStopped=!0},c.prototype.fail=function(a){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(a),!0)},b}(kc);Yb.ignoreElements=function(){return new vd(this)};var wd=function(a){function b(b,c){this.source=b,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new xd(a))},b}(kc),xd=function(a){function b(b){this._o=b,a.call(this)}return tb(b,a),b.prototype.next=function(a){this._o.onNext(bc(a))},b.prototype.error=function(a){this._o.onNext(cc(a)),this._o.onCompleted()},b.prototype.completed=function(){this._o.onNext(dc()),this._o.onCompleted()},b}(gc);Yb.materialize=function(){return new wd(this)},Yb.repeat=function(a){return qc(this,a).concat()},Yb.retry=function(a){return qc(this,a).catchError()};var yd=function(a){function b(a){return{isDisposed:!1,dispose:function(){this.isDisposed||(this.isDisposed=!0,a.isDisposed=!0)}}}function c(b,c){this.source=b,this._notifier=c,a.call(this)}return tb(c,a),c.prototype.subscribeCore=function(a){var c,d=new le,e=new le,f=this._notifier(d),g=f.subscribe(e),h=this.source["@@iterator"](),i={isDisposed:!1},j=new Eb,k=Qb.scheduleRecursive(null,function(b,f){if(!i.isDisposed){var g=h.next();if(g.done)return void(c?a.onError(c):a.onCompleted());var k=g.value;ta(k)&&(k=Rd(k));var l=new Db,m=new Db;j.setDisposable(new Fb(m,l)),l.setDisposable(k.subscribe(function(b){a.onNext(b)},function(b){m.setDisposable(e.subscribe(f,function(b){a.onError(b)},function(){a.onCompleted()})),d.onNext(b),l.dispose()},function(){a.onCompleted()}))}});return new Gb([g,j,k,b(i)])},c}(kc);Yb.retryWhen=function(a){return new yd(L(this),a)};var zd=function(a){function b(a){return{isDisposed:!1,dispose:function(){this.isDisposed||(this.isDisposed=!0,a.isDisposed=!0)}}}function c(b,c){this.source=b,this._notifier=c,a.call(this)}return tb(c,a),c.prototype.subscribeCore=function(a){var c,d=new le,e=new le,f=this._notifier(d),g=f.subscribe(e),h=this.source["@@iterator"](),i={isDisposed:!1},j=new Eb,k=Qb.scheduleRecursive(null,function(b,f){if(!i.isDisposed){var g=h.next();if(g.done)return void(c?a.onError(c):a.onCompleted());var k=g.value;ta(k)&&(k=Rd(k));var l=new Db,m=new Db;j.setDisposable(new Fb(m,l)),l.setDisposable(k.subscribe(function(b){a.onNext(b)},function(b){a.onError(b)},function(){m.setDisposable(e.subscribe(f,function(b){a.onError(b)},function(){a.onCompleted()})),d.onNext(null),l.dispose()}))}});return new Gb([g,j,k,b(i)])},c}(kc);Yb.repeatWhen=function(a){return new zd(L(this),a)};var Ad=function(a){function b(b,c,d,e){this.source=b,this.accumulator=c,this.hasSeed=d,this.seed=e,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new Bd(a,this))},b}(kc),Bd=function(a){function b(b,c){this._o=b,this._p=c,this._fn=c.accumulator,this._hs=c.hasSeed,this._s=c.seed,this._ha=!1,this._a=null,this._hv=!1,this._i=0,a.call(this)}return tb(b,a),b.prototype.next=function(a){return!this._hv&&(this._hv=!0),this._ha?this._a=wa(this._fn)(this._a,a,this._i,this._p):(this._a=this._hs?wa(this._fn)(this._s,a,this._i,this._p):a,this._ha=!0),this._a===va?this._o.onError(this._a.e):(this._o.onNext(this._a),void this._i++)},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){!this._hv&&this._hs&&this._o.onNext(this._s),this._o.onCompleted()},b}(gc);Yb.scan=function(){var a,b=!1,c=arguments[0];return 2===arguments.length&&(b=!0,a=arguments[1]),new Ad(this,c,b,a)};var Cd=function(a){function b(b,c){this.source=b,this._c=c,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new Dd(a,this._c))},b}(kc),Dd=function(a){function b(b,c){this._o=b,this._c=c,this._q=[],a.call(this)}return tb(b,a),b.prototype.next=function(a){this._q.push(a),this._q.length>this._c&&this._o.onNext(this._q.shift())},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onCompleted()},b}(gc);Yb.skipLast=function(a){if(0>a)throw new Ea;return new Cd(this,a)},Yb.startWith=function(){var a,b=0;arguments.length&&Kb(arguments[0])?(a=arguments[0],b=1):a=Ob;for(var c=[],d=b,e=arguments.length;e>d;d++)c.push(arguments[d]);return sc([Dc(c,a),this]).concat()};var Ed=function(a){function b(b,c){this._o=b,this._c=c,this._q=[],a.call(this)}return tb(b,a),b.prototype.next=function(a){this._q.push(a),this._q.length>this._c&&this._q.shift()},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){for(;this._q.length>0;)this._o.onNext(this._q.shift());this._o.onCompleted()},b}(gc);Yb.takeLast=function(a){if(0>a)throw new Ea;var b=this;return new ie(function(c){return b.subscribe(new Ed(c,a))},b)},Yb.flatMapConcat=Yb.concatMap=function(a,b,c){return new lc(this,a,b,c).merge(1)};var Fd=function(a){function b(b,c,d){this.source=b,this.selector=Ma(c,d,3),a.call(this)}function c(a,b){return function(c,d,e){return a.call(this,b.selector(c,d,e),d,e)}}function d(a,b,c){this.o=a,this.selector=b,this.source=c,this.i=0,gc.call(this)}return tb(b,a),b.prototype.internalMap=function(a,d){return new b(this.source,c(a,this),d)},b.prototype.subscribeCore=function(a){return this.source.subscribe(new d(a,this.selector,this))},tb(d,gc),d.prototype.next=function(a){var b=wa(this.selector)(a,this.i++,this.source);return b===va?this.o.onError(b.e):void this.o.onNext(b)},d.prototype.error=function(a){this.o.onError(a)},d.prototype.completed=function(){this.o.onCompleted()},b}(kc);Yb.map=Yb.select=function(a,b){var c="function"==typeof a?a:function(){return a};return this instanceof Fd?this.internalMap(c,b):new Fd(this,c,b)},Yb.pluck=function(){var a=arguments.length,b=new Array(a);if(0===a)throw new Error("List of properties cannot be empty.");for(var c=0;a>c;c++)b[c]=arguments[c];return this.map(M(b,a))},Yb.flatMap=Yb.selectMany=function(a,b,c){return new lc(this,a,b,c).mergeAll()},ma.Observable.prototype.flatMapLatest=function(a,b,c){return new lc(this,a,b,c).switchLatest()};var Gd=function(a){function b(b,c){this.source=b,this._count=c,a.call(this)}function c(a,b){this._o=a,this._r=b,gc.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new c(a,this._count))},tb(c,gc),c.prototype.next=function(a){this._r<=0?this._o.onNext(a):this._r--},c.prototype.error=function(a){this._o.onError(a)},c.prototype.completed=function(){this._o.onCompleted()},b}(kc);Yb.skip=function(a){if(0>a)throw new Ea;return new Gd(this,a)};var Hd=function(a){function b(b,c){this.source=b,this._fn=c,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new Id(a,this))},b}(kc),Id=function(a){function b(b,c){this._o=b,this._p=c,this._i=0,this._r=!1,a.call(this)}return tb(b,a),b.prototype.next=function(a){if(!this._r){var b=wa(this._p._fn)(a,this._i++,this._p);if(b===va)return this._o.onError(b.e);this._r=!b}this._r&&this._o.onNext(a)},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onCompleted()},b}(gc);Yb.skipWhile=function(a,b){var c=Ma(a,b,3);return new Hd(this,c)};var Jd=function(a){function b(b,c){this.source=b,this._count=c,a.call(this)}function c(a,b){this._o=a,this._c=b,this._r=b,gc.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new c(a,this._count))},tb(c,gc),c.prototype.next=function(a){this._r-->0&&(this._o.onNext(a),this._r<=0&&this._o.onCompleted())},c.prototype.error=function(a){this._o.onError(a)},c.prototype.completed=function(){this._o.onCompleted()},b}(kc);Yb.take=function(a,b){if(0>a)throw new Ea;return 0===a?yc(b):new Jd(this,a)};var Kd=function(a){function b(b,c){this.source=b,this._fn=c,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new Ld(a,this))},b}(kc),Ld=function(a){function b(b,c){this._o=b,this._p=c,this._i=0,this._r=!0,a.call(this)}return tb(b,a),b.prototype.next=function(a){return this._r&&(this._r=wa(this._p._fn)(a,this._i++,this._p),this._r===va)?this._o.onError(this._r.e):void(this._r?this._o.onNext(a):this._o.onCompleted())},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onCompleted()},b}(gc);Yb.takeWhile=function(a,b){var c=Ma(a,b,3);return new Kd(this,c)};var Md=function(a){function b(b,c,d){this.source=b,this.predicate=Ma(c,d,3),a.call(this)}function c(a,b){return function(c,d,e){return b.predicate(c,d,e)&&a.call(this,c,d,e)}}function d(a,b,c){this.o=a,this.predicate=b,this.source=c,this.i=0,gc.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new d(a,this.predicate,this))},b.prototype.internalFilter=function(a,d){return new b(this.source,c(a,this),d)},tb(d,gc),d.prototype.next=function(a){var b=wa(this.predicate)(a,this.i++,this.source);return b===va?this.o.onError(b.e):void(b&&this.o.onNext(a))},d.prototype.error=function(a){this.o.onError(a)},d.prototype.completed=function(){this.o.onCompleted()},b}(kc);Yb.filter=Yb.where=function(a,b){return this instanceof Md?this.internalFilter(a,b):new Md(this,a,b)},ic.fromCallback=function(a,b,c){return function(){"undefined"==typeof b&&(b=this);for(var d=arguments.length,e=new Array(d),f=0;d>f;f++)e[f]=arguments[f];return N(a,b,c,e)}},ic.fromNodeCallback=function(a,b,c){return function(){ -"undefined"==typeof b&&(b=this);for(var d=arguments.length,e=new Array(d),f=0;d>f;f++)e[f]=arguments[f];return P(a,b,c,e)}},S.prototype.dispose=function(){this.isDisposed||(this._e.removeEventListener(this._n,this._fn,!1),this.isDisposed=!0)},ma.config.useNativeEvents=!1;var Nd=function(a){function b(b,c,d){this._el=b,this._n=c,this._fn=d,a.call(this)}function c(a,b){return function(){var c=arguments[0];return ua(b)&&(c=wa(b).apply(null,arguments),c===va)?a.onError(c.e):void a.onNext(c)}}return tb(b,a),b.prototype.subscribeCore=function(a){return T(this._el,this._n,c(a,this._fn))},b}(kc);ic.fromEvent=function(a,b,c){return a.addListener?Pd(function(c){a.addListener(b,c)},function(c){a.removeListener(b,c)},c):ma.config.useNativeEvents||"function"!=typeof a.on||"function"!=typeof a.off?new Nd(a,b,c).publish().refCount():Pd(function(c){a.on(b,c)},function(c){a.off(b,c)},c)};var Od=function(a){function b(b,c,d){this._add=b,this._del=c,this._fn=d,a.call(this)}function c(a,b){return function(){var c=arguments[0];return ua(b)&&(c=wa(b).apply(null,arguments),c===va)?a.onError(c.e):void a.onNext(c)}}function d(a,b,c){this._del=a,this._fn=b,this._ret=c,this.isDisposed=!1}return tb(b,a),b.prototype.subscribeCore=function(a){var b=c(a,this._fn),e=this._add(b);return new d(this._del,b,e)},d.prototype.dispose=function(){this.isDisposed||(ua(this._del)&&this._del(this._fn,this._ret),this.isDisposed=!0)},b}(kc),Pd=ic.fromEventPattern=function(a,b,c){return new Od(a,b,c).publish().refCount()},Qd=function(a){function b(b,c){this._p=b,this._s=c,a.call(this)}function c(a,b){var c=b[0],d=b[1];c.onNext(d),c.onCompleted()}function d(a,b){var c=b[0],d=b[1];c.onError(d)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new Db,e=this;return this._p.then(function(d){b.setDisposable(e._s.schedule([a,d],c))},function(c){b.setDisposable(e._s.schedule([a,c],d))}),b},b}(kc),Rd=ic.fromPromise=function(a,b){return b||(b=Vb),new Qd(a,b)};Yb.toPromise=function(a){if(a||(a=ma.config.Promise),!a)throw new Fa("Promise type not provided nor in Rx.config.Promise");var b=this;return new a(function(a,c){var d;b.subscribe(function(a){d=a},c,function(){a(d)})})},ic.startAsync=function(a){var b=wa(a)();return b===va?Mc(b.e):Rd(b)};var Sd=function(a){function b(b,c,d){this.source=b,this._fn1=c,this._fn2=d,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=this.source.multicast(this._fn1());return new Fb(this._fn2(b).subscribe(a),b.connect())},b}(kc);Yb.multicast=function(a,b){return ua(a)?new Sd(this,a,b):new Ud(this,a)},Yb.publish=function(a){return a&&ua(a)?this.multicast(function(){return new le},a):this.multicast(new le)},Yb.share=function(){return this.publish().refCount()},Yb.publishLast=function(a){return a&&ua(a)?this.multicast(function(){return new me},a):this.multicast(new me)},Yb.publishValue=function(a,b){return 2===arguments.length?this.multicast(function(){return new oe(b)},a):this.multicast(new oe(a))},Yb.shareValue=function(a){return this.publishValue(a).refCount()},Yb.replay=function(a,b,c,d){return a&&ua(a)?this.multicast(function(){return new pe(b,c,d)},a):this.multicast(new pe(b,c,d))},Yb.shareReplay=function(a,b,c){return this.replay(null,a,b,c).refCount()};var Td=function(a){function b(b){this.source=b,this._count=0,this._connectableSubscription=null,a.call(this)}function c(a,b){this._p=a,this._s=b,this.isDisposed=!1}return tb(b,a),b.prototype.subscribeCore=function(a){var b=this.source.subscribe(a);return 1===++this._count&&(this._connectableSubscription=this.source.connect()),new c(this,b)},c.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._s.dispose(),0===--this._p._count&&this._p._connectableSubscription.dispose())},b}(kc),Ud=ma.ConnectableObservable=function(a){function b(b,c){this.source=b,this._connection=null,this._source=b.asObservable(),this._subject=c,a.call(this)}function c(a,b){this._p=a,this._s=b}return tb(b,a),c.prototype.dispose=function(){this._s&&(this._s.dispose(),this._s=null,this._p._connection=null)},b.prototype.connect=function(){if(!this._connection){var a=this._source.subscribe(this._subject);this._connection=new c(this,a)}return this._connection},b.prototype._subscribe=function(a){return this._subject.subscribe(a)},b.prototype.refCount=function(){return new Td(this)},b}(ic),Vd=function(a){function b(b,c){this._dt=b,this._s=c,a.call(this)}function c(a,b){b.onNext(0),b.onCompleted()}return tb(b,a),b.prototype.subscribeCore=function(a){return this._s.scheduleFuture(a,this._dt,c)},b}(kc),Wd=ic.interval=function(a,b){return W(a,a,Kb(b)?b:Vb)};ic.timer=function(b,c,d){var e;return Kb(d)||(d=Vb),null!=c&&"number"==typeof c?e=c:Kb(c)&&(d=c),(b instanceof Date||"number"==typeof b)&&e===a?U(b,d):b instanceof Date&&e!==a?V(b,c,d):W(b,e,d)};Yb.delay=function(){var a=arguments[0];if("number"==typeof a||a instanceof Date){var b=a,c=arguments[1];return Kb(c)||(c=Vb),b instanceof Date?Y(this,b,c):X(this,b,c)}if(ic.isObservable(a)||ua(a))return Z(this,a,arguments[1]);throw new Error("Invalid arguments")};var Xd=function(a){function b(b,c,d){Kb(d)||(d=Vb),this.source=b,this._dt=c,this._s=d,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b=new Eb;return new Fb(this.source.subscribe(new Yd(a,this._dt,this._s,b)),b)},b}(kc),Yd=function(a){function b(b,c,d,e){this._o=b,this._d=c,this._scheduler=d,this._c=e,this._v=null,this._hv=!1,this._id=0,a.call(this)}return tb(b,a),b.prototype.next=function(a){this._hv=!0,this._v=a;var b=++this._id,c=new Db;this._c.setDisposable(c),c.setDisposable(this._scheduler.scheduleFuture(this,this._d,function(c,d){d._hv&&d._id===b&&d._o.onNext(a),d._hv=!1}))},b.prototype.error=function(a){this._c.dispose(),this._o.onError(a),this._hv=!1,this._id++},b.prototype.completed=function(){this._c.dispose(),this._hv&&this._o.onNext(this._v),this._o.onCompleted(),this._hv=!1,this._id++},b}(gc);Yb.debounce=function(){if(ua(arguments[0]))return $(this,arguments[0]);if("number"==typeof arguments[0])return new Xd(this,arguments[0],arguments[1]);throw new Error("Invalid arguments")};var Zd=function(a){function b(b,c){this.source=b,this._s=c,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new $d(a,this._s))},b}(kc),$d=function(a){function b(b,c){this._o=b,this._s=c,a.call(this)}return tb(b,a),b.prototype.next=function(a){this._o.onNext({value:a,timestamp:this._s.now()})},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onCompleted()},b}(gc);Yb.timestamp=function(a){return Kb(a)||(a=Vb),new Zd(this,a)};var _d=function(a){function b(b,c){this.source=b,this._sampler=c,a.call(this)}return tb(b,a),b.prototype.subscribeCore=function(a){var b={o:a,atEnd:!1,value:null,hasValue:!1,sourceSubscription:new Db};return b.sourceSubscription.setDisposable(this.source.subscribe(new be(b))),new Fb(b.sourceSubscription,this._sampler.subscribe(new ae(b)))},b}(kc),ae=function(a){function b(b){this._s=b,a.call(this)}return tb(b,a),b.prototype._handleMessage=function(){this._s.hasValue&&(this._s.hasValue=!1,this._s.o.onNext(this._s.value)),this._s.atEnd&&this._s.o.onCompleted()},b.prototype.next=function(){this._handleMessage()},b.prototype.error=function(a){this._s.onError(a)},b.prototype.completed=function(){this._handleMessage()},b}(gc),be=function(a){function b(b){this._s=b,a.call(this)}return tb(b,a),b.prototype.next=function(a){this._s.hasValue=!0,this._s.value=a},b.prototype.error=function(a){this._s.o.onError(a)},b.prototype.completed=function(){this._s.atEnd=!0,this._s.sourceSubscription.dispose()},b}(gc);Yb.sample=function(a,b){return Kb(b)||(b=Vb),"number"==typeof a?new _d(this,Wd(a,b)):new _d(this,a)};var ce=ma.TimeoutError=function(a){this.message=a||"Timeout has occurred",this.name="TimeoutError",Error.call(this)};ce.prototype=Object.create(Error.prototype),Yb.timeout=function(){var a=arguments[0];if(a instanceof Date||"number"==typeof a)return aa(this,a,arguments[1],arguments[2]);if(ic.isObservable(a)||ua(a))return _(this,a,arguments[1],arguments[2]);throw new Error("Invalid arguments")},Yb.throttle=function(a,b){Kb(b)||(b=Vb);var c=+a||0;if(0>=c)throw new RangeError("windowDuration cannot be less or equal zero.");var d=this;return new ie(function(a){var e=0;return d.subscribe(function(d){var f=b.now();(0===e||f-e>=c)&&(e=f,a.onNext(d))},function(b){a.onError(b)},function(){a.onCompleted()})},d)};var de=function(a){function b(b,c){this.source=b,this.controller=new le,c&&c.subscribe?this.pauser=this.controller.merge(c):this.pauser=this.controller,a.call(this)}return tb(b,a),b.prototype._subscribe=function(a){var b=this.source.publish(),c=b.subscribe(a),d=zb,e=this.pauser.distinctUntilChanged().subscribe(function(a){a?d=b.connect():(d.dispose(),d=zb)});return new Gb([c,d,e])},b.prototype.pause=function(){this.controller.onNext(!1)},b.prototype.resume=function(){this.controller.onNext(!0)},b}(ic);Yb.pausable=function(a){return new de(this,a)};var ee=function(b){function c(a,c){this.source=a,this.controller=new le,c&&c.subscribe?this.pauser=this.controller.merge(c):this.pauser=this.controller,b.call(this)}return tb(c,b),c.prototype._subscribe=function(b){function c(){for(;e.length>0;)b.onNext(e.shift())}var d,e=[],f=ba(this.source,this.pauser.startWith(!1).distinctUntilChanged(),function(a,b){return{data:a,shouldFire:b}}).subscribe(function(f){d!==a&&f.shouldFire!==d?(d=f.shouldFire,f.shouldFire&&c()):(d=f.shouldFire,f.shouldFire?b.onNext(f.data):e.push(f.data))},function(a){c(),b.onError(a)},function(){c(),b.onCompleted()});return f},c.prototype.pause=function(){this.controller.onNext(!1)},c.prototype.resume=function(){this.controller.onNext(!0)},c}(ic);Yb.pausableBuffered=function(a){return new ee(this,a)};var fe=function(a){function b(b,c,d){a.call(this),this.subject=new ge(c,d),this.source=b.multicast(this.subject).refCount()}return tb(b,a),b.prototype._subscribe=function(a){return this.source.subscribe(a)},b.prototype.request=function(a){return this.subject.request(null==a?-1:a)},b}(ic),ge=function(a){function b(b,c){null==b&&(b=!0),a.call(this),this.subject=new le,this.enableQueue=b,this.queue=b?[]:null,this.requestedCount=0,this.requestedDisposable=null,this.error=null,this.hasFailed=!1,this.hasCompleted=!1,this.scheduler=c||Qb}return tb(b,a),ub(b.prototype,ec,{_subscribe:function(a){return this.subject.subscribe(a)},onCompleted:function(){this.hasCompleted=!0,this.enableQueue&&0!==this.queue.length?this.queue.push(Zb.createOnCompleted()):(this.subject.onCompleted(),this.disposeCurrentRequest())},onError:function(a){this.hasFailed=!0,this.error=a,this.enableQueue&&0!==this.queue.length?this.queue.push(Zb.createOnError(a)):(this.subject.onError(a),this.disposeCurrentRequest())},onNext:function(a){this.requestedCount<=0?this.enableQueue&&this.queue.push(Zb.createOnNext(a)):(0===this.requestedCount--&&this.disposeCurrentRequest(),this.subject.onNext(a))},_processRequest:function(a){if(this.enableQueue)for(;this.queue.length>0&&(a>0||"N"!==this.queue[0].kind);){var b=this.queue.shift();b.accept(this.subject),"N"===b.kind?a--:(this.disposeCurrentRequest(),this.queue=[])}return a},request:function(a){this.disposeCurrentRequest();var b=this;return this.requestedDisposable=this.scheduler.schedule(a,function(a,c){var d=b._processRequest(c),e=b.hasCompleted||b.hasFailed;return!e&&d>0?(b.requestedCount=d,yb(function(){b.requestedCount=0})):void 0}),this.requestedDisposable},disposeCurrentRequest:function(){this.requestedDisposable&&(this.requestedDisposable.dispose(),this.requestedDisposable=null)}}),b}(ic);Yb.controlled=function(a,b){return a&&Kb(a)&&(b=a,a=!0),null==a&&(a=!0),new fe(this,a,b)},Yb.pipe=function(a){function b(){c.resume()}var c=this.pausableBuffered();return a.addListener("drain",b),c.subscribe(function(b){!a.write(String(b))&&c.pause()},function(b){a.emit("error",b)},function(){!a._isStdio&&a.end(),a.removeListener("drain",b)}),c.resume(),a};var he=function(a){function b(b,c){this._o=b,this._xform=c,a.call(this)}return tb(b,a),b.prototype.next=function(a){var b=wa(this._xform["@@transducer/step"]).call(this._xform,this._o,a);b===va&&this._o.onError(b.e)},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._xform["@@transducer/result"](this._o)},b}(gc);Yb.transduce=function(a){var b=this;return new ie(function(c){var d=a(ca(c));return b.subscribe(new he(c,d))},b)};var ie=ma.AnonymousObservable=function(a){function b(a){return a&&ua(a.dispose)?a:ua(a)?yb(a):zb}function c(a,c){var d=c[0],f=c[1],g=wa(f.__subscribe).call(f,d);g!==va||d.fail(va.e)||e(va.e),d.setDisposable(b(g))}function d(b,c){this.source=c,this.__subscribe=b,a.call(this)}return tb(d,a),d.prototype._subscribe=function(a){var b=new je(a),d=[b,this];return Qb.scheduleRequired()?Qb.schedule(d,c):c(null,d),b},d}(ic),je=function(a){function b(b){a.call(this),this.observer=b,this.m=new Db}tb(b,a);var c=b.prototype;return c.next=function(a){var b=wa(this.observer.onNext).call(this.observer,a);b===va&&(this.dispose(),e(b.e))},c.error=function(a){var b=wa(this.observer.onError).call(this.observer,a);this.dispose(),b===va&&e(b.e)},c.completed=function(){var a=wa(this.observer.onCompleted).call(this.observer);this.dispose(),a===va&&e(a.e)},c.setDisposable=function(a){this.m.setDisposable(a)},c.getDisposable=function(){return this.m.getDisposable()},c.dispose=function(){a.prototype.dispose.call(this),this.m.dispose()},b}(gc),ke=function(a,b){this._s=a,this._o=b};ke.prototype.dispose=function(){if(!this._s.isDisposed&&null!==this._o){var a=this._s.observers.indexOf(this._o);this._s.observers.splice(a,1),this._o=null}};var le=ma.Subject=function(a){function b(){a.call(this),this.isDisposed=!1,this.isStopped=!1,this.observers=[],this.hasError=!1}return tb(b,a),ub(b.prototype,ec.prototype,{_subscribe:function(a){return Bb(this),this.isStopped?this.hasError?(a.onError(this.error),zb):(a.onCompleted(),zb):(this.observers.push(a),new ke(this,a))},hasObservers:function(){return Bb(this),this.observers.length>0},onCompleted:function(){if(Bb(this),!this.isStopped){this.isStopped=!0;for(var a=0,b=c(this.observers),d=b.length;d>a;a++)b[a].onCompleted();this.observers.length=0}},onError:function(a){if(Bb(this),!this.isStopped){this.isStopped=!0,this.error=a,this.hasError=!0;for(var b=0,d=c(this.observers),e=d.length;e>b;b++)d[b].onError(a);this.observers.length=0}},onNext:function(a){if(Bb(this),!this.isStopped)for(var b=0,d=c(this.observers),e=d.length;e>b;b++)d[b].onNext(a)},dispose:function(){this.isDisposed=!0,this.observers=null}}),b.create=function(a,b){return new ne(a,b)},b}(ic),me=ma.AsyncSubject=function(a){function b(){a.call(this),this.isDisposed=!1,this.isStopped=!1,this.hasValue=!1,this.observers=[],this.hasError=!1}return tb(b,a),ub(b.prototype,ec.prototype,{_subscribe:function(a){return Bb(this),this.isStopped?(this.hasError?a.onError(this.error):this.hasValue?(a.onNext(this.value),a.onCompleted()):a.onCompleted(),zb):(this.observers.push(a),new ke(this,a))},hasObservers:function(){return Bb(this),this.observers.length>0},onCompleted:function(){var a,b;if(Bb(this),!this.isStopped){this.isStopped=!0;var d=c(this.observers),b=d.length;if(this.hasValue)for(a=0;b>a;a++){var e=d[a];e.onNext(this.value),e.onCompleted()}else for(a=0;b>a;a++)d[a].onCompleted();this.observers.length=0}},onError:function(a){if(Bb(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=a;for(var b=0,d=c(this.observers),e=d.length;e>b;b++)d[b].onError(a);this.observers.length=0}},onNext:function(a){Bb(this),this.isStopped||(this.value=a,this.hasValue=!0)},dispose:function(){this.isDisposed=!0,this.observers=null,this.error=null,this.value=null}}),b}(ic),ne=ma.AnonymousSubject=function(a){function b(b,c){this.observer=b,this.observable=c,a.call(this)}return tb(b,a),ub(b.prototype,ec.prototype,{_subscribe:function(a){return this.observable.subscribe(a)},onCompleted:function(){this.observer.onCompleted()},onError:function(a){this.observer.onError(a)},onNext:function(a){this.observer.onNext(a)}}),b}(ic),oe=ma.BehaviorSubject=function(a){function b(b){a.call(this),this.value=b,this.observers=[],this.isDisposed=!1,this.isStopped=!1,this.hasError=!1}return tb(b,a),ub(b.prototype,ec.prototype,{_subscribe:function(a){return Bb(this),this.isStopped?(this.hasError?a.onError(this.error):a.onCompleted(),zb):(this.observers.push(a),a.onNext(this.value),new ke(this,a))},getValue:function(){return Bb(this),this.hasError&&e(this.error),this.value},hasObservers:function(){return Bb(this),this.observers.length>0},onCompleted:function(){if(Bb(this),!this.isStopped){this.isStopped=!0;for(var a=0,b=c(this.observers),d=b.length;d>a;a++)b[a].onCompleted();this.observers.length=0}},onError:function(a){if(Bb(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=a;for(var b=0,d=c(this.observers),e=d.length;e>b;b++)d[b].onError(a);this.observers.length=0}},onNext:function(a){if(Bb(this),!this.isStopped){this.value=a;for(var b=0,d=c(this.observers),e=d.length;e>b;b++)d[b].onNext(a)}},dispose:function(){this.isDisposed=!0,this.observers=null,this.value=null,this.error=null}}),b}(ic),pe=ma.ReplaySubject=function(a){function b(a,b){return yb(function(){b.dispose(),!a.isDisposed&&a.observers.splice(a.observers.indexOf(b),1)})}function d(b,c,d){this.bufferSize=null==b?e:b,this.windowSize=null==c?e:c,this.scheduler=d||Qb,this.q=[],this.observers=[],this.isStopped=!1,this.isDisposed=!1,this.hasError=!1,this.error=null,a.call(this)}var e=Math.pow(2,53)-1;return tb(d,a),ub(d.prototype,ec.prototype,{_subscribe:function(a){Bb(this);var c=new jc(this.scheduler,a),d=b(this,c);this._trim(this.scheduler.now()),this.observers.push(c);for(var e=0,f=this.q.length;f>e;e++)c.onNext(this.q[e].value);return this.hasError?c.onError(this.error):this.isStopped&&c.onCompleted(),c.ensureActive(),d},hasObservers:function(){return Bb(this),this.observers.length>0},_trim:function(a){for(;this.q.length>this.bufferSize;)this.q.shift();for(;this.q.length>0&&a-this.q[0].interval>this.windowSize;)this.q.shift()},onNext:function(a){if(Bb(this),!this.isStopped){var b=this.scheduler.now();this.q.push({interval:b,value:a}),this._trim(b);for(var d=0,e=c(this.observers),f=e.length;f>d;d++){var g=e[d];g.onNext(a),g.ensureActive()}}},onError:function(a){if(Bb(this),!this.isStopped){this.isStopped=!0,this.error=a,this.hasError=!0;var b=this.scheduler.now();this._trim(b);for(var d=0,e=c(this.observers),f=e.length;f>d;d++){var g=e[d];g.onError(a),g.ensureActive()}this.observers.length=0}},onCompleted:function(){if(Bb(this),!this.isStopped){this.isStopped=!0;var a=this.scheduler.now();this._trim(a);for(var b=0,d=c(this.observers),e=d.length;e>b;b++){var f=d[b];f.onCompleted(),f.ensureActive()}this.observers.length=0}},dispose:function(){this.isDisposed=!0,this.observers=null}}),d}(ic);ma.Pauser=function(a){function b(){a.call(this)}return tb(b,a),b.prototype.pause=function(){this.onNext(!1)},b.prototype.resume=function(){this.onNext(!0)},b}(le),"function"==typeof define&&"object"==typeof define.amd&&define.amd?(la.Rx=ma,define(function(){return ma})):ea&&fa?ja?(fa.exports=ma).Rx=ma:ea.Rx=ma:la.Rx=ma;var qe=j()}).call(this); -//# sourceMappingURL=rx.lite.map \ No newline at end of file diff --git a/node_modules/safe-buffer/LICENSE b/node_modules/safe-buffer/LICENSE deleted file mode 100644 index 0c068ce..0000000 --- a/node_modules/safe-buffer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -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. diff --git a/node_modules/safe-buffer/README.md b/node_modules/safe-buffer/README.md deleted file mode 100644 index e9a81af..0000000 --- a/node_modules/safe-buffer/README.md +++ /dev/null @@ -1,584 +0,0 @@ -# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] - -[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg -[travis-url]: https://travis-ci.org/feross/safe-buffer -[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg -[npm-url]: https://npmjs.org/package/safe-buffer -[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg -[downloads-url]: https://npmjs.org/package/safe-buffer -[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg -[standard-url]: https://standardjs.com - -#### Safer Node.js Buffer API - -**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, -`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** - -**Uses the built-in implementation when available.** - -## install - -``` -npm install safe-buffer -``` - -## usage - -The goal of this package is to provide a safe replacement for the node.js `Buffer`. - -It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to -the top of your node.js modules: - -```js -var Buffer = require('safe-buffer').Buffer - -// Existing buffer code will continue to work without issues: - -new Buffer('hey', 'utf8') -new Buffer([1, 2, 3], 'utf8') -new Buffer(obj) -new Buffer(16) // create an uninitialized buffer (potentially unsafe) - -// But you can use these new explicit APIs to make clear what you want: - -Buffer.from('hey', 'utf8') // convert from many types to a Buffer -Buffer.alloc(16) // create a zero-filled buffer (safe) -Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) -``` - -## api - -### Class Method: Buffer.from(array) - - -* `array` {Array} - -Allocates a new `Buffer` using an `array` of octets. - -```js -const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); - // creates a new Buffer containing ASCII bytes - // ['b','u','f','f','e','r'] -``` - -A `TypeError` will be thrown if `array` is not an `Array`. - -### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) - - -* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or - a `new ArrayBuffer()` -* `byteOffset` {Number} Default: `0` -* `length` {Number} Default: `arrayBuffer.length - byteOffset` - -When passed a reference to the `.buffer` property of a `TypedArray` instance, -the newly created `Buffer` will share the same allocated memory as the -TypedArray. - -```js -const arr = new Uint16Array(2); -arr[0] = 5000; -arr[1] = 4000; - -const buf = Buffer.from(arr.buffer); // shares the memory with arr; - -console.log(buf); - // Prints: - -// changing the TypedArray changes the Buffer also -arr[1] = 6000; - -console.log(buf); - // Prints: -``` - -The optional `byteOffset` and `length` arguments specify a memory range within -the `arrayBuffer` that will be shared by the `Buffer`. - -```js -const ab = new ArrayBuffer(10); -const buf = Buffer.from(ab, 0, 2); -console.log(buf.length); - // Prints: 2 -``` - -A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. - -### Class Method: Buffer.from(buffer) - - -* `buffer` {Buffer} - -Copies the passed `buffer` data onto a new `Buffer` instance. - -```js -const buf1 = Buffer.from('buffer'); -const buf2 = Buffer.from(buf1); - -buf1[0] = 0x61; -console.log(buf1.toString()); - // 'auffer' -console.log(buf2.toString()); - // 'buffer' (copy is not changed) -``` - -A `TypeError` will be thrown if `buffer` is not a `Buffer`. - -### Class Method: Buffer.from(str[, encoding]) - - -* `str` {String} String to encode. -* `encoding` {String} Encoding to use, Default: `'utf8'` - -Creates a new `Buffer` containing the given JavaScript string `str`. If -provided, the `encoding` parameter identifies the character encoding. -If not provided, `encoding` defaults to `'utf8'`. - -```js -const buf1 = Buffer.from('this is a tést'); -console.log(buf1.toString()); - // prints: this is a tést -console.log(buf1.toString('ascii')); - // prints: this is a tC)st - -const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); -console.log(buf2.toString()); - // prints: this is a tést -``` - -A `TypeError` will be thrown if `str` is not a string. - -### Class Method: Buffer.alloc(size[, fill[, encoding]]) - - -* `size` {Number} -* `fill` {Value} Default: `undefined` -* `encoding` {String} Default: `utf8` - -Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the -`Buffer` will be *zero-filled*. - -```js -const buf = Buffer.alloc(5); -console.log(buf); - // -``` - -The `size` must be less than or equal to the value of -`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is -`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will -be created if a `size` less than or equal to 0 is specified. - -If `fill` is specified, the allocated `Buffer` will be initialized by calling -`buf.fill(fill)`. See [`buf.fill()`][] for more information. - -```js -const buf = Buffer.alloc(5, 'a'); -console.log(buf); - // -``` - -If both `fill` and `encoding` are specified, the allocated `Buffer` will be -initialized by calling `buf.fill(fill, encoding)`. For example: - -```js -const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); -console.log(buf); - // -``` - -Calling `Buffer.alloc(size)` can be significantly slower than the alternative -`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance -contents will *never contain sensitive data*. - -A `TypeError` will be thrown if `size` is not a number. - -### Class Method: Buffer.allocUnsafe(size) - - -* `size` {Number} - -Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must -be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit -architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is -thrown. A zero-length Buffer will be created if a `size` less than or equal to -0 is specified. - -The underlying memory for `Buffer` instances created in this way is *not -initialized*. The contents of the newly created `Buffer` are unknown and -*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such -`Buffer` instances to zeroes. - -```js -const buf = Buffer.allocUnsafe(5); -console.log(buf); - // - // (octets will be different, every time) -buf.fill(0); -console.log(buf); - // -``` - -A `TypeError` will be thrown if `size` is not a number. - -Note that the `Buffer` module pre-allocates an internal `Buffer` instance of -size `Buffer.poolSize` that is used as a pool for the fast allocation of new -`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated -`new Buffer(size)` constructor) only when `size` is less than or equal to -`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default -value of `Buffer.poolSize` is `8192` but can be modified. - -Use of this pre-allocated internal memory pool is a key difference between -calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. -Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer -pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal -Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The -difference is subtle but can be important when an application requires the -additional performance that `Buffer.allocUnsafe(size)` provides. - -### Class Method: Buffer.allocUnsafeSlow(size) - - -* `size` {Number} - -Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The -`size` must be less than or equal to the value of -`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is -`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will -be created if a `size` less than or equal to 0 is specified. - -The underlying memory for `Buffer` instances created in this way is *not -initialized*. The contents of the newly created `Buffer` are unknown and -*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such -`Buffer` instances to zeroes. - -When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, -allocations under 4KB are, by default, sliced from a single pre-allocated -`Buffer`. This allows applications to avoid the garbage collection overhead of -creating many individually allocated Buffers. This approach improves both -performance and memory usage by eliminating the need to track and cleanup as -many `Persistent` objects. - -However, in the case where a developer may need to retain a small chunk of -memory from a pool for an indeterminate amount of time, it may be appropriate -to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then -copy out the relevant bits. - -```js -// need to keep around a few small chunks of memory -const store = []; - -socket.on('readable', () => { - const data = socket.read(); - // allocate for retained data - const sb = Buffer.allocUnsafeSlow(10); - // copy the data into the new allocation - data.copy(sb, 0, 0, 10); - store.push(sb); -}); -``` - -Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* -a developer has observed undue memory retention in their applications. - -A `TypeError` will be thrown if `size` is not a number. - -### All the Rest - -The rest of the `Buffer` API is exactly the same as in node.js. -[See the docs](https://nodejs.org/api/buffer.html). - - -## Related links - -- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) -- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) - -## Why is `Buffer` unsafe? - -Today, the node.js `Buffer` constructor is overloaded to handle many different argument -types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), -`ArrayBuffer`, and also `Number`. - -The API is optimized for convenience: you can throw any type at it, and it will try to do -what you want. - -Because the Buffer constructor is so powerful, you often see code like this: - -```js -// Convert UTF-8 strings to hex -function toHex (str) { - return new Buffer(str).toString('hex') -} -``` - -***But what happens if `toHex` is called with a `Number` argument?*** - -### Remote Memory Disclosure - -If an attacker can make your program call the `Buffer` constructor with a `Number` -argument, then they can make it allocate uninitialized memory from the node.js process. -This could potentially disclose TLS private keys, user data, or database passwords. - -When the `Buffer` constructor is passed a `Number` argument, it returns an -**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like -this, you **MUST** overwrite the contents before returning it to the user. - -From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): - -> `new Buffer(size)` -> -> - `size` Number -> -> The underlying memory for `Buffer` instances created in this way is not initialized. -> **The contents of a newly created `Buffer` are unknown and could contain sensitive -> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. - -(Emphasis our own.) - -Whenever the programmer intended to create an uninitialized `Buffer` you often see code -like this: - -```js -var buf = new Buffer(16) - -// Immediately overwrite the uninitialized buffer with data from another buffer -for (var i = 0; i < buf.length; i++) { - buf[i] = otherBuf[i] -} -``` - - -### Would this ever be a problem in real code? - -Yes. It's surprisingly common to forget to check the type of your variables in a -dynamically-typed language like JavaScript. - -Usually the consequences of assuming the wrong type is that your program crashes with an -uncaught exception. But the failure mode for forgetting to check the type of arguments to -the `Buffer` constructor is more catastrophic. - -Here's an example of a vulnerable service that takes a JSON payload and converts it to -hex: - -```js -// Take a JSON payload {str: "some string"} and convert it to hex -var server = http.createServer(function (req, res) { - var data = '' - req.setEncoding('utf8') - req.on('data', function (chunk) { - data += chunk - }) - req.on('end', function () { - var body = JSON.parse(data) - res.end(new Buffer(body.str).toString('hex')) - }) -}) - -server.listen(8080) -``` - -In this example, an http client just has to send: - -```json -{ - "str": 1000 -} -``` - -and it will get back 1,000 bytes of uninitialized memory from the server. - -This is a very serious bug. It's similar in severity to the -[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process -memory by remote attackers. - - -### Which real-world packages were vulnerable? - -#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) - -[Mathias Buus](https://github.com/mafintosh) and I -([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, -[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow -anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get -them to reveal 20 bytes at a time of uninitialized memory from the node.js process. - -Here's -[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) -that fixed it. We released a new fixed version, created a -[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all -vulnerable versions on npm so users will get a warning to upgrade to a newer version. - -#### [`ws`](https://www.npmjs.com/package/ws) - -That got us wondering if there were other vulnerable packages. Sure enough, within a short -period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the -most popular WebSocket implementation in node.js. - -If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as -expected, then uninitialized server memory would be disclosed to the remote peer. - -These were the vulnerable methods: - -```js -socket.send(number) -socket.ping(number) -socket.pong(number) -``` - -Here's a vulnerable socket server with some echo functionality: - -```js -server.on('connection', function (socket) { - socket.on('message', function (message) { - message = JSON.parse(message) - if (message.type === 'echo') { - socket.send(message.data) // send back the user's message - } - }) -}) -``` - -`socket.send(number)` called on the server, will disclose server memory. - -Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue -was fixed, with a more detailed explanation. Props to -[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the -[Node Security Project disclosure](https://nodesecurity.io/advisories/67). - - -### What's the solution? - -It's important that node.js offers a fast way to get memory otherwise performance-critical -applications would needlessly get a lot slower. - -But we need a better way to *signal our intent* as programmers. **When we want -uninitialized memory, we should request it explicitly.** - -Sensitive functionality should not be packed into a developer-friendly API that loosely -accepts many different types. This type of API encourages the lazy practice of passing -variables in without checking the type very carefully. - -#### A new API: `Buffer.allocUnsafe(number)` - -The functionality of creating buffers with uninitialized memory should be part of another -API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that -frequently gets user input of all sorts of different types passed into it. - -```js -var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! - -// Immediately overwrite the uninitialized buffer with data from another buffer -for (var i = 0; i < buf.length; i++) { - buf[i] = otherBuf[i] -} -``` - - -### How do we fix node.js core? - -We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as -`semver-major`) which defends against one case: - -```js -var str = 16 -new Buffer(str, 'utf8') -``` - -In this situation, it's implied that the programmer intended the first argument to be a -string, since they passed an encoding as a second argument. Today, node.js will allocate -uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not -what the programmer intended. - -But this is only a partial solution, since if the programmer does `new Buffer(variable)` -(without an `encoding` parameter) there's no way to know what they intended. If `variable` -is sometimes a number, then uninitialized memory will sometimes be returned. - -### What's the real long-term fix? - -We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when -we need uninitialized memory. But that would break 1000s of packages. - -~~We believe the best solution is to:~~ - -~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ - -~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ - -#### Update - -We now support adding three new APIs: - -- `Buffer.from(value)` - convert from any type to a buffer -- `Buffer.alloc(size)` - create a zero-filled buffer -- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size - -This solves the core problem that affected `ws` and `bittorrent-dht` which is -`Buffer(variable)` getting tricked into taking a number argument. - -This way, existing code continues working and the impact on the npm ecosystem will be -minimal. Over time, npm maintainers can migrate performance-critical code to use -`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. - - -### Conclusion - -We think there's a serious design issue with the `Buffer` API as it exists today. It -promotes insecure software by putting high-risk functionality into a convenient API -with friendly "developer ergonomics". - -This wasn't merely a theoretical exercise because we found the issue in some of the -most popular npm packages. - -Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of -`buffer`. - -```js -var Buffer = require('safe-buffer').Buffer -``` - -Eventually, we hope that node.js core can switch to this new, safer behavior. We believe -the impact on the ecosystem would be minimal since it's not a breaking change. -Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while -older, insecure packages would magically become safe from this attack vector. - - -## links - -- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) -- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) -- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) - - -## credit - -The original issues in `bittorrent-dht` -([disclosure](https://nodesecurity.io/advisories/68)) and -`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by -[Mathias Buus](https://github.com/mafintosh) and -[Feross Aboukhadijeh](http://feross.org/). - -Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues -and for his work running the [Node Security Project](https://nodesecurity.io/). - -Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and -auditing the code. - - -## license - -MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/node_modules/safe-buffer/index.d.ts b/node_modules/safe-buffer/index.d.ts deleted file mode 100644 index e9fed80..0000000 --- a/node_modules/safe-buffer/index.d.ts +++ /dev/null @@ -1,187 +0,0 @@ -declare module "safe-buffer" { - export class Buffer { - length: number - write(string: string, offset?: number, length?: number, encoding?: string): number; - toString(encoding?: string, start?: number, end?: number): string; - toJSON(): { type: 'Buffer', data: any[] }; - equals(otherBuffer: Buffer): boolean; - compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; - copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; - slice(start?: number, end?: number): Buffer; - writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readUInt8(offset: number, noAssert?: boolean): number; - readUInt16LE(offset: number, noAssert?: boolean): number; - readUInt16BE(offset: number, noAssert?: boolean): number; - readUInt32LE(offset: number, noAssert?: boolean): number; - readUInt32BE(offset: number, noAssert?: boolean): number; - readInt8(offset: number, noAssert?: boolean): number; - readInt16LE(offset: number, noAssert?: boolean): number; - readInt16BE(offset: number, noAssert?: boolean): number; - readInt32LE(offset: number, noAssert?: boolean): number; - readInt32BE(offset: number, noAssert?: boolean): number; - readFloatLE(offset: number, noAssert?: boolean): number; - readFloatBE(offset: number, noAssert?: boolean): number; - readDoubleLE(offset: number, noAssert?: boolean): number; - readDoubleBE(offset: number, noAssert?: boolean): number; - swap16(): Buffer; - swap32(): Buffer; - swap64(): Buffer; - writeUInt8(value: number, offset: number, noAssert?: boolean): number; - writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeInt8(value: number, offset: number, noAssert?: boolean): number; - writeInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeFloatLE(value: number, offset: number, noAssert?: boolean): number; - writeFloatBE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; - fill(value: any, offset?: number, end?: number): this; - indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; - - /** - * Allocates a new buffer containing the given {str}. - * - * @param str String to store in buffer. - * @param encoding encoding to use, optional. Default is 'utf8' - */ - constructor (str: string, encoding?: string); - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - */ - constructor (size: number); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: Uint8Array); - /** - * Produces a Buffer backed by the same allocated memory as - * the given {ArrayBuffer}. - * - * - * @param arrayBuffer The ArrayBuffer with which to share memory. - */ - constructor (arrayBuffer: ArrayBuffer); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: any[]); - /** - * Copies the passed {buffer} data onto a new {Buffer} instance. - * - * @param buffer The buffer to copy. - */ - constructor (buffer: Buffer); - prototype: Buffer; - /** - * Allocates a new Buffer using an {array} of octets. - * - * @param array - */ - static from(array: any[]): Buffer; - /** - * When passed a reference to the .buffer property of a TypedArray instance, - * the newly created Buffer will share the same allocated memory as the TypedArray. - * The optional {byteOffset} and {length} arguments specify a memory range - * within the {arrayBuffer} that will be shared by the Buffer. - * - * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() - * @param byteOffset - * @param length - */ - static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; - /** - * Copies the passed {buffer} data onto a new Buffer instance. - * - * @param buffer - */ - static from(buffer: Buffer): Buffer; - /** - * Creates a new Buffer containing the given JavaScript string {str}. - * If provided, the {encoding} parameter identifies the character encoding. - * If not provided, {encoding} defaults to 'utf8'. - * - * @param str - */ - static from(str: string, encoding?: string): Buffer; - /** - * Returns true if {obj} is a Buffer - * - * @param obj object to test. - */ - static isBuffer(obj: any): obj is Buffer; - /** - * Returns true if {encoding} is a valid encoding argument. - * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' - * - * @param encoding string to test. - */ - static isEncoding(encoding: string): boolean; - /** - * Gives the actual byte length of a string. encoding defaults to 'utf8'. - * This is not the same as String.prototype.length since that returns the number of characters in a string. - * - * @param string string to test. - * @param encoding encoding used to evaluate (defaults to 'utf8') - */ - static byteLength(string: string, encoding?: string): number; - /** - * Returns a buffer which is the result of concatenating all the buffers in the list together. - * - * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. - * If the list has exactly one item, then the first item of the list is returned. - * If the list has more than one item, then a new Buffer is created. - * - * @param list An array of Buffer objects to concatenate - * @param totalLength Total length of the buffers when concatenated. - * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. - */ - static concat(list: Buffer[], totalLength?: number): Buffer; - /** - * The same as buf1.compare(buf2). - */ - static compare(buf1: Buffer, buf2: Buffer): number; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - * @param fill if specified, buffer will be initialized by calling buf.fill(fill). - * If parameter is omitted, buffer will be filled with zeros. - * @param encoding encoding used for call to buf.fill while initalizing - */ - static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; - /** - * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafe(size: number): Buffer; - /** - * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafeSlow(size: number): Buffer; - } -} \ No newline at end of file diff --git a/node_modules/safe-buffer/index.js b/node_modules/safe-buffer/index.js deleted file mode 100644 index 22438da..0000000 --- a/node_modules/safe-buffer/index.js +++ /dev/null @@ -1,62 +0,0 @@ -/* eslint-disable node/no-deprecated-api */ -var buffer = require('buffer') -var Buffer = buffer.Buffer - -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] - } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} - -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) -} - -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) - -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) - } - return buf -} - -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} - -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return buffer.SlowBuffer(size) -} diff --git a/node_modules/safe-buffer/package.json b/node_modules/safe-buffer/package.json deleted file mode 100644 index 623fbc3..0000000 --- a/node_modules/safe-buffer/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "safe-buffer", - "description": "Safer Node.js Buffer API", - "version": "5.1.2", - "author": { - "name": "Feross Aboukhadijeh", - "email": "feross@feross.org", - "url": "http://feross.org" - }, - "bugs": { - "url": "https://github.com/feross/safe-buffer/issues" - }, - "devDependencies": { - "standard": "*", - "tape": "^4.0.0" - }, - "homepage": "https://github.com/feross/safe-buffer", - "keywords": [ - "buffer", - "buffer allocate", - "node security", - "safe", - "safe-buffer", - "security", - "uninitialized" - ], - "license": "MIT", - "main": "index.js", - "types": "index.d.ts", - "repository": { - "type": "git", - "url": "git://github.com/feross/safe-buffer.git" - }, - "scripts": { - "test": "standard && tape test/*.js" - } -} diff --git a/node_modules/semver/LICENSE b/node_modules/semver/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/node_modules/semver/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/semver/README.md b/node_modules/semver/README.md deleted file mode 100644 index f8dfa5a..0000000 --- a/node_modules/semver/README.md +++ /dev/null @@ -1,412 +0,0 @@ -semver(1) -- The semantic versioner for npm -=========================================== - -## Install - -```bash -npm install --save semver -```` - -## Usage - -As a node module: - -```js -const semver = require('semver') - -semver.valid('1.2.3') // '1.2.3' -semver.valid('a.b.c') // null -semver.clean(' =v1.2.3 ') // '1.2.3' -semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true -semver.gt('1.2.3', '9.8.7') // false -semver.lt('1.2.3', '9.8.7') // true -semver.minVersion('>=1.0.0') // '1.0.0' -semver.valid(semver.coerce('v2')) // '2.0.0' -semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7' -``` - -As a command-line utility: - -``` -$ semver -h - -A JavaScript implementation of the https://semver.org/ specification -Copyright Isaac Z. Schlueter - -Usage: semver [options] [ [...]] -Prints valid versions sorted by SemVer precedence - -Options: --r --range - Print versions that match the specified range. - --i --increment [] - Increment a version by the specified level. Level can - be one of: major, minor, patch, premajor, preminor, - prepatch, or prerelease. Default level is 'patch'. - Only one version may be specified. - ---preid - Identifier to be used to prefix premajor, preminor, - prepatch or prerelease version increments. - --l --loose - Interpret versions and ranges loosely - --p --include-prerelease - Always include prerelease versions in range matching - --c --coerce - Coerce a string into SemVer if possible - (does not imply --loose) - -Program exits successfully if any valid version satisfies -all supplied ranges, and prints all satisfying versions. - -If no satisfying versions are found, then exits failure. - -Versions are printed in ascending order, so supplying -multiple versions to the utility will just sort them. -``` - -## Versions - -A "version" is described by the `v2.0.0` specification found at -. - -A leading `"="` or `"v"` character is stripped off and ignored. - -## Ranges - -A `version range` is a set of `comparators` which specify versions -that satisfy the range. - -A `comparator` is composed of an `operator` and a `version`. The set -of primitive `operators` is: - -* `<` Less than -* `<=` Less than or equal to -* `>` Greater than -* `>=` Greater than or equal to -* `=` Equal. If no operator is specified, then equality is assumed, - so this operator is optional, but MAY be included. - -For example, the comparator `>=1.2.7` would match the versions -`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` -or `1.1.0`. - -Comparators can be joined by whitespace to form a `comparator set`, -which is satisfied by the **intersection** of all of the comparators -it includes. - -A range is composed of one or more comparator sets, joined by `||`. A -version matches a range if and only if every comparator in at least -one of the `||`-separated comparator sets is satisfied by the version. - -For example, the range `>=1.2.7 <1.3.0` would match the versions -`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, -or `1.1.0`. - -The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, -`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. - -### Prerelease Tags - -If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then -it will only be allowed to satisfy comparator sets if at least one -comparator with the same `[major, minor, patch]` tuple also has a -prerelease tag. - -For example, the range `>1.2.3-alpha.3` would be allowed to match the -version `1.2.3-alpha.7`, but it would *not* be satisfied by -`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater -than" `1.2.3-alpha.3` according to the SemVer sort rules. The version -range only accepts prerelease tags on the `1.2.3` version. The -version `3.4.5` *would* satisfy the range, because it does not have a -prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. - -The purpose for this behavior is twofold. First, prerelease versions -frequently are updated very quickly, and contain many breaking changes -that are (by the author's design) not yet fit for public consumption. -Therefore, by default, they are excluded from range matching -semantics. - -Second, a user who has opted into using a prerelease version has -clearly indicated the intent to use *that specific* set of -alpha/beta/rc versions. By including a prerelease tag in the range, -the user is indicating that they are aware of the risk. However, it -is still not appropriate to assume that they have opted into taking a -similar risk on the *next* set of prerelease versions. - -Note that this behavior can be suppressed (treating all prerelease -versions as if they were normal versions, for the purpose of range -matching) by setting the `includePrerelease` flag on the options -object to any -[functions](https://github.com/npm/node-semver#functions) that do -range matching. - -#### Prerelease Identifiers - -The method `.inc` takes an additional `identifier` string argument that -will append the value of the string as a prerelease identifier: - -```javascript -semver.inc('1.2.3', 'prerelease', 'beta') -// '1.2.4-beta.0' -``` - -command-line example: - -```bash -$ semver 1.2.3 -i prerelease --preid beta -1.2.4-beta.0 -``` - -Which then can be used to increment further: - -```bash -$ semver 1.2.4-beta.0 -i prerelease -1.2.4-beta.1 -``` - -### Advanced Range Syntax - -Advanced range syntax desugars to primitive comparators in -deterministic ways. - -Advanced ranges may be combined in the same way as primitive -comparators using white space or `||`. - -#### Hyphen Ranges `X.Y.Z - A.B.C` - -Specifies an inclusive set. - -* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` - -If a partial version is provided as the first version in the inclusive -range, then the missing pieces are replaced with zeroes. - -* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` - -If a partial version is provided as the second version in the -inclusive range, then all versions that start with the supplied parts -of the tuple are accepted, but nothing that would be greater than the -provided tuple parts. - -* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` -* `1.2.3 - 2` := `>=1.2.3 <3.0.0` - -#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` - -Any of `X`, `x`, or `*` may be used to "stand in" for one of the -numeric values in the `[major, minor, patch]` tuple. - -* `*` := `>=0.0.0` (Any version satisfies) -* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) -* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) - -A partial version range is treated as an X-Range, so the special -character is in fact optional. - -* `""` (empty string) := `*` := `>=0.0.0` -* `1` := `1.x.x` := `>=1.0.0 <2.0.0` -* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` - -#### Tilde Ranges `~1.2.3` `~1.2` `~1` - -Allows patch-level changes if a minor version is specified on the -comparator. Allows minor-level changes if not. - -* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` -* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) -* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) -* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` -* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) -* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) -* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in - the `1.2.3` version will be allowed, if they are greater than or - equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but - `1.2.4-beta.2` would not, because it is a prerelease of a - different `[major, minor, patch]` tuple. - -#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` - -Allows changes that do not modify the left-most non-zero digit in the -`[major, minor, patch]` tuple. In other words, this allows patch and -minor updates for versions `1.0.0` and above, patch updates for -versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. - -Many authors treat a `0.x` version as if the `x` were the major -"breaking-change" indicator. - -Caret ranges are ideal when an author may make breaking changes -between `0.2.4` and `0.3.0` releases, which is a common practice. -However, it presumes that there will *not* be breaking changes between -`0.2.4` and `0.2.5`. It allows for changes that are presumed to be -additive (but non-breaking), according to commonly observed practices. - -* `^1.2.3` := `>=1.2.3 <2.0.0` -* `^0.2.3` := `>=0.2.3 <0.3.0` -* `^0.0.3` := `>=0.0.3 <0.0.4` -* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in - the `1.2.3` version will be allowed, if they are greater than or - equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but - `1.2.4-beta.2` would not, because it is a prerelease of a - different `[major, minor, patch]` tuple. -* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the - `0.0.3` version *only* will be allowed, if they are greater than or - equal to `beta`. So, `0.0.3-pr.2` would be allowed. - -When parsing caret ranges, a missing `patch` value desugars to the -number `0`, but will allow flexibility within that value, even if the -major and minor versions are both `0`. - -* `^1.2.x` := `>=1.2.0 <2.0.0` -* `^0.0.x` := `>=0.0.0 <0.1.0` -* `^0.0` := `>=0.0.0 <0.1.0` - -A missing `minor` and `patch` values will desugar to zero, but also -allow flexibility within those values, even if the major version is -zero. - -* `^1.x` := `>=1.0.0 <2.0.0` -* `^0.x` := `>=0.0.0 <1.0.0` - -### Range Grammar - -Putting all this together, here is a Backus-Naur grammar for ranges, -for the benefit of parser authors: - -```bnf -range-set ::= range ( logical-or range ) * -logical-or ::= ( ' ' ) * '||' ( ' ' ) * -range ::= hyphen | simple ( ' ' simple ) * | '' -hyphen ::= partial ' - ' partial -simple ::= primitive | partial | tilde | caret -primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial -partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? -xr ::= 'x' | 'X' | '*' | nr -nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * -tilde ::= '~' partial -caret ::= '^' partial -qualifier ::= ( '-' pre )? ( '+' build )? -pre ::= parts -build ::= parts -parts ::= part ( '.' part ) * -part ::= nr | [-0-9A-Za-z]+ -``` - -## Functions - -All methods and classes take a final `options` object argument. All -options in this object are `false` by default. The options supported -are: - -- `loose` Be more forgiving about not-quite-valid semver strings. - (Any resulting output will always be 100% strict compliant, of - course.) For backwards compatibility reasons, if the `options` - argument is a boolean value instead of an object, it is interpreted - to be the `loose` param. -- `includePrerelease` Set to suppress the [default - behavior](https://github.com/npm/node-semver#prerelease-tags) of - excluding prerelease tagged versions from ranges unless they are - explicitly opted into. - -Strict-mode Comparators and Ranges will be strict about the SemVer -strings that they parse. - -* `valid(v)`: Return the parsed version, or null if it's not valid. -* `inc(v, release)`: Return the version incremented by the release - type (`major`, `premajor`, `minor`, `preminor`, `patch`, - `prepatch`, or `prerelease`), or null if it's not valid - * `premajor` in one call will bump the version up to the next major - version and down to a prerelease of that major version. - `preminor`, and `prepatch` work the same way. - * If called from a non-prerelease version, the `prerelease` will work the - same as `prepatch`. It increments the patch version, then makes a - prerelease. If the input version is already a prerelease it simply - increments it. -* `prerelease(v)`: Returns an array of prerelease components, or null - if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` -* `major(v)`: Return the major version number. -* `minor(v)`: Return the minor version number. -* `patch(v)`: Return the patch version number. -* `intersects(r1, r2, loose)`: Return true if the two supplied ranges - or comparators intersect. -* `parse(v)`: Attempt to parse a string as a semantic version, returning either - a `SemVer` object or `null`. - -### Comparison - -* `gt(v1, v2)`: `v1 > v2` -* `gte(v1, v2)`: `v1 >= v2` -* `lt(v1, v2)`: `v1 < v2` -* `lte(v1, v2)`: `v1 <= v2` -* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, - even if they're not the exact same string. You already know how to - compare strings. -* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. -* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call - the corresponding function above. `"==="` and `"!=="` do simple - string comparison, but are included for completeness. Throws if an - invalid comparison string is provided. -* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if - `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. -* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions - in descending order when passed to `Array.sort()`. -* `diff(v1, v2)`: Returns difference between two versions by the release type - (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), - or null if the versions are the same. - -### Comparators - -* `intersects(comparator)`: Return true if the comparators intersect - -### Ranges - -* `validRange(range)`: Return the valid range or null if it's not valid -* `satisfies(version, range)`: Return true if the version satisfies the - range. -* `maxSatisfying(versions, range)`: Return the highest version in the list - that satisfies the range, or `null` if none of them do. -* `minSatisfying(versions, range)`: Return the lowest version in the list - that satisfies the range, or `null` if none of them do. -* `minVersion(range)`: Return the lowest version that can possibly match - the given range. -* `gtr(version, range)`: Return `true` if version is greater than all the - versions possible in the range. -* `ltr(version, range)`: Return `true` if version is less than all the - versions possible in the range. -* `outside(version, range, hilo)`: Return true if the version is outside - the bounds of the range in either the high or low direction. The - `hilo` argument must be either the string `'>'` or `'<'`. (This is - the function called by `gtr` and `ltr`.) -* `intersects(range)`: Return true if any of the ranges comparators intersect - -Note that, since ranges may be non-contiguous, a version might not be -greater than a range, less than a range, *or* satisfy a range! For -example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` -until `2.0.0`, so the version `1.2.10` would not be greater than the -range (because `2.0.1` satisfies, which is higher), nor less than the -range (since `1.2.8` satisfies, which is lower), and it also does not -satisfy the range. - -If you want to know if a version satisfies or does not satisfy a -range, use the `satisfies(version, range)` function. - -### Coercion - -* `coerce(version)`: Coerces a string to semver if possible - -This aims to provide a very forgiving translation of a non-semver string to -semver. It looks for the first digit in a string, and consumes all -remaining characters which satisfy at least a partial semver (e.g., `1`, -`1.2`, `1.2.3`) up to the max permitted length (256 characters). Longer -versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). All -surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes -`3.4.0`). Only text which lacks digits will fail coercion (`version one` -is not valid). The maximum length for any semver component considered for -coercion is 16 characters; longer components will be ignored -(`10000000000000000.4.7.4` becomes `4.7.4`). The maximum value for any -semver component is `Number.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value -components are invalid (`9999999999999999.4.7.4` is likely invalid). diff --git a/node_modules/semver/bin/semver b/node_modules/semver/bin/semver deleted file mode 100755 index 801e77f..0000000 --- a/node_modules/semver/bin/semver +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env node -// Standalone semver comparison program. -// Exits successfully and prints matching version(s) if -// any supplied version is valid and passes all tests. - -var argv = process.argv.slice(2) - -var versions = [] - -var range = [] - -var inc = null - -var version = require('../package.json').version - -var loose = false - -var includePrerelease = false - -var coerce = false - -var identifier - -var semver = require('../semver') - -var reverse = false - -var options = {} - -main() - -function main () { - if (!argv.length) return help() - while (argv.length) { - var a = argv.shift() - var indexOfEqualSign = a.indexOf('=') - if (indexOfEqualSign !== -1) { - a = a.slice(0, indexOfEqualSign) - argv.unshift(a.slice(indexOfEqualSign + 1)) - } - switch (a) { - case '-rv': case '-rev': case '--rev': case '--reverse': - reverse = true - break - case '-l': case '--loose': - loose = true - break - case '-p': case '--include-prerelease': - includePrerelease = true - break - case '-v': case '--version': - versions.push(argv.shift()) - break - case '-i': case '--inc': case '--increment': - switch (argv[0]) { - case 'major': case 'minor': case 'patch': case 'prerelease': - case 'premajor': case 'preminor': case 'prepatch': - inc = argv.shift() - break - default: - inc = 'patch' - break - } - break - case '--preid': - identifier = argv.shift() - break - case '-r': case '--range': - range.push(argv.shift()) - break - case '-c': case '--coerce': - coerce = true - break - case '-h': case '--help': case '-?': - return help() - default: - versions.push(a) - break - } - } - - var options = { loose: loose, includePrerelease: includePrerelease } - - versions = versions.map(function (v) { - return coerce ? (semver.coerce(v) || { version: v }).version : v - }).filter(function (v) { - return semver.valid(v) - }) - if (!versions.length) return fail() - if (inc && (versions.length !== 1 || range.length)) { return failInc() } - - for (var i = 0, l = range.length; i < l; i++) { - versions = versions.filter(function (v) { - return semver.satisfies(v, range[i], options) - }) - if (!versions.length) return fail() - } - return success(versions) -} - -function failInc () { - console.error('--inc can only be used on a single version with no range') - fail() -} - -function fail () { process.exit(1) } - -function success () { - var compare = reverse ? 'rcompare' : 'compare' - versions.sort(function (a, b) { - return semver[compare](a, b, options) - }).map(function (v) { - return semver.clean(v, options) - }).map(function (v) { - return inc ? semver.inc(v, inc, options, identifier) : v - }).forEach(function (v, i, _) { console.log(v) }) -} - -function help () { - console.log(['SemVer ' + version, - '', - 'A JavaScript implementation of the https://semver.org/ specification', - 'Copyright Isaac Z. Schlueter', - '', - 'Usage: semver [options] [ [...]]', - 'Prints valid versions sorted by SemVer precedence', - '', - 'Options:', - '-r --range ', - ' Print versions that match the specified range.', - '', - '-i --increment []', - ' Increment a version by the specified level. Level can', - ' be one of: major, minor, patch, premajor, preminor,', - " prepatch, or prerelease. Default level is 'patch'.", - ' Only one version may be specified.', - '', - '--preid ', - ' Identifier to be used to prefix premajor, preminor,', - ' prepatch or prerelease version increments.', - '', - '-l --loose', - ' Interpret versions and ranges loosely', - '', - '-p --include-prerelease', - ' Always include prerelease versions in range matching', - '', - '-c --coerce', - ' Coerce a string into SemVer if possible', - ' (does not imply --loose)', - '', - 'Program exits successfully if any valid version satisfies', - 'all supplied ranges, and prints all satisfying versions.', - '', - 'If no satisfying versions are found, then exits failure.', - '', - 'Versions are printed in ascending order, so supplying', - 'multiple versions to the utility will just sort them.' - ].join('\n')) -} diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json deleted file mode 100644 index db035e9..0000000 --- a/node_modules/semver/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "semver", - "version": "5.7.2", - "description": "The semantic version parser used by npm.", - "main": "semver.js", - "scripts": { - "test": "tap test/ --100 --timeout=30", - "lint": "echo linting disabled", - "postlint": "template-oss-check", - "template-oss-apply": "template-oss-apply --force", - "lintfix": "npm run lint -- --fix", - "snap": "tap test/ --100 --timeout=30", - "posttest": "npm run lint" - }, - "devDependencies": { - "@npmcli/template-oss": "4.17.0", - "tap": "^12.7.0" - }, - "license": "ISC", - "repository": { - "type": "git", - "url": "https://github.com/npm/node-semver.git" - }, - "bin": { - "semver": "./bin/semver" - }, - "files": [ - "bin", - "range.bnf", - "semver.js" - ], - "author": "GitHub Inc.", - "templateOSS": { - "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "content": "./scripts/template-oss", - "version": "4.17.0" - } -} diff --git a/node_modules/semver/range.bnf b/node_modules/semver/range.bnf deleted file mode 100644 index d4c6ae0..0000000 --- a/node_modules/semver/range.bnf +++ /dev/null @@ -1,16 +0,0 @@ -range-set ::= range ( logical-or range ) * -logical-or ::= ( ' ' ) * '||' ( ' ' ) * -range ::= hyphen | simple ( ' ' simple ) * | '' -hyphen ::= partial ' - ' partial -simple ::= primitive | partial | tilde | caret -primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial -partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? -xr ::= 'x' | 'X' | '*' | nr -nr ::= '0' | [1-9] ( [0-9] ) * -tilde ::= '~' partial -caret ::= '^' partial -qualifier ::= ( '-' pre )? ( '+' build )? -pre ::= parts -build ::= parts -parts ::= part ( '.' part ) * -part ::= nr | [-0-9A-Za-z]+ diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js deleted file mode 100644 index dcb6833..0000000 --- a/node_modules/semver/semver.js +++ /dev/null @@ -1,1525 +0,0 @@ -exports = module.exports = SemVer - -var debug -/* istanbul ignore next */ -if (typeof process === 'object' && - process.env && - process.env.NODE_DEBUG && - /\bsemver\b/i.test(process.env.NODE_DEBUG)) { - debug = function () { - var args = Array.prototype.slice.call(arguments, 0) - args.unshift('SEMVER') - console.log.apply(console, args) - } -} else { - debug = function () {} -} - -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -exports.SEMVER_SPEC_VERSION = '2.0.0' - -var MAX_LENGTH = 256 -var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || - /* istanbul ignore next */ 9007199254740991 - -// Max safe segment length for coercion. -var MAX_SAFE_COMPONENT_LENGTH = 16 - -var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6 - -// The actual regexps go on exports.re -var re = exports.re = [] -var safeRe = exports.safeRe = [] -var src = exports.src = [] -var R = 0 - -var LETTERDASHNUMBER = '[a-zA-Z0-9-]' - -// Replace some greedy regex tokens to prevent regex dos issues. These regex are -// used internally via the safeRe object since all inputs in this library get -// normalized first to trim and collapse all extra whitespace. The original -// regexes are exported for userland consumption and lower level usage. A -// future breaking change could export the safer regex only with a note that -// all input should have extra whitespace removed. -var safeRegexReplacements = [ - ['\\s', 1], - ['\\d', MAX_LENGTH], - [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], -] - -function makeSafeRe (value) { - for (var i = 0; i < safeRegexReplacements.length; i++) { - var token = safeRegexReplacements[i][0] - var max = safeRegexReplacements[i][1] - value = value - .split(token + '*').join(token + '{0,' + max + '}') - .split(token + '+').join(token + '{1,' + max + '}') - } - return value -} - -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. - -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. - -var NUMERICIDENTIFIER = R++ -src[NUMERICIDENTIFIER] = '0|[1-9]\\d*' -var NUMERICIDENTIFIERLOOSE = R++ -src[NUMERICIDENTIFIERLOOSE] = '\\d+' - -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. - -var NONNUMERICIDENTIFIER = R++ -src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-]' + LETTERDASHNUMBER + '*' - -// ## Main Version -// Three dot-separated numeric identifiers. - -var MAINVERSION = R++ -src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')' - -var MAINVERSIONLOOSE = R++ -src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')' - -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. - -var PRERELEASEIDENTIFIER = R++ -src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + - '|' + src[NONNUMERICIDENTIFIER] + ')' - -var PRERELEASEIDENTIFIERLOOSE = R++ -src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + - '|' + src[NONNUMERICIDENTIFIER] + ')' - -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. - -var PRERELEASE = R++ -src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + - '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))' - -var PRERELEASELOOSE = R++ -src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + - '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))' - -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. - -var BUILDIDENTIFIER = R++ -src[BUILDIDENTIFIER] = LETTERDASHNUMBER + '+' - -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. - -var BUILD = R++ -src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + - '(?:\\.' + src[BUILDIDENTIFIER] + ')*))' - -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. - -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. - -var FULL = R++ -var FULLPLAIN = 'v?' + src[MAINVERSION] + - src[PRERELEASE] + '?' + - src[BUILD] + '?' - -src[FULL] = '^' + FULLPLAIN + '$' - -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + - src[PRERELEASELOOSE] + '?' + - src[BUILD] + '?' - -var LOOSE = R++ -src[LOOSE] = '^' + LOOSEPLAIN + '$' - -var GTLT = R++ -src[GTLT] = '((?:<|>)?=?)' - -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -var XRANGEIDENTIFIERLOOSE = R++ -src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' -var XRANGEIDENTIFIER = R++ -src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*' - -var XRANGEPLAIN = R++ -src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:' + src[PRERELEASE] + ')?' + - src[BUILD] + '?' + - ')?)?' - -var XRANGEPLAINLOOSE = R++ -src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:' + src[PRERELEASELOOSE] + ')?' + - src[BUILD] + '?' + - ')?)?' - -var XRANGE = R++ -src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$' -var XRANGELOOSE = R++ -src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$' - -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -var COERCE = R++ -src[COERCE] = '(?:^|[^\\d])' + - '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:$|[^\\d])' - -// Tilde ranges. -// Meaning is "reasonably at or greater than" -var LONETILDE = R++ -src[LONETILDE] = '(?:~>?)' - -var TILDETRIM = R++ -src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+' -re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g') -safeRe[TILDETRIM] = new RegExp(makeSafeRe(src[TILDETRIM]), 'g') -var tildeTrimReplace = '$1~' - -var TILDE = R++ -src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$' -var TILDELOOSE = R++ -src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$' - -// Caret ranges. -// Meaning is "at least and backwards compatible with" -var LONECARET = R++ -src[LONECARET] = '(?:\\^)' - -var CARETTRIM = R++ -src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+' -re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g') -safeRe[CARETTRIM] = new RegExp(makeSafeRe(src[CARETTRIM]), 'g') -var caretTrimReplace = '$1^' - -var CARET = R++ -src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$' -var CARETLOOSE = R++ -src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$' - -// A simple gt/lt/eq thing, or just "" to indicate "any version" -var COMPARATORLOOSE = R++ -src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$' -var COMPARATOR = R++ -src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$' - -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -var COMPARATORTRIM = R++ -src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + - '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')' - -// this one has to use the /g flag -re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g') -safeRe[COMPARATORTRIM] = new RegExp(makeSafeRe(src[COMPARATORTRIM]), 'g') -var comparatorTrimReplace = '$1$2$3' - -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -var HYPHENRANGE = R++ -src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAIN] + ')' + - '\\s*$' - -var HYPHENRANGELOOSE = R++ -src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s*$' - -// Star ranges basically just allow anything at all. -var STAR = R++ -src[STAR] = '(<|>)?=?\\s*\\*' - -// Compile to actual regexp objects. -// All are flag-free, unless they were created above with a flag. -for (var i = 0; i < R; i++) { - debug(i, src[i]) - if (!re[i]) { - re[i] = new RegExp(src[i]) - - // Replace all greedy whitespace to prevent regex dos issues. These regex are - // used internally via the safeRe object since all inputs in this library get - // normalized first to trim and collapse all extra whitespace. The original - // regexes are exported for userland consumption and lower level usage. A - // future breaking change could export the safer regex only with a note that - // all input should have extra whitespace removed. - safeRe[i] = new RegExp(makeSafeRe(src[i])) - } -} - -exports.parse = parse -function parse (version, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - if (version instanceof SemVer) { - return version - } - - if (typeof version !== 'string') { - return null - } - - if (version.length > MAX_LENGTH) { - return null - } - - var r = options.loose ? safeRe[LOOSE] : safeRe[FULL] - if (!r.test(version)) { - return null - } - - try { - return new SemVer(version, options) - } catch (er) { - return null - } -} - -exports.valid = valid -function valid (version, options) { - var v = parse(version, options) - return v ? v.version : null -} - -exports.clean = clean -function clean (version, options) { - var s = parse(version.trim().replace(/^[=v]+/, ''), options) - return s ? s.version : null -} - -exports.SemVer = SemVer - -function SemVer (version, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - if (version instanceof SemVer) { - if (version.loose === options.loose) { - return version - } else { - version = version.version - } - } else if (typeof version !== 'string') { - throw new TypeError('Invalid Version: ' + version) - } - - if (version.length > MAX_LENGTH) { - throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') - } - - if (!(this instanceof SemVer)) { - return new SemVer(version, options) - } - - debug('SemVer', version, options) - this.options = options - this.loose = !!options.loose - - var m = version.trim().match(options.loose ? safeRe[LOOSE] : safeRe[FULL]) - - if (!m) { - throw new TypeError('Invalid Version: ' + version) - } - - this.raw = version - - // these are actually numbers - this.major = +m[1] - this.minor = +m[2] - this.patch = +m[3] - - if (this.major > MAX_SAFE_INTEGER || this.major < 0) { - throw new TypeError('Invalid major version') - } - - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { - throw new TypeError('Invalid minor version') - } - - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { - throw new TypeError('Invalid patch version') - } - - // numberify any prerelease numeric ids - if (!m[4]) { - this.prerelease = [] - } else { - this.prerelease = m[4].split('.').map(function (id) { - if (/^[0-9]+$/.test(id)) { - var num = +id - if (num >= 0 && num < MAX_SAFE_INTEGER) { - return num - } - } - return id - }) - } - - this.build = m[5] ? m[5].split('.') : [] - this.format() -} - -SemVer.prototype.format = function () { - this.version = this.major + '.' + this.minor + '.' + this.patch - if (this.prerelease.length) { - this.version += '-' + this.prerelease.join('.') - } - return this.version -} - -SemVer.prototype.toString = function () { - return this.version -} - -SemVer.prototype.compare = function (other) { - debug('SemVer.compare', this.version, this.options, other) - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - return this.compareMain(other) || this.comparePre(other) -} - -SemVer.prototype.compareMain = function (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - return compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch) -} - -SemVer.prototype.comparePre = function (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) { - return -1 - } else if (!this.prerelease.length && other.prerelease.length) { - return 1 - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0 - } - - var i = 0 - do { - var a = this.prerelease[i] - var b = other.prerelease[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) -} - -// preminor will bump the version up to the next minor release, and immediately -// down to pre-release. premajor and prepatch work the same way. -SemVer.prototype.inc = function (release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0 - this.patch = 0 - this.minor = 0 - this.major++ - this.inc('pre', identifier) - break - case 'preminor': - this.prerelease.length = 0 - this.patch = 0 - this.minor++ - this.inc('pre', identifier) - break - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0 - this.inc('patch', identifier) - this.inc('pre', identifier) - break - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) { - this.inc('patch', identifier) - } - this.inc('pre', identifier) - break - - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if (this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0) { - this.major++ - } - this.minor = 0 - this.patch = 0 - this.prerelease = [] - break - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++ - } - this.patch = 0 - this.prerelease = [] - break - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) { - this.patch++ - } - this.prerelease = [] - break - // This probably shouldn't be used publicly. - // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) { - this.prerelease = [0] - } else { - var i = this.prerelease.length - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++ - i = -2 - } - } - if (i === -1) { - // didn't increment anything - this.prerelease.push(0) - } - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) { - this.prerelease = [identifier, 0] - } - } else { - this.prerelease = [identifier, 0] - } - } - break - - default: - throw new Error('invalid increment argument: ' + release) - } - this.format() - this.raw = this.version - return this -} - -exports.inc = inc -function inc (version, release, loose, identifier) { - if (typeof (loose) === 'string') { - identifier = loose - loose = undefined - } - - try { - return new SemVer(version, loose).inc(release, identifier).version - } catch (er) { - return null - } -} - -exports.diff = diff -function diff (version1, version2) { - if (eq(version1, version2)) { - return null - } else { - var v1 = parse(version1) - var v2 = parse(version2) - var prefix = '' - if (v1.prerelease.length || v2.prerelease.length) { - prefix = 'pre' - var defaultResult = 'prerelease' - } - for (var key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return prefix + key - } - } - } - return defaultResult // may be undefined - } -} - -exports.compareIdentifiers = compareIdentifiers - -var numeric = /^[0-9]+$/ -function compareIdentifiers (a, b) { - var anum = numeric.test(a) - var bnum = numeric.test(b) - - if (anum && bnum) { - a = +a - b = +b - } - - return a === b ? 0 - : (anum && !bnum) ? -1 - : (bnum && !anum) ? 1 - : a < b ? -1 - : 1 -} - -exports.rcompareIdentifiers = rcompareIdentifiers -function rcompareIdentifiers (a, b) { - return compareIdentifiers(b, a) -} - -exports.major = major -function major (a, loose) { - return new SemVer(a, loose).major -} - -exports.minor = minor -function minor (a, loose) { - return new SemVer(a, loose).minor -} - -exports.patch = patch -function patch (a, loose) { - return new SemVer(a, loose).patch -} - -exports.compare = compare -function compare (a, b, loose) { - return new SemVer(a, loose).compare(new SemVer(b, loose)) -} - -exports.compareLoose = compareLoose -function compareLoose (a, b) { - return compare(a, b, true) -} - -exports.rcompare = rcompare -function rcompare (a, b, loose) { - return compare(b, a, loose) -} - -exports.sort = sort -function sort (list, loose) { - return list.sort(function (a, b) { - return exports.compare(a, b, loose) - }) -} - -exports.rsort = rsort -function rsort (list, loose) { - return list.sort(function (a, b) { - return exports.rcompare(a, b, loose) - }) -} - -exports.gt = gt -function gt (a, b, loose) { - return compare(a, b, loose) > 0 -} - -exports.lt = lt -function lt (a, b, loose) { - return compare(a, b, loose) < 0 -} - -exports.eq = eq -function eq (a, b, loose) { - return compare(a, b, loose) === 0 -} - -exports.neq = neq -function neq (a, b, loose) { - return compare(a, b, loose) !== 0 -} - -exports.gte = gte -function gte (a, b, loose) { - return compare(a, b, loose) >= 0 -} - -exports.lte = lte -function lte (a, b, loose) { - return compare(a, b, loose) <= 0 -} - -exports.cmp = cmp -function cmp (a, op, b, loose) { - switch (op) { - case '===': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a === b - - case '!==': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a !== b - - case '': - case '=': - case '==': - return eq(a, b, loose) - - case '!=': - return neq(a, b, loose) - - case '>': - return gt(a, b, loose) - - case '>=': - return gte(a, b, loose) - - case '<': - return lt(a, b, loose) - - case '<=': - return lte(a, b, loose) - - default: - throw new TypeError('Invalid operator: ' + op) - } -} - -exports.Comparator = Comparator -function Comparator (comp, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - if (comp instanceof Comparator) { - if (comp.loose === !!options.loose) { - return comp - } else { - comp = comp.value - } - } - - if (!(this instanceof Comparator)) { - return new Comparator(comp, options) - } - - comp = comp.trim().split(/\s+/).join(' ') - debug('comparator', comp, options) - this.options = options - this.loose = !!options.loose - this.parse(comp) - - if (this.semver === ANY) { - this.value = '' - } else { - this.value = this.operator + this.semver.version - } - - debug('comp', this) -} - -var ANY = {} -Comparator.prototype.parse = function (comp) { - var r = this.options.loose ? safeRe[COMPARATORLOOSE] : safeRe[COMPARATOR] - var m = comp.match(r) - - if (!m) { - throw new TypeError('Invalid comparator: ' + comp) - } - - this.operator = m[1] - if (this.operator === '=') { - this.operator = '' - } - - // if it literally is just '>' or '' then allow anything. - if (!m[2]) { - this.semver = ANY - } else { - this.semver = new SemVer(m[2], this.options.loose) - } -} - -Comparator.prototype.toString = function () { - return this.value -} - -Comparator.prototype.test = function (version) { - debug('Comparator.test', version, this.options.loose) - - if (this.semver === ANY) { - return true - } - - if (typeof version === 'string') { - version = new SemVer(version, this.options) - } - - return cmp(version, this.operator, this.semver, this.options) -} - -Comparator.prototype.intersects = function (comp, options) { - if (!(comp instanceof Comparator)) { - throw new TypeError('a Comparator is required') - } - - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - var rangeTmp - - if (this.operator === '') { - rangeTmp = new Range(comp.value, options) - return satisfies(this.value, rangeTmp, options) - } else if (comp.operator === '') { - rangeTmp = new Range(this.value, options) - return satisfies(comp.semver, rangeTmp, options) - } - - var sameDirectionIncreasing = - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '>=' || comp.operator === '>') - var sameDirectionDecreasing = - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '<=' || comp.operator === '<') - var sameSemVer = this.semver.version === comp.semver.version - var differentDirectionsInclusive = - (this.operator === '>=' || this.operator === '<=') && - (comp.operator === '>=' || comp.operator === '<=') - var oppositeDirectionsLessThan = - cmp(this.semver, '<', comp.semver, options) && - ((this.operator === '>=' || this.operator === '>') && - (comp.operator === '<=' || comp.operator === '<')) - var oppositeDirectionsGreaterThan = - cmp(this.semver, '>', comp.semver, options) && - ((this.operator === '<=' || this.operator === '<') && - (comp.operator === '>=' || comp.operator === '>')) - - return sameDirectionIncreasing || sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || oppositeDirectionsGreaterThan -} - -exports.Range = Range -function Range (range, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - if (range instanceof Range) { - if (range.loose === !!options.loose && - range.includePrerelease === !!options.includePrerelease) { - return range - } else { - return new Range(range.raw, options) - } - } - - if (range instanceof Comparator) { - return new Range(range.value, options) - } - - if (!(this instanceof Range)) { - return new Range(range, options) - } - - this.options = options - this.loose = !!options.loose - this.includePrerelease = !!options.includePrerelease - - // First reduce all whitespace as much as possible so we do not have to rely - // on potentially slow regexes like \s*. This is then stored and used for - // future error messages as well. - this.raw = range - .trim() - .split(/\s+/) - .join(' ') - - // First, split based on boolean or || - this.set = this.raw.split('||').map(function (range) { - return this.parseRange(range.trim()) - }, this).filter(function (c) { - // throw out any that are not relevant for whatever reason - return c.length - }) - - if (!this.set.length) { - throw new TypeError('Invalid SemVer Range: ' + this.raw) - } - - this.format() -} - -Range.prototype.format = function () { - this.range = this.set.map(function (comps) { - return comps.join(' ').trim() - }).join('||').trim() - return this.range -} - -Range.prototype.toString = function () { - return this.range -} - -Range.prototype.parseRange = function (range) { - var loose = this.options.loose - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - var hr = loose ? safeRe[HYPHENRANGELOOSE] : safeRe[HYPHENRANGE] - range = range.replace(hr, hyphenReplace) - debug('hyphen replace', range) - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(safeRe[COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, safeRe[COMPARATORTRIM]) - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(safeRe[TILDETRIM], tildeTrimReplace) - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(safeRe[CARETTRIM], caretTrimReplace) - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - var compRe = loose ? safeRe[COMPARATORLOOSE] : safeRe[COMPARATOR] - var set = range.split(' ').map(function (comp) { - return parseComparator(comp, this.options) - }, this).join(' ').split(/\s+/) - if (this.options.loose) { - // in loose mode, throw out any that are not valid comparators - set = set.filter(function (comp) { - return !!comp.match(compRe) - }) - } - set = set.map(function (comp) { - return new Comparator(comp, this.options) - }, this) - - return set -} - -Range.prototype.intersects = function (range, options) { - if (!(range instanceof Range)) { - throw new TypeError('a Range is required') - } - - return this.set.some(function (thisComparators) { - return thisComparators.every(function (thisComparator) { - return range.set.some(function (rangeComparators) { - return rangeComparators.every(function (rangeComparator) { - return thisComparator.intersects(rangeComparator, options) - }) - }) - }) - }) -} - -// Mostly just for testing and legacy API reasons -exports.toComparators = toComparators -function toComparators (range, options) { - return new Range(range, options).set.map(function (comp) { - return comp.map(function (c) { - return c.value - }).join(' ').trim().split(' ') - }) -} - -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -function parseComparator (comp, options) { - debug('comp', comp, options) - comp = replaceCarets(comp, options) - debug('caret', comp) - comp = replaceTildes(comp, options) - debug('tildes', comp) - comp = replaceXRanges(comp, options) - debug('xrange', comp) - comp = replaceStars(comp, options) - debug('stars', comp) - return comp -} - -function isX (id) { - return !id || id.toLowerCase() === 'x' || id === '*' -} - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceTildes (comp, options) { - return comp.trim().split(/\s+/).map(function (comp) { - return replaceTilde(comp, options) - }).join(' ') -} - -function replaceTilde (comp, options) { - var r = options.loose ? safeRe[TILDELOOSE] : safeRe[TILDE] - return comp.replace(r, function (_, M, m, p, pr) { - debug('tilde', comp, _, M, m, p, pr) - var ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (isX(p)) { - // ~1.2 == >=1.2.0 <1.3.0 - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } else if (pr) { - debug('replaceTilde pr', pr) - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + (+m + 1) + '.0' - } else { - // ~1.2.3 == >=1.2.3 <1.3.0 - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0' - } - - debug('tilde return', ret) - return ret - }) -} - -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 -// ^1.2.3 --> >=1.2.3 <2.0.0 -// ^1.2.0 --> >=1.2.0 <2.0.0 -function replaceCarets (comp, options) { - return comp.trim().split(/\s+/).map(function (comp) { - return replaceCaret(comp, options) - }).join(' ') -} - -function replaceCaret (comp, options) { - debug('caret', comp, options) - var r = options.loose ? safeRe[CARETLOOSE] : safeRe[CARET] - return comp.replace(r, function (_, M, m, p, pr) { - debug('caret', comp, _, M, m, p, pr) - var ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (isX(p)) { - if (M === '0') { - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } else { - ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' - } - } else if (pr) { - debug('replaceCaret pr', pr) - if (M === '0') { - if (m === '0') { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + m + '.' + (+p + 1) - } else { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + (+m + 1) + '.0' - } - } else { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + (+M + 1) + '.0.0' - } - } else { - debug('no pr') - if (M === '0') { - if (m === '0') { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + m + '.' + (+p + 1) - } else { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0' - } - } else { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + (+M + 1) + '.0.0' - } - } - - debug('caret return', ret) - return ret - }) -} - -function replaceXRanges (comp, options) { - debug('replaceXRanges', comp, options) - return comp.split(/\s+/).map(function (comp) { - return replaceXRange(comp, options) - }).join(' ') -} - -function replaceXRange (comp, options) { - comp = comp.trim() - var r = options.loose ? safeRe[XRANGELOOSE] : safeRe[XRANGE] - return comp.replace(r, function (ret, gtlt, M, m, p, pr) { - debug('xRange', comp, ret, gtlt, M, m, p, pr) - var xM = isX(M) - var xm = xM || isX(m) - var xp = xm || isX(p) - var anyX = xp - - if (gtlt === '=' && anyX) { - gtlt = '' - } - - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0' - } else { - // nothing is forbidden - ret = '*' - } - } else if (gtlt && anyX) { - // we know patch is an x, because we have any x at all. - // replace X with 0 - if (xm) { - m = 0 - } - p = 0 - - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - // >1.2.3 => >= 1.2.4 - gtlt = '>=' - if (xm) { - M = +M + 1 - m = 0 - p = 0 - } else { - m = +m + 1 - p = 0 - } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<' - if (xm) { - M = +M + 1 - } else { - m = +m + 1 - } - } - - ret = gtlt + M + '.' + m + '.' + p - } else if (xm) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (xp) { - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } - - debug('xRange return', ret) - - return ret - }) -} - -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -function replaceStars (comp, options) { - debug('replaceStars', comp, options) - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(safeRe[STAR], '') -} - -// This function is passed to string.replace(safeRe[HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0 -function hyphenReplace ($0, - from, fM, fm, fp, fpr, fb, - to, tM, tm, tp, tpr, tb) { - if (isX(fM)) { - from = '' - } else if (isX(fm)) { - from = '>=' + fM + '.0.0' - } else if (isX(fp)) { - from = '>=' + fM + '.' + fm + '.0' - } else { - from = '>=' + from - } - - if (isX(tM)) { - to = '' - } else if (isX(tm)) { - to = '<' + (+tM + 1) + '.0.0' - } else if (isX(tp)) { - to = '<' + tM + '.' + (+tm + 1) + '.0' - } else if (tpr) { - to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr - } else { - to = '<=' + to - } - - return (from + ' ' + to).trim() -} - -// if ANY of the sets match ALL of its comparators, then pass -Range.prototype.test = function (version) { - if (!version) { - return false - } - - if (typeof version === 'string') { - version = new SemVer(version, this.options) - } - - for (var i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version, this.options)) { - return true - } - } - return false -} - -function testSet (set, version, options) { - for (var i = 0; i < set.length; i++) { - if (!set[i].test(version)) { - return false - } - } - - if (version.prerelease.length && !options.includePrerelease) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (i = 0; i < set.length; i++) { - debug(set[i].semver) - if (set[i].semver === ANY) { - continue - } - - if (set[i].semver.prerelease.length > 0) { - var allowed = set[i].semver - if (allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch) { - return true - } - } - } - - // Version has a -pre, but it's not one of the ones we like. - return false - } - - return true -} - -exports.satisfies = satisfies -function satisfies (version, range, options) { - try { - range = new Range(range, options) - } catch (er) { - return false - } - return range.test(version) -} - -exports.maxSatisfying = maxSatisfying -function maxSatisfying (versions, range, options) { - var max = null - var maxSV = null - try { - var rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach(function (v) { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!max || maxSV.compare(v) === -1) { - // compare(max, v, true) - max = v - maxSV = new SemVer(max, options) - } - } - }) - return max -} - -exports.minSatisfying = minSatisfying -function minSatisfying (versions, range, options) { - var min = null - var minSV = null - try { - var rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach(function (v) { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!min || minSV.compare(v) === 1) { - // compare(min, v, true) - min = v - minSV = new SemVer(min, options) - } - } - }) - return min -} - -exports.minVersion = minVersion -function minVersion (range, loose) { - range = new Range(range, loose) - - var minver = new SemVer('0.0.0') - if (range.test(minver)) { - return minver - } - - minver = new SemVer('0.0.0-0') - if (range.test(minver)) { - return minver - } - - minver = null - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i] - - comparators.forEach(function (comparator) { - // Clone to avoid manipulating the comparator's semver object. - var compver = new SemVer(comparator.semver.version) - switch (comparator.operator) { - case '>': - if (compver.prerelease.length === 0) { - compver.patch++ - } else { - compver.prerelease.push(0) - } - compver.raw = compver.format() - /* fallthrough */ - case '': - case '>=': - if (!minver || gt(minver, compver)) { - minver = compver - } - break - case '<': - case '<=': - /* Ignore maximum versions */ - break - /* istanbul ignore next */ - default: - throw new Error('Unexpected operation: ' + comparator.operator) - } - }) - } - - if (minver && range.test(minver)) { - return minver - } - - return null -} - -exports.validRange = validRange -function validRange (range, options) { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, options).range || '*' - } catch (er) { - return null - } -} - -// Determine if version is less than all the versions possible in the range -exports.ltr = ltr -function ltr (version, range, options) { - return outside(version, range, '<', options) -} - -// Determine if version is greater than all the versions possible in the range. -exports.gtr = gtr -function gtr (version, range, options) { - return outside(version, range, '>', options) -} - -exports.outside = outside -function outside (version, range, hilo, options) { - version = new SemVer(version, options) - range = new Range(range, options) - - var gtfn, ltefn, ltfn, comp, ecomp - switch (hilo) { - case '>': - gtfn = gt - ltefn = lte - ltfn = lt - comp = '>' - ecomp = '>=' - break - case '<': - gtfn = lt - ltefn = gte - ltfn = gt - comp = '<' - ecomp = '<=' - break - default: - throw new TypeError('Must provide a hilo val of "<" or ">"') - } - - // If it satisifes the range it is not outside - if (satisfies(version, range, options)) { - return false - } - - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. - - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i] - - var high = null - var low = null - - comparators.forEach(function (comparator) { - if (comparator.semver === ANY) { - comparator = new Comparator('>=0.0.0') - } - high = high || comparator - low = low || comparator - if (gtfn(comparator.semver, high.semver, options)) { - high = comparator - } else if (ltfn(comparator.semver, low.semver, options)) { - low = comparator - } - }) - - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false - } - - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ((!low.operator || low.operator === comp) && - ltefn(version, low.semver)) { - return false - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false - } - } - return true -} - -exports.prerelease = prerelease -function prerelease (version, options) { - var parsed = parse(version, options) - return (parsed && parsed.prerelease.length) ? parsed.prerelease : null -} - -exports.intersects = intersects -function intersects (r1, r2, options) { - r1 = new Range(r1, options) - r2 = new Range(r2, options) - return r1.intersects(r2) -} - -exports.coerce = coerce -function coerce (version) { - if (version instanceof SemVer) { - return version - } - - if (typeof version !== 'string') { - return null - } - - var match = version.match(safeRe[COERCE]) - - if (match == null) { - return null - } - - return parse(match[1] + - '.' + (match[2] || '0') + - '.' + (match[3] || '0')) -} diff --git a/node_modules/shebang-command/index.js b/node_modules/shebang-command/index.js deleted file mode 100644 index 2de70b0..0000000 --- a/node_modules/shebang-command/index.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; -var shebangRegex = require('shebang-regex'); - -module.exports = function (str) { - var match = str.match(shebangRegex); - - if (!match) { - return null; - } - - var arr = match[0].replace(/#! ?/, '').split(' '); - var bin = arr[0].split('/').pop(); - var arg = arr[1]; - - return (bin === 'env' ? - arg : - bin + (arg ? ' ' + arg : '') - ); -}; diff --git a/node_modules/shebang-command/license b/node_modules/shebang-command/license deleted file mode 100644 index 0f8cf79..0000000 --- a/node_modules/shebang-command/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Kevin Martensson (github.com/kevva) - -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. diff --git a/node_modules/shebang-command/package.json b/node_modules/shebang-command/package.json deleted file mode 100644 index 19c9ce5..0000000 --- a/node_modules/shebang-command/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "shebang-command", - "version": "1.2.0", - "description": "Get the command from a shebang", - "license": "MIT", - "repository": "kevva/shebang-command", - "author": { - "name": "Kevin Martensson", - "email": "kevinmartensson@gmail.com", - "url": "github.com/kevva" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "xo && ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "cmd", - "command", - "parse", - "shebang" - ], - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "xo": { - "ignores": [ - "test.js" - ] - } -} diff --git a/node_modules/shebang-command/readme.md b/node_modules/shebang-command/readme.md deleted file mode 100644 index 16b0be4..0000000 --- a/node_modules/shebang-command/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# shebang-command [![Build Status](https://travis-ci.org/kevva/shebang-command.svg?branch=master)](https://travis-ci.org/kevva/shebang-command) - -> Get the command from a shebang - - -## Install - -``` -$ npm install --save shebang-command -``` - - -## Usage - -```js -const shebangCommand = require('shebang-command'); - -shebangCommand('#!/usr/bin/env node'); -//=> 'node' - -shebangCommand('#!/bin/bash'); -//=> 'bash' -``` - - -## API - -### shebangCommand(string) - -#### string - -Type: `string` - -String containing a shebang. - - -## License - -MIT © [Kevin Martensson](http://github.com/kevva) diff --git a/node_modules/shebang-regex/index.js b/node_modules/shebang-regex/index.js deleted file mode 100644 index d052d2e..0000000 --- a/node_modules/shebang-regex/index.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -module.exports = /^#!.*/; diff --git a/node_modules/shebang-regex/license b/node_modules/shebang-regex/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/shebang-regex/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/shebang-regex/package.json b/node_modules/shebang-regex/package.json deleted file mode 100644 index d8ec9b6..0000000 --- a/node_modules/shebang-regex/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "shebang-regex", - "version": "1.0.0", - "description": "Regular expression for matching a shebang", - "license": "MIT", - "repository": "sindresorhus/shebang-regex", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "node test.js" - }, - "files": [ - "index.js" - ], - "keywords": [ - "re", - "regex", - "regexp", - "shebang", - "match", - "test" - ], - "devDependencies": { - "ava": "0.0.4" - } -} diff --git a/node_modules/shebang-regex/readme.md b/node_modules/shebang-regex/readme.md deleted file mode 100644 index ef75e51..0000000 --- a/node_modules/shebang-regex/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -# shebang-regex [![Build Status](https://travis-ci.org/sindresorhus/shebang-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/shebang-regex) - -> Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) - - -## Install - -``` -$ npm install --save shebang-regex -``` - - -## Usage - -```js -var shebangRegex = require('shebang-regex'); -var str = '#!/usr/bin/env node\nconsole.log("unicorns");'; - -shebangRegex.test(str); -//=> true - -shebangRegex.exec(str)[0]; -//=> '#!/usr/bin/env node' -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/signal-exit/LICENSE.txt b/node_modules/signal-exit/LICENSE.txt deleted file mode 100644 index eead04a..0000000 --- a/node_modules/signal-exit/LICENSE.txt +++ /dev/null @@ -1,16 +0,0 @@ -The ISC License - -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/signal-exit/README.md b/node_modules/signal-exit/README.md deleted file mode 100644 index f9c7c00..0000000 --- a/node_modules/signal-exit/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# signal-exit - -[![Build Status](https://travis-ci.org/tapjs/signal-exit.png)](https://travis-ci.org/tapjs/signal-exit) -[![Coverage](https://coveralls.io/repos/tapjs/signal-exit/badge.svg?branch=master)](https://coveralls.io/r/tapjs/signal-exit?branch=master) -[![NPM version](https://img.shields.io/npm/v/signal-exit.svg)](https://www.npmjs.com/package/signal-exit) -[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) - -When you want to fire an event no matter how a process exits: - -* reaching the end of execution. -* explicitly having `process.exit(code)` called. -* having `process.kill(pid, sig)` called. -* receiving a fatal signal from outside the process - -Use `signal-exit`. - -```js -var onExit = require('signal-exit') - -onExit(function (code, signal) { - console.log('process exited!') -}) -``` - -## API - -`var remove = onExit(function (code, signal) {}, options)` - -The return value of the function is a function that will remove the -handler. - -Note that the function *only* fires for signals if the signal would -cause the process to exit. That is, there are no other listeners, and -it is a fatal signal. - -## Options - -* `alwaysLast`: Run this handler after any other signal or exit - handlers. This causes `process.emit` to be monkeypatched. diff --git a/node_modules/signal-exit/index.js b/node_modules/signal-exit/index.js deleted file mode 100644 index 93703f3..0000000 --- a/node_modules/signal-exit/index.js +++ /dev/null @@ -1,202 +0,0 @@ -// Note: since nyc uses this module to output coverage, any lines -// that are in the direct sync flow of nyc's outputCoverage are -// ignored, since we can never get coverage for them. -// grab a reference to node's real process object right away -var process = global.process - -const processOk = function (process) { - return process && - typeof process === 'object' && - typeof process.removeListener === 'function' && - typeof process.emit === 'function' && - typeof process.reallyExit === 'function' && - typeof process.listeners === 'function' && - typeof process.kill === 'function' && - typeof process.pid === 'number' && - typeof process.on === 'function' -} - -// some kind of non-node environment, just no-op -/* istanbul ignore if */ -if (!processOk(process)) { - module.exports = function () { - return function () {} - } -} else { - var assert = require('assert') - var signals = require('./signals.js') - var isWin = /^win/i.test(process.platform) - - var EE = require('events') - /* istanbul ignore if */ - if (typeof EE !== 'function') { - EE = EE.EventEmitter - } - - var emitter - if (process.__signal_exit_emitter__) { - emitter = process.__signal_exit_emitter__ - } else { - emitter = process.__signal_exit_emitter__ = new EE() - emitter.count = 0 - emitter.emitted = {} - } - - // Because this emitter is a global, we have to check to see if a - // previous version of this library failed to enable infinite listeners. - // I know what you're about to say. But literally everything about - // signal-exit is a compromise with evil. Get used to it. - if (!emitter.infinite) { - emitter.setMaxListeners(Infinity) - emitter.infinite = true - } - - module.exports = function (cb, opts) { - /* istanbul ignore if */ - if (!processOk(global.process)) { - return function () {} - } - assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler') - - if (loaded === false) { - load() - } - - var ev = 'exit' - if (opts && opts.alwaysLast) { - ev = 'afterexit' - } - - var remove = function () { - emitter.removeListener(ev, cb) - if (emitter.listeners('exit').length === 0 && - emitter.listeners('afterexit').length === 0) { - unload() - } - } - emitter.on(ev, cb) - - return remove - } - - var unload = function unload () { - if (!loaded || !processOk(global.process)) { - return - } - loaded = false - - signals.forEach(function (sig) { - try { - process.removeListener(sig, sigListeners[sig]) - } catch (er) {} - }) - process.emit = originalProcessEmit - process.reallyExit = originalProcessReallyExit - emitter.count -= 1 - } - module.exports.unload = unload - - var emit = function emit (event, code, signal) { - /* istanbul ignore if */ - if (emitter.emitted[event]) { - return - } - emitter.emitted[event] = true - emitter.emit(event, code, signal) - } - - // { : , ... } - var sigListeners = {} - signals.forEach(function (sig) { - sigListeners[sig] = function listener () { - /* istanbul ignore if */ - if (!processOk(global.process)) { - return - } - // If there are no other listeners, an exit is coming! - // Simplest way: remove us and then re-send the signal. - // We know that this will kill the process, so we can - // safely emit now. - var listeners = process.listeners(sig) - if (listeners.length === emitter.count) { - unload() - emit('exit', null, sig) - /* istanbul ignore next */ - emit('afterexit', null, sig) - /* istanbul ignore next */ - if (isWin && sig === 'SIGHUP') { - // "SIGHUP" throws an `ENOSYS` error on Windows, - // so use a supported signal instead - sig = 'SIGINT' - } - /* istanbul ignore next */ - process.kill(process.pid, sig) - } - } - }) - - module.exports.signals = function () { - return signals - } - - var loaded = false - - var load = function load () { - if (loaded || !processOk(global.process)) { - return - } - loaded = true - - // This is the number of onSignalExit's that are in play. - // It's important so that we can count the correct number of - // listeners on signals, and don't wait for the other one to - // handle it instead of us. - emitter.count += 1 - - signals = signals.filter(function (sig) { - try { - process.on(sig, sigListeners[sig]) - return true - } catch (er) { - return false - } - }) - - process.emit = processEmit - process.reallyExit = processReallyExit - } - module.exports.load = load - - var originalProcessReallyExit = process.reallyExit - var processReallyExit = function processReallyExit (code) { - /* istanbul ignore if */ - if (!processOk(global.process)) { - return - } - process.exitCode = code || /* istanbul ignore next */ 0 - emit('exit', process.exitCode, null) - /* istanbul ignore next */ - emit('afterexit', process.exitCode, null) - /* istanbul ignore next */ - originalProcessReallyExit.call(process, process.exitCode) - } - - var originalProcessEmit = process.emit - var processEmit = function processEmit (ev, arg) { - if (ev === 'exit' && processOk(global.process)) { - /* istanbul ignore else */ - if (arg !== undefined) { - process.exitCode = arg - } - var ret = originalProcessEmit.apply(this, arguments) - /* istanbul ignore next */ - emit('exit', process.exitCode, null) - /* istanbul ignore next */ - emit('afterexit', process.exitCode, null) - /* istanbul ignore next */ - return ret - } else { - return originalProcessEmit.apply(this, arguments) - } - } -} diff --git a/node_modules/signal-exit/package.json b/node_modules/signal-exit/package.json deleted file mode 100644 index e1a0031..0000000 --- a/node_modules/signal-exit/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "signal-exit", - "version": "3.0.7", - "description": "when you want to fire an event no matter how a process exits.", - "main": "index.js", - "scripts": { - "test": "tap", - "snap": "tap", - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags" - }, - "files": [ - "index.js", - "signals.js" - ], - "repository": { - "type": "git", - "url": "https://github.com/tapjs/signal-exit.git" - }, - "keywords": [ - "signal", - "exit" - ], - "author": "Ben Coe ", - "license": "ISC", - "bugs": { - "url": "https://github.com/tapjs/signal-exit/issues" - }, - "homepage": "https://github.com/tapjs/signal-exit", - "devDependencies": { - "chai": "^3.5.0", - "coveralls": "^3.1.1", - "nyc": "^15.1.0", - "standard-version": "^9.3.1", - "tap": "^15.1.1" - } -} diff --git a/node_modules/signal-exit/signals.js b/node_modules/signal-exit/signals.js deleted file mode 100644 index 3bd67a8..0000000 --- a/node_modules/signal-exit/signals.js +++ /dev/null @@ -1,53 +0,0 @@ -// This is not the set of all possible signals. -// -// It IS, however, the set of all signals that trigger -// an exit on either Linux or BSD systems. Linux is a -// superset of the signal names supported on BSD, and -// the unknown signals just fail to register, so we can -// catch that easily enough. -// -// Don't bother with SIGKILL. It's uncatchable, which -// means that we can't fire any callbacks anyway. -// -// If a user does happen to register a handler on a non- -// fatal signal like SIGWINCH or something, and then -// exit, it'll end up firing `process.emit('exit')`, so -// the handler will be fired anyway. -// -// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised -// artificially, inherently leave the process in a -// state from which it is not safe to try and enter JS -// listeners. -module.exports = [ - 'SIGABRT', - 'SIGALRM', - 'SIGHUP', - 'SIGINT', - 'SIGTERM' -] - -if (process.platform !== 'win32') { - module.exports.push( - 'SIGVTALRM', - 'SIGXCPU', - 'SIGXFSZ', - 'SIGUSR2', - 'SIGTRAP', - 'SIGSYS', - 'SIGQUIT', - 'SIGIOT' - // should detect profiler and enable/disable accordingly. - // see #21 - // 'SIGPROF' - ) -} - -if (process.platform === 'linux') { - module.exports.push( - 'SIGIO', - 'SIGPOLL', - 'SIGPWR', - 'SIGSTKFLT', - 'SIGUNUSED' - ) -} diff --git a/node_modules/slice-ansi/index.js b/node_modules/slice-ansi/index.js deleted file mode 100755 index 634ee9c..0000000 --- a/node_modules/slice-ansi/index.js +++ /dev/null @@ -1,88 +0,0 @@ -'use strict'; -const isFullwidthCodePoint = require('is-fullwidth-code-point'); - -const ESCAPES = [ - '\u001B', - '\u009B' -]; - -const END_CODE = 39; -const ASTRAL_REGEX = /[\uD800-\uDBFF][\uDC00-\uDFFF]/; - -const ESCAPE_CODES = new Map([ - [0, 0], - [1, 22], - [2, 22], - [3, 23], - [4, 24], - [7, 27], - [8, 28], - [9, 29], - [30, 39], - [31, 39], - [32, 39], - [33, 39], - [34, 39], - [35, 39], - [36, 39], - [37, 39], - [90, 39], - [40, 49], - [41, 49], - [42, 49], - [43, 49], - [44, 49], - [45, 49], - [46, 49], - [47, 49] -]); - -const wrapAnsi = code => `${ESCAPES[0]}[${code}m`; - -module.exports = (str, begin, end) => { - const arr = Array.from(str.normalize()); - - end = typeof end === 'number' ? end : arr.length; - - let insideEscape = false; - let escapeCode; - let visible = 0; - let output = ''; - - for (const item of arr.entries()) { - const i = item[0]; - const x = item[1]; - - let leftEscape = false; - - if (ESCAPES.indexOf(x) !== -1) { - insideEscape = true; - const code = /\d[^m]*/.exec(str.slice(i, i + 4)); - escapeCode = code === END_CODE ? null : code; - } else if (insideEscape && x === 'm') { - insideEscape = false; - leftEscape = true; - } - - if (!insideEscape && !leftEscape) { - ++visible; - } - - if (!ASTRAL_REGEX.test(x) && isFullwidthCodePoint(x.codePointAt())) { - ++visible; - } - - if (visible > begin && visible <= end) { - output += x; - } else if (visible === begin && !insideEscape && escapeCode !== undefined && escapeCode !== END_CODE) { - output += wrapAnsi(escapeCode); - } else if (visible >= end) { - if (escapeCode !== undefined) { - output += wrapAnsi(ESCAPE_CODES.get(parseInt(escapeCode, 10)) || END_CODE); - } - break; - } - } - - return output; -}; diff --git a/node_modules/slice-ansi/license b/node_modules/slice-ansi/license deleted file mode 100644 index 4d72633..0000000 --- a/node_modules/slice-ansi/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) DC - -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. diff --git a/node_modules/slice-ansi/package.json b/node_modules/slice-ansi/package.json deleted file mode 100644 index cc60b3b..0000000 --- a/node_modules/slice-ansi/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "slice-ansi", - "version": "1.0.0", - "description": "Slice a string with ANSI escape codes", - "license": "MIT", - "repository": "chalk/slice-ansi", - "author": { - "name": "David Caccavella", - "email": "threedeecee@gmail.com" - }, - "engines": { - "node": ">=4" - }, - "scripts": { - "test": "xo && ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "slice", - "string", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "is-fullwidth-code-point": "^2.0.0" - }, - "devDependencies": { - "ava": "*", - "chalk": "^2.0.1", - "random-item": "^1.0.0", - "strip-ansi": "^4.0.0", - "xo": "*" - } -} diff --git a/node_modules/slice-ansi/readme.md b/node_modules/slice-ansi/readme.md deleted file mode 100755 index 628eed2..0000000 --- a/node_modules/slice-ansi/readme.md +++ /dev/null @@ -1,64 +0,0 @@ -# slice-ansi [![Build Status](https://travis-ci.org/chalk/slice-ansi.svg?branch=master)](https://travis-ci.org/chalk/slice-ansi) [![XO: Linted](https://img.shields.io/badge/xo-linted-blue.svg)](https://github.com/sindresorhus/xo) - -> Slice a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) - - -## Install - -``` -$ npm install slice-ansi -``` - - -## Usage - -```js -const chalk = require('chalk'); -const sliceAnsi = require('slice-ansi'); - -const input = 'The quick brown ' + chalk.red('fox jumped over ') + - 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); - -console.log(sliceAnsi(input, 20, 30)); -``` - - -## API - -### sliceAnsi(input, beginSlice, [endSlice]) - -#### input - -Type: `string` - -String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). - -#### beginSlice - -Type: `number` - -Zero-based index at which to begin the slice. - -#### endSlice - -Type: `number` - -Zero-based index at which to end the slice. - - -## Related - -- [wrap-ansi](https://github.com/chalk/wrap-ansi) - Wordwrap a string with ANSI escape codes -- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - -## License - -MIT diff --git a/node_modules/sprintf-js/.npmignore b/node_modules/sprintf-js/.npmignore deleted file mode 100644 index 096746c..0000000 --- a/node_modules/sprintf-js/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules/ \ No newline at end of file diff --git a/node_modules/sprintf-js/LICENSE b/node_modules/sprintf-js/LICENSE deleted file mode 100644 index 663ac52..0000000 --- a/node_modules/sprintf-js/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2007-2014, Alexandru Marasteanu -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -* Neither the name of this software nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/sprintf-js/README.md b/node_modules/sprintf-js/README.md deleted file mode 100644 index 8386356..0000000 --- a/node_modules/sprintf-js/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# sprintf.js -**sprintf.js** is a complete open source JavaScript sprintf implementation for the *browser* and *node.js*. - -Its prototype is simple: - - string sprintf(string format , [mixed arg1 [, mixed arg2 [ ,...]]]) - -The placeholders in the format string are marked by `%` and are followed by one or more of these elements, in this order: - -* An optional number followed by a `$` sign that selects which argument index to use for the value. If not specified, arguments will be placed in the same order as the placeholders in the input string. -* An optional `+` sign that forces to preceed the result with a plus or minus sign on numeric values. By default, only the `-` sign is used on negative numbers. -* An optional padding specifier that says what character to use for padding (if specified). Possible values are `0` or any other character precedeed by a `'` (single quote). The default is to pad with *spaces*. -* An optional `-` sign, that causes sprintf to left-align the result of this placeholder. The default is to right-align the result. -* An optional number, that says how many characters the result should have. If the value to be returned is shorter than this number, the result will be padded. When used with the `j` (JSON) type specifier, the padding length specifies the tab size used for indentation. -* An optional precision modifier, consisting of a `.` (dot) followed by a number, that says how many digits should be displayed for floating point numbers. When used with the `g` type specifier, it specifies the number of significant digits. When used on a string, it causes the result to be truncated. -* A type specifier that can be any of: - * `%` — yields a literal `%` character - * `b` — yields an integer as a binary number - * `c` — yields an integer as the character with that ASCII value - * `d` or `i` — yields an integer as a signed decimal number - * `e` — yields a float using scientific notation - * `u` — yields an integer as an unsigned decimal number - * `f` — yields a float as is; see notes on precision above - * `g` — yields a float as is; see notes on precision above - * `o` — yields an integer as an octal number - * `s` — yields a string as is - * `x` — yields an integer as a hexadecimal number (lower-case) - * `X` — yields an integer as a hexadecimal number (upper-case) - * `j` — yields a JavaScript object or array as a JSON encoded string - -## JavaScript `vsprintf` -`vsprintf` is the same as `sprintf` except that it accepts an array of arguments, rather than a variable number of arguments: - - vsprintf("The first 4 letters of the english alphabet are: %s, %s, %s and %s", ["a", "b", "c", "d"]) - -## Argument swapping -You can also swap the arguments. That is, the order of the placeholders doesn't have to match the order of the arguments. You can do that by simply indicating in the format string which arguments the placeholders refer to: - - sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants") -And, of course, you can repeat the placeholders without having to increase the number of arguments. - -## Named arguments -Format strings may contain replacement fields rather than positional placeholders. Instead of referring to a certain argument, you can now refer to a certain key within an object. Replacement fields are surrounded by rounded parentheses - `(` and `)` - and begin with a keyword that refers to a key: - - var user = { - name: "Dolly" - } - sprintf("Hello %(name)s", user) // Hello Dolly -Keywords in replacement fields can be optionally followed by any number of keywords or indexes: - - var users = [ - {name: "Dolly"}, - {name: "Molly"}, - {name: "Polly"} - ] - sprintf("Hello %(users[0].name)s, %(users[1].name)s and %(users[2].name)s", {users: users}) // Hello Dolly, Molly and Polly -Note: mixing positional and named placeholders is not (yet) supported - -## Computed values -You can pass in a function as a dynamic value and it will be invoked (with no arguments) in order to compute the value on-the-fly. - - sprintf("Current timestamp: %d", Date.now) // Current timestamp: 1398005382890 - sprintf("Current date and time: %s", function() { return new Date().toString() }) - -# AngularJS -You can now use `sprintf` and `vsprintf` (also aliased as `fmt` and `vfmt` respectively) in your AngularJS projects. See `demo/`. - -# Installation - -## Via Bower - - bower install sprintf - -## Or as a node.js module - - npm install sprintf-js - -### Usage - - var sprintf = require("sprintf-js").sprintf, - vsprintf = require("sprintf-js").vsprintf - - sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants") - vsprintf("The first 4 letters of the english alphabet are: %s, %s, %s and %s", ["a", "b", "c", "d"]) - -# License - -**sprintf.js** is licensed under the terms of the 3-clause BSD license. diff --git a/node_modules/sprintf-js/bower.json b/node_modules/sprintf-js/bower.json deleted file mode 100644 index d90a759..0000000 --- a/node_modules/sprintf-js/bower.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "sprintf", - "description": "JavaScript sprintf implementation", - "version": "1.0.3", - "main": "src/sprintf.js", - "license": "BSD-3-Clause-Clear", - "keywords": ["sprintf", "string", "formatting"], - "authors": ["Alexandru Marasteanu (http://alexei.ro/)"], - "homepage": "https://github.com/alexei/sprintf.js", - "repository": { - "type": "git", - "url": "git://github.com/alexei/sprintf.js.git" - } -} diff --git a/node_modules/sprintf-js/demo/angular.html b/node_modules/sprintf-js/demo/angular.html deleted file mode 100644 index 3559efd..0000000 --- a/node_modules/sprintf-js/demo/angular.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - -
{{ "%+010d"|sprintf:-123 }}
-
{{ "%+010d"|vsprintf:[-123] }}
-
{{ "%+010d"|fmt:-123 }}
-
{{ "%+010d"|vfmt:[-123] }}
-
{{ "I've got %2$d apples and %1$d oranges."|fmt:4:2 }}
-
{{ "I've got %(apples)d apples and %(oranges)d oranges."|fmt:{apples: 2, oranges: 4} }}
- - - - diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.js b/node_modules/sprintf-js/dist/angular-sprintf.min.js deleted file mode 100644 index dbaf744..0000000 --- a/node_modules/sprintf-js/dist/angular-sprintf.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! sprintf-js | Alexandru Marasteanu (http://alexei.ro/) | BSD-3-Clause */ - -angular.module("sprintf",[]).filter("sprintf",function(){return function(){return sprintf.apply(null,arguments)}}).filter("fmt",["$filter",function(a){return a("sprintf")}]).filter("vsprintf",function(){return function(a,b){return vsprintf(a,b)}}).filter("vfmt",["$filter",function(a){return a("vsprintf")}]); -//# sourceMappingURL=angular-sprintf.min.map \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.js.map b/node_modules/sprintf-js/dist/angular-sprintf.min.js.map deleted file mode 100644 index 055964c..0000000 --- a/node_modules/sprintf-js/dist/angular-sprintf.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"angular-sprintf.min.js","sources":["../src/angular-sprintf.js"],"names":["angular","module","filter","sprintf","apply","arguments","$filter","format","argv","vsprintf"],"mappings":";;AAAAA,QACIC,OAAO,cACPC,OAAO,UAAW,WACd,MAAO,YACH,MAAOC,SAAQC,MAAM,KAAMC,cAGnCH,OAAO,OAAQ,UAAW,SAASI,GAC/B,MAAOA,GAAQ,cAEnBJ,OAAO,WAAY,WACf,MAAO,UAASK,EAAQC,GACpB,MAAOC,UAASF,EAAQC,MAGhCN,OAAO,QAAS,UAAW,SAASI,GAChC,MAAOA,GAAQ"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.map b/node_modules/sprintf-js/dist/angular-sprintf.min.map deleted file mode 100644 index 055964c..0000000 --- a/node_modules/sprintf-js/dist/angular-sprintf.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"angular-sprintf.min.js","sources":["../src/angular-sprintf.js"],"names":["angular","module","filter","sprintf","apply","arguments","$filter","format","argv","vsprintf"],"mappings":";;AAAAA,QACIC,OAAO,cACPC,OAAO,UAAW,WACd,MAAO,YACH,MAAOC,SAAQC,MAAM,KAAMC,cAGnCH,OAAO,OAAQ,UAAW,SAASI,GAC/B,MAAOA,GAAQ,cAEnBJ,OAAO,WAAY,WACf,MAAO,UAASK,EAAQC,GACpB,MAAOC,UAASF,EAAQC,MAGhCN,OAAO,QAAS,UAAW,SAASI,GAChC,MAAOA,GAAQ"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.js b/node_modules/sprintf-js/dist/sprintf.min.js deleted file mode 100644 index dc61e51..0000000 --- a/node_modules/sprintf-js/dist/sprintf.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! sprintf-js | Alexandru Marasteanu (http://alexei.ro/) | BSD-3-Clause */ - -!function(a){function b(){var a=arguments[0],c=b.cache;return c[a]&&c.hasOwnProperty(a)||(c[a]=b.parse(a)),b.format.call(null,c[a],arguments)}function c(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function d(a,b){return Array(b+1).join(a)}var e={not_string:/[^s]/,number:/[diefg]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[\+\-]/};b.format=function(a,f){var g,h,i,j,k,l,m,n=1,o=a.length,p="",q=[],r=!0,s="";for(h=0;o>h;h++)if(p=c(a[h]),"string"===p)q[q.length]=a[h];else if("array"===p){if(j=a[h],j[2])for(g=f[n],i=0;i=0),j[8]){case"b":g=g.toString(2);break;case"c":g=String.fromCharCode(g);break;case"d":case"i":g=parseInt(g,10);break;case"j":g=JSON.stringify(g,null,j[6]?parseInt(j[6]):0);break;case"e":g=j[7]?g.toExponential(j[7]):g.toExponential();break;case"f":g=j[7]?parseFloat(g).toFixed(j[7]):parseFloat(g);break;case"g":g=j[7]?parseFloat(g).toPrecision(j[7]):parseFloat(g);break;case"o":g=g.toString(8);break;case"s":g=(g=String(g))&&j[7]?g.substring(0,j[7]):g;break;case"u":g>>>=0;break;case"x":g=g.toString(16);break;case"X":g=g.toString(16).toUpperCase()}e.json.test(j[8])?q[q.length]=g:(!e.number.test(j[8])||r&&!j[3]?s="":(s=r?"+":"-",g=g.toString().replace(e.sign,"")),l=j[4]?"0"===j[4]?"0":j[4].charAt(1):" ",m=j[6]-(s+g).length,k=j[6]&&m>0?d(l,m):"",q[q.length]=j[5]?s+g+k:"0"===l?s+k+g:k+s+g)}return q.join("")},b.cache={},b.parse=function(a){for(var b=a,c=[],d=[],f=0;b;){if(null!==(c=e.text.exec(b)))d[d.length]=c[0];else if(null!==(c=e.modulo.exec(b)))d[d.length]="%";else{if(null===(c=e.placeholder.exec(b)))throw new SyntaxError("[sprintf] unexpected placeholder");if(c[2]){f|=1;var g=[],h=c[2],i=[];if(null===(i=e.key.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(g[g.length]=i[1];""!==(h=h.substring(i[0].length));)if(null!==(i=e.key_access.exec(h)))g[g.length]=i[1];else{if(null===(i=e.index_access.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");g[g.length]=i[1]}c[2]=g}else f|=2;if(3===f)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");d[d.length]=c}b=b.substring(c[0].length)}return d};var f=function(a,c,d){return d=(c||[]).slice(0),d.splice(0,0,a),b.apply(null,d)};"undefined"!=typeof exports?(exports.sprintf=b,exports.vsprintf=f):(a.sprintf=b,a.vsprintf=f,"function"==typeof define&&define.amd&&define(function(){return{sprintf:b,vsprintf:f}}))}("undefined"==typeof window?this:window); -//# sourceMappingURL=sprintf.min.map \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.js.map b/node_modules/sprintf-js/dist/sprintf.min.js.map deleted file mode 100644 index 369dbaf..0000000 --- a/node_modules/sprintf-js/dist/sprintf.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"sprintf.min.js","sources":["../src/sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","Array","join","re","not_string","number","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","Error","test","isNaN","TypeError","String","fromCharCode","parseInt","JSON","stringify","toExponential","parseFloat","toFixed","substring","toUpperCase","replace","charAt","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","exports","define","amd","this"],"mappings":";;CAAA,SAAUA,GAeN,QAASC,KACL,GAAIC,GAAMC,UAAU,GAAIC,EAAQH,EAAQG,KAIxC,OAHMA,GAAMF,IAAQE,EAAMC,eAAeH,KACrCE,EAAMF,GAAOD,EAAQK,MAAMJ,IAExBD,EAAQM,OAAOC,KAAK,KAAMJ,EAAMF,GAAMC,WA4JjD,QAASM,GAASC,GACd,MAAOC,QAAOC,UAAUC,SAASL,KAAKE,GAAUI,MAAM,EAAG,IAAIC,cAGjE,QAASC,GAAWC,EAAOC,GACvB,MAAOC,OAAMD,EAAa,GAAGE,KAAKH,GApLtC,GAAII,IACAC,WAAY,OACZC,OAAQ,SACRC,KAAM,MACNC,SAAU,OACVC,KAAM,YACNC,OAAQ,WACRC,YAAa,yFACb1B,IAAK,sBACL2B,WAAY,wBACZC,aAAc,aACdC,KAAM,UAWV9B,GAAQM,OAAS,SAASyB,EAAYC,GAClC,GAAiEC,GAAkBC,EAAGC,EAAGC,EAAOC,EAAKC,EAAeC,EAAhHC,EAAS,EAAGC,EAAcV,EAAWW,OAAQC,EAAY,GAASC,KAA0DC,GAAc,EAAMf,EAAO,EAC3J,KAAKI,EAAI,EAAOO,EAAJP,EAAiBA,IAEzB,GADAS,EAAYnC,EAASuB,EAAWG,IACd,WAAdS,EACAC,EAAOA,EAAOF,QAAUX,EAAWG,OAElC,IAAkB,UAAdS,EAAuB,CAE5B,GADAP,EAAQL,EAAWG,GACfE,EAAM,GAEN,IADAH,EAAMD,EAAKQ,GACNL,EAAI,EAAGA,EAAIC,EAAM,GAAGM,OAAQP,IAAK,CAClC,IAAKF,EAAI7B,eAAegC,EAAM,GAAGD,IAC7B,KAAM,IAAIW,OAAM9C,EAAQ,yCAA0CoC,EAAM,GAAGD,IAE/EF,GAAMA,EAAIG,EAAM,GAAGD,QAIvBF,GADKG,EAAM,GACLJ,EAAKI,EAAM,IAGXJ,EAAKQ,IAOf,IAJqB,YAAjBhC,EAASyB,KACTA,EAAMA,KAGNb,EAAGC,WAAW0B,KAAKX,EAAM,KAAOhB,EAAGI,SAASuB,KAAKX,EAAM,KAAyB,UAAjB5B,EAASyB,IAAoBe,MAAMf,GAClG,KAAM,IAAIgB,WAAUjD,EAAQ,0CAA2CQ,EAASyB,IAOpF,QAJIb,EAAGE,OAAOyB,KAAKX,EAAM,MACrBS,EAAcZ,GAAO,GAGjBG,EAAM,IACV,IAAK,IACDH,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,EAAMiB,OAAOC,aAAalB,EAC9B,MACA,KAAK,IACL,IAAK,IACDA,EAAMmB,SAASnB,EAAK,GACxB,MACA,KAAK,IACDA,EAAMoB,KAAKC,UAAUrB,EAAK,KAAMG,EAAM,GAAKgB,SAAShB,EAAM,IAAM,EACpE,MACA,KAAK,IACDH,EAAMG,EAAM,GAAKH,EAAIsB,cAAcnB,EAAM,IAAMH,EAAIsB,eACvD,MACA,KAAK,IACDtB,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKwB,QAAQrB,EAAM,IAAMoB,WAAWvB,EACpE,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,GAAQA,EAAMiB,OAAOjB,KAASG,EAAM,GAAKH,EAAIyB,UAAU,EAAGtB,EAAM,IAAMH,CAC1E,MACA,KAAK,IACDA,KAAc,CAClB,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,GACvB,MACA,KAAK,IACDqB,EAAMA,EAAIrB,SAAS,IAAI+C,cAG3BvC,EAAGG,KAAKwB,KAAKX,EAAM,IACnBQ,EAAOA,EAAOF,QAAUT,IAGpBb,EAAGE,OAAOyB,KAAKX,EAAM,KAASS,IAAeT,EAAM,GAKnDN,EAAO,IAJPA,EAAOe,EAAc,IAAM,IAC3BZ,EAAMA,EAAIrB,WAAWgD,QAAQxC,EAAGU,KAAM,KAK1CQ,EAAgBF,EAAM,GAAkB,MAAbA,EAAM,GAAa,IAAMA,EAAM,GAAGyB,OAAO,GAAK,IACzEtB,EAAaH,EAAM,IAAMN,EAAOG,GAAKS,OACrCL,EAAMD,EAAM,IAAMG,EAAa,EAAIxB,EAAWuB,EAAeC,GAAoB,GACjFK,EAAOA,EAAOF,QAAUN,EAAM,GAAKN,EAAOG,EAAMI,EAAyB,MAAlBC,EAAwBR,EAAOO,EAAMJ,EAAMI,EAAMP,EAAOG,GAI3H,MAAOW,GAAOzB,KAAK,KAGvBnB,EAAQG,SAERH,EAAQK,MAAQ,SAASyD,GAErB,IADA,GAAIC,GAAOD,EAAK1B,KAAYL,KAAiBiC,EAAY,EAClDD,GAAM,CACT,GAAqC,QAAhC3B,EAAQhB,EAAGK,KAAKwC,KAAKF,IACtBhC,EAAWA,EAAWW,QAAUN,EAAM,OAErC,IAAuC,QAAlCA,EAAQhB,EAAGM,OAAOuC,KAAKF,IAC7BhC,EAAWA,EAAWW,QAAU,QAE/B,CAAA,GAA4C,QAAvCN,EAAQhB,EAAGO,YAAYsC,KAAKF,IAgClC,KAAM,IAAIG,aAAY,mCA/BtB,IAAI9B,EAAM,GAAI,CACV4B,GAAa,CACb,IAAIG,MAAiBC,EAAoBhC,EAAM,GAAIiC,IACnD,IAAuD,QAAlDA,EAAcjD,EAAGnB,IAAIgE,KAAKG,IAe3B,KAAM,IAAIF,aAAY,+CAbtB,KADAC,EAAWA,EAAWzB,QAAU2B,EAAY,GACwC,MAA5ED,EAAoBA,EAAkBV,UAAUW,EAAY,GAAG3B,UACnE,GAA8D,QAAzD2B,EAAcjD,EAAGQ,WAAWqC,KAAKG,IAClCD,EAAWA,EAAWzB,QAAU2B,EAAY,OAE3C,CAAA,GAAgE,QAA3DA,EAAcjD,EAAGS,aAAaoC,KAAKG,IAIzC,KAAM,IAAIF,aAAY,+CAHtBC,GAAWA,EAAWzB,QAAU2B,EAAY,GAUxDjC,EAAM,GAAK+B,MAGXH,IAAa,CAEjB,IAAkB,IAAdA,EACA,KAAM,IAAIlB,OAAM,4EAEpBf,GAAWA,EAAWW,QAAUN,EAKpC2B,EAAOA,EAAKL,UAAUtB,EAAM,GAAGM,QAEnC,MAAOX,GAGX,IAAIuC,GAAW,SAASR,EAAK9B,EAAMuC,GAG/B,MAFAA,IAASvC,OAAYnB,MAAM,GAC3B0D,EAAMC,OAAO,EAAG,EAAGV,GACZ9D,EAAQyE,MAAM,KAAMF,GAiBR,oBAAZG,UACPA,QAAQ1E,QAAUA,EAClB0E,QAAQJ,SAAWA,IAGnBvE,EAAOC,QAAUA,EACjBD,EAAOuE,SAAWA,EAEI,kBAAXK,SAAyBA,OAAOC,KACvCD,OAAO,WACH,OACI3E,QAASA,EACTsE,SAAUA,OAKT,mBAAXvE,QAAyB8E,KAAO9E"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.map b/node_modules/sprintf-js/dist/sprintf.min.map deleted file mode 100644 index ee011aa..0000000 --- a/node_modules/sprintf-js/dist/sprintf.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"sprintf.min.js","sources":["../src/sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","Array","join","re","not_string","number","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","Error","test","isNaN","TypeError","String","fromCharCode","parseInt","JSON","stringify","toExponential","parseFloat","toFixed","toPrecision","substring","toUpperCase","replace","charAt","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","exports","define","amd","this"],"mappings":";;CAAA,SAAUA,GAeN,QAASC,KACL,GAAIC,GAAMC,UAAU,GAAIC,EAAQH,EAAQG,KAIxC,OAHMA,GAAMF,IAAQE,EAAMC,eAAeH,KACrCE,EAAMF,GAAOD,EAAQK,MAAMJ,IAExBD,EAAQM,OAAOC,KAAK,KAAMJ,EAAMF,GAAMC,WA+JjD,QAASM,GAASC,GACd,MAAOC,QAAOC,UAAUC,SAASL,KAAKE,GAAUI,MAAM,EAAG,IAAIC,cAGjE,QAASC,GAAWC,EAAOC,GACvB,MAAOC,OAAMD,EAAa,GAAGE,KAAKH,GAvLtC,GAAII,IACAC,WAAY,OACZC,OAAQ,UACRC,KAAM,MACNC,SAAU,OACVC,KAAM,YACNC,OAAQ,WACRC,YAAa,yFACb1B,IAAK,sBACL2B,WAAY,wBACZC,aAAc,aACdC,KAAM,UAWV9B,GAAQM,OAAS,SAASyB,EAAYC,GAClC,GAAiEC,GAAkBC,EAAGC,EAAGC,EAAOC,EAAKC,EAAeC,EAAhHC,EAAS,EAAGC,EAAcV,EAAWW,OAAQC,EAAY,GAASC,KAA0DC,GAAc,EAAMf,EAAO,EAC3J,KAAKI,EAAI,EAAOO,EAAJP,EAAiBA,IAEzB,GADAS,EAAYnC,EAASuB,EAAWG,IACd,WAAdS,EACAC,EAAOA,EAAOF,QAAUX,EAAWG,OAElC,IAAkB,UAAdS,EAAuB,CAE5B,GADAP,EAAQL,EAAWG,GACfE,EAAM,GAEN,IADAH,EAAMD,EAAKQ,GACNL,EAAI,EAAGA,EAAIC,EAAM,GAAGM,OAAQP,IAAK,CAClC,IAAKF,EAAI7B,eAAegC,EAAM,GAAGD,IAC7B,KAAM,IAAIW,OAAM9C,EAAQ,yCAA0CoC,EAAM,GAAGD,IAE/EF,GAAMA,EAAIG,EAAM,GAAGD,QAIvBF,GADKG,EAAM,GACLJ,EAAKI,EAAM,IAGXJ,EAAKQ,IAOf,IAJqB,YAAjBhC,EAASyB,KACTA,EAAMA,KAGNb,EAAGC,WAAW0B,KAAKX,EAAM,KAAOhB,EAAGI,SAASuB,KAAKX,EAAM,KAAyB,UAAjB5B,EAASyB,IAAoBe,MAAMf,GAClG,KAAM,IAAIgB,WAAUjD,EAAQ,0CAA2CQ,EAASyB,IAOpF,QAJIb,EAAGE,OAAOyB,KAAKX,EAAM,MACrBS,EAAcZ,GAAO,GAGjBG,EAAM,IACV,IAAK,IACDH,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,EAAMiB,OAAOC,aAAalB,EAC9B,MACA,KAAK,IACL,IAAK,IACDA,EAAMmB,SAASnB,EAAK,GACxB,MACA,KAAK,IACDA,EAAMoB,KAAKC,UAAUrB,EAAK,KAAMG,EAAM,GAAKgB,SAAShB,EAAM,IAAM,EACpE,MACA,KAAK,IACDH,EAAMG,EAAM,GAAKH,EAAIsB,cAAcnB,EAAM,IAAMH,EAAIsB,eACvD,MACA,KAAK,IACDtB,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKwB,QAAQrB,EAAM,IAAMoB,WAAWvB,EACpE,MACA,KAAK,IACDA,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKyB,YAAYtB,EAAM,IAAMoB,WAAWvB,EACxE,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,GAAQA,EAAMiB,OAAOjB,KAASG,EAAM,GAAKH,EAAI0B,UAAU,EAAGvB,EAAM,IAAMH,CAC1E,MACA,KAAK,IACDA,KAAc,CAClB,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,GACvB,MACA,KAAK,IACDqB,EAAMA,EAAIrB,SAAS,IAAIgD,cAG3BxC,EAAGG,KAAKwB,KAAKX,EAAM,IACnBQ,EAAOA,EAAOF,QAAUT,IAGpBb,EAAGE,OAAOyB,KAAKX,EAAM,KAASS,IAAeT,EAAM,GAKnDN,EAAO,IAJPA,EAAOe,EAAc,IAAM,IAC3BZ,EAAMA,EAAIrB,WAAWiD,QAAQzC,EAAGU,KAAM,KAK1CQ,EAAgBF,EAAM,GAAkB,MAAbA,EAAM,GAAa,IAAMA,EAAM,GAAG0B,OAAO,GAAK,IACzEvB,EAAaH,EAAM,IAAMN,EAAOG,GAAKS,OACrCL,EAAMD,EAAM,IAAMG,EAAa,EAAIxB,EAAWuB,EAAeC,GAAoB,GACjFK,EAAOA,EAAOF,QAAUN,EAAM,GAAKN,EAAOG,EAAMI,EAAyB,MAAlBC,EAAwBR,EAAOO,EAAMJ,EAAMI,EAAMP,EAAOG,GAI3H,MAAOW,GAAOzB,KAAK,KAGvBnB,EAAQG,SAERH,EAAQK,MAAQ,SAAS0D,GAErB,IADA,GAAIC,GAAOD,EAAK3B,KAAYL,KAAiBkC,EAAY,EAClDD,GAAM,CACT,GAAqC,QAAhC5B,EAAQhB,EAAGK,KAAKyC,KAAKF,IACtBjC,EAAWA,EAAWW,QAAUN,EAAM,OAErC,IAAuC,QAAlCA,EAAQhB,EAAGM,OAAOwC,KAAKF,IAC7BjC,EAAWA,EAAWW,QAAU,QAE/B,CAAA,GAA4C,QAAvCN,EAAQhB,EAAGO,YAAYuC,KAAKF,IAgClC,KAAM,IAAIG,aAAY,mCA/BtB,IAAI/B,EAAM,GAAI,CACV6B,GAAa,CACb,IAAIG,MAAiBC,EAAoBjC,EAAM,GAAIkC,IACnD,IAAuD,QAAlDA,EAAclD,EAAGnB,IAAIiE,KAAKG,IAe3B,KAAM,IAAIF,aAAY,+CAbtB,KADAC,EAAWA,EAAW1B,QAAU4B,EAAY,GACwC,MAA5ED,EAAoBA,EAAkBV,UAAUW,EAAY,GAAG5B,UACnE,GAA8D,QAAzD4B,EAAclD,EAAGQ,WAAWsC,KAAKG,IAClCD,EAAWA,EAAW1B,QAAU4B,EAAY,OAE3C,CAAA,GAAgE,QAA3DA,EAAclD,EAAGS,aAAaqC,KAAKG,IAIzC,KAAM,IAAIF,aAAY,+CAHtBC,GAAWA,EAAW1B,QAAU4B,EAAY,GAUxDlC,EAAM,GAAKgC,MAGXH,IAAa,CAEjB,IAAkB,IAAdA,EACA,KAAM,IAAInB,OAAM,4EAEpBf,GAAWA,EAAWW,QAAUN,EAKpC4B,EAAOA,EAAKL,UAAUvB,EAAM,GAAGM,QAEnC,MAAOX,GAGX,IAAIwC,GAAW,SAASR,EAAK/B,EAAMwC,GAG/B,MAFAA,IAASxC,OAAYnB,MAAM,GAC3B2D,EAAMC,OAAO,EAAG,EAAGV,GACZ/D,EAAQ0E,MAAM,KAAMF,GAiBR,oBAAZG,UACPA,QAAQ3E,QAAUA,EAClB2E,QAAQJ,SAAWA,IAGnBxE,EAAOC,QAAUA,EACjBD,EAAOwE,SAAWA,EAEI,kBAAXK,SAAyBA,OAAOC,KACvCD,OAAO,WACH,OACI5E,QAASA,EACTuE,SAAUA,OAKT,mBAAXxE,QAAyB+E,KAAO/E"} \ No newline at end of file diff --git a/node_modules/sprintf-js/gruntfile.js b/node_modules/sprintf-js/gruntfile.js deleted file mode 100644 index 246e1c3..0000000 --- a/node_modules/sprintf-js/gruntfile.js +++ /dev/null @@ -1,36 +0,0 @@ -module.exports = function(grunt) { - grunt.initConfig({ - pkg: grunt.file.readJSON("package.json"), - - uglify: { - options: { - banner: "/*! <%= pkg.name %> | <%= pkg.author %> | <%= pkg.license %> */\n", - sourceMap: true - }, - build: { - files: [ - { - src: "src/sprintf.js", - dest: "dist/sprintf.min.js" - }, - { - src: "src/angular-sprintf.js", - dest: "dist/angular-sprintf.min.js" - } - ] - } - }, - - watch: { - js: { - files: "src/*.js", - tasks: ["uglify"] - } - } - }) - - grunt.loadNpmTasks("grunt-contrib-uglify") - grunt.loadNpmTasks("grunt-contrib-watch") - - grunt.registerTask("default", ["uglify", "watch"]) -} diff --git a/node_modules/sprintf-js/package.json b/node_modules/sprintf-js/package.json deleted file mode 100644 index 75f7eca..0000000 --- a/node_modules/sprintf-js/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "sprintf-js", - "version": "1.0.3", - "description": "JavaScript sprintf implementation", - "author": "Alexandru Marasteanu (http://alexei.ro/)", - "main": "src/sprintf.js", - "scripts": { - "test": "mocha test/test.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/alexei/sprintf.js.git" - }, - "license": "BSD-3-Clause", - "readmeFilename": "README.md", - "devDependencies": { - "mocha": "*", - "grunt": "*", - "grunt-contrib-watch": "*", - "grunt-contrib-uglify": "*" - } -} diff --git a/node_modules/sprintf-js/src/angular-sprintf.js b/node_modules/sprintf-js/src/angular-sprintf.js deleted file mode 100644 index 9c69123..0000000 --- a/node_modules/sprintf-js/src/angular-sprintf.js +++ /dev/null @@ -1,18 +0,0 @@ -angular. - module("sprintf", []). - filter("sprintf", function() { - return function() { - return sprintf.apply(null, arguments) - } - }). - filter("fmt", ["$filter", function($filter) { - return $filter("sprintf") - }]). - filter("vsprintf", function() { - return function(format, argv) { - return vsprintf(format, argv) - } - }). - filter("vfmt", ["$filter", function($filter) { - return $filter("vsprintf") - }]) diff --git a/node_modules/sprintf-js/src/sprintf.js b/node_modules/sprintf-js/src/sprintf.js deleted file mode 100644 index c0fc7c0..0000000 --- a/node_modules/sprintf-js/src/sprintf.js +++ /dev/null @@ -1,208 +0,0 @@ -(function(window) { - var re = { - not_string: /[^s]/, - number: /[diefg]/, - json: /[j]/, - not_json: /[^j]/, - text: /^[^\x25]+/, - modulo: /^\x25{2}/, - placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/, - key: /^([a-z_][a-z_\d]*)/i, - key_access: /^\.([a-z_][a-z_\d]*)/i, - index_access: /^\[(\d+)\]/, - sign: /^[\+\-]/ - } - - function sprintf() { - var key = arguments[0], cache = sprintf.cache - if (!(cache[key] && cache.hasOwnProperty(key))) { - cache[key] = sprintf.parse(key) - } - return sprintf.format.call(null, cache[key], arguments) - } - - sprintf.format = function(parse_tree, argv) { - var cursor = 1, tree_length = parse_tree.length, node_type = "", arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = "" - for (i = 0; i < tree_length; i++) { - node_type = get_type(parse_tree[i]) - if (node_type === "string") { - output[output.length] = parse_tree[i] - } - else if (node_type === "array") { - match = parse_tree[i] // convenience purposes only - if (match[2]) { // keyword argument - arg = argv[cursor] - for (k = 0; k < match[2].length; k++) { - if (!arg.hasOwnProperty(match[2][k])) { - throw new Error(sprintf("[sprintf] property '%s' does not exist", match[2][k])) - } - arg = arg[match[2][k]] - } - } - else if (match[1]) { // positional argument (explicit) - arg = argv[match[1]] - } - else { // positional argument (implicit) - arg = argv[cursor++] - } - - if (get_type(arg) == "function") { - arg = arg() - } - - if (re.not_string.test(match[8]) && re.not_json.test(match[8]) && (get_type(arg) != "number" && isNaN(arg))) { - throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg))) - } - - if (re.number.test(match[8])) { - is_positive = arg >= 0 - } - - switch (match[8]) { - case "b": - arg = arg.toString(2) - break - case "c": - arg = String.fromCharCode(arg) - break - case "d": - case "i": - arg = parseInt(arg, 10) - break - case "j": - arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0) - break - case "e": - arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential() - break - case "f": - arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg) - break - case "g": - arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg) - break - case "o": - arg = arg.toString(8) - break - case "s": - arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg) - break - case "u": - arg = arg >>> 0 - break - case "x": - arg = arg.toString(16) - break - case "X": - arg = arg.toString(16).toUpperCase() - break - } - if (re.json.test(match[8])) { - output[output.length] = arg - } - else { - if (re.number.test(match[8]) && (!is_positive || match[3])) { - sign = is_positive ? "+" : "-" - arg = arg.toString().replace(re.sign, "") - } - else { - sign = "" - } - pad_character = match[4] ? match[4] === "0" ? "0" : match[4].charAt(1) : " " - pad_length = match[6] - (sign + arg).length - pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : "") : "" - output[output.length] = match[5] ? sign + arg + pad : (pad_character === "0" ? sign + pad + arg : pad + sign + arg) - } - } - } - return output.join("") - } - - sprintf.cache = {} - - sprintf.parse = function(fmt) { - var _fmt = fmt, match = [], parse_tree = [], arg_names = 0 - while (_fmt) { - if ((match = re.text.exec(_fmt)) !== null) { - parse_tree[parse_tree.length] = match[0] - } - else if ((match = re.modulo.exec(_fmt)) !== null) { - parse_tree[parse_tree.length] = "%" - } - else if ((match = re.placeholder.exec(_fmt)) !== null) { - if (match[2]) { - arg_names |= 1 - var field_list = [], replacement_field = match[2], field_match = [] - if ((field_match = re.key.exec(replacement_field)) !== null) { - field_list[field_list.length] = field_match[1] - while ((replacement_field = replacement_field.substring(field_match[0].length)) !== "") { - if ((field_match = re.key_access.exec(replacement_field)) !== null) { - field_list[field_list.length] = field_match[1] - } - else if ((field_match = re.index_access.exec(replacement_field)) !== null) { - field_list[field_list.length] = field_match[1] - } - else { - throw new SyntaxError("[sprintf] failed to parse named argument key") - } - } - } - else { - throw new SyntaxError("[sprintf] failed to parse named argument key") - } - match[2] = field_list - } - else { - arg_names |= 2 - } - if (arg_names === 3) { - throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported") - } - parse_tree[parse_tree.length] = match - } - else { - throw new SyntaxError("[sprintf] unexpected placeholder") - } - _fmt = _fmt.substring(match[0].length) - } - return parse_tree - } - - var vsprintf = function(fmt, argv, _argv) { - _argv = (argv || []).slice(0) - _argv.splice(0, 0, fmt) - return sprintf.apply(null, _argv) - } - - /** - * helpers - */ - function get_type(variable) { - return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase() - } - - function str_repeat(input, multiplier) { - return Array(multiplier + 1).join(input) - } - - /** - * export to either browser or node.js - */ - if (typeof exports !== "undefined") { - exports.sprintf = sprintf - exports.vsprintf = vsprintf - } - else { - window.sprintf = sprintf - window.vsprintf = vsprintf - - if (typeof define === "function" && define.amd) { - define(function() { - return { - sprintf: sprintf, - vsprintf: vsprintf - } - }) - } - } -})(typeof window === "undefined" ? this : window); diff --git a/node_modules/sprintf-js/test/test.js b/node_modules/sprintf-js/test/test.js deleted file mode 100644 index 6f57b25..0000000 --- a/node_modules/sprintf-js/test/test.js +++ /dev/null @@ -1,82 +0,0 @@ -var assert = require("assert"), - sprintfjs = require("../src/sprintf.js"), - sprintf = sprintfjs.sprintf, - vsprintf = sprintfjs.vsprintf - -describe("sprintfjs", function() { - var pi = 3.141592653589793 - - it("should return formated strings for simple placeholders", function() { - assert.equal("%", sprintf("%%")) - assert.equal("10", sprintf("%b", 2)) - assert.equal("A", sprintf("%c", 65)) - assert.equal("2", sprintf("%d", 2)) - assert.equal("2", sprintf("%i", 2)) - assert.equal("2", sprintf("%d", "2")) - assert.equal("2", sprintf("%i", "2")) - assert.equal('{"foo":"bar"}', sprintf("%j", {foo: "bar"})) - assert.equal('["foo","bar"]', sprintf("%j", ["foo", "bar"])) - assert.equal("2e+0", sprintf("%e", 2)) - assert.equal("2", sprintf("%u", 2)) - assert.equal("4294967294", sprintf("%u", -2)) - assert.equal("2.2", sprintf("%f", 2.2)) - assert.equal("3.141592653589793", sprintf("%g", pi)) - assert.equal("10", sprintf("%o", 8)) - assert.equal("%s", sprintf("%s", "%s")) - assert.equal("ff", sprintf("%x", 255)) - assert.equal("FF", sprintf("%X", 255)) - assert.equal("Polly wants a cracker", sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants")) - assert.equal("Hello world!", sprintf("Hello %(who)s!", {"who": "world"})) - }) - - it("should return formated strings for complex placeholders", function() { - // sign - assert.equal("2", sprintf("%d", 2)) - assert.equal("-2", sprintf("%d", -2)) - assert.equal("+2", sprintf("%+d", 2)) - assert.equal("-2", sprintf("%+d", -2)) - assert.equal("2", sprintf("%i", 2)) - assert.equal("-2", sprintf("%i", -2)) - assert.equal("+2", sprintf("%+i", 2)) - assert.equal("-2", sprintf("%+i", -2)) - assert.equal("2.2", sprintf("%f", 2.2)) - assert.equal("-2.2", sprintf("%f", -2.2)) - assert.equal("+2.2", sprintf("%+f", 2.2)) - assert.equal("-2.2", sprintf("%+f", -2.2)) - assert.equal("-2.3", sprintf("%+.1f", -2.34)) - assert.equal("-0.0", sprintf("%+.1f", -0.01)) - assert.equal("3.14159", sprintf("%.6g", pi)) - assert.equal("3.14", sprintf("%.3g", pi)) - assert.equal("3", sprintf("%.1g", pi)) - assert.equal("-000000123", sprintf("%+010d", -123)) - assert.equal("______-123", sprintf("%+'_10d", -123)) - assert.equal("-234.34 123.2", sprintf("%f %f", -234.34, 123.2)) - - // padding - assert.equal("-0002", sprintf("%05d", -2)) - assert.equal("-0002", sprintf("%05i", -2)) - assert.equal(" <", sprintf("%5s", "<")) - assert.equal("0000<", sprintf("%05s", "<")) - assert.equal("____<", sprintf("%'_5s", "<")) - assert.equal("> ", sprintf("%-5s", ">")) - assert.equal(">0000", sprintf("%0-5s", ">")) - assert.equal(">____", sprintf("%'_-5s", ">")) - assert.equal("xxxxxx", sprintf("%5s", "xxxxxx")) - assert.equal("1234", sprintf("%02u", 1234)) - assert.equal(" -10.235", sprintf("%8.3f", -10.23456)) - assert.equal("-12.34 xxx", sprintf("%f %s", -12.34, "xxx")) - assert.equal('{\n "foo": "bar"\n}', sprintf("%2j", {foo: "bar"})) - assert.equal('[\n "foo",\n "bar"\n]', sprintf("%2j", ["foo", "bar"])) - - // precision - assert.equal("2.3", sprintf("%.1f", 2.345)) - assert.equal("xxxxx", sprintf("%5.5s", "xxxxxx")) - assert.equal(" x", sprintf("%5.1s", "xxxxxx")) - - }) - - it("should return formated strings for callbacks", function() { - assert.equal("foobar", sprintf("%s", function() { return "foobar" })) - assert.equal(Date.now(), sprintf("%s", Date.now)) // should pass... - }) -}) diff --git a/node_modules/string-width/index.js b/node_modules/string-width/index.js deleted file mode 100644 index bbc49d2..0000000 --- a/node_modules/string-width/index.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; -const stripAnsi = require('strip-ansi'); -const isFullwidthCodePoint = require('is-fullwidth-code-point'); - -module.exports = str => { - if (typeof str !== 'string' || str.length === 0) { - return 0; - } - - str = stripAnsi(str); - - let width = 0; - - for (let i = 0; i < str.length; i++) { - const code = str.codePointAt(i); - - // Ignore control characters - if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { - continue; - } - - // Ignore combining characters - if (code >= 0x300 && code <= 0x36F) { - continue; - } - - // Surrogates - if (code > 0xFFFF) { - i++; - } - - width += isFullwidthCodePoint(code) ? 2 : 1; - } - - return width; -}; diff --git a/node_modules/string-width/license b/node_modules/string-width/license deleted file mode 100644 index e7af2f7..0000000 --- a/node_modules/string-width/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/string-width/node_modules/ansi-regex/index.js b/node_modules/string-width/node_modules/ansi-regex/index.js deleted file mode 100644 index 93f162c..0000000 --- a/node_modules/string-width/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = () => { - const pattern = [ - '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[a-zA-Z\\d]*)*)?\\u0007)', - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PRZcf-ntqry=><~]))' - ].join('|'); - - return new RegExp(pattern, 'g'); -}; diff --git a/node_modules/string-width/node_modules/ansi-regex/license b/node_modules/string-width/node_modules/ansi-regex/license deleted file mode 100644 index e7af2f7..0000000 --- a/node_modules/string-width/node_modules/ansi-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/string-width/node_modules/ansi-regex/package.json b/node_modules/string-width/node_modules/ansi-regex/package.json deleted file mode 100644 index 0548619..0000000 --- a/node_modules/string-width/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "ansi-regex", - "version": "3.0.1", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": "chalk/ansi-regex", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=4" - }, - "scripts": { - "test": "xo && ava", - "view-supported": "node fixtures/view-codes.js" - }, - "files": [ - "index.js" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "ava": "*", - "xo": "*" - } -} diff --git a/node_modules/string-width/node_modules/ansi-regex/readme.md b/node_modules/string-width/node_modules/ansi-regex/readme.md deleted file mode 100644 index 22db1c3..0000000 --- a/node_modules/string-width/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex) - -> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install ansi-regex -``` - - -## Usage - -```js -const ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] -``` - - -## FAQ - -### Why do you test for codes not in the ECMA 48 standard? - -Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. - -On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - -## License - -MIT diff --git a/node_modules/string-width/node_modules/strip-ansi/index.js b/node_modules/string-width/node_modules/strip-ansi/index.js deleted file mode 100644 index 96e0292..0000000 --- a/node_modules/string-width/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -const ansiRegex = require('ansi-regex'); - -module.exports = input => typeof input === 'string' ? input.replace(ansiRegex(), '') : input; diff --git a/node_modules/string-width/node_modules/strip-ansi/license b/node_modules/string-width/node_modules/strip-ansi/license deleted file mode 100644 index e7af2f7..0000000 --- a/node_modules/string-width/node_modules/strip-ansi/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/string-width/node_modules/strip-ansi/package.json b/node_modules/string-width/node_modules/strip-ansi/package.json deleted file mode 100644 index 555f194..0000000 --- a/node_modules/string-width/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "strip-ansi", - "version": "4.0.0", - "description": "Strip ANSI escape codes", - "license": "MIT", - "repository": "chalk/strip-ansi", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=4" - }, - "scripts": { - "test": "xo && ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "strip", - "trim", - "remove", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "devDependencies": { - "ava": "*", - "xo": "*" - } -} diff --git a/node_modules/string-width/node_modules/strip-ansi/readme.md b/node_modules/string-width/node_modules/strip-ansi/readme.md deleted file mode 100644 index dc76f0c..0000000 --- a/node_modules/string-width/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) - -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install strip-ansi -``` - - -## Usage - -```js -const stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' -``` - - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - -## License - -MIT diff --git a/node_modules/string-width/package.json b/node_modules/string-width/package.json deleted file mode 100644 index 89f0b6a..0000000 --- a/node_modules/string-width/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "string-width", - "version": "2.1.1", - "description": "Get the visual width of a string - the number of columns required to display it", - "license": "MIT", - "repository": "sindresorhus/string-width", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=4" - }, - "scripts": { - "test": "xo && ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "string", - "str", - "character", - "char", - "unicode", - "width", - "visual", - "column", - "columns", - "fullwidth", - "full-width", - "full", - "ansi", - "escape", - "codes", - "cli", - "command-line", - "terminal", - "console", - "cjk", - "chinese", - "japanese", - "korean", - "fixed-width" - ], - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "devDependencies": { - "ava": "*", - "xo": "*" - } -} diff --git a/node_modules/string-width/readme.md b/node_modules/string-width/readme.md deleted file mode 100644 index df5b719..0000000 --- a/node_modules/string-width/readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# string-width [![Build Status](https://travis-ci.org/sindresorhus/string-width.svg?branch=master)](https://travis-ci.org/sindresorhus/string-width) - -> Get the visual width of a string - the number of columns required to display it - -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - -Useful to be able to measure the actual width of command-line output. - - -## Install - -``` -$ npm install string-width -``` - - -## Usage - -```js -const stringWidth = require('string-width'); - -stringWidth('古'); -//=> 2 - -stringWidth('\u001b[1m古\u001b[22m'); -//=> 2 - -stringWidth('a'); -//=> 1 -``` - - -## Related - -- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module -- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string -- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/string_decoder/.travis.yml b/node_modules/string_decoder/.travis.yml deleted file mode 100644 index 3347a72..0000000 --- a/node_modules/string_decoder/.travis.yml +++ /dev/null @@ -1,50 +0,0 @@ -sudo: false -language: node_js -before_install: - - npm install -g npm@2 - - test $NPM_LEGACY && npm install -g npm@latest-3 || npm install npm -g -notifications: - email: false -matrix: - fast_finish: true - include: - - node_js: '0.8' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: '0.10' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: '0.11' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: '0.12' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 1 - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 2 - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 3 - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 4 - env: TASK=test - - node_js: 5 - env: TASK=test - - node_js: 6 - env: TASK=test - - node_js: 7 - env: TASK=test - - node_js: 8 - env: TASK=test - - node_js: 9 - env: TASK=test diff --git a/node_modules/string_decoder/LICENSE b/node_modules/string_decoder/LICENSE deleted file mode 100644 index 778edb2..0000000 --- a/node_modules/string_decoder/LICENSE +++ /dev/null @@ -1,48 +0,0 @@ -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -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. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -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. -""" - diff --git a/node_modules/string_decoder/README.md b/node_modules/string_decoder/README.md deleted file mode 100644 index 5fd5831..0000000 --- a/node_modules/string_decoder/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# string_decoder - -***Node-core v8.9.4 string_decoder for userland*** - - -[![NPM](https://nodei.co/npm/string_decoder.png?downloads=true&downloadRank=true)](https://nodei.co/npm/string_decoder/) -[![NPM](https://nodei.co/npm-dl/string_decoder.png?&months=6&height=3)](https://nodei.co/npm/string_decoder/) - - -```bash -npm install --save string_decoder -``` - -***Node-core string_decoder for userland*** - -This package is a mirror of the string_decoder implementation in Node-core. - -Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.9.4/docs/api/). - -As of version 1.0.0 **string_decoder** uses semantic versioning. - -## Previous versions - -Previous version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. - -## Update - -The *build/* directory contains a build script that will scrape the source from the [nodejs/node](https://github.com/nodejs/node) repo given a specific Node version. - -## Streams Working Group - -`string_decoder` is maintained by the Streams Working Group, which -oversees the development and maintenance of the Streams API within -Node.js. The responsibilities of the Streams Working Group include: - -* Addressing stream issues on the Node.js issue tracker. -* Authoring and editing stream documentation within the Node.js project. -* Reviewing changes to stream subclasses within the Node.js project. -* Redirecting changes to streams from the Node.js project to this - project. -* Assisting in the implementation of stream providers within Node.js. -* Recommending versions of `readable-stream` to be included in Node.js. -* Messaging about the future of streams to give the community advance - notice of changes. - -See [readable-stream](https://github.com/nodejs/readable-stream) for -more details. diff --git a/node_modules/string_decoder/lib/string_decoder.js b/node_modules/string_decoder/lib/string_decoder.js deleted file mode 100644 index 2e89e63..0000000 --- a/node_modules/string_decoder/lib/string_decoder.js +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. - -'use strict'; - -/**/ - -var Buffer = require('safe-buffer').Buffer; -/**/ - -var isEncoding = Buffer.isEncoding || function (encoding) { - encoding = '' + encoding; - switch (encoding && encoding.toLowerCase()) { - case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': - return true; - default: - return false; - } -}; - -function _normalizeEncoding(enc) { - if (!enc) return 'utf8'; - var retried; - while (true) { - switch (enc) { - case 'utf8': - case 'utf-8': - return 'utf8'; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return 'utf16le'; - case 'latin1': - case 'binary': - return 'latin1'; - case 'base64': - case 'ascii': - case 'hex': - return enc; - default: - if (retried) return; // undefined - enc = ('' + enc).toLowerCase(); - retried = true; - } - } -}; - -// Do not cache `Buffer.isEncoding` when checking encoding names as some -// modules monkey-patch it to support additional encodings -function normalizeEncoding(enc) { - var nenc = _normalizeEncoding(enc); - if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); - return nenc || enc; -} - -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. -exports.StringDecoder = StringDecoder; -function StringDecoder(encoding) { - this.encoding = normalizeEncoding(encoding); - var nb; - switch (this.encoding) { - case 'utf16le': - this.text = utf16Text; - this.end = utf16End; - nb = 4; - break; - case 'utf8': - this.fillLast = utf8FillLast; - nb = 4; - break; - case 'base64': - this.text = base64Text; - this.end = base64End; - nb = 3; - break; - default: - this.write = simpleWrite; - this.end = simpleEnd; - return; - } - this.lastNeed = 0; - this.lastTotal = 0; - this.lastChar = Buffer.allocUnsafe(nb); -} - -StringDecoder.prototype.write = function (buf) { - if (buf.length === 0) return ''; - var r; - var i; - if (this.lastNeed) { - r = this.fillLast(buf); - if (r === undefined) return ''; - i = this.lastNeed; - this.lastNeed = 0; - } else { - i = 0; - } - if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); - return r || ''; -}; - -StringDecoder.prototype.end = utf8End; - -// Returns only complete characters in a Buffer -StringDecoder.prototype.text = utf8Text; - -// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer -StringDecoder.prototype.fillLast = function (buf) { - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); - this.lastNeed -= buf.length; -}; - -// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a -// continuation byte. If an invalid byte is detected, -2 is returned. -function utf8CheckByte(byte) { - if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; - return byte >> 6 === 0x02 ? -1 : -2; -} - -// Checks at most 3 bytes at the end of a Buffer in order to detect an -// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) -// needed to complete the UTF-8 character (if applicable) are returned. -function utf8CheckIncomplete(self, buf, i) { - var j = buf.length - 1; - if (j < i) return 0; - var nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 1; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 2; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) { - if (nb === 2) nb = 0;else self.lastNeed = nb - 3; - } - return nb; - } - return 0; -} - -// Validates as many continuation bytes for a multi-byte UTF-8 character as -// needed or are available. If we see a non-continuation byte where we expect -// one, we "replace" the validated continuation bytes we've seen so far with -// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding -// behavior. The continuation byte check is included three times in the case -// where all of the continuation bytes for a character exist in the same buffer. -// It is also done this way as a slight performance increase instead of using a -// loop. -function utf8CheckExtraBytes(self, buf, p) { - if ((buf[0] & 0xC0) !== 0x80) { - self.lastNeed = 0; - return '\ufffd'; - } - if (self.lastNeed > 1 && buf.length > 1) { - if ((buf[1] & 0xC0) !== 0x80) { - self.lastNeed = 1; - return '\ufffd'; - } - if (self.lastNeed > 2 && buf.length > 2) { - if ((buf[2] & 0xC0) !== 0x80) { - self.lastNeed = 2; - return '\ufffd'; - } - } - } -} - -// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. -function utf8FillLast(buf) { - var p = this.lastTotal - this.lastNeed; - var r = utf8CheckExtraBytes(this, buf, p); - if (r !== undefined) return r; - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, p, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, p, 0, buf.length); - this.lastNeed -= buf.length; -} - -// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a -// partial character, the character's bytes are buffered until the required -// number of bytes are available. -function utf8Text(buf, i) { - var total = utf8CheckIncomplete(this, buf, i); - if (!this.lastNeed) return buf.toString('utf8', i); - this.lastTotal = total; - var end = buf.length - (total - this.lastNeed); - buf.copy(this.lastChar, 0, end); - return buf.toString('utf8', i, end); -} - -// For UTF-8, a replacement character is added when ending on a partial -// character. -function utf8End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + '\ufffd'; - return r; -} - -// UTF-16LE typically needs two bytes per character, but even if we have an even -// number of bytes available, we need to check if we end on a leading/high -// surrogate. In that case, we need to wait for the next two bytes in order to -// decode the last character properly. -function utf16Text(buf, i) { - if ((buf.length - i) % 2 === 0) { - var r = buf.toString('utf16le', i); - if (r) { - var c = r.charCodeAt(r.length - 1); - if (c >= 0xD800 && c <= 0xDBFF) { - this.lastNeed = 2; - this.lastTotal = 4; - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - return r.slice(0, -1); - } - } - return r; - } - this.lastNeed = 1; - this.lastTotal = 2; - this.lastChar[0] = buf[buf.length - 1]; - return buf.toString('utf16le', i, buf.length - 1); -} - -// For UTF-16LE we do not explicitly append special replacement characters if we -// end on a partial character, we simply let v8 handle that. -function utf16End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) { - var end = this.lastTotal - this.lastNeed; - return r + this.lastChar.toString('utf16le', 0, end); - } - return r; -} - -function base64Text(buf, i) { - var n = (buf.length - i) % 3; - if (n === 0) return buf.toString('base64', i); - this.lastNeed = 3 - n; - this.lastTotal = 3; - if (n === 1) { - this.lastChar[0] = buf[buf.length - 1]; - } else { - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - } - return buf.toString('base64', i, buf.length - n); -} - -function base64End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); - return r; -} - -// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) -function simpleWrite(buf) { - return buf.toString(this.encoding); -} - -function simpleEnd(buf) { - return buf && buf.length ? this.write(buf) : ''; -} \ No newline at end of file diff --git a/node_modules/string_decoder/package.json b/node_modules/string_decoder/package.json deleted file mode 100644 index 518c3eb..0000000 --- a/node_modules/string_decoder/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "string_decoder", - "version": "1.1.1", - "description": "The string_decoder module from Node core", - "main": "lib/string_decoder.js", - "dependencies": { - "safe-buffer": "~5.1.0" - }, - "devDependencies": { - "babel-polyfill": "^6.23.0", - "core-util-is": "^1.0.2", - "inherits": "^2.0.3", - "tap": "~0.4.8" - }, - "scripts": { - "test": "tap test/parallel/*.js && node test/verify-dependencies", - "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/nodejs/string_decoder.git" - }, - "homepage": "https://github.com/nodejs/string_decoder", - "keywords": [ - "string", - "decoder", - "browser", - "browserify" - ], - "license": "MIT" -} diff --git a/node_modules/strip-ansi/index.js b/node_modules/strip-ansi/index.js deleted file mode 100644 index 099480f..0000000 --- a/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; -var ansiRegex = require('ansi-regex')(); - -module.exports = function (str) { - return typeof str === 'string' ? str.replace(ansiRegex, '') : str; -}; diff --git a/node_modules/strip-ansi/license b/node_modules/strip-ansi/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/strip-ansi/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/strip-ansi/package.json b/node_modules/strip-ansi/package.json deleted file mode 100644 index 301685b..0000000 --- a/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "strip-ansi", - "version": "3.0.1", - "description": "Strip ANSI escape codes", - "license": "MIT", - "repository": "chalk/strip-ansi", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "maintainers": [ - "Sindre Sorhus (sindresorhus.com)", - "Joshua Boy Nicolai Appelman (jbna.nl)", - "JD Ballard (github.com/qix-)" - ], - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "xo && ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "strip", - "trim", - "remove", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "devDependencies": { - "ava": "*", - "xo": "*" - } -} diff --git a/node_modules/strip-ansi/readme.md b/node_modules/strip-ansi/readme.md deleted file mode 100644 index cb7d9ff..0000000 --- a/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,33 +0,0 @@ -# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) - -> Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install --save strip-ansi -``` - - -## Usage - -```js -var stripAnsi = require('strip-ansi'); - -stripAnsi('\u001b[4mcake\u001b[0m'); -//=> 'cake' -``` - - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/strip-json-comments/index.js b/node_modules/strip-json-comments/index.js deleted file mode 100644 index 4e6576e..0000000 --- a/node_modules/strip-json-comments/index.js +++ /dev/null @@ -1,70 +0,0 @@ -'use strict'; -var singleComment = 1; -var multiComment = 2; - -function stripWithoutWhitespace() { - return ''; -} - -function stripWithWhitespace(str, start, end) { - return str.slice(start, end).replace(/\S/g, ' '); -} - -module.exports = function (str, opts) { - opts = opts || {}; - - var currentChar; - var nextChar; - var insideString = false; - var insideComment = false; - var offset = 0; - var ret = ''; - var strip = opts.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace; - - for (var i = 0; i < str.length; i++) { - currentChar = str[i]; - nextChar = str[i + 1]; - - if (!insideComment && currentChar === '"') { - var escaped = str[i - 1] === '\\' && str[i - 2] !== '\\'; - if (!escaped) { - insideString = !insideString; - } - } - - if (insideString) { - continue; - } - - if (!insideComment && currentChar + nextChar === '//') { - ret += str.slice(offset, i); - offset = i; - insideComment = singleComment; - i++; - } else if (insideComment === singleComment && currentChar + nextChar === '\r\n') { - i++; - insideComment = false; - ret += strip(str, offset, i); - offset = i; - continue; - } else if (insideComment === singleComment && currentChar === '\n') { - insideComment = false; - ret += strip(str, offset, i); - offset = i; - } else if (!insideComment && currentChar + nextChar === '/*') { - ret += str.slice(offset, i); - offset = i; - insideComment = multiComment; - i++; - continue; - } else if (insideComment === multiComment && currentChar + nextChar === '*/') { - i++; - insideComment = false; - ret += strip(str, offset, i + 1); - offset = i + 1; - continue; - } - } - - return ret + (insideComment ? strip(str.substr(offset)) : str.substr(offset)); -}; diff --git a/node_modules/strip-json-comments/license b/node_modules/strip-json-comments/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/strip-json-comments/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/strip-json-comments/package.json b/node_modules/strip-json-comments/package.json deleted file mode 100644 index 288ecc7..0000000 --- a/node_modules/strip-json-comments/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "strip-json-comments", - "version": "2.0.1", - "description": "Strip comments from JSON. Lets you use comments in your JSON files!", - "license": "MIT", - "repository": "sindresorhus/strip-json-comments", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "xo && ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "json", - "strip", - "remove", - "delete", - "trim", - "comments", - "multiline", - "parse", - "config", - "configuration", - "conf", - "settings", - "util", - "env", - "environment" - ], - "devDependencies": { - "ava": "*", - "xo": "*" - } -} diff --git a/node_modules/strip-json-comments/readme.md b/node_modules/strip-json-comments/readme.md deleted file mode 100644 index 0ee58df..0000000 --- a/node_modules/strip-json-comments/readme.md +++ /dev/null @@ -1,64 +0,0 @@ -# strip-json-comments [![Build Status](https://travis-ci.org/sindresorhus/strip-json-comments.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-json-comments) - -> Strip comments from JSON. Lets you use comments in your JSON files! - -This is now possible: - -```js -{ - // rainbows - "unicorn": /* ❤ */ "cake" -} -``` - -It will replace single-line comments `//` and multi-line comments `/**/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. - -Also available as a [gulp](https://github.com/sindresorhus/gulp-strip-json-comments)/[grunt](https://github.com/sindresorhus/grunt-strip-json-comments)/[broccoli](https://github.com/sindresorhus/broccoli-strip-json-comments) plugin. - - -## Install - -``` -$ npm install --save strip-json-comments -``` - - -## Usage - -```js -const json = '{/*rainbows*/"unicorn":"cake"}'; - -JSON.parse(stripJsonComments(json)); -//=> {unicorn: 'cake'} -``` - - -## API - -### stripJsonComments(input, [options]) - -#### input - -Type: `string` - -Accepts a string with JSON and returns a string without comments. - -#### options - -##### whitespace - -Type: `boolean` -Default: `true` - -Replace comments with whitespace instead of stripping them entirely. - - -## Related - -- [strip-json-comments-cli](https://github.com/sindresorhus/strip-json-comments-cli) - CLI for this module -- [strip-css-comments](https://github.com/sindresorhus/strip-css-comments) - Strip comments from CSS - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/supports-color/index.js b/node_modules/supports-color/index.js deleted file mode 100644 index 4346e27..0000000 --- a/node_modules/supports-color/index.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; -var argv = process.argv; - -var terminator = argv.indexOf('--'); -var hasFlag = function (flag) { - flag = '--' + flag; - var pos = argv.indexOf(flag); - return pos !== -1 && (terminator !== -1 ? pos < terminator : true); -}; - -module.exports = (function () { - if ('FORCE_COLOR' in process.env) { - return true; - } - - if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false')) { - return false; - } - - if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - return true; - } - - if (process.stdout && !process.stdout.isTTY) { - return false; - } - - if (process.platform === 'win32') { - return true; - } - - if ('COLORTERM' in process.env) { - return true; - } - - if (process.env.TERM === 'dumb') { - return false; - } - - if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { - return true; - } - - return false; -})(); diff --git a/node_modules/supports-color/license b/node_modules/supports-color/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/supports-color/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/supports-color/package.json b/node_modules/supports-color/package.json deleted file mode 100644 index 3bb77ac..0000000 --- a/node_modules/supports-color/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "supports-color", - "version": "2.0.0", - "description": "Detect whether a terminal supports color", - "license": "MIT", - "repository": "chalk/supports-color", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "maintainers": [ - "Sindre Sorhus (sindresorhus.com)", - "Joshua Appelman (jbnicolai.com)" - ], - "engines": { - "node": ">=0.8.0" - }, - "scripts": { - "test": "mocha" - }, - "files": [ - "index.js" - ], - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "ansi", - "styles", - "tty", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "support", - "supports", - "capability", - "detect" - ], - "devDependencies": { - "mocha": "*", - "require-uncached": "^1.0.2" - } -} diff --git a/node_modules/supports-color/readme.md b/node_modules/supports-color/readme.md deleted file mode 100644 index b4761f1..0000000 --- a/node_modules/supports-color/readme.md +++ /dev/null @@ -1,36 +0,0 @@ -# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color) - -> Detect whether a terminal supports color - - -## Install - -``` -$ npm install --save supports-color -``` - - -## Usage - -```js -var supportsColor = require('supports-color'); - -if (supportsColor) { - console.log('Terminal supports color'); -} -``` - -It obeys the `--color` and `--no-color` CLI flags. - -For situations where using `--color` is not possible, add an environment variable `FORCE_COLOR` with any value to force color. Trumps `--no-color`. - - -## Related - -- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/table/LICENSE b/node_modules/table/LICENSE deleted file mode 100644 index 7e84ea3..0000000 --- a/node_modules/table/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2016, Gajus Kuizinas (http://gajus.com/) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Gajus Kuizinas (http://gajus.com/) nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL ANUARY BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/table/README.md b/node_modules/table/README.md deleted file mode 100644 index 76613d4..0000000 --- a/node_modules/table/README.md +++ /dev/null @@ -1,671 +0,0 @@ - -# Table - -[![Travis build status](http://img.shields.io/travis/gajus/table/master.svg?style=flat)](https://travis-ci.org/gajus/table) -[![NPM version](http://img.shields.io/npm/v/table.svg?style=flat)](https://www.npmjs.com/package/table) -[![js-canonical-style](https://img.shields.io/badge/code%20style-canonical-brightgreen.svg?style=flat)](https://github.com/gajus/canonical) - -* [Table](#table) - * [Features](#table-features) - * [Usage](#table-usage) - * [Cell Content Alignment](#table-usage-cell-content-alignment) - * [Column Width](#table-usage-column-width) - * [Custom Border](#table-usage-custom-border) - * [Draw Horizontal Line](#table-usage-draw-horizontal-line) - * [Padding Cell Content](#table-usage-padding-cell-content) - * [Predefined Border Templates](#table-usage-predefined-border-templates) - * [Streaming](#table-usage-streaming) - * [Text Truncation](#table-usage-text-truncation) - * [Text Wrapping](#table-usage-text-wrapping) - - -Produces a string that represents array data in a text table. - -![Demo of table displaying a list of missions to the Moon.](./.README/demo.png) - - -## Features - -* Works with strings containing [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) characters. -* Works with strings containing [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code). -* Configurable border characters. -* Configurable content alignment per column. -* Configurable content padding per column. -* Configurable column width. -* Text wrapping. - - -## Usage - -Table data is described using an array (rows) of array (cells). - -```js -import { - table -} from 'table'; - -// Using commonjs? -// const {table} = require('table'); - -let data, - output; - -data = [ - ['0A', '0B', '0C'], - ['1A', '1B', '1C'], - ['2A', '2B', '2C'] -]; - -/** - * @typedef {string} table~cell - */ - -/** - * @typedef {table~cell[]} table~row - */ - -/** - * @typedef {Object} table~columns - * @property {string} alignment Cell content alignment (enum: left, center, right) (default: left). - * @property {number} width Column width (default: auto). - * @property {number} truncate Number of characters are which the content will be truncated (default: Infinity). - * @property {number} paddingLeft Cell content padding width left (default: 1). - * @property {number} paddingRight Cell content padding width right (default: 1). - */ - -/** - * @typedef {Object} table~border - * @property {string} topBody - * @property {string} topJoin - * @property {string} topLeft - * @property {string} topRight - * @property {string} bottomBody - * @property {string} bottomJoin - * @property {string} bottomLeft - * @property {string} bottomRight - * @property {string} bodyLeft - * @property {string} bodyRight - * @property {string} bodyJoin - * @property {string} joinBody - * @property {string} joinLeft - * @property {string} joinRight - * @property {string} joinJoin - */ - -/** - * Used to dynamically tell table whether to draw a line separating rows or not. - * The default behavior is to always return true. - * - * @typedef {function} drawJoin - * @param {number} index - * @param {number} size - * @return {boolean} - */ - -/** - * @typedef {Object} table~config - * @property {table~border} border - * @property {table~columns[]} columns Column specific configuration. - * @property {table~columns} columnDefault Default values for all columns. Column specific settings overwrite the default values. - * @property {table~drawJoin} drawHorizontalLine - */ - -/** - * Generates a text table. - * - * @param {table~row[]} rows - * @param {table~config} config - * @return {String} - */ -output = table(data); - -console.log(output); -``` - -``` -╔════╤════╤════╗ -║ 0A │ 0B │ 0C ║ -╟────┼────┼────╢ -║ 1A │ 1B │ 1C ║ -╟────┼────┼────╢ -║ 2A │ 2B │ 2C ║ -╚════╧════╧════╝ -``` - - - -### Cell Content Alignment - -`{string} config.columns[{number}].alignment` property controls content horizontal alignment within a cell. - -Valid values are: "left", "right" and "center". - -```js -let config, - data, - output; - -data = [ - ['0A', '0B', '0C'], - ['1A', '1B', '1C'], - ['2A', '2B', '2C'] -]; - -config = { - columns: { - 0: { - alignment: 'left', - minWidth: 10 - }, - 1: { - alignment: 'center', - minWidth: 10 - }, - 2: { - alignment: 'right', - minWidth: 10 - } - } -}; - -output = table(data, config); - -console.log(output); -``` - -``` -╔════════════╤════════════╤════════════╗ -║ 0A │ 0B │ 0C ║ -╟────────────┼────────────┼────────────╢ -║ 1A │ 1B │ 1C ║ -╟────────────┼────────────┼────────────╢ -║ 2A │ 2B │ 2C ║ -╚════════════╧════════════╧════════════╝ -``` - - -### Column Width - -`{number} config.columns[{number}].width` property restricts column width to a fixed width. - -```js -let data, - output, - options; - -data = [ - ['0A', '0B', '0C'], - ['1A', '1B', '1C'], - ['2A', '2B', '2C'] -]; - -options = { - columns: { - 1: { - width: 10 - } - } -}; - -output = table(data, options); - -console.log(output); -``` - -``` -╔════╤════════════╤════╗ -║ 0A │ 0B │ 0C ║ -╟────┼────────────┼────╢ -║ 1A │ 1B │ 1C ║ -╟────┼────────────┼────╢ -║ 2A │ 2B │ 2C ║ -╚════╧════════════╧════╝ -``` - - -### Custom Border - -`{object} config.border` property describes characters used to draw the table border. - -```js -let config, - data, - output; - -data = [ - ['0A', '0B', '0C'], - ['1A', '1B', '1C'], - ['2A', '2B', '2C'] -]; - -config = { - border: { - topBody: `─`, - topJoin: `┬`, - topLeft: `┌`, - topRight: `┐`, - - bottomBody: `─`, - bottomJoin: `┴`, - bottomLeft: `└`, - bottomRight: `┘`, - - bodyLeft: `│`, - bodyRight: `│`, - bodyJoin: `│`, - - joinBody: `─`, - joinLeft: `├`, - joinRight: `┤`, - joinJoin: `┼` - } -}; - -output = table(data, config); - -console.log(output); -``` - -``` -┌────┬────┬────┐ -│ 0A │ 0B │ 0C │ -├────┼────┼────┤ -│ 1A │ 1B │ 1C │ -├────┼────┼────┤ -│ 2A │ 2B │ 2C │ -└────┴────┴────┘ -``` - - -### Draw Horizontal Line - -`{function} config.drawHorizontalLine` property is a function that is called for every non-content row in the table. The result of the function `{boolean}` determines whether a row is drawn. - -```js -let data, - output, - options; - -data = [ - ['0A', '0B', '0C'], - ['1A', '1B', '1C'], - ['2A', '2B', '2C'], - ['3A', '3B', '3C'], - ['4A', '4B', '4C'] -]; - -options = { - /** - * @typedef {function} drawJoin - * @param {number} index - * @param {number} size - * @return {boolean} - */ - drawHorizontalLine: (index, size) => { - return index === 0 || index === 1 || index === size - 1 || index === size; - } -}; - -output = table(data, options); - -console.log(output); -``` - -``` -╔════╤════╤════╗ -║ 0A │ 0B │ 0C ║ -╟────┼────┼────╢ -║ 1A │ 1B │ 1C ║ -║ 2A │ 2B │ 2C ║ -║ 3A │ 3B │ 3C ║ -╟────┼────┼────╢ -║ 4A │ 4B │ 4C ║ -╚════╧════╧════╝ -``` - - -### Padding Cell Content - -`{number} config.columns[{number}].paddingLeft` and `{number} config.columns[{number}].paddingRight` properties control content padding within a cell. Property value represents a number of whitespaces used to pad the content. - -```js -let config, - data, - output; - -data = [ - ['0A', 'AABBCC', '0C'], - ['1A', '1B', '1C'], - ['2A', '2B', '2C'] -]; - -config = { - columns: { - 0: { - paddingLeft: 3 - }, - 1: { - width: 2, - paddingRight: 3 - } - } -}; - -output = table(data, config); - -console.log(output); -``` - -``` -╔══════╤══════╤════╗ -║ 0A │ AA │ 0C ║ -║ │ BB │ ║ -║ │ CC │ ║ -╟──────┼──────┼────╢ -║ 1A │ 1B │ 1C ║ -╟──────┼──────┼────╢ -║ 2A │ 2B │ 2C ║ -╚══════╧══════╧════╝ -``` - - -### Predefined Border Templates - -You can load one of the predefined border templates using `getBorderCharacters` function. - -```js -import { - table, - getBorderCharacters -} from 'table'; - -let config, - data; - -data = [ - ['0A', '0B', '0C'], - ['1A', '1B', '1C'], - ['2A', '2B', '2C'] -]; - -config = { - border: getBorderCharacters(`name of the template`) -}; - -table(data, config); -``` - -``` -# honeywell - -╔════╤════╤════╗ -║ 0A │ 0B │ 0C ║ -╟────┼────┼────╢ -║ 1A │ 1B │ 1C ║ -╟────┼────┼────╢ -║ 2A │ 2B │ 2C ║ -╚════╧════╧════╝ - -# norc - -┌────┬────┬────┐ -│ 0A │ 0B │ 0C │ -├────┼────┼────┤ -│ 1A │ 1B │ 1C │ -├────┼────┼────┤ -│ 2A │ 2B │ 2C │ -└────┴────┴────┘ - -# ramac (ASCII; for use in terminals that do not support Unicode characters) - -+----+----+----+ -| 0A | 0B | 0C | -|----|----|----| -| 1A | 1B | 1C | -|----|----|----| -| 2A | 2B | 2C | -+----+----+----+ - -# void (no borders; see "bordless table" section of the documentation) - - 0A 0B 0C - - 1A 1B 1C - - 2A 2B 2C - -``` - -Raise [an issue](https://github.com/gajus/table/issues) if you'd like to contribute a new border template. - - -#### Borderless Table - -Simply using "void" border character template creates a table with a lot of unnecessary spacing. - -To create a more plesant to the eye table, reset the padding and remove the joining rows, e.g. - -```js -let output; - -output = table(data, { - border: getBorderCharacters(`void`), - columnDefault: { - paddingLeft: 0, - paddingRight: 1 - }, - drawJoin: () => { - return false - } -}); - -console.log(output); -``` - -``` -0A 0B 0C -1A 1B 1C -2A 2B 2C -``` - - -### Streaming - -`table` package exports `createStream` function used to draw a table and append rows. - -`createStream` requires `{number} columnDefault.width` and `{number} columnCount` configuration properties. - -```js -import { - createStream -} from 'table'; - -let config, - stream; - -config = { - columnDefault: { - width: 50 - }, - columnCount: 1 -}; - -stream = createStream(config); - -setInterval(() => { - stream.write([new Date()]); -}, 500); -``` - -![Streaming current date.](./.README/streaming.gif) - -`table` package uses ANSI escape codes to overwrite the output of the last line when a new row is printed. - -The underlying implementation is explained in this [Stack Overflow answer](http://stackoverflow.com/a/32938658/368691). - -Streaming supports all of the configuration properties and functionality of a static table (such as auto text wrapping, alignment and padding), e.g. - -```js -import { - createStream -} from 'table'; - -import _ from 'lodash'; - -let config, - stream, - i; - -config = { - columnDefault: { - width: 50 - }, - columnCount: 3, - columns: { - 0: { - width: 10, - alignment: 'right' - }, - 1: { - alignment: 'center', - }, - 2: { - width: 10 - } - } -}; - -stream = createStream(config); - -i = 0; - -setInterval(() => { - let random; - - random = _.sample('abcdefghijklmnopqrstuvwxyz', _.random(1, 30)).join(''); - - stream.write([i++, new Date(), random]); -}, 500); -``` - -![Streaming random data.](./.README/streaming-random.gif) - -### Text Truncation - -To handle a content that overflows the container width, `table` package implements [text wrapping](#table-usage-text-wrapping). However, sometimes you may want to truncate content that is too long to be displayed in the table. - -`{number} config.columns[{number}].truncate` property (default: `Infinity`) truncates the text at the specified length. - -```js -let config, - data, - output; - -data = [ - ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pulvinar nibh sed mauris convallis dapibus. Nunc venenatis tempus nulla sit amet viverra.'] -]; - -config = { - columns: { - 0: { - width: 20, - truncate: 100 - } - } -}; - -output = table(data, config); - -console.log(output); -``` - -``` -╔══════════════════════╗ -║ Lorem ipsum dolor si ║ -║ t amet, consectetur ║ -║ adipiscing elit. Pha ║ -║ sellus pulvinar nibh ║ -║ sed mauris conva... ║ -╚══════════════════════╝ -``` - - -### Text Wrapping - -`table` package implements auto text wrapping, i.e. text that has width greater than the container width will be separated into multiple lines, e.g. - -```js -let config, - data, - output; - -data = [ - ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pulvinar nibh sed mauris convallis dapibus. Nunc venenatis tempus nulla sit amet viverra.'] -]; - -config = { - columns: { - 0: { - width: 20 - } - } -}; - -output = table(data, config); - -console.log(output); -``` - -``` -╔══════════════════════╗ -║ Lorem ipsum dolor si ║ -║ t amet, consectetur ║ -║ adipiscing elit. Pha ║ -║ sellus pulvinar nibh ║ -║ sed mauris convallis ║ -║ dapibus. Nunc venena ║ -║ tis tempus nulla sit ║ -║ amet viverra. ║ -╚══════════════════════╝ -``` - -When `wrapWord` is `true` the text is broken at the nearest space or one of the special characters ("-", "_", "\", "/", ".", ",", ";"), e.g. - -```js -let config, - data, - output; - -data = [ - ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pulvinar nibh sed mauris convallis dapibus. Nunc venenatis tempus nulla sit amet viverra.'] -]; - -config = { - columns: { - 0: { - width: 20, - wrapWord: true - } - } -}; - -output = table(data, config); - -console.log(output); -``` - -``` -╔══════════════════════╗ -║ Lorem ipsum dolor ║ -║ sit amet, ║ -║ consectetur ║ -║ adipiscing elit. ║ -║ Phasellus pulvinar ║ -║ nibh sed mauris ║ -║ convallis dapibus. ║ -║ Nunc venenatis ║ -║ tempus nulla sit ║ -║ amet viverra. ║ -╚══════════════════════╝ -``` - diff --git a/node_modules/table/dist/alignString.js b/node_modules/table/dist/alignString.js deleted file mode 100644 index a000208..0000000 --- a/node_modules/table/dist/alignString.js +++ /dev/null @@ -1,106 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _stringWidth = require('string-width'); - -var _stringWidth2 = _interopRequireDefault(_stringWidth); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -const alignments = ['left', 'right', 'center']; - -/** - * @param {string} subject - * @param {number} width - * @returns {string} - */ -const alignLeft = (subject, width) => { - return subject + _lodash2.default.repeat(' ', width); -}; - -/** - * @param {string} subject - * @param {number} width - * @returns {string} - */ -const alignRight = (subject, width) => { - return _lodash2.default.repeat(' ', width) + subject; -}; - -/** - * @param {string} subject - * @param {number} width - * @returns {string} - */ -const alignCenter = (subject, width) => { - let halfWidth; - - halfWidth = width / 2; - - if (halfWidth % 2 === 0) { - return _lodash2.default.repeat(' ', halfWidth) + subject + _lodash2.default.repeat(' ', halfWidth); - } else { - halfWidth = _lodash2.default.floor(halfWidth); - - return _lodash2.default.repeat(' ', halfWidth) + subject + _lodash2.default.repeat(' ', halfWidth + 1); - } -}; - -/** - * Pads a string to the left and/or right to position the subject - * text in a desired alignment within a container. - * - * @param {string} subject - * @param {number} containerWidth - * @param {string} alignment One of the valid options (left, right, center). - * @returns {string} - */ - -exports.default = (subject, containerWidth, alignment) => { - if (!_lodash2.default.isString(subject)) { - throw new TypeError('Subject parameter value must be a string.'); - } - - if (!_lodash2.default.isNumber(containerWidth)) { - throw new TypeError('Container width parameter value must be a number.'); - } - - const subjectWidth = (0, _stringWidth2.default)(subject); - - if (subjectWidth > containerWidth) { - // console.log('subjectWidth', subjectWidth, 'containerWidth', containerWidth, 'subject', subject); - - throw new Error('Subject parameter value width cannot be greater than the container width.'); - } - - if (!_lodash2.default.isString(alignment)) { - throw new TypeError('Alignment parameter value must be a string.'); - } - - if (alignments.indexOf(alignment) === -1) { - throw new Error('Alignment parameter value must be a known alignment parameter value (left, right, center).'); - } - - if (subjectWidth === 0) { - return _lodash2.default.repeat(' ', containerWidth); - } - - const availableWidth = containerWidth - subjectWidth; - - if (alignment === 'left') { - return alignLeft(subject, availableWidth); - } - - if (alignment === 'right') { - return alignRight(subject, availableWidth); - } - - return alignCenter(subject, availableWidth); -}; \ No newline at end of file diff --git a/node_modules/table/dist/alignTableData.js b/node_modules/table/dist/alignTableData.js deleted file mode 100644 index eb40784..0000000 --- a/node_modules/table/dist/alignTableData.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _stringWidth = require('string-width'); - -var _stringWidth2 = _interopRequireDefault(_stringWidth); - -var _alignString = require('./alignString'); - -var _alignString2 = _interopRequireDefault(_alignString); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @param {table~row[]} rows - * @param {Object} config - * @returns {table~row[]} - */ -exports.default = (rows, config) => { - return rows.map(cells => { - return cells.map((value, index1) => { - const column = config.columns[index1]; - - if ((0, _stringWidth2.default)(value) === column.width) { - return value; - } else { - return (0, _alignString2.default)(value, column.width, column.alignment); - } - }); - }); -}; \ No newline at end of file diff --git a/node_modules/table/dist/calculateCellHeight.js b/node_modules/table/dist/calculateCellHeight.js deleted file mode 100644 index d4d60ca..0000000 --- a/node_modules/table/dist/calculateCellHeight.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _stringWidth = require('string-width'); - -var _stringWidth2 = _interopRequireDefault(_stringWidth); - -var _wrapWord = require('./wrapWord'); - -var _wrapWord2 = _interopRequireDefault(_wrapWord); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @param {string} value - * @param {number} columnWidth - * @param {boolean} useWrapWord - * @returns {number} - */ -exports.default = function (value, columnWidth) { - let useWrapWord = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - if (!_lodash2.default.isString(value)) { - throw new TypeError('Value must be a string.'); - } - - if (!_lodash2.default.isInteger(columnWidth)) { - throw new TypeError('Column width must be an integer.'); - } - - if (columnWidth < 1) { - throw new Error('Column width must be greater than 0.'); - } - - if (useWrapWord) { - return (0, _wrapWord2.default)(value, columnWidth).length; - } - - return _lodash2.default.ceil((0, _stringWidth2.default)(value) / columnWidth); -}; \ No newline at end of file diff --git a/node_modules/table/dist/calculateCellWidthIndex.js b/node_modules/table/dist/calculateCellWidthIndex.js deleted file mode 100644 index e6bf927..0000000 --- a/node_modules/table/dist/calculateCellWidthIndex.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _stringWidth = require('string-width'); - -var _stringWidth2 = _interopRequireDefault(_stringWidth); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Calculates width of each cell contents. - * - * @param {string[]} cells - * @returns {number[]} - */ -exports.default = cells => { - return cells.map(value => { - return (0, _stringWidth2.default)(value); - }); -}; \ No newline at end of file diff --git a/node_modules/table/dist/calculateMaximumColumnWidthIndex.js b/node_modules/table/dist/calculateMaximumColumnWidthIndex.js deleted file mode 100644 index dd58e32..0000000 --- a/node_modules/table/dist/calculateMaximumColumnWidthIndex.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _calculateCellWidthIndex = require('./calculateCellWidthIndex'); - -var _calculateCellWidthIndex2 = _interopRequireDefault(_calculateCellWidthIndex); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Produces an array of values that describe the largest value length (width) in every column. - * - * @param {Array[]} rows - * @returns {number[]} - */ -exports.default = rows => { - if (!rows[0]) { - throw new Error('Dataset must have at least one row.'); - } - - const columns = _lodash2.default.fill(Array(rows[0].length), 0); - - _lodash2.default.forEach(rows, row => { - const columnWidthIndex = (0, _calculateCellWidthIndex2.default)(row); - - _lodash2.default.forEach(columnWidthIndex, (valueWidth, index0) => { - if (columns[index0] < valueWidth) { - columns[index0] = valueWidth; - } - }); - }); - - return columns; -}; \ No newline at end of file diff --git a/node_modules/table/dist/calculateRowHeightIndex.js b/node_modules/table/dist/calculateRowHeightIndex.js deleted file mode 100644 index ca9bbea..0000000 --- a/node_modules/table/dist/calculateRowHeightIndex.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _calculateCellHeight = require('./calculateCellHeight'); - -var _calculateCellHeight2 = _interopRequireDefault(_calculateCellHeight); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Calculates the vertical row span index. - * - * @param {Array[]} rows - * @param {Object} config - * @returns {number[]} - */ -exports.default = (rows, config) => { - const tableWidth = rows[0].length; - - const rowSpanIndex = []; - - _lodash2.default.forEach(rows, cells => { - const cellHeightIndex = _lodash2.default.fill(Array(tableWidth), 1); - - _lodash2.default.forEach(cells, (value, index1) => { - if (!_lodash2.default.isNumber(config.columns[index1].width)) { - throw new TypeError('column[index].width must be a number.'); - } - - if (!_lodash2.default.isBoolean(config.columns[index1].wrapWord)) { - throw new TypeError('column[index].wrapWord must be a boolean.'); - } - - cellHeightIndex[index1] = (0, _calculateCellHeight2.default)(value, config.columns[index1].width, config.columns[index1].wrapWord); - }); - - rowSpanIndex.push(_lodash2.default.max(cellHeightIndex)); - }); - - return rowSpanIndex; -}; \ No newline at end of file diff --git a/node_modules/table/dist/createStream.js b/node_modules/table/dist/createStream.js deleted file mode 100644 index 35ee7ac..0000000 --- a/node_modules/table/dist/createStream.js +++ /dev/null @@ -1,157 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _makeStreamConfig = require('./makeStreamConfig'); - -var _makeStreamConfig2 = _interopRequireDefault(_makeStreamConfig); - -var _drawRow = require('./drawRow'); - -var _drawRow2 = _interopRequireDefault(_drawRow); - -var _drawBorder = require('./drawBorder'); - -var _stringifyTableData = require('./stringifyTableData'); - -var _stringifyTableData2 = _interopRequireDefault(_stringifyTableData); - -var _truncateTableData = require('./truncateTableData'); - -var _truncateTableData2 = _interopRequireDefault(_truncateTableData); - -var _mapDataUsingRowHeightIndex = require('./mapDataUsingRowHeightIndex'); - -var _mapDataUsingRowHeightIndex2 = _interopRequireDefault(_mapDataUsingRowHeightIndex); - -var _alignTableData = require('./alignTableData'); - -var _alignTableData2 = _interopRequireDefault(_alignTableData); - -var _padTableData = require('./padTableData'); - -var _padTableData2 = _interopRequireDefault(_padTableData); - -var _calculateRowHeightIndex = require('./calculateRowHeightIndex'); - -var _calculateRowHeightIndex2 = _interopRequireDefault(_calculateRowHeightIndex); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @param {Array} data - * @param {Object} config - * @returns {Array} - */ -const prepareData = (data, config) => { - let rows; - - rows = (0, _stringifyTableData2.default)(data); - - rows = (0, _truncateTableData2.default)(data, config); - - const rowHeightIndex = (0, _calculateRowHeightIndex2.default)(rows, config); - - rows = (0, _mapDataUsingRowHeightIndex2.default)(rows, rowHeightIndex, config); - rows = (0, _alignTableData2.default)(rows, config); - rows = (0, _padTableData2.default)(rows, config); - - return rows; -}; - -/** - * @param {string[]} row - * @param {number[]} columnWidthIndex - * @param {Object} config - * @returns {undefined} - */ -const create = (row, columnWidthIndex, config) => { - const rows = prepareData([row], config); - - const body = _lodash2.default.map(rows, literalRow => { - return (0, _drawRow2.default)(literalRow, config.border); - }).join(''); - - let output; - - output = ''; - - output += (0, _drawBorder.drawBorderTop)(columnWidthIndex, config.border); - output += body; - output += (0, _drawBorder.drawBorderBottom)(columnWidthIndex, config.border); - - output = _lodash2.default.trimEnd(output); - - process.stdout.write(output); -}; - -/** - * @param {string[]} row - * @param {number[]} columnWidthIndex - * @param {Object} config - * @returns {undefined} - */ -const append = (row, columnWidthIndex, config) => { - const rows = prepareData([row], config); - - const body = _lodash2.default.map(rows, literalRow => { - return (0, _drawRow2.default)(literalRow, config.border); - }).join(''); - - let output; - - output = '\r\u001B[K'; - - output += (0, _drawBorder.drawBorderJoin)(columnWidthIndex, config.border); - output += body; - output += (0, _drawBorder.drawBorderBottom)(columnWidthIndex, config.border); - - output = _lodash2.default.trimEnd(output); - - process.stdout.write(output); -}; - -/** - * @param {Object} userConfig - * @returns {Object} - */ - -exports.default = function () { - let userConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - const config = (0, _makeStreamConfig2.default)(userConfig); - - const columnWidthIndex = _lodash2.default.mapValues(config.columns, column => { - return column.width + column.paddingLeft + column.paddingRight; - }); - - let empty; - - empty = true; - - return { - /** - * @param {string[]} row - * @returns {undefined} - */ - write: row => { - if (row.length !== config.columnCount) { - throw new Error('Row cell count does not match the config.columnCount.'); - } - - if (empty) { - empty = false; - - return create(row, columnWidthIndex, config); - } else { - return append(row, columnWidthIndex, config); - } - } - }; -}; \ No newline at end of file diff --git a/node_modules/table/dist/drawBorder.js b/node_modules/table/dist/drawBorder.js deleted file mode 100644 index aeb2b71..0000000 --- a/node_modules/table/dist/drawBorder.js +++ /dev/null @@ -1,104 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.drawBorderTop = exports.drawBorderJoin = exports.drawBorderBottom = exports.drawBorder = undefined; - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @typedef drawBorder~parts - * @property {string} left - * @property {string} right - * @property {string} body - * @property {string} join - */ - -/** - * @param {number[]} columnSizeIndex - * @param {drawBorder~parts} parts - * @returns {string} - */ -const drawBorder = (columnSizeIndex, parts) => { - const columns = _lodash2.default.map(columnSizeIndex, size => { - return _lodash2.default.repeat(parts.body, size); - }).join(parts.join); - - return parts.left + columns + parts.right + '\n'; -}; - -/** - * @typedef drawBorderTop~parts - * @property {string} topLeft - * @property {string} topRight - * @property {string} topBody - * @property {string} topJoin - */ - -/** - * @param {number[]} columnSizeIndex - * @param {drawBorderTop~parts} parts - * @returns {string} - */ -const drawBorderTop = (columnSizeIndex, parts) => { - return drawBorder(columnSizeIndex, { - body: parts.topBody, - join: parts.topJoin, - left: parts.topLeft, - right: parts.topRight - }); -}; - -/** - * @typedef drawBorderJoin~parts - * @property {string} joinLeft - * @property {string} joinRight - * @property {string} joinBody - * @property {string} joinJoin - */ - -/** - * @param {number[]} columnSizeIndex - * @param {drawBorderJoin~parts} parts - * @returns {string} - */ -const drawBorderJoin = (columnSizeIndex, parts) => { - return drawBorder(columnSizeIndex, { - body: parts.joinBody, - join: parts.joinJoin, - left: parts.joinLeft, - right: parts.joinRight - }); -}; - -/** - * @typedef drawBorderBottom~parts - * @property {string} topLeft - * @property {string} topRight - * @property {string} topBody - * @property {string} topJoin - */ - -/** - * @param {number[]} columnSizeIndex - * @param {drawBorderBottom~parts} parts - * @returns {string} - */ -const drawBorderBottom = (columnSizeIndex, parts) => { - return drawBorder(columnSizeIndex, { - body: parts.bottomBody, - join: parts.bottomJoin, - left: parts.bottomLeft, - right: parts.bottomRight - }); -}; - -exports.drawBorder = drawBorder; -exports.drawBorderBottom = drawBorderBottom; -exports.drawBorderJoin = drawBorderJoin; -exports.drawBorderTop = drawBorderTop; \ No newline at end of file diff --git a/node_modules/table/dist/drawRow.js b/node_modules/table/dist/drawRow.js deleted file mode 100644 index 65547fb..0000000 --- a/node_modules/table/dist/drawRow.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -/** - * @typedef {Object} drawRow~border - * @property {string} bodyLeft - * @property {string} bodyRight - * @property {string} bodyJoin - */ - -/** - * @param {number[]} columns - * @param {drawRow~border} border - * @returns {string} - */ -exports.default = (columns, border) => { - return border.bodyLeft + columns.join(border.bodyJoin) + border.bodyRight + '\n'; -}; \ No newline at end of file diff --git a/node_modules/table/dist/drawTable.js b/node_modules/table/dist/drawTable.js deleted file mode 100644 index 5f71522..0000000 --- a/node_modules/table/dist/drawTable.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _drawBorder = require('./drawBorder'); - -var _drawRow = require('./drawRow'); - -var _drawRow2 = _interopRequireDefault(_drawRow); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @param {Array} rows - * @param {Object} border - * @param {Array} columnSizeIndex - * @param {Array} rowSpanIndex - * @param {Function} drawHorizontalLine - * @returns {string} - */ -exports.default = (rows, border, columnSizeIndex, rowSpanIndex, drawHorizontalLine) => { - let output; - let realRowIndex; - let rowHeight; - - const rowCount = rows.length; - - realRowIndex = 0; - - output = ''; - - if (drawHorizontalLine(realRowIndex, rowCount)) { - output += (0, _drawBorder.drawBorderTop)(columnSizeIndex, border); - } - - _lodash2.default.forEach(rows, (row, index0) => { - output += (0, _drawRow2.default)(row, border); - - if (!rowHeight) { - rowHeight = rowSpanIndex[realRowIndex]; - - realRowIndex++; - } - - rowHeight--; - - if (rowHeight === 0 && index0 !== rowCount - 1 && drawHorizontalLine(realRowIndex, rowCount)) { - output += (0, _drawBorder.drawBorderJoin)(columnSizeIndex, border); - } - }); - - if (drawHorizontalLine(realRowIndex, rowCount)) { - output += (0, _drawBorder.drawBorderBottom)(columnSizeIndex, border); - } - - return output; -}; \ No newline at end of file diff --git a/node_modules/table/dist/getBorderCharacters.js b/node_modules/table/dist/getBorderCharacters.js deleted file mode 100644 index 0a0f599..0000000 --- a/node_modules/table/dist/getBorderCharacters.js +++ /dev/null @@ -1,126 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -/* eslint-disable sort-keys */ - -/** - * @typedef border - * @property {string} topBody - * @property {string} topJoin - * @property {string} topLeft - * @property {string} topRight - * @property {string} bottomBody - * @property {string} bottomJoin - * @property {string} bottomLeft - * @property {string} bottomRight - * @property {string} bodyLeft - * @property {string} bodyRight - * @property {string} bodyJoin - * @property {string} joinBody - * @property {string} joinLeft - * @property {string} joinRight - * @property {string} joinJoin - */ - -/** - * @param {string} name - * @returns {border} - */ -exports.default = name => { - if (name === 'honeywell') { - return { - topBody: '═', - topJoin: '╤', - topLeft: '╔', - topRight: '╗', - - bottomBody: '═', - bottomJoin: '╧', - bottomLeft: '╚', - bottomRight: '╝', - - bodyLeft: '║', - bodyRight: '║', - bodyJoin: '│', - - joinBody: '─', - joinLeft: '╟', - joinRight: '╢', - joinJoin: '┼' - }; - } - - if (name === 'norc') { - return { - topBody: '─', - topJoin: '┬', - topLeft: '┌', - topRight: '┐', - - bottomBody: '─', - bottomJoin: '┴', - bottomLeft: '└', - bottomRight: '┘', - - bodyLeft: '│', - bodyRight: '│', - bodyJoin: '│', - - joinBody: '─', - joinLeft: '├', - joinRight: '┤', - joinJoin: '┼' - }; - } - - if (name === 'ramac') { - return { - topBody: '-', - topJoin: '+', - topLeft: '+', - topRight: '+', - - bottomBody: '-', - bottomJoin: '+', - bottomLeft: '+', - bottomRight: '+', - - bodyLeft: '|', - bodyRight: '|', - bodyJoin: '|', - - joinBody: '-', - joinLeft: '|', - joinRight: '|', - joinJoin: '|' - }; - } - - if (name === 'void') { - return { - topBody: '', - topJoin: '', - topLeft: '', - topRight: '', - - bottomBody: '', - bottomJoin: '', - bottomLeft: '', - bottomRight: '', - - bodyLeft: '', - bodyRight: '', - bodyJoin: '', - - joinBody: '', - joinLeft: '', - joinRight: '', - joinJoin: '' - }; - } - - throw new Error('Unknown border template "' + name + '".'); -}; \ No newline at end of file diff --git a/node_modules/table/dist/index.js b/node_modules/table/dist/index.js deleted file mode 100644 index 169eddf..0000000 --- a/node_modules/table/dist/index.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getBorderCharacters = exports.createStream = exports.table = undefined; - -var _table = require('./table'); - -var _table2 = _interopRequireDefault(_table); - -var _createStream = require('./createStream'); - -var _createStream2 = _interopRequireDefault(_createStream); - -var _getBorderCharacters = require('./getBorderCharacters'); - -var _getBorderCharacters2 = _interopRequireDefault(_getBorderCharacters); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.table = _table2.default; -exports.createStream = _createStream2.default; -exports.getBorderCharacters = _getBorderCharacters2.default; \ No newline at end of file diff --git a/node_modules/table/dist/makeConfig.js b/node_modules/table/dist/makeConfig.js deleted file mode 100644 index 43bf656..0000000 --- a/node_modules/table/dist/makeConfig.js +++ /dev/null @@ -1,99 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _getBorderCharacters = require('./getBorderCharacters'); - -var _getBorderCharacters2 = _interopRequireDefault(_getBorderCharacters); - -var _validateConfig = require('./validateConfig'); - -var _validateConfig2 = _interopRequireDefault(_validateConfig); - -var _calculateMaximumColumnWidthIndex = require('./calculateMaximumColumnWidthIndex'); - -var _calculateMaximumColumnWidthIndex2 = _interopRequireDefault(_calculateMaximumColumnWidthIndex); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Merges user provided border characters with the default border ("honeywell") characters. - * - * @param {Object} border - * @returns {Object} - */ -const makeBorder = function makeBorder() { - let border = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - return Object.assign({}, (0, _getBorderCharacters2.default)('honeywell'), border); -}; - -/** - * Creates a configuration for every column using default - * values for the missing configuration properties. - * - * @param {Array[]} rows - * @param {Object} columns - * @param {Object} columnDefault - * @returns {Object} - */ -const makeColumns = function makeColumns(rows) { - let columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - let columnDefault = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - const maximumColumnWidthIndex = (0, _calculateMaximumColumnWidthIndex2.default)(rows); - - _lodash2.default.times(rows[0].length, index => { - if (_lodash2.default.isUndefined(columns[index])) { - columns[index] = {}; - } - - columns[index] = _lodash2.default.assign({ - alignment: 'left', - paddingLeft: 1, - paddingRight: 1, - truncate: Infinity, - width: maximumColumnWidthIndex[index], - wrapWord: false - }, columnDefault, columns[index]); - }); - - return columns; -}; - -/** - * Makes a new configuration object out of the userConfig object - * using default values for the missing configuration properties. - * - * @param {Array[]} rows - * @param {Object} userConfig - * @returns {Object} - */ - -exports.default = function (rows) { - let userConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - (0, _validateConfig2.default)('config.json', userConfig); - - const config = _lodash2.default.cloneDeep(userConfig); - - config.border = makeBorder(config.border); - config.columns = makeColumns(rows, config.columns, config.columnDefault); - - if (!config.drawHorizontalLine) { - /** - * @returns {boolean} - */ - config.drawHorizontalLine = () => { - return true; - }; - } - - return config; -}; \ No newline at end of file diff --git a/node_modules/table/dist/makeStreamConfig.js b/node_modules/table/dist/makeStreamConfig.js deleted file mode 100644 index 479de35..0000000 --- a/node_modules/table/dist/makeStreamConfig.js +++ /dev/null @@ -1,107 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _getBorderCharacters = require('./getBorderCharacters'); - -var _getBorderCharacters2 = _interopRequireDefault(_getBorderCharacters); - -var _validateConfig = require('./validateConfig'); - -var _validateConfig2 = _interopRequireDefault(_validateConfig); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Merges user provided border characters with the default border ("honeywell") characters. - * - * @param {Object} border - * @returns {Object} - */ -const makeBorder = function makeBorder() { - let border = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - return Object.assign({}, (0, _getBorderCharacters2.default)('honeywell'), border); -}; - -/** - * Creates a configuration for every column using default - * values for the missing configuration properties. - * - * @param {number} columnCount - * @param {Object} columns - * @param {Object} columnDefault - * @returns {Object} - */ -const makeColumns = function makeColumns(columnCount) { - let columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - let columnDefault = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - _lodash2.default.times(columnCount, index => { - if (_lodash2.default.isUndefined(columns[index])) { - columns[index] = {}; - } - - columns[index] = Object.assign({ - alignment: 'left', - paddingLeft: 1, - paddingRight: 1, - truncate: Infinity, - wrapWord: false - }, columnDefault, columns[index]); - }); - - return columns; -}; - -/** - * @typedef {Object} columnConfig - * @property {string} alignment - * @property {number} width - * @property {number} truncate - * @property {number} paddingLeft - * @property {number} paddingRight - */ - -/** - * @typedef {Object} streamConfig - * @property {columnConfig} columnDefault - * @property {Object} border - * @property {columnConfig[]} - * @property {number} columnCount Number of columns in the table (required). - */ - -/** - * Makes a new configuration object out of the userConfig object - * using default values for the missing configuration properties. - * - * @param {streamConfig} userConfig - * @returns {Object} - */ - -exports.default = function () { - let userConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - (0, _validateConfig2.default)('streamConfig.json', userConfig); - - const config = _lodash2.default.cloneDeep(userConfig); - - if (!config.columnDefault || !config.columnDefault.width) { - throw new Error('Must provide config.columnDefault.width when creating a stream.'); - } - - if (!config.columnCount) { - throw new Error('Must provide config.columnCount.'); - } - - config.border = makeBorder(config.border); - config.columns = makeColumns(config.columnCount, config.columns, config.columnDefault); - - return config; -}; \ No newline at end of file diff --git a/node_modules/table/dist/mapDataUsingRowHeightIndex.js b/node_modules/table/dist/mapDataUsingRowHeightIndex.js deleted file mode 100644 index bb312e6..0000000 --- a/node_modules/table/dist/mapDataUsingRowHeightIndex.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _wrapString = require('./wrapString'); - -var _wrapString2 = _interopRequireDefault(_wrapString); - -var _wrapWord = require('./wrapWord'); - -var _wrapWord2 = _interopRequireDefault(_wrapWord); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @param {Array} unmappedRows - * @param {number[]} rowHeightIndex - * @param {Object} config - * @returns {Array} - */ -exports.default = (unmappedRows, rowHeightIndex, config) => { - const tableWidth = unmappedRows[0].length; - - const mappedRows = unmappedRows.map((cells, index0) => { - const rowHeight = _lodash2.default.times(rowHeightIndex[index0], () => { - return _lodash2.default.fill(Array(tableWidth), ''); - }); - - // rowHeight - // [{row index within rowSaw; index2}] - // [{cell index within a virtual row; index1}] - - _lodash2.default.forEach(cells, (value, index1) => { - let chunkedValue; - - if (config.columns[index1].wrapWord) { - chunkedValue = (0, _wrapWord2.default)(value, config.columns[index1].width); - } else { - chunkedValue = (0, _wrapString2.default)(value, config.columns[index1].width); - } - - _lodash2.default.forEach(chunkedValue, (part, index2) => { - rowHeight[index2][index1] = part; - }); - }); - - return rowHeight; - }); - - return _lodash2.default.flatten(mappedRows); -}; \ No newline at end of file diff --git a/node_modules/table/dist/padTableData.js b/node_modules/table/dist/padTableData.js deleted file mode 100644 index 92a1126..0000000 --- a/node_modules/table/dist/padTableData.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @param {table~row[]} rows - * @param {Object} config - * @returns {table~row[]} - */ -exports.default = (rows, config) => { - return _lodash2.default.map(rows, cells => { - return _lodash2.default.map(cells, (value, index1) => { - const column = config.columns[index1]; - - return _lodash2.default.repeat(' ', column.paddingLeft) + value + _lodash2.default.repeat(' ', column.paddingRight); - }); - }); -}; \ No newline at end of file diff --git a/node_modules/table/dist/schemas/config.json b/node_modules/table/dist/schemas/config.json deleted file mode 100644 index 3607418..0000000 --- a/node_modules/table/dist/schemas/config.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "$id": "config.json", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "properties": { - "border": { - "$ref": "#/definitions/borders" - }, - "columns": { - "$ref": "#/definitions/columns" - }, - "columnDefault": { - "$ref": "#/definitions/column" - }, - "drawHorizontalLine": { - "typeof": "function" - } - }, - "additionalProperties": false, - "definitions": { - "columns": { - "type": "object", - "patternProperties": { - "^[0-9]+$": { - "$ref": "#/definitions/column" - } - }, - "additionalProperties": false - }, - "column": { - "type": "object", - "properties": { - "alignment": { - "type": "string", - "enum": [ - "left", - "right", - "center" - ] - }, - "width": { - "type": "number" - }, - "wrapWord": { - "type": "boolean" - }, - "truncate": { - "type": "number" - }, - "paddingLeft": { - "type": "number" - }, - "paddingRight": { - "type": "number" - } - }, - "additionalProperties": false - }, - "borders": { - "type": "object", - "properties": { - "topBody": { - "$ref": "#/definitions/border" - }, - "topJoin": { - "$ref": "#/definitions/border" - }, - "topLeft": { - "$ref": "#/definitions/border" - }, - "topRight": { - "$ref": "#/definitions/border" - }, - "bottomBody": { - "$ref": "#/definitions/border" - }, - "bottomJoin": { - "$ref": "#/definitions/border" - }, - "bottomLeft": { - "$ref": "#/definitions/border" - }, - "bottomRight": { - "$ref": "#/definitions/border" - }, - "bodyLeft": { - "$ref": "#/definitions/border" - }, - "bodyRight": { - "$ref": "#/definitions/border" - }, - "bodyJoin": { - "$ref": "#/definitions/border" - }, - "joinBody": { - "$ref": "#/definitions/border" - }, - "joinLeft": { - "$ref": "#/definitions/border" - }, - "joinRight": { - "$ref": "#/definitions/border" - }, - "joinJoin": { - "$ref": "#/definitions/border" - } - }, - "additionalProperties": false - }, - "border": { - "type": "string" - } - } -} diff --git a/node_modules/table/dist/schemas/streamConfig.json b/node_modules/table/dist/schemas/streamConfig.json deleted file mode 100644 index d8402a6..0000000 --- a/node_modules/table/dist/schemas/streamConfig.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "$id": "streamConfig.json", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "properties": { - "border": { - "$ref": "#/definitions/borders" - }, - "columns": { - "$ref": "#/definitions/columns" - }, - "columnDefault": { - "$ref": "#/definitions/column" - }, - "columnCount": { - "type": "number" - } - }, - "additionalProperties": false, - "definitions": { - "columns": { - "type": "object", - "patternProperties": { - "^[0-9]+$": { - "$ref": "#/definitions/column" - } - }, - "additionalProperties": false - }, - "column": { - "type": "object", - "properties": { - "alignment": { - "type": "string", - "enum": [ - "left", - "right", - "center" - ] - }, - "width": { - "type": "number" - }, - "wrapWord": { - "type": "boolean" - }, - "truncate": { - "type": "number" - }, - "paddingLeft": { - "type": "number" - }, - "paddingRight": { - "type": "number" - } - }, - "additionalProperties": false - }, - "borders": { - "type": "object", - "properties": { - "topBody": { - "$ref": "#/definitions/border" - }, - "topJoin": { - "$ref": "#/definitions/border" - }, - "topLeft": { - "$ref": "#/definitions/border" - }, - "topRight": { - "$ref": "#/definitions/border" - }, - "bottomBody": { - "$ref": "#/definitions/border" - }, - "bottomJoin": { - "$ref": "#/definitions/border" - }, - "bottomLeft": { - "$ref": "#/definitions/border" - }, - "bottomRight": { - "$ref": "#/definitions/border" - }, - "bodyLeft": { - "$ref": "#/definitions/border" - }, - "bodyRight": { - "$ref": "#/definitions/border" - }, - "bodyJoin": { - "$ref": "#/definitions/border" - }, - "joinBody": { - "$ref": "#/definitions/border" - }, - "joinLeft": { - "$ref": "#/definitions/border" - }, - "joinRight": { - "$ref": "#/definitions/border" - }, - "joinJoin": { - "$ref": "#/definitions/border" - } - }, - "additionalProperties": false - }, - "border": { - "type": "string" - } - } -} diff --git a/node_modules/table/dist/stringifyTableData.js b/node_modules/table/dist/stringifyTableData.js deleted file mode 100644 index 46a8b94..0000000 --- a/node_modules/table/dist/stringifyTableData.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -/** - * Casts all cell values to a string. - * - * @param {table~row[]} rows - * @returns {table~row[]} - */ -exports.default = rows => { - return rows.map(cells => { - return cells.map(String); - }); -}; \ No newline at end of file diff --git a/node_modules/table/dist/table.js b/node_modules/table/dist/table.js deleted file mode 100644 index fe8c3cf..0000000 --- a/node_modules/table/dist/table.js +++ /dev/null @@ -1,133 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _drawTable = require('./drawTable'); - -var _drawTable2 = _interopRequireDefault(_drawTable); - -var _calculateCellWidthIndex = require('./calculateCellWidthIndex'); - -var _calculateCellWidthIndex2 = _interopRequireDefault(_calculateCellWidthIndex); - -var _makeConfig = require('./makeConfig'); - -var _makeConfig2 = _interopRequireDefault(_makeConfig); - -var _calculateRowHeightIndex = require('./calculateRowHeightIndex'); - -var _calculateRowHeightIndex2 = _interopRequireDefault(_calculateRowHeightIndex); - -var _mapDataUsingRowHeightIndex = require('./mapDataUsingRowHeightIndex'); - -var _mapDataUsingRowHeightIndex2 = _interopRequireDefault(_mapDataUsingRowHeightIndex); - -var _alignTableData = require('./alignTableData'); - -var _alignTableData2 = _interopRequireDefault(_alignTableData); - -var _padTableData = require('./padTableData'); - -var _padTableData2 = _interopRequireDefault(_padTableData); - -var _validateTableData = require('./validateTableData'); - -var _validateTableData2 = _interopRequireDefault(_validateTableData); - -var _stringifyTableData = require('./stringifyTableData'); - -var _stringifyTableData2 = _interopRequireDefault(_stringifyTableData); - -var _truncateTableData = require('./truncateTableData'); - -var _truncateTableData2 = _interopRequireDefault(_truncateTableData); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @typedef {string} table~cell - */ - -/** - * @typedef {table~cell[]} table~row - */ - -/** - * @typedef {Object} table~columns - * @property {string} alignment Cell content alignment (enum: left, center, right) (default: left). - * @property {number} width Column width (default: auto). - * @property {number} truncate Number of characters are which the content will be truncated (default: Infinity). - * @property {number} paddingLeft Cell content padding width left (default: 1). - * @property {number} paddingRight Cell content padding width right (default: 1). - */ - -/** - * @typedef {Object} table~border - * @property {string} topBody - * @property {string} topJoin - * @property {string} topLeft - * @property {string} topRight - * @property {string} bottomBody - * @property {string} bottomJoin - * @property {string} bottomLeft - * @property {string} bottomRight - * @property {string} bodyLeft - * @property {string} bodyRight - * @property {string} bodyJoin - * @property {string} joinBody - * @property {string} joinLeft - * @property {string} joinRight - * @property {string} joinJoin - */ - -/** - * Used to tell whether to draw a horizontal line. - * This callback is called for each non-content line of the table. - * The default behavior is to always return true. - * - * @typedef {Function} drawHorizontalLine - * @param {number} index - * @param {number} size - * @returns {boolean} - */ - -/** - * @typedef {Object} table~config - * @property {table~border} border - * @property {table~columns[]} columns Column specific configuration. - * @property {table~columns} columnDefault Default values for all columns. Column specific settings overwrite the default values. - * @property {table~drawHorizontalLine} drawHorizontalLine - */ - -/** - * Generates a text table. - * - * @param {table~row[]} data - * @param {table~config} userConfig - * @returns {string} - */ -exports.default = function (data) { - let userConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - let rows; - - (0, _validateTableData2.default)(data); - - rows = (0, _stringifyTableData2.default)(data); - - const config = (0, _makeConfig2.default)(rows, userConfig); - - rows = (0, _truncateTableData2.default)(data, config); - - const rowHeightIndex = (0, _calculateRowHeightIndex2.default)(rows, config); - - rows = (0, _mapDataUsingRowHeightIndex2.default)(rows, rowHeightIndex, config); - rows = (0, _alignTableData2.default)(rows, config); - rows = (0, _padTableData2.default)(rows, config); - - const cellWidthIndex = (0, _calculateCellWidthIndex2.default)(rows[0]); - - return (0, _drawTable2.default)(rows, config.border, cellWidthIndex, rowHeightIndex, config.drawHorizontalLine); -}; \ No newline at end of file diff --git a/node_modules/table/dist/truncateTableData.js b/node_modules/table/dist/truncateTableData.js deleted file mode 100644 index 16b6b94..0000000 --- a/node_modules/table/dist/truncateTableData.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @todo Make it work with ASCII content. - * @param {table~row[]} rows - * @param {Object} config - * @returns {table~row[]} - */ -exports.default = (rows, config) => { - return _lodash2.default.map(rows, cells => { - return _lodash2.default.map(cells, (content, index) => { - return _lodash2.default.truncate(content, { - length: config.columns[index].truncate - }); - }); - }); -}; \ No newline at end of file diff --git a/node_modules/table/dist/validateConfig.js b/node_modules/table/dist/validateConfig.js deleted file mode 100644 index 3ea3dde..0000000 --- a/node_modules/table/dist/validateConfig.js +++ /dev/null @@ -1,753 +0,0 @@ -'use strict'; -var equal = require('ajv/lib/compile/equal'); -var validate = (function() { - var pattern0 = new RegExp('^[0-9]+$'); - var refVal = []; - var refVal1 = (function() { - var pattern0 = new RegExp('^[0-9]+$'); - return function validate(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; - var vErrors = null; - var errors = 0; - if (rootData === undefined) rootData = data; - if ((data && typeof data === "object" && !Array.isArray(data))) { - var errs__0 = errors; - var valid1 = true; - for (var key0 in data) { - var isAdditional0 = !(false || validate.schema.properties[key0]); - if (isAdditional0) { - valid1 = false; - var err = { - keyword: 'additionalProperties', - dataPath: (dataPath || '') + "", - schemaPath: '#/additionalProperties', - params: { - additionalProperty: '' + key0 + '' - }, - message: 'should NOT have additional properties' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - } - if (data.topBody !== undefined) { - var errs_1 = errors; - if (!refVal2(data.topBody, (dataPath || '') + '.topBody', data, 'topBody', rootData)) { - if (vErrors === null) vErrors = refVal2.errors; - else vErrors = vErrors.concat(refVal2.errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.topJoin !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.topJoin, (dataPath || '') + '.topJoin', data, 'topJoin', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.topLeft !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.topLeft, (dataPath || '') + '.topLeft', data, 'topLeft', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.topRight !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.topRight, (dataPath || '') + '.topRight', data, 'topRight', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bottomBody !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bottomBody, (dataPath || '') + '.bottomBody', data, 'bottomBody', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bottomJoin !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bottomJoin, (dataPath || '') + '.bottomJoin', data, 'bottomJoin', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bottomLeft !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bottomLeft, (dataPath || '') + '.bottomLeft', data, 'bottomLeft', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bottomRight !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bottomRight, (dataPath || '') + '.bottomRight', data, 'bottomRight', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bodyLeft !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bodyLeft, (dataPath || '') + '.bodyLeft', data, 'bodyLeft', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bodyRight !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bodyRight, (dataPath || '') + '.bodyRight', data, 'bodyRight', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bodyJoin !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bodyJoin, (dataPath || '') + '.bodyJoin', data, 'bodyJoin', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.joinBody !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.joinBody, (dataPath || '') + '.joinBody', data, 'joinBody', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.joinLeft !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.joinLeft, (dataPath || '') + '.joinLeft', data, 'joinLeft', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.joinRight !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.joinRight, (dataPath || '') + '.joinRight', data, 'joinRight', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.joinJoin !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.joinJoin, (dataPath || '') + '.joinJoin', data, 'joinJoin', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - } else { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + "", - schemaPath: '#/type', - params: { - type: 'object' - }, - message: 'should be object' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - validate.errors = vErrors; - return errors === 0; - }; - })(); - refVal1.schema = { - "type": "object", - "properties": { - "topBody": { - "$ref": "#/definitions/border" - }, - "topJoin": { - "$ref": "#/definitions/border" - }, - "topLeft": { - "$ref": "#/definitions/border" - }, - "topRight": { - "$ref": "#/definitions/border" - }, - "bottomBody": { - "$ref": "#/definitions/border" - }, - "bottomJoin": { - "$ref": "#/definitions/border" - }, - "bottomLeft": { - "$ref": "#/definitions/border" - }, - "bottomRight": { - "$ref": "#/definitions/border" - }, - "bodyLeft": { - "$ref": "#/definitions/border" - }, - "bodyRight": { - "$ref": "#/definitions/border" - }, - "bodyJoin": { - "$ref": "#/definitions/border" - }, - "joinBody": { - "$ref": "#/definitions/border" - }, - "joinLeft": { - "$ref": "#/definitions/border" - }, - "joinRight": { - "$ref": "#/definitions/border" - }, - "joinJoin": { - "$ref": "#/definitions/border" - } - }, - "additionalProperties": false - }; - refVal1.errors = null; - refVal[1] = refVal1; - var refVal2 = (function() { - var pattern0 = new RegExp('^[0-9]+$'); - return function validate(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; - var vErrors = null; - var errors = 0; - if (typeof data !== "string") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + "", - schemaPath: '#/type', - params: { - type: 'string' - }, - message: 'should be string' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - validate.errors = vErrors; - return errors === 0; - }; - })(); - refVal2.schema = { - "type": "string" - }; - refVal2.errors = null; - refVal[2] = refVal2; - var refVal3 = (function() { - var pattern0 = new RegExp('^[0-9]+$'); - return function validate(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; - var vErrors = null; - var errors = 0; - if (rootData === undefined) rootData = data; - if ((data && typeof data === "object" && !Array.isArray(data))) { - var errs__0 = errors; - var valid1 = true; - for (var key0 in data) { - var isAdditional0 = !(false || pattern0.test(key0)); - if (isAdditional0) { - valid1 = false; - var err = { - keyword: 'additionalProperties', - dataPath: (dataPath || '') + "", - schemaPath: '#/additionalProperties', - params: { - additionalProperty: '' + key0 + '' - }, - message: 'should NOT have additional properties' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - } - for (var key0 in data) { - if (pattern0.test(key0)) { - var errs_1 = errors; - if (!refVal4(data[key0], (dataPath || '') + '[\'' + key0 + '\']', data, key0, rootData)) { - if (vErrors === null) vErrors = refVal4.errors; - else vErrors = vErrors.concat(refVal4.errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - } - } else { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + "", - schemaPath: '#/type', - params: { - type: 'object' - }, - message: 'should be object' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - validate.errors = vErrors; - return errors === 0; - }; - })(); - refVal3.schema = { - "type": "object", - "patternProperties": { - "^[0-9]+$": { - "$ref": "#/definitions/column" - } - }, - "additionalProperties": false - }; - refVal3.errors = null; - refVal[3] = refVal3; - var refVal4 = (function() { - var pattern0 = new RegExp('^[0-9]+$'); - return function validate(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; - var vErrors = null; - var errors = 0; - if ((data && typeof data === "object" && !Array.isArray(data))) { - var errs__0 = errors; - var valid1 = true; - for (var key0 in data) { - var isAdditional0 = !(false || validate.schema.properties[key0]); - if (isAdditional0) { - valid1 = false; - var err = { - keyword: 'additionalProperties', - dataPath: (dataPath || '') + "", - schemaPath: '#/additionalProperties', - params: { - additionalProperty: '' + key0 + '' - }, - message: 'should NOT have additional properties' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - } - var data1 = data.alignment; - if (data1 !== undefined) { - var errs_1 = errors; - if (typeof data1 !== "string") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.alignment', - schemaPath: '#/properties/alignment/type', - params: { - type: 'string' - }, - message: 'should be string' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var schema1 = validate.schema.properties.alignment.enum; - var valid1; - valid1 = false; - for (var i1 = 0; i1 < schema1.length; i1++) - if (equal(data1, schema1[i1])) { - valid1 = true; - break; - } - if (!valid1) { - var err = { - keyword: 'enum', - dataPath: (dataPath || '') + '.alignment', - schemaPath: '#/properties/alignment/enum', - params: { - allowedValues: schema1 - }, - message: 'should be equal to one of the allowed values' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - if (data.width !== undefined) { - var errs_1 = errors; - if (typeof data.width !== "number") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.width', - schemaPath: '#/properties/width/type', - params: { - type: 'number' - }, - message: 'should be number' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - if (data.wrapWord !== undefined) { - var errs_1 = errors; - if (typeof data.wrapWord !== "boolean") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.wrapWord', - schemaPath: '#/properties/wrapWord/type', - params: { - type: 'boolean' - }, - message: 'should be boolean' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - if (data.truncate !== undefined) { - var errs_1 = errors; - if (typeof data.truncate !== "number") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.truncate', - schemaPath: '#/properties/truncate/type', - params: { - type: 'number' - }, - message: 'should be number' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - if (data.paddingLeft !== undefined) { - var errs_1 = errors; - if (typeof data.paddingLeft !== "number") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.paddingLeft', - schemaPath: '#/properties/paddingLeft/type', - params: { - type: 'number' - }, - message: 'should be number' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - if (data.paddingRight !== undefined) { - var errs_1 = errors; - if (typeof data.paddingRight !== "number") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.paddingRight', - schemaPath: '#/properties/paddingRight/type', - params: { - type: 'number' - }, - message: 'should be number' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - } else { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + "", - schemaPath: '#/type', - params: { - type: 'object' - }, - message: 'should be object' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - validate.errors = vErrors; - return errors === 0; - }; - })(); - refVal4.schema = { - "type": "object", - "properties": { - "alignment": { - "type": "string", - "enum": ["left", "right", "center"] - }, - "width": { - "type": "number" - }, - "wrapWord": { - "type": "boolean" - }, - "truncate": { - "type": "number" - }, - "paddingLeft": { - "type": "number" - }, - "paddingRight": { - "type": "number" - } - }, - "additionalProperties": false - }; - refVal4.errors = null; - refVal[4] = refVal4; - return function validate(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; /*# sourceURL=config.json */ - var vErrors = null; - var errors = 0; - if (rootData === undefined) rootData = data; - if ((data && typeof data === "object" && !Array.isArray(data))) { - var errs__0 = errors; - var valid1 = true; - for (var key0 in data) { - var isAdditional0 = !(false || key0 == 'border' || key0 == 'columns' || key0 == 'columnDefault' || key0 == 'drawHorizontalLine'); - if (isAdditional0) { - valid1 = false; - var err = { - keyword: 'additionalProperties', - dataPath: (dataPath || '') + "", - schemaPath: '#/additionalProperties', - params: { - additionalProperty: '' + key0 + '' - }, - message: 'should NOT have additional properties' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - } - if (data.border !== undefined) { - var errs_1 = errors; - if (!refVal1(data.border, (dataPath || '') + '.border', data, 'border', rootData)) { - if (vErrors === null) vErrors = refVal1.errors; - else vErrors = vErrors.concat(refVal1.errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.columns !== undefined) { - var errs_1 = errors; - if (!refVal3(data.columns, (dataPath || '') + '.columns', data, 'columns', rootData)) { - if (vErrors === null) vErrors = refVal3.errors; - else vErrors = vErrors.concat(refVal3.errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.columnDefault !== undefined) { - var errs_1 = errors; - if (!refVal[4](data.columnDefault, (dataPath || '') + '.columnDefault', data, 'columnDefault', rootData)) { - if (vErrors === null) vErrors = refVal[4].errors; - else vErrors = vErrors.concat(refVal[4].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.drawHorizontalLine !== undefined) { - var errs_1 = errors; - var errs__1 = errors; - var valid1; - valid1 = typeof data.drawHorizontalLine == "function"; - if (!valid1) { - if (errs__1 == errors) { - var err = { - keyword: 'typeof', - dataPath: (dataPath || '') + '.drawHorizontalLine', - schemaPath: '#/properties/drawHorizontalLine/typeof', - params: { - keyword: 'typeof' - }, - message: 'should pass "typeof" keyword validation' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } else { - for (var i1 = errs__1; i1 < errors; i1++) { - var ruleErr1 = vErrors[i1]; - if (ruleErr1.dataPath === undefined) ruleErr1.dataPath = (dataPath || '') + '.drawHorizontalLine'; - if (ruleErr1.schemaPath === undefined) { - ruleErr1.schemaPath = "#/properties/drawHorizontalLine/typeof"; - } - } - } - } - var valid1 = errors === errs_1; - } - } else { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + "", - schemaPath: '#/type', - params: { - type: 'object' - }, - message: 'should be object' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - validate.errors = vErrors; - return errors === 0; - }; -})(); -validate.schema = { - "$id": "config.json", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "properties": { - "border": { - "$ref": "#/definitions/borders" - }, - "columns": { - "$ref": "#/definitions/columns" - }, - "columnDefault": { - "$ref": "#/definitions/column" - }, - "drawHorizontalLine": { - "typeof": "function" - } - }, - "additionalProperties": false, - "definitions": { - "columns": { - "type": "object", - "patternProperties": { - "^[0-9]+$": { - "$ref": "#/definitions/column" - } - }, - "additionalProperties": false - }, - "column": { - "type": "object", - "properties": { - "alignment": { - "type": "string", - "enum": ["left", "right", "center"] - }, - "width": { - "type": "number" - }, - "wrapWord": { - "type": "boolean" - }, - "truncate": { - "type": "number" - }, - "paddingLeft": { - "type": "number" - }, - "paddingRight": { - "type": "number" - } - }, - "additionalProperties": false - }, - "borders": { - "type": "object", - "properties": { - "topBody": { - "$ref": "#/definitions/border" - }, - "topJoin": { - "$ref": "#/definitions/border" - }, - "topLeft": { - "$ref": "#/definitions/border" - }, - "topRight": { - "$ref": "#/definitions/border" - }, - "bottomBody": { - "$ref": "#/definitions/border" - }, - "bottomJoin": { - "$ref": "#/definitions/border" - }, - "bottomLeft": { - "$ref": "#/definitions/border" - }, - "bottomRight": { - "$ref": "#/definitions/border" - }, - "bodyLeft": { - "$ref": "#/definitions/border" - }, - "bodyRight": { - "$ref": "#/definitions/border" - }, - "bodyJoin": { - "$ref": "#/definitions/border" - }, - "joinBody": { - "$ref": "#/definitions/border" - }, - "joinLeft": { - "$ref": "#/definitions/border" - }, - "joinRight": { - "$ref": "#/definitions/border" - }, - "joinJoin": { - "$ref": "#/definitions/border" - } - }, - "additionalProperties": false - }, - "border": { - "type": "string" - } - } -}; -validate.errors = null; -module.exports = validate; \ No newline at end of file diff --git a/node_modules/table/dist/validateStreamConfig.js b/node_modules/table/dist/validateStreamConfig.js deleted file mode 100644 index 05c4b04..0000000 --- a/node_modules/table/dist/validateStreamConfig.js +++ /dev/null @@ -1,740 +0,0 @@ -'use strict'; -var equal = require('ajv/lib/compile/equal'); -var validate = (function() { - var pattern0 = new RegExp('^[0-9]+$'); - var refVal = []; - var refVal1 = (function() { - var pattern0 = new RegExp('^[0-9]+$'); - return function validate(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; - var vErrors = null; - var errors = 0; - if (rootData === undefined) rootData = data; - if ((data && typeof data === "object" && !Array.isArray(data))) { - var errs__0 = errors; - var valid1 = true; - for (var key0 in data) { - var isAdditional0 = !(false || validate.schema.properties[key0]); - if (isAdditional0) { - valid1 = false; - var err = { - keyword: 'additionalProperties', - dataPath: (dataPath || '') + "", - schemaPath: '#/additionalProperties', - params: { - additionalProperty: '' + key0 + '' - }, - message: 'should NOT have additional properties' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - } - if (data.topBody !== undefined) { - var errs_1 = errors; - if (!refVal2(data.topBody, (dataPath || '') + '.topBody', data, 'topBody', rootData)) { - if (vErrors === null) vErrors = refVal2.errors; - else vErrors = vErrors.concat(refVal2.errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.topJoin !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.topJoin, (dataPath || '') + '.topJoin', data, 'topJoin', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.topLeft !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.topLeft, (dataPath || '') + '.topLeft', data, 'topLeft', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.topRight !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.topRight, (dataPath || '') + '.topRight', data, 'topRight', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bottomBody !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bottomBody, (dataPath || '') + '.bottomBody', data, 'bottomBody', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bottomJoin !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bottomJoin, (dataPath || '') + '.bottomJoin', data, 'bottomJoin', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bottomLeft !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bottomLeft, (dataPath || '') + '.bottomLeft', data, 'bottomLeft', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bottomRight !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bottomRight, (dataPath || '') + '.bottomRight', data, 'bottomRight', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bodyLeft !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bodyLeft, (dataPath || '') + '.bodyLeft', data, 'bodyLeft', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bodyRight !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bodyRight, (dataPath || '') + '.bodyRight', data, 'bodyRight', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.bodyJoin !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.bodyJoin, (dataPath || '') + '.bodyJoin', data, 'bodyJoin', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.joinBody !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.joinBody, (dataPath || '') + '.joinBody', data, 'joinBody', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.joinLeft !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.joinLeft, (dataPath || '') + '.joinLeft', data, 'joinLeft', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.joinRight !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.joinRight, (dataPath || '') + '.joinRight', data, 'joinRight', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.joinJoin !== undefined) { - var errs_1 = errors; - if (!refVal[2](data.joinJoin, (dataPath || '') + '.joinJoin', data, 'joinJoin', rootData)) { - if (vErrors === null) vErrors = refVal[2].errors; - else vErrors = vErrors.concat(refVal[2].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - } else { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + "", - schemaPath: '#/type', - params: { - type: 'object' - }, - message: 'should be object' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - validate.errors = vErrors; - return errors === 0; - }; - })(); - refVal1.schema = { - "type": "object", - "properties": { - "topBody": { - "$ref": "#/definitions/border" - }, - "topJoin": { - "$ref": "#/definitions/border" - }, - "topLeft": { - "$ref": "#/definitions/border" - }, - "topRight": { - "$ref": "#/definitions/border" - }, - "bottomBody": { - "$ref": "#/definitions/border" - }, - "bottomJoin": { - "$ref": "#/definitions/border" - }, - "bottomLeft": { - "$ref": "#/definitions/border" - }, - "bottomRight": { - "$ref": "#/definitions/border" - }, - "bodyLeft": { - "$ref": "#/definitions/border" - }, - "bodyRight": { - "$ref": "#/definitions/border" - }, - "bodyJoin": { - "$ref": "#/definitions/border" - }, - "joinBody": { - "$ref": "#/definitions/border" - }, - "joinLeft": { - "$ref": "#/definitions/border" - }, - "joinRight": { - "$ref": "#/definitions/border" - }, - "joinJoin": { - "$ref": "#/definitions/border" - } - }, - "additionalProperties": false - }; - refVal1.errors = null; - refVal[1] = refVal1; - var refVal2 = (function() { - var pattern0 = new RegExp('^[0-9]+$'); - return function validate(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; - var vErrors = null; - var errors = 0; - if (typeof data !== "string") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + "", - schemaPath: '#/type', - params: { - type: 'string' - }, - message: 'should be string' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - validate.errors = vErrors; - return errors === 0; - }; - })(); - refVal2.schema = { - "type": "string" - }; - refVal2.errors = null; - refVal[2] = refVal2; - var refVal3 = (function() { - var pattern0 = new RegExp('^[0-9]+$'); - return function validate(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; - var vErrors = null; - var errors = 0; - if (rootData === undefined) rootData = data; - if ((data && typeof data === "object" && !Array.isArray(data))) { - var errs__0 = errors; - var valid1 = true; - for (var key0 in data) { - var isAdditional0 = !(false || pattern0.test(key0)); - if (isAdditional0) { - valid1 = false; - var err = { - keyword: 'additionalProperties', - dataPath: (dataPath || '') + "", - schemaPath: '#/additionalProperties', - params: { - additionalProperty: '' + key0 + '' - }, - message: 'should NOT have additional properties' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - } - for (var key0 in data) { - if (pattern0.test(key0)) { - var errs_1 = errors; - if (!refVal4(data[key0], (dataPath || '') + '[\'' + key0 + '\']', data, key0, rootData)) { - if (vErrors === null) vErrors = refVal4.errors; - else vErrors = vErrors.concat(refVal4.errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - } - } else { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + "", - schemaPath: '#/type', - params: { - type: 'object' - }, - message: 'should be object' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - validate.errors = vErrors; - return errors === 0; - }; - })(); - refVal3.schema = { - "type": "object", - "patternProperties": { - "^[0-9]+$": { - "$ref": "#/definitions/column" - } - }, - "additionalProperties": false - }; - refVal3.errors = null; - refVal[3] = refVal3; - var refVal4 = (function() { - var pattern0 = new RegExp('^[0-9]+$'); - return function validate(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; - var vErrors = null; - var errors = 0; - if ((data && typeof data === "object" && !Array.isArray(data))) { - var errs__0 = errors; - var valid1 = true; - for (var key0 in data) { - var isAdditional0 = !(false || validate.schema.properties[key0]); - if (isAdditional0) { - valid1 = false; - var err = { - keyword: 'additionalProperties', - dataPath: (dataPath || '') + "", - schemaPath: '#/additionalProperties', - params: { - additionalProperty: '' + key0 + '' - }, - message: 'should NOT have additional properties' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - } - var data1 = data.alignment; - if (data1 !== undefined) { - var errs_1 = errors; - if (typeof data1 !== "string") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.alignment', - schemaPath: '#/properties/alignment/type', - params: { - type: 'string' - }, - message: 'should be string' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var schema1 = validate.schema.properties.alignment.enum; - var valid1; - valid1 = false; - for (var i1 = 0; i1 < schema1.length; i1++) - if (equal(data1, schema1[i1])) { - valid1 = true; - break; - } - if (!valid1) { - var err = { - keyword: 'enum', - dataPath: (dataPath || '') + '.alignment', - schemaPath: '#/properties/alignment/enum', - params: { - allowedValues: schema1 - }, - message: 'should be equal to one of the allowed values' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - if (data.width !== undefined) { - var errs_1 = errors; - if (typeof data.width !== "number") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.width', - schemaPath: '#/properties/width/type', - params: { - type: 'number' - }, - message: 'should be number' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - if (data.wrapWord !== undefined) { - var errs_1 = errors; - if (typeof data.wrapWord !== "boolean") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.wrapWord', - schemaPath: '#/properties/wrapWord/type', - params: { - type: 'boolean' - }, - message: 'should be boolean' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - if (data.truncate !== undefined) { - var errs_1 = errors; - if (typeof data.truncate !== "number") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.truncate', - schemaPath: '#/properties/truncate/type', - params: { - type: 'number' - }, - message: 'should be number' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - if (data.paddingLeft !== undefined) { - var errs_1 = errors; - if (typeof data.paddingLeft !== "number") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.paddingLeft', - schemaPath: '#/properties/paddingLeft/type', - params: { - type: 'number' - }, - message: 'should be number' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - if (data.paddingRight !== undefined) { - var errs_1 = errors; - if (typeof data.paddingRight !== "number") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.paddingRight', - schemaPath: '#/properties/paddingRight/type', - params: { - type: 'number' - }, - message: 'should be number' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - } else { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + "", - schemaPath: '#/type', - params: { - type: 'object' - }, - message: 'should be object' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - validate.errors = vErrors; - return errors === 0; - }; - })(); - refVal4.schema = { - "type": "object", - "properties": { - "alignment": { - "type": "string", - "enum": ["left", "right", "center"] - }, - "width": { - "type": "number" - }, - "wrapWord": { - "type": "boolean" - }, - "truncate": { - "type": "number" - }, - "paddingLeft": { - "type": "number" - }, - "paddingRight": { - "type": "number" - } - }, - "additionalProperties": false - }; - refVal4.errors = null; - refVal[4] = refVal4; - return function validate(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; /*# sourceURL=streamConfig.json */ - var vErrors = null; - var errors = 0; - if (rootData === undefined) rootData = data; - if ((data && typeof data === "object" && !Array.isArray(data))) { - var errs__0 = errors; - var valid1 = true; - for (var key0 in data) { - var isAdditional0 = !(false || key0 == 'border' || key0 == 'columns' || key0 == 'columnDefault' || key0 == 'columnCount'); - if (isAdditional0) { - valid1 = false; - var err = { - keyword: 'additionalProperties', - dataPath: (dataPath || '') + "", - schemaPath: '#/additionalProperties', - params: { - additionalProperty: '' + key0 + '' - }, - message: 'should NOT have additional properties' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - } - if (data.border !== undefined) { - var errs_1 = errors; - if (!refVal1(data.border, (dataPath || '') + '.border', data, 'border', rootData)) { - if (vErrors === null) vErrors = refVal1.errors; - else vErrors = vErrors.concat(refVal1.errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.columns !== undefined) { - var errs_1 = errors; - if (!refVal3(data.columns, (dataPath || '') + '.columns', data, 'columns', rootData)) { - if (vErrors === null) vErrors = refVal3.errors; - else vErrors = vErrors.concat(refVal3.errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.columnDefault !== undefined) { - var errs_1 = errors; - if (!refVal[4](data.columnDefault, (dataPath || '') + '.columnDefault', data, 'columnDefault', rootData)) { - if (vErrors === null) vErrors = refVal[4].errors; - else vErrors = vErrors.concat(refVal[4].errors); - errors = vErrors.length; - } - var valid1 = errors === errs_1; - } - if (data.columnCount !== undefined) { - var errs_1 = errors; - if (typeof data.columnCount !== "number") { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + '.columnCount', - schemaPath: '#/properties/columnCount/type', - params: { - type: 'number' - }, - message: 'should be number' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - var valid1 = errors === errs_1; - } - } else { - var err = { - keyword: 'type', - dataPath: (dataPath || '') + "", - schemaPath: '#/type', - params: { - type: 'object' - }, - message: 'should be object' - }; - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; - } - validate.errors = vErrors; - return errors === 0; - }; -})(); -validate.schema = { - "$id": "streamConfig.json", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "properties": { - "border": { - "$ref": "#/definitions/borders" - }, - "columns": { - "$ref": "#/definitions/columns" - }, - "columnDefault": { - "$ref": "#/definitions/column" - }, - "columnCount": { - "type": "number" - } - }, - "additionalProperties": false, - "definitions": { - "columns": { - "type": "object", - "patternProperties": { - "^[0-9]+$": { - "$ref": "#/definitions/column" - } - }, - "additionalProperties": false - }, - "column": { - "type": "object", - "properties": { - "alignment": { - "type": "string", - "enum": ["left", "right", "center"] - }, - "width": { - "type": "number" - }, - "wrapWord": { - "type": "boolean" - }, - "truncate": { - "type": "number" - }, - "paddingLeft": { - "type": "number" - }, - "paddingRight": { - "type": "number" - } - }, - "additionalProperties": false - }, - "borders": { - "type": "object", - "properties": { - "topBody": { - "$ref": "#/definitions/border" - }, - "topJoin": { - "$ref": "#/definitions/border" - }, - "topLeft": { - "$ref": "#/definitions/border" - }, - "topRight": { - "$ref": "#/definitions/border" - }, - "bottomBody": { - "$ref": "#/definitions/border" - }, - "bottomJoin": { - "$ref": "#/definitions/border" - }, - "bottomLeft": { - "$ref": "#/definitions/border" - }, - "bottomRight": { - "$ref": "#/definitions/border" - }, - "bodyLeft": { - "$ref": "#/definitions/border" - }, - "bodyRight": { - "$ref": "#/definitions/border" - }, - "bodyJoin": { - "$ref": "#/definitions/border" - }, - "joinBody": { - "$ref": "#/definitions/border" - }, - "joinLeft": { - "$ref": "#/definitions/border" - }, - "joinRight": { - "$ref": "#/definitions/border" - }, - "joinJoin": { - "$ref": "#/definitions/border" - } - }, - "additionalProperties": false - }, - "border": { - "type": "string" - } - } -}; -validate.errors = null; -module.exports = validate; \ No newline at end of file diff --git a/node_modules/table/dist/validateTableData.js b/node_modules/table/dist/validateTableData.js deleted file mode 100644 index b5e103c..0000000 --- a/node_modules/table/dist/validateTableData.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -/** - * @typedef {string} cell - */ - -/** - * @typedef {cell[]} validateData~column - */ - -/** - * @param {column[]} rows - * @returns {undefined} - */ -exports.default = rows => { - if (!Array.isArray(rows)) { - throw new TypeError('Table data must be an array.'); - } - - if (rows.length === 0) { - throw new Error('Table must define at least one row.'); - } - - if (rows[0].length === 0) { - throw new Error('Table must define at least one column.'); - } - - const columnNumber = rows[0].length; - - for (const cells of rows) { - if (!Array.isArray(cells)) { - throw new TypeError('Table row data must be an array.'); - } - - if (cells.length !== columnNumber) { - throw new Error('Table must have a consistent number of cells.'); - } - - // @todo Make an exception for newline characters. - // @see https://github.com/gajus/table/issues/9 - for (const cell of cells) { - if (/[\u0001-\u001A]/.test(cell)) { - throw new Error('Table data must not contain control characters.'); - } - } - } -}; \ No newline at end of file diff --git a/node_modules/table/dist/wrapString.js b/node_modules/table/dist/wrapString.js deleted file mode 100644 index 5502a7b..0000000 --- a/node_modules/table/dist/wrapString.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _sliceAnsi = require('slice-ansi'); - -var _sliceAnsi2 = _interopRequireDefault(_sliceAnsi); - -var _stringWidth = require('string-width'); - -var _stringWidth2 = _interopRequireDefault(_stringWidth); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Creates an array of strings split into groups the length of size. - * This function works with strings that contain ASCII characters. - * - * wrapText is different from would-be "chunk" implementation - * in that whitespace characters that occur on a chunk size limit are trimmed. - * - * @param {string} subject - * @param {number} size - * @returns {Array} - */ -exports.default = (subject, size) => { - let subjectSlice; - - subjectSlice = subject; - - const chunks = []; - - do { - chunks.push((0, _sliceAnsi2.default)(subjectSlice, 0, size)); - - subjectSlice = _lodash2.default.trim((0, _sliceAnsi2.default)(subjectSlice, size)); - } while ((0, _stringWidth2.default)(subjectSlice)); - - return chunks; -}; \ No newline at end of file diff --git a/node_modules/table/dist/wrapWord.js b/node_modules/table/dist/wrapWord.js deleted file mode 100644 index 6a7b74e..0000000 --- a/node_modules/table/dist/wrapWord.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _lodash = require('lodash'); - -var _lodash2 = _interopRequireDefault(_lodash); - -var _sliceAnsi = require('slice-ansi'); - -var _sliceAnsi2 = _interopRequireDefault(_sliceAnsi); - -var _stringWidth = require('string-width'); - -var _stringWidth2 = _interopRequireDefault(_stringWidth); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @param {string} input - * @param {number} size - * @returns {Array} - */ -exports.default = (input, size) => { - let subject; - - subject = input; - - const chunks = []; - - // https://regex101.com/r/gY5kZ1/1 - const re = new RegExp('(^.{1,' + size + '}(\\s+|$))|(^.{1,' + (size - 1) + '}(\\\\|/|_|\\.|,|;|-))'); - - do { - let chunk; - - chunk = subject.match(re); - - if (chunk) { - chunk = chunk[0]; - - subject = (0, _sliceAnsi2.default)(subject, (0, _stringWidth2.default)(chunk)); - - chunk = _lodash2.default.trim(chunk); - } else { - chunk = (0, _sliceAnsi2.default)(subject, 0, size); - subject = (0, _sliceAnsi2.default)(subject, size); - } - - chunks.push(chunk); - } while ((0, _stringWidth2.default)(subject)); - - return chunks; -}; \ No newline at end of file diff --git a/node_modules/table/node_modules/ansi-styles/index.js b/node_modules/table/node_modules/ansi-styles/index.js deleted file mode 100644 index 90a871c..0000000 --- a/node_modules/table/node_modules/ansi-styles/index.js +++ /dev/null @@ -1,165 +0,0 @@ -'use strict'; -const colorConvert = require('color-convert'); - -const wrapAnsi16 = (fn, offset) => function () { - const code = fn.apply(colorConvert, arguments); - return `\u001B[${code + offset}m`; -}; - -const wrapAnsi256 = (fn, offset) => function () { - const code = fn.apply(colorConvert, arguments); - return `\u001B[${38 + offset};5;${code}m`; -}; - -const wrapAnsi16m = (fn, offset) => function () { - const rgb = fn.apply(colorConvert, arguments); - return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; -}; - -function assembleStyles() { - const codes = new Map(); - const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - gray: [90, 39], - - // Bright color - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39] - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], - - // Bright color - bgBlackBright: [100, 49], - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49] - } - }; - - // Fix humans - styles.color.grey = styles.color.gray; - - for (const groupName of Object.keys(styles)) { - const group = styles[groupName]; - - for (const styleName of Object.keys(group)) { - const style = group[styleName]; - - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m` - }; - - group[styleName] = styles[styleName]; - - codes.set(style[0], style[1]); - } - - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); - - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false - }); - } - - const ansi2ansi = n => n; - const rgb2rgb = (r, g, b) => [r, g, b]; - - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; - - styles.color.ansi = { - ansi: wrapAnsi16(ansi2ansi, 0) - }; - styles.color.ansi256 = { - ansi256: wrapAnsi256(ansi2ansi, 0) - }; - styles.color.ansi16m = { - rgb: wrapAnsi16m(rgb2rgb, 0) - }; - - styles.bgColor.ansi = { - ansi: wrapAnsi16(ansi2ansi, 10) - }; - styles.bgColor.ansi256 = { - ansi256: wrapAnsi256(ansi2ansi, 10) - }; - styles.bgColor.ansi16m = { - rgb: wrapAnsi16m(rgb2rgb, 10) - }; - - for (let key of Object.keys(colorConvert)) { - if (typeof colorConvert[key] !== 'object') { - continue; - } - - const suite = colorConvert[key]; - - if (key === 'ansi16') { - key = 'ansi'; - } - - if ('ansi16' in suite) { - styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); - styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); - } - - if ('ansi256' in suite) { - styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); - styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); - } - - if ('rgb' in suite) { - styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); - styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); - } - } - - return styles; -} - -// Make the export immutable -Object.defineProperty(module, 'exports', { - enumerable: true, - get: assembleStyles -}); diff --git a/node_modules/table/node_modules/ansi-styles/license b/node_modules/table/node_modules/ansi-styles/license deleted file mode 100644 index e7af2f7..0000000 --- a/node_modules/table/node_modules/ansi-styles/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/table/node_modules/ansi-styles/package.json b/node_modules/table/node_modules/ansi-styles/package.json deleted file mode 100644 index 65edb48..0000000 --- a/node_modules/table/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "ansi-styles", - "version": "3.2.1", - "description": "ANSI escape codes for styling strings in the terminal", - "license": "MIT", - "repository": "chalk/ansi-styles", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=4" - }, - "scripts": { - "test": "xo && ava", - "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" - }, - "files": [ - "index.js" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "color-convert": "^1.9.0" - }, - "devDependencies": { - "ava": "*", - "babel-polyfill": "^6.23.0", - "svg-term-cli": "^2.1.1", - "xo": "*" - }, - "ava": { - "require": "babel-polyfill" - } -} diff --git a/node_modules/table/node_modules/ansi-styles/readme.md b/node_modules/table/node_modules/ansi-styles/readme.md deleted file mode 100644 index 3158e2d..0000000 --- a/node_modules/table/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,147 +0,0 @@ -# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles) - -> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal - -You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. - - - - -## Install - -``` -$ npm install ansi-styles -``` - - -## Usage - -```js -const style = require('ansi-styles'); - -console.log(`${style.green.open}Hello world!${style.green.close}`); - - -// Color conversion between 16/256/truecolor -// NOTE: If conversion goes to 16 colors or 256 colors, the original color -// may be degraded to fit that color palette. This means terminals -// that do not support 16 million colors will best-match the -// original color. -console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close); -console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close); -console.log(style.color.ansi16m.hex('#ABCDEF') + 'Hello world!' + style.color.close); -``` - -## API - -Each style has an `open` and `close` property. - - -## Styles - -### Modifiers - -- `reset` -- `bold` -- `dim` -- `italic` *(Not widely supported)* -- `underline` -- `inverse` -- `hidden` -- `strikethrough` *(Not widely supported)* - -### Colors - -- `black` -- `red` -- `green` -- `yellow` -- `blue` -- `magenta` -- `cyan` -- `white` -- `gray` ("bright black") -- `redBright` -- `greenBright` -- `yellowBright` -- `blueBright` -- `magentaBright` -- `cyanBright` -- `whiteBright` - -### Background colors - -- `bgBlack` -- `bgRed` -- `bgGreen` -- `bgYellow` -- `bgBlue` -- `bgMagenta` -- `bgCyan` -- `bgWhite` -- `bgBlackBright` -- `bgRedBright` -- `bgGreenBright` -- `bgYellowBright` -- `bgBlueBright` -- `bgMagentaBright` -- `bgCyanBright` -- `bgWhiteBright` - - -## Advanced usage - -By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. - -- `style.modifier` -- `style.color` -- `style.bgColor` - -###### Example - -```js -console.log(style.color.green.open); -``` - -Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values. - -###### Example - -```js -console.log(style.codes.get(36)); -//=> 39 -``` - - -## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728) - -`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors. - -To use these, call the associated conversion function with the intended output, for example: - -```js -style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code -style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code - -style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code -style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code - -style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code -style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code -``` - - -## Related - -- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - -## License - -MIT diff --git a/node_modules/table/node_modules/chalk/index.js b/node_modules/table/node_modules/chalk/index.js deleted file mode 100644 index 1cc5fa8..0000000 --- a/node_modules/table/node_modules/chalk/index.js +++ /dev/null @@ -1,228 +0,0 @@ -'use strict'; -const escapeStringRegexp = require('escape-string-regexp'); -const ansiStyles = require('ansi-styles'); -const stdoutColor = require('supports-color').stdout; - -const template = require('./templates.js'); - -const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); - -// `supportsColor.level` → `ansiStyles.color[name]` mapping -const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m']; - -// `color-convert` models to exclude from the Chalk API due to conflicts and such -const skipModels = new Set(['gray']); - -const styles = Object.create(null); - -function applyOptions(obj, options) { - options = options || {}; - - // Detect level if not set manually - const scLevel = stdoutColor ? stdoutColor.level : 0; - obj.level = options.level === undefined ? scLevel : options.level; - obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0; -} - -function Chalk(options) { - // We check for this.template here since calling `chalk.constructor()` - // by itself will have a `this` of a previously constructed chalk object - if (!this || !(this instanceof Chalk) || this.template) { - const chalk = {}; - applyOptions(chalk, options); - - chalk.template = function () { - const args = [].slice.call(arguments); - return chalkTag.apply(null, [chalk.template].concat(args)); - }; - - Object.setPrototypeOf(chalk, Chalk.prototype); - Object.setPrototypeOf(chalk.template, chalk); - - chalk.template.constructor = Chalk; - - return chalk.template; - } - - applyOptions(this, options); -} - -// Use bright blue on Windows as the normal blue color is illegible -if (isSimpleWindowsTerm) { - ansiStyles.blue.open = '\u001B[94m'; -} - -for (const key of Object.keys(ansiStyles)) { - ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); - - styles[key] = { - get() { - const codes = ansiStyles[key]; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key); - } - }; -} - -styles.visible = { - get() { - return build.call(this, this._styles || [], true, 'visible'); - } -}; - -ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g'); -for (const model of Object.keys(ansiStyles.color.ansi)) { - if (skipModels.has(model)) { - continue; - } - - styles[model] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments); - const codes = { - open, - close: ansiStyles.color.close, - closeRe: ansiStyles.color.closeRe - }; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); - }; - } - }; -} - -ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g'); -for (const model of Object.keys(ansiStyles.bgColor.ansi)) { - if (skipModels.has(model)) { - continue; - } - - const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); - styles[bgModel] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments); - const codes = { - open, - close: ansiStyles.bgColor.close, - closeRe: ansiStyles.bgColor.closeRe - }; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); - }; - } - }; -} - -const proto = Object.defineProperties(() => {}, styles); - -function build(_styles, _empty, key) { - const builder = function () { - return applyStyle.apply(builder, arguments); - }; - - builder._styles = _styles; - builder._empty = _empty; - - const self = this; - - Object.defineProperty(builder, 'level', { - enumerable: true, - get() { - return self.level; - }, - set(level) { - self.level = level; - } - }); - - Object.defineProperty(builder, 'enabled', { - enumerable: true, - get() { - return self.enabled; - }, - set(enabled) { - self.enabled = enabled; - } - }); - - // See below for fix regarding invisible grey/dim combination on Windows - builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey'; - - // `__proto__` is used because we must return a function, but there is - // no way to create a function with a different prototype - builder.__proto__ = proto; // eslint-disable-line no-proto - - return builder; -} - -function applyStyle() { - // Support varags, but simply cast to string in case there's only one arg - const args = arguments; - const argsLen = args.length; - let str = String(arguments[0]); - - if (argsLen === 0) { - return ''; - } - - if (argsLen > 1) { - // Don't slice `arguments`, it prevents V8 optimizations - for (let a = 1; a < argsLen; a++) { - str += ' ' + args[a]; - } - } - - if (!this.enabled || this.level <= 0 || !str) { - return this._empty ? '' : str; - } - - // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, - // see https://github.com/chalk/chalk/issues/58 - // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. - const originalDim = ansiStyles.dim.open; - if (isSimpleWindowsTerm && this.hasGrey) { - ansiStyles.dim.open = ''; - } - - for (const code of this._styles.slice().reverse()) { - // Replace any instances already present with a re-opening code - // otherwise only the part of the string until said closing code - // will be colored, and the rest will simply be 'plain'. - str = code.open + str.replace(code.closeRe, code.open) + code.close; - - // Close the styling before a linebreak and reopen - // after next line to fix a bleed issue on macOS - // https://github.com/chalk/chalk/pull/92 - str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`); - } - - // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue - ansiStyles.dim.open = originalDim; - - return str; -} - -function chalkTag(chalk, strings) { - if (!Array.isArray(strings)) { - // If chalk() was called by itself or with a string, - // return the string itself as a string. - return [].slice.call(arguments, 1).join(' '); - } - - const args = [].slice.call(arguments, 2); - const parts = [strings.raw[0]]; - - for (let i = 1; i < strings.length; i++) { - parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&')); - parts.push(String(strings.raw[i])); - } - - return template(chalk, parts.join('')); -} - -Object.defineProperties(Chalk.prototype, styles); - -module.exports = Chalk(); // eslint-disable-line new-cap -module.exports.supportsColor = stdoutColor; -module.exports.default = module.exports; // For TypeScript diff --git a/node_modules/table/node_modules/chalk/index.js.flow b/node_modules/table/node_modules/chalk/index.js.flow deleted file mode 100644 index 622caaa..0000000 --- a/node_modules/table/node_modules/chalk/index.js.flow +++ /dev/null @@ -1,93 +0,0 @@ -// @flow strict - -type TemplateStringsArray = $ReadOnlyArray; - -export type Level = $Values<{ - None: 0, - Basic: 1, - Ansi256: 2, - TrueColor: 3 -}>; - -export type ChalkOptions = {| - enabled?: boolean, - level?: Level -|}; - -export type ColorSupport = {| - level: Level, - hasBasic: boolean, - has256: boolean, - has16m: boolean -|}; - -export interface Chalk { - (...text: string[]): string, - (text: TemplateStringsArray, ...placeholders: string[]): string, - constructor(options?: ChalkOptions): Chalk, - enabled: boolean, - level: Level, - rgb(r: number, g: number, b: number): Chalk, - hsl(h: number, s: number, l: number): Chalk, - hsv(h: number, s: number, v: number): Chalk, - hwb(h: number, w: number, b: number): Chalk, - bgHex(color: string): Chalk, - bgKeyword(color: string): Chalk, - bgRgb(r: number, g: number, b: number): Chalk, - bgHsl(h: number, s: number, l: number): Chalk, - bgHsv(h: number, s: number, v: number): Chalk, - bgHwb(h: number, w: number, b: number): Chalk, - hex(color: string): Chalk, - keyword(color: string): Chalk, - - +reset: Chalk, - +bold: Chalk, - +dim: Chalk, - +italic: Chalk, - +underline: Chalk, - +inverse: Chalk, - +hidden: Chalk, - +strikethrough: Chalk, - - +visible: Chalk, - - +black: Chalk, - +red: Chalk, - +green: Chalk, - +yellow: Chalk, - +blue: Chalk, - +magenta: Chalk, - +cyan: Chalk, - +white: Chalk, - +gray: Chalk, - +grey: Chalk, - +blackBright: Chalk, - +redBright: Chalk, - +greenBright: Chalk, - +yellowBright: Chalk, - +blueBright: Chalk, - +magentaBright: Chalk, - +cyanBright: Chalk, - +whiteBright: Chalk, - - +bgBlack: Chalk, - +bgRed: Chalk, - +bgGreen: Chalk, - +bgYellow: Chalk, - +bgBlue: Chalk, - +bgMagenta: Chalk, - +bgCyan: Chalk, - +bgWhite: Chalk, - +bgBlackBright: Chalk, - +bgRedBright: Chalk, - +bgGreenBright: Chalk, - +bgYellowBright: Chalk, - +bgBlueBright: Chalk, - +bgMagentaBright: Chalk, - +bgCyanBright: Chalk, - +bgWhiteBrigh: Chalk, - - supportsColor: ColorSupport -}; - -declare module.exports: Chalk; diff --git a/node_modules/table/node_modules/chalk/license b/node_modules/table/node_modules/chalk/license deleted file mode 100644 index e7af2f7..0000000 --- a/node_modules/table/node_modules/chalk/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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. diff --git a/node_modules/table/node_modules/chalk/package.json b/node_modules/table/node_modules/chalk/package.json deleted file mode 100644 index bc32468..0000000 --- a/node_modules/table/node_modules/chalk/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "chalk", - "version": "2.4.2", - "description": "Terminal string styling done right", - "license": "MIT", - "repository": "chalk/chalk", - "engines": { - "node": ">=4" - }, - "scripts": { - "test": "xo && tsc --project types && flow --max-warnings=0 && nyc ava", - "bench": "matcha benchmark.js", - "coveralls": "nyc report --reporter=text-lcov | coveralls" - }, - "files": [ - "index.js", - "templates.js", - "types/index.d.ts", - "index.js.flow" - ], - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "str", - "ansi", - "style", - "styles", - "tty", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "devDependencies": { - "ava": "*", - "coveralls": "^3.0.0", - "execa": "^0.9.0", - "flow-bin": "^0.68.0", - "import-fresh": "^2.0.0", - "matcha": "^0.7.0", - "nyc": "^11.0.2", - "resolve-from": "^4.0.0", - "typescript": "^2.5.3", - "xo": "*" - }, - "types": "types/index.d.ts", - "xo": { - "envs": [ - "node", - "mocha" - ], - "ignores": [ - "test/_flow.js" - ] - } -} diff --git a/node_modules/table/node_modules/chalk/readme.md b/node_modules/table/node_modules/chalk/readme.md deleted file mode 100644 index d298e2c..0000000 --- a/node_modules/table/node_modules/chalk/readme.md +++ /dev/null @@ -1,314 +0,0 @@ -

-
-
- Chalk -
-
-
-

- -> Terminal string styling done right - -[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk) [![Coverage Status](https://coveralls.io/repos/github/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/github/chalk/chalk?branch=master) [![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/xojs/xo) [![Mentioned in Awesome Node.js](https://awesome.re/mentioned-badge.svg)](https://github.com/sindresorhus/awesome-nodejs) - -### [See what's new in Chalk 2](https://github.com/chalk/chalk/releases/tag/v2.0.0) - - - - -## Highlights - -- Expressive API -- Highly performant -- Ability to nest styles -- [256/Truecolor color support](#256-and-truecolor-color-support) -- Auto-detects color support -- Doesn't extend `String.prototype` -- Clean and focused -- Actively maintained -- [Used by ~23,000 packages](https://www.npmjs.com/browse/depended/chalk) as of December 31, 2017 - - -## Install - -```console -$ npm install chalk -``` - - - - - - -## Usage - -```js -const chalk = require('chalk'); - -console.log(chalk.blue('Hello world!')); -``` - -Chalk comes with an easy to use composable API where you just chain and nest the styles you want. - -```js -const chalk = require('chalk'); -const log = console.log; - -// Combine styled and normal strings -log(chalk.blue('Hello') + ' World' + chalk.red('!')); - -// Compose multiple styles using the chainable API -log(chalk.blue.bgRed.bold('Hello world!')); - -// Pass in multiple arguments -log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz')); - -// Nest styles -log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!')); - -// Nest styles of the same type even (color, underline, background) -log(chalk.green( - 'I am a green line ' + - chalk.blue.underline.bold('with a blue substring') + - ' that becomes green again!' -)); - -// ES2015 template literal -log(` -CPU: ${chalk.red('90%')} -RAM: ${chalk.green('40%')} -DISK: ${chalk.yellow('70%')} -`); - -// ES2015 tagged template literal -log(chalk` -CPU: {red ${cpu.totalPercent}%} -RAM: {green ${ram.used / ram.total * 100}%} -DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%} -`); - -// Use RGB colors in terminal emulators that support it. -log(chalk.keyword('orange')('Yay for orange colored text!')); -log(chalk.rgb(123, 45, 67).underline('Underlined reddish color')); -log(chalk.hex('#DEADED').bold('Bold gray!')); -``` - -Easily define your own themes: - -```js -const chalk = require('chalk'); - -const error = chalk.bold.red; -const warning = chalk.keyword('orange'); - -console.log(error('Error!')); -console.log(warning('Warning!')); -``` - -Take advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args): - -```js -const name = 'Sindre'; -console.log(chalk.green('Hello %s'), name); -//=> 'Hello Sindre' -``` - - -## API - -### chalk.`